summaryrefslogtreecommitdiffstats
path: root/src/doc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /src/doc
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/doc')
-rw-r--r--src/doc/book/.cargo/config3
-rw-r--r--src/doc/book/.github/ISSUE_TEMPLATE/bug_report.md13
-rw-r--r--src/doc/book/.github/ISSUE_TEMPLATE/new_translation.md7
-rw-r--r--src/doc/book/.github/workflows/main.yml72
-rw-r--r--src/doc/book/2018-edition/book.toml7
-rw-r--r--src/doc/book/2018-edition/dot/trpl04-01.dot26
-rw-r--r--src/doc/book/2018-edition/dot/trpl04-02.dot35
-rw-r--r--src/doc/book/2018-edition/dot/trpl04-03.dot44
-rw-r--r--src/doc/book/2018-edition/dot/trpl04-04.dot35
-rw-r--r--src/doc/book/2018-edition/dot/trpl04-05.dot32
-rw-r--r--src/doc/book/2018-edition/dot/trpl04-06.dot41
-rw-r--r--src/doc/book/2018-edition/dot/trpl15-01.dot24
-rw-r--r--src/doc/book/2018-edition/dot/trpl15-02.dot18
-rw-r--r--src/doc/book/2018-edition/dot/trpl15-03.dot51
-rw-r--r--src/doc/book/2018-edition/ferris.css33
-rw-r--r--src/doc/book/2018-edition/ferris.js51
-rw-r--r--src/doc/book/2018-edition/src/SUMMARY.md132
-rw-r--r--src/doc/book/2018-edition/src/appendix-00.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-01-keywords.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-02-operators.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-03-derivable-traits.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-04-useful-development-tools.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-05-editions.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-06-translation.md10
-rw-r--r--src/doc/book/2018-edition/src/appendix-07-nightly-rust.md10
-rw-r--r--src/doc/book/2018-edition/src/ch00-00-introduction.md10
-rw-r--r--src/doc/book/2018-edition/src/ch01-00-getting-started.md10
-rw-r--r--src/doc/book/2018-edition/src/ch01-01-installation.md10
-rw-r--r--src/doc/book/2018-edition/src/ch01-02-hello-world.md10
-rw-r--r--src/doc/book/2018-edition/src/ch01-03-hello-cargo.md10
-rw-r--r--src/doc/book/2018-edition/src/ch02-00-guessing-game-tutorial.md10
-rw-r--r--src/doc/book/2018-edition/src/ch03-00-common-programming-concepts.md10
-rw-r--r--src/doc/book/2018-edition/src/ch03-01-variables-and-mutability.md10
-rw-r--r--src/doc/book/2018-edition/src/ch03-02-data-types.md10
-rw-r--r--src/doc/book/2018-edition/src/ch03-03-how-functions-work.md10
-rw-r--r--src/doc/book/2018-edition/src/ch03-04-comments.md10
-rw-r--r--src/doc/book/2018-edition/src/ch03-05-control-flow.md10
-rw-r--r--src/doc/book/2018-edition/src/ch04-00-understanding-ownership.md10
-rw-r--r--src/doc/book/2018-edition/src/ch04-01-what-is-ownership.md10
-rw-r--r--src/doc/book/2018-edition/src/ch04-02-references-and-borrowing.md10
-rw-r--r--src/doc/book/2018-edition/src/ch04-03-slices.md10
-rw-r--r--src/doc/book/2018-edition/src/ch05-00-structs.md10
-rw-r--r--src/doc/book/2018-edition/src/ch05-01-defining-structs.md10
-rw-r--r--src/doc/book/2018-edition/src/ch05-02-example-structs.md10
-rw-r--r--src/doc/book/2018-edition/src/ch05-03-method-syntax.md10
-rw-r--r--src/doc/book/2018-edition/src/ch06-00-enums.md10
-rw-r--r--src/doc/book/2018-edition/src/ch06-01-defining-an-enum.md10
-rw-r--r--src/doc/book/2018-edition/src/ch06-02-match.md10
-rw-r--r--src/doc/book/2018-edition/src/ch06-03-if-let.md10
-rw-r--r--src/doc/book/2018-edition/src/ch07-00-packages-crates-and-modules.md10
-rw-r--r--src/doc/book/2018-edition/src/ch07-01-packages-and-crates-for-making-libraries-and-executables.md10
-rw-r--r--src/doc/book/2018-edition/src/ch07-02-modules-and-use-to-control-scope-and-privacy.md10
-rw-r--r--src/doc/book/2018-edition/src/ch08-00-common-collections.md10
-rw-r--r--src/doc/book/2018-edition/src/ch08-01-vectors.md10
-rw-r--r--src/doc/book/2018-edition/src/ch08-02-strings.md10
-rw-r--r--src/doc/book/2018-edition/src/ch08-03-hash-maps.md10
-rw-r--r--src/doc/book/2018-edition/src/ch09-00-error-handling.md10
-rw-r--r--src/doc/book/2018-edition/src/ch09-01-unrecoverable-errors-with-panic.md10
-rw-r--r--src/doc/book/2018-edition/src/ch09-02-recoverable-errors-with-result.md10
-rw-r--r--src/doc/book/2018-edition/src/ch09-03-to-panic-or-not-to-panic.md10
-rw-r--r--src/doc/book/2018-edition/src/ch10-00-generics.md10
-rw-r--r--src/doc/book/2018-edition/src/ch10-01-syntax.md10
-rw-r--r--src/doc/book/2018-edition/src/ch10-02-traits.md10
-rw-r--r--src/doc/book/2018-edition/src/ch10-03-lifetime-syntax.md10
-rw-r--r--src/doc/book/2018-edition/src/ch11-00-testing.md10
-rw-r--r--src/doc/book/2018-edition/src/ch11-01-writing-tests.md10
-rw-r--r--src/doc/book/2018-edition/src/ch11-02-running-tests.md10
-rw-r--r--src/doc/book/2018-edition/src/ch11-03-test-organization.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-00-an-io-project.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-01-accepting-command-line-arguments.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-02-reading-a-file.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-03-improving-error-handling-and-modularity.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-04-testing-the-librarys-functionality.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-05-working-with-environment-variables.md10
-rw-r--r--src/doc/book/2018-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md10
-rw-r--r--src/doc/book/2018-edition/src/ch13-00-functional-features.md10
-rw-r--r--src/doc/book/2018-edition/src/ch13-01-closures.md10
-rw-r--r--src/doc/book/2018-edition/src/ch13-02-iterators.md10
-rw-r--r--src/doc/book/2018-edition/src/ch13-03-improving-our-io-project.md10
-rw-r--r--src/doc/book/2018-edition/src/ch13-04-performance.md10
-rw-r--r--src/doc/book/2018-edition/src/ch14-00-more-about-cargo.md10
-rw-r--r--src/doc/book/2018-edition/src/ch14-01-release-profiles.md10
-rw-r--r--src/doc/book/2018-edition/src/ch14-02-publishing-to-crates-io.md10
-rw-r--r--src/doc/book/2018-edition/src/ch14-03-cargo-workspaces.md10
-rw-r--r--src/doc/book/2018-edition/src/ch14-04-installing-binaries.md10
-rw-r--r--src/doc/book/2018-edition/src/ch14-05-extending-cargo.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-00-smart-pointers.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-01-box.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-02-deref.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-03-drop.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-04-rc.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-05-interior-mutability.md10
-rw-r--r--src/doc/book/2018-edition/src/ch15-06-reference-cycles.md10
-rw-r--r--src/doc/book/2018-edition/src/ch16-00-concurrency.md10
-rw-r--r--src/doc/book/2018-edition/src/ch16-01-threads.md10
-rw-r--r--src/doc/book/2018-edition/src/ch16-02-message-passing.md10
-rw-r--r--src/doc/book/2018-edition/src/ch16-03-shared-state.md10
-rw-r--r--src/doc/book/2018-edition/src/ch16-04-extensible-concurrency-sync-and-send.md10
-rw-r--r--src/doc/book/2018-edition/src/ch17-00-oop.md10
-rw-r--r--src/doc/book/2018-edition/src/ch17-01-what-is-oo.md10
-rw-r--r--src/doc/book/2018-edition/src/ch17-02-trait-objects.md10
-rw-r--r--src/doc/book/2018-edition/src/ch17-03-oo-design-patterns.md10
-rw-r--r--src/doc/book/2018-edition/src/ch18-00-patterns.md10
-rw-r--r--src/doc/book/2018-edition/src/ch18-01-all-the-places-for-patterns.md10
-rw-r--r--src/doc/book/2018-edition/src/ch18-02-refutability.md10
-rw-r--r--src/doc/book/2018-edition/src/ch18-03-pattern-syntax.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-00-advanced-features.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-01-unsafe-rust.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-02-advanced-lifetimes.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-03-advanced-traits.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-04-advanced-types.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-05-advanced-functions-and-closures.md10
-rw-r--r--src/doc/book/2018-edition/src/ch19-06-macros.md10
-rw-r--r--src/doc/book/2018-edition/src/ch20-00-final-project-a-web-server.md10
-rw-r--r--src/doc/book/2018-edition/src/ch20-01-single-threaded.md10
-rw-r--r--src/doc/book/2018-edition/src/ch20-02-multithreaded.md10
-rw-r--r--src/doc/book/2018-edition/src/ch20-03-graceful-shutdown-and-cleanup.md10
-rw-r--r--src/doc/book/2018-edition/src/foreword.md10
-rw-r--r--src/doc/book/2018-edition/src/img/ferris/does_not_compile.svg72
-rw-r--r--src/doc/book/2018-edition/src/img/ferris/not_desired_behavior.svg75
-rw-r--r--src/doc/book/2018-edition/src/img/ferris/panics.svg70
-rw-r--r--src/doc/book/2018-edition/src/img/ferris/unsafe.svg291
-rw-r--r--src/doc/book/2018-edition/src/img/trpl04-01.svg68
-rw-r--r--src/doc/book/2018-edition/src/img/trpl04-02.svg95
-rw-r--r--src/doc/book/2018-edition/src/img/trpl04-03.svg123
-rw-r--r--src/doc/book/2018-edition/src/img/trpl04-04.svg96
-rw-r--r--src/doc/book/2018-edition/src/img/trpl04-05.svg87
-rw-r--r--src/doc/book/2018-edition/src/img/trpl04-06.svg115
-rw-r--r--src/doc/book/2018-edition/src/img/trpl14-01.pngbin0 -> 65437 bytes
-rw-r--r--src/doc/book/2018-edition/src/img/trpl14-02.pngbin0 -> 175642 bytes
-rw-r--r--src/doc/book/2018-edition/src/img/trpl14-03.pngbin0 -> 43085 bytes
-rw-r--r--src/doc/book/2018-edition/src/img/trpl14-04.pngbin0 -> 68900 bytes
-rw-r--r--src/doc/book/2018-edition/src/img/trpl15-01.svg43
-rw-r--r--src/doc/book/2018-edition/src/img/trpl15-02.svg26
-rw-r--r--src/doc/book/2018-edition/src/img/trpl15-03.svg109
-rw-r--r--src/doc/book/2018-edition/src/img/trpl15-04.svg55
-rw-r--r--src/doc/book/2018-edition/src/img/trpl20-01.pngbin0 -> 8491 bytes
-rw-r--r--src/doc/book/2018-edition/src/theme/2018-edition.css9
-rw-r--r--src/doc/book/2018-edition/src/theme/index.hbs37
-rw-r--r--src/doc/book/ADMIN_TASKS.md130
-rw-r--r--src/doc/book/CONTRIBUTING.md71
-rw-r--r--src/doc/book/COPYRIGHT290
-rw-r--r--src/doc/book/Cargo.lock271
-rw-r--r--src/doc/book/Cargo.toml46
-rw-r--r--src/doc/book/LICENSE-APACHE201
-rw-r--r--src/doc/book/LICENSE-MIT25
-rw-r--r--src/doc/book/README.md105
-rw-r--r--src/doc/book/book.toml8
-rw-r--r--src/doc/book/ci/dictionary.txt585
-rwxr-xr-xsrc/doc/book/ci/spellcheck.sh101
-rwxr-xr-xsrc/doc/book/ci/validate.sh8
-rw-r--r--src/doc/book/dot/trpl04-01.dot26
-rw-r--r--src/doc/book/dot/trpl04-02.dot35
-rw-r--r--src/doc/book/dot/trpl04-03.dot44
-rw-r--r--src/doc/book/dot/trpl04-04.dot35
-rw-r--r--src/doc/book/dot/trpl04-05.dot32
-rw-r--r--src/doc/book/dot/trpl04-06.dot41
-rw-r--r--src/doc/book/dot/trpl15-01.dot24
-rw-r--r--src/doc/book/dot/trpl15-02.dot18
-rw-r--r--src/doc/book/dot/trpl15-03.dot51
-rw-r--r--src/doc/book/dot/trpl15-04.dot16
-rw-r--r--src/doc/book/ferris.css45
-rw-r--r--src/doc/book/ferris.js65
-rw-r--r--src/doc/book/first-edition/book.toml3
-rw-r--r--src/doc/book/first-edition/src/README.md10
-rw-r--r--src/doc/book/first-edition/src/SUMMARY.md60
-rw-r--r--src/doc/book/first-edition/src/associated-types.md10
-rw-r--r--src/doc/book/first-edition/src/attributes.md10
-rw-r--r--src/doc/book/first-edition/src/bibliography.md10
-rw-r--r--src/doc/book/first-edition/src/borrow-and-asref.md10
-rw-r--r--src/doc/book/first-edition/src/casting-between-types.md10
-rw-r--r--src/doc/book/first-edition/src/choosing-your-guarantees.md10
-rw-r--r--src/doc/book/first-edition/src/closures.md10
-rw-r--r--src/doc/book/first-edition/src/comments.md10
-rw-r--r--src/doc/book/first-edition/src/concurrency.md10
-rw-r--r--src/doc/book/first-edition/src/conditional-compilation.md10
-rw-r--r--src/doc/book/first-edition/src/const-and-static.md10
-rw-r--r--src/doc/book/first-edition/src/crates-and-modules.md10
-rw-r--r--src/doc/book/first-edition/src/deref-coercions.md10
-rw-r--r--src/doc/book/first-edition/src/documentation.md10
-rw-r--r--src/doc/book/first-edition/src/drop.md10
-rw-r--r--src/doc/book/first-edition/src/effective-rust.md10
-rw-r--r--src/doc/book/first-edition/src/enums.md10
-rw-r--r--src/doc/book/first-edition/src/error-handling.md10
-rw-r--r--src/doc/book/first-edition/src/ffi.md10
-rw-r--r--src/doc/book/first-edition/src/functions.md10
-rw-r--r--src/doc/book/first-edition/src/generics.md10
-rw-r--r--src/doc/book/first-edition/src/getting-started.md10
-rw-r--r--src/doc/book/first-edition/src/glossary.md10
-rw-r--r--src/doc/book/first-edition/src/guessing-game.md10
-rw-r--r--src/doc/book/first-edition/src/if-let.md10
-rw-r--r--src/doc/book/first-edition/src/if.md10
-rw-r--r--src/doc/book/first-edition/src/iterators.md10
-rw-r--r--src/doc/book/first-edition/src/lifetimes.md10
-rw-r--r--src/doc/book/first-edition/src/loops.md10
-rw-r--r--src/doc/book/first-edition/src/macros.md10
-rw-r--r--src/doc/book/first-edition/src/match.md10
-rw-r--r--src/doc/book/first-edition/src/method-syntax.md10
-rw-r--r--src/doc/book/first-edition/src/mutability.md10
-rw-r--r--src/doc/book/first-edition/src/operators-and-overloading.md10
-rw-r--r--src/doc/book/first-edition/src/ownership.md10
-rw-r--r--src/doc/book/first-edition/src/patterns.md10
-rw-r--r--src/doc/book/first-edition/src/primitive-types.md10
-rw-r--r--src/doc/book/first-edition/src/procedural-macros.md10
-rw-r--r--src/doc/book/first-edition/src/raw-pointers.md10
-rw-r--r--src/doc/book/first-edition/src/references-and-borrowing.md10
-rw-r--r--src/doc/book/first-edition/src/release-channels.md10
-rw-r--r--src/doc/book/first-edition/src/strings.md10
-rw-r--r--src/doc/book/first-edition/src/structs.md10
-rw-r--r--src/doc/book/first-edition/src/syntax-and-semantics.md10
-rw-r--r--src/doc/book/first-edition/src/syntax-index.md10
-rw-r--r--src/doc/book/first-edition/src/testing.md10
-rw-r--r--src/doc/book/first-edition/src/the-stack-and-the-heap.md10
-rw-r--r--src/doc/book/first-edition/src/trait-objects.md10
-rw-r--r--src/doc/book/first-edition/src/traits.md10
-rw-r--r--src/doc/book/first-edition/src/type-aliases.md10
-rw-r--r--src/doc/book/first-edition/src/ufcs.md10
-rw-r--r--src/doc/book/first-edition/src/unsafe.md10
-rw-r--r--src/doc/book/first-edition/src/unsized-types.md10
-rw-r--r--src/doc/book/first-edition/src/using-rust-without-the-standard-library.md10
-rw-r--r--src/doc/book/first-edition/src/variable-bindings.md10
-rw-r--r--src/doc/book/first-edition/src/vectors.md10
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs31
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/src/main.rs15
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs28
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/output.txt20
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs32
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs45
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs35
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/output.txt5
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs3
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt13
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/src/main.rs13
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs33
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/src/main.rs40
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/src/main.rs38
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/src/main.rs3
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/src/main.rs11
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/output.txt9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/src/main.rs10
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/output.txt16
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/output.txt6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/output.txt6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/src/main.rs12
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/output.txt12
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/src/main.rs5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs17
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/src/main.rs5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/src/main.rs5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/src/main.rs3
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/src/main.rs9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/src/main.rs3
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/src/main.rs22
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/output.txt6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/src/main.rs9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/output.txt34
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/rustfmt-ignore1
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs3
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs8
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/src/main.rs9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/src/main.rs9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/output.txt14
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/src/main.rs9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/src/main.rs3
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs4
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/src/main.rs9
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/src/main.rs11
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/output.txt10
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/output.txt5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/src/main.rs13
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/output.txt12
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/src/main.rs7
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/output.txt13
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/src/main.rs21
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/src/main.rs5
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/src/main.rs13
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/src/main.rs6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/output.txt10
-rw-r--r--src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/src/main.rs3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-01/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-01/src/main.rs9
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-02/src/main.rs6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-03/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-03/src/main.rs23
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-04/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-04/src/main.rs29
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-05/src/main.rs13
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-06/output.txt12
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-06/src/main.rs9
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-07/src/main.rs21
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-08/src/main.rs24
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs36
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/src/main.rs9
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/src/main.rs10
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/src/main.rs6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/output.txt17
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/src/main.rs8
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/src/main.rs8
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/src/main.rs8
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs15
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs14
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs9
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/output.txt15
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/src/main.rs10
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/src/main.rs11
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/output.txt16
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/src/main.rs11
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/src/main.rs13
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt16
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/src/main.rs9
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/src/main.rs13
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs11
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs8
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs15
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/output.txt16
-rw-r--r--src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs23
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/src/main.rs10
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/src/main.rs17
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/src/main.rs19
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/src/main.rs24
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/src/main.rs24
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/src/main.rs28
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/src/main.rs26
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/output.txt5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs17
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/src/main.rs12
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/src/main.rs20
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/output.txt14
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/src/main.rs13
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/output.txt5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/src/main.rs14
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/src/main.rs23
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/src/main.rs17
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/src/main.rs35
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/src/main.rs37
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/src/main.rs7
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/output.txt31
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/src/main.rs15
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs20
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/src/main.rs5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/output.txt9
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/src/main.rs15
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/src/main.rs24
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/output.txt18
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/src/main.rs13
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/output.txt8
-rw-r--r--src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/src/main.rs14
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/src/main.rs23
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs10
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/src/main.rs19
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/src/main.rs17
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs18
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/src/main.rs9
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs22
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/src/main.rs12
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/src/main.rs12
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/src/main.rs11
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/src/main.rs19
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/src/main.rs8
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/output.txt22
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/src/main.rs8
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/src/main.rs22
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/src/main.rs31
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/output.txt18
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/src/main.rs13
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/src/main.rs8
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/src/main.rs24
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/src/main.rs25
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/src/main.rs14
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/src/main.rs14
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs13
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/src/lib.rs15
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/output.txt28
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/output.txt28
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/src/lib.rs10
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/src/lib.rs11
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/src/lib.rs11
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/output.txt19
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/src/lib.rs11
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/src/main.rs6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/src/lib.rs18
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/src/lib.rs18
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/src/lib.rs11
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/src/main.rs32
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/src/lib.rs2
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/src/lib.rs1
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs3
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs7
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.toml9
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/src/main.rs31
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house.rs1
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs1
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/lib.rs7
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/output.txt5
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden.rs1
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden/vegetables.rs2
-rw-r--r--src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs10
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs14
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt16
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs11
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs15
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs9
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs10
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs5
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs19
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs8
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs7
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt20
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs10
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs13
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs13
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs12
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs13
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs16
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs9
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs9
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs14
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt6
-rw-r--r--src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs5
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-01/output.txt6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-01/src/main.rs5
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-03/src/main.rs5
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-04/output.txt6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-04/src/main.rs10
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-05/src/main.rs19
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-06/src/main.rs24
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-07/src/main.rs16
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-08/src/main.rs17
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-09/src/main.rs12
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-10/output.txt15
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-10/src/main.rs5
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-11/src/main.rs15
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-12/src/main.rs8
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch09-error-handling/listing-09-13/src/main.rs55
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-01-panic/output.txt6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-01-panic/src/main.rs3
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/src/main.rs5
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-05-expect/src/main.rs6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/src/main.rs9
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.lock83
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/src/main.rs47
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/src/main.rs18
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/src/main.rs25
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/src/main.rs31
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs43
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/output.txt17
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs23
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs9
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/output.txt10
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs8
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs10
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs16
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs24
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs22
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/src/lib.rs31
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/src/lib.rs29
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/src/lib.rs22
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/output.txt15
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/src/main.rs10
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/src/main.rs10
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/rustfmt-ignore3
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/src/main.rs8
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/src/main.rs7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/output.txt16
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/src/main.rs17
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/src/main.rs17
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/src/main.rs19
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/output.txt14
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/src/main.rs19
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/src/main.rs11
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/src/main.rs29
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/lib.rs29
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/main.rs14
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/main.rs17
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs24
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/main.rs16
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/src/lib.rs35
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/src/lib.rs42
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/src/lib.rs56
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/src/lib.rs9
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/src/main.rs13
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/output.txt10
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/src/main.rs14
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs28
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/src/main.rs31
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/output.txt16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs8
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/output.txt22
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/src/lib.rs14
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/output.txt16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/src/lib.rs32
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/output.txt16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/output.txt16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/src/lib.rs24
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/src/lib.rs36
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/output.txt25
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/src/lib.rs21
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/output.txt18
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/src/lib.rs23
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/output.txt23
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/tests/integration_test.rs6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/output.txt16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/src/lib.rs7
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/output.txt17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/src/lib.rs49
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/output.txt22
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/src/lib.rs47
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/output.txt23
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/src/lib.rs15
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/src/lib.rs14
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/output.txt21
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/src/lib.rs16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/output.txt21
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/src/lib.rs20
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/output.txt19
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/output.txt23
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/src/lib.rs34
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs11
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/output.txt17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/src/lib.rs10
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/output.txt29
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/common.rs3
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/integration_test.rs6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/common/mod.rs3
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/integration_test.rs9
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/output.txt34
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/src/lib.rs21
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/output.txt10
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/src/lib.rs23
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/output.txt11
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/src/lib.rs23
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/output.txt16
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/src/lib.rs12
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/output.txt10
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/tests/integration_test.rs6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-01/output.txt7
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-01/src/main.rs6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-02/output.txt6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-02/src/main.rs11
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-03/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-03/src/main.rs11
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-04/output.txt17
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-04/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-04/src/main.rs22
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-05/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-05/src/main.rs29
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-06/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-06/src/main.rs34
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-07/output.txt6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-07/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-07/src/main.rs40
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-08/output.txt6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-08/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-08/src/main.rs38
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-09/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-09/src/main.rs36
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-10/output.txt5
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-10/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-10/src/main.rs42
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-11/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-11/src/main.rs50
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-12/output.txt27
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-12/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-12/src/main.rs51
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-13/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-13/src/lib.rs36
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-13/src/main.rs19
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-14/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-14/src/lib.rs28
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-14/src/main.rs29
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-15/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-15/src/lib.rs44
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-15/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-16/output.txt23
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-16/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-16/src/lib.rs48
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-16/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-17/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-17/src/lib.rs50
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-17/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-18/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-18/src/lib.rs52
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-18/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-19/output.txt22
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-19/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-19/src/lib.rs58
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-19/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-20/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-20/src/lib.rs76
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-20/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-21/output.txt23
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-21/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-21/src/lib.rs92
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-21/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-22/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-22/src/lib.rs101
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-22/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-23/output.txt6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-23/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-23/src/lib.rs110
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-23/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-24/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-24/src/lib.rs104
-rw-r--r--src/doc/book/listings/ch12-an-io-project/listing-12-24/src/main.rs20
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/src/main.rs53
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/output.txt5
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/lib.rs60
-rw-r--r--src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/output.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/src/main.rs6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/output.txt16
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/lib.rs48
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/output.txt7
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/lib.rs60
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/main.rs18
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/output.txt4
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/poem.txt9
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/lib.rs60
-rw-r--r--src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/main.rs18
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/poem.txt9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs106
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs18
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/poem.txt9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs104
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs24
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.lock7
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-01/output.txt6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-01/src/main.rs52
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-02/src/main.rs33
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-03/output.txt12
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-03/src/main.rs8
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-04/output.txt8
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-04/src/main.rs10
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-05/output.txt6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-05/src/main.rs9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-06/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-06/src/main.rs10
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-07/.rustfmt.toml2
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-07/output.txt18
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-07/src/main.rs16
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-08/.rustfmt.toml2
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-08/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-08/output.txt18
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-08/src/main.rs22
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-09/.rustfmt.toml2
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-09/src/main.rs20
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-10/src/main.rs7
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-11/src/main.rs11
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-12/src/lib.rs16
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-13/src/lib.rs15
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-14/output.txt14
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-14/src/main.rs7
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-15/src/main.rs9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-16/src/lib.rs48
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-18/poem.txt9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-18/src/lib.rs104
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-18/src/main.rs22
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-19/poem.txt9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-19/src/lib.rs109
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-19/src/main.rs16
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-20/poem.txt9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-20/src/lib.rs113
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-20/src/main.rs16
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-22/poem.txt9
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-22/src/lib.rs108
-rw-r--r--src/doc/book/listings/ch13-functional-features/listing-13-22/src/main.rs16
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-01/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-02/src/lib.rs21
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-03/src/lib.rs34
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/lib.rs29
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/main.rs8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-05/src/lib.rs41
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/lib.rs33
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/main.rs13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.lock13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/src/main.rs6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.toml5
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/src/main.rs3
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.lock13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/src/main.rs3
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.lock90
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/src/lib.rs5
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/src/main.rs10
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.lock13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/src/main.rs10
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.lock5
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.toml5
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/rustfmt-ignore2
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.lock13
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/src/lib.rs8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/src/main.rs3
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.lock90
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/src/lib.rs5
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/src/main.rs11
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-01/src/main.rs4
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-02/src/main.rs8
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-03/output.txt27
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-03/src/main.rs12
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-05/src/main.rs10
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-06/src/main.rs7
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-07/src/main.rs7
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-08/src/main.rs11
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-09/output.txt10
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-09/src/main.rs17
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-10/src/main.rs27
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-11/src/main.rs7
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-12/src/main.rs28
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-13/src/main.rs28
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-14/output.txt7
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-14/src/main.rs19
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-15/output.txt13
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-15/src/main.rs20
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-16/output.txt7
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-16/src/main.rs20
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-17/output.txt14
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-17/src/main.rs12
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-18/src/main.rs13
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-19/output.txt8
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-19/src/main.rs21
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-20/src/lib.rs38
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-21/output.txt14
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-21/src/lib.rs73
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-22/src/lib.rs78
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-23/output.txt21
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-23/src/lib.rs78
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-24/output.txt7
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-24/src/main.rs24
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-25/src/main.rs20
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-26/output.txt11
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-26/src/main.rs44
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-27/src/main.rs24
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-28/src/main.rs33
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/listing-15-29/src/main.rs54
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/output.txt12
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/src/main.rs4
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/output.txt23
-rw-r--r--src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/src/main.rs7
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/src/main.rs16
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/src/main.rs18
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/output.txt25
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/src/main.rs11
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/src/main.rs13
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/src/main.rs11
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/src/main.rs5
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/src/main.rs11
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/src/main.rs14
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/output.txt16
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/src/main.rs15
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/src/main.rs25
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/src/main.rs46
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/src/main.rs12
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/output.txt15
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/src/main.rs22
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/output.txt21
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/src/main.rs24
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/src/main.rs23
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/src/main.rs18
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/src/main.rs27
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/output.txt18
-rw-r--r--src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/src/main.rs13
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-01/src/lib.rs4
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-02/src/lib.rs33
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-03/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-04/src/lib.rs9
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-05/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-06/src/lib.rs20
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-07/src/lib.rs29
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-08/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-08/src/main.rs17
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-09/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-09/src/main.rs40
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-10/output.txt13
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-10/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-10/src/main.rs9
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-11/src/main.rs20
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-12/src/lib.rs19
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-12/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-13/src/lib.rs28
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-13/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-14/src/lib.rs32
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-14/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-15/src/lib.rs52
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-15/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-16/src/lib.rs85
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-16/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-17/src/lib.rs82
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-17/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-18/src/lib.rs94
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-18/src/main.rs14
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-19/src/lib.rs25
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-20/src/lib.rs48
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-21/src/lib.rs43
-rw-r--r--src/doc/book/listings/ch17-oop/listing-17-21/src/main.rs13
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs19
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs13
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs9
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs5
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt15
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs5
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs8
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt19
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs8
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt16
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs14
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs16
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs27
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs27
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs7
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs17
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs4
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs15
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs9
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock4
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore1
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs9
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs19
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs12
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs10
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs11
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs10
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-01/src/main.rs8
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-02/src/main.rs6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-03/src/main.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-04/src/main.rs12
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-05/output.txt17
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-05/src/main.rs14
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-06/src/main.rs22
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-07/src/main.rs10
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-08/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-09/src/main.rs5
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-10/src/main.rs15
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-11/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-12/src/lib.rs5
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-13/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-14/src/main.rs25
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-15/src/lib.rs12
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-16/src/main.rs31
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-17/src/main.rs34
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-18/output.txt7
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-18/src/main.rs36
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-19/output.txt5
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-19/src/main.rs21
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-20/output.txt12
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-20/src/main.rs23
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-21/output.txt5
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-21/src/main.rs23
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-22/src/main.rs17
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-23/src/main.rs14
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-24/src/main.rs16
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-25/src/main.rs18
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-27/src/main.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-28/src/lib.rs12
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-30/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.lock46
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml11
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/main.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.lock46
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.toml11
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/main.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt18
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs27
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs33
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs12
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs10
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs15
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs8
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs17
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs7
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs7
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs10
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt16
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml7
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock46
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml11
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs25
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs3
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs13
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock58
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml8
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs9
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs25
-rw-r--r--src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt12
-rw-r--r--src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/src/main.rs7
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-01/src/main.rs11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-02/src/main.rs25
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-03/src/main.rs29
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-05/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-05/src/main.rs38
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-06/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-06/src/main.rs37
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-07/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-07/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-07/src/main.rs45
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-09/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-09/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-09/src/main.rs40
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-10/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-10/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-10/src/main.rs52
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-11/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-11/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-11/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-12/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-12/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-12/output.txt10
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-12/src/main.rs44
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-13/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-13/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-13/src/lib.rs27
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-13/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-14/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-14/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-14/src/lib.rs40
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-14/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-15/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-15/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-15/src/lib.rs53
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-15/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-16/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-16/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-16/src/lib.rs58
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-16/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/output.txt13
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/src/lib.rs65
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-17/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-18/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-18/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-18/src/lib.rs76
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-18/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-19/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-19/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-19/src/lib.rs69
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-19/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-20/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-20/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-20/src/lib.rs68
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-20/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-21/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-21/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-21/src/lib.rs67
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-21/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/output.txt14
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/src/lib.rs76
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-22/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-23/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-23/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-23/src/lib.rs95
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-23/src/main.rs45
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-24/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-24/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-24/src/lib.rs92
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-24/src/main.rs45
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-25/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-25/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-25/src/lib.rs92
-rw-r--r--src/doc/book/listings/ch20-web-server/listing-20-25/src/main.rs53
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt10
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs1
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs45
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt10
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs7
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/output.txt3
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs18
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt24
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs76
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs83
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/main.rs43
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs81
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/main.rs45
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-07-final-code/404.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.lock6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.toml6
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-07-final-code/hello.html11
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/lib.rs92
-rw-r--r--src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/main.rs51
-rw-r--r--src/doc/book/nostarch/acknowledgments.md19
-rw-r--r--src/doc/book/nostarch/appendix.md765
-rw-r--r--src/doc/book/nostarch/bio.md5
-rw-r--r--src/doc/book/nostarch/chapter01.md649
-rw-r--r--src/doc/book/nostarch/chapter02.md1111
-rw-r--r--src/doc/book/nostarch/chapter03.md1789
-rw-r--r--src/doc/book/nostarch/chapter04.md1390
-rw-r--r--src/doc/book/nostarch/chapter05.md1073
-rw-r--r--src/doc/book/nostarch/chapter06.md919
-rw-r--r--src/doc/book/nostarch/chapter07.md1328
-rw-r--r--src/doc/book/nostarch/chapter08.md1284
-rw-r--r--src/doc/book/nostarch/chapter09.md1209
-rw-r--r--src/doc/book/nostarch/chapter10.md2023
-rw-r--r--src/doc/book/nostarch/chapter11.md1541
-rw-r--r--src/doc/book/nostarch/chapter12.md1686
-rw-r--r--src/doc/book/nostarch/chapter13.md1271
-rw-r--r--src/doc/book/nostarch/chapter14.md1044
-rw-r--r--src/doc/book/nostarch/chapter15.md2011
-rw-r--r--src/doc/book/nostarch/chapter16.md1268
-rw-r--r--src/doc/book/nostarch/chapter17.md1302
-rw-r--r--src/doc/book/nostarch/chapter18.md1282
-rw-r--r--src/doc/book/nostarch/chapter19.md2308
-rw-r--r--src/doc/book/nostarch/chapter20.md1947
-rw-r--r--src/doc/book/nostarch/foreword.md41
-rw-r--r--src/doc/book/nostarch/introduction.md191
-rw-r--r--src/doc/book/nostarch/preface.md22
-rw-r--r--src/doc/book/redirects/README.md11
-rw-r--r--src/doc/book/redirects/SUMMARY.md11
-rw-r--r--src/doc/book/redirects/associated-types.md17
-rw-r--r--src/doc/book/redirects/attributes.md24
-rw-r--r--src/doc/book/redirects/bibliography.md14
-rw-r--r--src/doc/book/redirects/borrow-and-asref.md25
-rw-r--r--src/doc/book/redirects/casting-between-types.md32
-rw-r--r--src/doc/book/redirects/choosing-your-guarantees.md22
-rw-r--r--src/doc/book/redirects/closures.md28
-rw-r--r--src/doc/book/redirects/comments.md23
-rw-r--r--src/doc/book/redirects/compiler-plugins.md13
-rw-r--r--src/doc/book/redirects/concurrency.md17
-rw-r--r--src/doc/book/redirects/conditional-compilation.md28
-rw-r--r--src/doc/book/redirects/const-and-static.md21
-rw-r--r--src/doc/book/redirects/crates-and-modules.md28
-rw-r--r--src/doc/book/redirects/deref-coercions.md30
-rw-r--r--src/doc/book/redirects/documentation.md26
-rw-r--r--src/doc/book/redirects/drop.md34
-rw-r--r--src/doc/book/redirects/effective-rust.md14
-rw-r--r--src/doc/book/redirects/enums.md23
-rw-r--r--src/doc/book/redirects/error-handling.md16
-rw-r--r--src/doc/book/redirects/ffi.md23
-rw-r--r--src/doc/book/redirects/functions.md30
-rw-r--r--src/doc/book/redirects/generics.md30
-rw-r--r--src/doc/book/redirects/getting-started.md13
-rw-r--r--src/doc/book/redirects/glossary.md14
-rw-r--r--src/doc/book/redirects/guessing-game.md12
-rw-r--r--src/doc/book/redirects/if-let.md22
-rw-r--r--src/doc/book/redirects/if.md22
-rw-r--r--src/doc/book/redirects/iterators.md27
-rw-r--r--src/doc/book/redirects/lifetimes.md28
-rw-r--r--src/doc/book/redirects/loops.md30
-rw-r--r--src/doc/book/redirects/macros.md30
-rw-r--r--src/doc/book/redirects/match.md38
-rw-r--r--src/doc/book/redirects/method-syntax.md29
-rw-r--r--src/doc/book/redirects/mutability.md23
-rw-r--r--src/doc/book/redirects/operators-and-overloading.md36
-rw-r--r--src/doc/book/redirects/ownership.md20
-rw-r--r--src/doc/book/redirects/patterns.md23
-rw-r--r--src/doc/book/redirects/primitive-types.md24
-rw-r--r--src/doc/book/redirects/procedural-macros.md21
-rw-r--r--src/doc/book/redirects/raw-pointers.md17
-rw-r--r--src/doc/book/redirects/references-and-borrowing.md24
-rw-r--r--src/doc/book/redirects/release-channels.md28
-rw-r--r--src/doc/book/redirects/strings.md19
-rw-r--r--src/doc/book/redirects/structs.md25
-rw-r--r--src/doc/book/redirects/syntax-and-semantics.md18
-rw-r--r--src/doc/book/redirects/syntax-index.md13
-rw-r--r--src/doc/book/redirects/testing.md25
-rw-r--r--src/doc/book/redirects/the-stack-and-the-heap.md13
-rw-r--r--src/doc/book/redirects/trait-objects.md68
-rw-r--r--src/doc/book/redirects/traits.md24
-rw-r--r--src/doc/book/redirects/type-aliases.md14
-rw-r--r--src/doc/book/redirects/ufcs.md48
-rw-r--r--src/doc/book/redirects/unsafe.md18
-rw-r--r--src/doc/book/redirects/unsized-types.md18
-rw-r--r--src/doc/book/redirects/using-rust-without-the-standard-library.md17
-rw-r--r--src/doc/book/redirects/variable-bindings.md14
-rw-r--r--src/doc/book/redirects/vectors.md23
-rw-r--r--src/doc/book/rust-toolchain1
-rw-r--r--src/doc/book/rustfmt.toml1
-rw-r--r--src/doc/book/second-edition/book.toml3
-rw-r--r--src/doc/book/second-edition/dot/trpl04-01.dot26
-rw-r--r--src/doc/book/second-edition/dot/trpl04-02.dot35
-rw-r--r--src/doc/book/second-edition/dot/trpl04-03.dot44
-rw-r--r--src/doc/book/second-edition/dot/trpl04-04.dot35
-rw-r--r--src/doc/book/second-edition/dot/trpl04-05.dot32
-rw-r--r--src/doc/book/second-edition/dot/trpl04-06.dot41
-rw-r--r--src/doc/book/second-edition/dot/trpl15-01.dot24
-rw-r--r--src/doc/book/second-edition/dot/trpl15-02.dot18
-rw-r--r--src/doc/book/second-edition/dot/trpl15-03.dot51
-rw-r--r--src/doc/book/second-edition/src/SUMMARY.md132
-rw-r--r--src/doc/book/second-edition/src/appendix-00.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-01-keywords.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-02-operators.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-03-derivable-traits.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-04-macros.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-05-translation.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-06-newest-features.md10
-rw-r--r--src/doc/book/second-edition/src/appendix-07-nightly-rust.md10
-rw-r--r--src/doc/book/second-edition/src/ch00-00-introduction.md10
-rw-r--r--src/doc/book/second-edition/src/ch01-00-getting-started.md10
-rw-r--r--src/doc/book/second-edition/src/ch01-01-installation.md10
-rw-r--r--src/doc/book/second-edition/src/ch01-02-hello-world.md10
-rw-r--r--src/doc/book/second-edition/src/ch01-03-hello-cargo.md10
-rw-r--r--src/doc/book/second-edition/src/ch02-00-guessing-game-tutorial.md10
-rw-r--r--src/doc/book/second-edition/src/ch03-00-common-programming-concepts.md10
-rw-r--r--src/doc/book/second-edition/src/ch03-01-variables-and-mutability.md10
-rw-r--r--src/doc/book/second-edition/src/ch03-02-data-types.md10
-rw-r--r--src/doc/book/second-edition/src/ch03-03-how-functions-work.md10
-rw-r--r--src/doc/book/second-edition/src/ch03-04-comments.md10
-rw-r--r--src/doc/book/second-edition/src/ch03-05-control-flow.md10
-rw-r--r--src/doc/book/second-edition/src/ch04-00-understanding-ownership.md10
-rw-r--r--src/doc/book/second-edition/src/ch04-01-what-is-ownership.md10
-rw-r--r--src/doc/book/second-edition/src/ch04-02-references-and-borrowing.md10
-rw-r--r--src/doc/book/second-edition/src/ch04-03-slices.md10
-rw-r--r--src/doc/book/second-edition/src/ch05-00-structs.md10
-rw-r--r--src/doc/book/second-edition/src/ch05-01-defining-structs.md10
-rw-r--r--src/doc/book/second-edition/src/ch05-02-example-structs.md10
-rw-r--r--src/doc/book/second-edition/src/ch05-03-method-syntax.md10
-rw-r--r--src/doc/book/second-edition/src/ch06-00-enums.md10
-rw-r--r--src/doc/book/second-edition/src/ch06-01-defining-an-enum.md10
-rw-r--r--src/doc/book/second-edition/src/ch06-02-match.md10
-rw-r--r--src/doc/book/second-edition/src/ch06-03-if-let.md10
-rw-r--r--src/doc/book/second-edition/src/ch07-00-modules.md10
-rw-r--r--src/doc/book/second-edition/src/ch07-01-mod-and-the-filesystem.md10
-rw-r--r--src/doc/book/second-edition/src/ch07-02-controlling-visibility-with-pub.md10
-rw-r--r--src/doc/book/second-edition/src/ch07-03-importing-names-with-use.md10
-rw-r--r--src/doc/book/second-edition/src/ch08-00-common-collections.md10
-rw-r--r--src/doc/book/second-edition/src/ch08-01-vectors.md10
-rw-r--r--src/doc/book/second-edition/src/ch08-02-strings.md10
-rw-r--r--src/doc/book/second-edition/src/ch08-03-hash-maps.md10
-rw-r--r--src/doc/book/second-edition/src/ch09-00-error-handling.md10
-rw-r--r--src/doc/book/second-edition/src/ch09-01-unrecoverable-errors-with-panic.md10
-rw-r--r--src/doc/book/second-edition/src/ch09-02-recoverable-errors-with-result.md10
-rw-r--r--src/doc/book/second-edition/src/ch09-03-to-panic-or-not-to-panic.md10
-rw-r--r--src/doc/book/second-edition/src/ch10-00-generics.md10
-rw-r--r--src/doc/book/second-edition/src/ch10-01-syntax.md10
-rw-r--r--src/doc/book/second-edition/src/ch10-02-traits.md10
-rw-r--r--src/doc/book/second-edition/src/ch10-03-lifetime-syntax.md10
-rw-r--r--src/doc/book/second-edition/src/ch11-00-testing.md10
-rw-r--r--src/doc/book/second-edition/src/ch11-01-writing-tests.md10
-rw-r--r--src/doc/book/second-edition/src/ch11-02-running-tests.md10
-rw-r--r--src/doc/book/second-edition/src/ch11-03-test-organization.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-00-an-io-project.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-01-accepting-command-line-arguments.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-02-reading-a-file.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-03-improving-error-handling-and-modularity.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-04-testing-the-librarys-functionality.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-05-working-with-environment-variables.md10
-rw-r--r--src/doc/book/second-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md10
-rw-r--r--src/doc/book/second-edition/src/ch13-00-functional-features.md10
-rw-r--r--src/doc/book/second-edition/src/ch13-01-closures.md10
-rw-r--r--src/doc/book/second-edition/src/ch13-02-iterators.md10
-rw-r--r--src/doc/book/second-edition/src/ch13-03-improving-our-io-project.md10
-rw-r--r--src/doc/book/second-edition/src/ch13-04-performance.md10
-rw-r--r--src/doc/book/second-edition/src/ch14-00-more-about-cargo.md10
-rw-r--r--src/doc/book/second-edition/src/ch14-01-release-profiles.md10
-rw-r--r--src/doc/book/second-edition/src/ch14-02-publishing-to-crates-io.md10
-rw-r--r--src/doc/book/second-edition/src/ch14-03-cargo-workspaces.md10
-rw-r--r--src/doc/book/second-edition/src/ch14-04-installing-binaries.md10
-rw-r--r--src/doc/book/second-edition/src/ch14-05-extending-cargo.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-00-smart-pointers.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-01-box.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-02-deref.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-03-drop.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-04-rc.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-05-interior-mutability.md10
-rw-r--r--src/doc/book/second-edition/src/ch15-06-reference-cycles.md10
-rw-r--r--src/doc/book/second-edition/src/ch16-00-concurrency.md10
-rw-r--r--src/doc/book/second-edition/src/ch16-01-threads.md10
-rw-r--r--src/doc/book/second-edition/src/ch16-02-message-passing.md10
-rw-r--r--src/doc/book/second-edition/src/ch16-03-shared-state.md10
-rw-r--r--src/doc/book/second-edition/src/ch16-04-extensible-concurrency-sync-and-send.md10
-rw-r--r--src/doc/book/second-edition/src/ch17-00-oop.md10
-rw-r--r--src/doc/book/second-edition/src/ch17-01-what-is-oo.md10
-rw-r--r--src/doc/book/second-edition/src/ch17-02-trait-objects.md10
-rw-r--r--src/doc/book/second-edition/src/ch17-03-oo-design-patterns.md10
-rw-r--r--src/doc/book/second-edition/src/ch18-00-patterns.md10
-rw-r--r--src/doc/book/second-edition/src/ch18-01-all-the-places-for-patterns.md10
-rw-r--r--src/doc/book/second-edition/src/ch18-02-refutability.md10
-rw-r--r--src/doc/book/second-edition/src/ch18-03-pattern-syntax.md10
-rw-r--r--src/doc/book/second-edition/src/ch19-00-advanced-features.md10
-rw-r--r--src/doc/book/second-edition/src/ch19-01-unsafe-rust.md10
-rw-r--r--src/doc/book/second-edition/src/ch19-02-advanced-lifetimes.md10
-rw-r--r--src/doc/book/second-edition/src/ch19-03-advanced-traits.md10
-rw-r--r--src/doc/book/second-edition/src/ch19-04-advanced-types.md10
-rw-r--r--src/doc/book/second-edition/src/ch19-05-advanced-functions-and-closures.md10
-rw-r--r--src/doc/book/second-edition/src/ch20-00-final-project-a-web-server.md10
-rw-r--r--src/doc/book/second-edition/src/ch20-01-single-threaded.md10
-rw-r--r--src/doc/book/second-edition/src/ch20-02-multithreaded.md10
-rw-r--r--src/doc/book/second-edition/src/ch20-03-graceful-shutdown-and-cleanup.md10
-rw-r--r--src/doc/book/second-edition/src/foreword.md10
-rw-r--r--src/doc/book/second-edition/src/img/trpl04-01.svg68
-rw-r--r--src/doc/book/second-edition/src/img/trpl04-02.svg95
-rw-r--r--src/doc/book/second-edition/src/img/trpl04-03.svg123
-rw-r--r--src/doc/book/second-edition/src/img/trpl04-04.svg96
-rw-r--r--src/doc/book/second-edition/src/img/trpl04-05.svg87
-rw-r--r--src/doc/book/second-edition/src/img/trpl04-06.svg115
-rw-r--r--src/doc/book/second-edition/src/img/trpl14-01.pngbin0 -> 65437 bytes
-rw-r--r--src/doc/book/second-edition/src/img/trpl14-02.pngbin0 -> 175642 bytes
-rw-r--r--src/doc/book/second-edition/src/img/trpl14-03.pngbin0 -> 43085 bytes
-rw-r--r--src/doc/book/second-edition/src/img/trpl14-04.pngbin0 -> 68900 bytes
-rw-r--r--src/doc/book/second-edition/src/img/trpl15-01.svg43
-rw-r--r--src/doc/book/second-edition/src/img/trpl15-02.svg26
-rw-r--r--src/doc/book/second-edition/src/img/trpl15-03.svg109
-rw-r--r--src/doc/book/second-edition/src/img/trpl15-04.svg55
-rw-r--r--src/doc/book/second-edition/src/img/trpl20-01.pngbin0 -> 8491 bytes
-rw-r--r--src/doc/book/src/SUMMARY.md135
-rw-r--r--src/doc/book/src/appendix-00.md4
-rw-r--r--src/doc/book/src/appendix-01-keywords.md137
-rw-r--r--src/doc/book/src/appendix-02-operators.md205
-rw-r--r--src/doc/book/src/appendix-03-derivable-traits.md187
-rw-r--r--src/doc/book/src/appendix-04-useful-development-tools.md179
-rw-r--r--src/doc/book/src/appendix-05-editions.md57
-rw-r--r--src/doc/book/src/appendix-06-translation.md30
-rw-r--r--src/doc/book/src/appendix-07-nightly-rust.md201
-rw-r--r--src/doc/book/src/ch00-00-introduction.md192
-rw-r--r--src/doc/book/src/ch01-00-getting-started.md8
-rw-r--r--src/doc/book/src/ch01-01-installation.md151
-rw-r--r--src/doc/book/src/ch01-02-hello-world.md201
-rw-r--r--src/doc/book/src/ch01-03-hello-cargo.md258
-rw-r--r--src/doc/book/src/ch02-00-guessing-game-tutorial.md922
-rw-r--r--src/doc/book/src/ch03-00-common-programming-concepts.md23
-rw-r--r--src/doc/book/src/ch03-01-variables-and-mutability.md192
-rw-r--r--src/doc/book/src/ch03-02-data-types.md383
-rw-r--r--src/doc/book/src/ch03-03-how-functions-work.md249
-rw-r--r--src/doc/book/src/ch03-04-comments.md42
-rw-r--r--src/doc/book/src/ch03-05-control-flow.md391
-rw-r--r--src/doc/book/src/ch04-00-understanding-ownership.md7
-rw-r--r--src/doc/book/src/ch04-01-what-is-ownership.md474
-rw-r--r--src/doc/book/src/ch04-02-references-and-borrowing.md255
-rw-r--r--src/doc/book/src/ch04-03-slices.md314
-rw-r--r--src/doc/book/src/ch05-00-structs.md14
-rw-r--r--src/doc/book/src/ch05-01-defining-structs.md277
-rw-r--r--src/doc/book/src/ch05-02-example-structs.md248
-rw-r--r--src/doc/book/src/ch05-03-method-syntax.md245
-rw-r--r--src/doc/book/src/ch06-00-enums.md11
-rw-r--r--src/doc/book/src/ch06-01-defining-an-enum.md324
-rw-r--r--src/doc/book/src/ch06-02-match.md252
-rw-r--r--src/doc/book/src/ch06-03-if-let.md81
-rw-r--r--src/doc/book/src/ch07-00-managing-growing-projects-with-packages-crates-and-modules.md48
-rw-r--r--src/doc/book/src/ch07-01-packages-and-crates.md72
-rw-r--r--src/doc/book/src/ch07-02-defining-modules-to-control-scope-and-privacy.md174
-rw-r--r--src/doc/book/src/ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md298
-rw-r--r--src/doc/book/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md309
-rw-r--r--src/doc/book/src/ch07-05-separating-modules-into-different-files.md127
-rw-r--r--src/doc/book/src/ch08-00-common-collections.md25
-rw-r--r--src/doc/book/src/ch08-01-vectors.md253
-rw-r--r--src/doc/book/src/ch08-02-strings.md412
-rw-r--r--src/doc/book/src/ch08-03-hash-maps.md242
-rw-r--r--src/doc/book/src/ch09-00-error-handling.md24
-rw-r--r--src/doc/book/src/ch09-01-unrecoverable-errors-with-panic.md165
-rw-r--r--src/doc/book/src/ch09-02-recoverable-errors-with-result.md537
-rw-r--r--src/doc/book/src/ch09-03-to-panic-or-not-to-panic.md223
-rw-r--r--src/doc/book/src/ch10-00-generics.md118
-rw-r--r--src/doc/book/src/ch10-01-syntax.md330
-rw-r--r--src/doc/book/src/ch10-02-traits.md388
-rw-r--r--src/doc/book/src/ch10-03-lifetime-syntax.md622
-rw-r--r--src/doc/book/src/ch11-00-testing.md32
-rw-r--r--src/doc/book/src/ch11-01-writing-tests.md542
-rw-r--r--src/doc/book/src/ch11-02-running-tests.md183
-rw-r--r--src/doc/book/src/ch11-03-test-organization.md269
-rw-r--r--src/doc/book/src/ch12-00-an-io-project.md50
-rw-r--r--src/doc/book/src/ch12-01-accepting-command-line-arguments.md135
-rw-r--r--src/doc/book/src/ch12-02-reading-a-file.md57
-rw-r--r--src/doc/book/src/ch12-03-improving-error-handling-and-modularity.md505
-rw-r--r--src/doc/book/src/ch12-04-testing-the-librarys-functionality.md245
-rw-r--r--src/doc/book/src/ch12-05-working-with-environment-variables.md206
-rw-r--r--src/doc/book/src/ch12-06-writing-to-stderr-instead-of-stdout.md108
-rw-r--r--src/doc/book/src/ch13-00-functional-features.md24
-rw-r--r--src/doc/book/src/ch13-01-closures.md423
-rw-r--r--src/doc/book/src/ch13-02-iterators.md228
-rw-r--r--src/doc/book/src/ch13-03-improving-our-io-project.md178
-rw-r--r--src/doc/book/src/ch13-04-performance.md94
-rw-r--r--src/doc/book/src/ch14-00-more-about-cargo.md15
-rw-r--r--src/doc/book/src/ch14-01-release-profiles.md75
-rw-r--r--src/doc/book/src/ch14-02-publishing-to-crates-io.md464
-rw-r--r--src/doc/book/src/ch14-03-cargo-workspaces.md369
-rw-r--r--src/doc/book/src/ch14-04-installing-binaries.md47
-rw-r--r--src/doc/book/src/ch14-05-extending-cargo.md17
-rw-r--r--src/doc/book/src/ch15-00-smart-pointers.md53
-rw-r--r--src/doc/book/src/ch15-01-box.md255
-rw-r--r--src/doc/book/src/ch15-02-deref.md298
-rw-r--r--src/doc/book/src/ch15-03-drop.md149
-rw-r--r--src/doc/book/src/ch15-04-rc.md164
-rw-r--r--src/doc/book/src/ch15-05-interior-mutability.md344
-rw-r--r--src/doc/book/src/ch15-06-reference-cycles.md320
-rw-r--r--src/doc/book/src/ch16-00-concurrency.md49
-rw-r--r--src/doc/book/src/ch16-01-threads.md281
-rw-r--r--src/doc/book/src/ch16-02-message-passing.md255
-rw-r--r--src/doc/book/src/ch16-03-shared-state.md249
-rw-r--r--src/doc/book/src/ch16-04-extensible-concurrency-sync-and-send.md90
-rw-r--r--src/doc/book/src/ch17-00-oop.md13
-rw-r--r--src/doc/book/src/ch17-01-what-is-oo.md152
-rw-r--r--src/doc/book/src/ch17-02-trait-objects.md256
-rw-r--r--src/doc/book/src/ch17-03-oo-design-patterns.md516
-rw-r--r--src/doc/book/src/ch18-00-patterns.md29
-rw-r--r--src/doc/book/src/ch18-01-all-the-places-for-patterns.md250
-rw-r--r--src/doc/book/src/ch18-02-refutability.md90
-rw-r--r--src/doc/book/src/ch18-03-pattern-syntax.md594
-rw-r--r--src/doc/book/src/ch19-00-advanced-features.md22
-rw-r--r--src/doc/book/src/ch19-01-unsafe-rust.md460
-rw-r--r--src/doc/book/src/ch19-03-advanced-traits.md468
-rw-r--r--src/doc/book/src/ch19-04-advanced-types.md297
-rw-r--r--src/doc/book/src/ch19-05-advanced-functions-and-closures.md130
-rw-r--r--src/doc/book/src/ch19-06-macros.md513
-rw-r--r--src/doc/book/src/ch20-00-final-project-a-web-server.md33
-rw-r--r--src/doc/book/src/ch20-01-single-threaded.md460
-rw-r--r--src/doc/book/src/ch20-02-multithreaded.md698
-rw-r--r--src/doc/book/src/ch20-03-graceful-shutdown-and-cleanup.md245
-rw-r--r--src/doc/book/src/foreword.md41
-rw-r--r--src/doc/book/src/img/ferris/does_not_compile.svg72
-rw-r--r--src/doc/book/src/img/ferris/not_desired_behavior.svg75
-rw-r--r--src/doc/book/src/img/ferris/panics.svg70
-rw-r--r--src/doc/book/src/img/trpl04-01.svg68
-rw-r--r--src/doc/book/src/img/trpl04-02.svg95
-rw-r--r--src/doc/book/src/img/trpl04-03.svg123
-rw-r--r--src/doc/book/src/img/trpl04-04.svg96
-rw-r--r--src/doc/book/src/img/trpl04-05.svg87
-rw-r--r--src/doc/book/src/img/trpl04-06.svg115
-rw-r--r--src/doc/book/src/img/trpl14-01.pngbin0 -> 123988 bytes
-rw-r--r--src/doc/book/src/img/trpl14-02.pngbin0 -> 81694 bytes
-rw-r--r--src/doc/book/src/img/trpl14-03.pngbin0 -> 94569 bytes
-rw-r--r--src/doc/book/src/img/trpl14-04.pngbin0 -> 241098 bytes
-rw-r--r--src/doc/book/src/img/trpl15-01.svg43
-rw-r--r--src/doc/book/src/img/trpl15-02.svg26
-rw-r--r--src/doc/book/src/img/trpl15-03.svg109
-rw-r--r--src/doc/book/src/img/trpl15-04.svg84
-rw-r--r--src/doc/book/src/img/trpl20-01.pngbin0 -> 8491 bytes
-rw-r--r--src/doc/book/src/title-page.md22
-rw-r--r--src/doc/book/style-guide.md34
-rw-r--r--src/doc/book/theme/2018-edition.css9
-rwxr-xr-xsrc/doc/book/tools/convert-quotes.sh12
-rwxr-xr-xsrc/doc/book/tools/doc-to-md.sh20
-rw-r--r--src/doc/book/tools/docx-to-md.xsl220
-rwxr-xr-xsrc/doc/book/tools/megadiff.sh22
-rwxr-xr-xsrc/doc/book/tools/nostarch.sh27
-rw-r--r--src/doc/book/tools/src/bin/concat_chapters.rs127
-rw-r--r--src/doc/book/tools/src/bin/convert_quotes.rs78
-rw-r--r--src/doc/book/tools/src/bin/lfp.rs248
-rw-r--r--src/doc/book/tools/src/bin/link2print.rs415
-rw-r--r--src/doc/book/tools/src/bin/release_listings.rs159
-rw-r--r--src/doc/book/tools/src/bin/remove_hidden_lines.rs83
-rw-r--r--src/doc/book/tools/src/bin/remove_links.rs45
-rw-r--r--src/doc/book/tools/src/bin/remove_markup.rs53
-rwxr-xr-xsrc/doc/book/tools/update-editions.sh8
-rwxr-xr-xsrc/doc/book/tools/update-rustc.sh93
-rw-r--r--src/doc/complement-design-faq.md3
-rw-r--r--src/doc/complement-lang-faq.md3
-rw-r--r--src/doc/complement-project-faq.md3
-rw-r--r--src/doc/edition-guide/.github/workflows/main.yml33
-rw-r--r--src/doc/edition-guide/LICENSE-APACHE201
-rw-r--r--src/doc/edition-guide/LICENSE-MIT25
-rw-r--r--src/doc/edition-guide/README.md44
-rw-r--r--src/doc/edition-guide/book.toml96
-rw-r--r--src/doc/edition-guide/src/SUMMARY.md35
-rw-r--r--src/doc/edition-guide/src/editions/advanced-migrations.md210
-rw-r--r--src/doc/edition-guide/src/editions/creating-a-new-project.md33
-rw-r--r--src/doc/edition-guide/src/editions/index.md61
-rw-r--r--src/doc/edition-guide/src/editions/transitioning-an-existing-project-to-a-new-edition.md89
-rw-r--r--src/doc/edition-guide/src/introduction.md11
-rw-r--r--src/doc/edition-guide/src/rust-2015/index.md18
-rw-r--r--src/doc/edition-guide/src/rust-2018/cargo.md10
-rw-r--r--src/doc/edition-guide/src/rust-2018/index.md8
-rw-r--r--src/doc/edition-guide/src/rust-2018/new-keywords.md66
-rw-r--r--src/doc/edition-guide/src/rust-2018/path-changes.md379
-rw-r--r--src/doc/edition-guide/src/rust-2018/trait-fn-parameters.md32
-rw-r--r--src/doc/edition-guide/src/rust-2018/tyvar-behind-raw-pointer.md11
-rw-r--r--src/doc/edition-guide/src/rust-2021/IntoIterator-for-arrays.md98
-rw-r--r--src/doc/edition-guide/src/rust-2021/default-cargo-resolver.md179
-rw-r--r--src/doc/edition-guide/src/rust-2021/disjoint-capture-in-closures.md165
-rw-r--r--src/doc/edition-guide/src/rust-2021/index.md11
-rw-r--r--src/doc/edition-guide/src/rust-2021/or-patterns-macro-rules.md72
-rw-r--r--src/doc/edition-guide/src/rust-2021/panic-macro-consistency.md84
-rw-r--r--src/doc/edition-guide/src/rust-2021/prelude.md159
-rw-r--r--src/doc/edition-guide/src/rust-2021/reserving-syntax.md85
-rw-r--r--src/doc/edition-guide/src/rust-2021/warnings-promoted-to-error.md49
-rw-r--r--src/doc/edition-guide/triagebot.toml4
-rw-r--r--src/doc/embedded-book/.github/CODEOWNERS1
-rw-r--r--src/doc/embedded-book/.github/bors.toml4
-rw-r--r--src/doc/embedded-book/.github/workflows/ci.yml57
-rw-r--r--src/doc/embedded-book/CODE_OF_CONDUCT.md37
-rw-r--r--src/doc/embedded-book/LICENSE-APACHE201
-rw-r--r--src/doc/embedded-book/LICENSE-CC-BY-SA428
-rw-r--r--src/doc/embedded-book/LICENSE-MIT23
-rw-r--r--src/doc/embedded-book/README.md46
-rw-r--r--src/doc/embedded-book/book.toml8
-rw-r--r--src/doc/embedded-book/src/SUMMARY.md60
-rw-r--r--src/doc/embedded-book/src/appendix/glossary.md64
-rw-r--r--src/doc/embedded-book/src/assets/crates.pngbin0 -> 11522 bytes
-rw-r--r--src/doc/embedded-book/src/assets/embedded-hal.svg2
-rw-r--r--src/doc/embedded-book/src/assets/f3.jpgbin0 -> 259494 bytes
-rw-r--r--src/doc/embedded-book/src/assets/nrf52-memory-map.pngbin0 -> 143848 bytes
-rw-r--r--src/doc/embedded-book/src/assets/nrf52-spi-frequency-register.pngbin0 -> 70351 bytes
-rw-r--r--src/doc/embedded-book/src/assets/rust_layers.svg1
-rw-r--r--src/doc/embedded-book/src/assets/verify.jpegbin0 -> 155671 bytes
-rw-r--r--src/doc/embedded-book/src/c-tips/index.md417
-rw-r--r--src/doc/embedded-book/src/collections/index.md262
-rw-r--r--src/doc/embedded-book/src/concurrency/index.md607
-rw-r--r--src/doc/embedded-book/src/design-patterns/hal/checklist.md26
-rw-r--r--src/doc/embedded-book/src/design-patterns/hal/gpio.md205
-rw-r--r--src/doc/embedded-book/src/design-patterns/hal/index.md15
-rw-r--r--src/doc/embedded-book/src/design-patterns/hal/interoperability.md57
-rw-r--r--src/doc/embedded-book/src/design-patterns/hal/naming.md9
-rw-r--r--src/doc/embedded-book/src/design-patterns/hal/predictability.md24
-rw-r--r--src/doc/embedded-book/src/design-patterns/index.md3
-rw-r--r--src/doc/embedded-book/src/interoperability/c-with-rust.md135
-rw-r--r--src/doc/embedded-book/src/interoperability/index.md63
-rw-r--r--src/doc/embedded-book/src/interoperability/rust-with-c.md105
-rw-r--r--src/doc/embedded-book/src/intro/hardware.md39
-rw-r--r--src/doc/embedded-book/src/intro/index.md130
-rw-r--r--src/doc/embedded-book/src/intro/install.md82
-rw-r--r--src/doc/embedded-book/src/intro/install/linux.md125
-rw-r--r--src/doc/embedded-book/src/intro/install/macos.md25
-rw-r--r--src/doc/embedded-book/src/intro/install/verify.md78
-rw-r--r--src/doc/embedded-book/src/intro/install/windows.md50
-rw-r--r--src/doc/embedded-book/src/intro/no-std.md64
-rw-r--r--src/doc/embedded-book/src/intro/tooling.md84
-rw-r--r--src/doc/embedded-book/src/peripherals/a-first-attempt.md139
-rw-r--r--src/doc/embedded-book/src/peripherals/borrowck.md19
-rw-r--r--src/doc/embedded-book/src/peripherals/index.md44
-rw-r--r--src/doc/embedded-book/src/peripherals/singletons.md155
-rw-r--r--src/doc/embedded-book/src/portability/index.md62
-rw-r--r--src/doc/embedded-book/src/start/exceptions.md264
-rw-r--r--src/doc/embedded-book/src/start/hardware.md333
-rw-r--r--src/doc/embedded-book/src/start/index.md10
-rw-r--r--src/doc/embedded-book/src/start/interrupts.md60
-rw-r--r--src/doc/embedded-book/src/start/io.md3
-rw-r--r--src/doc/embedded-book/src/start/panicking.md107
-rw-r--r--src/doc/embedded-book/src/start/qemu.md577
-rw-r--r--src/doc/embedded-book/src/start/registers.md201
-rw-r--r--src/doc/embedded-book/src/start/semihosting.md145
-rw-r--r--src/doc/embedded-book/src/static-guarantees/design-contracts.md254
-rw-r--r--src/doc/embedded-book/src/static-guarantees/index.md23
-rw-r--r--src/doc/embedded-book/src/static-guarantees/state-machines.md98
-rw-r--r--src/doc/embedded-book/src/static-guarantees/typestate-programming.md65
-rw-r--r--src/doc/embedded-book/src/static-guarantees/zero-cost-abstractions.md42
-rw-r--r--src/doc/embedded-book/src/unsorted/index.md1
-rw-r--r--src/doc/embedded-book/src/unsorted/math.md75
-rw-r--r--src/doc/embedded-book/src/unsorted/speed-vs-size.md173
-rw-r--r--src/doc/embedded-book/triagebot.toml1
-rw-r--r--src/doc/favicon.inc1
-rw-r--r--src/doc/footer.inc7
-rw-r--r--src/doc/full-toc.inc15
-rw-r--r--src/doc/grammar.md7
-rw-r--r--src/doc/guide-crates.md4
-rw-r--r--src/doc/guide-error-handling.md4
-rw-r--r--src/doc/guide-ffi.md4
-rw-r--r--src/doc/guide-macros.md4
-rw-r--r--src/doc/guide-ownership.md4
-rw-r--r--src/doc/guide-plugins.md4
-rw-r--r--src/doc/guide-pointers.md7
-rw-r--r--src/doc/guide-strings.md4
-rw-r--r--src/doc/guide-tasks.md4
-rw-r--r--src/doc/guide-testing.md4
-rw-r--r--src/doc/guide-unsafe.md4
-rw-r--r--src/doc/guide.md4
-rw-r--r--src/doc/index.md146
-rw-r--r--src/doc/intro.md5
-rw-r--r--src/doc/man/rustc.1314
-rw-r--r--src/doc/man/rustdoc.1126
-rw-r--r--src/doc/nomicon/.github/workflows/main.yml35
-rw-r--r--src/doc/nomicon/LICENSE-APACHE201
-rw-r--r--src/doc/nomicon/LICENSE-MIT25
-rw-r--r--src/doc/nomicon/README.md71
-rw-r--r--src/doc/nomicon/book.toml35
-rw-r--r--src/doc/nomicon/src/SUMMARY.md66
-rw-r--r--src/doc/nomicon/src/aliasing.md134
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc-and-mutex.md7
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc-base.md146
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc-clone.md108
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc-drop.md104
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc-final.md83
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc-layout.md73
-rw-r--r--src/doc/nomicon/src/arc-mutex/arc.md13
-rw-r--r--src/doc/nomicon/src/atomics.md239
-rw-r--r--src/doc/nomicon/src/beneath-std.md10
-rw-r--r--src/doc/nomicon/src/borrow-splitting.md296
-rw-r--r--src/doc/nomicon/src/casts.md34
-rw-r--r--src/doc/nomicon/src/checked-uninit.md121
-rw-r--r--src/doc/nomicon/src/coercions.md44
-rw-r--r--src/doc/nomicon/src/concurrency.md13
-rw-r--r--src/doc/nomicon/src/constructors.md59
-rw-r--r--src/doc/nomicon/src/conversions.md33
-rw-r--r--src/doc/nomicon/src/data.md16
-rw-r--r--src/doc/nomicon/src/destructors.md177
-rw-r--r--src/doc/nomicon/src/dot-operator.md131
-rw-r--r--src/doc/nomicon/src/drop-flags.md83
-rw-r--r--src/doc/nomicon/src/dropck.md346
-rw-r--r--src/doc/nomicon/src/exception-safety.md210
-rw-r--r--src/doc/nomicon/src/exotic-sizes.md181
-rw-r--r--src/doc/nomicon/src/ffi.md927
-rw-r--r--src/doc/nomicon/src/hrtb.md109
-rw-r--r--src/doc/nomicon/src/img/safeandunsafe.svg66
-rw-r--r--src/doc/nomicon/src/intro.md45
-rw-r--r--src/doc/nomicon/src/leaking.md254
-rw-r--r--src/doc/nomicon/src/lifetime-elision.md68
-rw-r--r--src/doc/nomicon/src/lifetime-mismatch.md123
-rw-r--r--src/doc/nomicon/src/lifetimes.md302
-rw-r--r--src/doc/nomicon/src/meet-safe-and-unsafe.md68
-rw-r--r--src/doc/nomicon/src/obrm.md14
-rw-r--r--src/doc/nomicon/src/other-reprs.md161
-rw-r--r--src/doc/nomicon/src/ownership.md65
-rw-r--r--src/doc/nomicon/src/panic-handler.md84
-rw-r--r--src/doc/nomicon/src/phantom-data.md247
-rw-r--r--src/doc/nomicon/src/poisoning.md35
-rw-r--r--src/doc/nomicon/src/races.md86
-rw-r--r--src/doc/nomicon/src/references.md31
-rw-r--r--src/doc/nomicon/src/repr-rust.md164
-rw-r--r--src/doc/nomicon/src/safe-unsafe-meaning.md166
-rw-r--r--src/doc/nomicon/src/send-and-sync.md257
-rw-r--r--src/doc/nomicon/src/subtyping.md454
-rw-r--r--src/doc/nomicon/src/transmutes.md59
-rw-r--r--src/doc/nomicon/src/unbounded-lifetimes.md36
-rw-r--r--src/doc/nomicon/src/unchecked-uninit.md174
-rw-r--r--src/doc/nomicon/src/uninitialized.md10
-rw-r--r--src/doc/nomicon/src/unwinding.md51
-rw-r--r--src/doc/nomicon/src/vec/vec-alloc.md213
-rw-r--r--src/doc/nomicon/src/vec/vec-dealloc.md26
-rw-r--r--src/doc/nomicon/src/vec/vec-deref.md44
-rw-r--r--src/doc/nomicon/src/vec/vec-drain.md158
-rw-r--r--src/doc/nomicon/src/vec/vec-final.md409
-rw-r--r--src/doc/nomicon/src/vec/vec-insert-remove.md51
-rw-r--r--src/doc/nomicon/src/vec/vec-into-iter.md152
-rw-r--r--src/doc/nomicon/src/vec/vec-layout.md61
-rw-r--r--src/doc/nomicon/src/vec/vec-push-pop.md57
-rw-r--r--src/doc/nomicon/src/vec/vec-raw.md163
-rw-r--r--src/doc/nomicon/src/vec/vec-zsts.md217
-rw-r--r--src/doc/nomicon/src/vec/vec.md14
-rw-r--r--src/doc/nomicon/src/what-unsafe-does.md87
-rw-r--r--src/doc/nomicon/src/working-with-unsafe.md120
-rw-r--r--src/doc/nomicon/theme/nomicon.css40
-rw-r--r--src/doc/not_found.md102
-rw-r--r--src/doc/redirect.inc2
-rw-r--r--src/doc/reference.md4
-rw-r--r--src/doc/reference/.github/workflows/main.yml35
-rw-r--r--src/doc/reference/CONTRIBUTING.md76
-rw-r--r--src/doc/reference/LICENSE-APACHE201
-rw-r--r--src/doc/reference/LICENSE-MIT25
-rw-r--r--src/doc/reference/README.md60
-rw-r--r--src/doc/reference/STYLE.md71
-rw-r--r--src/doc/reference/book.toml14
-rw-r--r--src/doc/reference/reference.md4
-rw-r--r--src/doc/reference/src/SUMMARY.md135
-rw-r--r--src/doc/reference/src/abi.md100
-rw-r--r--src/doc/reference/src/appendices.md1
-rw-r--r--src/doc/reference/src/attributes-redirect.html29
-rw-r--r--src/doc/reference/src/attributes.md346
-rw-r--r--src/doc/reference/src/attributes/codegen.md354
-rw-r--r--src/doc/reference/src/attributes/derive.md51
-rw-r--r--src/doc/reference/src/attributes/diagnostics.md335
-rw-r--r--src/doc/reference/src/attributes/limits.md57
-rw-r--r--src/doc/reference/src/attributes/testing.md90
-rw-r--r--src/doc/reference/src/attributes/type_system.md141
-rw-r--r--src/doc/reference/src/behavior-considered-undefined.md104
-rw-r--r--src/doc/reference/src/behavior-not-considered-unsafe.md56
-rw-r--r--src/doc/reference/src/comments.md125
-rw-r--r--src/doc/reference/src/conditional-compilation.md356
-rw-r--r--src/doc/reference/src/const_eval.md141
-rw-r--r--src/doc/reference/src/crates-and-source-files.md191
-rw-r--r--src/doc/reference/src/destructors.md402
-rw-r--r--src/doc/reference/src/dynamically-sized-types.md33
-rw-r--r--src/doc/reference/src/expressions.md369
-rw-r--r--src/doc/reference/src/expressions/array-expr.md88
-rw-r--r--src/doc/reference/src/expressions/await-expr.md60
-rw-r--r--src/doc/reference/src/expressions/block-expr.md191
-rw-r--r--src/doc/reference/src/expressions/call-expr.md97
-rw-r--r--src/doc/reference/src/expressions/closure-expr.md73
-rw-r--r--src/doc/reference/src/expressions/field-expr.md73
-rw-r--r--src/doc/reference/src/expressions/grouped-expr.md43
-rw-r--r--src/doc/reference/src/expressions/if-expr.md155
-rw-r--r--src/doc/reference/src/expressions/literal-expr.md182
-rw-r--r--src/doc/reference/src/expressions/loop-expr.md274
-rw-r--r--src/doc/reference/src/expressions/match-expr.md147
-rw-r--r--src/doc/reference/src/expressions/method-call-expr.md96
-rw-r--r--src/doc/reference/src/expressions/operator-expr.md670
-rw-r--r--src/doc/reference/src/expressions/path-expr.md32
-rw-r--r--src/doc/reference/src/expressions/range-expr.md76
-rw-r--r--src/doc/reference/src/expressions/return-expr.md21
-rw-r--r--src/doc/reference/src/expressions/struct-expr.md142
-rw-r--r--src/doc/reference/src/expressions/tuple-expr.md80
-rw-r--r--src/doc/reference/src/expressions/underscore-expr.md17
-rw-r--r--src/doc/reference/src/glossary.md331
-rw-r--r--src/doc/reference/src/identifiers.md72
-rw-r--r--src/doc/reference/src/influences.md22
-rw-r--r--src/doc/reference/src/inline-assembly.md614
-rw-r--r--src/doc/reference/src/input-format.md3
-rw-r--r--src/doc/reference/src/interior-mutability.md29
-rw-r--r--src/doc/reference/src/introduction.md146
-rw-r--r--src/doc/reference/src/items.md96
-rw-r--r--src/doc/reference/src/items/associated-items.md397
-rw-r--r--src/doc/reference/src/items/constant-items.md101
-rw-r--r--src/doc/reference/src/items/enumerations.md188
-rw-r--r--src/doc/reference/src/items/extern-crates.md94
-rw-r--r--src/doc/reference/src/items/external-blocks.md235
-rw-r--r--src/doc/reference/src/items/functions.md415
-rw-r--r--src/doc/reference/src/items/generics.md305
-rw-r--r--src/doc/reference/src/items/implementations.md295
-rw-r--r--src/doc/reference/src/items/modules.md166
-rw-r--r--src/doc/reference/src/items/static-items.md131
-rw-r--r--src/doc/reference/src/items/structs.md88
-rw-r--r--src/doc/reference/src/items/traits.md343
-rw-r--r--src/doc/reference/src/items/type-aliases.md47
-rw-r--r--src/doc/reference/src/items/unions.md180
-rw-r--r--src/doc/reference/src/items/use-declarations.md208
-rw-r--r--src/doc/reference/src/keywords.md132
-rw-r--r--src/doc/reference/src/lexical-structure.md1
-rw-r--r--src/doc/reference/src/lifetime-elision.md212
-rw-r--r--src/doc/reference/src/linkage.md216
-rw-r--r--src/doc/reference/src/macro-ambiguity.md377
-rw-r--r--src/doc/reference/src/macros-by-example.md519
-rw-r--r--src/doc/reference/src/macros.md104
-rw-r--r--src/doc/reference/src/memory-allocation-and-lifetime.md13
-rw-r--r--src/doc/reference/src/memory-model.md5
-rw-r--r--src/doc/reference/src/names.md143
-rw-r--r--src/doc/reference/src/names/name-resolution.md3
-rw-r--r--src/doc/reference/src/names/namespaces.md168
-rw-r--r--src/doc/reference/src/names/preludes.md173
-rw-r--r--src/doc/reference/src/names/scopes.md3
-rw-r--r--src/doc/reference/src/notation.md41
-rw-r--r--src/doc/reference/src/paths.md404
-rw-r--r--src/doc/reference/src/patterns.md873
-rw-r--r--src/doc/reference/src/procedural-macros.md367
-rw-r--r--src/doc/reference/src/runtime.md85
-rw-r--r--src/doc/reference/src/special-types-and-traits.md188
-rw-r--r--src/doc/reference/src/statements-and-expressions.md11
-rw-r--r--src/doc/reference/src/statements.md138
-rw-r--r--src/doc/reference/src/subtyping.md114
-rw-r--r--src/doc/reference/src/tokens.md741
-rw-r--r--src/doc/reference/src/trait-bounds.md176
-rw-r--r--src/doc/reference/src/type-coercions.md275
-rw-r--r--src/doc/reference/src/type-layout.md578
-rw-r--r--src/doc/reference/src/type-system.md1
-rw-r--r--src/doc/reference/src/types-redirect.html43
-rw-r--r--src/doc/reference/src/types.md175
-rw-r--r--src/doc/reference/src/types/array.md31
-rw-r--r--src/doc/reference/src/types/boolean.md118
-rw-r--r--src/doc/reference/src/types/closure.md180
-rw-r--r--src/doc/reference/src/types/enum.md22
-rw-r--r--src/doc/reference/src/types/function-item.md57
-rw-r--r--src/doc/reference/src/types/function-pointer.md66
-rw-r--r--src/doc/reference/src/types/impl-trait.md124
-rw-r--r--src/doc/reference/src/types/inferred.md18
-rw-r--r--src/doc/reference/src/types/never.md22
-rw-r--r--src/doc/reference/src/types/numeric.md47
-rw-r--r--src/doc/reference/src/types/parameters.md19
-rw-r--r--src/doc/reference/src/types/pointer.md60
-rw-r--r--src/doc/reference/src/types/slice.md31
-rw-r--r--src/doc/reference/src/types/struct.md29
-rw-r--r--src/doc/reference/src/types/textual.md22
-rw-r--r--src/doc/reference/src/types/trait-object.md107
-rw-r--r--src/doc/reference/src/types/tuple.md47
-rw-r--r--src/doc/reference/src/types/union.md19
-rw-r--r--src/doc/reference/src/unsafe-blocks.md22
-rw-r--r--src/doc/reference/src/unsafe-functions.md5
-rw-r--r--src/doc/reference/src/unsafety.md19
-rw-r--r--src/doc/reference/src/variables.md45
-rw-r--r--src/doc/reference/src/visibility-and-privacy.md245
-rw-r--r--src/doc/reference/src/whitespace.md24
-rw-r--r--src/doc/reference/style-check/Cargo.lock62
-rw-r--r--src/doc/reference/style-check/Cargo.toml8
-rw-r--r--src/doc/reference/style-check/src/main.rs131
-rw-r--r--src/doc/reference/theme/reference.css53
-rw-r--r--src/doc/reference/triagebot.toml6
-rw-r--r--src/doc/robots.txt11
-rw-r--r--src/doc/rust-by-example/.github/workflows/rbe.yml48
-rw-r--r--src/doc/rust-by-example/.travis.yml23
-rw-r--r--src/doc/rust-by-example/CODE_OF_CONDUCT.md39
-rw-r--r--src/doc/rust-by-example/CONTRIBUTING.md69
-rw-r--r--src/doc/rust-by-example/LICENSE-APACHE201
-rw-r--r--src/doc/rust-by-example/LICENSE-MIT25
-rw-r--r--src/doc/rust-by-example/README.md57
-rw-r--r--src/doc/rust-by-example/book.toml17
-rw-r--r--src/doc/rust-by-example/src/SUMMARY.md222
-rw-r--r--src/doc/rust-by-example/src/attribute.md40
-rw-r--r--src/doc/rust-by-example/src/attribute/cfg.md45
-rw-r--r--src/doc/rust-by-example/src/attribute/cfg/custom.md24
-rw-r--r--src/doc/rust-by-example/src/attribute/crate.md40
-rw-r--r--src/doc/rust-by-example/src/attribute/unused.md26
-rw-r--r--src/doc/rust-by-example/src/cargo.md12
-rw-r--r--src/doc/rust-by-example/src/cargo/build_scripts.md39
-rw-r--r--src/doc/rust-by-example/src/cargo/conventions.md37
-rw-r--r--src/doc/rust-by-example/src/cargo/deps.md91
-rw-r--r--src/doc/rust-by-example/src/cargo/test.md154
-rw-r--r--src/doc/rust-by-example/src/compatibility.md7
-rw-r--r--src/doc/rust-by-example/src/compatibility/raw_identifiers.md42
-rw-r--r--src/doc/rust-by-example/src/conversion.md14
-rw-r--r--src/doc/rust-by-example/src/conversion/from_into.md76
-rw-r--r--src/doc/rust-by-example/src/conversion/string.md55
-rw-r--r--src/doc/rust-by-example/src/conversion/try_from_try_into.md45
-rw-r--r--src/doc/rust-by-example/src/crates.md12
-rw-r--r--src/doc/rust-by-example/src/crates/lib.md32
-rw-r--r--src/doc/rust-by-example/src/crates/using_lib.md27
-rw-r--r--src/doc/rust-by-example/src/custom_types.md8
-rw-r--r--src/doc/rust-by-example/src/custom_types/constants.md42
-rw-r--r--src/doc/rust-by-example/src/custom_types/enum.md109
-rw-r--r--src/doc/rust-by-example/src/custom_types/enum/c_like.md37
-rw-r--r--src/doc/rust-by-example/src/custom_types/enum/enum_use.md50
-rw-r--r--src/doc/rust-by-example/src/custom_types/enum/testcase_linked_list.md82
-rw-r--r--src/doc/rust-by-example/src/custom_types/structs.md102
-rw-r--r--src/doc/rust-by-example/src/error.md31
-rw-r--r--src/doc/rust-by-example/src/error/abort_unwind.md51
-rw-r--r--src/doc/rust-by-example/src/error/iter_result.md100
-rw-r--r--src/doc/rust-by-example/src/error/multiple_error_types.md36
-rw-r--r--src/doc/rust-by-example/src/error/multiple_error_types/boxing_errors.md64
-rw-r--r--src/doc/rust-by-example/src/error/multiple_error_types/define_error_type.md68
-rw-r--r--src/doc/rust-by-example/src/error/multiple_error_types/option_result.md56
-rw-r--r--src/doc/rust-by-example/src/error/multiple_error_types/reenter_question_mark.md79
-rw-r--r--src/doc/rust-by-example/src/error/multiple_error_types/wrap_error.md96
-rw-r--r--src/doc/rust-by-example/src/error/option_unwrap.md65
-rw-r--r--src/doc/rust-by-example/src/error/option_unwrap/and_then.md76
-rw-r--r--src/doc/rust-by-example/src/error/option_unwrap/defaults.md123
-rw-r--r--src/doc/rust-by-example/src/error/option_unwrap/map.md86
-rw-r--r--src/doc/rust-by-example/src/error/option_unwrap/question_mark.md58
-rw-r--r--src/doc/rust-by-example/src/error/panic.md19
-rw-r--r--src/doc/rust-by-example/src/error/result.md83
-rw-r--r--src/doc/rust-by-example/src/error/result/early_returns.md46
-rw-r--r--src/doc/rust-by-example/src/error/result/enter_question_mark.md75
-rw-r--r--src/doc/rust-by-example/src/error/result/result_alias.md46
-rw-r--r--src/doc/rust-by-example/src/error/result/result_map.md88
-rw-r--r--src/doc/rust-by-example/src/expression.md54
-rw-r--r--src/doc/rust-by-example/src/flow_control.md4
-rw-r--r--src/doc/rust-by-example/src/flow_control/for.md125
-rw-r--r--src/doc/rust-by-example/src/flow_control/if_else.md37
-rw-r--r--src/doc/rust-by-example/src/flow_control/if_let.md128
-rw-r--r--src/doc/rust-by-example/src/flow_control/loop.md36
-rw-r--r--src/doc/rust-by-example/src/flow_control/loop/nested.md29
-rw-r--r--src/doc/rust-by-example/src/flow_control/loop/return.md22
-rw-r--r--src/doc/rust-by-example/src/flow_control/match.md37
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/binding.md54
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/destructuring.md16
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_enum.md54
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_pointers.md65
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_slice.md48
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_structures.md32
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_tuple.md27
-rw-r--r--src/doc/rust-by-example/src/flow_control/match/guard.md45
-rw-r--r--src/doc/rust-by-example/src/flow_control/while.md30
-rw-r--r--src/doc/rust-by-example/src/flow_control/while_let.md62
-rw-r--r--src/doc/rust-by-example/src/fn.md51
-rw-r--r--src/doc/rust-by-example/src/fn/closures.md47
-rw-r--r--src/doc/rust-by-example/src/fn/closures/anonymity.md56
-rw-r--r--src/doc/rust-by-example/src/fn/closures/capture.md115
-rw-r--r--src/doc/rust-by-example/src/fn/closures/closure_examples.md3
-rw-r--r--src/doc/rust-by-example/src/fn/closures/closure_examples/iter_any.md54
-rw-r--r--src/doc/rust-by-example/src/fn/closures/closure_examples/iter_find.md81
-rw-r--r--src/doc/rust-by-example/src/fn/closures/input_functions.md38
-rw-r--r--src/doc/rust-by-example/src/fn/closures/input_parameters.md93
-rw-r--r--src/doc/rust-by-example/src/fn/closures/output_parameters.md56
-rw-r--r--src/doc/rust-by-example/src/fn/diverging.md69
-rw-r--r--src/doc/rust-by-example/src/fn/hof.md50
-rw-r--r--src/doc/rust-by-example/src/fn/methods.md118
-rw-r--r--src/doc/rust-by-example/src/generics.md64
-rw-r--r--src/doc/rust-by-example/src/generics/assoc_items.md15
-rw-r--r--src/doc/rust-by-example/src/generics/assoc_items/the_problem.md67
-rw-r--r--src/doc/rust-by-example/src/generics/assoc_items/types.md85
-rw-r--r--src/doc/rust-by-example/src/generics/bounds.md81
-rw-r--r--src/doc/rust-by-example/src/generics/bounds/testcase_empty.md43
-rw-r--r--src/doc/rust-by-example/src/generics/gen_fn.md59
-rw-r--r--src/doc/rust-by-example/src/generics/gen_trait.md45
-rw-r--r--src/doc/rust-by-example/src/generics/impl.md56
-rw-r--r--src/doc/rust-by-example/src/generics/multi_bounds.md37
-rw-r--r--src/doc/rust-by-example/src/generics/new_types.md59
-rw-r--r--src/doc/rust-by-example/src/generics/phantom.md63
-rw-r--r--src/doc/rust-by-example/src/generics/phantom/testcase_units.md88
-rw-r--r--src/doc/rust-by-example/src/generics/where.md55
-rw-r--r--src/doc/rust-by-example/src/hello.md49
-rw-r--r--src/doc/rust-by-example/src/hello/comment.md51
-rw-r--r--src/doc/rust-by-example/src/hello/print.md111
-rw-r--r--src/doc/rust-by-example/src/hello/print/fmt.md93
-rw-r--r--src/doc/rust-by-example/src/hello/print/print_debug.md84
-rw-r--r--src/doc/rust-by-example/src/hello/print/print_display.md129
-rw-r--r--src/doc/rust-by-example/src/hello/print/print_display/testcase_list.md71
-rw-r--r--src/doc/rust-by-example/src/index.md66
-rw-r--r--src/doc/rust-by-example/src/macros.md40
-rw-r--r--src/doc/rust-by-example/src/macros/designators.md67
-rw-r--r--src/doc/rust-by-example/src/macros/dry.md75
-rw-r--r--src/doc/rust-by-example/src/macros/dsl.md44
-rw-r--r--src/doc/rust-by-example/src/macros/overload.md31
-rw-r--r--src/doc/rust-by-example/src/macros/repeat.md28
-rw-r--r--src/doc/rust-by-example/src/macros/syntax.md12
-rw-r--r--src/doc/rust-by-example/src/macros/variadics.md41
-rw-r--r--src/doc/rust-by-example/src/meta.md12
-rw-r--r--src/doc/rust-by-example/src/meta/doc.md124
-rw-r--r--src/doc/rust-by-example/src/meta/playpen.md46
-rw-r--r--src/doc/rust-by-example/src/mod.md8
-rw-r--r--src/doc/rust-by-example/src/mod/split.md96
-rw-r--r--src/doc/rust-by-example/src/mod/struct_visibility.md59
-rw-r--r--src/doc/rust-by-example/src/mod/super.md56
-rw-r--r--src/doc/rust-by-example/src/mod/use.md55
-rw-r--r--src/doc/rust-by-example/src/mod/visibility.md128
-rw-r--r--src/doc/rust-by-example/src/primitives.md63
-rw-r--r--src/doc/rust-by-example/src/primitives/array.md70
-rw-r--r--src/doc/rust-by-example/src/primitives/literals.md46
-rw-r--r--src/doc/rust-by-example/src/primitives/tuples.md97
-rw-r--r--src/doc/rust-by-example/src/scope.md5
-rw-r--r--src/doc/rust-by-example/src/scope/borrow.md49
-rw-r--r--src/doc/rust-by-example/src/scope/borrow/alias.md58
-rw-r--r--src/doc/rust-by-example/src/scope/borrow/mut.md59
-rw-r--r--src/doc/rust-by-example/src/scope/borrow/ref.md57
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime.md42
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/elision.md43
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/explicit.md75
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/fn.md63
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/lifetime_bounds.md53
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/lifetime_coercion.md31
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/methods.md28
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/static_lifetime.md110
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/struct.md46
-rw-r--r--src/doc/rust-by-example/src/scope/lifetime/trait.md33
-rw-r--r--src/doc/rust-by-example/src/scope/move.md60
-rw-r--r--src/doc/rust-by-example/src/scope/move/mut.md24
-rw-r--r--src/doc/rust-by-example/src/scope/move/partial_move.md48
-rw-r--r--src/doc/rust-by-example/src/scope/raii.md96
-rw-r--r--src/doc/rust-by-example/src/std.md17
-rw-r--r--src/doc/rust-by-example/src/std/arc.md33
-rw-r--r--src/doc/rust-by-example/src/std/box.md77
-rw-r--r--src/doc/rust-by-example/src/std/hash.md64
-rw-r--r--src/doc/rust-by-example/src/std/hash/alt_key_types.md89
-rw-r--r--src/doc/rust-by-example/src/std/hash/hashset.md76
-rw-r--r--src/doc/rust-by-example/src/std/option.md50
-rw-r--r--src/doc/rust-by-example/src/std/panic.md54
-rw-r--r--src/doc/rust-by-example/src/std/rc.md54
-rw-r--r--src/doc/rust-by-example/src/std/result.md74
-rw-r--r--src/doc/rust-by-example/src/std/result/question_mark.md78
-rw-r--r--src/doc/rust-by-example/src/std/str.md166
-rw-r--r--src/doc/rust-by-example/src/std/vec.md70
-rw-r--r--src/doc/rust-by-example/src/std_misc.md17
-rw-r--r--src/doc/rust-by-example/src/std_misc/arg.md37
-rw-r--r--src/doc/rust-by-example/src/std_misc/arg/matching.md94
-rw-r--r--src/doc/rust-by-example/src/std_misc/channels.md55
-rw-r--r--src/doc/rust-by-example/src/std_misc/ffi.md56
-rw-r--r--src/doc/rust-by-example/src/std_misc/file.md11
-rw-r--r--src/doc/rust-by-example/src/std_misc/file/create.md58
-rw-r--r--src/doc/rust-by-example/src/std_misc/file/open.md46
-rw-r--r--src/doc/rust-by-example/src/std_misc/file/read_lines.md44
-rw-r--r--src/doc/rust-by-example/src/std_misc/fs.md146
-rw-r--r--src/doc/rust-by-example/src/std_misc/path.md57
-rw-r--r--src/doc/rust-by-example/src/std_misc/process.md29
-rw-r--r--src/doc/rust-by-example/src/std_misc/process/pipe.md46
-rw-r--r--src/doc/rust-by-example/src/std_misc/process/wait.md21
-rw-r--r--src/doc/rust-by-example/src/std_misc/threads.md30
-rw-r--r--src/doc/rust-by-example/src/std_misc/threads/testcase_mapreduce.md144
-rw-r--r--src/doc/rust-by-example/src/testing.md26
-rw-r--r--src/doc/rust-by-example/src/testing/dev_dependencies.md39
-rw-r--r--src/doc/rust-by-example/src/testing/doc_testing.md111
-rw-r--r--src/doc/rust-by-example/src/testing/integration_testing.md82
-rw-r--r--src/doc/rust-by-example/src/testing/unit_testing.md262
-rw-r--r--src/doc/rust-by-example/src/trait.md80
-rw-r--r--src/doc/rust-by-example/src/trait/clone.md55
-rw-r--r--src/doc/rust-by-example/src/trait/derive.md77
-rw-r--r--src/doc/rust-by-example/src/trait/disambiguating.md64
-rw-r--r--src/doc/rust-by-example/src/trait/drop.md57
-rw-r--r--src/doc/rust-by-example/src/trait/dyn.md47
-rw-r--r--src/doc/rust-by-example/src/trait/impl_trait.md128
-rw-r--r--src/doc/rust-by-example/src/trait/iter.md88
-rw-r--r--src/doc/rust-by-example/src/trait/ops.md61
-rw-r--r--src/doc/rust-by-example/src/trait/supertraits.md44
-rw-r--r--src/doc/rust-by-example/src/types.md13
-rw-r--r--src/doc/rust-by-example/src/types/alias.md32
-rw-r--r--src/doc/rust-by-example/src/types/cast.md89
-rw-r--r--src/doc/rust-by-example/src/types/inference.md28
-rw-r--r--src/doc/rust-by-example/src/types/literals.md40
-rw-r--r--src/doc/rust-by-example/src/unsafe.md61
-rw-r--r--src/doc/rust-by-example/src/unsafe/asm.md443
-rw-r--r--src/doc/rust-by-example/src/variable_bindings.md31
-rw-r--r--src/doc/rust-by-example/src/variable_bindings/declare.md34
-rw-r--r--src/doc/rust-by-example/src/variable_bindings/freeze.md24
-rw-r--r--src/doc/rust-by-example/src/variable_bindings/mut.md24
-rw-r--r--src/doc/rust-by-example/src/variable_bindings/scope.md46
-rw-r--r--src/doc/rust-by-example/triagebot.toml1
-rw-r--r--src/doc/rust.css355
-rw-r--r--src/doc/rust.md3
-rw-r--r--src/doc/rustc-dev-guide/.editorconfig9
-rw-r--r--src/doc/rustc-dev-guide/.github/workflows/ci.yml80
-rw-r--r--src/doc/rustc-dev-guide/.github/workflows/date-check.yml49
-rw-r--r--src/doc/rustc-dev-guide/CNAME1
-rw-r--r--src/doc/rustc-dev-guide/CODE_OF_CONDUCT.md3
-rw-r--r--src/doc/rustc-dev-guide/LICENSE-APACHE201
-rw-r--r--src/doc/rustc-dev-guide/LICENSE-MIT23
-rw-r--r--src/doc/rustc-dev-guide/README.md127
-rw-r--r--src/doc/rustc-dev-guide/book.toml45
-rwxr-xr-xsrc/doc/rustc-dev-guide/ci/check-in.sh38
-rwxr-xr-xsrc/doc/rustc-dev-guide/ci/check_line_lengths.sh43
-rw-r--r--src/doc/rustc-dev-guide/ci/date-check/Cargo.lock133
-rw-r--r--src/doc/rustc-dev-guide/ci/date-check/Cargo.toml12
-rw-r--r--src/doc/rustc-dev-guide/ci/date-check/src/main.rs242
-rwxr-xr-xsrc/doc/rustc-dev-guide/ci/linkcheck.sh31
-rw-r--r--src/doc/rustc-dev-guide/examples/rustc-driver-example.rs94
-rw-r--r--src/doc/rustc-dev-guide/examples/rustc-driver-getting-diagnostics.rs96
-rw-r--r--src/doc/rustc-dev-guide/examples/rustc-driver-interacting-with-the-ast.rs93
-rw-r--r--src/doc/rustc-dev-guide/mermaid-init.js1
-rw-r--r--src/doc/rustc-dev-guide/src/SUMMARY.md181
-rw-r--r--src/doc/rustc-dev-guide/src/about-this-guide.md71
-rw-r--r--src/doc/rustc-dev-guide/src/appendix/background.md332
-rw-r--r--src/doc/rustc-dev-guide/src/appendix/bibliography.md92
-rw-r--r--src/doc/rustc-dev-guide/src/appendix/code-index.md45
-rw-r--r--src/doc/rustc-dev-guide/src/appendix/compiler-lecture.md48
-rw-r--r--src/doc/rustc-dev-guide/src/appendix/glossary.md98
-rw-r--r--src/doc/rustc-dev-guide/src/appendix/humorust.md15
-rw-r--r--src/doc/rustc-dev-guide/src/asm.md367
-rw-r--r--src/doc/rustc-dev-guide/src/ast-validation.md6
-rw-r--r--src/doc/rustc-dev-guide/src/backend/backend-agnostic.md207
-rw-r--r--src/doc/rustc-dev-guide/src/backend/codegen.md76
-rw-r--r--src/doc/rustc-dev-guide/src/backend/debugging.md258
-rw-r--r--src/doc/rustc-dev-guide/src/backend/implicit-caller-location.md281
-rw-r--r--src/doc/rustc-dev-guide/src/backend/inline-asm.md5
-rw-r--r--src/doc/rustc-dev-guide/src/backend/libs-and-metadata.md192
-rw-r--r--src/doc/rustc-dev-guide/src/backend/lowering-mir.md57
-rw-r--r--src/doc/rustc-dev-guide/src/backend/monomorph.md155
-rw-r--r--src/doc/rustc-dev-guide/src/backend/updating-llvm.md194
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check.md59
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization.md50
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization/move_paths.md129
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference.md238
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference/closure_constraints.md10
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference/constraint_propagation.md224
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference/error_reporting.md3
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference/lifetime_parameters.md127
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference/member_constraints.md193
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/region_inference/placeholders_and_universes.md442
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/two_phase_borrows.md100
-rw-r--r--src/doc/rustc-dev-guide/src/borrow_check/type_check.md64
-rw-r--r--src/doc/rustc-dev-guide/src/bug-fix-procedure.md334
-rw-r--r--src/doc/rustc-dev-guide/src/building/bootstrapping.md415
-rw-r--r--src/doc/rustc-dev-guide/src/building/build-install-distribution-artifacts.md29
-rw-r--r--src/doc/rustc-dev-guide/src/building/compiler-documenting.md49
-rw-r--r--src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md298
-rw-r--r--src/doc/rustc-dev-guide/src/building/new-target.md156
-rw-r--r--src/doc/rustc-dev-guide/src/building/prerequisites.md85
-rw-r--r--src/doc/rustc-dev-guide/src/building/suggested.md298
-rw-r--r--src/doc/rustc-dev-guide/src/cli.md33
-rw-r--r--src/doc/rustc-dev-guide/src/closure.md215
-rw-r--r--src/doc/rustc-dev-guide/src/compiler-debugging.md282
-rw-r--r--src/doc/rustc-dev-guide/src/compiler-src.md203
-rw-r--r--src/doc/rustc-dev-guide/src/compiler-team.md139
-rw-r--r--src/doc/rustc-dev-guide/src/const-eval.md45
-rw-r--r--src/doc/rustc-dev-guide/src/constants.md82
-rw-r--r--src/doc/rustc-dev-guide/src/contributing.md595
-rw-r--r--src/doc/rustc-dev-guide/src/conventions.md152
-rw-r--r--src/doc/rustc-dev-guide/src/crates-io.md24
-rw-r--r--src/doc/rustc-dev-guide/src/debugging-support-in-rustc.md354
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics.md936
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics/diagnostic-codes.md79
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics/diagnostic-items.md147
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics/diagnostic-structs.md375
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics/error-guaranteed.md34
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics/lintstore.md123
-rw-r--r--src/doc/rustc-dev-guide/src/diagnostics/translation.md239
-rw-r--r--src/doc/rustc-dev-guide/src/early-late-bound.md107
-rw-r--r--src/doc/rustc-dev-guide/src/feature-gate-ck.md3
-rw-r--r--src/doc/rustc-dev-guide/src/feature-gates.md111
-rw-r--r--src/doc/rustc-dev-guide/src/generic_arguments.md50
-rw-r--r--src/doc/rustc-dev-guide/src/generics.md144
-rw-r--r--src/doc/rustc-dev-guide/src/getting-started.md314
-rw-r--r--src/doc/rustc-dev-guide/src/git.md435
-rw-r--r--src/doc/rustc-dev-guide/src/hir-debugging.md8
-rw-r--r--src/doc/rustc-dev-guide/src/hir.md136
-rw-r--r--src/doc/rustc-dev-guide/src/identifiers.md108
-rw-r--r--src/doc/rustc-dev-guide/src/img/coverage-branch-counting-01.pngbin0 -> 11282 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/img/coverage-graphviz-01.pngbin0 -> 340404 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/img/coverage-spanview-01.pngbin0 -> 320657 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/img/dataflow-graphviz-example.pngbin0 -> 81892 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/img/llvm-cov-show-01.pngbin0 -> 416748 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/img/rustc_stages.svg3
-rw-r--r--src/doc/rustc-dev-guide/src/img/wpa-initial-memory.pngbin0 -> 312637 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/img/wpa-stack.pngbin0 -> 145576 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/implementing_new_features.md168
-rw-r--r--src/doc/rustc-dev-guide/src/incrcomp-debugging.md115
-rw-r--r--src/doc/rustc-dev-guide/src/lang-items.md67
-rw-r--r--src/doc/rustc-dev-guide/src/licenses.md5
-rw-r--r--src/doc/rustc-dev-guide/src/llvm-coverage-instrumentation.md627
-rw-r--r--src/doc/rustc-dev-guide/src/lowering.md48
-rw-r--r--src/doc/rustc-dev-guide/src/macro-expansion.md619
-rw-r--r--src/doc/rustc-dev-guide/src/memory.md88
-rw-r--r--src/doc/rustc-dev-guide/src/method-lookup.md113
-rw-r--r--src/doc/rustc-dev-guide/src/mir/construction.md148
-rw-r--r--src/doc/rustc-dev-guide/src/mir/dataflow.md237
-rw-r--r--src/doc/rustc-dev-guide/src/mir/debugging.md98
-rw-r--r--src/doc/rustc-dev-guide/src/mir/drop-elaboration.md195
-rw-r--r--src/doc/rustc-dev-guide/src/mir/index.md280
-rw-r--r--src/doc/rustc-dev-guide/src/mir/mir_cfg.svg270
-rw-r--r--src/doc/rustc-dev-guide/src/mir/mir_detailed.dot27
-rw-r--r--src/doc/rustc-dev-guide/src/mir/mir_detailed.svg300
-rw-r--r--src/doc/rustc-dev-guide/src/mir/mir_overview.dot10
-rw-r--r--src/doc/rustc-dev-guide/src/mir/mir_overview.svg103
-rw-r--r--src/doc/rustc-dev-guide/src/mir/optimizations.md136
-rw-r--r--src/doc/rustc-dev-guide/src/mir/passes.md102
-rw-r--r--src/doc/rustc-dev-guide/src/mir/visitor.md56
-rw-r--r--src/doc/rustc-dev-guide/src/miri.md239
-rw-r--r--src/doc/rustc-dev-guide/src/name-resolution.md181
-rw-r--r--src/doc/rustc-dev-guide/src/notification-groups/about.md99
-rw-r--r--src/doc/rustc-dev-guide/src/notification-groups/arm.md22
-rw-r--r--src/doc/rustc-dev-guide/src/notification-groups/cleanup-crew.md114
-rw-r--r--src/doc/rustc-dev-guide/src/notification-groups/llvm.md34
-rw-r--r--src/doc/rustc-dev-guide/src/notification-groups/risc-v.md22
-rw-r--r--src/doc/rustc-dev-guide/src/notification-groups/windows.md32
-rw-r--r--src/doc/rustc-dev-guide/src/opaque-types-impl-trait-inference.md277
-rw-r--r--src/doc/rustc-dev-guide/src/opaque-types-type-alias-impl-trait.md63
-rw-r--r--src/doc/rustc-dev-guide/src/overview.md423
-rw-r--r--src/doc/rustc-dev-guide/src/panic-implementation.md112
-rw-r--r--src/doc/rustc-dev-guide/src/parallel-rustc.md106
-rw-r--r--src/doc/rustc-dev-guide/src/param_env.md69
-rw-r--r--src/doc/rustc-dev-guide/src/part-2-intro.md14
-rw-r--r--src/doc/rustc-dev-guide/src/part-3-intro.md10
-rw-r--r--src/doc/rustc-dev-guide/src/part-4-intro.md12
-rw-r--r--src/doc/rustc-dev-guide/src/part-5-intro.md54
-rw-r--r--src/doc/rustc-dev-guide/src/pat-exhaustive-checking.md88
-rw-r--r--src/doc/rustc-dev-guide/src/profile-guided-optimization.md140
-rw-r--r--src/doc/rustc-dev-guide/src/profiling.md113
-rw-r--r--src/doc/rustc-dev-guide/src/profiling/with_perf.md331
-rw-r--r--src/doc/rustc-dev-guide/src/profiling/wpa_profiling.md108
-rw-r--r--src/doc/rustc-dev-guide/src/queries/example-0.counts.txt104
-rw-r--r--src/doc/rustc-dev-guide/src/queries/example-0.html313330
-rw-r--r--src/doc/rustc-dev-guide/src/queries/example-0.pngbin0 -> 106577 bytes
-rw-r--r--src/doc/rustc-dev-guide/src/queries/incremental-compilation-in-detail.md537
-rw-r--r--src/doc/rustc-dev-guide/src/queries/incremental-compilation.md151
-rw-r--r--src/doc/rustc-dev-guide/src/queries/query-evaluation-model-in-detail.md213
-rw-r--r--src/doc/rustc-dev-guide/src/query.md315
-rw-r--r--src/doc/rustc-dev-guide/src/rustbot.md63
-rw-r--r--src/doc/rustc-dev-guide/src/rustc-driver-getting-diagnostics.md44
-rw-r--r--src/doc/rustc-dev-guide/src/rustc-driver-interacting-with-the-ast.md49
-rw-r--r--src/doc/rustc-dev-guide/src/rustc-driver.md45
-rw-r--r--src/doc/rustc-dev-guide/src/rustdoc-internals.md242
-rw-r--r--src/doc/rustc-dev-guide/src/rustdoc.md181
-rw-r--r--src/doc/rustc-dev-guide/src/salsa.md218
-rw-r--r--src/doc/rustc-dev-guide/src/sanitizers.md121
-rw-r--r--src/doc/rustc-dev-guide/src/serialization.md166
-rw-r--r--src/doc/rustc-dev-guide/src/stability.md155
-rw-r--r--src/doc/rustc-dev-guide/src/stabilization_guide.md210
-rw-r--r--src/doc/rustc-dev-guide/src/syntax-intro.md13
-rw-r--r--src/doc/rustc-dev-guide/src/test-implementation.md159
-rw-r--r--src/doc/rustc-dev-guide/src/tests/adding.md195
-rw-r--r--src/doc/rustc-dev-guide/src/tests/ci.md73
-rw-r--r--src/doc/rustc-dev-guide/src/tests/compiletest.md526
-rw-r--r--src/doc/rustc-dev-guide/src/tests/crater.md45
-rw-r--r--src/doc/rustc-dev-guide/src/tests/docker.md52
-rw-r--r--src/doc/rustc-dev-guide/src/tests/headers.md405
-rw-r--r--src/doc/rustc-dev-guide/src/tests/intro.md161
-rw-r--r--src/doc/rustc-dev-guide/src/tests/perf.md50
-rw-r--r--src/doc/rustc-dev-guide/src/tests/running.md328
-rw-r--r--src/doc/rustc-dev-guide/src/tests/ui.md514
-rw-r--r--src/doc/rustc-dev-guide/src/the-parser.md70
-rw-r--r--src/doc/rustc-dev-guide/src/thir.md223
-rw-r--r--src/doc/rustc-dev-guide/src/tracing.md228
-rw-r--r--src/doc/rustc-dev-guide/src/traits/caching.md67
-rw-r--r--src/doc/rustc-dev-guide/src/traits/canonical-queries.md247
-rw-r--r--src/doc/rustc-dev-guide/src/traits/chalk.md41
-rw-r--r--src/doc/rustc-dev-guide/src/traits/goals-and-clauses.md272
-rw-r--r--src/doc/rustc-dev-guide/src/traits/hrtb.md127
-rw-r--r--src/doc/rustc-dev-guide/src/traits/lowering-to-logic.md187
-rw-r--r--src/doc/rustc-dev-guide/src/traits/resolution.md318
-rw-r--r--src/doc/rustc-dev-guide/src/traits/specialization.md51
-rw-r--r--src/doc/rustc-dev-guide/src/ty-fold.md105
-rw-r--r--src/doc/rustc-dev-guide/src/ty.md348
-rw-r--r--src/doc/rustc-dev-guide/src/type-checking.md44
-rw-r--r--src/doc/rustc-dev-guide/src/type-inference.md258
-rw-r--r--src/doc/rustc-dev-guide/src/variance.md318
-rw-r--r--src/doc/rustc-dev-guide/src/walkthrough.md267
-rw-r--r--src/doc/rustc-dev-guide/triagebot.toml8
-rw-r--r--src/doc/rustc/book.toml7
-rw-r--r--src/doc/rustc/src/SUMMARY.md43
-rw-r--r--src/doc/rustc/src/codegen-options/index.md626
-rw-r--r--src/doc/rustc/src/command-line-arguments.md449
-rw-r--r--src/doc/rustc/src/contributing.md12
-rw-r--r--src/doc/rustc/src/exploit-mitigations.md699
-rw-r--r--src/doc/rustc/src/images/image1.pngbin0 -> 15293 bytes
-rw-r--r--src/doc/rustc/src/images/image2.pngbin0 -> 28772 bytes
-rw-r--r--src/doc/rustc/src/images/image3.pngbin0 -> 72412 bytes
-rw-r--r--src/doc/rustc/src/images/llvm-cov-show-01.pngbin0 -> 416748 bytes
-rw-r--r--src/doc/rustc/src/instrument-coverage.md330
-rw-r--r--src/doc/rustc/src/json.md260
-rw-r--r--src/doc/rustc/src/linker-plugin-lto.md197
-rw-r--r--src/doc/rustc/src/lints/groups.md22
-rw-r--r--src/doc/rustc/src/lints/index.md60
-rw-r--r--src/doc/rustc/src/lints/levels.md283
-rw-r--r--src/doc/rustc/src/lints/listing/allowed-by-default.md3
-rw-r--r--src/doc/rustc/src/lints/listing/deny-by-default.md3
-rw-r--r--src/doc/rustc/src/lints/listing/index.md5
-rw-r--r--src/doc/rustc/src/lints/listing/warn-by-default.md3
-rw-r--r--src/doc/rustc/src/platform-support.md312
-rw-r--r--src/doc/rustc/src/platform-support/TEMPLATE.md52
-rw-r--r--src/doc/rustc/src/platform-support/aarch64-apple-ios-sim.md55
-rw-r--r--src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md49
-rw-r--r--src/doc/rustc/src/platform-support/apple-watchos.md55
-rw-r--r--src/doc/rustc/src/platform-support/armv6k-nintendo-3ds.md130
-rw-r--r--src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabi.md131
-rw-r--r--src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabihf.md66
-rw-r--r--src/doc/rustc/src/platform-support/fuchsia.md295
-rw-r--r--src/doc/rustc/src/platform-support/kmc-solid.md65
-rw-r--r--src/doc/rustc/src/platform-support/m68k-unknown-linux-gnu.md97
-rw-r--r--src/doc/rustc/src/platform-support/mips64-openwrt-linux-musl.md28
-rw-r--r--src/doc/rustc/src/platform-support/nvptx64-nvidia-cuda.md58
-rw-r--r--src/doc/rustc/src/platform-support/openbsd.md56
-rw-r--r--src/doc/rustc/src/platform-support/pc-windows-gnullvm.md48
-rw-r--r--src/doc/rustc/src/platform-support/riscv32imac-unknown-xous-elf.md50
-rw-r--r--src/doc/rustc/src/platform-support/unknown-uefi.md254
-rw-r--r--src/doc/rustc/src/platform-support/wasm64-unknown-unknown.md101
-rw-r--r--src/doc/rustc/src/platform-support/x86_64-unknown-none.md80
-rw-r--r--src/doc/rustc/src/profile-guided-optimization.md147
-rw-r--r--src/doc/rustc/src/target-tier-policy.md663
-rw-r--r--src/doc/rustc/src/targets/built-in.md15
-rw-r--r--src/doc/rustc/src/targets/custom.md17
-rw-r--r--src/doc/rustc/src/targets/index.md19
-rw-r--r--src/doc/rustc/src/targets/known-issues.md13
-rw-r--r--src/doc/rustc/src/tests/index.md320
-rw-r--r--src/doc/rustc/src/what-is-rustc.md68
-rw-r--r--src/doc/rustdoc.md3
-rw-r--r--src/doc/rustdoc/README.md5
-rw-r--r--src/doc/rustdoc/book.toml10
-rw-r--r--src/doc/rustdoc/src/SUMMARY.md16
-rw-r--r--src/doc/rustdoc/src/advanced-features.md112
-rw-r--r--src/doc/rustdoc/src/command-line-arguments.md419
-rw-r--r--src/doc/rustdoc/src/deprecated-features.md13
-rw-r--r--src/doc/rustdoc/src/how-to-read-rustdoc.md104
-rw-r--r--src/doc/rustdoc/src/how-to-write-documentation.md270
-rw-r--r--src/doc/rustdoc/src/lints.md376
-rw-r--r--src/doc/rustdoc/src/references.md31
-rw-r--r--src/doc/rustdoc/src/scraped-examples.md55
-rw-r--r--src/doc/rustdoc/src/unstable-features.md576
-rw-r--r--src/doc/rustdoc/src/what-is-rustdoc.md157
-rw-r--r--src/doc/rustdoc/src/write-documentation/documentation-tests.md445
-rw-r--r--src/doc/rustdoc/src/write-documentation/linking-to-items-by-name.md143
-rw-r--r--src/doc/rustdoc/src/write-documentation/the-doc-attribute.md278
-rw-r--r--src/doc/rustdoc/src/write-documentation/what-to-include.md126
-rw-r--r--src/doc/tutorial.md3
-rw-r--r--src/doc/unstable-book/book.toml6
-rw-r--r--src/doc/unstable-book/src/compiler-flags.md1
-rw-r--r--src/doc/unstable-book/src/compiler-flags/branch-protection.md18
-rw-r--r--src/doc/unstable-book/src/compiler-flags/cf-protection.md40
-rw-r--r--src/doc/unstable-book/src/compiler-flags/check-cfg.md206
-rw-r--r--src/doc/unstable-book/src/compiler-flags/codegen-backend.md31
-rw-r--r--src/doc/unstable-book/src/compiler-flags/control-flow-guard.md59
-rw-r--r--src/doc/unstable-book/src/compiler-flags/debug_info_for_profiling.md35
-rw-r--r--src/doc/unstable-book/src/compiler-flags/dwarf-version.md9
-rw-r--r--src/doc/unstable-book/src/compiler-flags/emit-stack-sizes.md167
-rw-r--r--src/doc/unstable-book/src/compiler-flags/extern-options.md27
-rw-r--r--src/doc/unstable-book/src/compiler-flags/location-detail.md44
-rw-r--r--src/doc/unstable-book/src/compiler-flags/move-size-limit.md10
-rw-r--r--src/doc/unstable-book/src/compiler-flags/no-unique-section-names.md9
-rw-r--r--src/doc/unstable-book/src/compiler-flags/profile.md27
-rw-r--r--src/doc/unstable-book/src/compiler-flags/profile_sample_use.md10
-rw-r--r--src/doc/unstable-book/src/compiler-flags/remap-cwd-prefix.md24
-rw-r--r--src/doc/unstable-book/src/compiler-flags/report-time.md77
-rw-r--r--src/doc/unstable-book/src/compiler-flags/sanitizer.md684
-rw-r--r--src/doc/unstable-book/src/compiler-flags/self-profile-events.md74
-rw-r--r--src/doc/unstable-book/src/compiler-flags/self-profile.md47
-rw-r--r--src/doc/unstable-book/src/compiler-flags/src-hash-algorithm.md11
-rw-r--r--src/doc/unstable-book/src/compiler-flags/temps-dir.md10
-rw-r--r--src/doc/unstable-book/src/compiler-flags/tls-model.md25
-rw-r--r--src/doc/unstable-book/src/compiler-flags/unsound-mir-opts.md8
-rw-r--r--src/doc/unstable-book/src/compiler-flags/virtual-function-elimination.md39
-rw-r--r--src/doc/unstable-book/src/language-features.md1
-rw-r--r--src/doc/unstable-book/src/language-features/abi-c-cmse-nonsecure-call.md88
-rw-r--r--src/doc/unstable-book/src/language-features/abi-msp430-interrupt.md42
-rw-r--r--src/doc/unstable-book/src/language-features/abi-ptx.md60
-rw-r--r--src/doc/unstable-book/src/language-features/abi-thiscall.md12
-rw-r--r--src/doc/unstable-book/src/language-features/allocator-internals.md7
-rw-r--r--src/doc/unstable-book/src/language-features/arbitrary-enum-discriminant.md37
-rw-r--r--src/doc/unstable-book/src/language-features/asm-const.md11
-rw-r--r--src/doc/unstable-book/src/language-features/asm-experimental-arch.md132
-rw-r--r--src/doc/unstable-book/src/language-features/asm-sym.md13
-rw-r--r--src/doc/unstable-book/src/language-features/asm-unwind.md9
-rw-r--r--src/doc/unstable-book/src/language-features/auto-traits.md106
-rw-r--r--src/doc/unstable-book/src/language-features/box-patterns.md32
-rw-r--r--src/doc/unstable-book/src/language-features/box-syntax.md22
-rw-r--r--src/doc/unstable-book/src/language-features/c-unwind.md26
-rw-r--r--src/doc/unstable-book/src/language-features/c-variadic.md24
-rw-r--r--src/doc/unstable-book/src/language-features/cfg-sanitize.md34
-rw-r--r--src/doc/unstable-book/src/language-features/cfg-version.md35
-rw-r--r--src/doc/unstable-book/src/language-features/closure-track-caller.md12
-rw-r--r--src/doc/unstable-book/src/language-features/cmse-nonsecure-entry.md81
-rw-r--r--src/doc/unstable-book/src/language-features/compiler-builtins.md5
-rw-r--r--src/doc/unstable-book/src/language-features/const-eval-limit.md7
-rw-r--r--src/doc/unstable-book/src/language-features/custom-test-frameworks.md32
-rw-r--r--src/doc/unstable-book/src/language-features/debugger-visualizer.md27
-rw-r--r--src/doc/unstable-book/src/language-features/doc-cfg.md46
-rw-r--r--src/doc/unstable-book/src/language-features/doc-masked.md24
-rw-r--r--src/doc/unstable-book/src/language-features/doc-notable-trait.md33
-rw-r--r--src/doc/unstable-book/src/language-features/exclusive-range-pattern.md26
-rw-r--r--src/doc/unstable-book/src/language-features/ffi-const.md52
-rw-r--r--src/doc/unstable-book/src/language-features/ffi-pure.md56
-rw-r--r--src/doc/unstable-book/src/language-features/generators.md246
-rw-r--r--src/doc/unstable-book/src/language-features/half-open-range-patterns.md27
-rw-r--r--src/doc/unstable-book/src/language-features/inline-const-pat.md24
-rw-r--r--src/doc/unstable-book/src/language-features/inline-const.md32
-rw-r--r--src/doc/unstable-book/src/language-features/intra-doc-pointers.md15
-rw-r--r--src/doc/unstable-book/src/language-features/intrinsics.md29
-rw-r--r--src/doc/unstable-book/src/language-features/lang-items.md297
-rw-r--r--src/doc/unstable-book/src/language-features/link-cfg.md5
-rw-r--r--src/doc/unstable-book/src/language-features/marker-trait-attr.md35
-rw-r--r--src/doc/unstable-book/src/language-features/more-qualified-paths.md29
-rw-r--r--src/doc/unstable-book/src/language-features/native-link-modifiers-as-needed.md18
-rw-r--r--src/doc/unstable-book/src/language-features/native-link-modifiers-verbatim.md20
-rw-r--r--src/doc/unstable-book/src/language-features/negative-impls.md57
-rw-r--r--src/doc/unstable-book/src/language-features/no-coverage.md30
-rw-r--r--src/doc/unstable-book/src/language-features/no-sanitize.md29
-rw-r--r--src/doc/unstable-book/src/language-features/plugin.md116
-rw-r--r--src/doc/unstable-book/src/language-features/profiler-runtime.md5
-rw-r--r--src/doc/unstable-book/src/language-features/raw-dylib.md34
-rw-r--r--src/doc/unstable-book/src/language-features/repr128.md18
-rw-r--r--src/doc/unstable-book/src/language-features/rustc-attrs.md53
-rw-r--r--src/doc/unstable-book/src/language-features/strict-provenance.md22
-rw-r--r--src/doc/unstable-book/src/language-features/trait-alias.md34
-rw-r--r--src/doc/unstable-book/src/language-features/trait-upcasting.md27
-rw-r--r--src/doc/unstable-book/src/language-features/transparent-unions.md83
-rw-r--r--src/doc/unstable-book/src/language-features/try-blocks.md30
-rw-r--r--src/doc/unstable-book/src/language-features/type-changing-struct-update.md33
-rw-r--r--src/doc/unstable-book/src/language-features/unboxed-closures.md25
-rw-r--r--src/doc/unstable-book/src/language-features/unsized-locals.md175
-rw-r--r--src/doc/unstable-book/src/language-features/unsized-tuple-coercion.md27
-rw-r--r--src/doc/unstable-book/src/language-features/yeet-expr.md26
-rw-r--r--src/doc/unstable-book/src/library-features.md1
-rw-r--r--src/doc/unstable-book/src/library-features/allocator-api.md15
-rw-r--r--src/doc/unstable-book/src/library-features/c-variadic.md26
-rw-r--r--src/doc/unstable-book/src/library-features/c-void-variant.md5
-rw-r--r--src/doc/unstable-book/src/library-features/char-error-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/concat-idents.md22
-rw-r--r--src/doc/unstable-book/src/library-features/core-intrinsics.md5
-rw-r--r--src/doc/unstable-book/src/library-features/core-panic.md5
-rw-r--r--src/doc/unstable-book/src/library-features/core-private-bignum.md5
-rw-r--r--src/doc/unstable-book/src/library-features/core-private-diy-float.md5
-rw-r--r--src/doc/unstable-book/src/library-features/dec2flt.md5
-rw-r--r--src/doc/unstable-book/src/library-features/default-free-fn.md47
-rw-r--r--src/doc/unstable-book/src/library-features/derive-clone-copy.md5
-rw-r--r--src/doc/unstable-book/src/library-features/derive-eq.md5
-rw-r--r--src/doc/unstable-book/src/library-features/fd-read.md5
-rw-r--r--src/doc/unstable-book/src/library-features/fd.md5
-rw-r--r--src/doc/unstable-book/src/library-features/flt2dec.md5
-rw-r--r--src/doc/unstable-book/src/library-features/fmt-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/fn-traits.md35
-rw-r--r--src/doc/unstable-book/src/library-features/int-error-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/internal-output-capture.md5
-rw-r--r--src/doc/unstable-book/src/library-features/is-sorted.md11
-rw-r--r--src/doc/unstable-book/src/library-features/libstd-sys-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/libstd-thread-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/print-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/profiler-runtime-lib.md5
-rw-r--r--src/doc/unstable-book/src/library-features/rt.md5
-rw-r--r--src/doc/unstable-book/src/library-features/sort-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/str-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/test.md158
-rw-r--r--src/doc/unstable-book/src/library-features/thread-local-internals.md5
-rw-r--r--src/doc/unstable-book/src/library-features/trace-macros.md39
-rw-r--r--src/doc/unstable-book/src/library-features/update-panic-count.md5
-rw-r--r--src/doc/unstable-book/src/library-features/windows-c.md5
-rw-r--r--src/doc/unstable-book/src/library-features/windows-handle.md5
-rw-r--r--src/doc/unstable-book/src/library-features/windows-net.md5
-rw-r--r--src/doc/unstable-book/src/library-features/windows-stdio.md5
-rw-r--r--src/doc/unstable-book/src/the-unstable-book.md22
-rw-r--r--src/doc/version_info.html.template6
3349 files changed, 493648 insertions, 0 deletions
diff --git a/src/doc/book/.cargo/config b/src/doc/book/.cargo/config
new file mode 100644
index 000000000..2de187130
--- /dev/null
+++ b/src/doc/book/.cargo/config
@@ -0,0 +1,3 @@
+[cargo-new]
+name = "Your Name"
+email = "you@example.com"
diff --git a/src/doc/book/.github/ISSUE_TEMPLATE/bug_report.md b/src/doc/book/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 000000000..c1157112f
--- /dev/null
+++ b/src/doc/book/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,13 @@
+---
+name: Bug report
+about: Create a report to help us improve
+---
+
+- [ ] I have checked the latest `main` branch to see if this has already been fixed
+- [ ] I have searched existing issues and pull requests for duplicates
+
+URL to the section(s) of the book with this problem:
+
+Description of the problem:
+
+Suggested fix:
diff --git a/src/doc/book/.github/ISSUE_TEMPLATE/new_translation.md b/src/doc/book/.github/ISSUE_TEMPLATE/new_translation.md
new file mode 100644
index 000000000..c7bdc06ed
--- /dev/null
+++ b/src/doc/book/.github/ISSUE_TEMPLATE/new_translation.md
@@ -0,0 +1,7 @@
+---
+name: New translation
+about: Let us know of a new language translation you're working on
+---
+
+Language your translation is for:
+URL to the repo where you're working:
diff --git a/src/doc/book/.github/workflows/main.yml b/src/doc/book/.github/workflows/main.yml
new file mode 100644
index 000000000..d5b3249be
--- /dev/null
+++ b/src/doc/book/.github/workflows/main.yml
@@ -0,0 +1,72 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Run tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Update rustup
+ run: rustup self update
+ - name: Install Rust
+ run: |
+ rustup set profile minimal
+ rustup toolchain install 1.62 -c rust-docs
+ rustup default 1.62
+ - name: Install mdbook
+ run: |
+ mkdir bin
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
+ echo "$(pwd)/bin" >> ${GITHUB_PATH}
+ - name: Report versions
+ run: |
+ rustup --version
+ rustc -Vv
+ mdbook --version
+ - name: Run tests
+ run: mdbook test
+ lint:
+ name: Run lints
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Update rustup
+ run: rustup self update
+ - name: Install Rust
+ run: |
+ rustup set profile minimal
+ rustup toolchain install nightly -c rust-docs
+ rustup override set nightly
+ - name: Install mdbook
+ run: |
+ mkdir bin
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
+ echo "$(pwd)/bin" >> ${GITHUB_PATH}
+ - name: Install aspell
+ run: sudo apt-get install aspell
+ - name: Install shellcheck
+ run: sudo apt-get install shellcheck
+ - name: Report versions
+ run: |
+ rustup --version
+ rustc -Vv
+ mdbook --version
+ aspell --version
+ shellcheck --version
+ - name: Shellcheck
+ run: find . -name '*.sh' | xargs shellcheck
+ - name: Spellcheck
+ run: bash ci/spellcheck.sh list
+ - name: Lint for local file paths
+ run: |
+ mdbook build
+ cargo run --bin lfp src
+ - name: Validate references
+ run: bash ci/validate.sh
+ - name: Check for broken links
+ run: |
+ curl -sSLo linkcheck.sh \
+ https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+ # Cannot use --all here because of the generated redirect pages aren't available.
+ sh linkcheck.sh book
diff --git a/src/doc/book/2018-edition/book.toml b/src/doc/book/2018-edition/book.toml
new file mode 100644
index 000000000..9c71e2a91
--- /dev/null
+++ b/src/doc/book/2018-edition/book.toml
@@ -0,0 +1,7 @@
+[book]
+title = "The Rust Programming Language"
+author = "Steve Klabnik and Carol Nichols, with Contributions from the Rust Community"
+
+[output.html]
+additional-css = ["ferris.css", "src/theme/2018-edition.css"]
+additional-js = ["ferris.js"]
diff --git a/src/doc/book/2018-edition/dot/trpl04-01.dot b/src/doc/book/2018-edition/dot/trpl04-01.dot
new file mode 100644
index 000000000..331d59133
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl04-01.dot
@@ -0,0 +1,26 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl04-02.dot b/src/doc/book/2018-edition/dot/trpl04-02.dot
new file mode 100644
index 000000000..e46d2ed4a
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl04-02.dot
@@ -0,0 +1,35 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl04-03.dot b/src/doc/book/2018-edition/dot/trpl04-03.dot
new file mode 100644
index 000000000..16c0b2860
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl04-03.dot
@@ -0,0 +1,44 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table4:pointee;
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl04-04.dot b/src/doc/book/2018-edition/dot/trpl04-04.dot
new file mode 100644
index 000000000..1c95c231c
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl04-04.dot
@@ -0,0 +1,35 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="gray">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl04-05.dot b/src/doc/book/2018-edition/dot/trpl04-05.dot
new file mode 100644
index 000000000..ca1f7e06e
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl04-05.dot
@@ -0,0 +1,32 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="borrower"></TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD PORT="borrowee">ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table1:pointer:c -> table2:pointee;
+ table0:borrower:c -> table1:borrowee;
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl04-06.dot b/src/doc/book/2018-edition/dot/trpl04-06.dot
new file mode 100644
index 000000000..a23f179a7
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl04-06.dot
@@ -0,0 +1,41 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">world</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer2"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>11</TD></TR>
+ <TR><TD>capacity</TD><TD>11</TD></TR>
+ </TABLE>>];
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ <TR><TD>5</TD><TD> </TD></TR>
+ <TR><TD PORT="pointee2">6</TD><TD>w</TD></TR>
+ <TR><TD>7</TD><TD>o</TD></TR>
+ <TR><TD>8</TD><TD>r</TD></TR>
+ <TR><TD>9</TD><TD>l</TD></TR>
+ <TR><TD>10</TD><TD>d</TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:pointer2:c -> table4:pointee2;
+ table3:pointer:c -> table4:pointee;
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl15-01.dot b/src/doc/book/2018-edition/dot/trpl15-01.dot
new file mode 100644
index 000000000..e8b95f9a3
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl15-01.dot
@@ -0,0 +1,24 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD>∞</TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE>>];
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl15-02.dot b/src/doc/book/2018-edition/dot/trpl15-02.dot
new file mode 100644
index 000000000..f7dfd22c9
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl15-02.dot
@@ -0,0 +1,18 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">Box</TD></TR>
+ <TR><TD>usize</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>];
+}
+
diff --git a/src/doc/book/2018-edition/dot/trpl15-03.dot b/src/doc/book/2018-edition/dot/trpl15-03.dot
new file mode 100644
index 000000000..16f026814
--- /dev/null
+++ b/src/doc/book/2018-edition/dot/trpl15-03.dot
@@ -0,0 +1,51 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">b</TD><TD SIDES="B" PORT="ptr4"></TD></TR>
+ </TABLE>>];
+
+ table5[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte4">3</TD><TD PORT="ptr5"> </TD></TR>
+ </TABLE>>];
+
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">a</TD><TD SIDES="B" PORT="ptr0"></TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte0">5</TD><TD PORT="ptr1"> </TD></TR>
+ </TABLE>>];
+
+ table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte1">10</TD><TD PORT="ptr2"> </TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte2">Nil</TD></TR>
+ </TABLE>>];
+
+
+ table6[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">c</TD><TD SIDES="B" PORT="ptr6"></TD></TR>
+ </TABLE>>];
+
+ table7[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte6">4</TD><TD PORT="ptr7"> </TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:ptr0:c -> table1:pte0;
+ table1:ptr1:c -> table2:pte1;
+ table2:ptr2:c -> table3:pte2;
+ table4:ptr4:c -> table5:pte4;
+ table5:ptr5:c -> table1:pte0;
+ table6:ptr6:c -> table7:pte6;
+ table7:ptr7:c -> table1:pte0;
+}
+
diff --git a/src/doc/book/2018-edition/ferris.css b/src/doc/book/2018-edition/ferris.css
new file mode 100644
index 000000000..371207924
--- /dev/null
+++ b/src/doc/book/2018-edition/ferris.css
@@ -0,0 +1,33 @@
+body.light .does_not_compile,
+body.light .panics,
+body.light .not_desired_behavior,
+body.rust .does_not_compile,
+body.rust .panics,
+body.rust .not_desired_behavior {
+ background: #fff1f1;
+}
+
+body.coal .does_not_compile,
+body.coal .panics,
+body.coal .not_desired_behavior,
+body.navy .does_not_compile,
+body.navy .panics,
+body.navy .not_desired_behavior,
+body.ayu .does_not_compile,
+body.ayu .panics,
+body.ayu .not_desired_behavior {
+ background: #501f21;
+}
+
+.ferris {
+ position: absolute;
+ z-index: 99;
+ right: 5px;
+ top: 30px;
+ width: 10%;
+ height: auto;
+}
+
+.ferris-explain {
+ width: 100px;
+}
diff --git a/src/doc/book/2018-edition/ferris.js b/src/doc/book/2018-edition/ferris.js
new file mode 100644
index 000000000..5e79b3c71
--- /dev/null
+++ b/src/doc/book/2018-edition/ferris.js
@@ -0,0 +1,51 @@
+var ferrisTypes = [
+ {
+ attr: 'does_not_compile',
+ title: 'This code does not compile!'
+ },
+ {
+ attr: 'panics',
+ title: 'This code panics!'
+ },
+ {
+ attr: 'unsafe',
+ title: 'This code block contains unsafe code.'
+ },
+ {
+ attr: 'not_desired_behavior',
+ title: 'This code does not produce the desired behavior.'
+ }
+]
+
+document.addEventListener('DOMContentLoaded', () => {
+ for (var ferrisType of ferrisTypes) {
+ attachFerrises(ferrisType)
+ }
+})
+
+function attachFerrises (type) {
+ var elements = document.getElementsByClassName(type.attr)
+
+ for (var codeBlock of elements) {
+ var lines = codeBlock.textContent.split(/\r|\r\n|\n/).length - 1;
+
+ if (lines >= 4) {
+ attachFerris(codeBlock, type)
+ }
+ }
+}
+
+function attachFerris (element, type) {
+ var a = document.createElement('a')
+ a.setAttribute('href', 'ch00-00-introduction.html#ferris')
+ a.setAttribute('target', '_blank')
+
+ var img = document.createElement('img')
+ img.setAttribute('src', 'img/ferris/' + type.attr + '.svg')
+ img.setAttribute('title', type.title)
+ img.className = 'ferris'
+
+ a.appendChild(img)
+
+ element.parentElement.insertBefore(a, element)
+}
diff --git a/src/doc/book/2018-edition/src/SUMMARY.md b/src/doc/book/2018-edition/src/SUMMARY.md
new file mode 100644
index 000000000..db8991c00
--- /dev/null
+++ b/src/doc/book/2018-edition/src/SUMMARY.md
@@ -0,0 +1,132 @@
+# The Rust Programming Language
+
+[Foreword](foreword.md)
+[Introduction](ch00-00-introduction.md)
+
+## Getting started
+
+- [Getting Started](ch01-00-getting-started.md)
+ - [Installation](ch01-01-installation.md)
+ - [Hello, World!](ch01-02-hello-world.md)
+ - [Hello, Cargo!](ch01-03-hello-cargo.md)
+
+- [Programming a Guessing Game](ch02-00-guessing-game-tutorial.md)
+
+- [Common Programming Concepts](ch03-00-common-programming-concepts.md)
+ - [Variables and Mutability](ch03-01-variables-and-mutability.md)
+ - [Data Types](ch03-02-data-types.md)
+ - [How Functions Work](ch03-03-how-functions-work.md)
+ - [Comments](ch03-04-comments.md)
+ - [Control Flow](ch03-05-control-flow.md)
+
+- [Understanding Ownership](ch04-00-understanding-ownership.md)
+ - [What is Ownership?](ch04-01-what-is-ownership.md)
+ - [References & Borrowing](ch04-02-references-and-borrowing.md)
+ - [Slices](ch04-03-slices.md)
+
+- [Using Structs to Structure Related Data](ch05-00-structs.md)
+ - [Defining and Instantiating Structs](ch05-01-defining-structs.md)
+ - [An Example Program Using Structs](ch05-02-example-structs.md)
+ - [Method Syntax](ch05-03-method-syntax.md)
+
+- [Enums and Pattern Matching](ch06-00-enums.md)
+ - [Defining an Enum](ch06-01-defining-an-enum.md)
+ - [The `match` Control Flow Operator](ch06-02-match.md)
+ - [Concise Control Flow with `if let`](ch06-03-if-let.md)
+
+## Basic Rust Literacy
+
+- [Packages, Crates, and Modules](ch07-00-packages-crates-and-modules.md)
+ - [Packages and crates for making libraries and executables](ch07-01-packages-and-crates-for-making-libraries-and-executables.md)
+ - [Modules and `use` to control scope and privacy](ch07-02-modules-and-use-to-control-scope-and-privacy.md)
+
+- [Common Collections](ch08-00-common-collections.md)
+ - [Vectors](ch08-01-vectors.md)
+ - [Strings](ch08-02-strings.md)
+ - [Hash Maps](ch08-03-hash-maps.md)
+
+- [Error Handling](ch09-00-error-handling.md)
+ - [Unrecoverable Errors with `panic!`](ch09-01-unrecoverable-errors-with-panic.md)
+ - [Recoverable Errors with `Result`](ch09-02-recoverable-errors-with-result.md)
+ - [To `panic!` or Not to `panic!`](ch09-03-to-panic-or-not-to-panic.md)
+
+- [Generic Types, Traits, and Lifetimes](ch10-00-generics.md)
+ - [Generic Data Types](ch10-01-syntax.md)
+ - [Traits: Defining Shared Behavior](ch10-02-traits.md)
+ - [Validating References with Lifetimes](ch10-03-lifetime-syntax.md)
+
+- [Testing](ch11-00-testing.md)
+ - [Writing tests](ch11-01-writing-tests.md)
+ - [Running tests](ch11-02-running-tests.md)
+ - [Test Organization](ch11-03-test-organization.md)
+
+- [An I/O Project: Building a Command Line Program](ch12-00-an-io-project.md)
+ - [Accepting Command Line Arguments](ch12-01-accepting-command-line-arguments.md)
+ - [Reading a File](ch12-02-reading-a-file.md)
+ - [Refactoring to Improve Modularity and Error Handling](ch12-03-improving-error-handling-and-modularity.md)
+ - [Developing the Library’s Functionality with Test Driven Development](ch12-04-testing-the-librarys-functionality.md)
+ - [Working with Environment Variables](ch12-05-working-with-environment-variables.md)
+ - [Writing Error Messages to Standard Error Instead of Standard Output](ch12-06-writing-to-stderr-instead-of-stdout.md)
+
+## Thinking in Rust
+
+- [Functional Language Features: Iterators and Closures](ch13-00-functional-features.md)
+ - [Closures: Anonymous Functions that Can Capture Their Environment](ch13-01-closures.md)
+ - [Processing a Series of Items with Iterators](ch13-02-iterators.md)
+ - [Improving Our I/O Project](ch13-03-improving-our-io-project.md)
+ - [Comparing Performance: Loops vs. Iterators](ch13-04-performance.md)
+
+- [More about Cargo and Crates.io](ch14-00-more-about-cargo.md)
+ - [Customizing Builds with Release Profiles](ch14-01-release-profiles.md)
+ - [Publishing a Crate to Crates.io](ch14-02-publishing-to-crates-io.md)
+ - [Cargo Workspaces](ch14-03-cargo-workspaces.md)
+ - [Installing Binaries from Crates.io with `cargo install`](ch14-04-installing-binaries.md)
+ - [Extending Cargo with Custom Commands](ch14-05-extending-cargo.md)
+
+- [Smart Pointers](ch15-00-smart-pointers.md)
+ - [`Box<T>` Points to Data on the Heap and Has a Known Size](ch15-01-box.md)
+ - [The `Deref` Trait Allows Access to the Data Through a Reference](ch15-02-deref.md)
+ - [The `Drop` Trait Runs Code on Cleanup](ch15-03-drop.md)
+ - [`Rc<T>`, the Reference Counted Smart Pointer](ch15-04-rc.md)
+ - [`RefCell<T>` and the Interior Mutability Pattern](ch15-05-interior-mutability.md)
+ - [Creating Reference Cycles and Leaking Memory is Safe](ch15-06-reference-cycles.md)
+
+- [Fearless Concurrency](ch16-00-concurrency.md)
+ - [Threads](ch16-01-threads.md)
+ - [Message Passing](ch16-02-message-passing.md)
+ - [Shared State](ch16-03-shared-state.md)
+ - [Extensible Concurrency: `Sync` and `Send`](ch16-04-extensible-concurrency-sync-and-send.md)
+
+- [Object Oriented Programming Features of Rust](ch17-00-oop.md)
+ - [Characteristics of Object-Oriented Languages](ch17-01-what-is-oo.md)
+ - [Using Trait Objects that Allow for Values of Different Types](ch17-02-trait-objects.md)
+ - [Implementing an Object-Oriented Design Pattern](ch17-03-oo-design-patterns.md)
+
+## Advanced Topics
+
+- [Patterns Match the Structure of Values](ch18-00-patterns.md)
+ - [All the Places Patterns May be Used](ch18-01-all-the-places-for-patterns.md)
+ - [Refutability: Whether a Pattern Might Fail to Match](ch18-02-refutability.md)
+ - [All the Pattern Syntax](ch18-03-pattern-syntax.md)
+
+- [Advanced Features](ch19-00-advanced-features.md)
+ - [Unsafe Rust](ch19-01-unsafe-rust.md)
+ - [Advanced Lifetimes](ch19-02-advanced-lifetimes.md)
+ - [Advanced Traits](ch19-03-advanced-traits.md)
+ - [Advanced Types](ch19-04-advanced-types.md)
+ - [Advanced Functions & Closures](ch19-05-advanced-functions-and-closures.md)
+ - [Macros](ch19-06-macros.md)
+
+- [Final Project: Building a Multithreaded Web Server](ch20-00-final-project-a-web-server.md)
+ - [A Single Threaded Web Server](ch20-01-single-threaded.md)
+ - [Turning our Single Threaded Server into a Multithreaded Server](ch20-02-multithreaded.md)
+ - [Graceful Shutdown and Cleanup](ch20-03-graceful-shutdown-and-cleanup.md)
+
+- [Appendix](appendix-00.md)
+ - [A - Keywords](appendix-01-keywords.md)
+ - [B - Operators and Symbols](appendix-02-operators.md)
+ - [C - Derivable Traits](appendix-03-derivable-traits.md)
+ - [D - Useful Development Tools](appendix-04-useful-development-tools.md)
+ - [E - Editions](appendix-05-editions.md)
+ - [F - Translations](appendix-06-translation.md)
+ - [G - How Rust is Made and “Nightly Rust”](appendix-07-nightly-rust.md)
diff --git a/src/doc/book/2018-edition/src/appendix-00.md b/src/doc/book/2018-edition/src/appendix-00.md
new file mode 100644
index 000000000..c4145d6d8
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-00.md
@@ -0,0 +1,10 @@
+# Appendix
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-00.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-00.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-01-keywords.md b/src/doc/book/2018-edition/src/appendix-01-keywords.md
new file mode 100644
index 000000000..dde1ac6ce
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-01-keywords.md
@@ -0,0 +1,10 @@
+## Appendix A: Keywords
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-01-keywords.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-01-keywords.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-02-operators.md b/src/doc/book/2018-edition/src/appendix-02-operators.md
new file mode 100644
index 000000000..4bca5b78f
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-02-operators.md
@@ -0,0 +1,10 @@
+## Appendix B: Operators and Symbols
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-02-operators.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-02-operators.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-03-derivable-traits.md b/src/doc/book/2018-edition/src/appendix-03-derivable-traits.md
new file mode 100644
index 000000000..effe9c22a
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-03-derivable-traits.md
@@ -0,0 +1,10 @@
+## Appendix C: Derivable Traits
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-03-derivable-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-03-derivable-traits.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-04-useful-development-tools.md b/src/doc/book/2018-edition/src/appendix-04-useful-development-tools.md
new file mode 100644
index 000000000..9757c17ab
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-04-useful-development-tools.md
@@ -0,0 +1,10 @@
+# Appendix D - Useful Development Tools
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-04-useful-development-tools.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-04-useful-development-tools.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-05-editions.md b/src/doc/book/2018-edition/src/appendix-05-editions.md
new file mode 100644
index 000000000..fe2254362
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-05-editions.md
@@ -0,0 +1,10 @@
+# Appendix E - Editions
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-05-editions.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-05-editions.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-06-translation.md b/src/doc/book/2018-edition/src/appendix-06-translation.md
new file mode 100644
index 000000000..ef6345533
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-06-translation.md
@@ -0,0 +1,10 @@
+## Appendix F: Translations of the Book
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-06-translation.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-06-translation.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/appendix-07-nightly-rust.md b/src/doc/book/2018-edition/src/appendix-07-nightly-rust.md
new file mode 100644
index 000000000..d5ee3806d
--- /dev/null
+++ b/src/doc/book/2018-edition/src/appendix-07-nightly-rust.md
@@ -0,0 +1,10 @@
+# Appendix G - How Rust is Made and “Nightly Rust”
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-07-nightly-rust.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/appendix-07-nightly-rust.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch00-00-introduction.md b/src/doc/book/2018-edition/src/ch00-00-introduction.md
new file mode 100644
index 000000000..2645d6f54
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch00-00-introduction.md
@@ -0,0 +1,10 @@
+# Introduction
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch00-00-introduction.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch00-00-introduction.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch01-00-getting-started.md b/src/doc/book/2018-edition/src/ch01-00-getting-started.md
new file mode 100644
index 000000000..18db71409
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch01-00-getting-started.md
@@ -0,0 +1,10 @@
+# Getting Started
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-00-getting-started.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-00-getting-started.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch01-01-installation.md b/src/doc/book/2018-edition/src/ch01-01-installation.md
new file mode 100644
index 000000000..29ec038de
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch01-01-installation.md
@@ -0,0 +1,10 @@
+## Installation
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-01-installation.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch01-01-installation.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch01-02-hello-world.md b/src/doc/book/2018-edition/src/ch01-02-hello-world.md
new file mode 100644
index 000000000..f56f59291
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch01-02-hello-world.md
@@ -0,0 +1,10 @@
+## Hello, World!
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-02-hello-world.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch01-02-hello-world.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch01-03-hello-cargo.md b/src/doc/book/2018-edition/src/ch01-03-hello-cargo.md
new file mode 100644
index 000000000..464955150
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch01-03-hello-cargo.md
@@ -0,0 +1,10 @@
+## Hello, Cargo!
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-03-hello-cargo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch01-03-hello-cargo.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch02-00-guessing-game-tutorial.md b/src/doc/book/2018-edition/src/ch02-00-guessing-game-tutorial.md
new file mode 100644
index 000000000..40a593691
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch02-00-guessing-game-tutorial.md
@@ -0,0 +1,10 @@
+# Programming a Guessing Game
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch02-00-guessing-game-tutorial.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch02-00-guessing-game-tutorial.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch03-00-common-programming-concepts.md b/src/doc/book/2018-edition/src/ch03-00-common-programming-concepts.md
new file mode 100644
index 000000000..52e38dedf
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch03-00-common-programming-concepts.md
@@ -0,0 +1,10 @@
+# Common Programming Concepts
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-00-common-programming-concepts.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-00-common-programming-concepts.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch03-01-variables-and-mutability.md b/src/doc/book/2018-edition/src/ch03-01-variables-and-mutability.md
new file mode 100644
index 000000000..990602058
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch03-01-variables-and-mutability.md
@@ -0,0 +1,10 @@
+## Variables and Mutability
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-01-variables-and-mutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-01-variables-and-mutability.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch03-02-data-types.md b/src/doc/book/2018-edition/src/ch03-02-data-types.md
new file mode 100644
index 000000000..7109be297
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch03-02-data-types.md
@@ -0,0 +1,10 @@
+## Data Types
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-02-data-types.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-02-data-types.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch03-03-how-functions-work.md b/src/doc/book/2018-edition/src/ch03-03-how-functions-work.md
new file mode 100644
index 000000000..60213ba9a
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch03-03-how-functions-work.md
@@ -0,0 +1,10 @@
+## Functions
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-03-how-functions-work.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-03-how-functions-work.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch03-04-comments.md b/src/doc/book/2018-edition/src/ch03-04-comments.md
new file mode 100644
index 000000000..679c7ee21
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch03-04-comments.md
@@ -0,0 +1,10 @@
+## Comments
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-04-comments.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-04-comments.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch03-05-control-flow.md b/src/doc/book/2018-edition/src/ch03-05-control-flow.md
new file mode 100644
index 000000000..de3f331be
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch03-05-control-flow.md
@@ -0,0 +1,10 @@
+## Control Flow
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-05-control-flow.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch03-05-control-flow.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch04-00-understanding-ownership.md b/src/doc/book/2018-edition/src/ch04-00-understanding-ownership.md
new file mode 100644
index 000000000..d48cc711b
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch04-00-understanding-ownership.md
@@ -0,0 +1,10 @@
+# Understanding Ownership
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-00-understanding-ownership.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-00-understanding-ownership.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch04-01-what-is-ownership.md b/src/doc/book/2018-edition/src/ch04-01-what-is-ownership.md
new file mode 100644
index 000000000..f6a2e485e
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch04-01-what-is-ownership.md
@@ -0,0 +1,10 @@
+## What Is Ownership?
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-01-what-is-ownership.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-01-what-is-ownership.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch04-02-references-and-borrowing.md b/src/doc/book/2018-edition/src/ch04-02-references-and-borrowing.md
new file mode 100644
index 000000000..a6b9d5cba
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch04-02-references-and-borrowing.md
@@ -0,0 +1,10 @@
+## References and Borrowing
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-02-references-and-borrowing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-02-references-and-borrowing.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch04-03-slices.md b/src/doc/book/2018-edition/src/ch04-03-slices.md
new file mode 100644
index 000000000..8e1f8bcf9
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch04-03-slices.md
@@ -0,0 +1,10 @@
+## The Slice Type
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-03-slices.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch04-03-slices.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch05-00-structs.md b/src/doc/book/2018-edition/src/ch05-00-structs.md
new file mode 100644
index 000000000..8957ae29d
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch05-00-structs.md
@@ -0,0 +1,10 @@
+# Using Structs to Structure Related Data
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-00-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-00-structs.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch05-01-defining-structs.md b/src/doc/book/2018-edition/src/ch05-01-defining-structs.md
new file mode 100644
index 000000000..abd150f93
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch05-01-defining-structs.md
@@ -0,0 +1,10 @@
+## Defining and Instantiating Structs
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-01-defining-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-01-defining-structs.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch05-02-example-structs.md b/src/doc/book/2018-edition/src/ch05-02-example-structs.md
new file mode 100644
index 000000000..ac6b43e19
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch05-02-example-structs.md
@@ -0,0 +1,10 @@
+## An Example Program Using Structs
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-02-example-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-02-example-structs.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch05-03-method-syntax.md b/src/doc/book/2018-edition/src/ch05-03-method-syntax.md
new file mode 100644
index 000000000..a45b9f334
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch05-03-method-syntax.md
@@ -0,0 +1,10 @@
+## Method Syntax
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-03-method-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch05-03-method-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch06-00-enums.md b/src/doc/book/2018-edition/src/ch06-00-enums.md
new file mode 100644
index 000000000..55d2cd162
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch06-00-enums.md
@@ -0,0 +1,10 @@
+# Enums and Pattern Matching
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-00-enums.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-00-enums.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch06-01-defining-an-enum.md b/src/doc/book/2018-edition/src/ch06-01-defining-an-enum.md
new file mode 100644
index 000000000..81c2603dc
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch06-01-defining-an-enum.md
@@ -0,0 +1,10 @@
+## Defining an Enum
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-01-defining-an-enum.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-01-defining-an-enum.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch06-02-match.md b/src/doc/book/2018-edition/src/ch06-02-match.md
new file mode 100644
index 000000000..5663fb82a
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch06-02-match.md
@@ -0,0 +1,10 @@
+## The `match` Control Flow Operator
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-02-match.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-02-match.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch06-03-if-let.md b/src/doc/book/2018-edition/src/ch06-03-if-let.md
new file mode 100644
index 000000000..24b14c1d0
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch06-03-if-let.md
@@ -0,0 +1,10 @@
+## Concise Control Flow with `if let`
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-03-if-let.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch06-03-if-let.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch07-00-packages-crates-and-modules.md b/src/doc/book/2018-edition/src/ch07-00-packages-crates-and-modules.md
new file mode 100644
index 000000000..b4ea93377
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch07-00-packages-crates-and-modules.md
@@ -0,0 +1,10 @@
+# Packages, Crates, and Modules
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch07-00-packages-crates-and-modules.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch07-01-packages-and-crates-for-making-libraries-and-executables.md b/src/doc/book/2018-edition/src/ch07-01-packages-and-crates-for-making-libraries-and-executables.md
new file mode 100644
index 000000000..605267733
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch07-01-packages-and-crates-for-making-libraries-and-executables.md
@@ -0,0 +1,10 @@
+## Packages and Crates for Making Libraries and Executables
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch07-01-packages-and-crates-for-making-libraries-and-executables.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch07-02-modules-and-use-to-control-scope-and-privacy.md b/src/doc/book/2018-edition/src/ch07-02-modules-and-use-to-control-scope-and-privacy.md
new file mode 100644
index 000000000..c137290e2
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch07-02-modules-and-use-to-control-scope-and-privacy.md
@@ -0,0 +1,10 @@
+## The Module System to Control Scope and Privacy
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch07-02-modules-and-use-to-control-scope-and-privacy.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch08-00-common-collections.md b/src/doc/book/2018-edition/src/ch08-00-common-collections.md
new file mode 100644
index 000000000..079daccf3
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch08-00-common-collections.md
@@ -0,0 +1,10 @@
+# Common Collections
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-00-common-collections.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-00-common-collections.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch08-01-vectors.md b/src/doc/book/2018-edition/src/ch08-01-vectors.md
new file mode 100644
index 000000000..e13e45d52
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch08-01-vectors.md
@@ -0,0 +1,10 @@
+## Storing Lists of Values with Vectors
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-01-vectors.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-01-vectors.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch08-02-strings.md b/src/doc/book/2018-edition/src/ch08-02-strings.md
new file mode 100644
index 000000000..2ca314b87
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch08-02-strings.md
@@ -0,0 +1,10 @@
+## Storing UTF-8 Encoded Text with Strings
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-02-strings.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-02-strings.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch08-03-hash-maps.md b/src/doc/book/2018-edition/src/ch08-03-hash-maps.md
new file mode 100644
index 000000000..365ede452
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch08-03-hash-maps.md
@@ -0,0 +1,10 @@
+## Storing Keys with Associated Values in Hash Maps
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-03-hash-maps.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch08-03-hash-maps.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch09-00-error-handling.md b/src/doc/book/2018-edition/src/ch09-00-error-handling.md
new file mode 100644
index 000000000..d49907775
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch09-00-error-handling.md
@@ -0,0 +1,10 @@
+# Error Handling
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-00-error-handling.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-00-error-handling.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch09-01-unrecoverable-errors-with-panic.md b/src/doc/book/2018-edition/src/ch09-01-unrecoverable-errors-with-panic.md
new file mode 100644
index 000000000..4850a3d00
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch09-01-unrecoverable-errors-with-panic.md
@@ -0,0 +1,10 @@
+## Unrecoverable Errors with `panic!`
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-01-unrecoverable-errors-with-panic.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-01-unrecoverable-errors-with-panic.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch09-02-recoverable-errors-with-result.md b/src/doc/book/2018-edition/src/ch09-02-recoverable-errors-with-result.md
new file mode 100644
index 000000000..12c2158f9
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch09-02-recoverable-errors-with-result.md
@@ -0,0 +1,10 @@
+## Recoverable Errors with `Result`
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-02-recoverable-errors-with-result.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-02-recoverable-errors-with-result.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch09-03-to-panic-or-not-to-panic.md b/src/doc/book/2018-edition/src/ch09-03-to-panic-or-not-to-panic.md
new file mode 100644
index 000000000..1d1d06e48
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch09-03-to-panic-or-not-to-panic.md
@@ -0,0 +1,10 @@
+## To `panic!` or Not to `panic!`
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-03-to-panic-or-not-to-panic.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch09-03-to-panic-or-not-to-panic.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch10-00-generics.md b/src/doc/book/2018-edition/src/ch10-00-generics.md
new file mode 100644
index 000000000..e29591247
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch10-00-generics.md
@@ -0,0 +1,10 @@
+# Generic Types, Traits, and Lifetimes
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-00-generics.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-00-generics.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch10-01-syntax.md b/src/doc/book/2018-edition/src/ch10-01-syntax.md
new file mode 100644
index 000000000..0237c7694
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch10-01-syntax.md
@@ -0,0 +1,10 @@
+## Generic Data Types
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-01-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-01-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch10-02-traits.md b/src/doc/book/2018-edition/src/ch10-02-traits.md
new file mode 100644
index 000000000..667383339
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch10-02-traits.md
@@ -0,0 +1,10 @@
+## Traits: Defining Shared Behavior
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-02-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-02-traits.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch10-03-lifetime-syntax.md b/src/doc/book/2018-edition/src/ch10-03-lifetime-syntax.md
new file mode 100644
index 000000000..a3ccf0033
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch10-03-lifetime-syntax.md
@@ -0,0 +1,10 @@
+## Validating References with Lifetimes
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-03-lifetime-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch10-03-lifetime-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch11-00-testing.md b/src/doc/book/2018-edition/src/ch11-00-testing.md
new file mode 100644
index 000000000..33f5d7eeb
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch11-00-testing.md
@@ -0,0 +1,10 @@
+# Writing Automated Tests
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-00-testing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-00-testing.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch11-01-writing-tests.md b/src/doc/book/2018-edition/src/ch11-01-writing-tests.md
new file mode 100644
index 000000000..17c608e61
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch11-01-writing-tests.md
@@ -0,0 +1,10 @@
+## How to Write Tests
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-01-writing-tests.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-01-writing-tests.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch11-02-running-tests.md b/src/doc/book/2018-edition/src/ch11-02-running-tests.md
new file mode 100644
index 000000000..377407684
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch11-02-running-tests.md
@@ -0,0 +1,10 @@
+## Controlling How Tests Are Run
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-02-running-tests.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-02-running-tests.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch11-03-test-organization.md b/src/doc/book/2018-edition/src/ch11-03-test-organization.md
new file mode 100644
index 000000000..92cca4c74
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch11-03-test-organization.md
@@ -0,0 +1,10 @@
+## Test Organization
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-03-test-organization.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch11-03-test-organization.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-00-an-io-project.md b/src/doc/book/2018-edition/src/ch12-00-an-io-project.md
new file mode 100644
index 000000000..3e1fbac98
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-00-an-io-project.md
@@ -0,0 +1,10 @@
+# An I/O Project: Building a Command Line Program
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-00-an-io-project.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-00-an-io-project.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-01-accepting-command-line-arguments.md b/src/doc/book/2018-edition/src/ch12-01-accepting-command-line-arguments.md
new file mode 100644
index 000000000..a91b0cad1
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-01-accepting-command-line-arguments.md
@@ -0,0 +1,10 @@
+## Accepting Command Line Arguments
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-01-accepting-command-line-arguments.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-01-accepting-command-line-arguments.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-02-reading-a-file.md b/src/doc/book/2018-edition/src/ch12-02-reading-a-file.md
new file mode 100644
index 000000000..6ef334939
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-02-reading-a-file.md
@@ -0,0 +1,10 @@
+## Reading a File
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-02-reading-a-file.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-02-reading-a-file.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-03-improving-error-handling-and-modularity.md b/src/doc/book/2018-edition/src/ch12-03-improving-error-handling-and-modularity.md
new file mode 100644
index 000000000..5d52ab893
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-03-improving-error-handling-and-modularity.md
@@ -0,0 +1,10 @@
+## Refactoring to Improve Modularity and Error Handling
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-03-improving-error-handling-and-modularity.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-03-improving-error-handling-and-modularity.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-04-testing-the-librarys-functionality.md b/src/doc/book/2018-edition/src/ch12-04-testing-the-librarys-functionality.md
new file mode 100644
index 000000000..12b0204d8
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-04-testing-the-librarys-functionality.md
@@ -0,0 +1,10 @@
+## Developing the Library’s Functionality with Test-Driven Development
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-04-testing-the-librarys-functionality.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-04-testing-the-librarys-functionality.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-05-working-with-environment-variables.md b/src/doc/book/2018-edition/src/ch12-05-working-with-environment-variables.md
new file mode 100644
index 000000000..d6316cb2d
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-05-working-with-environment-variables.md
@@ -0,0 +1,10 @@
+## Working with Environment Variables
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-05-working-with-environment-variables.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-05-working-with-environment-variables.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md b/src/doc/book/2018-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md
new file mode 100644
index 000000000..6114b4bb8
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md
@@ -0,0 +1,10 @@
+## Writing Error Messages to Standard Error Instead of Standard Output
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-06-writing-to-stderr-instead-of-stdout.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch12-06-writing-to-stderr-instead-of-stdout.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch13-00-functional-features.md b/src/doc/book/2018-edition/src/ch13-00-functional-features.md
new file mode 100644
index 000000000..466b49c6f
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch13-00-functional-features.md
@@ -0,0 +1,10 @@
+# Functional Language Features: Iterators and Closures
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-00-functional-features.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-00-functional-features.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch13-01-closures.md b/src/doc/book/2018-edition/src/ch13-01-closures.md
new file mode 100644
index 000000000..bc580304e
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch13-01-closures.md
@@ -0,0 +1,10 @@
+## Closures: Anonymous Functions that Can Capture Their Environment
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-01-closures.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-01-closures.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch13-02-iterators.md b/src/doc/book/2018-edition/src/ch13-02-iterators.md
new file mode 100644
index 000000000..7f5e9cf86
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch13-02-iterators.md
@@ -0,0 +1,10 @@
+## Processing a Series of Items with Iterators
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-02-iterators.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-02-iterators.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch13-03-improving-our-io-project.md b/src/doc/book/2018-edition/src/ch13-03-improving-our-io-project.md
new file mode 100644
index 000000000..5148fcf1b
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch13-03-improving-our-io-project.md
@@ -0,0 +1,10 @@
+## Improving Our I/O Project
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-03-improving-our-io-project.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-03-improving-our-io-project.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch13-04-performance.md b/src/doc/book/2018-edition/src/ch13-04-performance.md
new file mode 100644
index 000000000..817a13844
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch13-04-performance.md
@@ -0,0 +1,10 @@
+## Comparing Performance: Loops vs. Iterators
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-04-performance.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch13-04-performance.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch14-00-more-about-cargo.md b/src/doc/book/2018-edition/src/ch14-00-more-about-cargo.md
new file mode 100644
index 000000000..dea00b8aa
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch14-00-more-about-cargo.md
@@ -0,0 +1,10 @@
+# More About Cargo and Crates.io
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-00-more-about-cargo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-00-more-about-cargo.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch14-01-release-profiles.md b/src/doc/book/2018-edition/src/ch14-01-release-profiles.md
new file mode 100644
index 000000000..eb9946ac7
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch14-01-release-profiles.md
@@ -0,0 +1,10 @@
+## Customizing Builds with Release Profiles
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-01-release-profiles.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-01-release-profiles.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch14-02-publishing-to-crates-io.md b/src/doc/book/2018-edition/src/ch14-02-publishing-to-crates-io.md
new file mode 100644
index 000000000..a5707e5ac
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch14-02-publishing-to-crates-io.md
@@ -0,0 +1,10 @@
+## Publishing a Crate to Crates.io
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-02-publishing-to-crates-io.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-02-publishing-to-crates-io.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch14-03-cargo-workspaces.md b/src/doc/book/2018-edition/src/ch14-03-cargo-workspaces.md
new file mode 100644
index 000000000..50691e654
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch14-03-cargo-workspaces.md
@@ -0,0 +1,10 @@
+## Cargo Workspaces
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-03-cargo-workspaces.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-03-cargo-workspaces.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch14-04-installing-binaries.md b/src/doc/book/2018-edition/src/ch14-04-installing-binaries.md
new file mode 100644
index 000000000..b6e196bb9
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch14-04-installing-binaries.md
@@ -0,0 +1,10 @@
+## Installing Binaries from Crates.io with `cargo install`
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-04-installing-binaries.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-04-installing-binaries.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch14-05-extending-cargo.md b/src/doc/book/2018-edition/src/ch14-05-extending-cargo.md
new file mode 100644
index 000000000..ed1235de6
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch14-05-extending-cargo.md
@@ -0,0 +1,10 @@
+## Extending Cargo with Custom Commands
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-05-extending-cargo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch14-05-extending-cargo.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-00-smart-pointers.md b/src/doc/book/2018-edition/src/ch15-00-smart-pointers.md
new file mode 100644
index 000000000..de4c648df
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-00-smart-pointers.md
@@ -0,0 +1,10 @@
+# Smart Pointers
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-00-smart-pointers.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-00-smart-pointers.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-01-box.md b/src/doc/book/2018-edition/src/ch15-01-box.md
new file mode 100644
index 000000000..cbbc07bbf
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-01-box.md
@@ -0,0 +1,10 @@
+## Using `Box<T>` to Point to Data on the Heap
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-01-box.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-01-box.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-02-deref.md b/src/doc/book/2018-edition/src/ch15-02-deref.md
new file mode 100644
index 000000000..b5f1f8612
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-02-deref.md
@@ -0,0 +1,10 @@
+## Treating Smart Pointers Like Regular References with the `Deref` Trait
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-02-deref.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-02-deref.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-03-drop.md b/src/doc/book/2018-edition/src/ch15-03-drop.md
new file mode 100644
index 000000000..2ae0b436d
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-03-drop.md
@@ -0,0 +1,10 @@
+## Running Code on Cleanup with the `Drop` Trait
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-03-drop.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-03-drop.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-04-rc.md b/src/doc/book/2018-edition/src/ch15-04-rc.md
new file mode 100644
index 000000000..2b4015e7e
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-04-rc.md
@@ -0,0 +1,10 @@
+## `Rc<T>`, the Reference Counted Smart Pointer
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-04-rc.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-04-rc.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-05-interior-mutability.md b/src/doc/book/2018-edition/src/ch15-05-interior-mutability.md
new file mode 100644
index 000000000..fb1f96df7
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-05-interior-mutability.md
@@ -0,0 +1,10 @@
+## `RefCell<T>` and the Interior Mutability Pattern
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-05-interior-mutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-05-interior-mutability.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch15-06-reference-cycles.md b/src/doc/book/2018-edition/src/ch15-06-reference-cycles.md
new file mode 100644
index 000000000..ac93fe3bb
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch15-06-reference-cycles.md
@@ -0,0 +1,10 @@
+## Reference Cycles Can Leak Memory
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-06-reference-cycles.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch15-06-reference-cycles.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch16-00-concurrency.md b/src/doc/book/2018-edition/src/ch16-00-concurrency.md
new file mode 100644
index 000000000..1cf6b2f58
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch16-00-concurrency.md
@@ -0,0 +1,10 @@
+# Fearless Concurrency
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-00-concurrency.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-00-concurrency.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch16-01-threads.md b/src/doc/book/2018-edition/src/ch16-01-threads.md
new file mode 100644
index 000000000..708e30be7
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch16-01-threads.md
@@ -0,0 +1,10 @@
+## Using Threads to Run Code Simultaneously
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-01-threads.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-01-threads.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch16-02-message-passing.md b/src/doc/book/2018-edition/src/ch16-02-message-passing.md
new file mode 100644
index 000000000..4540efaac
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch16-02-message-passing.md
@@ -0,0 +1,10 @@
+## Using Message Passing to Transfer Data Between Threads
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-02-message-passing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-02-message-passing.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch16-03-shared-state.md b/src/doc/book/2018-edition/src/ch16-03-shared-state.md
new file mode 100644
index 000000000..043aa25cd
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch16-03-shared-state.md
@@ -0,0 +1,10 @@
+## Shared-State Concurrency
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-03-shared-state.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-03-shared-state.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch16-04-extensible-concurrency-sync-and-send.md b/src/doc/book/2018-edition/src/ch16-04-extensible-concurrency-sync-and-send.md
new file mode 100644
index 000000000..44a4a0b19
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch16-04-extensible-concurrency-sync-and-send.md
@@ -0,0 +1,10 @@
+## Extensible Concurrency with the `Sync` and `Send` Traits
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-04-extensible-concurrency-sync-and-send.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch16-04-extensible-concurrency-sync-and-send.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch17-00-oop.md b/src/doc/book/2018-edition/src/ch17-00-oop.md
new file mode 100644
index 000000000..c731bbc95
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch17-00-oop.md
@@ -0,0 +1,10 @@
+# Object Oriented Programming Features of Rust
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-00-oop.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-00-oop.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch17-01-what-is-oo.md b/src/doc/book/2018-edition/src/ch17-01-what-is-oo.md
new file mode 100644
index 000000000..ed1ec4013
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch17-01-what-is-oo.md
@@ -0,0 +1,10 @@
+## Characteristics of Object-Oriented Languages
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-01-what-is-oo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-01-what-is-oo.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch17-02-trait-objects.md b/src/doc/book/2018-edition/src/ch17-02-trait-objects.md
new file mode 100644
index 000000000..1999647aa
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch17-02-trait-objects.md
@@ -0,0 +1,10 @@
+## Using Trait Objects that Allow for Values of Different Types
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-02-trait-objects.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-02-trait-objects.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch17-03-oo-design-patterns.md b/src/doc/book/2018-edition/src/ch17-03-oo-design-patterns.md
new file mode 100644
index 000000000..1b74425fe
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch17-03-oo-design-patterns.md
@@ -0,0 +1,10 @@
+## Implementing an Object-Oriented Design Pattern
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-03-oo-design-patterns.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch17-03-oo-design-patterns.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch18-00-patterns.md b/src/doc/book/2018-edition/src/ch18-00-patterns.md
new file mode 100644
index 000000000..f3da1f40d
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch18-00-patterns.md
@@ -0,0 +1,10 @@
+# Patterns and Matching
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-00-patterns.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-00-patterns.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch18-01-all-the-places-for-patterns.md b/src/doc/book/2018-edition/src/ch18-01-all-the-places-for-patterns.md
new file mode 100644
index 000000000..ccf388406
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch18-01-all-the-places-for-patterns.md
@@ -0,0 +1,10 @@
+## All the Places Patterns Can Be Used
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-01-all-the-places-for-patterns.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-01-all-the-places-for-patterns.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch18-02-refutability.md b/src/doc/book/2018-edition/src/ch18-02-refutability.md
new file mode 100644
index 000000000..a3e2bcff7
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch18-02-refutability.md
@@ -0,0 +1,10 @@
+## Refutability: Whether a Pattern Might Fail to Match
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-02-refutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-02-refutability.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch18-03-pattern-syntax.md b/src/doc/book/2018-edition/src/ch18-03-pattern-syntax.md
new file mode 100644
index 000000000..0e0929e7b
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch18-03-pattern-syntax.md
@@ -0,0 +1,10 @@
+## Pattern Syntax
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-03-pattern-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch18-03-pattern-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-00-advanced-features.md b/src/doc/book/2018-edition/src/ch19-00-advanced-features.md
new file mode 100644
index 000000000..b34d6b9b6
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-00-advanced-features.md
@@ -0,0 +1,10 @@
+# Advanced Features
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-00-advanced-features.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-00-advanced-features.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-01-unsafe-rust.md b/src/doc/book/2018-edition/src/ch19-01-unsafe-rust.md
new file mode 100644
index 000000000..34b569fee
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-01-unsafe-rust.md
@@ -0,0 +1,10 @@
+## Unsafe Rust
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-01-unsafe-rust.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-01-unsafe-rust.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-02-advanced-lifetimes.md b/src/doc/book/2018-edition/src/ch19-02-advanced-lifetimes.md
new file mode 100644
index 000000000..dd84b4627
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-02-advanced-lifetimes.md
@@ -0,0 +1,10 @@
+## Advanced Lifetimes
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-02-advanced-lifetimes.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-03-advanced-traits.md b/src/doc/book/2018-edition/src/ch19-03-advanced-traits.md
new file mode 100644
index 000000000..4219b208b
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-03-advanced-traits.md
@@ -0,0 +1,10 @@
+## Advanced Traits
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-03-advanced-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-03-advanced-traits.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-04-advanced-types.md b/src/doc/book/2018-edition/src/ch19-04-advanced-types.md
new file mode 100644
index 000000000..fecbd52dc
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-04-advanced-types.md
@@ -0,0 +1,10 @@
+## Advanced Types
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-04-advanced-types.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-04-advanced-types.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-05-advanced-functions-and-closures.md b/src/doc/book/2018-edition/src/ch19-05-advanced-functions-and-closures.md
new file mode 100644
index 000000000..1bf045090
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-05-advanced-functions-and-closures.md
@@ -0,0 +1,10 @@
+## Advanced Functions and Closures
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-05-advanced-functions-and-closures.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-05-advanced-functions-and-closures.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch19-06-macros.md b/src/doc/book/2018-edition/src/ch19-06-macros.md
new file mode 100644
index 000000000..bf019c5d6
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch19-06-macros.md
@@ -0,0 +1,10 @@
+## Macros
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-06-macros.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch19-06-macros.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch20-00-final-project-a-web-server.md b/src/doc/book/2018-edition/src/ch20-00-final-project-a-web-server.md
new file mode 100644
index 000000000..f9b9e5c2d
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch20-00-final-project-a-web-server.md
@@ -0,0 +1,10 @@
+# Final Project: Building a Multithreaded Web Server
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-00-final-project-a-web-server.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-00-final-project-a-web-server.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch20-01-single-threaded.md b/src/doc/book/2018-edition/src/ch20-01-single-threaded.md
new file mode 100644
index 000000000..30d0884ad
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch20-01-single-threaded.md
@@ -0,0 +1,10 @@
+## Building a Single-Threaded Web Server
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-01-single-threaded.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-01-single-threaded.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch20-02-multithreaded.md b/src/doc/book/2018-edition/src/ch20-02-multithreaded.md
new file mode 100644
index 000000000..e8b592ad2
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch20-02-multithreaded.md
@@ -0,0 +1,10 @@
+## Turning Our Single-Threaded Server into a Multithreaded Server
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-02-multithreaded.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-02-multithreaded.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/ch20-03-graceful-shutdown-and-cleanup.md b/src/doc/book/2018-edition/src/ch20-03-graceful-shutdown-and-cleanup.md
new file mode 100644
index 000000000..928d199be
--- /dev/null
+++ b/src/doc/book/2018-edition/src/ch20-03-graceful-shutdown-and-cleanup.md
@@ -0,0 +1,10 @@
+## Graceful Shutdown and Cleanup
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-03-graceful-shutdown-and-cleanup.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/ch20-03-graceful-shutdown-and-cleanup.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/foreword.md b/src/doc/book/2018-edition/src/foreword.md
new file mode 100644
index 000000000..3af707e35
--- /dev/null
+++ b/src/doc/book/2018-edition/src/foreword.md
@@ -0,0 +1,10 @@
+# Foreword
+
+The 2018 edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../foreword.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/2018-edition/foreword.html). \ No newline at end of file
diff --git a/src/doc/book/2018-edition/src/img/ferris/does_not_compile.svg b/src/doc/book/2018-edition/src/img/ferris/does_not_compile.svg
new file mode 100644
index 000000000..5d345f14e
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/ferris/does_not_compile.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1259px" height="847px" viewBox="0 0 1259 847" enable-background="new 0 0 1259 847" xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1259" height="847"/>-->
+<path fill="#8F1F1D" d="M706.403,338.05c-131.633,0-251.228,15.825-339.77,41.615v220.298
+ c88.542,25.79,208.137,41.614,339.77,41.614c150.657,0,285.535-20.729,376.134-53.402V391.457
+ C991.938,358.781,857.06,338.05,706.403,338.05"/>
+<path fill="#8F1F1D" d="M1088.423,537.442c-3.856-10.663-4.629-24.154-1.36-37.162c5.85-23.289,22.421-36.198,37.013-28.833
+ c3.618,1.827,6.773,4.73,9.387,8.418c0.239-0.001,0.479,0,0.715,0.016c0,0,44.552,53.106,3.313,116.003
+ c-0.896,3.569-76.534,91.718-94.043,94.524C1031.987,692.244,1058.338,600.41,1088.423,537.442"/>
+<path fill="#8F1F1D" d="M357.479,527.021c5.3-9.631,7.158-22.788,4.217-36.426c-5.266-24.416-23.91-41.109-41.642-37.285
+ c-4.398,0.948-8.325,3.072-11.666,6.099c-0.282-0.059-0.564-0.113-0.845-0.153c0,0-56.292,41.952-12.057,113.924
+ c0.805,3.741,83.851,108.838,104.311,115.764C413.188,693.475,388.55,596.418,357.479,527.021"/>
+<path fill="#E23A26" d="M280.467,535.066l0.007,0.015C280.659,535.226,280.831,535.357,280.467,535.066"/>
+<path fill="#E33B26" d="M1174.119,457.903c-0.88-3.064-1.756-6.126-2.662-9.162l30.683-44.451c3.13-4.522,3.771-10.398,1.73-15.555
+ c-2.04-5.13-6.49-8.81-11.76-9.71l-51.887-8.805c-2.008-4.102-4.115-8.142-6.229-12.15l21.797-49.903
+ c2.243-5.087,1.769-10.995-1.203-15.608c-2.961-4.636-7.99-7.344-13.349-7.133l-52.656,1.913c-2.727-3.55-5.496-7.068-8.322-10.521
+ l12.102-53.49c1.225-5.433-0.322-11.118-4.104-15.064c-3.762-3.932-9.229-5.559-14.426-4.283l-51.289,12.608
+ c-3.321-2.935-6.699-5.833-10.114-8.673l1.849-54.914c0.197-5.559-2.394-10.842-6.845-13.925
+ c-4.445-3.104-10.093-3.573-14.955-1.266l-47.848,22.747c-3.854-2.21-7.728-4.4-11.644-6.517l-8.455-54.115
+ c-0.857-5.483-4.386-10.139-9.326-12.266c-4.923-2.137-10.568-1.447-14.891,1.808l-42.659,32.007
+ c-4.2-1.395-8.419-2.732-12.692-4.011l-18.386-51.316c-1.87-5.229-6.182-9.071-11.438-10.151c-5.238-1.072-10.63,0.742-14.263,4.802
+ L764.97,100.97c-4.342-0.5-8.685-0.956-13.043-1.331l-27.723-46.713c-2.811-4.732-7.771-7.612-13.116-7.612
+ c-5.334,0-10.304,2.88-13.09,7.612l-27.733,46.713c-4.358,0.375-8.722,0.831-13.056,1.331l-35.91-40.171
+ c-3.636-4.06-9.047-5.874-14.268-4.802c-5.255,1.092-9.573,4.922-11.433,10.151l-18.402,51.316
+ c-4.26,1.279-8.481,2.627-12.691,4.011l-42.644-32.007c-4.336-3.266-9.98-3.955-14.916-1.808c-4.919,2.127-8.461,6.783-9.313,12.266
+ l-8.461,54.115c-3.914,2.117-7.789,4.294-11.653,6.517l-47.842-22.747c-4.858-2.316-10.529-1.838-14.954,1.266
+ c-4.445,3.083-7.042,8.366-6.84,13.925l1.835,54.914c-3.405,2.84-6.774,5.738-10.112,8.673l-51.279-12.608
+ c-5.211-1.265-10.67,0.351-14.441,4.283c-3.795,3.946-5.332,9.631-4.113,15.064l12.079,53.49c-2.802,3.467-5.575,6.971-8.293,10.521
+ l-52.655-1.913c-5.314-0.157-10.386,2.497-13.356,7.133c-2.974,4.613-3.425,10.521-1.211,15.608l21.814,49.903
+ c-2.119,4.008-4.224,8.048-6.249,12.15l-51.882,8.805c-5.271,0.888-9.715,4.566-11.765,9.71c-2.037,5.157-1.375,11.033,1.735,15.555
+ l30.69,44.451c-0.236,0.784-0.455,1.576-0.69,2.364l-16.863,17.911l45.341,64.05c0,0,435.152,200.731,838.797,3.396
+ C1163.372,528.189,1174.119,457.903,1174.119,457.903"/>
+<path d="M788.629,436.277c0,0,54.108-46.602,95.626,11.5c0,0,29.173,74.328-12.593,104.708c0,0-67.353,41.473-95.627-11.5
+ C776.035,540.985,739.67,497.66,788.629,436.277"/>
+<path fill="#FFFFFF" d="M843.648,464.356c-2.452,20.385-16.456,35.467-31.276,33.684c-14.817-1.781-24.846-19.755-22.395-40.14
+ c2.452-20.385,16.457-35.468,31.274-33.687C836.071,425.997,846.1,443.971,843.648,464.356"/>
+<path d="M572.949,399.315c0,0,86.384-26.449,99.021,57.297c0,0,12.086,97.294-79.356,91.705
+ C592.613,548.317,479.508,512.09,572.949,399.315"/>
+<rect x="181" y="45" fill="none" width="1060" height="782"/>
+<path fill="#FFFFFF" d="M611.925,441.324c-2.528,21.021-16.969,36.581-32.257,34.742c-15.281-1.837-25.624-20.378-23.095-41.399
+ c2.529-21.026,16.973-36.581,32.253-34.743C604.113,401.763,614.454,420.298,611.925,441.324"/>
+<path fill="#E33B26" d="M292.602,544.216c10.967-12.463,37.611-27.557,35.57-46.282c-3.653-33.526-31.456-57.999-62.099-54.658
+ c-7.599,0.827-14.658,3.292-20.923,7.035c-0.463-0.106-0.925-0.211-1.388-0.294c0,0-103.632,50.873-44.564,152.657
+ c0.557,5.137,117.847,155.668,150.787,167.131C371.544,777.307,330.074,641.165,292.602,544.216"/>
+<path fill="#E33B26" d="M1134.549,539.673c-12.692-10.7-46.162-20.418-46.92-39.238c-1.355-33.697,22.512-62.021,53.312-63.26
+ c7.638-0.308,14.983,1.083,21.734,3.857c0.442-0.174,0.884-0.347,1.329-0.497c0,0,110.025,34.951,66.695,144.366
+ c0.21,5.163-93.468,171.416-124.345,187.635C1086.146,783.151,1111.861,641.105,1134.549,539.673"/>
+<rect x="181.06" y="45.314" fill="none" width="1059.75" height="781.686"/>
+<path fill="#E33B26" d="M372.142,545.559c0,0-1.383,137.296,133.166,167.933l28.054-56.363c0,0-97.495,9.431-104.995-111.569
+ H372.142"/>
+<rect x="181" y="45" fill="none" width="1060" height="782"/>
+<path fill="#E33B26" d="M1057.362,537.246c0,0,1.382,137.296-133.167,167.933l-28.055-56.363c0,0,97.495,9.431,104.995-111.569
+ H1057.362"/>
+<path fill="#E33B26" d="M960.167,677.279c-20.25-48.941-85.595-68.373-145.951-43.399c-53.126,21.98-84.637,71.031-77.624,115.845
+ c41.946-0.652,86.94-3.371,130.736-9.718c0,0-25.837,41.763-63.857,78.211c25.566,6.599,55.383,4.768,84.076-7.104
+ C947.904,786.141,980.417,726.221,960.167,677.279"/>
+<path fill="#E33B26" d="M585.746,745.985c0,0,55.203,7.295,130.67,9.155c6.61-47.511-29.38-97.792-86.801-117.242
+ c-63.438-21.488-128.989,2.792-146.414,54.231c-17.425,51.44,19.876,110.561,83.314,132.049
+ c28.121,9.526,56.653,10.049,81.229,3.207C610.833,790.881,585.746,745.985,585.746,745.985"/>
+<rect x="181.06" y="45.314" fill="none" width="1059.75" height="781.686"/>
+<g>
+ <path d="M92.314,318.146l0.072-12.563c-0.359-24.665,8.95-49.384,31.787-73.989c16.267-18.129,29.512-33.493,30.216-49.411
+ c0.747-16.883-9.835-28.95-33.932-30.499c-15.918-0.704-35.468,4.231-48.394,12.359l-14.075-53.303
+ c18.296-9.34,47.182-17.729,81.429-16.214c63.672,2.816,91.538,39.33,89.768,79.366c-1.621,36.659-25.84,59.753-45.066,79.202
+ c-18.24,19.009-26.789,37.48-27.267,59.207l-0.384,8.683L92.314,318.146z M76.808,384.64c1.152-26.048,19.789-43.105,44.872-41.997
+ c26.047,1.152,42.14,19.746,41.471,45.815c-1.109,25.083-18.824,43.148-45.353,41.975C92.232,429.303,75.698,409.723,76.808,384.64
+ z"/>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/ferris/not_desired_behavior.svg b/src/doc/book/2018-edition/src/img/ferris/not_desired_behavior.svg
new file mode 100644
index 000000000..47f402455
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/ferris/not_desired_behavior.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1354px" height="819px" viewBox="0 0 1354 819" enable-background="new 0 0 1354 819" xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1354" height="819"/>-->
+<path fill="#8F1F1D" d="M803.403,312.05c-131.633,0-251.228,15.825-339.77,41.615v220.298
+ c88.542,25.79,208.137,41.614,339.77,41.614c150.657,0,285.535-20.729,376.134-53.402V365.457
+ C1088.938,332.781,954.06,312.05,803.403,312.05"/>
+<path fill="#8F1F1D" d="M1185.423,511.442c-3.856-10.663-4.629-24.154-1.36-37.162c5.85-23.289,22.421-36.198,37.013-28.833
+ c3.618,1.827,6.773,4.73,9.387,8.418c0.239-0.001,0.479,0,0.715,0.016c0,0,44.552,53.106,3.313,116.003
+ c-0.896,3.569-76.534,91.718-94.043,94.524C1128.987,666.244,1155.338,574.41,1185.423,511.442"/>
+<path fill="#8F1F1D" d="M454.479,501.021c5.3-9.631,7.158-22.788,4.217-36.426c-5.266-24.416-23.91-41.109-41.642-37.285
+ c-4.398,0.948-8.325,3.072-11.666,6.099c-0.282-0.059-0.564-0.113-0.845-0.153c0,0-56.292,41.952-12.057,113.924
+ c0.805,3.741,83.851,108.838,104.311,115.764C510.188,667.475,485.55,570.418,454.479,501.021"/>
+<path fill="#E23A26" d="M375.467,507.066l0.007,0.015C375.659,507.226,375.831,507.357,375.467,507.066"/>
+<path fill="#E33B26" d="M1271.119,431.903c-0.88-3.064-1.756-6.126-2.662-9.162l30.683-44.451c3.13-4.522,3.771-10.398,1.73-15.555
+ c-2.04-5.13-6.49-8.81-11.76-9.71l-51.887-8.805c-2.008-4.102-4.115-8.142-6.229-12.15l21.797-49.903
+ c2.243-5.087,1.769-10.995-1.203-15.608c-2.961-4.636-7.99-7.344-13.349-7.133l-52.656,1.913c-2.727-3.55-5.496-7.068-8.322-10.521
+ l12.102-53.49c1.225-5.433-0.322-11.118-4.104-15.064c-3.762-3.932-9.229-5.559-14.426-4.283l-51.289,12.608
+ c-3.321-2.935-6.699-5.833-10.114-8.673l1.849-54.914c0.197-5.559-2.394-10.842-6.845-13.925
+ c-4.445-3.104-10.093-3.573-14.955-1.266l-47.848,22.747c-3.854-2.21-7.728-4.4-11.644-6.517l-8.455-54.115
+ c-0.857-5.483-4.386-10.139-9.326-12.266c-4.923-2.137-10.568-1.447-14.891,1.808l-42.659,32.007
+ c-4.2-1.395-8.419-2.732-12.692-4.011l-18.386-51.316c-1.87-5.229-6.182-9.071-11.438-10.151c-5.238-1.072-10.63,0.742-14.263,4.802
+ L861.97,74.97c-4.342-0.5-8.685-0.956-13.043-1.331l-27.723-46.713c-2.811-4.732-7.771-7.612-13.116-7.612
+ c-5.334,0-10.304,2.88-13.09,7.612l-27.733,46.713c-4.358,0.375-8.722,0.831-13.056,1.331l-35.91-40.171
+ c-3.636-4.06-9.047-5.874-14.268-4.802c-5.255,1.092-9.573,4.922-11.433,10.151l-18.402,51.316
+ c-4.26,1.279-8.481,2.627-12.691,4.011l-42.644-32.007c-4.336-3.266-9.98-3.955-14.916-1.808c-4.919,2.127-8.461,6.783-9.313,12.266
+ l-8.461,54.115c-3.914,2.117-7.789,4.294-11.653,6.517l-47.842-22.747c-4.858-2.316-10.529-1.838-14.954,1.266
+ c-4.445,3.083-7.042,8.366-6.84,13.925l1.835,54.914c-3.405,2.84-6.774,5.738-10.112,8.673l-51.279-12.608
+ c-5.211-1.265-10.67,0.351-14.441,4.283c-3.795,3.946-5.332,9.631-4.113,15.064l12.079,53.49c-2.802,3.467-5.575,6.971-8.293,10.521
+ l-52.655-1.913c-5.314-0.157-10.386,2.497-13.356,7.133c-2.974,4.613-3.425,10.521-1.211,15.608l21.814,49.903
+ c-2.119,4.008-4.224,8.048-6.249,12.15l-51.882,8.805c-5.271,0.888-9.715,4.566-11.765,9.71c-2.037,5.157-1.375,11.033,1.735,15.555
+ l30.69,44.451c-0.236,0.784-0.455,1.576-0.69,2.364l-16.863,17.911l45.341,64.05c0,0,435.152,200.731,838.797,3.396
+ C1260.372,502.189,1271.119,431.903,1271.119,431.903"/>
+<path d="M886.303,395.759c0,0,48.157-52.729,96.315,0c0,0,37.84,70.312,0,105.463c0,0-61.917,49.218-96.315,0
+ C886.303,501.222,845.024,462.55,886.303,395.759"/>
+<path fill="#FFFFFF" d="M942.057,415.32c0,20.532-12.103,37.179-27.029,37.179c-14.924,0-27.027-16.646-27.027-37.179
+ s12.104-37.18,27.027-37.18C929.954,378.14,942.057,394.788,942.057,415.32"/>
+<path d="M671.365,381.361c0,0,82.608-36.576,105.154,45.062c0,0,23.618,95.154-67.837,100.525
+ C708.682,526.948,592.06,504.486,671.365,381.361"/>
+<rect x="278" y="19" fill="none" width="1060" height="782"/>
+<g>
+ <defs>
+ <rect id="SVGID_1_" x="278.06" y="19.314" width="1059.75" height="781.686"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_2_)" fill="#FFFFFF" d="M712.855,416.668c0,21.173-12.48,38.346-27.877,38.346
+ c-15.391,0-27.874-17.173-27.874-38.346c0-21.178,12.483-38.346,27.874-38.346C700.375,378.322,712.855,395.49,712.855,416.668"/>
+ <path clip-path="url(#SVGID_2_)" fill="#E33B26" d="M389.602,518.216c10.967-12.463,37.611-27.557,35.57-46.282
+ c-3.653-33.526-31.456-57.999-62.099-54.658c-7.599,0.827-14.658,3.292-20.923,7.035c-0.463-0.106-0.925-0.211-1.388-0.294
+ c0,0-103.632,50.873-44.564,152.657c0.557,5.137,117.847,155.668,150.787,167.131C468.544,751.307,427.074,615.165,389.602,518.216
+ "/>
+ <path clip-path="url(#SVGID_2_)" fill="#E33B26" d="M1231.549,513.673c-12.692-10.7-46.162-20.418-46.92-39.238
+ c-1.355-33.697,22.512-62.021,53.312-63.26c7.638-0.308,14.983,1.083,21.734,3.857c0.442-0.174,0.884-0.347,1.329-0.497
+ c0,0,110.025,34.951,66.695,144.366c0.21,5.163-93.468,171.416-124.345,187.635
+ C1183.146,757.151,1208.861,615.105,1231.549,513.673"/>
+</g>
+<rect x="278" y="19" fill="none" width="1060" height="782"/>
+<path fill="#E33B26" d="M1154.362,514.558c0,0,1.382,137.296-133.167,167.933l-28.055-56.363c0,0,97.495,9.431,104.995-111.569
+ H1154.362"/>
+<path fill="#E33B26" d="M1057.167,654.591c-20.25-48.941-85.595-68.373-145.951-43.399c-53.126,21.98-84.637,71.031-77.624,115.845
+ c41.946-0.652,86.94-3.371,130.736-9.718c0,0-25.837,41.763-63.857,78.211c25.566,6.599,55.383,4.768,84.076-7.104
+ C1044.904,763.452,1077.417,703.532,1057.167,654.591"/>
+<g>
+ <path fill="#E33B26" d="M396.635,512.763c0,0-120.426,65.951-210.88-38.262l36.479-51.313c0,0,37.649,90.426,147.893,39.991
+ L396.635,512.763"/>
+ <path fill="#E33B26" d="M144.038,392.655c0,0-46.915-29.995-114.487-63.65C3.436,369.241,14.735,430.034,58.509,471.979
+ c48.361,46.34,118.025,52.115,155.601,12.901c37.576-39.214,28.833-108.569-19.528-154.908
+ c-21.437-20.543-47.061-33.103-72.221-37.316C140.333,341.359,144.038,392.655,144.038,392.655"/>
+</g>
+<rect x="278.06" y="19.314" fill="none" width="1059.75" height="781.686"/>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/ferris/panics.svg b/src/doc/book/2018-edition/src/img/ferris/panics.svg
new file mode 100644
index 000000000..be55f5e09
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/ferris/panics.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1434.979px" height="947px" viewBox="0 0 1434.979 947" enable-background="new 0 0 1434.979 947" xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1434.979" height="947"/>-->
+<path fill="#8F1F1D" d="M712.827,368.579c-131.633,0-251.228,15.825-339.77,41.615v220.298
+ c88.542,25.79,208.137,41.614,339.77,41.614c150.657,0,285.535-20.729,376.134-53.402V421.986
+ C998.361,389.311,863.483,368.579,712.827,368.579"/>
+<path fill="#8F1F1D" d="M1094.847,567.972c-3.856-10.663-4.629-24.154-1.36-37.162c5.85-23.289,22.421-36.198,37.013-28.833
+ c3.618,1.827,6.773,4.73,9.387,8.418c0.239-0.001,0.479,0,0.715,0.016c0,0,44.552,53.106,3.313,116.003
+ c-0.896,3.569-76.534,91.718-94.043,94.524C1038.411,722.773,1064.762,630.939,1094.847,567.972"/>
+<path fill="#8F1F1D" d="M363.903,557.551c5.3-9.631,7.158-22.788,4.217-36.426c-5.266-24.416-23.91-41.109-41.642-37.285
+ c-4.398,0.948-8.325,3.072-11.666,6.099c-0.282-0.059-0.564-0.113-0.845-0.153c0,0-56.292,41.952-12.057,113.924
+ c0.805,3.741,83.851,108.838,104.311,115.764C419.612,724.004,394.974,626.947,363.903,557.551"/>
+<path fill="#E23A26" d="M284.891,563.596l0.007,0.015C285.083,563.755,285.255,563.887,284.891,563.596"/>
+<path fill="#E33B26" d="M1180.543,488.433c-0.88-3.064-1.756-6.126-2.662-9.162l30.683-44.451c3.13-4.522,3.771-10.398,1.73-15.555
+ c-2.04-5.13-6.49-8.81-11.76-9.71l-51.887-8.805c-2.008-4.102-4.115-8.142-6.229-12.15l21.797-49.903
+ c2.243-5.087,1.769-10.995-1.203-15.608c-2.961-4.636-7.99-7.344-13.349-7.133l-52.656,1.913c-2.727-3.55-5.496-7.068-8.322-10.521
+ l12.102-53.49c1.225-5.433-0.322-11.118-4.104-15.064c-3.762-3.932-9.229-5.559-14.426-4.283l-51.289,12.608
+ c-3.321-2.935-6.699-5.833-10.114-8.673l1.849-54.914c0.197-5.559-2.394-10.842-6.845-13.925
+ c-4.445-3.104-10.093-3.573-14.955-1.266l-47.848,22.747c-3.854-2.21-7.728-4.4-11.644-6.517l-8.455-54.115
+ c-0.857-5.483-4.386-10.139-9.326-12.266c-4.923-2.137-10.568-1.447-14.891,1.808l-42.659,32.007
+ c-4.2-1.395-8.419-2.732-12.692-4.011l-18.386-51.316c-1.87-5.229-6.182-9.071-11.438-10.151c-5.238-1.072-10.63,0.742-14.263,4.802
+ l-35.907,40.171c-4.342-0.5-8.685-0.956-13.043-1.331l-27.723-46.713c-2.811-4.732-7.771-7.612-13.116-7.612
+ c-5.334,0-10.304,2.88-13.09,7.612l-27.733,46.713c-4.358,0.375-8.722,0.831-13.056,1.331l-35.91-40.171
+ c-3.636-4.06-9.047-5.874-14.268-4.802c-5.255,1.092-9.573,4.922-11.433,10.151l-18.402,51.316
+ c-4.26,1.279-8.481,2.627-12.691,4.011l-42.644-32.007c-4.336-3.266-9.98-3.955-14.916-1.808c-4.919,2.127-8.461,6.783-9.313,12.266
+ l-8.461,54.115c-3.914,2.117-7.789,4.294-11.653,6.517L436.1,168.34c-4.858-2.316-10.529-1.838-14.954,1.266
+ c-4.445,3.083-7.042,8.366-6.84,13.925l1.835,54.914c-3.405,2.84-6.774,5.738-10.112,8.673L354.75,234.51
+ c-5.211-1.265-10.67,0.351-14.441,4.283c-3.795,3.946-5.332,9.631-4.113,15.064l12.079,53.49c-2.802,3.467-5.575,6.971-8.293,10.521
+ l-52.655-1.913c-5.314-0.157-10.386,2.497-13.356,7.133c-2.974,4.613-3.425,10.521-1.211,15.608l21.814,49.903
+ c-2.119,4.008-4.224,8.048-6.249,12.15l-51.882,8.805c-5.271,0.888-9.715,4.566-11.765,9.71c-2.037,5.157-1.375,11.033,1.735,15.555
+ l30.69,44.451c-0.236,0.784-0.455,1.576-0.69,2.364l-16.863,17.911l45.341,64.05c0,0,435.152,200.731,838.797,3.396
+ C1169.796,558.719,1180.543,488.433,1180.543,488.433"/>
+<path d="M795.716,446.557c0,0,48.162-52.734,96.324,0c0,0,37.844,70.318,0,105.473c0,0-61.922,49.223-96.324,0
+ C795.716,552.029,754.434,513.354,795.716,446.557"/>
+<path fill="#FFFFFF" d="M855.154,481.097c0,19.782-11.66,35.82-26.041,35.82c-14.379,0-26.04-16.038-26.04-35.82
+ c0-19.782,11.661-35.821,26.04-35.821C843.494,445.275,855.154,461.315,855.154,481.097"/>
+<path d="M578.401,430.129c0,0,84.436-37.385,107.481,46.059c0,0,24.141,97.261-69.339,102.751
+ C616.543,578.939,497.34,555.98,578.401,430.129"/>
+<rect x="187.424" y="75.529" fill="none" width="1060" height="782"/>
+<path fill="#FFFFFF" d="M627.514,481.096c0,20.579-12.13,37.27-27.095,37.27c-14.959,0-27.092-16.69-27.092-37.27
+ c0-20.583,12.133-37.27,27.092-37.27C615.384,443.826,627.514,460.513,627.514,481.096"/>
+<path fill="#E33B26" d="M299.026,574.745c10.967-12.463,37.611-27.557,35.57-46.282c-3.653-33.526-31.456-57.999-62.099-54.658
+ c-7.599,0.827-14.658,3.292-20.923,7.035c-0.463-0.106-0.925-0.211-1.388-0.294c0,0-103.632,50.873-44.564,152.657
+ c0.557,5.137,117.847,155.668,150.787,167.131C377.968,807.836,336.498,671.694,299.026,574.745"/>
+<path fill="#E33B26" d="M1140.973,570.202c-12.692-10.7-46.162-20.418-46.92-39.238c-1.355-33.697,22.512-62.021,53.312-63.26
+ c7.638-0.308,14.983,1.083,21.734,3.857c0.442-0.174,0.884-0.347,1.329-0.497c0,0,110.025,34.951,66.695,144.366
+ c0.21,5.163-93.468,171.416-124.345,187.635C1092.57,813.681,1118.285,671.635,1140.973,570.202"/>
+<rect x="187.484" y="75.843" fill="none" width="1059.75" height="781.686"/>
+<rect x="187.424" y="75.529" fill="none" width="1060" height="782"/>
+<g>
+ <path fill="#E33B26" d="M283.144,565.511c0,0-137.214-4.942-161.62-140.761l57.596-25.427c0,0-13.912,96.957,106.615,110.022
+ L283.144,565.511"/>
+ <path fill="#E33B26" d="M127.552,333.083c0,0-24.965-49.774-65.807-113.261C18.721,241.035-2.671,299.05,13.482,357.484
+ c17.846,64.558,74.749,105.16,127.097,90.69s80.318-78.535,62.471-143.092c-7.909-28.618-23.501-52.519-42.963-69.011
+ C150.611,287.113,127.552,333.083,127.552,333.083"/>
+</g>
+<rect x="187.484" y="75.843" fill="none" width="1059.75" height="781.686"/>
+<g>
+ <path fill="#E33B26" d="M1148.012,565.511c0,0,137.214-4.942,161.62-140.761l-57.596-25.428c0,0,13.912,96.957-106.615,110.022
+ L1148.012,565.511"/>
+ <path fill="#E33B26" d="M1303.604,333.083c0,0,24.966-49.774,65.808-113.261c43.023,21.212,64.416,79.228,48.262,137.662
+ c-17.846,64.558-74.748,105.16-127.096,90.689c-52.348-14.47-80.318-78.534-62.472-143.091
+ c7.909-28.618,23.501-52.519,42.964-69.011C1280.544,287.113,1303.604,333.083,1303.604,333.083"/>
+</g>
+<path d="M807.895,626.942c-7.131-58.735-72.193-61.431-72.193-61.431c-50.936,11.227-59.183,47.369-57.392,75.104L807.895,626.942z"
+ />
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/ferris/unsafe.svg b/src/doc/book/2018-edition/src/img/ferris/unsafe.svg
new file mode 100644
index 000000000..d4fdc08dd
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/ferris/unsafe.svg
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1240.298px" height="811.376px" viewBox="0 0 1240.298 811.376" enable-background="new 0 0 1240.298 811.376"
+ xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1240.298" height="811.376"/>-->
+<rect x="303.062" y="408.688" fill="#E33D27" width="440" height="322.312"/>
+<polygon fill="#F37056" points="548.062,459 543.062,491 595.48,475 631.558,487 620.149,516.493 673.576,524.134 713.745,584
+ 700.062,644.844 753.914,671 780.201,542.318 678.062,433.837 "/>
+<ellipse fill="#FFFFFF" cx="456.505" cy="603.308" rx="20.83" ry="41.536"/>
+<ellipse fill="#FFFFFF" cx="613.519" cy="599.293" rx="18.039" ry="25.608"/>
+<path d="M426.848,565.302c76.475-36.052,82.274,92.731,23.019,92.075C407.91,656.909,399.502,592.939,426.848,565.302z
+ M472.886,588.319c-3.647-13.308-14.517-15.274-25.896-8.632C411.107,600.633,485.029,632.633,472.886,588.319z"/>
+<path d="M593.734,565.302c63.543-6.768,43.711,98.739,0,97.828C549.726,662.215,539.183,571.111,593.734,565.302z M616.753,614.216
+ c8.869-6.019,6.418-24.879,0-31.65C586.653,575.41,587.316,620.858,616.753,614.216z"/>
+<path fill="#E33D27" d="M1218.119,680.395c7.154,1.962-4.255,8.762-5.754,11.51c-40.783-1.407-71.586-8.146-97.83,5.754
+ c-14.517-1.252-39.852-13.043-46.037,2.878c14.931,25.351,67.049,13.519,89.197,31.651c-12.87,18.54-39.345,5.012-57.547,5.754
+ c-10.099,0.416-19.838,5.935-28.774,5.755c-49.039-0.988-101.843-22.372-152.498-23.019c42.625,23.559,115.104,17.253,155.376,43.16
+ c-67.472,4.49-120.696-26.278-187.028-17.264c-6.34,0.861-6.592,6.33-11.509,5.754c-13.465-1.579-23.525-15.382-40.283-5.754
+ c-6.26,5.23,6.261,17.787,0,23.018c-15.253-0.503-14.684-1.859-28.772,0c8.165-6.89,2.844-10.598,2.877-23.018
+ c-13.752,2.551-9.706,22.902-25.896,23.018c-10.812-10.287-27.408-14.791-37.405-25.896c-12.972,3.333-5.671,26.937-17.265,31.65
+ c-14.173-3.091-17.477-17.048-23.019-28.772c-3.136,10.441-20.8,16.528-28.773,5.754c-2.085,8.801,4.968,8.464,2.878,17.264
+ c-18.137,3.755-22.952-5.821-37.406-5.754c0.949-12.456-3.963-19.055-11.51-23.019c4.176,9.359,9.97,28.835,2.877,40.283
+ c58.823,6.435-102.298,3.786-184.15,5.755c-4.103-3.839-4.103-16.305,0-20.142c-3.242-3.983-16.786,6.063-25.896,5.754
+ c-3.692-3.776-3.692-10.61,0-14.387c-22.912,6.714-41.991-16.95-51.792,2.878c-22.355-21.002-38.624,9.456-63.301,11.509
+ c-0.208-9.795,8.463-10.717,14.387-14.387c-1.225-5.487-8.217-5.209-5.754-14.387c-21.833-0.735-30.381,11.819-48.916,14.387
+ c-6.676-6.637,5.328-9.278,2.878-20.142c-14.78-4.791-23.536,24.911-43.161,14.387c2.484-8.068,14.983-6.119,20.142-11.509
+ c-4.107-7.834-13.948-3.709-28.773-5.756c5.839-11.424,18.647-15.887,28.773-23.018c-16.19-14.891-50.252,8.151-86.32,0
+ c-5.632-5.376-0.888-10.538,0-17.264c-26.711,2.744-56.57-2.806-92.075,0c2.416-3.342,3.799-7.716,2.877-14.388
+ c21.001-2.978,57.323,9.365,57.547-14.387c13.15,2.023,39.985,15.118,48.916,2.878c-41.733-18.691-93.205-27.639-132.358-48.915
+ c46.858-1.271,84.578,2.139,123.726-2.877c-14.836-7.225-29.161-14.957-51.792-14.387c-1.995-9.515-8.025-14.992-14.387-20.142
+ c14.393,0.544,26.632,3.115,37.406-11.511c-28.684-5.917-66.629-11.896-103.584-17.264c-0.489-8.162,9.733-5.614,5.754-17.264
+ c44.335,1.66,97.286,27.155,149.623,20.142c-19.613-10.115-54.625-4.845-74.811-14.387c8.817-3.917,31.875,2.574,48.915,0
+ c-28.055-9.265-51.18-14.974-74.811-23.02c-1.147-10.739,2.299-16.882,11.509-17.264c-27.891-14.312-72.805-11.593-92.075-34.528
+ c67.275,12.083,131.448,13.792,198.537,25.897c-37.895-23.488-109.193-13.576-135.235-48.916
+ c17.298,3.808,38.108,4.095,51.792,11.509c5.26-4.333,6.772-12.414,11.51-17.263c-8.29-12.375-29.769-25.14-28.774-37.406
+ c-10.126,8.26-21.226,0.57-11.509-8.633c-6.558-0.802-10.812,0.695-11.509,5.755c-11.38-14.192-41.548-24.578-69.057-37.406
+ c13.712-22.602,48.516,23.597,60.424-8.632c37.523,18.628,73.715,39.315,117.971,57.547c7.57,0.851,2.265-11.164,11.509-8.631
+ c-30.864-42.024-97.425-48.358-123.726-94.953c55.422,11.463,96.745,35.034,138.113,48.915
+ c-18.522-26.558-67.382-47.704-100.707-69.056c16.719-7.501,46.628,10.534,66.179,25.896c17.062,0.757,22.496-4.753,28.773,5.755
+ c3.467-3.249,5.215-8.211,14.387-5.755c-2.417-17.223-41.047-27.381-34.528-34.528c-2.821-5.753-23.592,3.166-17.264-5.753
+ c17.021-8.622,52.713,19.045,71.934,34.528c8.856,2.143,5.53-7.898,14.386-5.755c-17.477-41.028-62.902-54.108-94.952-80.565
+ c16.101-2.625,34.859,16.896,48.915,25.896c-13.454-30.673-60.846-52.319-83.443-83.443c14.331-9.428,31.427,3.026,34.529,14.387
+ c41.625-17.209,41.851,53.044,83.443,54.67c0.135-9.789-20.698-23.374-23.019-40.283c55.417,21.313,74.771,78.69,120.848,109.339
+ c-9.694-14.366-16-28.587-25.896-40.283c-2.906-3.435-12.078-6.455-14.387-11.509c-5.181-11.351,2.501-24.23,0-37.405
+ c-8.834-46.596-59.648-77.024-71.934-126.604c60.424,23.635,64.139,87.271,120.849,112.217c3.502,9.927,9.508,17.348,17.264,23.019
+ c-6.501-27.068-24.469-42.668-31.65-69.057c13.105,16.627,22.53,36.939,34.528,54.669c7.923-3.45,12.021-6.249,20.142-2.877
+ c14.933,25.514,12.746,62.473,31.65,77.688c1.545-27.312-19.079-81.817-48.914-103.585c4.917-13.311,16.061,0.944,23.018,2.877
+ c-2.382-36.073-48.858-95.548-25.896-138.113c33.685,45.919,52.119,107.102,80.565,158.254c18.647-22.846-6.754-63.077-5.753-77.689
+ c24.345-6.629,23.125,36.008,34.528,51.793c-11.323,15.779-18.107,69.924,0,80.566c6.732-22.835,27.025-70.625,2.877-89.198
+ c11.532-27.307-11.375-85.412,5.754-115.095c2.333,0.547,2.873,2.886,5.755,2.878c11.375,8.951,6.991,52.885,14.387,74.811
+ c15.883-26.322,11.335-73.067,43.161-83.443c40.395,56.191,5.844,157.535,17.264,230.188c16.882-26.091,6.238-92.451,8.633-123.726
+ c12.835,6.351,2.354,36.013,5.753,51.792c9.999-29.156,17.749-76.621,8.633-100.707c31.206-12.896,6.732-68.573,40.283-74.811
+ c20.208,50.773-20.771,115.566,0,158.254c28.183-15.123,24.883-76.587,63.301-71.935c17.348-27.735,18.337-71.821,40.283-94.952
+ c11.599,6.23,6.939,20.636,5.755,28.774c-5.469,37.506-37.496,79.328-28.774,129.48c16.079,3.051,12.233-12.965,17.264-20.141
+ c22.969-32.747,53.524-54.615,63.303-97.83c9.093-4.339,13.37-13.492,23.02-17.264c2.972,30.808-14.271,66.28-31.652,86.321
+ c20.782,9.806,6.621,42.072,8.633,66.179c27.801-28.788,45.97-67.206,69.056-100.707c0.631-10.526,3.957-11.038,0-20.142
+ c9.694-4.023,12.285-19.592,25.896-11.51c-3.187,35.176-19.389,57.343-31.651,83.443c19.602,34.369-25.643,69.83-37.405,100.707
+ c36.49-22.017,56.587-60.427,83.443-92.075c15.522-3.715,22.333-31.311,37.406-25.896c10.121,10.746-15.416,33.993-28.774,40.283
+ c-15.814,24.466-37.271,43.289-54.67,66.18c20.4,0.253,19.901-20.384,34.528-25.897c-12.431,22.11-46.615,47.365-60.424,77.689
+ c19.49-10.264,44.7-39.687,60.424-63.302c5.48-5.392,7.232-0.313,14.388,0c31.863-23.788,69.443-45.422,60.423-94.952
+ c14.787-1.359,17.266,9.59,17.266,23.019c15.977-2.248,21.776-14.675,34.528-20.142c3.883,23.099-35.67,27.604-40.283,51.792
+ c7.024,7.731,17.86-5.038,23.019,5.755c-7.003,16.976-35.265,12.69-37.405,34.528c24.951,8.02,57.99-55.858,74.812-20.141
+ c-44.948,23.148-94.257,41.938-112.217,92.075c20.916,4.567,33.337-24.18,57.547-25.896c-15.781,11.964-9.128,30.528-25.896,43.16
+ c26.053-8.69,38.445-45.669,66.179-43.16c-21.068,16.015-36.569,16.525-51.792,48.915c22.496-2.73,53.81-20.786,80.566-28.773
+ c8.664,33.895-29.656,44.938-48.916,60.423c15.141,15.86,42.425,2.503,48.916-14.386c30.661,0.964,54.5-11.661,83.442-20.142
+ c-10.476,28.857-79.555,24.02-86.32,66.18c-17.449,3.649-25.379,16.821-43.161,20.142c22.188,0.098,49.978-19.061,77.689-23.019
+ c-21.384,16.979-53.405,23.318-74.812,40.283c4.153,13.752,14.089,3.931,23.02,0c18.343,0.12,34.905-1.545,43.159-11.51
+ c16.557,5.654,32.235-1.677,43.16-5.754c20.85,6.545,35.652,3.21,60.425,2.876c-9.054,14.494-47.628,12.643-51.792,40.283
+ c-15.404-1.017-20.782,7.991-31.651,11.509c-11.448-10.902-70.523-0.736-77.688,11.51c20.973,8.533,70.854-24.019,83.442,2.878
+ c-2.158,15.103-23.418,11.11-34.528,17.264c-0.917,7.632,16.124-2.691,11.509,8.632c-37.73-11.667-80.526,5.513-117.971,11.51
+ c54.85,5.668,118.797-17.455,166.887-11.51c-0.691,5.061-4.951,6.559-11.51,5.755c-1.102,9.736,12.739,4.527,8.633,17.264
+ c21.59,0.281,47.278-13.782,60.423,2.878c0.013,17.277-34.746-0.219-28.772,23.02c-36.653,4.706-80.122-7.428-103.584,14.386
+ c23.209,21.063,84.387-7.378,112.217,8.633c-10.348,14.589-38.198,11.672-60.425,14.387c-12.038,20.624-38.479,13.604-63.303,17.264
+ c16.473,25.356,71.062,17.585,94.953,20.142c3.191,5.446,3.67,13.594,5.755,20.141c-27.801,2.769-47.735,0.492-69.057,5.755
+ c37.866,18.388,83.977,14.851,135.235,28.774C1214.787,675.751,1214.787,688.616,1218.119,680.395z M550.575,202.755
+ c-2.799-24.018,5.136-64.358-2.877-74.811C546.247,154.524,529.809,185.218,550.575,202.755z M320.386,191.246
+ c-1,14.109,7.149,22.259,17.264,17.264C336.083,198.98,328.187,185.549,320.386,191.246z M662.79,266.057
+ c12.775-7.608,29.892-34.197,17.266-48.915C675.722,234.869,668.423,249.626,662.79,266.057z M349.16,243.038
+ c-8.98-2.527,0.106-23.126-11.51-23.019C336.487,230.921,344.479,247.532,349.16,243.038z M795.148,251.67
+ c3.984-9.588,28.605-22.207,14.388-31.651C805.719,229.717,784.224,236.792,795.148,251.67z M947.648,225.773
+ c-30.661,17.531-60.307,50.434-83.442,74.811c-7.183,7.567-21.355,17.894-17.266,25.897c33.73-34.37,81.348-54.849,106.463-97.831
+ C952.769,226.41,950.992,225.304,947.648,225.773z M524.678,300.584c-0.634-10.877,2.928-25.946-8.631-25.896
+ C510.319,282.514,512.819,301.348,524.678,300.584z M380.811,306.34c-8.363-6.98-10.779-19.912-20.142-25.896
+ C363.551,291.078,372.235,310.964,380.811,306.34z M766.376,355.254c11.79-17.008,36.512-36.346,37.405-54.67
+ C788.394,313.993,771.743,341.409,766.376,355.254z M228.311,335.113c-0.893-9.655-9.621-11.475-17.264-14.387
+ C208.473,333.853,220.511,332.365,228.311,335.113z M881.47,375.396c27.255-1.815,43.564-28.929,63.301-28.773
+ c-5.726-10.979,16.68-14.906,8.633-25.897C933.627,343.149,899.886,351.612,881.47,375.396z M950.526,340.868
+ c10.267-2.201,17.517-7.421,23.019-14.386C963.276,328.683,956.028,333.901,950.526,340.868z M832.554,366.763
+ c7.29-8.131,29.083-16.858,23.02-28.773C848.684,346.513,827.743,356.104,832.554,366.763z M513.169,378.273
+ c6.395-9.208,0.152-25.671-8.633-28.774C495.556,361.294,510.111,369.446,513.169,378.273z M259.962,407.046
+ c-0.961-12.467-15.933-10.918-23.019-17.264C239.416,400.739,247.216,406.369,259.962,407.046z M406.706,407.046
+ c-4.265-2.445-6.186-7.242-5.754-14.387C380.946,392.85,404.992,412.555,406.706,407.046z M1091.516,427.188
+ c18.889,1.254,40.199,5.823,51.792-5.755C1125.139,417.853,1105.779,418.069,1091.516,427.188z M861.328,467.471
+ c-4.401,8.843,18.793,8.843,14.387,0C874.979,460.736,863.076,465.812,861.328,467.471z M553.451,484.735
+ c9.801,0.208,10.718-8.465,14.388-14.387c-3.676-0.158-3.984-3.69-8.633-2.878C560.589,476.523,555.109,478.72,553.451,484.735z
+ M510.292,484.735c-7.593,9.672-6.013,28.515-25.897,25.896c-3.776-8.931,0.782-8.211,0-20.142
+ c-7.199,0.358-9.008,5.49-11.509-2.878c8.092-0.539,12.262-5.004,11.509-14.386c-10.543-0.954-15.988,3.191-23.019,5.753
+ c0.934,17.233,0.995,33.607-17.264,31.652c-5.686-6.537,3.063-16.076,0-28.774c-15.24-4.692-12.396,8.7-17.264,14.387
+ c-3.395-4.271-2.49-12.855-11.509-11.509c0,7.673,0,15.345,0,23.019c8.081,3.429,18.343,4.676,17.264,17.265
+ c-9.845-5.036-17.826,1.259-28.772,2.877c-0.647,5.439,3.242,6.348,2.876,11.509c-20.781,5.638-38.186-2.139-57.546-5.755
+ c8.283,14.739,31.661,14.379,37.406,31.652c-13.758,2.137-24.104-14.115-31.652-8.633c6.193,2.438,10.178,7.086,8.633,17.264
+ c-3.839,4.105-16.303,4.105-20.142,0c0.674,11.893,17.865,8.978,8.631,23.02c4.182,1.572,14.877-3.364,14.388,2.877
+ c-2.182,13.162-31.05-0.356-37.406,8.632c6.896,11.329,28.565,7.881,37.406,17.264c-1.878,14.427-12.533,20.074-25.897,23.02
+ c1.326,9.228,13.067,8.036,14.387,17.264c14.871,0.481,13.296-15.479,28.774-14.387c0.54,14.764-11.595,19.113,2.877,25.897
+ c-10.492,13.175-11.23,19.033-23.019,28.772c22.805,2.664,28.874-11.409,40.283-20.142c-2.058,7.814,13.571-2.061,11.509,5.755
+ c-4.952,7.767,3.175,22.35,5.755,31.65c7.086-14.639,24.575-52.949,43.159-28.772c2.435,10.239-8.327,17.241,2.878,20.14
+ c2.192-22.945,23.323-8.991,34.528-2.876c4.166-5.435,6.43-12.758,17.264-11.51c5.384,4.21,3.394,15.786,14.388,14.386
+ c3.618-14.832,3.551-27.433,14.387-28.772c4.794,3.839,0.961,16.303,5.753,20.142c16.855-0.546,24.453,8.159,31.652,17.264
+ c2.821-3.894,9.7-3.729,11.509-8.633c2.332-13.834-12.622-10.39-8.631-25.895c9.053-1.377,11.25,4.096,17.264,5.755
+ c4.94-10.819,8.486-8.065,14.387-14.388c23.979,18.039,41.816,11.808,71.934,17.264c-1.113-10.39-15.786-7.231-11.509-23.018
+ c-8.464-3.046-19.064-3.957-25.897-8.633c1.4-3.4,3.068-6.524,5.755-8.631c13.47,3.31,44.986,19.467,46.037-5.756
+ c-11.807,0.298-23.492,0.473-28.773-5.755c2.439-10.267,7.086-0.345,17.265-2.878c-9.649-13.283,1.758-10.46,2.877-25.895
+ c-6.166-9.521-26.475-2.203-31.652-5.756c9.24-13.779,34.226-11.812,43.161-25.896c-16.157-11.033-31.026-7.625-40.283,5.755
+ c-19.838-8.728,13.825-22.618,8.633-34.527c-14.173,4.068-22.277-8.931-40.283,0c-1.231-5.479-6.198-7.233-5.755-14.387
+ c1.288-8.303,12.381-6.804,14.386-14.387c-16.583-9.897-36.613,11.937-63.301,2.876c8.783-16.153,25.53-24.347,34.528-40.281
+ c-15.843,5.749-25.424,31.454-43.161,25.896c10.914-8.452,5.266-19.028,14.388-31.65c-17.888,18.046-29.702,12.679-51.794,17.264
+ c0.013-2.885-2.332-3.422-2.876-5.755c-1.933-10.729,11.671-20.717,5.754-25.896C532.046,477.715,525.325,485.381,510.292,484.735z
+ M631.14,510.632c14.477,0.96,28.762-13.325,23.019-23.02C649.742,498.537,634.281,498.427,631.14,510.632z M1028.215,527.896
+ c25.193,7.943,70.354,6.553,80.564-17.264C1089.977,513.287,1039.848,508.571,1028.215,527.896z M717.46,576.811
+ c9.773-4.619,26.661-2.113,31.651-11.509C737.562,568.133,719.702,564.66,717.46,576.811z M705.951,640.111
+ C728.937,657.017,720.579,623.069,705.951,640.111L705.951,640.111z M1056.987,651.621c1.242-6.434,14.185-1.166,20.142-2.877
+ C1071.016,638.734,1006.465,648.215,1056.987,651.621z M1005.195,697.658c3.08,7.52,25.159,3.198,37.406,0
+ C1032.368,694.931,1003.976,694.675,1005.195,697.658z M544.819,769.592c-5.058-0.693-6.558-4.95-5.755-11.509
+ c-19.191,0.495-6.963,14.534-20.142,20.142c15.348,0,30.695,0,46.038,0c0.989-12.499-2.175-20.844-11.51-23.02
+ C554.02,763.444,553.811,770.91,544.819,769.592z M593.734,781.103c10.633-1.839,28.667,3.726,34.528-2.878
+ c-10.676-3.709-10.682-18.09-25.895-17.264C605.396,773.579,592.638,770.41,593.734,781.103z M484.395,781.103
+ c9.594,0,19.187,0,28.774,0C511.691,769.374,485.497,769.412,484.395,781.103z"/>
+<rect x="477.335" y="335.988" fill="#E33D27" width="60.604" height="58.978"/>
+<rect x="346.712" y="365.477" fill="#E33D27" width="64.323" height="59.871"/>
+<rect x="841.76" y="436.07" fill="#E33D27" width="55.402" height="80.423"/>
+<rect x="490.15" y="254.548" fill="#E33D27" width="47.789" height="54.634"/>
+<rect x="221.61" y="365.477" fill="#E33D27" width="37.53" height="50.935"/>
+<g>
+ <path fill="#F37056" d="M960.874,342.508c-7.183,7.57-21.354,17.894-17.264,25.897c23.211-23.649,52.995-40.722,77.5-63.077
+ c-13.034,5.459-25.59,10.327-36.366,12.113C976.251,326.146,968.231,334.759,960.874,342.508z"/>
+ <path fill="#F37056" d="M982.291,286.56c2.111-6.42,4.772-12.605,11.396-17.626c-4.429,0.314-8.461,1.536-12.223,3.29
+ c-15.054,16.66-34.13,35.084-43.608,55.898C951.605,320.884,968.188,304.103,982.291,286.56z"/>
+ <path fill="#F37056" d="M1032.808,336.755c0.142,0.03,0.276,0.044,0.414,0.069c16.913-10.348,33.999-22.228,30.24-44.329
+ C1050.207,304.209,1039.396,318.372,1032.808,336.755z"/>
+ <path fill="#F37056" d="M1189.346,404.169c-9.241,0.124-17.092,0.667-24.393,0.958c-3.92,4.524-6.771,9.897-8.097,16.427
+ C1169.379,415.4,1184.175,412.447,1189.346,404.169z"/>
+ <path fill="#F37056" d="M1093.542,331.732c-5.376,1.275-10.857,2.256-16.521,2.836c-2.233,6.923-5.04,13.786-12.562,19.45
+ C1075.991,350.17,1084.845,340.787,1093.542,331.732z"/>
+ <path fill="#F37056" d="M929.224,408.688c7.288-8.133,29.083-16.855,23.02-28.774C945.354,388.439,924.413,398.027,929.224,408.688
+ z"/>
+ <path fill="#F37056" d="M503.376,448.97c-4.265-2.443-6.188-7.237-5.755-14.386C477.616,434.775,501.662,454.479,503.376,448.97z"
+ />
+ <path fill="#F37056" d="M759.46,307.98c12.773-7.604,29.892-34.197,17.264-48.915C772.392,276.796,765.091,291.553,759.46,307.98z"
+ />
+ <path fill="#F37056" d="M890.099,290.81c0.45,0.896,1.015,1.823,1.72,2.784c1.44-3.468,5.58-7.331,9.607-11.299
+ C897.672,285.156,893.89,287.984,890.099,290.81z"/>
+ <path fill="#F37056" d="M863.046,397.178c4.893-7.058,12.008-14.521,18.729-22.142c1.233-1.57,2.54-3.068,3.899-4.512
+ c7.834-9.309,14.325-18.791,14.776-28.016C885.063,355.918,868.411,383.337,863.046,397.178z"/>
+ <path fill="#F37056" d="M1048.356,202.755c-2.375-5.043-5.084-8.048-8.039-9.602c-6.688,7.37-15.63,14.047-21.896,16.997
+ c-2.716,4.204-5.642,8.197-8.64,12.116C1022.446,215.568,1035.576,209.336,1048.356,202.755z"/>
+ <path fill="#F37056" d="M900.451,236.047c4.218-4.366,8.189-8.975,12.015-13.735c-4.415-1.273-6.41-3.791-10.855,0.584
+ c-0.362,0.545-0.758,1.11-1.132,1.661C900.215,228.505,900.145,232.372,900.451,236.047z"/>
+ <path fill="#F37056" d="M609.837,420.197c6.396-9.205,0.152-25.672-8.631-28.773C592.226,403.22,606.78,411.374,609.837,420.197z"
+ />
+ <path fill="#F37056" d="M1194.9,524.134c-7.083,1.752-15.417,2.252-21.102,5.402c-0.141,1.167,0.173,1.88,0.733,2.349
+ C1182.579,530.562,1193.381,531.989,1194.9,524.134z"/>
+ <path fill="#F37056" d="M1139.644,437.292c2.543-5.611,6.859-9.652,11.949-12.835c-14.169,4.826-22.213,15.774-38.219,18.758
+ C1121.475,443.252,1130.327,440.713,1139.644,437.292z"/>
+ <path fill="#F37056" d="M1127.288,506.742c-1.045,0.868-1.879,1.754-2.405,2.652c2.51,1.021,5.441,1.441,8.66,1.458
+ C1131.681,509.263,1128.91,508.577,1127.288,506.742z"/>
+ <path fill="#F37056" d="M1047.196,382.792c5.236-1.121,9.68-3.037,13.516-5.561c0.651-2.398,1.516-4.628,2.575-6.71
+ C1056.552,373.24,1051.367,377.512,1047.196,382.792z"/>
+ <path fill="#F37056" d="M978.138,417.319c27.257-1.815,43.566-28.924,63.303-28.772c-5.726-10.976,16.68-14.905,8.631-25.897
+ C1030.297,385.073,996.555,393.537,978.138,417.319z"/>
+ <path fill="#F37056" d="M957.997,509.395c-4.4,8.846,18.792,8.846,14.388,0c-0.067-0.618-0.256-1.104-0.495-1.534
+ c-0.405-0.039-0.817-0.064-1.223-0.106c0.352-0.057,0.709-0.121,1.062-0.181C969.09,503.774,959.548,507.923,957.997,509.395z"/>
+ <path fill="#F37056" d="M1174.96,568.179c-11.15-6.416-27.655-5.69-44.926-3.878c-2.112,1.585-3.874,3.4-5.151,5.519
+ c12.32,3.887,29.403,5.526,44.851,3.417C1171.755,571.834,1173.537,570.185,1174.96,568.179z"/>
+ <path fill="#F37056" d="M1078.151,550.431c16.431-5.851,37.288-4.484,58.229-4.133c9.858-1.38,19.687-2.915,29.369-4.328
+ c-0.368-3.449,0.435-5.734,1.99-7.261c-33.084-3.223-68.665,9.885-100.404,14.969
+ C1070.905,550.046,1074.514,550.288,1078.151,550.431z"/>
+ <path fill="#F37056" d="M519.384,275.245c-5.662-14.417-13.493-28.914-22.875-40.615c-0.964,3.086-1.932,6.056-2.847,8.863
+ c1.231,0.242,2.518,0.587,3.958,1.187c14.932,25.513,12.746,62.474,31.652,77.687c0.477-8.462-1.174-19.539-4.568-31.442
+ c-0.057,3.267-0.203,6.626-0.026,9.66c-11.858,0.762-14.358-18.07-8.631-25.896C517.35,274.683,518.437,274.894,519.384,275.245z"
+ />
+ <path fill="#F37056" d="M267.434,218.783c1.495-0.619,2.919-1.093,4.31-1.493c-11.518-10.683-24.522-19.877-40.555-26.044
+ c0.562,4.085,2.214,7.972,4.381,11.664C249.279,196.5,264.522,208.122,267.434,218.783z"/>
+ <path fill="#F37056" d="M208.169,401.292c-6.071-1.665-5.877,2.939-7.165,6.057c28.852,14.916,58.187,30.438,92.325,44.498
+ c7.57,0.854,2.265-11.161,11.509-8.632c-11.596-15.786-28.231-26.537-45.874-36.275c-9.229-0.704-15.755-4.112-19.403-10.394
+ c-23.185-12.392-45.614-25.54-58.449-48.283c55.423,11.464,96.746,35.034,138.113,48.914
+ c-16.806-24.092-58.581-43.732-91.072-63.115c0.056,0.345,0.123,0.682,0.157,1.05c-7.8-2.748-19.838-1.262-17.264-14.387
+ c4.555,1.734,9.483,3.094,12.92,5.942c17.211-2.379,43.146,13.536,60.73,27.35c17.062,0.757,22.497-4.75,28.774,5.754
+ c3.467-3.249,5.214-8.21,14.386-5.754c-2.416-17.22-41.047-27.381-34.528-34.529c-2.821-5.754-23.592,3.17-17.264-5.754
+ c17.022-8.621,52.714,19.045,71.935,34.528c8.856,2.146,5.53-7.896,14.386-5.755c-17.479-41.024-62.903-54.107-94.953-80.565
+ c16.1-2.625,34.86,16.897,48.915,25.896c-10.372-23.648-40.91-41.933-64.713-63.33c1.58,2.518,2.603,4.867,2.571,7.02
+ c-41.592-1.626-41.817-71.881-83.443-54.67c-3.102-11.36-20.198-23.813-34.529-14.387c22.598,31.125,69.99,52.771,83.443,83.443
+ c-14.055-9-32.814-28.521-48.915-25.896c32.05,26.456,77.475,39.538,94.952,80.565c-8.856-2.143-5.53,7.898-14.386,5.755
+ c-19.22-15.482-54.912-43.15-71.934-34.528c-6.329,8.921,14.442,0,17.264,5.753c-6.519,7.146,32.111,17.307,34.528,34.528
+ c-9.172-2.458-10.919,2.506-14.387,5.755c-6.278-10.506-11.712-5-28.773-5.755c-19.551-15.362-49.46-33.396-66.179-25.896
+ c33.325,21.353,82.185,42.5,100.707,69.056c-41.368-13.88-82.69-37.453-138.113-48.915
+ C110.744,352.937,177.305,359.27,208.169,401.292z"/>
+ <path fill="#F37056" d="M309.93,240.203c3.794,5.699,7.626,11.627,11.979,16.89c1.75,1.079,3.316,2.125,4.232,3.209
+ c1.371,1.622,2.664,3.302,3.917,5.013c5.709,4.648,12.412,7.81,20.818,8.138c0.135-9.784-20.697-23.373-23.019-40.283
+ c5.356,2.061,10.369,4.466,15.109,7.143c-3.299-4.795-6.03-13.607-5.317-20.292c11.616-0.107,2.53,20.492,11.51,23.019
+ c-0.256,0.247-0.529,0.405-0.802,0.529c40.576,25.857,60.456,72.41,100.348,98.942c-9.693-14.363-15.999-28.583-25.895-40.283
+ c-2.907-3.433-12.078-6.451-14.388-11.509c-5.18-11.346,2.502-24.227,0-37.406c-3.431-18.093-13.198-33.747-24.575-49.033
+ c-0.958,0.433-1.958,0.885-3.037,1.354c-5.465-8.079-10.4-16.69-15.39-25.247c-6.822-8.953-13.355-18.146-18.698-27.976
+ c7.436,25.506,24.83,41.049,31.21,67.609c-7.756-5.673-13.762-13.092-17.264-23.019c-56.71-24.946-60.425-88.582-120.849-112.217
+ c12.285,49.581,63.099,80.007,71.934,126.604C313.643,221.337,309.731,231.121,309.93,240.203z M320.386,191.246
+ c7.801-5.695,15.697,7.736,17.264,17.264C327.535,213.503,319.386,205.354,320.386,191.246z"/>
+ <path fill="#F37056" d="M390.342,171.301c18.823,25.289,33.874,53.051,66.997,67.624c3.5,9.93,9.508,17.348,17.264,23.019
+ c-6.502-27.065-24.469-42.667-31.652-69.057c13.106,16.628,22.53,36.938,34.529,54.669c1.955-0.851,3.672-1.661,5.28-2.349
+ c-7.824-18.554-2.404-55.13,6.276-69.523c-5.993-14.727-12.288-30.299-15.581-45.543c-3.897-6.521-9.289-10.278-17.834-7.952
+ c-1.001,14.612,24.4,54.842,5.753,77.689c-28.446-51.154-46.88-112.335-80.565-158.254
+ c-22.962,42.564,23.513,102.04,25.896,138.113C402.079,178.449,395.608,171.753,390.342,171.301z"/>
+ <path fill="#F37056" d="M307.717,362.65c-2.574,13.127,9.463,11.639,17.264,14.386C324.087,367.382,315.359,365.561,307.717,362.65
+ z"/>
+ <path fill="#F37056" d="M422.181,231.992c2.706,6.736,4.949,13.468,6.649,19.912c1.728-0.054,3.573-0.523,5.49-1.47
+ C433.1,243.018,428.039,233.279,422.181,231.992z"/>
+ <path fill="#F37056" d="M445.829,284.961c-8.981-2.523,0.107-23.125-11.509-23.018
+ C433.156,272.845,441.148,289.458,445.829,284.961z"/>
+ <path fill="#F37056" d="M258.801,736.706c-4.395,0.452-8.885,0.662-13.462,0.742c1.256,0.752,2.302,1.819,3.113,3.371
+ c-5.159,5.39-17.657,3.44-20.142,11.509c12.687,6.804,20.833-3.199,28.999-9.835C257.897,740.678,258.528,738.765,258.801,736.706z
+ "/>
+ <path fill="#F37056" d="M266.762,755.276c0.264,0.874,0.81,1.79,1.832,2.807c3.484-0.483,6.612-1.317,9.545-2.352
+ C274.396,755.826,270.598,755.697,266.762,755.276z"/>
+ <path fill="#F37056" d="M87.321,398.415c0.697-5.061,4.951-6.556,11.509-5.755c-9.717,9.203,1.383,16.893,11.509,8.633
+ c-0.995,12.268,20.484,25.031,28.774,37.406c-4.737,4.849-6.25,12.93-11.51,17.263c-13.684-7.414-34.494-7.701-51.792-11.509
+ c25.82,35.04,96.11,25.613,134.24,48.339c5.202,1.239,10.045,2.832,14.222,5.095c5.26-4.334,6.771-12.415,11.509-17.264
+ c-8.289-12.375-29.768-25.138-28.773-37.406c-10.127,8.261-21.226,0.574-11.509-8.632c-6.559-0.797-10.813,0.698-11.51,5.755
+ c-11.38-14.19-41.547-24.576-69.056-37.406c12.836-21.153,44.149,17.963,57.867-3.383c-33.871-15.463-63.552-32.002-94.112-47.173
+ c-11.909,32.229-46.712-13.968-60.424,8.632C45.773,373.837,75.941,384.222,87.321,398.415z"/>
+ <path fill="#F37056" d="M558.045,241.802c18.647-22.845-6.755-63.077-5.755-77.688c16.821-4.578,21.438,14.355,26.444,31.704
+ c3.859-55.909,10.377-113.72-16.651-151.317c-31.825,10.377-27.278,57.123-43.161,83.443c-7.396-21.926-3.011-65.862-14.387-74.811
+ c-2.882,0.008-3.421-2.33-5.755-2.878c-8.584,14.876-7.112,36.892-4.959,58.59C517.875,150.519,534.557,199.568,558.045,241.802z
+ M547.697,127.944c8.013,10.453,0.078,50.795,2.877,74.811C529.809,185.218,546.247,154.523,547.697,127.944z"/>
+ <path fill="#F37056" d="M345.122,753.97c-6.598-6.066-16.163-5.833-27.619-3.981c1.346,3.273,4.917,4.318,5.761,8.095
+ c-5.923,3.67-14.595,4.592-14.387,14.387c5.249-0.438,10.112-2.163,14.741-4.403C329.979,762.56,338.159,758.873,345.122,753.97z"
+ />
+ <path fill="#F37056" d="M248.452,712.046c-0.542,0.382-1.118,0.733-1.677,1.101c11.644,3.148,23.822,5.156,29.29-2.338
+ c-32.949-14.757-71.948-23.459-106.184-36.933c-11.934,1.41-29.524-6.348-39.401-7.868c-0.224,23.752-36.545,11.409-57.547,14.387
+ c0.922,6.672-0.461,11.046-2.877,14.388c35.505-2.806,65.364,2.744,92.075,0c-0.888,6.726-5.632,11.888,0,17.264
+ C198.2,720.197,232.262,697.155,248.452,712.046z"/>
+ <path fill="#F37056" d="M93.076,519.263c23.631,8.046,46.756,13.755,74.811,23.02c-17.04,2.574-40.098-3.917-48.915,0
+ c18.857,8.913,50.641,4.909,70.734,12.585c0.714-6.782,4.347-10.647,11.549-10.944c-27.892-14.313-72.805-11.594-92.075-34.528
+ c67.275,12.082,131.448,13.792,198.538,25.896c-37.479-23.228-107.606-13.814-134.334-47.8
+ c-53.725-7.24-106.279-10.213-160.873-20.021c19.271,22.936,64.184,20.216,92.075,34.528
+ C95.375,502.381,91.929,508.523,93.076,519.263z"/>
+ <path fill="#F37056" d="M47.038,619.971c33.711,18.32,76.542,27.512,114.439,41.641c38.881-0.242,71.881,1.775,105.957-2.594
+ c-14.836-7.222-29.162-14.954-51.792-14.387c-1.996-9.515-8.026-14.989-14.387-20.142c14.393,0.546,26.632,3.118,37.405-11.511
+ c-28.683-5.918-66.628-11.896-103.584-17.264c-0.488-8.159,9.733-5.614,5.755-17.264c44.334,1.663,97.285,27.155,149.622,20.141
+ c-19.612-10.115-54.624-4.844-74.81-14.386c8.817-3.917,31.875,2.574,48.914,0c-28.054-9.262-51.179-14.971-74.811-23.02
+ c-0.152-1.431-0.21-2.767-0.196-4.032c-50.952,5.159-102.247-19.012-145.388-20.627c3.979,11.649-6.243,9.102-5.754,17.264
+ c36.956,5.367,74.9,11.347,103.584,17.264c-10.773,14.626-23.013,12.055-37.406,11.511c6.362,5.149,12.392,10.627,14.387,20.142
+ c22.631-0.57,36.957,7.162,51.792,14.387C131.616,622.109,93.896,618.7,47.038,619.971z"/>
+ <path fill="#F37056" d="M1083.058,351.613c23.241-13.143,56.156-17.439,63.128-36.642c-15.511,4.544-29.56,10.265-43.976,14.46
+ C1095.478,334.435,1089.207,340.808,1083.058,351.613z"/>
+ <path fill="#F37056" d="M503.376,221.66c-0.172-2.607-0.598-5.354-1.188-8.191c-0.486,2.327-1.028,4.651-1.613,6.958
+ C501.561,220.979,502.502,221.418,503.376,221.66z"/>
+ <path fill="#F37056" d="M333.613,431.706c2.473,10.96,10.272,16.589,23.018,17.264C355.67,436.506,340.699,438.051,333.613,431.706
+ z"/>
+ <path fill="#F37056" d="M457.339,322.367c2.882,10.638,11.565,30.522,20.142,25.897
+ C469.118,341.283,466.702,328.352,457.339,322.367z"/>
+ <path fill="#F37056" d="M612.715,316.613c-5.726,7.828-3.226,26.66,8.633,25.895C620.713,331.634,624.276,316.567,612.715,316.613z
+ "/>
+ <path fill="#F37056" d="M675.856,231.276c1.558-4.553,2.999-9.222,4.199-14.134c8.91,10.386,3.006,26.675-5.728,38.041
+ c-1.132,21.552-1.289,42.471,1.689,61.431c16.882-26.089,6.238-92.453,8.631-123.727c12.837,6.35,2.355,36.018,5.755,51.793
+ c9.998-29.156,17.747-76.622,8.632-100.708c31.207-12.892,6.733-68.573,40.283-74.812c1.399,3.519,2.481,7.109,3.336,10.751
+ c4.207-11.24,7.807-22.055,9.335-32.533c1.185-8.138,5.844-22.544-5.755-28.774c-21.946,23.131-22.936,67.216-40.283,94.952
+ c-14.696-1.781-23.28,6.128-29.863,17.402C681.301,161.274,678.35,196.469,675.856,231.276z"/>
+ <path fill="#F37056" d="M579.348,274.688c-1.434-9.114-2.142-18.679-2.366-28.551c-3.036,20.503-1.369,43.75,9.838,50.334
+ c6.732-22.834,27.025-70.625,2.876-89.199c5.542-13.125,3.13-33.365,1.032-54.141c-0.779-0.859-1.652-1.627-2.747-2.169
+ C585.586,182.237,596.23,248.598,579.348,274.688z"/>
+ <path fill="#F37056" d="M642.368,184.844c-4.242,22.451-12.071,45.527,4.875,59.835c-2.124-18.231,1.93-45.861,0.506-62.69
+ c-1.584,1.338-3.273,2.521-5.099,3.502C642.546,185.28,642.469,185.058,642.368,184.844z"/>
+ <path fill="#F37056" d="M735.584,171.567c-3.144,20.468-4.104,39.732,3.734,55.847c28.184-15.123,24.885-76.587,63.302-71.934
+ c1.431-2.284,2.714-4.715,3.945-7.202c-0.443-9.034-3.183-16.45-11.417-20.335c17.382-20.041,34.624-55.513,31.652-86.321
+ c-9.649,3.774-13.927,12.925-23.02,17.264c-9.778,43.213-40.334,65.083-63.303,97.83
+ C737.782,160.567,737.619,166.937,735.584,171.567z"/>
+ <path fill="#F37056" d="M615.593,169.868c13.074-21.664,12.321-57.153,29.395-74.822c3.894-23.297,6.041-46.757-2.338-67.809
+ c-32.509,6.044-10.543,58.502-37.533,73.487C611.578,115.878,609.23,151.007,615.593,169.868z"/>
+ <path fill="#F37056" d="M989.466,132.274c-6.629,20.231-17.129,36.588-25.714,54.857c19.602,34.371-25.643,69.833-37.405,100.708
+ c8.093-4.883,15.348-10.604,22.084-16.849c5.897-8.486,12.911-15.855,20.705-22.443c7.69-9.467,14.92-19.396,22.237-29.24
+ c-6.167,3.535-12.203,5.396-17.828,3.588c2.141-21.838,30.402-17.553,37.405-34.528c-5.158-10.793-15.994,1.975-23.019-5.755
+ c4.613-24.188,44.166-28.692,40.283-51.792c-12.752,5.465-18.552,17.894-34.528,20.142
+ C993.687,143.325,992.877,136.5,989.466,132.274z"/>
+ <path fill="#F37056" d="M913.12,153.84c-5.465,6.44-10.646,13.165-15.746,19.968c4.431,4.585,5.854,11.127,5.926,18.638
+ c6.564-7.66,12.868-15.579,18.452-24.219c13.358-6.291,38.896-29.535,28.774-40.283C935.453,122.529,928.643,150.125,913.12,153.84
+ z"/>
+ <path fill="#F37056" d="M822.007,172.346c-3.472,14.691-4.96,30.12-2.122,46.437c16.079,3.051,12.233-12.965,17.264-20.142
+ c10.699-15.258,23.033-28.164,34.16-41.958c-0.713-3.833-2.051-7.663-4.227-11.476c12.263-26.102,28.465-48.266,31.651-83.443
+ c-13.611-8.084-16.202,7.488-25.896,11.51c3.957,9.104,0.631,9.615,0,20.142C855.191,119.025,840.405,147.489,822.007,172.346z"/>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl04-01.svg b/src/doc/book/2018-edition/src/img/trpl04-01.svg
new file mode 100644
index 000000000..314f53ba1
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl04-01.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 700.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 152)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-152 233,-152 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 96,-124 "/>
+<text text-anchor="start" x="45.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 60,-124 60,-104 8,-104"/>
+<text text-anchor="start" x="18.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-104 60,-124 96,-124 96,-104 60,-104"/>
+<text text-anchor="start" x="62.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 60,-104 60,-84 8,-84"/>
+<text text-anchor="start" x="26.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-84 60,-104 96,-104 96,-84 60,-84"/>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="25.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="74.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="10.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<text text-anchor="start" x="74.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="151.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="188.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="200" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="163.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-94C78,-94 109.3406,-94 138.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-97.5001 148.5,-94 138.5,-90.5001 138.5,-97.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl04-02.svg b/src/doc/book/2018-edition/src/img/trpl04-02.svg
new file mode 100644
index 000000000..70d490f0b
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl04-02.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1000.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 238)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-238 233,-238 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-210 96,-210 "/>
+<text text-anchor="start" x="45.7759" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="18.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="62.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-170 8,-190 60,-190 60,-170 8,-170"/>
+<text text-anchor="start" x="26.2241" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-170 60,-190 96,-190 96,-170 60,-170"/>
+<polygon fill="none" stroke="#000000" points="8,-150 8,-170 60,-170 60,-150 8,-150"/>
+<text text-anchor="start" x="25.4482" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-150 60,-170 96,-170 96,-150 60,-150"/>
+<text text-anchor="start" x="74.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-130 8,-150 60,-150 60,-130 8,-130"/>
+<text text-anchor="start" x="10.6826" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-130 60,-150 96,-150 96,-130 60,-130"/>
+<text text-anchor="start" x="74.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node3" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-127 148.5,-147 185.5,-147 185.5,-127 148.5,-127"/>
+<text text-anchor="start" x="151.4482" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-127 185.5,-147 221.5,-147 221.5,-127 185.5,-127"/>
+<text text-anchor="start" x="188.3413" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-107 148.5,-127 185.5,-127 185.5,-107 148.5,-107"/>
+<text text-anchor="start" x="163.5" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-107 185.5,-127 221.5,-127 221.5,-107 185.5,-107"/>
+<text text-anchor="start" x="200" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-87 148.5,-107 185.5,-107 185.5,-87 148.5,-87"/>
+<text text-anchor="start" x="163.5" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-87 185.5,-107 221.5,-107 221.5,-87 185.5,-87"/>
+<text text-anchor="start" x="200.3931" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-67 148.5,-87 185.5,-87 185.5,-67 148.5,-67"/>
+<text text-anchor="start" x="163.5" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-67 185.5,-87 221.5,-87 221.5,-67 185.5,-67"/>
+<text text-anchor="start" x="201.5552" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-47 148.5,-67 185.5,-67 185.5,-47 148.5,-47"/>
+<text text-anchor="start" x="163.5" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-47 185.5,-67 221.5,-67 221.5,-47 185.5,-47"/>
+<text text-anchor="start" x="201.5552" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-27 148.5,-47 185.5,-47 185.5,-27 148.5,-27"/>
+<text text-anchor="start" x="163.5" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-27 185.5,-47 221.5,-47 221.5,-27 185.5,-27"/>
+<text text-anchor="start" x="200" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-180C78,-180 101.9982,-126.912 138.4405,-118.2023"/>
+<polygon fill="#000000" stroke="#000000" points="138.986,-121.6621 148.5,-117 138.1553,-114.7115 138.986,-121.6621"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-84 96,-84 "/>
+<text text-anchor="start" x="45.7759" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="18.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="62.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="26.2241" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<polygon fill="none" stroke="#000000" points="8,-24 8,-44 60,-44 60,-24 8,-24"/>
+<text text-anchor="start" x="25.4482" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-24 60,-44 96,-44 96,-24 60,-24"/>
+<text text-anchor="start" x="74.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-24 60,-24 60,-4 8,-4"/>
+<text text-anchor="start" x="10.6826" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-4 60,-24 96,-24 96,-4 60,-4"/>
+<text text-anchor="start" x="74.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table3&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-54C78,-54 101.9982,-107.088 138.4405,-115.7977"/>
+<polygon fill="#000000" stroke="#000000" points="138.1553,-119.2885 148.5,-117 138.986,-112.3379 138.1553,-119.2885"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl04-03.svg b/src/doc/book/2018-edition/src/img/trpl04-03.svg
new file mode 100644
index 000000000..7c153e23a
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl04-03.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1300.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 298)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-298 233,-298 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 96,-124 "/>
+<text text-anchor="start" x="45.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 60,-124 60,-104 8,-104"/>
+<text text-anchor="start" x="18.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-104 60,-124 96,-124 96,-104 60,-104"/>
+<text text-anchor="start" x="62.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 60,-104 60,-84 8,-84"/>
+<text text-anchor="start" x="26.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-84 60,-104 96,-104 96,-84 60,-84"/>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="25.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="74.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="10.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<text text-anchor="start" x="74.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="151.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="188.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="200" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="163.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-94C78,-94 109.3406,-94 138.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-97.5001 148.5,-94 138.5,-90.5001 138.5,-97.5001"/>
+</g>
+<!-- table3 -->
+<g id="node3" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-270 96,-270 "/>
+<text text-anchor="start" x="45.7759" y="-275.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-250 8,-270 60,-270 60,-250 8,-250"/>
+<text text-anchor="start" x="18.8413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-250 60,-270 96,-270 96,-250 60,-250"/>
+<text text-anchor="start" x="62.8413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-230 8,-250 60,-250 60,-230 8,-230"/>
+<text text-anchor="start" x="26.2241" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-230 60,-250 96,-250 96,-230 60,-230"/>
+<polygon fill="none" stroke="#000000" points="8,-210 8,-230 60,-230 60,-210 8,-210"/>
+<text text-anchor="start" x="25.4482" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-210 60,-230 96,-230 96,-210 60,-210"/>
+<text text-anchor="start" x="74.5" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="10.6826" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="74.5" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table4 -->
+<g id="node4" class="node">
+<title>table4</title>
+<polygon fill="none" stroke="#000000" points="148.5,-250 148.5,-270 185.5,-270 185.5,-250 148.5,-250"/>
+<text text-anchor="start" x="151.4482" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-250 185.5,-270 221.5,-270 221.5,-250 185.5,-250"/>
+<text text-anchor="start" x="188.3413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-230 148.5,-250 185.5,-250 185.5,-230 148.5,-230"/>
+<text text-anchor="start" x="163.5" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-230 185.5,-250 221.5,-250 221.5,-230 185.5,-230"/>
+<text text-anchor="start" x="200" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-210 148.5,-230 185.5,-230 185.5,-210 148.5,-210"/>
+<text text-anchor="start" x="163.5" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-210 185.5,-230 221.5,-230 221.5,-210 185.5,-210"/>
+<text text-anchor="start" x="200.3931" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-190 148.5,-210 185.5,-210 185.5,-190 148.5,-190"/>
+<text text-anchor="start" x="163.5" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-190 185.5,-210 221.5,-210 221.5,-190 185.5,-190"/>
+<text text-anchor="start" x="201.5552" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-170 148.5,-190 185.5,-190 185.5,-170 148.5,-170"/>
+<text text-anchor="start" x="163.5" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-170 185.5,-190 221.5,-190 221.5,-170 185.5,-170"/>
+<text text-anchor="start" x="201.5552" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-150 148.5,-170 185.5,-170 185.5,-150 148.5,-150"/>
+<text text-anchor="start" x="163.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-150 185.5,-170 221.5,-170 221.5,-150 185.5,-150"/>
+<text text-anchor="start" x="200" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table3&#45;&gt;table4 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table4:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-240C78,-240 109.3406,-240 138.3797,-240"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-243.5001 148.5,-240 138.5,-236.5001 138.5,-243.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl04-04.svg b/src/doc/book/2018-edition/src/img/trpl04-04.svg
new file mode 100644
index 000000000..a0513abd9
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl04-04.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1000.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 238)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-238 233,-238 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="8,-130 8,-230 96,-230 96,-130 8,-130"/>
+<polyline fill="none" stroke="#000000" points="8,-210 96,-210 "/>
+<text text-anchor="start" x="45.7759" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="18.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="62.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-170 8,-190 60,-190 60,-170 8,-170"/>
+<text text-anchor="start" x="26.2241" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-170 60,-190 96,-190 96,-170 60,-170"/>
+<polygon fill="none" stroke="#000000" points="8,-150 8,-170 60,-170 60,-150 8,-150"/>
+<text text-anchor="start" x="25.4482" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-150 60,-170 96,-170 96,-150 60,-150"/>
+<text text-anchor="start" x="74.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-130 8,-150 60,-150 60,-130 8,-130"/>
+<text text-anchor="start" x="10.6826" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-130 60,-150 96,-150 96,-130 60,-130"/>
+<text text-anchor="start" x="74.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node3" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-127 148.5,-147 185.5,-147 185.5,-127 148.5,-127"/>
+<text text-anchor="start" x="151.4482" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-127 185.5,-147 221.5,-147 221.5,-127 185.5,-127"/>
+<text text-anchor="start" x="188.3413" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-107 148.5,-127 185.5,-127 185.5,-107 148.5,-107"/>
+<text text-anchor="start" x="163.5" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-107 185.5,-127 221.5,-127 221.5,-107 185.5,-107"/>
+<text text-anchor="start" x="200" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-87 148.5,-107 185.5,-107 185.5,-87 148.5,-87"/>
+<text text-anchor="start" x="163.5" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-87 185.5,-107 221.5,-107 221.5,-87 185.5,-87"/>
+<text text-anchor="start" x="200.3931" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-67 148.5,-87 185.5,-87 185.5,-67 148.5,-67"/>
+<text text-anchor="start" x="163.5" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-67 185.5,-87 221.5,-87 221.5,-67 185.5,-67"/>
+<text text-anchor="start" x="201.5552" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-47 148.5,-67 185.5,-67 185.5,-47 148.5,-47"/>
+<text text-anchor="start" x="163.5" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-47 185.5,-67 221.5,-67 221.5,-47 185.5,-47"/>
+<text text-anchor="start" x="201.5552" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-27 148.5,-47 185.5,-47 185.5,-27 148.5,-27"/>
+<text text-anchor="start" x="163.5" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-27 185.5,-47 221.5,-47 221.5,-27 185.5,-27"/>
+<text text-anchor="start" x="200" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-180C78,-180 101.9982,-126.912 138.4405,-118.2023"/>
+<polygon fill="#000000" stroke="#000000" points="138.986,-121.6621 148.5,-117 138.1553,-114.7115 138.986,-121.6621"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-84 96,-84 "/>
+<text text-anchor="start" x="45.7759" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="18.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="62.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="26.2241" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<polygon fill="none" stroke="#000000" points="8,-24 8,-44 60,-44 60,-24 8,-24"/>
+<text text-anchor="start" x="25.4482" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-24 60,-44 96,-44 96,-24 60,-24"/>
+<text text-anchor="start" x="74.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-24 60,-24 60,-4 8,-4"/>
+<text text-anchor="start" x="10.6826" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-4 60,-24 96,-24 96,-4 60,-4"/>
+<text text-anchor="start" x="74.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table3&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-54C78,-54 101.9982,-107.088 138.4405,-115.7977"/>
+<polygon fill="#000000" stroke="#000000" points="138.1553,-119.2885 148.5,-117 138.986,-112.3379 138.1553,-119.2885"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl04-05.svg b/src/doc/book/2018-edition/src/img/trpl04-05.svg
new file mode 100644
index 000000000..b4bf2ebee
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl04-05.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1500.00 650.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 152)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-152 357,-152 357,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 80,-124 "/>
+<text text-anchor="start" x="41.2759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 44,-124 44,-104 8,-104"/>
+<text text-anchor="start" x="10.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="44,-104 44,-124 80,-124 80,-104 44,-104"/>
+<text text-anchor="start" x="46.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 44,-104 44,-84 8,-84"/>
+<text text-anchor="start" x="18.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="44,-84 44,-104 80,-104 80,-84 44,-84"/>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polyline fill="none" stroke="#000000" points="132,-124 220,-124 "/>
+<text text-anchor="start" x="169.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="132,-104 132,-124 184,-124 184,-104 132,-104"/>
+<text text-anchor="start" x="142.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="184,-104 184,-124 220,-124 220,-104 184,-104"/>
+<text text-anchor="start" x="186.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="132,-84 132,-104 184,-104 184,-84 132,-84"/>
+<text text-anchor="start" x="150.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="184,-84 184,-104 220,-104 220,-84 184,-84"/>
+<polygon fill="none" stroke="#000000" points="132,-64 132,-84 184,-84 184,-64 132,-64"/>
+<text text-anchor="start" x="149.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="184,-64 184,-84 220,-84 220,-64 184,-64"/>
+<text text-anchor="start" x="198.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="132,-44 132,-64 184,-64 184,-44 132,-44"/>
+<text text-anchor="start" x="134.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="184,-44 184,-64 220,-64 220,-44 184,-44"/>
+<text text-anchor="start" x="198.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table0:c&#45;&gt;table1:borrowee</title>
+<path fill="none" stroke="#000000" d="M62,-94C62,-94 93.1184,-94 121.9514,-94"/>
+<polygon fill="#000000" stroke="#000000" points="122,-97.5001 132,-94 122,-90.5001 122,-97.5001"/>
+</g>
+<!-- table2 -->
+<g id="node3" class="node">
+<title>table2</title>
+<polygon fill="none" stroke="#000000" points="272.5,-104 272.5,-124 309.5,-124 309.5,-104 272.5,-104"/>
+<text text-anchor="start" x="275.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="309.5,-104 309.5,-124 345.5,-124 345.5,-104 309.5,-104"/>
+<text text-anchor="start" x="312.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="272.5,-84 272.5,-104 309.5,-104 309.5,-84 272.5,-84"/>
+<text text-anchor="start" x="287.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="309.5,-84 309.5,-104 345.5,-104 345.5,-84 309.5,-84"/>
+<text text-anchor="start" x="324" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="272.5,-64 272.5,-84 309.5,-84 309.5,-64 272.5,-64"/>
+<text text-anchor="start" x="287.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="309.5,-64 309.5,-84 345.5,-84 345.5,-64 309.5,-64"/>
+<text text-anchor="start" x="324.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="272.5,-44 272.5,-64 309.5,-64 309.5,-44 272.5,-44"/>
+<text text-anchor="start" x="287.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="309.5,-44 309.5,-64 345.5,-64 345.5,-44 309.5,-44"/>
+<text text-anchor="start" x="325.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="272.5,-24 272.5,-44 309.5,-44 309.5,-24 272.5,-24"/>
+<text text-anchor="start" x="287.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="309.5,-24 309.5,-44 345.5,-44 345.5,-24 309.5,-24"/>
+<text text-anchor="start" x="325.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="272.5,-4 272.5,-24 309.5,-24 309.5,-4 272.5,-4"/>
+<text text-anchor="start" x="287.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="309.5,-4 309.5,-24 345.5,-24 345.5,-4 309.5,-4"/>
+<text text-anchor="start" x="324" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge1" class="edge">
+<title>table1:c&#45;&gt;table2:pointee</title>
+<path fill="none" stroke="#000000" d="M202,-94C202,-94 233.3406,-94 262.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="262.5,-97.5001 272.5,-94 262.5,-90.5001 262.5,-97.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl04-06.svg b/src/doc/book/2018-edition/src/img/trpl04-06.svg
new file mode 100644
index 000000000..e64415fe4
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl04-06.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1279.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 275)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-275 233,-275 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="16,-121 88,-121 "/>
+<text text-anchor="start" x="35.6689" y="-126.8" font-family="Times,serif" font-size="14.00" fill="#000000">world</text>
+<polygon fill="none" stroke="#000000" points="16,-101 16,-121 52,-121 52,-101 16,-101"/>
+<text text-anchor="start" x="18.8413" y="-106.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="52,-101 52,-121 88,-121 88,-101 52,-101"/>
+<text text-anchor="start" x="54.8413" y="-106.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="16,-81 16,-101 52,-101 52,-81 16,-81"/>
+<text text-anchor="start" x="26.2241" y="-86.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="52,-81 52,-101 88,-101 88,-81 52,-81"/>
+<polygon fill="none" stroke="#000000" points="16,-61 16,-81 52,-81 52,-61 16,-61"/>
+<text text-anchor="start" x="25.4482" y="-66.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="52,-61 52,-81 88,-81 88,-61 52,-61"/>
+<text text-anchor="start" x="66.5" y="-66.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table4 -->
+<g id="node3" class="node">
+<title>table4</title>
+<polygon fill="none" stroke="#000000" points="148.5,-224 148.5,-244 185.5,-244 185.5,-224 148.5,-224"/>
+<text text-anchor="start" x="151.4482" y="-229.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-224 185.5,-244 221.5,-244 221.5,-224 185.5,-224"/>
+<text text-anchor="start" x="188.3413" y="-229.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-204 148.5,-224 185.5,-224 185.5,-204 148.5,-204"/>
+<text text-anchor="start" x="163.5" y="-209.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-204 185.5,-224 221.5,-224 221.5,-204 185.5,-204"/>
+<text text-anchor="start" x="200" y="-209.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-184 148.5,-204 185.5,-204 185.5,-184 148.5,-184"/>
+<text text-anchor="start" x="163.5" y="-189.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-184 185.5,-204 221.5,-204 221.5,-184 185.5,-184"/>
+<text text-anchor="start" x="200.3931" y="-189.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-164 148.5,-184 185.5,-184 185.5,-164 148.5,-164"/>
+<text text-anchor="start" x="163.5" y="-169.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-164 185.5,-184 221.5,-184 221.5,-164 185.5,-164"/>
+<text text-anchor="start" x="201.5552" y="-169.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-144 148.5,-164 185.5,-164 185.5,-144 148.5,-144"/>
+<text text-anchor="start" x="163.5" y="-149.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-144 185.5,-164 221.5,-164 221.5,-144 185.5,-144"/>
+<text text-anchor="start" x="201.5552" y="-149.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-124 148.5,-144 185.5,-144 185.5,-124 148.5,-124"/>
+<text text-anchor="start" x="163.5" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-124 185.5,-144 221.5,-144 221.5,-124 185.5,-124"/>
+<text text-anchor="start" x="200" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="163.5" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="201.75" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">6</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="198.4448" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">w</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">7</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">8</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.1689" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">r</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">9</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="160" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">10</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">d</text>
+</g>
+<!-- table0&#45;&gt;table4 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table4:pointee2</title>
+<path fill="none" stroke="#000000" d="M70,-91C70,-91 105.7964,-93.4639 138.4948,-93.9258"/>
+<polygon fill="#000000" stroke="#000000" points="138.4743,-97.4257 148.5,-94 138.5263,-90.4259 138.4743,-97.4257"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-247 96,-247 "/>
+<text text-anchor="start" x="49.2759" y="-252.8" font-family="Times,serif" font-size="14.00" fill="#000000">s</text>
+<polygon fill="none" stroke="#000000" points="8,-227 8,-247 60,-247 60,-227 8,-227"/>
+<text text-anchor="start" x="18.8413" y="-232.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-227 60,-247 96,-247 96,-227 60,-227"/>
+<text text-anchor="start" x="62.8413" y="-232.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-207 8,-227 60,-227 60,-207 8,-207"/>
+<text text-anchor="start" x="26.2241" y="-212.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-207 60,-227 96,-227 96,-207 60,-207"/>
+<polygon fill="none" stroke="#000000" points="8,-187 8,-207 60,-207 60,-187 8,-187"/>
+<text text-anchor="start" x="25.4482" y="-192.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-187 60,-207 96,-207 96,-187 60,-187"/>
+<text text-anchor="start" x="71.2563" y="-192.8" font-family="Times,serif" font-size="14.00" fill="#000000">11</text>
+<polygon fill="none" stroke="#000000" points="8,-167 8,-187 60,-187 60,-167 8,-167"/>
+<text text-anchor="start" x="10.6826" y="-172.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-167 60,-187 96,-187 96,-167 60,-167"/>
+<text text-anchor="start" x="71.2563" y="-172.8" font-family="Times,serif" font-size="14.00" fill="#000000">11</text>
+</g>
+<!-- table3&#45;&gt;table4 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table4:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-217C78,-217 109.3179,-214.5994 138.3725,-214.0931"/>
+<polygon fill="#000000" stroke="#000000" points="138.5326,-217.5918 148.5,-214 138.4682,-210.5921 138.5326,-217.5918"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl14-01.png b/src/doc/book/2018-edition/src/img/trpl14-01.png
new file mode 100644
index 000000000..5fc59898c
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl14-01.png
Binary files differ
diff --git a/src/doc/book/2018-edition/src/img/trpl14-02.png b/src/doc/book/2018-edition/src/img/trpl14-02.png
new file mode 100644
index 000000000..78e7e7ba7
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl14-02.png
Binary files differ
diff --git a/src/doc/book/2018-edition/src/img/trpl14-03.png b/src/doc/book/2018-edition/src/img/trpl14-03.png
new file mode 100644
index 000000000..ef8414507
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl14-03.png
Binary files differ
diff --git a/src/doc/book/2018-edition/src/img/trpl14-04.png b/src/doc/book/2018-edition/src/img/trpl14-04.png
new file mode 100644
index 000000000..d0ed2ca18
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl14-04.png
Binary files differ
diff --git a/src/doc/book/2018-edition/src/img/trpl15-01.svg b/src/doc/book/2018-edition/src/img/trpl15-01.svg
new file mode 100644
index 000000000..bbeef968a
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl15-01.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 700.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 156)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-156 174,-156 174,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-128 162,-128 "/>
+<text text-anchor="start" x="70.6069" y="-133.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-128 31,-128 31,-4 8,-4"/>
+<text text-anchor="start" x="10.5552" y="-61.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="31,-4 31,-128 162,-128 162,-4 31,-4"/>
+<polyline fill="none" stroke="#000000" points="34,-105 159,-105 "/>
+<text text-anchor="start" x="82.1069" y="-110.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="34,-7 34,-105 57,-105 57,-7 34,-7"/>
+<text text-anchor="start" x="36.5552" y="-51.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="57,-7 57,-105 159,-105 159,-7 57,-7"/>
+<polyline fill="none" stroke="#000000" points="60,-82 156,-82 "/>
+<text text-anchor="start" x="93.6069" y="-87.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="60,-10 60,-82 83,-82 83,-10 60,-10"/>
+<text text-anchor="start" x="62.5552" y="-41.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="83,-10 83,-82 156,-82 156,-10 83,-10"/>
+<polyline fill="none" stroke="#000000" points="86,-59 153,-59 "/>
+<text text-anchor="start" x="105.1069" y="-64.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="86,-13 86,-59 109,-59 109,-13 86,-13"/>
+<text text-anchor="start" x="88.5552" y="-31.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="109,-13 109,-59 153,-59 153,-13 109,-13"/>
+<polyline fill="none" stroke="#000000" points="112,-36 150,-36 "/>
+<text text-anchor="start" x="116.6069" y="-41.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="112,-16 112,-36 135,-36 135,-16 112,-16"/>
+<text text-anchor="start" x="114.5552" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="135,-16 135,-36 150,-36 150,-16 135,-16"/>
+<text text-anchor="start" x="137.5098" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">∞</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl15-02.svg b/src/doc/book/2018-edition/src/img/trpl15-02.svg
new file mode 100644
index 000000000..4454df8c3
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl15-02.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg width="250pt"
+ viewBox="0.00 0.00 363.00 342.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 78)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-78 83,-78 83,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8.5,-50 71.5,-50 "/>
+<text text-anchor="start" x="25.6069" y="-55.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="8.5,-4 8.5,-50 31.5,-50 31.5,-4 8.5,-4"/>
+<text text-anchor="start" x="11.0552" y="-22.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="31.5,-4 31.5,-50 71.5,-50 71.5,-4 31.5,-4"/>
+<polyline fill="none" stroke="#000000" points="34.5,-27 68.5,-27 "/>
+<text text-anchor="start" x="39.8311" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">Box</text>
+<polygon fill="none" stroke="#000000" points="34.5,-7 34.5,-27 68.5,-27 68.5,-7 34.5,-7"/>
+<text text-anchor="start" x="37.1172" y="-12.8" font-family="Times,serif" font-size="14.00" fill="#000000">usize</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl15-03.svg b/src/doc/book/2018-edition/src/img/trpl15-03.svg
new file mode 100644
index 000000000..dbc3b5cdb
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl15-03.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+ <svg width="750pt"
+ viewBox="0.00 0.00 2500 700" xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 148)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-148 418,-148 418,4 -4,4"/>
+<!-- table4 -->
+<g id="node1" class="node">
+<title>table4</title>
+<text text-anchor="start" x="21" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">b</text>
+</g>
+<!-- table5 -->
+<g id="node2" class="node">
+<title>table5</title>
+<polygon fill="none" stroke="#000000" points="104,-116 104,-136 117,-136 117,-116 104,-116"/>
+<text text-anchor="start" x="107" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="117,-116 117,-136 130,-136 130,-116 117,-116"/>
+<text text-anchor="start" x="120" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table4&#45;&gt;table5 -->
+<g id="edge4" class="edge">
+<title>table4:c&#45;&gt;table5:pte4</title>
+<path fill="none" stroke="#000000" d="M34,-126C34,-126 65.1184,-126 93.9514,-126"/>
+<polygon fill="#000000" stroke="#000000" points="94,-129.5001 104,-126 94,-122.5001 94,-129.5001"/>
+</g>
+<!-- table1 -->
+<g id="node4" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="194,-62 194,-82 207,-82 207,-62 194,-62"/>
+<text text-anchor="start" x="197" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="207,-62 207,-82 220,-82 220,-62 207,-62"/>
+<text text-anchor="start" x="210" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table5&#45;&gt;table1 -->
+<g id="edge5" class="edge">
+<title>table5:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M124,-126C124,-126 149.4376,-81.2672 183.6334,-73.2293"/>
+<polygon fill="#000000" stroke="#000000" points="184.4818,-76.6533 194,-72 183.6574,-69.702 184.4818,-76.6533"/>
+</g>
+<!-- table0 -->
+<g id="node3" class="node">
+<title>table0</title>
+<text text-anchor="start" x="110.8931" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">a</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M123,-72C123,-72 154.5629,-72 183.8079,-72"/>
+<polygon fill="#000000" stroke="#000000" points="184,-75.5001 194,-72 184,-68.5001 184,-75.5001"/>
+</g>
+<!-- table2 -->
+<g id="node5" class="node">
+<title>table2</title>
+<polygon fill="none" stroke="#000000" points="281,-62 281,-82 301,-82 301,-62 281,-62"/>
+<text text-anchor="start" x="284" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">10</text>
+<polygon fill="none" stroke="#000000" points="301,-62 301,-82 314,-82 314,-62 301,-62"/>
+<text text-anchor="start" x="304" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge2" class="edge">
+<title>table1:c&#45;&gt;table2:pte1</title>
+<path fill="none" stroke="#000000" d="M214,-72C214,-72 243.2667,-72 270.6585,-72"/>
+<polygon fill="#000000" stroke="#000000" points="271,-75.5001 281,-72 271,-68.5001 271,-75.5001"/>
+</g>
+<!-- table3 -->
+<g id="node6" class="node">
+<title>table3</title>
+<polygon fill="none" stroke="#000000" points="376,-62 376,-82 399,-82 399,-62 376,-62"/>
+<text text-anchor="start" x="378.5552" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">Nil</text>
+</g>
+<!-- table2&#45;&gt;table3 -->
+<g id="edge3" class="edge">
+<title>table2:c&#45;&gt;table3:pte2</title>
+<path fill="none" stroke="#000000" d="M308,-72C308,-72 341.8867,-72 365.5509,-72"/>
+<polygon fill="#000000" stroke="#000000" points="365.8498,-75.5001 375.8497,-72 365.8497,-68.5001 365.8498,-75.5001"/>
+</g>
+<!-- table6 -->
+<g id="node7" class="node">
+<title>table6</title>
+<text text-anchor="start" x="20.8931" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">c</text>
+</g>
+<!-- table7 -->
+<g id="node8" class="node">
+<title>table7</title>
+<polygon fill="none" stroke="#000000" points="104,-8 104,-28 117,-28 117,-8 104,-8"/>
+<text text-anchor="start" x="107" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="117,-8 117,-28 130,-28 130,-8 117,-8"/>
+<text text-anchor="start" x="120" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table6&#45;&gt;table7 -->
+<g id="edge6" class="edge">
+<title>table6:c&#45;&gt;table7:pte6</title>
+<path fill="none" stroke="#000000" d="M33,-18C33,-18 64.5629,-18 93.8079,-18"/>
+<polygon fill="#000000" stroke="#000000" points="94,-21.5001 104,-18 94,-14.5001 94,-21.5001"/>
+</g>
+<!-- table7&#45;&gt;table1 -->
+<g id="edge7" class="edge">
+<title>table7:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M124,-18C124,-18 149.4376,-62.7328 183.6334,-70.7707"/>
+<polygon fill="#000000" stroke="#000000" points="183.6574,-74.298 194,-72 184.4818,-67.3467 183.6574,-74.298"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl15-04.svg b/src/doc/book/2018-edition/src/img/trpl15-04.svg
new file mode 100644
index 000000000..96ad98ca1
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl15-04.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg width="633pt" height="498pt" viewBox="0.00 0.00 633.33 498.19" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.16667 4.16667) rotate(0) translate(4 115.566)">
+<title>%3</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-115.566 148,-115.566 148,4 -4,4"/>
+<!-- table0 -->
+<g id="node2" class="node"><title>table0</title>
+<polygon fill="none" stroke="black" points="0,-75.5656 0,-111.566 54,-111.566 54,-75.5656 0,-75.5656"/>
+<text text-anchor="middle" x="27" y="-89.8656" font-family="Times,serif" font-size="14.00">a</text>
+</g>
+<!-- table1 -->
+<g id="node4" class="node"><title>table1</title>
+<polygon fill="none" stroke="black" points="90,-75.5656 90,-111.566 144,-111.566 144,-75.5656 90,-75.5656"/>
+<text text-anchor="middle" x="104" y="-89.8656" font-family="Times,serif" font-size="14.00">5</text>
+<polyline fill="none" stroke="black" points="118,-75.5656 118,-111.566 "/>
+<text text-anchor="middle" x="131" y="-89.8656" font-family="Times,serif" font-size="14.00"> </text>
+</g>
+<!-- table2 -->
+<g id="node3" class="node"><title>table2</title>
+<polygon fill="none" stroke="black" points="90,-20.5656 90,-56.5656 144,-56.5656 144,-20.5656 90,-20.5656"/>
+<text text-anchor="middle" x="117" y="-34.8656" font-family="Times,serif" font-size="14.00">b</text>
+</g>
+<!-- table3 -->
+<g id="node1" class="node"><title>table3</title>
+<polygon fill="none" stroke="black" points="0,-20.5656 0,-56.5656 54,-56.5656 54,-20.5656 0,-20.5656"/>
+<text text-anchor="middle" x="16" y="-34.8656" font-family="Times,serif" font-size="14.00">10</text>
+<polyline fill="none" stroke="black" points="32,-20.5656 32,-56.5656 "/>
+<text text-anchor="middle" x="43" y="-34.8656" font-family="Times,serif" font-size="14.00"> </text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge"><title>table0:ref-&gt;table1:data</title>
+<path fill="none" stroke="black" d="M54,-93.5656C66,-93.5656 71.25,-93.5656 78.875,-93.5656"/>
+<polygon fill="black" stroke="black" points="79,-97.0657 89,-93.5656 79,-90.0657 79,-97.0657"/>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge2" class="edge"><title>table1:ref-&gt;table2:data</title>
+<path fill="none" stroke="black" d="M123.1403,-65.1315C127.6523,-67.3402 133,-68.812 133,-75"/>
+<polygon fill="black" stroke="black" points="120.233,-67.0895 117,-57 125.8193,-62.8712 120.233,-67.0895"/>
+</g>
+<!-- table2&#45;&gt;table3 -->
+<g id="edge3" class="edge"><title>table2:ref-&gt;table3:data</title>
+<path fill="none" stroke="black" d="M117,-20.5656C117,2.6957 43.7375,5.56532 21.2401,-10.9567"/>
+<polygon fill="black" stroke="black" points="18.2098,-9.20375 16,-19.5656 24.1892,-12.8434 18.2098,-9.20375"/>
+</g>
+<!-- table3&#45;&gt;table0 -->
+<g id="edge4" class="edge"><title>table3:ref-&gt;table0:data</title>
+<path fill="none" stroke="black" d="M33.1409,-66.8685C37.6523,-64.6598 43,-63.188 43,-57"/>
+<polygon fill="black" stroke="black" points="30.233,-64.9105 27,-75 35.8193,-69.1288 30.233,-64.9105"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/2018-edition/src/img/trpl20-01.png b/src/doc/book/2018-edition/src/img/trpl20-01.png
new file mode 100644
index 000000000..19e2cbc0a
--- /dev/null
+++ b/src/doc/book/2018-edition/src/img/trpl20-01.png
Binary files differ
diff --git a/src/doc/book/2018-edition/src/theme/2018-edition.css b/src/doc/book/2018-edition/src/theme/2018-edition.css
new file mode 100644
index 000000000..b1dcf9364
--- /dev/null
+++ b/src/doc/book/2018-edition/src/theme/2018-edition.css
@@ -0,0 +1,9 @@
+span.caption {
+ font-size: .8em;
+ font-weight: 600;
+}
+
+span.caption code {
+ font-size: 0.875em;
+ font-weight: 400;
+}
diff --git a/src/doc/book/2018-edition/src/theme/index.hbs b/src/doc/book/2018-edition/src/theme/index.hbs
new file mode 100644
index 000000000..f3f1b52fa
--- /dev/null
+++ b/src/doc/book/2018-edition/src/theme/index.hbs
@@ -0,0 +1,37 @@
+<!DOCTYPE HTML>
+<html lang="{{ language }}" class="no-js">
+ <head>
+ <!-- Book generated using mdBook -->
+ <meta charset="UTF-8">
+ <title>Outdated link: {{ title }}</title>
+ <meta name="robots" content="noindex,follow">
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
+
+ <base href="{{ path_to_root }}">
+
+ <link rel="stylesheet" href="book.css">
+ <link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
+ <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">
+
+ <link rel="stylesheet" href="highlight.css">
+ <link rel="stylesheet" href="tomorrow-night.css">
+ <link rel="stylesheet" href="ayu-highlight.css">
+
+ <!-- Custom theme stylesheets -->
+ {{#each additional_css}}
+ <link rel="stylesheet" href="{{this}}">
+ {{/each}}
+ </head>
+ <body class="light">
+ <div id="page-wrapper" class="page-wrapper">
+ <div class="page">
+ {{> header}}
+ <div id="content" class="content">
+ <main>
+ {{{ content }}}
+ </main>
+ </div>
+ </div>
+ </div>
+ </body>
+</html>
diff --git a/src/doc/book/ADMIN_TASKS.md b/src/doc/book/ADMIN_TASKS.md
new file mode 100644
index 000000000..7c152577f
--- /dev/null
+++ b/src/doc/book/ADMIN_TASKS.md
@@ -0,0 +1,130 @@
+# Administrative Tasks
+
+This documentation is for anyone managing the repo to remember how to do
+occasional maintenance tasks.
+
+## Update the `rustc` version
+
+- Delete your `target` directory, you're about to recompile everything anyway
+- Change the version number in `.github/workflows/main.yml`
+- Change the version number in `rust-toolchain`, which should change the
+ version you're using locally with `rustup`
+- Change the version number in `src/title-page.md`
+- Run `./tools/update-rustc.sh` (see its commented code for details on what it
+ does)
+- Inspect the changes (by looking at the files changed according to git) and
+ their effects (by looking at the files in `tmp/book-before` and
+ `tmp/book-after`) and commit them if they look good
+- Grep for `manual-regeneration` and follow the instructions in those places to
+ update output that cannot be generated by a script
+
+## Update the `edition` in all listings
+
+To update the `edition = "[year]"` metadata in all the listings' `Cargo.toml`s,
+run the `./tools/update-editions.sh` script and commit the changes.
+
+## Release a new version of the listings
+
+We now make `.tar` files of complete projects containing every listing
+available [as GitHub Releases](https://github.com/rust-lang/book/releases). To
+create a new release artifact, for example if there have been code changes due
+to edits or due to updating Rust and `rustfmt`, do the following:
+
+- Create a git tag for the release and push it to GitHub, or create a new tag
+ by going to the GitHub UI, [drafting a new
+ release](https://github.com/rust-lang/book/releases/new), and entering a new
+ tag instead of selecting an existing tag
+- Run `cargo run --bin release_listings`, which will generate
+ `tmp/listings.tar.gz`
+- Upload `tmp/listings.tar.gz` in the GitHub UI for the draft release
+- Publish the release
+
+## Add a new listing
+
+To facilitate the scripts that run `rustfmt` on all the listings, update the
+output when the compiler is updated, and produce release artifacts containing
+full projects for the listings, any listing beyond the most trivial should be
+extracted into a file. To do that:
+
+- Find where the new listing should go in the `listings` directory.
+ - There is one subdirectory for each chapter
+ - Numbered listings should use `listing-[chapter num]-[listing num]` for
+ their directory names.
+ - Listings without a number should start with `no-listing-` followed by a
+ number that indicates its position in the chapter relative to the other
+ listings without numbers in the chapter, then a short description that
+ someone could read to find the code they're looking for.
+ - Listings used only for displaying the output of the code (for example, when
+ we say "if we had written x instead of y, we would get this compiler
+ error:" but we don't actually show code x) should be named with
+ `output-only-` followed by a number that indicates its position in the
+ chapter relative to the other listings used only for output, then a short
+ description that authors or contributors could read to find the code
+ they're looking for.
+ - **Remember to adjust surrounding listing numbers as appropriate!**
+- Create a full Cargo project in that directory, either by using `cargo new` or
+ copying another listing as a starting point.
+- Add the code and any surrounding code needed to create a full working example.
+- If you only want to show part of the code in the file, use anchor comments
+ (`// ANCHOR: some_tag` and `// ANCHOR_END: some_tag`) to mark the parts of
+ the file you want to show.
+- For Rust code, use the `{{#rustdoc_include [fileame:some_tag]}}` directive
+ within the code blocks in the text. The `rustdoc_include` directive gives the
+ code that doesn't get displayed to `rustdoc` for `mdbook test` purposes.
+- For anything else, use the `{{#include [filename:some_tag]}}` directive.
+- If you want to display the output of a command in the text as well, create an
+ `output.txt` file in the listing's directory as follows:
+ - Run the command, like `cargo run` or `cargo test`, and copy all of the
+ output.
+ - Create a new `output.txt` file with the first line `$ [the command you
+ ran]`.
+ - Paste the output you just copied.
+ - Run `./tools/update-rustc.sh`, which should perform some normalization on
+ the compiler output.
+ - Include the output in the text with the `{{#include [filename]}}` directive.
+ - Add and commit output.txt.
+- If you want to display output but for some reason it can't be generated by a
+ script (say, because of user input or external events like making a web
+ request), keep the output inline but make a comment that contains
+ `manual-regeneration` and instructions for manually updating the inline
+ output.
+- If you don't want this example to even be attempted to be formatted by
+ `rustfmt` (for example because the example doesn't parse on purpose), add a
+ `rustfmt-ignore` file in the listing's directory and the reason it's not
+ being formatted as the contents of that file (in case it's a rustfmt bug that
+ might get fixed someday).
+
+## See the effect of some change on the rendered book
+
+To check, say, updating `mdbook` or changing the way files get included:
+
+- Generate a built book before the change you want to test by running `mdbook
+ build -d tmp/book-before`
+- Apply the changes you want to test and run `mdbook build -d tmp/book-after`
+- Run `./tools/megadiff.sh`
+- Files remaining in `tmp/book-before` and `tmp/book-after` have differences
+ you can manually inspect with your favorite diff viewing mechanism
+
+## Produce new markdown files for No Starch
+
+- Run `./tools/nostarch.sh`
+- Spot check the files that script created in the `nostarch` directory
+- Check them into git if you're starting a round of edits
+
+## Produce markdown from docx for diffing
+
+- TODO Carol to document this next time she does it
+
+## Generate Graphviz dot
+
+We're using [Graphviz](http://graphviz.org/) for some of the diagrams in the
+book. The source for those files live in the `dot` directory. To turn a `dot`
+file, for example, `dot/trpl04-01.dot` into an `svg`, run:
+
+```bash
+$ dot dot/trpl04-01.dot -Tsvg > src/img/trpl04-01.svg
+```
+
+In the generated SVG, remove the width and the height attributes from the `svg`
+element and set the `viewBox` attribute to `0.00 0.00 1000.00 1000.00` or other
+values that don't cut off the image.
diff --git a/src/doc/book/CONTRIBUTING.md b/src/doc/book/CONTRIBUTING.md
new file mode 100644
index 000000000..3c9500687
--- /dev/null
+++ b/src/doc/book/CONTRIBUTING.md
@@ -0,0 +1,71 @@
+# Contributing
+
+We'd love your help! Thanks for caring about the book.
+
+## Where to Edit
+
+All edits should be made in the `src` directory.
+
+The `nostarch` directory contains snapshots for sending edits to the publishers
+of the print version. The snapshot files reflect what has been sent or not, so
+they only get updated when edits are sent to No Starch. **Do not submit pull
+requests changing files in the `nostarch` directory, they will be closed.**
+
+## Checking for Fixes
+
+The book rides the Rust release trains. Therefore, if you see a problem on
+https://doc.rust-lang.org/stable/book, it may already be fixed on the `main`
+branch in this repo, but the fix hasn't gone through nightly -> beta -> stable
+yet. Please check the `main` branch in this repo before reporting an issue.
+
+Looking at the history for a particular file can also give more information on
+how or whether an issue has been fixed or not if you're trying to figure that
+out.
+
+Please also search open and closed issues and open and closed PRs before
+reporting a new issue or opening a new PR.
+
+## Licensing
+
+This repository is under the same license as Rust itself, MIT/Apache2. You
+can find the full text of each license in the `LICENSE-*` files in this
+repository.
+
+## Code of Conduct
+
+The Rust project has [a code of conduct](http://rust-lang.org/policies/code-of-conduct)
+that governs all sub-projects, including this one. Please respect it!
+
+## Expectations
+
+Because the book is [printed](https://nostarch.com/rust), and because we want
+to keep the online version of the book close to the print version when
+possible, it may take longer than you're used to for us to address your issue
+or pull request.
+
+So far, we've been doing a larger revision to coincide with [Rust
+Editions](https://doc.rust-lang.org/edition-guide/). Between those larger
+revisions, we will only be correcting errors. If your issue or pull request
+isn't strictly fixing an error, it might sit until the next time that we're
+working on a large revision: expect on the order of months or years. Thank you
+for your patience!
+
+## Help wanted
+
+If you're looking for ways to help that don't involve large amounts of
+reading or writing, check out the [open issues with the E-help-wanted
+label][help-wanted]. These might be small fixes to the text, Rust code,
+frontend code, or shell scripts that would help us be more efficient or
+enhance the book in some way!
+
+[help-wanted]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3AE-help-wanted
+
+## Translations
+
+We'd love help translating the book! See the [Translations] label to join in
+efforts that are currently in progress. Open a new issue to start working on
+a new language! We're waiting on [mdbook support] for multiple languages
+before we merge any in, but feel free to start!
+
+[Translations]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3ATranslations
+[mdbook support]: https://github.com/rust-lang-nursery/mdBook/issues/5
diff --git a/src/doc/book/COPYRIGHT b/src/doc/book/COPYRIGHT
new file mode 100644
index 000000000..dfe614df9
--- /dev/null
+++ b/src/doc/book/COPYRIGHT
@@ -0,0 +1,290 @@
+Short version for non-lawyers:
+
+The Rust Project is dual-licensed under Apache 2.0 and MIT
+terms.
+
+
+Longer version:
+
+The Rust Project is copyright 2010, The Rust Project
+Developers.
+
+Licensed under the Apache License, Version 2.0
+<LICENSE-APACHE or
+https://www.apache.org/licenses/LICENSE-2.0> or the MIT
+license <LICENSE-MIT or https://opensource.org/licenses/MIT>,
+at your option. All files in the project carrying such
+notice may not be copied, modified, or distributed except
+according to those terms.
+
+
+The Rust Project includes packages written by third parties.
+The following third party packages are included, and carry
+their own copyright notices and license terms:
+
+* The src/rt/miniz.c file, carrying an implementation of
+ RFC1950/RFC1951 DEFLATE, by Rich Geldreich
+ <richgel99@gmail.com>. All uses of this file are
+ permitted by the embedded "unlicense" notice
+ (effectively: public domain with warranty disclaimer).
+
+* LLVM. Code for this package is found in src/llvm.
+
+ Copyright (c) 2003-2013 University of Illinois at
+ Urbana-Champaign. All rights reserved.
+
+ Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ https://llvm.org
+
+ Permission is hereby granted, free of charge, to any
+ person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal with the
+ Software without restriction, including without
+ limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following
+ conditions:
+
+ * Redistributions of source code must retain the
+ above copyright notice, this list of conditions
+ and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the
+ above copyright notice, this list of conditions
+ and the following disclaimers in the documentation
+ and/or other materials provided with the
+ distribution.
+
+ * Neither the names of the LLVM Team, University of
+ Illinois at Urbana-Champaign, nor the names of its
+ contributors may be used to endorse or promote
+ products derived from this Software without
+ specific prior written permission.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+ SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE
+ FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS WITH THE SOFTWARE.
+
+* Additional libraries included in LLVM carry separate
+ BSD-compatible licenses. See src/llvm/LICENSE.txt for
+ details.
+
+* compiler-rt, in src/compiler-rt is dual licensed under
+ LLVM's license and MIT:
+
+ Copyright (c) 2009-2014 by the contributors listed in
+ CREDITS.TXT
+
+ All rights reserved.
+
+ Developed by:
+
+ LLVM Team
+
+ University of Illinois at Urbana-Champaign
+
+ https://llvm.org
+
+ Permission is hereby granted, free of charge, to any
+ person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal with the
+ Software without restriction, including without
+ limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following
+ conditions:
+
+ * Redistributions of source code must retain the
+ above copyright notice, this list of conditions
+ and the following disclaimers.
+
+ * Redistributions in binary form must reproduce the
+ above copyright notice, this list of conditions
+ and the following disclaimers in the documentation
+ and/or other materials provided with the
+ distribution.
+
+ * Neither the names of the LLVM Team, University of
+ Illinois at Urbana-Champaign, nor the names of its
+ contributors may be used to endorse or promote
+ products derived from this Software without
+ specific prior written permission.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+ SHALL THE CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE
+ FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+ OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS WITH THE SOFTWARE.
+
+ ========================================================
+
+ Copyright (c) 2009-2014 by the contributors listed in
+ CREDITS.TXT
+
+ Permission is hereby granted, free of charge, to any
+ person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal in the
+ Software without restriction, including without
+ limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following
+ conditions:
+
+ The above copyright notice and this permission notice
+ shall be included in all copies or substantial portions
+ of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+
+* Portions of the FFI code for interacting with the native ABI
+ is derived from the Clay programming language, which carries
+ the following license.
+
+ Copyright (C) 2008-2010 Tachyon Technologies.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with
+ or without modification, are permitted provided that the
+ following conditions are met:
+
+ 1. Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the
+ above copyright notice, this list of conditions and
+ the following disclaimer in the documentation and/or
+ other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ DEVELOPERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGE.
+
+* libbacktrace, under src/libbacktrace:
+
+ Copyright (C) 2012-2014 Free Software Foundation, Inc.
+ Written by Ian Lance Taylor, Google.
+
+ Redistribution and use in source and binary forms, with
+ or without modification, are permitted provided that the
+ following conditions are met:
+
+ (1) Redistributions of source code must retain the
+ above copyright notice, this list of conditions and
+ the following disclaimer.
+
+ (2) Redistributions in binary form must reproduce
+ the above copyright notice, this list of conditions
+ and the following disclaimer in the documentation
+ and/or other materials provided with the
+ distribution.
+
+ (3) The name of the author may not be used to
+ endorse or promote products derived from this
+ software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGE. */
+
+* jemalloc, under src/jemalloc:
+
+ Copyright (C) 2002-2014 Jason Evans
+ <jasone@canonware.com>. All rights reserved.
+ Copyright (C) 2007-2012 Mozilla Foundation.
+ All rights reserved.
+ Copyright (C) 2009-2014 Facebook, Inc.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ 1. Redistributions of source code must retain the above copyright notice(s),
+ this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice(s),
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S)
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S)
+ BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
+ OF SUCH DAMAGE.
+
+* Additional copyright may be retained by contributors other
+ than Mozilla, the Rust Project Developers, or the parties
+ enumerated in this file. Such copyright can be determined
+ on a case-by-case basis by examining the author of each
+ portion of a file in the revision-control commit records
+ of the project, or by consulting representative comments
+ claiming copyright ownership for a file.
+
+ For example, the text:
+
+ "Copyright (c) 2011 Google Inc."
+
+ appears in some files, and these files thereby denote
+ that their author and copyright-holder is Google Inc.
+
+ In all such cases, the absence of explicit licensing text
+ indicates that the contributor chose to license their work
+ for distribution under identical terms to those Mozilla
+ has chosen for the collective work, enumerated at the top
+ of this file. The only difference is the retention of
+ copyright itself, held by the contributor.
diff --git a/src/doc/book/Cargo.lock b/src/doc/book/Cargo.lock
new file mode 100644
index 000000000..d0bbf7586
--- /dev/null
+++ b/src/doc/book/Cargo.lock
@@ -0,0 +1,271 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "adler"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "crc32fast"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "docopt"
+version = "1.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f"
+dependencies = [
+ "lazy_static",
+ "regex",
+ "serde",
+ "strsim",
+]
+
+[[package]]
+name = "filetime"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c0408e2626025178a6a7f7ffc05a25bc47103229f19c113755de7bf63816290c"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "redox_syscall",
+ "winapi",
+]
+
+[[package]]
+name = "flate2"
+version = "1.0.24"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f82b0f4c27ad9f8bfd1f3208d882da2b09c301bc1c828fd3a00d0216d2fbbff6"
+dependencies = [
+ "crc32fast",
+ "miniz_oxide",
+]
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+
+[[package]]
+name = "libc"
+version = "0.2.126"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "349d5a591cd28b49e1d1037471617a32ddcda5731b99419008085f72d5a53836"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "miniz_oxide"
+version = "0.5.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f5c75688da582b8ffc1f1799e9db273f32133c49e048f614d22ec3256773ccc"
+dependencies = [
+ "adler",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.39"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c54b25569025b7fc9651de43004ae593a75ad88543b17178aa5e1b9c4f15f56f"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.2.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d83f127d94bdbcda4c8cc2e50f6f84f4b611f69c902699ca385a39c3a75f9ff1"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+
+[[package]]
+name = "rust-book"
+version = "0.0.1"
+dependencies = [
+ "docopt",
+ "flate2",
+ "lazy_static",
+ "regex",
+ "serde",
+ "tar",
+ "walkdir",
+]
+
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "serde"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "61ea8d54c77f8315140a05f4c7237403bf38b72704d031543aa1d16abbf517d1"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.137"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1f26faba0c3959972377d3b2d306ee9f71faee9714294e41bb777f83f88578be"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "syn"
+version = "1.0.96"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0748dd251e24453cb8717f0354206b91557e4ec8703673a4b30208f2abaf1ebf"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tar"
+version = "0.4.38"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b55807c0344e1e6c04d7c965f5289c39a8d94ae23ed5c0b57aabac549f871c6"
+dependencies = [
+ "filetime",
+ "libc",
+ "xattr",
+]
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d22af068fba1eb5edcb4aea19d382b2a3deb4c8f9d475c589b6ada9e0fd493ee"
+
+[[package]]
+name = "walkdir"
+version = "2.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
+dependencies = [
+ "same-file",
+ "winapi",
+ "winapi-util",
+]
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "xattr"
+version = "0.2.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+dependencies = [
+ "libc",
+]
diff --git a/src/doc/book/Cargo.toml b/src/doc/book/Cargo.toml
new file mode 100644
index 000000000..c59425f92
--- /dev/null
+++ b/src/doc/book/Cargo.toml
@@ -0,0 +1,46 @@
+[package]
+name = "rust-book"
+version = "0.0.1"
+description = "The Rust Book"
+edition = "2018"
+
+[[bin]]
+name = "concat_chapters"
+path = "tools/src/bin/concat_chapters.rs"
+
+[[bin]]
+name = "convert_quotes"
+path = "tools/src/bin/convert_quotes.rs"
+
+[[bin]]
+name = "lfp"
+path = "tools/src/bin/lfp.rs"
+
+[[bin]]
+name = "link2print"
+path = "tools/src/bin/link2print.rs"
+
+[[bin]]
+name = "release_listings"
+path = "tools/src/bin/release_listings.rs"
+
+[[bin]]
+name = "remove_hidden_lines"
+path = "tools/src/bin/remove_hidden_lines.rs"
+
+[[bin]]
+name = "remove_links"
+path = "tools/src/bin/remove_links.rs"
+
+[[bin]]
+name = "remove_markup"
+path = "tools/src/bin/remove_markup.rs"
+
+[dependencies]
+walkdir = "2.3.1"
+docopt = "1.1.0"
+serde = "1.0"
+regex = "1.3.3"
+lazy_static = "1.4.0"
+flate2 = "1.0.13"
+tar = "0.4.26"
diff --git a/src/doc/book/LICENSE-APACHE b/src/doc/book/LICENSE-APACHE
new file mode 100644
index 000000000..16fe87b06
--- /dev/null
+++ b/src/doc/book/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/doc/book/LICENSE-MIT b/src/doc/book/LICENSE-MIT
new file mode 100644
index 000000000..25597d583
--- /dev/null
+++ b/src/doc/book/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2010 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/src/doc/book/README.md b/src/doc/book/README.md
new file mode 100644
index 000000000..91c64ce25
--- /dev/null
+++ b/src/doc/book/README.md
@@ -0,0 +1,105 @@
+# The Rust Programming Language
+
+![Build Status](https://github.com/rust-lang/book/workflows/CI/badge.svg)
+
+This repository contains the source of "The Rust Programming Language" book.
+
+[The book is available in dead-tree form from No Starch Press][nostarch].
+
+[nostarch]: https://nostarch.com/rust
+
+You can also read the book for free online. Please see the book as shipped with
+the latest [stable], [beta], or [nightly] Rust releases. Be aware that issues
+in those versions may have been fixed in this repository already, as those
+releases are updated less frequently.
+
+[stable]: https://doc.rust-lang.org/stable/book/
+[beta]: https://doc.rust-lang.org/beta/book/
+[nightly]: https://doc.rust-lang.org/nightly/book/
+
+See the [releases] to download just the code of all the code listings that appear in the book.
+
+[releases]: https://github.com/rust-lang/book/releases
+
+## Requirements
+
+Building the book requires [mdBook], ideally the same version that
+rust-lang/rust uses in [this file][rust-mdbook]. To get it:
+
+[mdBook]: https://github.com/rust-lang-nursery/mdBook
+[rust-mdbook]: https://github.com/rust-lang/rust/blob/master/src/tools/rustbook/Cargo.toml
+
+```bash
+$ cargo install mdbook --vers [version-num]
+```
+
+## Building
+
+To build the book, type:
+
+```bash
+$ mdbook build
+```
+
+The output will be in the `book` subdirectory. To check it out, open it in
+your web browser.
+
+_Firefox:_
+```bash
+$ firefox book/index.html # Linux
+$ open -a "Firefox" book/index.html # OS X
+$ Start-Process "firefox.exe" .\book\index.html # Windows (PowerShell)
+$ start firefox.exe .\book\index.html # Windows (Cmd)
+```
+
+_Chrome:_
+```bash
+$ google-chrome book/index.html # Linux
+$ open -a "Google Chrome" book/index.html # OS X
+$ Start-Process "chrome.exe" .\book\index.html # Windows (PowerShell)
+$ start chrome.exe .\book\index.html # Windows (Cmd)
+```
+
+To run the tests:
+
+```bash
+$ mdbook test
+```
+
+## Contributing
+
+We'd love your help! Please see [CONTRIBUTING.md][contrib] to learn about the
+kinds of contributions we're looking for.
+
+[contrib]: https://github.com/rust-lang/book/blob/main/CONTRIBUTING.md
+
+Because the book is [printed](https://nostarch.com/rust), and because we want
+to keep the online version of the book close to the print version when
+possible, it may take longer than you're used to for us to address your issue
+or pull request.
+
+So far, we've been doing a larger revision to coincide with [Rust
+Editions](https://doc.rust-lang.org/edition-guide/). Between those larger
+revisions, we will only be correcting errors. If your issue or pull request
+isn't strictly fixing an error, it might sit until the next time that we're
+working on a large revision: expect on the order of months or years. Thank you
+for your patience!
+
+### Translations
+
+We'd love help translating the book! See the [Translations] label to join in
+efforts that are currently in progress. Open a new issue to start working on
+a new language! We're waiting on [mdbook support] for multiple languages
+before we merge any in, but feel free to start!
+
+[Translations]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3ATranslations
+[mdbook support]: https://github.com/rust-lang-nursery/mdBook/issues/5
+
+## Spellchecking
+
+To scan source files for spelling errors, you can use the `spellcheck.sh`
+script available in the `ci` directory. It needs a dictionary of valid words,
+which is provided in `ci/dictionary.txt`. If the script produces a false
+positive (say, you used word `BTreeMap` which the script considers invalid),
+you need to add this word to `ci/dictionary.txt` (keep the sorted order for
+consistency).
diff --git a/src/doc/book/book.toml b/src/doc/book/book.toml
new file mode 100644
index 000000000..31419fde8
--- /dev/null
+++ b/src/doc/book/book.toml
@@ -0,0 +1,8 @@
+[book]
+title = "The Rust Programming Language"
+authors = ["Steve Klabnik", "Carol Nichols", "Contributions from the Rust Community"]
+
+[output.html]
+additional-css = ["ferris.css", "theme/2018-edition.css"]
+additional-js = ["ferris.js"]
+git-repository-url = "https://github.com/rust-lang/book"
diff --git a/src/doc/book/ci/dictionary.txt b/src/doc/book/ci/dictionary.txt
new file mode 100644
index 000000000..3fe25ff52
--- /dev/null
+++ b/src/doc/book/ci/dictionary.txt
@@ -0,0 +1,585 @@
+personal_ws-1.1 en 0 utf-8
+abcabcabc
+abcd
+abcdefghijklmnopqrstuvwxyz
+adaptor
+adaptors
+AddAssign
+Addr
+adfb
+afdc
+aggregator
+AGraph
+aliasability
+alignof
+alloc
+allocator
+AlwaysEqual
+Amir
+anotherusername
+APIs
+app's
+aren
+args
+ArgumentV
+associativity
+async
+atomics
+attr
+autocompletion
+AveragedCollection
+backend
+backported
+backtrace
+backtraces
+BACKTRACE
+Backtraces
+Baz's
+benchmarking
+bioinformatics
+bitand
+BitAnd
+BitAndAssign
+bitor
+BitOr
+BitOrAssign
+bitwise
+Bitwise
+bitxor
+BitXor
+BitXorAssign
+Bjarne
+Boehm
+bool
+boolean
+Boolean
+Booleans
+Bors
+BorrowMutError
+BoxMeUp
+BTreeSet
+BufRead
+BufReader
+BuildHasher
+Cacher
+cacher
+Cagain
+callsite
+CamelCase
+cargodoc
+centric
+chacha
+ChangeColor
+ChangeColorMessage
+charset
+choo
+chXX
+chYY
+clippy
+clippy's
+cmdlet
+coercions
+combinator
+ConcreteType
+config
+Config
+confignew
+const
+consts
+constant's
+copyeditor
+couldn
+CPUs
+cratesio
+CRLF
+cryptocurrencies
+cryptographic
+cryptographically
+CStr
+CString
+ctrl
+Ctrl
+customizable
+CustomSmartPointer
+CustomSmartPointers
+data's
+DataStruct
+deallocate
+deallocated
+deallocating
+deallocation
+debuginfo
+decl
+decrementing
+deduplicate
+deduplicating
+deps
+deref
+Deref
+dereference
+Dereference
+dereferenced
+dereferences
+dereferencing
+DerefMut
+DeriveInput
+Dest
+destructor
+destructure
+destructured
+destructures
+destructuring
+Destructuring
+deterministically
+DevOps
+devtools
+didn
+Dobrý
+doccargo
+doccratesio
+DOCTYPE
+doesn
+disambiguating
+DisplayBacktrace
+DivAssign
+DraftPost
+DSTs
+ebook
+ebooks
+Edsger
+egular
+else's
+emoji
+encodings
+enum
+Enum
+enums
+enum's
+Enums
+eprintln
+Erlang
+ErrorKind
+eval
+executables
+ExitCode
+expr
+extern
+favicon
+ferris
+FFFD
+FFFF
+figcaption
+fieldname
+filename
+Filename
+filesystem
+Filesystem
+filesystem's
+filesystems
+filmmaking
+Firefox
+FnMut
+FnOnce
+formatter
+formatters
+FrenchToast
+FromIterator
+FromResidual
+frontend
+getrandom
+getter
+getters
+GGraph
+GitHub
+gitignore
+grapheme
+Grapheme
+growable
+gzip
+hardcode
+hardcoded
+hardcoding
+hasher
+hashers
+HashMap
+HashSet
+Haskell
+hasn
+HeadB
+HeadC
+HelloMacro
+helloworld
+HelloWorld
+HelloWorldName
+Hmmm
+Hoare
+Hola
+homogenous
+html
+http
+https
+hyperoptimize
+hypotheticals
+Iceburgh
+ident
+IDE
+IDEs
+IDE's
+IEEE
+impl
+implementor
+implementors
+ImportantExcerpt
+incrementing
+IndexMut
+indices
+init
+initializer
+initializers
+inline
+instantiation
+internet
+interoperate
+IntoIterator
+InvalidDigit
+invariants
+ioerror
+iokind
+ioresult
+IoResult
+iostdin
+IpAddr
+IpAddrKind
+irst
+isize
+iter
+iterator's
+JavaScript
+JoinHandle
+Kay's
+kinded
+Klabnik
+lang
+LastWriteTime
+latin
+liballoc
+libc
+libcollections
+libcore
+libpanic
+librarys
+libreoffice
+libstd
+libunwind
+lifecycle
+LimitTracker
+linter
+LLVM
+lobally
+locators
+LockResult
+login
+lookup
+loopback
+lossy
+Lukas
+lval
+macOS
+Matsakis
+mathematic
+memoization
+metadata
+Metadata
+metaprogramming
+mibbit
+Mibbit
+millis
+minigrep
+mixup
+mkdir
+MockMessenger
+modifiability
+modularity
+monomorphization
+Monomorphization
+monomorphized
+MoveMessage
+Mozilla
+mpsc
+msvc
+MulAssign
+multibyte
+multithreaded
+mutex
+mutex's
+Mutex
+mutexes
+Mutexes
+MutexGuard
+mutext
+MyBox
+myprogram
+namespace
+namespaced
+namespaces
+namespacing
+natively
+newfound
+NewJob
+NewsArticle
+NewThread
+newtype
+newtypes
+nitty
+nocapture
+nomicon
+nonadministrators
+nondeterministic
+nonequality
+nongeneric
+noplayground
+NotFound
+nsprust
+null's
+OCaml
+offsetof
+online
+OpenGL
+optimizations
+OptionalFloatingPointNumber
+OptionalNumber
+OsStr
+OsString
+other's
+otherinstall
+OtherError
+OurError
+OutlinePrint
+overloadable
+overread
+PanicPayload
+param
+parameterize
+ParseIntError
+PartialEq
+PartialOrd
+pbcopy
+PendingReview
+PendingReviewPost
+PlaceholderType
+polymorphism
+PoolCreationError
+portia
+powershell
+PowerShell
+powi
+preallocate
+preallocates
+preprocessing
+Preprocessing
+preprocessor
+PrimaryColor
+println
+priv
+proc
+proto
+pseudocode
+pthreads
+pushups
+QuitMessage
+quux
+RAII
+randcrate
+RangeFrom
+RangeTo
+RangeFull
+README
+READMEs
+rect
+recurse
+recv
+redeclaring
+Refactoring
+refactor
+refactoring
+refcell
+RefCell
+refcellt
+RefMut
+reformats
+refutability
+reimplement
+RemAssign
+repr
+representable
+request's
+resizes
+resizing
+ReturnedError
+retweet
+rewordings
+rint
+ripgrep
+runnable
+runtime
+runtimes
+Rustacean
+Rustaceans
+rUsT
+rustc
+rustdoc
+Rustonomicon
+rustfix
+rustfmt
+rustup
+sampleproject
+screenshot
+searchstring
+SecondaryColor
+SelectBox
+semver
+SemVer
+serde
+ShirtColor
+ShlAssign
+ShrAssign
+shouldn
+Simula
+siphash
+SipHash
+situps
+sizeof
+SliceIndex
+Smalltalk
+snuck
+someproject
+someusername
+SPDX
+spdx
+SpreadsheetCell
+sqrt
+stackoverflow
+startup
+StaticRef
+stderr
+stdin
+Stdin
+stdlib
+stdout
+steveklabnik's
+stringify
+Stroustrup
+Stroustrup's
+struct
+Struct
+structs
+struct's
+Structs
+StrWrap
+SubAssign
+subclasses
+subcommand
+subcommands
+subdirectories
+subdirectory
+submodule
+submodules
+Submodules
+submodule’s
+suboptimal
+subpath
+substring
+subteams
+subtree
+subtyping
+summarizable
+supertrait
+supertraits
+TcpListener
+TcpStream
+templating
+test's
+TextField
+That'd
+there'd
+ThreadPool
+threadpool
+timestamp
+Tiếng
+timeline
+tlborm
+tlsv
+TODO
+TokenStream
+toml
+TOML
+toolchain
+toolchains
+ToString
+tradeoff
+tradeoffs
+TrafficLight
+transcoding
+trpl
+tuesday
+tuple
+tuples
+turbofish
+Turon
+typeof
+TypeName
+UFCS
+unary
+Unary
+uncomment
+Uncomment
+uncommenting
+unevaluated
+Uninstalling
+uninstall
+unix
+unpopulated
+unoptimized
+UnsafeCell
+unsafety
+unsized
+unsynchronized
+Unyank
+URIs
+UsefulType
+username
+USERPROFILE
+usize
+UsState
+utils
+vals
+variable's
+variant's
+vers
+versa
+vert
+Versioning
+visualstudio
+Vlissides
+vscode
+vtable
+waitlist
+wasn
+weakt
+WeatherForecast
+WebSocket
+whitespace
+wildcard
+wildcards
+Wirth
+workflow
+workspace
+workspaces
+Workspaces
+wouldn
+writeln
+WriteMessage
+xcode
+xpression
+yyyy
+ZipImpl
diff --git a/src/doc/book/ci/spellcheck.sh b/src/doc/book/ci/spellcheck.sh
new file mode 100755
index 000000000..3d61e76a5
--- /dev/null
+++ b/src/doc/book/ci/spellcheck.sh
@@ -0,0 +1,101 @@
+#!/bin/bash
+
+set -eu
+
+aspell --version
+
+# Checks project Markdown files for spelling mistakes.
+
+# Notes:
+
+# This script needs dictionary file ($dict_filename) with project-specific
+# valid words. If this file is missing, first invocation of a script generates
+# a file of words considered typos at the moment. User should remove real typos
+# from this file and leave only valid words. When script generates false
+# positive after source modification, new valid word should be added
+# to dictionary file.
+
+# Default mode of this script is interactive. Each source file is scanned for
+# typos. aspell opens window, suggesting fixes for each found typo. Original
+# files with errors will be backed up to files with format "filename.md.bak".
+
+# When running in CI, this script should be run in "list" mode (pass "list"
+# as first argument). In this mode script scans all files and reports found
+# errors. Exit code in this case depends on scan result:
+# 1 if any errors found,
+# 0 if all is clear.
+
+# Script skips words with length less than or equal to 3. This helps to avoid
+# some false positives.
+
+# We can consider skipping source code in markdown files (```code```) to reduce
+# rate of false positives, but then we lose ability to detect typos in code
+# comments/strings etc.
+
+shopt -s nullglob
+
+dict_filename=./ci/dictionary.txt
+markdown_sources=(./src/*.md)
+mode="check"
+
+# aspell repeatedly modifies the personal dictionary for some reason,
+# so we should use a copy of our dictionary.
+dict_path="/tmp/dictionary.txt"
+
+if [[ "$1" == "list" ]]; then
+ mode="list"
+fi
+
+# Error if running in list (CI) mode and there isn't a dictionary file;
+# creating one in CI won't do any good :(
+if [[ "$mode" == "list" && ! -f "$dict_filename" ]]; then
+ echo "No dictionary file found! A dictionary file is required in CI!"
+ exit 1
+fi
+
+if [[ ! -f "$dict_filename" ]]; then
+ # Pre-check mode: generates dictionary of words aspell consider typos.
+ # After user validates that this file contains only valid words, we can
+ # look for typos using this dictionary and some default aspell dictionary.
+ echo "Scanning files to generate dictionary file '$dict_filename'."
+ echo "Please check that it doesn't contain any misspellings."
+
+ echo "personal_ws-1.1 en 0 utf-8" > "$dict_filename"
+ cat "${markdown_sources[@]}" | aspell --ignore 3 list | sort -u >> "$dict_filename"
+elif [[ "$mode" == "list" ]]; then
+ # List (default) mode: scan all files, report errors.
+ declare -i retval=0
+
+ cp "$dict_filename" "$dict_path"
+
+ if [ ! -f $dict_path ]; then
+ retval=1
+ exit "$retval"
+ fi
+
+ for fname in "${markdown_sources[@]}"; do
+ command=$(aspell --ignore 3 --personal="$dict_path" "$mode" < "$fname")
+ if [[ -n "$command" ]]; then
+ for error in $command; do
+ # FIXME: find more correct way to get line number
+ # (ideally from aspell). Now it can make some false positives,
+ # because it is just a grep.
+ grep --with-filename --line-number --color=always "$error" "$fname"
+ done
+ retval=1
+ fi
+ done
+ exit "$retval"
+elif [[ "$mode" == "check" ]]; then
+ # Interactive mode: fix typos.
+ cp "$dict_filename" "$dict_path"
+
+ if [ ! -f $dict_path ]; then
+ retval=1
+ exit "$retval"
+ fi
+
+ for fname in "${markdown_sources[@]}"; do
+ aspell --ignore 3 --dont-backup --personal="$dict_path" "$mode" "$fname"
+ done
+fi
diff --git a/src/doc/book/ci/validate.sh b/src/doc/book/ci/validate.sh
new file mode 100755
index 000000000..9d65bc161
--- /dev/null
+++ b/src/doc/book/ci/validate.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+set -eu
+
+for file in src/*.md ; do
+ echo Checking references in "$file"
+ cargo run --quiet --bin link2print < "$file" > /dev/null
+done \ No newline at end of file
diff --git a/src/doc/book/dot/trpl04-01.dot b/src/doc/book/dot/trpl04-01.dot
new file mode 100644
index 000000000..331d59133
--- /dev/null
+++ b/src/doc/book/dot/trpl04-01.dot
@@ -0,0 +1,26 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/dot/trpl04-02.dot b/src/doc/book/dot/trpl04-02.dot
new file mode 100644
index 000000000..e46d2ed4a
--- /dev/null
+++ b/src/doc/book/dot/trpl04-02.dot
@@ -0,0 +1,35 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/dot/trpl04-03.dot b/src/doc/book/dot/trpl04-03.dot
new file mode 100644
index 000000000..16c0b2860
--- /dev/null
+++ b/src/doc/book/dot/trpl04-03.dot
@@ -0,0 +1,44 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table4:pointee;
+}
+
diff --git a/src/doc/book/dot/trpl04-04.dot b/src/doc/book/dot/trpl04-04.dot
new file mode 100644
index 000000000..1c95c231c
--- /dev/null
+++ b/src/doc/book/dot/trpl04-04.dot
@@ -0,0 +1,35 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="gray">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/dot/trpl04-05.dot b/src/doc/book/dot/trpl04-05.dot
new file mode 100644
index 000000000..ca1f7e06e
--- /dev/null
+++ b/src/doc/book/dot/trpl04-05.dot
@@ -0,0 +1,32 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="borrower"></TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD PORT="borrowee">ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table1:pointer:c -> table2:pointee;
+ table0:borrower:c -> table1:borrowee;
+}
+
diff --git a/src/doc/book/dot/trpl04-06.dot b/src/doc/book/dot/trpl04-06.dot
new file mode 100644
index 000000000..a23f179a7
--- /dev/null
+++ b/src/doc/book/dot/trpl04-06.dot
@@ -0,0 +1,41 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">world</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer2"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>11</TD></TR>
+ <TR><TD>capacity</TD><TD>11</TD></TR>
+ </TABLE>>];
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ <TR><TD>5</TD><TD> </TD></TR>
+ <TR><TD PORT="pointee2">6</TD><TD>w</TD></TR>
+ <TR><TD>7</TD><TD>o</TD></TR>
+ <TR><TD>8</TD><TD>r</TD></TR>
+ <TR><TD>9</TD><TD>l</TD></TR>
+ <TR><TD>10</TD><TD>d</TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:pointer2:c -> table4:pointee2;
+ table3:pointer:c -> table4:pointee;
+}
+
diff --git a/src/doc/book/dot/trpl15-01.dot b/src/doc/book/dot/trpl15-01.dot
new file mode 100644
index 000000000..e8b95f9a3
--- /dev/null
+++ b/src/doc/book/dot/trpl15-01.dot
@@ -0,0 +1,24 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD>∞</TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE>>];
+}
+
diff --git a/src/doc/book/dot/trpl15-02.dot b/src/doc/book/dot/trpl15-02.dot
new file mode 100644
index 000000000..f7dfd22c9
--- /dev/null
+++ b/src/doc/book/dot/trpl15-02.dot
@@ -0,0 +1,18 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">Box</TD></TR>
+ <TR><TD>usize</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>];
+}
+
diff --git a/src/doc/book/dot/trpl15-03.dot b/src/doc/book/dot/trpl15-03.dot
new file mode 100644
index 000000000..16f026814
--- /dev/null
+++ b/src/doc/book/dot/trpl15-03.dot
@@ -0,0 +1,51 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">b</TD><TD SIDES="B" PORT="ptr4"></TD></TR>
+ </TABLE>>];
+
+ table5[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte4">3</TD><TD PORT="ptr5"> </TD></TR>
+ </TABLE>>];
+
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">a</TD><TD SIDES="B" PORT="ptr0"></TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte0">5</TD><TD PORT="ptr1"> </TD></TR>
+ </TABLE>>];
+
+ table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte1">10</TD><TD PORT="ptr2"> </TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte2">Nil</TD></TR>
+ </TABLE>>];
+
+
+ table6[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">c</TD><TD SIDES="B" PORT="ptr6"></TD></TR>
+ </TABLE>>];
+
+ table7[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte6">4</TD><TD PORT="ptr7"> </TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:ptr0:c -> table1:pte0;
+ table1:ptr1:c -> table2:pte1;
+ table2:ptr2:c -> table3:pte2;
+ table4:ptr4:c -> table5:pte4;
+ table5:ptr5:c -> table1:pte0;
+ table6:ptr6:c -> table7:pte6;
+ table7:ptr7:c -> table1:pte0;
+}
+
diff --git a/src/doc/book/dot/trpl15-04.dot b/src/doc/book/dot/trpl15-04.dot
new file mode 100644
index 000000000..562543cb6
--- /dev/null
+++ b/src/doc/book/dot/trpl15-04.dot
@@ -0,0 +1,16 @@
+digraph {
+ node[shape=record];
+ rankdir=LR;
+
+ l1[label="{<data> 5| <next>}"];
+ l2[label="{<data> 10| <next>}"];
+
+ {node[shape=point height=0] invisible_start invisible_end}
+
+ a -> l1:n;
+ b -> l2:n;
+ invisible_start:n -> l1[arrowtail=none];
+ invisible_start:s -> invisible_end:s[dir=none];
+ l1:next:c -> l2:data;
+ l2:next:c -> invisible_end:n[arrowhead=none];
+}
diff --git a/src/doc/book/ferris.css b/src/doc/book/ferris.css
new file mode 100644
index 000000000..fb4a553ff
--- /dev/null
+++ b/src/doc/book/ferris.css
@@ -0,0 +1,45 @@
+body.light .does_not_compile,
+body.light .panics,
+body.light .not_desired_behavior,
+body.rust .does_not_compile,
+body.rust .panics,
+body.rust .not_desired_behavior {
+ background: #fff1f1;
+}
+
+body.coal .does_not_compile,
+body.coal .panics,
+body.coal .not_desired_behavior,
+body.navy .does_not_compile,
+body.navy .panics,
+body.navy .not_desired_behavior,
+body.ayu .does_not_compile,
+body.ayu .panics,
+body.ayu .not_desired_behavior {
+ background: #501f21;
+}
+
+.ferris-container {
+ position: absolute;
+ z-index: 99;
+ right: 5px;
+ top: 30px;
+}
+
+.ferris {
+ vertical-align: top;
+ margin-left: 0.2em;
+ height: auto;
+}
+
+.ferris-large {
+ width: 4.5em;
+}
+
+.ferris-small {
+ width: 2.3em;
+}
+
+.ferris-explain {
+ width: 100px;
+}
diff --git a/src/doc/book/ferris.js b/src/doc/book/ferris.js
new file mode 100644
index 000000000..bb601a4e2
--- /dev/null
+++ b/src/doc/book/ferris.js
@@ -0,0 +1,65 @@
+var ferrisTypes = [
+ {
+ attr: 'does_not_compile',
+ title: 'This code does not compile!'
+ },
+ {
+ attr: 'panics',
+ title: 'This code panics!'
+ },
+ {
+ attr: 'not_desired_behavior',
+ title: 'This code does not produce the desired behavior.'
+ }
+]
+
+document.addEventListener('DOMContentLoaded', () => {
+ for (var ferrisType of ferrisTypes) {
+ attachFerrises(ferrisType)
+ }
+})
+
+function attachFerrises(type) {
+ var elements = document.getElementsByClassName(type.attr)
+
+ for (var codeBlock of elements) {
+ var lines = codeBlock.innerText.replace(/\n$/, '').split(/\n/).length
+ var size = 'large'
+ if (lines < 4) {
+ size = 'small'
+ }
+
+ var container = prepareFerrisContainer(codeBlock, size == 'small')
+ container.appendChild(createFerris(type, size))
+ }
+}
+
+function prepareFerrisContainer(element, useButtons) {
+ var foundButtons = element.parentElement.querySelector('.buttons')
+ if (useButtons && foundButtons) {
+ return foundButtons
+ }
+
+ var div = document.createElement('div')
+ div.classList.add('ferris-container')
+
+ element.parentElement.insertBefore(div, element)
+
+ return div
+}
+
+function createFerris(type, size) {
+ var a = document.createElement('a')
+ a.setAttribute('href', 'ch00-00-introduction.html#ferris')
+ a.setAttribute('target', '_blank')
+
+ var img = document.createElement('img')
+ img.setAttribute('src', 'img/ferris/' + type.attr + '.svg')
+ img.setAttribute('title', type.title)
+ img.classList.add('ferris')
+ img.classList.add('ferris-' + size)
+
+ a.appendChild(img)
+
+ return a
+}
diff --git a/src/doc/book/first-edition/book.toml b/src/doc/book/first-edition/book.toml
new file mode 100644
index 000000000..3a3189c4d
--- /dev/null
+++ b/src/doc/book/first-edition/book.toml
@@ -0,0 +1,3 @@
+[book]
+title = "The Rust Programming Language"
+author = "The Rust Project Developers"
diff --git a/src/doc/book/first-edition/src/README.md b/src/doc/book/first-edition/src/README.md
new file mode 100644
index 000000000..31babb298
--- /dev/null
+++ b/src/doc/book/first-edition/src/README.md
@@ -0,0 +1,10 @@
+# The Rust Programming Language
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/README.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/SUMMARY.md b/src/doc/book/first-edition/src/SUMMARY.md
new file mode 100644
index 000000000..c3763cdf9
--- /dev/null
+++ b/src/doc/book/first-edition/src/SUMMARY.md
@@ -0,0 +1,60 @@
+# Summary
+
+[Introduction](README.md)
+
+* [Getting Started](getting-started.md)
+* [Tutorial: Guessing Game](guessing-game.md)
+* [Syntax and Semantics](syntax-and-semantics.md)
+ * [Variable Bindings](variable-bindings.md)
+ * [Functions](functions.md)
+ * [Primitive Types](primitive-types.md)
+ * [Comments](comments.md)
+ * [if](if.md)
+ * [Loops](loops.md)
+ * [Vectors](vectors.md)
+ * [Ownership](ownership.md)
+ * [References and Borrowing](references-and-borrowing.md)
+ * [Lifetimes](lifetimes.md)
+ * [Mutability](mutability.md)
+ * [Structs](structs.md)
+ * [Enums](enums.md)
+ * [Match](match.md)
+ * [Patterns](patterns.md)
+ * [Method Syntax](method-syntax.md)
+ * [Strings](strings.md)
+ * [Generics](generics.md)
+ * [Traits](traits.md)
+ * [Drop](drop.md)
+ * [if let](if-let.md)
+ * [Trait Objects](trait-objects.md)
+ * [Closures](closures.md)
+ * [Universal Function Call Syntax](ufcs.md)
+ * [Crates and Modules](crates-and-modules.md)
+ * [`const` and `static`](const-and-static.md)
+ * [Attributes](attributes.md)
+ * [`type` aliases](type-aliases.md)
+ * [Casting between types](casting-between-types.md)
+ * [Associated Types](associated-types.md)
+ * [Unsized Types](unsized-types.md)
+ * [Operators and Overloading](operators-and-overloading.md)
+ * [Deref coercions](deref-coercions.md)
+ * [Macros](macros.md)
+ * [Raw Pointers](raw-pointers.md)
+ * [`unsafe`](unsafe.md)
+* [Effective Rust](effective-rust.md)
+ * [The Stack and the Heap](the-stack-and-the-heap.md)
+ * [Testing](testing.md)
+ * [Conditional Compilation](conditional-compilation.md)
+ * [Documentation](documentation.md)
+ * [Iterators](iterators.md)
+ * [Concurrency](concurrency.md)
+ * [Error Handling](error-handling.md)
+ * [Choosing your Guarantees](choosing-your-guarantees.md)
+ * [FFI](ffi.md)
+ * [Borrow and AsRef](borrow-and-asref.md)
+ * [Release Channels](release-channels.md)
+ * [Using Rust without the standard library](using-rust-without-the-standard-library.md)
+ * [Procedural Macros (and custom derive)](procedural-macros.md)
+* [Glossary](glossary.md)
+* [Syntax Index](syntax-index.md)
+* [Bibliography](bibliography.md)
diff --git a/src/doc/book/first-edition/src/associated-types.md b/src/doc/book/first-edition/src/associated-types.md
new file mode 100644
index 000000000..626048e9e
--- /dev/null
+++ b/src/doc/book/first-edition/src/associated-types.md
@@ -0,0 +1,10 @@
+# Associated Types
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-03-advanced-traits.html#specifying-placeholder-types-in-trait-definitions-with-associated-types) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/associated-types.html).
diff --git a/src/doc/book/first-edition/src/attributes.md b/src/doc/book/first-edition/src/attributes.md
new file mode 100644
index 000000000..b39fcdd67
--- /dev/null
+++ b/src/doc/book/first-edition/src/attributes.md
@@ -0,0 +1,10 @@
+# Attributes
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/attributes.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/bibliography.md b/src/doc/book/first-edition/src/bibliography.md
new file mode 100644
index 000000000..9609068fd
--- /dev/null
+++ b/src/doc/book/first-edition/src/bibliography.md
@@ -0,0 +1,10 @@
+# Bibliography
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/bibliography.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/borrow-and-asref.md b/src/doc/book/first-edition/src/borrow-and-asref.md
new file mode 100644
index 000000000..a088bc8d7
--- /dev/null
+++ b/src/doc/book/first-edition/src/borrow-and-asref.md
@@ -0,0 +1,10 @@
+# Borrow and AsRef
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-00-smart-pointers.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/borrow-and-asref.html).
diff --git a/src/doc/book/first-edition/src/casting-between-types.md b/src/doc/book/first-edition/src/casting-between-types.md
new file mode 100644
index 000000000..34d4e84e5
--- /dev/null
+++ b/src/doc/book/first-edition/src/casting-between-types.md
@@ -0,0 +1,10 @@
+# Casting Between Types
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/casting-between-types.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/choosing-your-guarantees.md b/src/doc/book/first-edition/src/choosing-your-guarantees.md
new file mode 100644
index 000000000..9e56d9da2
--- /dev/null
+++ b/src/doc/book/first-edition/src/choosing-your-guarantees.md
@@ -0,0 +1,10 @@
+# Choosing your Guarantees
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-00-smart-pointers.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/choosing-your-guarantees.html).
diff --git a/src/doc/book/first-edition/src/closures.md b/src/doc/book/first-edition/src/closures.md
new file mode 100644
index 000000000..3852e28f5
--- /dev/null
+++ b/src/doc/book/first-edition/src/closures.md
@@ -0,0 +1,10 @@
+# Closures
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-01-closures.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/closures.html).
diff --git a/src/doc/book/first-edition/src/comments.md b/src/doc/book/first-edition/src/comments.md
new file mode 100644
index 000000000..cf56cd67b
--- /dev/null
+++ b/src/doc/book/first-edition/src/comments.md
@@ -0,0 +1,10 @@
+# Comments
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-04-comments.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/comments.html).
diff --git a/src/doc/book/first-edition/src/concurrency.md b/src/doc/book/first-edition/src/concurrency.md
new file mode 100644
index 000000000..adb6e85b8
--- /dev/null
+++ b/src/doc/book/first-edition/src/concurrency.md
@@ -0,0 +1,10 @@
+# Concurrency
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-00-concurrency.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/concurrency.html).
diff --git a/src/doc/book/first-edition/src/conditional-compilation.md b/src/doc/book/first-edition/src/conditional-compilation.md
new file mode 100644
index 000000000..80184ba3e
--- /dev/null
+++ b/src/doc/book/first-edition/src/conditional-compilation.md
@@ -0,0 +1,10 @@
+# Conditional Compilation
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/conditional-compilation.html).
diff --git a/src/doc/book/first-edition/src/const-and-static.md b/src/doc/book/first-edition/src/const-and-static.md
new file mode 100644
index 000000000..aa634112b
--- /dev/null
+++ b/src/doc/book/first-edition/src/const-and-static.md
@@ -0,0 +1,10 @@
+# const and static
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-01-unsafe-rust.html#accessing-or-modifying-a-mutable-static-variable) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/const-and-static.html).
diff --git a/src/doc/book/first-edition/src/crates-and-modules.md b/src/doc/book/first-edition/src/crates-and-modules.md
new file mode 100644
index 000000000..66262b340
--- /dev/null
+++ b/src/doc/book/first-edition/src/crates-and-modules.md
@@ -0,0 +1,10 @@
+# Crates and Modules
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch07-00-managing-growing-projects-with-packages-crates-and-modules.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/crates-and-modules.html).
diff --git a/src/doc/book/first-edition/src/deref-coercions.md b/src/doc/book/first-edition/src/deref-coercions.md
new file mode 100644
index 000000000..1e43ff453
--- /dev/null
+++ b/src/doc/book/first-edition/src/deref-coercions.md
@@ -0,0 +1,10 @@
+# `Deref` coercions
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/deref-coercions.html).
diff --git a/src/doc/book/first-edition/src/documentation.md b/src/doc/book/first-edition/src/documentation.md
new file mode 100644
index 000000000..ac9ecba80
--- /dev/null
+++ b/src/doc/book/first-edition/src/documentation.md
@@ -0,0 +1,10 @@
+# Documentation
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/documentation.html).
diff --git a/src/doc/book/first-edition/src/drop.md b/src/doc/book/first-edition/src/drop.md
new file mode 100644
index 000000000..1abde150e
--- /dev/null
+++ b/src/doc/book/first-edition/src/drop.md
@@ -0,0 +1,10 @@
+# Drop
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-03-drop.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/drop.html).
diff --git a/src/doc/book/first-edition/src/effective-rust.md b/src/doc/book/first-edition/src/effective-rust.md
new file mode 100644
index 000000000..1087c6541
--- /dev/null
+++ b/src/doc/book/first-edition/src/effective-rust.md
@@ -0,0 +1,10 @@
+# Effective Rust
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/effective-rust.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/enums.md b/src/doc/book/first-edition/src/enums.md
new file mode 100644
index 000000000..e26e19820
--- /dev/null
+++ b/src/doc/book/first-edition/src/enums.md
@@ -0,0 +1,10 @@
+# Enums
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-01-defining-an-enum.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/enums.html).
diff --git a/src/doc/book/first-edition/src/error-handling.md b/src/doc/book/first-edition/src/error-handling.md
new file mode 100644
index 000000000..35b780ae7
--- /dev/null
+++ b/src/doc/book/first-edition/src/error-handling.md
@@ -0,0 +1,10 @@
+# Error Handling
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-00-error-handling.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/error-handling.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/ffi.md b/src/doc/book/first-edition/src/ffi.md
new file mode 100644
index 000000000..2adaff9d8
--- /dev/null
+++ b/src/doc/book/first-edition/src/ffi.md
@@ -0,0 +1,10 @@
+# Foreign Function Interface
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-01-unsafe-rust.html#calling-rust-functions-from-other-languages) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/ffi.html).
diff --git a/src/doc/book/first-edition/src/functions.md b/src/doc/book/first-edition/src/functions.md
new file mode 100644
index 000000000..b6af0f670
--- /dev/null
+++ b/src/doc/book/first-edition/src/functions.md
@@ -0,0 +1,10 @@
+# Functions
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-03-how-functions-work.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/functions.html).
diff --git a/src/doc/book/first-edition/src/generics.md b/src/doc/book/first-edition/src/generics.md
new file mode 100644
index 000000000..953ba03e2
--- /dev/null
+++ b/src/doc/book/first-edition/src/generics.md
@@ -0,0 +1,10 @@
+# Generics
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-00-generics.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/generics.html).
diff --git a/src/doc/book/first-edition/src/getting-started.md b/src/doc/book/first-edition/src/getting-started.md
new file mode 100644
index 000000000..cd3ccf775
--- /dev/null
+++ b/src/doc/book/first-edition/src/getting-started.md
@@ -0,0 +1,10 @@
+# Getting Started
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch00-00-introduction.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/getting-started.html).
diff --git a/src/doc/book/first-edition/src/glossary.md b/src/doc/book/first-edition/src/glossary.md
new file mode 100644
index 000000000..03a2833e4
--- /dev/null
+++ b/src/doc/book/first-edition/src/glossary.md
@@ -0,0 +1,10 @@
+# Glossary
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/glossary.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/guessing-game.md b/src/doc/book/first-edition/src/guessing-game.md
new file mode 100644
index 000000000..3191cc972
--- /dev/null
+++ b/src/doc/book/first-edition/src/guessing-game.md
@@ -0,0 +1,10 @@
+# Guessing Game
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch02-00-guessing-game-tutorial.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/guessing-game.html).
diff --git a/src/doc/book/first-edition/src/if-let.md b/src/doc/book/first-edition/src/if-let.md
new file mode 100644
index 000000000..b4a95d24f
--- /dev/null
+++ b/src/doc/book/first-edition/src/if-let.md
@@ -0,0 +1,10 @@
+# if let
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-03-if-let.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/if-let.html).
diff --git a/src/doc/book/first-edition/src/if.md b/src/doc/book/first-edition/src/if.md
new file mode 100644
index 000000000..bd8f8e6c7
--- /dev/null
+++ b/src/doc/book/first-edition/src/if.md
@@ -0,0 +1,10 @@
+# if
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-05-control-flow.html#if-expressions) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/if.html).
diff --git a/src/doc/book/first-edition/src/iterators.md b/src/doc/book/first-edition/src/iterators.md
new file mode 100644
index 000000000..d4dbd1e29
--- /dev/null
+++ b/src/doc/book/first-edition/src/iterators.md
@@ -0,0 +1,10 @@
+# Iterators
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-02-iterators.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/iterators.html).
diff --git a/src/doc/book/first-edition/src/lifetimes.md b/src/doc/book/first-edition/src/lifetimes.md
new file mode 100644
index 000000000..2208c966e
--- /dev/null
+++ b/src/doc/book/first-edition/src/lifetimes.md
@@ -0,0 +1,10 @@
+# Lifetimes
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-03-lifetime-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/lifetimes.html).
diff --git a/src/doc/book/first-edition/src/loops.md b/src/doc/book/first-edition/src/loops.md
new file mode 100644
index 000000000..07ecd3342
--- /dev/null
+++ b/src/doc/book/first-edition/src/loops.md
@@ -0,0 +1,10 @@
+# Loops
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-05-control-flow.html#repetition-with-loops) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/loops.html).
diff --git a/src/doc/book/first-edition/src/macros.md b/src/doc/book/first-edition/src/macros.md
new file mode 100644
index 000000000..6bafdc1e4
--- /dev/null
+++ b/src/doc/book/first-edition/src/macros.md
@@ -0,0 +1,10 @@
+# Macros
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-06-macros.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/macros.html).
diff --git a/src/doc/book/first-edition/src/match.md b/src/doc/book/first-edition/src/match.md
new file mode 100644
index 000000000..b9808193e
--- /dev/null
+++ b/src/doc/book/first-edition/src/match.md
@@ -0,0 +1,10 @@
+# Match
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-02-match.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/match.html).
diff --git a/src/doc/book/first-edition/src/method-syntax.md b/src/doc/book/first-edition/src/method-syntax.md
new file mode 100644
index 000000000..74c232bf9
--- /dev/null
+++ b/src/doc/book/first-edition/src/method-syntax.md
@@ -0,0 +1,10 @@
+# Method Syntax
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-03-method-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/method-syntax.html).
diff --git a/src/doc/book/first-edition/src/mutability.md b/src/doc/book/first-edition/src/mutability.md
new file mode 100644
index 000000000..2f557de1d
--- /dev/null
+++ b/src/doc/book/first-edition/src/mutability.md
@@ -0,0 +1,10 @@
+# Mutability
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-01-variables-and-mutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/mutability.html).
diff --git a/src/doc/book/first-edition/src/operators-and-overloading.md b/src/doc/book/first-edition/src/operators-and-overloading.md
new file mode 100644
index 000000000..921a2a685
--- /dev/null
+++ b/src/doc/book/first-edition/src/operators-and-overloading.md
@@ -0,0 +1,10 @@
+# Operators and Overloading
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-03-advanced-traits.html#default-generic-type-parameters-and-operator-overloading) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/operators-and-overloading.html).
diff --git a/src/doc/book/first-edition/src/ownership.md b/src/doc/book/first-edition/src/ownership.md
new file mode 100644
index 000000000..70fbe4847
--- /dev/null
+++ b/src/doc/book/first-edition/src/ownership.md
@@ -0,0 +1,10 @@
+# Ownership
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-00-understanding-ownership.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/ownership.html).
diff --git a/src/doc/book/first-edition/src/patterns.md b/src/doc/book/first-edition/src/patterns.md
new file mode 100644
index 000000000..d722d397e
--- /dev/null
+++ b/src/doc/book/first-edition/src/patterns.md
@@ -0,0 +1,10 @@
+# Patterns
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-03-pattern-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/patterns.html).
diff --git a/src/doc/book/first-edition/src/primitive-types.md b/src/doc/book/first-edition/src/primitive-types.md
new file mode 100644
index 000000000..39ee0b2d1
--- /dev/null
+++ b/src/doc/book/first-edition/src/primitive-types.md
@@ -0,0 +1,10 @@
+# Primitive Types
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-02-data-types.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/primitive-types.html).
diff --git a/src/doc/book/first-edition/src/procedural-macros.md b/src/doc/book/first-edition/src/procedural-macros.md
new file mode 100644
index 000000000..9778383d8
--- /dev/null
+++ b/src/doc/book/first-edition/src/procedural-macros.md
@@ -0,0 +1,10 @@
+# Procedural Macros (and custom Derive)
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-06-macros.html?highlight=procedural#procedural-macros-for-generating-code-from-attributes) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/procedural-macros.html).
diff --git a/src/doc/book/first-edition/src/raw-pointers.md b/src/doc/book/first-edition/src/raw-pointers.md
new file mode 100644
index 000000000..c149da868
--- /dev/null
+++ b/src/doc/book/first-edition/src/raw-pointers.md
@@ -0,0 +1,10 @@
+# Raw Pointers
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-01-unsafe-rust.html#dereferencing-a-raw-pointer) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/raw-pointers.html).
diff --git a/src/doc/book/first-edition/src/references-and-borrowing.md b/src/doc/book/first-edition/src/references-and-borrowing.md
new file mode 100644
index 000000000..1d8c75e2d
--- /dev/null
+++ b/src/doc/book/first-edition/src/references-and-borrowing.md
@@ -0,0 +1,10 @@
+# References and Borrowing
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-02-references-and-borrowing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/references-and-borrowing.html).
diff --git a/src/doc/book/first-edition/src/release-channels.md b/src/doc/book/first-edition/src/release-channels.md
new file mode 100644
index 000000000..f0a643f27
--- /dev/null
+++ b/src/doc/book/first-edition/src/release-channels.md
@@ -0,0 +1,10 @@
+# Release Channels
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/release-channels.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/strings.md b/src/doc/book/first-edition/src/strings.md
new file mode 100644
index 000000000..f7648cde5
--- /dev/null
+++ b/src/doc/book/first-edition/src/strings.md
@@ -0,0 +1,10 @@
+# Strings
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-02-strings.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/strings.html).
diff --git a/src/doc/book/first-edition/src/structs.md b/src/doc/book/first-edition/src/structs.md
new file mode 100644
index 000000000..acfcdaf51
--- /dev/null
+++ b/src/doc/book/first-edition/src/structs.md
@@ -0,0 +1,10 @@
+# Structs
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-00-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/structs.html).
diff --git a/src/doc/book/first-edition/src/syntax-and-semantics.md b/src/doc/book/first-edition/src/syntax-and-semantics.md
new file mode 100644
index 000000000..62740385c
--- /dev/null
+++ b/src/doc/book/first-edition/src/syntax-and-semantics.md
@@ -0,0 +1,10 @@
+# Syntax and Semantics
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-00-common-programming-concepts.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/syntax-and-semantics.html).
diff --git a/src/doc/book/first-edition/src/syntax-index.md b/src/doc/book/first-edition/src/syntax-index.md
new file mode 100644
index 000000000..a2ab62cac
--- /dev/null
+++ b/src/doc/book/first-edition/src/syntax-index.md
@@ -0,0 +1,10 @@
+# Syntax Index
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/syntax-index.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/testing.md b/src/doc/book/first-edition/src/testing.md
new file mode 100644
index 000000000..d59418979
--- /dev/null
+++ b/src/doc/book/first-edition/src/testing.md
@@ -0,0 +1,10 @@
+# Testing
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-00-testing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/testing.html).
diff --git a/src/doc/book/first-edition/src/the-stack-and-the-heap.md b/src/doc/book/first-edition/src/the-stack-and-the-heap.md
new file mode 100644
index 000000000..5c53af356
--- /dev/null
+++ b/src/doc/book/first-edition/src/the-stack-and-the-heap.md
@@ -0,0 +1,10 @@
+# The Stack and the Heap
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-01-what-is-ownership.html#the-stack-and-the-heap) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/the-stack-and-the-heap.html).
diff --git a/src/doc/book/first-edition/src/trait-objects.md b/src/doc/book/first-edition/src/trait-objects.md
new file mode 100644
index 000000000..871bad614
--- /dev/null
+++ b/src/doc/book/first-edition/src/trait-objects.md
@@ -0,0 +1,10 @@
+# Trait Objects
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-02-trait-objects.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/trait-objects.html).
diff --git a/src/doc/book/first-edition/src/traits.md b/src/doc/book/first-edition/src/traits.md
new file mode 100644
index 000000000..955776a74
--- /dev/null
+++ b/src/doc/book/first-edition/src/traits.md
@@ -0,0 +1,10 @@
+# Traits
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-02-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/traits.html).
diff --git a/src/doc/book/first-edition/src/type-aliases.md b/src/doc/book/first-edition/src/type-aliases.md
new file mode 100644
index 000000000..7ac51ff19
--- /dev/null
+++ b/src/doc/book/first-edition/src/type-aliases.md
@@ -0,0 +1,10 @@
+# Type Aliases
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-04-advanced-types.html#creating-type-synonyms-with-type-aliases) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/type-aliases.html).
diff --git a/src/doc/book/first-edition/src/ufcs.md b/src/doc/book/first-edition/src/ufcs.md
new file mode 100644
index 000000000..dad121ab3
--- /dev/null
+++ b/src/doc/book/first-edition/src/ufcs.md
@@ -0,0 +1,10 @@
+# Universal Function Call Syntax
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/ufcs.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/unsafe.md b/src/doc/book/first-edition/src/unsafe.md
new file mode 100644
index 000000000..be816dfd3
--- /dev/null
+++ b/src/doc/book/first-edition/src/unsafe.md
@@ -0,0 +1,10 @@
+# Unsafe
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-01-unsafe-rust.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/unsafe.html).
diff --git a/src/doc/book/first-edition/src/unsized-types.md b/src/doc/book/first-edition/src/unsized-types.md
new file mode 100644
index 000000000..4ec43ecad
--- /dev/null
+++ b/src/doc/book/first-edition/src/unsized-types.md
@@ -0,0 +1,10 @@
+# Unsized Types
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/unsized-types.html).
diff --git a/src/doc/book/first-edition/src/using-rust-without-the-standard-library.md b/src/doc/book/first-edition/src/using-rust-without-the-standard-library.md
new file mode 100644
index 000000000..28e4e763b
--- /dev/null
+++ b/src/doc/book/first-edition/src/using-rust-without-the-standard-library.md
@@ -0,0 +1,10 @@
+# Using Rust Without the Standard Library
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/using-rust-without-the-standard-library.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/variable-bindings.md b/src/doc/book/first-edition/src/variable-bindings.md
new file mode 100644
index 000000000..d11c926fd
--- /dev/null
+++ b/src/doc/book/first-edition/src/variable-bindings.md
@@ -0,0 +1,10 @@
+# Variable Bindings
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/variable-bindings.html). \ No newline at end of file
diff --git a/src/doc/book/first-edition/src/vectors.md b/src/doc/book/first-edition/src/vectors.md
new file mode 100644
index 000000000..14f83b7f7
--- /dev/null
+++ b/src/doc/book/first-edition/src/vectors.md
@@ -0,0 +1,10 @@
+# Vectors
+
+The first edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-01-vectors.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/first-edition/vectors.html).
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.lock
new file mode 100644
index 000000000..5802b7dc9
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml
new file mode 100644
index 000000000..78c94fef9
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs
new file mode 100644
index 000000000..d44e290d7
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs
@@ -0,0 +1,31 @@
+// ANCHOR: all
+// ANCHOR: io
+use std::io;
+// ANCHOR_END: io
+
+// ANCHOR: main
+fn main() {
+ // ANCHOR_END: main
+ // ANCHOR: print
+ println!("Guess the number!");
+
+ println!("Please input your guess.");
+ // ANCHOR_END: print
+
+ // ANCHOR: string
+ let mut guess = String::new();
+ // ANCHOR_END: string
+
+ // ANCHOR: read
+ io::stdin()
+ .read_line(&mut guess)
+ // ANCHOR_END: read
+ // ANCHOR: expect
+ .expect("Failed to read line");
+ // ANCHOR_END: expect
+
+ // ANCHOR: print_guess
+ println!("You guessed: {guess}");
+ // ANCHOR_END: print_guess
+}
+// ANCHOR: all
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/src/main.rs
new file mode 100644
index 000000000..b35ed0f2f
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-02/src/main.rs
@@ -0,0 +1,15 @@
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ println!("You guessed: {guess}");
+}
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs
new file mode 100644
index 000000000..1ba2d4d41
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs
@@ -0,0 +1,28 @@
+// ANCHOR: all
+use std::io;
+// ANCHOR: ch07-04
+use rand::Rng;
+
+fn main() {
+ // ANCHOR_END: ch07-04
+ println!("Guess the number!");
+
+ // ANCHOR: ch07-04
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+ // ANCHOR_END: ch07-04
+
+ println!("The secret number is: {secret_number}");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ println!("You guessed: {guess}");
+ // ANCHOR: ch07-04
+}
+// ANCHOR_END: ch07-04
+// ANCHOR_END: all
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/output.txt b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/output.txt
new file mode 100644
index 000000000..62fe8327f
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/output.txt
@@ -0,0 +1,20 @@
+$ cargo build
+ Compiling libc v0.2.86
+ Compiling getrandom v0.2.2
+ Compiling cfg-if v1.0.0
+ Compiling ppv-lite86 v0.2.10
+ Compiling rand_core v0.6.2
+ Compiling rand_chacha v0.3.0
+ Compiling rand v0.8.3
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+error[E0308]: mismatched types
+ --> src/main.rs:22:21
+ |
+22 | match guess.cmp(&secret_number) {
+ | ^^^^^^^^^^^^^^ expected struct `String`, found integer
+ |
+ = note: expected reference `&String`
+ found reference `&{integer}`
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `guessing_game` due to previous error
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs
new file mode 100644
index 000000000..6e58a7645
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs
@@ -0,0 +1,32 @@
+// ANCHOR: here
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ // --snip--
+ // ANCHOR_END: here
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ println!("The secret number is: {secret_number}");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+ // ANCHOR: here
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs
new file mode 100644
index 000000000..12f497e18
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs
@@ -0,0 +1,45 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ println!("The secret number is: {secret_number}");
+
+ loop {
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ // ANCHOR: here
+ // --snip--
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ // ANCHOR: ch19
+ let guess: u32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+ // ANCHOR_END: ch19
+
+ println!("You guessed: {guess}");
+
+ // --snip--
+ // ANCHOR_END: here
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs
new file mode 100644
index 000000000..7fcbb99fb
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs
@@ -0,0 +1,35 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ loop {
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.lock
new file mode 100644
index 000000000..ee5d79095
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.toml
new file mode 100644
index 000000000..78c94fef9
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/output.txt b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/output.txt
new file mode 100644
index 000000000..2724c145d
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.50s
+ Running `target/debug/guessing_game`
+Hello, world!
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs
new file mode 100644
index 000000000..e7a11a969
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.lock
new file mode 100644
index 000000000..5802b7dc9
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.toml
new file mode 100644
index 000000000..78c94fef9
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt
new file mode 100644
index 000000000..8095bbd8d
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt
@@ -0,0 +1,13 @@
+$ cargo build
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+warning: unused `Result` that must be used
+ --> src/main.rs:10:5
+ |
+10 | io::stdin().read_line(&mut guess);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_must_use)]` on by default
+ = note: this `Result` may be an `Err` variant, which should be handled
+
+warning: `guessing_game` (bin "guessing_game") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 0.59s
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/src/main.rs
new file mode 100644
index 000000000..51046016f
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/src/main.rs
@@ -0,0 +1,13 @@
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin().read_line(&mut guess);
+
+ println!("You guessed: {guess}");
+}
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs
new file mode 100644
index 000000000..7f076c592
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs
@@ -0,0 +1,33 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ println!("The secret number is: {secret_number}");
+
+ println!("Please input your guess.");
+
+ // ANCHOR: here
+ // --snip--
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = guess.trim().parse().expect("Please type a number!");
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/src/main.rs
new file mode 100644
index 000000000..f97d1c58c
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-04-looping/src/main.rs
@@ -0,0 +1,40 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ // ANCHOR: here
+ // --snip--
+
+ println!("The secret number is: {secret_number}");
+
+ loop {
+ println!("Please input your guess.");
+
+ // --snip--
+
+ // ANCHOR_END: here
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = guess.trim().parse().expect("Please type a number!");
+
+ println!("You guessed: {guess}");
+
+ // ANCHOR: here
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.lock b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.toml b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/src/main.rs b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/src/main.rs
new file mode 100644
index 000000000..def0a0e7e
--- /dev/null
+++ b/src/doc/book/listings/ch02-guessing-game-tutorial/no-listing-05-quitting/src/main.rs
@@ -0,0 +1,38 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ println!("The secret number is: {secret_number}");
+
+ loop {
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = guess.trim().parse().expect("Please type a number!");
+
+ println!("You guessed: {guess}");
+
+ // ANCHOR: here
+ // --snip--
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/src/main.rs
new file mode 100644
index 000000000..b492d384f
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-01/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let y = 6;
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/output.txt
new file mode 100644
index 000000000..3eb8d102a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.30s
+ Running `target/debug/branches`
+The value of number is: 5
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/src/main.rs
new file mode 100644
index 000000000..e021e41e8
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-02/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let condition = true;
+ let number = if condition { 5 } else { 6 };
+
+ println!("The value of number is: {number}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.lock
new file mode 100644
index 000000000..9942b362a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/src/main.rs
new file mode 100644
index 000000000..ca070c759
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-03/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ let mut number = 3;
+
+ while number != 0 {
+ println!("{number}!");
+
+ number -= 1;
+ }
+
+ println!("LIFTOFF!!!");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.lock
new file mode 100644
index 000000000..9942b362a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/output.txt
new file mode 100644
index 000000000..35c0f804a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/output.txt
@@ -0,0 +1,9 @@
+$ cargo run
+ Compiling loops v0.1.0 (file:///projects/loops)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.32s
+ Running `target/debug/loops`
+the value is: 10
+the value is: 20
+the value is: 30
+the value is: 40
+the value is: 50
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/src/main.rs
new file mode 100644
index 000000000..38fd301e6
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-04/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ let a = [10, 20, 30, 40, 50];
+ let mut index = 0;
+
+ while index < 5 {
+ println!("the value is: {}", a[index]);
+
+ index += 1;
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.lock
new file mode 100644
index 000000000..9942b362a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/src/main.rs
new file mode 100644
index 000000000..b44e6b7aa
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/listing-03-05/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let a = [10, 20, 30, 40, 50];
+
+ for element in a {
+ println!("the value is: {element}");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.lock
new file mode 100644
index 000000000..2d62cbe7a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "variables"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.toml
new file mode 100644
index 000000000..4da3b8150
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "variables"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/output.txt
new file mode 100644
index 000000000..ed87cb2c8
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+error[E0384]: cannot assign twice to immutable variable `x`
+ --> src/main.rs:4:5
+ |
+2 | let x = 5;
+ | -
+ | |
+ | first assignment to `x`
+ | help: consider making this binding mutable: `mut x`
+3 | println!("The value of x is: {x}");
+4 | x = 6;
+ | ^^^^^ cannot assign twice to immutable variable
+
+For more information about this error, try `rustc --explain E0384`.
+error: could not compile `variables` due to previous error
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/src/main.rs
new file mode 100644
index 000000000..d64f46de4
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let x = 5;
+ println!("The value of x is: {x}");
+ x = 6;
+ println!("The value of x is: {x}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.lock
new file mode 100644
index 000000000..2d62cbe7a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "variables"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.toml
new file mode 100644
index 000000000..4da3b8150
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "variables"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/output.txt
new file mode 100644
index 000000000..8ed6598ff
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.30s
+ Running `target/debug/variables`
+The value of x is: 5
+The value of x is: 6
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/src/main.rs
new file mode 100644
index 000000000..a57709ccf
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-02-adding-mut/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let mut x = 5;
+ println!("The value of x is: {x}");
+ x = 6;
+ println!("The value of x is: {x}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.lock
new file mode 100644
index 000000000..2d62cbe7a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "variables"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.toml
new file mode 100644
index 000000000..4da3b8150
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "variables"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/output.txt
new file mode 100644
index 000000000..f310e9ffa
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/variables`
+The value of x in the inner scope is: 12
+The value of x is: 6
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/src/main.rs
new file mode 100644
index 000000000..03924fe1c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-03-shadowing/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ let x = 5;
+
+ let x = x + 1;
+
+ {
+ let x = x * 2;
+ println!("The value of x in the inner scope is: {x}");
+ }
+
+ println!("The value of x is: {x}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.lock
new file mode 100644
index 000000000..2d62cbe7a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "variables"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.toml
new file mode 100644
index 000000000..4da3b8150
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "variables"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/src/main.rs
new file mode 100644
index 000000000..42589f548
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let spaces = " ";
+ let spaces = spaces.len();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.lock
new file mode 100644
index 000000000..2d62cbe7a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "variables"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.toml
new file mode 100644
index 000000000..4da3b8150
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "variables"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/output.txt
new file mode 100644
index 000000000..31a07efc4
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+error[E0308]: mismatched types
+ --> src/main.rs:3:14
+ |
+2 | let mut spaces = " ";
+ | ----- expected due to this value
+3 | spaces = spaces.len();
+ | ^^^^^^^^^^^^ expected `&str`, found `usize`
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `variables` due to previous error
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/src/main.rs
new file mode 100644
index 000000000..f52635d0b
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let mut spaces = " ";
+ spaces = spaces.len();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.lock
new file mode 100644
index 000000000..3b40559a7
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "floating-point"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.toml
new file mode 100644
index 000000000..83610e756
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "floating-point"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/src/main.rs
new file mode 100644
index 000000000..6f4f0fe87
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-06-floating-point/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let x = 2.0; // f64
+
+ let y: f32 = 3.0; // f32
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.lock
new file mode 100644
index 000000000..94a12b255
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "numeric-operations"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.toml
new file mode 100644
index 000000000..b4bea55e3
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "numeric-operations"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs
new file mode 100644
index 000000000..9d3b4813b
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs
@@ -0,0 +1,17 @@
+fn main() {
+ // addition
+ let sum = 5 + 10;
+
+ // subtraction
+ let difference = 95.5 - 4.3;
+
+ // multiplication
+ let product = 4 * 30;
+
+ // division
+ let quotient = 56.7 / 32.2;
+ let floored = 2 / 3; // Results in 0
+
+ // remainder
+ let remainder = 43 % 5;
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.lock
new file mode 100644
index 000000000..5d5728ebd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "boolean"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.toml
new file mode 100644
index 000000000..47e42cef8
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "boolean"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/src/main.rs
new file mode 100644
index 000000000..2c56e62f9
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-08-boolean/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let t = true;
+
+ let f: bool = false; // with explicit type annotation
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.lock
new file mode 100644
index 000000000..bb58446cc
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "char"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.toml
new file mode 100644
index 000000000..a1ef3b537
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "char"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/src/main.rs
new file mode 100644
index 000000000..4921cc998
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-09-char/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let c = 'z';
+ let z: char = 'ℤ'; // with explicit type annotation
+ let heart_eyed_cat = '😻';
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.lock
new file mode 100644
index 000000000..f57f0767c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "tuples"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.toml
new file mode 100644
index 000000000..9b0879c2c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tuples"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/src/main.rs
new file mode 100644
index 000000000..b7b51fb2f
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-10-tuples/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let tup: (i32, f64, u8) = (500, 6.4, 1);
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.lock
new file mode 100644
index 000000000..f57f0767c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "tuples"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.toml
new file mode 100644
index 000000000..9b0879c2c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tuples"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/src/main.rs
new file mode 100644
index 000000000..3002bdde4
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let tup = (500, 6.4, 1);
+
+ let (x, y, z) = tup;
+
+ println!("The value of y is: {y}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.lock
new file mode 100644
index 000000000..f57f0767c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "tuples"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.toml
new file mode 100644
index 000000000..9b0879c2c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tuples"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/src/main.rs
new file mode 100644
index 000000000..1b1e646fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let x: (i32, f64, u8) = (500, 6.4, 1);
+
+ let five_hundred = x.0;
+
+ let six_point_four = x.1;
+
+ let one = x.2;
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.lock
new file mode 100644
index 000000000..68e3c5967
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "arrays"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.toml
new file mode 100644
index 000000000..96be3e2b1
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "arrays"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/src/main.rs
new file mode 100644
index 000000000..d475901ce
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-13-arrays/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let a = [1, 2, 3, 4, 5];
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.lock
new file mode 100644
index 000000000..68e3c5967
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "arrays"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.toml
new file mode 100644
index 000000000..96be3e2b1
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "arrays"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/src/main.rs
new file mode 100644
index 000000000..d33e3174f
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-14-array-indexing/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let a = [1, 2, 3, 4, 5];
+
+ let first = a[0];
+ let second = a[1];
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.lock
new file mode 100644
index 000000000..68e3c5967
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "arrays"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.toml
new file mode 100644
index 000000000..96be3e2b1
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "arrays"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/src/main.rs
new file mode 100644
index 000000000..b634c9378
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/src/main.rs
@@ -0,0 +1,22 @@
+use std::io;
+
+fn main() {
+ let a = [1, 2, 3, 4, 5];
+
+ println!("Please enter an array index.");
+
+ let mut index = String::new();
+
+ io::stdin()
+ .read_line(&mut index)
+ .expect("Failed to read line");
+
+ let index: usize = index
+ .trim()
+ .parse()
+ .expect("Index entered was not a number");
+
+ let element = a[index];
+
+ println!("The value of the element at index {index} is: {element}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/output.txt
new file mode 100644
index 000000000..723fad32a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.28s
+ Running `target/debug/functions`
+Hello, world!
+Another function.
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/src/main.rs
new file mode 100644
index 000000000..38be8565b
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-16-functions/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ println!("Hello, world!");
+
+ another_function();
+}
+
+fn another_function() {
+ println!("Another function.");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt
new file mode 100644
index 000000000..546bbc047
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.21s
+ Running `target/debug/functions`
+The value of x is: 5
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs
new file mode 100644
index 000000000..108da4f81
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ another_function(5);
+}
+
+fn another_function(x: i32) {
+ println!("The value of x is: {x}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/output.txt
new file mode 100644
index 000000000..6210234c9
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/functions`
+The measurement is: 5h
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs
new file mode 100644
index 000000000..b070ccb23
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ print_labeled_measurement(5, 'h');
+}
+
+fn print_labeled_measurement(value: i32, unit_label: char) {
+ println!("The measurement is: {value}{unit_label}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.lock
new file mode 100644
index 000000000..89a654d69
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/output.txt
new file mode 100644
index 000000000..a5a85f4f6
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/output.txt
@@ -0,0 +1,34 @@
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+error: expected expression, found statement (`let`)
+ --> src/main.rs:2:14
+ |
+2 | let x = (let y = 6);
+ | ^^^^^^^^^
+ |
+ = note: variable declaration using `let` is a statement
+
+error[E0658]: `let` expressions in this position are unstable
+ --> src/main.rs:2:14
+ |
+2 | let x = (let y = 6);
+ | ^^^^^^^^^
+ |
+ = note: see issue #53667 <https://github.com/rust-lang/rust/issues/53667> for more information
+
+warning: unnecessary parentheses around assigned value
+ --> src/main.rs:2:13
+ |
+2 | let x = (let y = 6);
+ | ^ ^
+ |
+ = note: `#[warn(unused_parens)]` on by default
+help: remove these parentheses
+ |
+2 - let x = (let y = 6);
+2 + let x = let y = 6;
+ |
+
+For more information about this error, try `rustc --explain E0658`.
+warning: `functions` (bin "functions") generated 1 warning
+error: could not compile `functions` due to 2 previous errors; 1 warning emitted
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/rustfmt-ignore b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/rustfmt-ignore
new file mode 100644
index 000000000..06a976dd4
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/rustfmt-ignore
@@ -0,0 +1 @@
+This listing deliberately doesn't parse so rustfmt fails.
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs
new file mode 100644
index 000000000..988f9653e
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let x = (let y = 6);
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs
new file mode 100644
index 000000000..64b873297
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ let y = {
+ let x = 3;
+ x + 1
+ };
+
+ println!("The value of y is: {y}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/output.txt
new file mode 100644
index 000000000..a457e3399
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.30s
+ Running `target/debug/functions`
+The value of x is: 5
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/src/main.rs
new file mode 100644
index 000000000..a11af7ec7
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-21-function-return-values/src/main.rs
@@ -0,0 +1,9 @@
+fn five() -> i32 {
+ 5
+}
+
+fn main() {
+ let x = five();
+
+ println!("The value of x is: {x}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/src/main.rs
new file mode 100644
index 000000000..da9d0ddb3
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let x = plus_one(5);
+
+ println!("The value of x is: {x}");
+}
+
+fn plus_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.lock
new file mode 100644
index 000000000..88287d136
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.toml
new file mode 100644
index 000000000..478b346fd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/output.txt
new file mode 100644
index 000000000..c0484ea1b
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/output.txt
@@ -0,0 +1,14 @@
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+error[E0308]: mismatched types
+ --> src/main.rs:7:24
+ |
+7 | fn plus_one(x: i32) -> i32 {
+ | -------- ^^^ expected `i32`, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+8 | x + 1;
+ | - help: remove this semicolon
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `functions` due to previous error
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/src/main.rs
new file mode 100644
index 000000000..1cec800b6
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let x = plus_one(5);
+
+ println!("The value of x is: {x}");
+}
+
+fn plus_one(x: i32) -> i32 {
+ x + 1;
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.lock
new file mode 100644
index 000000000..a289136a6
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "comments"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.toml
new file mode 100644
index 000000000..e0576b5dc
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "comments"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/src/main.rs
new file mode 100644
index 000000000..535f4b993
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let lucky_number = 7; // I’m feeling lucky today
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.lock
new file mode 100644
index 000000000..a289136a6
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "comments"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.toml
new file mode 100644
index 000000000..e0576b5dc
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "comments"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs
new file mode 100644
index 000000000..81cd93559
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs
@@ -0,0 +1,4 @@
+fn main() {
+ // I’m feeling lucky today
+ let lucky_number = 7;
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/output.txt
new file mode 100644
index 000000000..3d8c7dc33
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/branches`
+condition was true
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/src/main.rs
new file mode 100644
index 000000000..e64a42adf
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-26-if-true/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let number = 3;
+
+ if number < 5 {
+ println!("condition was true");
+ } else {
+ println!("condition was false");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/output.txt
new file mode 100644
index 000000000..e40da961c
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/branches`
+condition was false
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/src/main.rs
new file mode 100644
index 000000000..f7d76cf55
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-27-if-false/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let number = 7;
+ // ANCHOR_END: here
+
+ if number < 5 {
+ println!("condition was true");
+ } else {
+ println!("condition was false");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/output.txt
new file mode 100644
index 000000000..735bfe758
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/output.txt
@@ -0,0 +1,10 @@
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+error[E0308]: mismatched types
+ --> src/main.rs:4:8
+ |
+4 | if number {
+ | ^^^^^^ expected `bool`, found integer
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `branches` due to previous error
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/src/main.rs
new file mode 100644
index 000000000..bc4af767b
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let number = 3;
+
+ if number {
+ println!("number was three");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/src/main.rs
new file mode 100644
index 000000000..704650f46
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let number = 3;
+
+ if number != 0 {
+ println!("number was something other than zero");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/output.txt
new file mode 100644
index 000000000..b218941ad
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/branches`
+number is divisible by 3
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/src/main.rs
new file mode 100644
index 000000000..d0ef9b2c1
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-30-else-if/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let number = 6;
+
+ if number % 4 == 0 {
+ println!("number is divisible by 4");
+ } else if number % 3 == 0 {
+ println!("number is divisible by 3");
+ } else if number % 2 == 0 {
+ println!("number is divisible by 2");
+ } else {
+ println!("number is not divisible by 4, 3, or 2");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.lock
new file mode 100644
index 000000000..4ca0c2dbd
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "branches"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.toml
new file mode 100644
index 000000000..659645556
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "branches"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/output.txt
new file mode 100644
index 000000000..e922acd29
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+error[E0308]: `if` and `else` have incompatible types
+ --> src/main.rs:4:44
+ |
+4 | let number = if condition { 5 } else { "six" };
+ | - ^^^^^ expected integer, found `&str`
+ | |
+ | expected because of this
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `branches` due to previous error
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/src/main.rs
new file mode 100644
index 000000000..df7068bcf
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let condition = true;
+
+ let number = if condition { 5 } else { "six" };
+
+ println!("The value of number is: {number}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.lock
new file mode 100644
index 000000000..f73867315
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/output.txt
new file mode 100644
index 000000000..d4d322fb4
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/output.txt
@@ -0,0 +1,13 @@
+$ cargo run
+ Compiling loops v0.1.0 (file:///projects/loops)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.58s
+ Running `target/debug/loops`
+count = 0
+remaining = 10
+remaining = 9
+count = 1
+remaining = 10
+remaining = 9
+count = 2
+remaining = 10
+End count = 2
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/src/main.rs
new file mode 100644
index 000000000..dd8856403
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/src/main.rs
@@ -0,0 +1,21 @@
+fn main() {
+ let mut count = 0;
+ 'counting_up: loop {
+ println!("count = {count}");
+ let mut remaining = 10;
+
+ loop {
+ println!("remaining = {remaining}");
+ if remaining == 9 {
+ break;
+ }
+ if count == 2 {
+ break 'counting_up;
+ }
+ remaining -= 1;
+ }
+
+ count += 1;
+ }
+ println!("End count = {count}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.lock
new file mode 100644
index 000000000..9942b362a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/src/main.rs
new file mode 100644
index 000000000..f1692e462
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-32-loop/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ loop {
+ println!("again!");
+ }
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.lock
new file mode 100644
index 000000000..9942b362a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/src/main.rs
new file mode 100644
index 000000000..683d18bc1
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let mut counter = 0;
+
+ let result = loop {
+ counter += 1;
+
+ if counter == 10 {
+ break counter * 2;
+ }
+ };
+
+ println!("The result is {result}");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.lock
new file mode 100644
index 000000000..9942b362a
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "loops"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.toml
new file mode 100644
index 000000000..810e8bbc0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "loops"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/src/main.rs
new file mode 100644
index 000000000..df5b305bc
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/no-listing-34-for-range/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ for number in (1..4).rev() {
+ println!("{number}!");
+ }
+ println!("LIFTOFF!!!");
+}
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.lock b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.lock
new file mode 100644
index 000000000..b5664bc33
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "no_type_annotations"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.toml b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.toml
new file mode 100644
index 000000000..8ad4d5aa6
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "no_type_annotations"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/output.txt b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/output.txt
new file mode 100644
index 000000000..d9807cee0
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/output.txt
@@ -0,0 +1,10 @@
+$ cargo build
+ Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
+error[E0282]: type annotations needed
+ --> src/main.rs:2:9
+ |
+2 | let guess = "42".parse().expect("Not a number!");
+ | ^^^^^ consider giving `guess` a type
+
+For more information about this error, try `rustc --explain E0282`.
+error: could not compile `no_type_annotations` due to previous error
diff --git a/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/src/main.rs b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/src/main.rs
new file mode 100644
index 000000000..f41c55805
--- /dev/null
+++ b/src/doc/book/listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ let guess = "42".parse().expect("Not a number!");
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.lock
new file mode 100644
index 000000000..9e4e62ddf
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/rustfmt-ignore b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/src/main.rs
new file mode 100644
index 000000000..148ad84c9
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-01/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ { // s is not valid here, it’s not yet declared
+ let s = "hello"; // s is valid from this point forward
+
+ // do stuff with s
+ } // this scope is now over, and s is no longer valid
+ // ANCHOR_END: here
+} \ No newline at end of file
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/src/main.rs
new file mode 100644
index 000000000..de0f1b325
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-02/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let x = 5;
+ let y = x;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.lock
new file mode 100644
index 000000000..9e4e62ddf
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/rustfmt-ignore b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/src/main.rs
new file mode 100644
index 000000000..b001cc5f4
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-03/src/main.rs
@@ -0,0 +1,23 @@
+fn main() {
+ let s = String::from("hello"); // s comes into scope
+
+ takes_ownership(s); // s's value moves into the function...
+ // ... and so is no longer valid here
+
+ let x = 5; // x comes into scope
+
+ makes_copy(x); // x would move into the function,
+ // but i32 is Copy, so it's okay to still
+ // use x afterward
+
+} // Here, x goes out of scope, then s. But because s's value was moved, nothing
+ // special happens.
+
+fn takes_ownership(some_string: String) { // some_string comes into scope
+ println!("{}", some_string);
+} // Here, some_string goes out of scope and `drop` is called. The backing
+ // memory is freed.
+
+fn makes_copy(some_integer: i32) { // some_integer comes into scope
+ println!("{}", some_integer);
+} // Here, some_integer goes out of scope. Nothing special happens.
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.lock
new file mode 100644
index 000000000..9e4e62ddf
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/rustfmt-ignore b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/src/main.rs
new file mode 100644
index 000000000..e206bec7a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-04/src/main.rs
@@ -0,0 +1,29 @@
+fn main() {
+ let s1 = gives_ownership(); // gives_ownership moves its return
+ // value into s1
+
+ let s2 = String::from("hello"); // s2 comes into scope
+
+ let s3 = takes_and_gives_back(s2); // s2 is moved into
+ // takes_and_gives_back, which also
+ // moves its return value into s3
+} // Here, s3 goes out of scope and is dropped. s2 was moved, so nothing
+ // happens. s1 goes out of scope and is dropped.
+
+fn gives_ownership() -> String { // gives_ownership will move its
+ // return value into the function
+ // that calls it
+
+ let some_string = String::from("yours"); // some_string comes into scope
+
+ some_string // some_string is returned and
+ // moves out to the calling
+ // function
+}
+
+// This function takes a String and returns one
+fn takes_and_gives_back(a_string: String) -> String { // a_string comes into
+ // scope
+
+ a_string // a_string is returned and moves out to the calling function
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/src/main.rs
new file mode 100644
index 000000000..22aee1419
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-05/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let s1 = String::from("hello");
+
+ let (s2, len) = calculate_length(s1);
+
+ println!("The length of '{}' is {}.", s2, len);
+}
+
+fn calculate_length(s: String) -> (String, usize) {
+ let length = s.len(); // len() returns the length of a String
+
+ (s, length)
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/output.txt b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/output.txt
new file mode 100644
index 000000000..1176f4e3a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling ownership v0.1.0 (file:///projects/ownership)
+error[E0596]: cannot borrow `*some_string` as mutable, as it is behind a `&` reference
+ --> src/main.rs:8:5
+ |
+7 | fn change(some_string: &String) {
+ | ------- help: consider changing this to be a mutable reference: `&mut String`
+8 | some_string.push_str(", world");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `some_string` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+
+For more information about this error, try `rustc --explain E0596`.
+error: could not compile `ownership` due to previous error
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/src/main.rs
new file mode 100644
index 000000000..330ffa68a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-06/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let s = String::from("hello");
+
+ change(&s);
+}
+
+fn change(some_string: &String) {
+ some_string.push_str(", world");
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/src/main.rs
new file mode 100644
index 000000000..3bb3c8580
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-07/src/main.rs
@@ -0,0 +1,21 @@
+// ANCHOR: here
+fn first_word(s: &String) -> usize {
+ // ANCHOR: as_bytes
+ let bytes = s.as_bytes();
+ // ANCHOR_END: as_bytes
+
+ // ANCHOR: iter
+ for (i, &item) in bytes.iter().enumerate() {
+ // ANCHOR_END: iter
+ // ANCHOR: inside_for
+ if item == b' ' {
+ return i;
+ }
+ }
+
+ s.len()
+ // ANCHOR_END: inside_for
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/src/main.rs
new file mode 100644
index 000000000..b6182fe2b
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-08/src/main.rs
@@ -0,0 +1,24 @@
+fn first_word(s: &String) -> usize {
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return i;
+ }
+ }
+
+ s.len()
+}
+
+// ANCHOR: here
+fn main() {
+ let mut s = String::from("hello world");
+
+ let word = first_word(&s); // word will get the value 5
+
+ s.clear(); // this empties the String, making it equal to ""
+
+ // word still has the value 5 here, but there's no more string that
+ // we could meaningfully use the value 5 with. word is now totally invalid!
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs
new file mode 100644
index 000000000..5a6ceaa1e
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/listing-04-09/src/main.rs
@@ -0,0 +1,36 @@
+// ANCHOR: here
+fn first_word(s: &str) -> &str {
+ // ANCHOR_END: here
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+
+// ANCHOR: usage
+fn main() {
+ let my_string = String::from("hello world");
+
+ // `first_word` works on slices of `String`s, whether partial or whole
+ let word = first_word(&my_string[0..6]);
+ let word = first_word(&my_string[..]);
+ // `first_word` also works on references to `String`s, which are equivalent
+ // to whole slices of `String`s
+ let word = first_word(&my_string);
+
+ let my_string_literal = "hello world";
+
+ // `first_word` works on slices of string literals, whether partial or whole
+ let word = first_word(&my_string_literal[0..6]);
+ let word = first_word(&my_string_literal[..]);
+
+ // Because string literals *are* string slices already,
+ // this works too, without the slice syntax!
+ let word = first_word(my_string_literal);
+}
+// ANCHOR_END: usage
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/src/main.rs
new file mode 100644
index 000000000..b68f0f1e7
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("hello");
+
+ s.push_str(", world!"); // push_str() appends a literal to a String
+
+ println!("{}", s); // This will print `hello, world!`
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.lock
new file mode 100644
index 000000000..9e4e62ddf
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/rustfmt-ignore b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/src/main.rs
new file mode 100644
index 000000000..7e6d46f83
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-02-string-scope/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ {
+ let s = String::from("hello"); // s is valid from this point forward
+
+ // do stuff with s
+ } // this scope is now over, and s is no
+ // longer valid
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/src/main.rs
new file mode 100644
index 000000000..a5817e714
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-03-string-move/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("hello");
+ let s2 = s1;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/output.txt b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/output.txt
new file mode 100644
index 000000000..6435eeb44
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/output.txt
@@ -0,0 +1,17 @@
+$ cargo run
+ Compiling ownership v0.1.0 (file:///projects/ownership)
+error[E0382]: borrow of moved value: `s1`
+ --> src/main.rs:5:28
+ |
+2 | let s1 = String::from("hello");
+ | -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
+3 | let s2 = s1;
+ | -- value moved here
+4 |
+5 | println!("{}, world!", s1);
+ | ^^ value borrowed here after move
+ |
+ = note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+For more information about this error, try `rustc --explain E0382`.
+error: could not compile `ownership` due to previous error
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/src/main.rs
new file mode 100644
index 000000000..d0b9f1879
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("hello");
+ let s2 = s1;
+
+ println!("{}, world!", s1);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/src/main.rs
new file mode 100644
index 000000000..4e61cc1a1
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-05-clone/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("hello");
+ let s2 = s1.clone();
+
+ println!("s1 = {}, s2 = {}", s1, s2);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/src/main.rs
new file mode 100644
index 000000000..63a1fae24
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-06-copy/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let x = 5;
+ let y = x;
+
+ println!("x = {}, y = {}", x, y);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs
new file mode 100644
index 000000000..fd32a5fc9
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs
@@ -0,0 +1,15 @@
+// ANCHOR: all
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("hello");
+
+ let len = calculate_length(&s1);
+ // ANCHOR_END: here
+
+ println!("The length of '{}' is {}.", s1, len);
+}
+
+fn calculate_length(s: &String) -> usize {
+ s.len()
+}
+// ANCHOR_END: all
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.lock
new file mode 100644
index 000000000..9e4e62ddf
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/rustfmt-ignore b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs
new file mode 100644
index 000000000..6686a801c
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ let s1 = String::from("hello");
+
+ let len = calculate_length(&s1);
+
+ println!("The length of '{}' is {}.", s1, len);
+}
+
+// ANCHOR: here
+fn calculate_length(s: &String) -> usize { // s is a reference to a String
+ s.len()
+} // Here, s goes out of scope. But because it does not have ownership of what
+ // it refers to, it is not dropped.
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs
new file mode 100644
index 000000000..fdf7f0a6f
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let mut s = String::from("hello");
+
+ change(&mut s);
+}
+
+fn change(some_string: &mut String) {
+ some_string.push_str(", world");
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/output.txt b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/output.txt
new file mode 100644
index 000000000..71c29f68f
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/output.txt
@@ -0,0 +1,15 @@
+$ cargo run
+ Compiling ownership v0.1.0 (file:///projects/ownership)
+error[E0499]: cannot borrow `s` as mutable more than once at a time
+ --> src/main.rs:5:14
+ |
+4 | let r1 = &mut s;
+ | ------ first mutable borrow occurs here
+5 | let r2 = &mut s;
+ | ^^^^^^ second mutable borrow occurs here
+6 |
+7 | println!("{}, {}", r1, r2);
+ | -- first borrow later used here
+
+For more information about this error, try `rustc --explain E0499`.
+error: could not compile `ownership` due to previous error
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/src/main.rs
new file mode 100644
index 000000000..ddbf8120f
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("hello");
+
+ let r1 = &mut s;
+ let r2 = &mut s;
+
+ println!("{}, {}", r1, r2);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/src/main.rs
new file mode 100644
index 000000000..4b1a5a383
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("hello");
+
+ {
+ let r1 = &mut s;
+ } // r1 goes out of scope here, so we can make a new reference with no problems.
+
+ let r2 = &mut s;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/output.txt b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/output.txt
new file mode 100644
index 000000000..df94c30e9
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling ownership v0.1.0 (file:///projects/ownership)
+error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
+ --> src/main.rs:6:14
+ |
+4 | let r1 = &s; // no problem
+ | -- immutable borrow occurs here
+5 | let r2 = &s; // no problem
+6 | let r3 = &mut s; // BIG PROBLEM
+ | ^^^^^^ mutable borrow occurs here
+7 |
+8 | println!("{}, {}, and {}", r1, r2, r3);
+ | -- immutable borrow later used here
+
+For more information about this error, try `rustc --explain E0502`.
+error: could not compile `ownership` due to previous error
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/src/main.rs
new file mode 100644
index 000000000..0da04c010
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("hello");
+
+ let r1 = &s; // no problem
+ let r2 = &s; // no problem
+ let r3 = &mut s; // BIG PROBLEM
+
+ println!("{}, {}, and {}", r1, r2, r3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/src/main.rs
new file mode 100644
index 000000000..861944966
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("hello");
+
+ let r1 = &s; // no problem
+ let r2 = &s; // no problem
+ println!("{} and {}", r1, r2);
+ // variables r1 and r2 will not be used after this point
+
+ let r3 = &mut s; // no problem
+ println!("{}", r3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt
new file mode 100644
index 000000000..fddca683b
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling ownership v0.1.0 (file:///projects/ownership)
+error[E0106]: missing lifetime specifier
+ --> src/main.rs:5:16
+ |
+5 | fn dangle() -> &String {
+ | ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
+help: consider using the `'static` lifetime
+ |
+5 | fn dangle() -> &'static String {
+ | ~~~~~~~~
+
+For more information about this error, try `rustc --explain E0106`.
+error: could not compile `ownership` due to previous error
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/src/main.rs
new file mode 100644
index 000000000..b10269781
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-14-dangling-reference/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let reference_to_nothing = dangle();
+}
+
+fn dangle() -> &String {
+ let s = String::from("hello");
+
+ &s
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.lock
new file mode 100644
index 000000000..9e4e62ddf
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/rustfmt-ignore b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/src/main.rs
new file mode 100644
index 000000000..9fbb372a0
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let reference_to_nothing = dangle();
+}
+
+// ANCHOR: here
+fn dangle() -> &String { // dangle returns a reference to a String
+
+ let s = String::from("hello"); // s is a new String
+
+ &s // we return a reference to the String, s
+} // Here, s goes out of scope, and is dropped. Its memory goes away.
+ // Danger!
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs
new file mode 100644
index 000000000..9c20a3b2d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ let string = no_dangle();
+}
+
+// ANCHOR: here
+fn no_dangle() -> String {
+ let s = String::from("hello");
+
+ s
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs
new file mode 100644
index 000000000..44163af99
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let s = String::from("hello world");
+
+ let hello = &s[0..5];
+ let world = &s[6..11];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs
new file mode 100644
index 000000000..f44a970da
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs
@@ -0,0 +1,15 @@
+// ANCHOR: here
+fn first_word(s: &String) -> &str {
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.lock b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.toml b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/output.txt b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/output.txt
new file mode 100644
index 000000000..62dc4ad52
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling ownership v0.1.0 (file:///projects/ownership)
+error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
+ --> src/main.rs:18:5
+ |
+16 | let word = first_word(&s);
+ | -- immutable borrow occurs here
+17 |
+18 | s.clear(); // error!
+ | ^^^^^^^^^ mutable borrow occurs here
+19 |
+20 | println!("the first word is: {}", word);
+ | ---- immutable borrow later used here
+
+For more information about this error, try `rustc --explain E0502`.
+error: could not compile `ownership` due to previous error
diff --git a/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs
new file mode 100644
index 000000000..99e04018d
--- /dev/null
+++ b/src/doc/book/listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs
@@ -0,0 +1,23 @@
+fn first_word(s: &String) -> &str {
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+
+// ANCHOR: here
+fn main() {
+ let mut s = String::from("hello world");
+
+ let word = first_word(&s);
+
+ s.clear(); // error!
+
+ println!("the first word is: {}", word);
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/src/main.rs
new file mode 100644
index 000000000..16dd15b29
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-01/src/main.rs
@@ -0,0 +1,10 @@
+// ANCHOR: here
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/src/main.rs
new file mode 100644
index 000000000..e0f7a6cd3
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-02/src/main.rs
@@ -0,0 +1,17 @@
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+
+// ANCHOR: here
+fn main() {
+ let user1 = User {
+ email: String::from("someone@example.com"),
+ username: String::from("someusername123"),
+ active: true,
+ sign_in_count: 1,
+ };
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/src/main.rs
new file mode 100644
index 000000000..7a078e7e8
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-03/src/main.rs
@@ -0,0 +1,19 @@
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+
+// ANCHOR: here
+fn main() {
+ let mut user1 = User {
+ email: String::from("someone@example.com"),
+ username: String::from("someusername123"),
+ active: true,
+ sign_in_count: 1,
+ };
+
+ user1.email = String::from("anotheremail@example.com");
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/src/main.rs
new file mode 100644
index 000000000..aa7823af4
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-04/src/main.rs
@@ -0,0 +1,24 @@
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+
+// ANCHOR: here
+fn build_user(email: String, username: String) -> User {
+ User {
+ email: email,
+ username: username,
+ active: true,
+ sign_in_count: 1,
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let user1 = build_user(
+ String::from("someone@example.com"),
+ String::from("someusername123"),
+ );
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/src/main.rs
new file mode 100644
index 000000000..8d84a3060
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-05/src/main.rs
@@ -0,0 +1,24 @@
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+
+// ANCHOR: here
+fn build_user(email: String, username: String) -> User {
+ User {
+ email,
+ username,
+ active: true,
+ sign_in_count: 1,
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let user1 = build_user(
+ String::from("someone@example.com"),
+ String::from("someusername123"),
+ );
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/src/main.rs
new file mode 100644
index 000000000..15e7690e1
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-06/src/main.rs
@@ -0,0 +1,28 @@
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+
+// ANCHOR: here
+fn main() {
+ // --snip--
+ // ANCHOR_END: here
+
+ let user1 = User {
+ email: String::from("someone@example.com"),
+ username: String::from("someusername123"),
+ active: true,
+ sign_in_count: 1,
+ };
+ // ANCHOR: here
+
+ let user2 = User {
+ active: user1.active,
+ username: user1.username,
+ email: String::from("another@example.com"),
+ sign_in_count: user1.sign_in_count,
+ };
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/src/main.rs
new file mode 100644
index 000000000..008ad18f6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-07/src/main.rs
@@ -0,0 +1,26 @@
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+
+// ANCHOR: here
+fn main() {
+ // --snip--
+ // ANCHOR_END: here
+
+ let user1 = User {
+ email: String::from("someone@example.com"),
+ username: String::from("someusername123"),
+ active: true,
+ sign_in_count: 1,
+ };
+ // ANCHOR: here
+
+ let user2 = User {
+ email: String::from("another@example.com"),
+ ..user1
+ };
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/output.txt
new file mode 100644
index 000000000..c44b58238
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.42s
+ Running `target/debug/rectangles`
+The area of the rectangle is 1500 square pixels.
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs
new file mode 100644
index 000000000..f324529fd
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs
@@ -0,0 +1,17 @@
+// ANCHOR: all
+fn main() {
+ let width1 = 30;
+ let height1 = 50;
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ area(width1, height1)
+ );
+}
+
+// ANCHOR: here
+fn area(width: u32, height: u32) -> u32 {
+ // ANCHOR_END: here
+ width * height
+}
+// ANCHOR_END: all
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/src/main.rs
new file mode 100644
index 000000000..d4b77ba7a
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-09/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ let rect1 = (30, 50);
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ area(rect1)
+ );
+}
+
+fn area(dimensions: (u32, u32)) -> u32 {
+ dimensions.0 * dimensions.1
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/src/main.rs
new file mode 100644
index 000000000..62ef9acd8
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-10/src/main.rs
@@ -0,0 +1,20 @@
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ area(&rect1)
+ );
+}
+
+fn area(rectangle: &Rectangle) -> u32 {
+ rectangle.width * rectangle.height
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/output.txt
new file mode 100644
index 000000000..b761fccd6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/output.txt
@@ -0,0 +1,14 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+error[E0277]: `Rectangle` doesn't implement `std::fmt::Display`
+ --> src/main.rs:12:29
+ |
+12 | println!("rect1 is {}", rect1);
+ | ^^^^^ `Rectangle` cannot be formatted with the default formatter
+ |
+ = help: the trait `std::fmt::Display` is not implemented for `Rectangle`
+ = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+ = note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `rectangles` due to previous error
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/src/main.rs
new file mode 100644
index 000000000..0ff8dcc8c
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-11/src/main.rs
@@ -0,0 +1,13 @@
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!("rect1 is {}", rect1);
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/output.txt
new file mode 100644
index 000000000..c37be6b5b
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/rectangles`
+rect1 is Rectangle { width: 30, height: 50 }
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/src/main.rs
new file mode 100644
index 000000000..2ffc4b8e7
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-12/src/main.rs
@@ -0,0 +1,14 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!("rect1 is {:?}", rect1);
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/src/main.rs
new file mode 100644
index 000000000..e4f45e868
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-13/src/main.rs
@@ -0,0 +1,23 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ rect1.area()
+ );
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/src/main.rs
new file mode 100644
index 000000000..843dab481
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-14/src/main.rs
@@ -0,0 +1,17 @@
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+ let rect2 = Rectangle {
+ width: 10,
+ height: 40,
+ };
+ let rect3 = Rectangle {
+ width: 60,
+ height: 45,
+ };
+
+ println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
+ println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/src/main.rs
new file mode 100644
index 000000000..e6a32723f
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-15/src/main.rs
@@ -0,0 +1,35 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+// ANCHOR: here
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+ let rect2 = Rectangle {
+ width: 10,
+ height: 40,
+ };
+ let rect3 = Rectangle {
+ width: 60,
+ height: 45,
+ };
+
+ println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
+ println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/src/main.rs
new file mode 100644
index 000000000..a5d3f772a
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/listing-05-16/src/main.rs
@@ -0,0 +1,37 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+// ANCHOR: here
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+}
+
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+ let rect2 = Rectangle {
+ width: 10,
+ height: 40,
+ };
+ let rect3 = Rectangle {
+ width: 60,
+ height: 45,
+ };
+
+ println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
+ println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/src/main.rs
new file mode 100644
index 000000000..0d993162b
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/src/main.rs
@@ -0,0 +1,7 @@
+struct Color(i32, i32, i32);
+struct Point(i32, i32, i32);
+
+fn main() {
+ let black = Color(0, 0, 0);
+ let origin = Point(0, 0, 0);
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.lock
new file mode 100644
index 000000000..bede081a0
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "structs"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.toml
new file mode 100644
index 000000000..d36dbc1d3
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/output.txt
new file mode 100644
index 000000000..e28da599c
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/output.txt
@@ -0,0 +1,31 @@
+$ cargo run
+ Compiling structs v0.1.0 (file:///projects/structs)
+error[E0106]: missing lifetime specifier
+ --> src/main.rs:3:15
+ |
+3 | username: &str,
+ | ^ expected named lifetime parameter
+ |
+help: consider introducing a named lifetime parameter
+ |
+1 ~ struct User<'a> {
+2 | active: bool,
+3 ~ username: &'a str,
+ |
+
+error[E0106]: missing lifetime specifier
+ --> src/main.rs:4:12
+ |
+4 | email: &str,
+ | ^ expected named lifetime parameter
+ |
+help: consider introducing a named lifetime parameter
+ |
+1 ~ struct User<'a> {
+2 | active: bool,
+3 | username: &str,
+4 ~ email: &'a str,
+ |
+
+For more information about this error, try `rustc --explain E0106`.
+error: could not compile `structs` due to 2 previous errors
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/src/main.rs
new file mode 100644
index 000000000..96092d042
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/src/main.rs
@@ -0,0 +1,15 @@
+struct User {
+ active: bool,
+ username: &str,
+ email: &str,
+ sign_in_count: u64,
+}
+
+fn main() {
+ let user1 = User {
+ email: "someone@example.com",
+ username: "someusername123",
+ active: true,
+ sign_in_count: 1,
+ };
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs
new file mode 100644
index 000000000..47fedc552
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs
@@ -0,0 +1,20 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+// ANCHOR: here
+impl Rectangle {
+ fn square(size: u32) -> Self {
+ Self {
+ width: size,
+ height: size,
+ }
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let sq = Rectangle::square(3);
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.lock
new file mode 100644
index 000000000..fb30ed9c8
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "structs"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.toml
new file mode 100644
index 000000000..3232b6065
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "structs"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/src/main.rs
new file mode 100644
index 000000000..d48c94e99
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/src/main.rs
@@ -0,0 +1,5 @@
+struct AlwaysEqual;
+
+fn main() {
+ let subject = AlwaysEqual;
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/output.txt
new file mode 100644
index 000000000..268585995
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/output.txt
@@ -0,0 +1,9 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.61s
+ Running `target/debug/rectangles`
+[src/main.rs:10] 30 * scale = 60
+[src/main.rs:14] &rect1 = Rectangle {
+ width: 60,
+ height: 50,
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/src/main.rs
new file mode 100644
index 000000000..dd0342959
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/src/main.rs
@@ -0,0 +1,15 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let scale = 2;
+ let rect1 = Rectangle {
+ width: dbg!(30 * scale),
+ height: 50,
+ };
+
+ dbg!(&rect1);
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/src/main.rs
new file mode 100644
index 000000000..00e1de83b
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/src/main.rs
@@ -0,0 +1,24 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+// ANCHOR: here
+impl Rectangle {
+ fn width(&self) -> bool {
+ self.width > 0
+ }
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ if rect1.width() {
+ println!("The rectangle has a nonzero width; it is {}", rect1.width);
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/output.txt
new file mode 100644
index 000000000..69c8b38a6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/output.txt
@@ -0,0 +1,18 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+error[E0277]: `Rectangle` doesn't implement `Debug`
+ --> src/main.rs:12:31
+ |
+12 | println!("rect1 is {:?}", rect1);
+ | ^^^^^ `Rectangle` cannot be formatted using `{:?}`
+ |
+ = help: the trait `Debug` is not implemented for `Rectangle`
+ = note: add `#[derive(Debug)]` to `Rectangle` or manually `impl Debug for Rectangle`
+ = note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)
+help: consider annotating `Rectangle` with `#[derive(Debug)]`
+ |
+1 | #[derive(Debug)]
+ |
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `rectangles` due to previous error
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/src/main.rs
new file mode 100644
index 000000000..019a357ab
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/src/main.rs
@@ -0,0 +1,13 @@
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!("rect1 is {:?}", rect1);
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.lock b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.lock
new file mode 100644
index 000000000..4aabe7da6
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangles"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.toml b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/output.txt b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/output.txt
new file mode 100644
index 000000000..db6deed9b
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/output.txt
@@ -0,0 +1,8 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/rectangles`
+rect1 is Rectangle {
+ width: 30,
+ height: 50,
+}
diff --git a/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/src/main.rs b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/src/main.rs
new file mode 100644
index 000000000..84e32aee4
--- /dev/null
+++ b/src/doc/book/listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/src/main.rs
@@ -0,0 +1,14 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!("rect1 is {:#?}", rect1);
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/src/main.rs
new file mode 100644
index 000000000..5b688e0f2
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-01/src/main.rs
@@ -0,0 +1,23 @@
+fn main() {
+ // ANCHOR: here
+ enum IpAddrKind {
+ V4,
+ V6,
+ }
+
+ struct IpAddr {
+ kind: IpAddrKind,
+ address: String,
+ }
+
+ let home = IpAddr {
+ kind: IpAddrKind::V4,
+ address: String::from("127.0.0.1"),
+ };
+
+ let loopback = IpAddr {
+ kind: IpAddrKind::V6,
+ address: String::from("::1"),
+ };
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs
new file mode 100644
index 000000000..3ba749788
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs
@@ -0,0 +1,10 @@
+// ANCHOR: here
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/src/main.rs
new file mode 100644
index 000000000..93dce48cb
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-03/src/main.rs
@@ -0,0 +1,19 @@
+// ANCHOR: here
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter,
+}
+
+fn value_in_cents(coin: Coin) -> u8 {
+ match coin {
+ Coin::Penny => 1,
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter => 25,
+ }
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/src/main.rs
new file mode 100644
index 000000000..3ba384fba
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-04/src/main.rs
@@ -0,0 +1,17 @@
+// ANCHOR: here
+#[derive(Debug)] // so we can inspect the state in a minute
+enum UsState {
+ Alabama,
+ Alaska,
+ // --snip--
+}
+
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter(UsState),
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs
new file mode 100644
index 000000000..c86190aa7
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs
@@ -0,0 +1,18 @@
+fn main() {
+ // ANCHOR: here
+ fn plus_one(x: Option<i32>) -> Option<i32> {
+ match x {
+ // ANCHOR: first_arm
+ None => None,
+ // ANCHOR_END: first_arm
+ // ANCHOR: second_arm
+ Some(i) => Some(i + 1),
+ // ANCHOR_END: second_arm
+ }
+ }
+
+ let five = Some(5);
+ let six = plus_one(five);
+ let none = plus_one(None);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/src/main.rs
new file mode 100644
index 000000000..dc2bffb91
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/listing-06-06/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let config_max = Some(3u8);
+ match config_max {
+ Some(max) => println!("The maximum is configured to be {}", max),
+ _ => (),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs
new file mode 100644
index 000000000..c631e56ba
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs
@@ -0,0 +1,22 @@
+// ANCHOR: def
+enum IpAddrKind {
+ V4,
+ V6,
+}
+// ANCHOR_END: def
+
+fn main() {
+ // ANCHOR: instance
+ let four = IpAddrKind::V4;
+ let six = IpAddrKind::V6;
+ // ANCHOR_END: instance
+
+ // ANCHOR: fn_call
+ route(IpAddrKind::V4);
+ route(IpAddrKind::V6);
+ // ANCHOR_END: fn_call
+}
+
+// ANCHOR: fn
+fn route(ip_kind: IpAddrKind) {}
+// ANCHOR_END: fn
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/src/main.rs
new file mode 100644
index 000000000..7d59b811f
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ enum IpAddr {
+ V4(String),
+ V6(String),
+ }
+
+ let home = IpAddr::V4(String::from("127.0.0.1"));
+
+ let loopback = IpAddr::V6(String::from("::1"));
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/src/main.rs
new file mode 100644
index 000000000..844a14041
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ enum IpAddr {
+ V4(u8, u8, u8, u8),
+ V6(String),
+ }
+
+ let home = IpAddr::V4(127, 0, 0, 1);
+
+ let loopback = IpAddr::V6(String::from("::1"));
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/src/main.rs
new file mode 100644
index 000000000..df451be8b
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/src/main.rs
@@ -0,0 +1,11 @@
+// ANCHOR: here
+struct QuitMessage; // unit struct
+struct MoveMessage {
+ x: i32,
+ y: i32,
+}
+struct WriteMessage(String); // tuple struct
+struct ChangeColorMessage(i32, i32, i32); // tuple struct
+ // ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/src/main.rs
new file mode 100644
index 000000000..66e0b6da1
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+ }
+
+ // ANCHOR: here
+ impl Message {
+ fn call(&self) {
+ // method body would be defined here
+ }
+ }
+
+ let m = Message::Write(String::from("hello"));
+ m.call();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/src/main.rs
new file mode 100644
index 000000000..be552bfa5
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let some_number = Some(5);
+ let some_char = Some('e');
+
+ let absent_number: Option<i32> = None;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/output.txt b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/output.txt
new file mode 100644
index 000000000..d4a040e8e
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/output.txt
@@ -0,0 +1,22 @@
+$ cargo run
+ Compiling enums v0.1.0 (file:///projects/enums)
+error[E0277]: cannot add `Option<i8>` to `i8`
+ --> src/main.rs:5:17
+ |
+5 | let sum = x + y;
+ | ^ no implementation for `i8 + Option<i8>`
+ |
+ = help: the trait `Add<Option<i8>>` is not implemented for `i8`
+ = help: the following other types implement trait `Add<Rhs>`:
+ <&'a f32 as Add<f32>>
+ <&'a f64 as Add<f64>>
+ <&'a i128 as Add<i128>>
+ <&'a i16 as Add<i16>>
+ <&'a i32 as Add<i32>>
+ <&'a i64 as Add<i64>>
+ <&'a i8 as Add<i8>>
+ <&'a isize as Add<isize>>
+ and 48 others
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `enums` due to previous error
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/src/main.rs
new file mode 100644
index 000000000..ec65565d4
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let x: i8 = 5;
+ let y: Option<i8> = Some(5);
+
+ let sum = x + y;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/src/main.rs
new file mode 100644
index 000000000..3f909dcaf
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/src/main.rs
@@ -0,0 +1,22 @@
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter,
+}
+
+// ANCHOR: here
+fn value_in_cents(coin: Coin) -> u8 {
+ match coin {
+ Coin::Penny => {
+ println!("Lucky penny!");
+ 1
+ }
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter => 25,
+ }
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/src/main.rs
new file mode 100644
index 000000000..a4d500c11
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/src/main.rs
@@ -0,0 +1,31 @@
+#[derive(Debug)]
+enum UsState {
+ Alabama,
+ Alaska,
+ // --snip--
+}
+
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter(UsState),
+}
+
+// ANCHOR: here
+fn value_in_cents(coin: Coin) -> u8 {
+ match coin {
+ Coin::Penny => 1,
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter(state) => {
+ println!("State quarter from {:?}!", state);
+ 25
+ }
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ value_in_cents(Coin::Quarter(UsState::Alaska));
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/output.txt b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/output.txt
new file mode 100644
index 000000000..c5a6c51bb
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/output.txt
@@ -0,0 +1,18 @@
+$ cargo run
+ Compiling enums v0.1.0 (file:///projects/enums)
+error[E0004]: non-exhaustive patterns: `None` not covered
+ --> src/main.rs:3:15
+ |
+3 | match x {
+ | ^ pattern `None` not covered
+ |
+note: `Option<i32>` defined here
+ = note: the matched value is of type `Option<i32>`
+help: ensure that all possible cases are being handled by adding a match arm with a wildcard pattern or an explicit pattern as shown
+ |
+4 ~ Some(i) => Some(i + 1),
+5 ~ None => todo!(),
+ |
+
+For more information about this error, try `rustc --explain E0004`.
+error: could not compile `enums` due to previous error
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/src/main.rs
new file mode 100644
index 000000000..f1963d0c9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ fn plus_one(x: Option<i32>) -> Option<i32> {
+ match x {
+ Some(i) => Some(i + 1),
+ }
+ }
+ // ANCHOR_END: here
+
+ let five = Some(5);
+ let six = plus_one(five);
+ let none = plus_one(None);
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/src/main.rs
new file mode 100644
index 000000000..735086d4e
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let config_max = Some(3u8);
+ if let Some(max) = config_max {
+ println!("The maximum is configured to be {}", max);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/src/main.rs
new file mode 100644
index 000000000..12c4c0fec
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/src/main.rs
@@ -0,0 +1,24 @@
+#[derive(Debug)]
+enum UsState {
+ Alabama,
+ Alaska,
+ // --snip--
+}
+
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter(UsState),
+}
+
+fn main() {
+ let coin = Coin::Penny;
+ // ANCHOR: here
+ let mut count = 0;
+ match coin {
+ Coin::Quarter(state) => println!("State quarter from {:?}!", state),
+ _ => count += 1,
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/src/main.rs
new file mode 100644
index 000000000..ba7eda27b
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/src/main.rs
@@ -0,0 +1,25 @@
+#[derive(Debug)]
+enum UsState {
+ Alabama,
+ Alaska,
+ // --snip--
+}
+
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter(UsState),
+}
+
+fn main() {
+ let coin = Coin::Penny;
+ // ANCHOR: here
+ let mut count = 0;
+ if let Coin::Quarter(state) = coin {
+ println!("State quarter from {:?}!", state);
+ } else {
+ count += 1;
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/src/main.rs
new file mode 100644
index 000000000..6ce0b5998
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ let dice_roll = 9;
+ match dice_roll {
+ 3 => add_fancy_hat(),
+ 7 => remove_fancy_hat(),
+ other => move_player(other),
+ }
+
+ fn add_fancy_hat() {}
+ fn remove_fancy_hat() {}
+ fn move_player(num_spaces: u8) {}
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/src/main.rs
new file mode 100644
index 000000000..586e23751
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ let dice_roll = 9;
+ match dice_roll {
+ 3 => add_fancy_hat(),
+ 7 => remove_fancy_hat(),
+ _ => reroll(),
+ }
+
+ fn add_fancy_hat() {}
+ fn remove_fancy_hat() {}
+ fn reroll() {}
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.lock b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.lock
new file mode 100644
index 000000000..f62e8ac45
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "enums"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.toml b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.toml
new file mode 100644
index 000000000..e959295f9
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "enums"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs
new file mode 100644
index 000000000..e791742ee
--- /dev/null
+++ b/src/doc/book/listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ let dice_roll = 9;
+ match dice_roll {
+ 3 => add_fancy_hat(),
+ 7 => remove_fancy_hat(),
+ _ => (),
+ }
+
+ fn add_fancy_hat() {}
+ fn remove_fancy_hat() {}
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/src/lib.rs
new file mode 100644
index 000000000..591e24557
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-01/src/lib.rs
@@ -0,0 +1,15 @@
+mod front_of_house {
+ mod hosting {
+ fn add_to_waitlist() {}
+
+ fn seat_at_table() {}
+ }
+
+ mod serving {
+ fn take_order() {}
+
+ fn serve_order() {}
+
+ fn take_payment() {}
+ }
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/output.txt b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/output.txt
new file mode 100644
index 000000000..481dcb3f7
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/output.txt
@@ -0,0 +1,28 @@
+$ cargo build
+ Compiling restaurant v0.1.0 (file:///projects/restaurant)
+error[E0603]: module `hosting` is private
+ --> src/lib.rs:9:28
+ |
+9 | crate::front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^ private module
+ |
+note: the module `hosting` is defined here
+ --> src/lib.rs:2:5
+ |
+2 | mod hosting {
+ | ^^^^^^^^^^^
+
+error[E0603]: module `hosting` is private
+ --> src/lib.rs:12:21
+ |
+12 | front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^ private module
+ |
+note: the module `hosting` is defined here
+ --> src/lib.rs:2:5
+ |
+2 | mod hosting {
+ | ^^^^^^^^^^^
+
+For more information about this error, try `rustc --explain E0603`.
+error: could not compile `restaurant` due to 2 previous errors
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/src/lib.rs
new file mode 100644
index 000000000..0b8a43c6b
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-03/src/lib.rs
@@ -0,0 +1,13 @@
+mod front_of_house {
+ mod hosting {
+ fn add_to_waitlist() {}
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Absolute path
+ crate::front_of_house::hosting::add_to_waitlist();
+
+ // Relative path
+ front_of_house::hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/output.txt b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/output.txt
new file mode 100644
index 000000000..63eb89a14
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/output.txt
@@ -0,0 +1,28 @@
+$ cargo build
+ Compiling restaurant v0.1.0 (file:///projects/restaurant)
+error[E0603]: function `add_to_waitlist` is private
+ --> src/lib.rs:9:37
+ |
+9 | crate::front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^^^^^^^^^ private function
+ |
+note: the function `add_to_waitlist` is defined here
+ --> src/lib.rs:3:9
+ |
+3 | fn add_to_waitlist() {}
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error[E0603]: function `add_to_waitlist` is private
+ --> src/lib.rs:12:30
+ |
+12 | front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^^^^^^^^^ private function
+ |
+note: the function `add_to_waitlist` is defined here
+ --> src/lib.rs:3:9
+ |
+3 | fn add_to_waitlist() {}
+ | ^^^^^^^^^^^^^^^^^^^^
+
+For more information about this error, try `rustc --explain E0603`.
+error: could not compile `restaurant` due to 2 previous errors
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/src/lib.rs
new file mode 100644
index 000000000..05372dbe5
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-05/src/lib.rs
@@ -0,0 +1,13 @@
+mod front_of_house {
+ pub mod hosting {
+ fn add_to_waitlist() {}
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Absolute path
+ crate::front_of_house::hosting::add_to_waitlist();
+
+ // Relative path
+ front_of_house::hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/src/lib.rs
new file mode 100644
index 000000000..7b89ee7cd
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-07/src/lib.rs
@@ -0,0 +1,13 @@
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Absolute path
+ crate::front_of_house::hosting::add_to_waitlist();
+
+ // Relative path
+ front_of_house::hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/src/lib.rs
new file mode 100644
index 000000000..b3ddb4f0f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-08/src/lib.rs
@@ -0,0 +1,10 @@
+fn deliver_order() {}
+
+mod back_of_house {
+ fn fix_incorrect_order() {
+ cook_order();
+ super::deliver_order();
+ }
+
+ fn cook_order() {}
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/src/lib.rs
new file mode 100644
index 000000000..92c4695d5
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-09/src/lib.rs
@@ -0,0 +1,27 @@
+mod back_of_house {
+ pub struct Breakfast {
+ pub toast: String,
+ seasonal_fruit: String,
+ }
+
+ impl Breakfast {
+ pub fn summer(toast: &str) -> Breakfast {
+ Breakfast {
+ toast: String::from(toast),
+ seasonal_fruit: String::from("peaches"),
+ }
+ }
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Order a breakfast in the summer with Rye toast
+ let mut meal = back_of_house::Breakfast::summer("Rye");
+ // Change our mind about what bread we'd like
+ meal.toast = String::from("Wheat");
+ println!("I'd like {} toast please", meal.toast);
+
+ // The next line won't compile if we uncomment it; we're not allowed
+ // to see or modify the seasonal fruit that comes with the meal
+ // meal.seasonal_fruit = String::from("blueberries");
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/src/lib.rs
new file mode 100644
index 000000000..908f1dfb7
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-10/src/lib.rs
@@ -0,0 +1,11 @@
+mod back_of_house {
+ pub enum Appetizer {
+ Soup,
+ Salad,
+ }
+}
+
+pub fn eat_at_restaurant() {
+ let order1 = back_of_house::Appetizer::Soup;
+ let order2 = back_of_house::Appetizer::Salad;
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/src/lib.rs
new file mode 100644
index 000000000..cf31a9c97
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-11/src/lib.rs
@@ -0,0 +1,11 @@
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/output.txt b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/output.txt
new file mode 100644
index 000000000..39b650540
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/output.txt
@@ -0,0 +1,19 @@
+$ cargo build
+ Compiling restaurant v0.1.0 (file:///projects/restaurant)
+error[E0433]: failed to resolve: use of undeclared crate or module `hosting`
+ --> src/lib.rs:11:9
+ |
+11 | hosting::add_to_waitlist();
+ | ^^^^^^^ use of undeclared crate or module `hosting`
+
+warning: unused import: `crate::front_of_house::hosting`
+ --> src/lib.rs:7:5
+ |
+7 | use crate::front_of_house::hosting;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_imports)]` on by default
+
+For more information about this error, try `rustc --explain E0433`.
+warning: `restaurant` (lib) generated 1 warning
+error: could not compile `restaurant` due to previous error; 1 warning emitted
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/src/lib.rs
new file mode 100644
index 000000000..afc759423
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-12/src/lib.rs
@@ -0,0 +1,13 @@
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+use crate::front_of_house::hosting;
+
+mod customer {
+ pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+ }
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/src/lib.rs
new file mode 100644
index 000000000..c72994efe
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-13/src/lib.rs
@@ -0,0 +1,11 @@
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+use crate::front_of_house::hosting::add_to_waitlist;
+
+pub fn eat_at_restaurant() {
+ add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/src/main.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/src/main.rs
new file mode 100644
index 000000000..4379e7c79
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-14/src/main.rs
@@ -0,0 +1,6 @@
+use std::collections::HashMap;
+
+fn main() {
+ let mut map = HashMap::new();
+ map.insert(1, 2);
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/src/lib.rs
new file mode 100644
index 000000000..bfac3a07a
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-15/src/lib.rs
@@ -0,0 +1,18 @@
+// ANCHOR: here
+use std::fmt;
+use std::io;
+
+fn function1() -> fmt::Result {
+ // --snip--
+ // ANCHOR_END: here
+ Ok(())
+ // ANCHOR: here
+}
+
+fn function2() -> io::Result<()> {
+ // --snip--
+ // ANCHOR_END: here
+ Ok(())
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/src/lib.rs
new file mode 100644
index 000000000..843490b4d
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-16/src/lib.rs
@@ -0,0 +1,18 @@
+// ANCHOR: here
+use std::fmt::Result;
+use std::io::Result as IoResult;
+
+fn function1() -> Result {
+ // --snip--
+ // ANCHOR_END: here
+ Ok(())
+ // ANCHOR: here
+}
+
+fn function2() -> IoResult<()> {
+ // --snip--
+ // ANCHOR_END: here
+ Ok(())
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/src/lib.rs
new file mode 100644
index 000000000..45cf1bac9
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-17/src/lib.rs
@@ -0,0 +1,11 @@
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+pub use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.toml
new file mode 100644
index 000000000..15b3fffca
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/src/main.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/src/main.rs
new file mode 100644
index 000000000..2f69412a4
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-18/src/main.rs
@@ -0,0 +1,32 @@
+use rand::Rng;
+// ANCHOR: here
+// --snip--
+use std::{cmp::Ordering, io};
+// --snip--
+// ANCHOR_END: here
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ println!("The secret number is: {secret_number}");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = guess.trim().parse().expect("Please type a number!");
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/src/lib.rs
new file mode 100644
index 000000000..3fee46c44
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-19/src/lib.rs
@@ -0,0 +1,2 @@
+use std::io;
+use std::io::Write;
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/src/lib.rs
new file mode 100644
index 000000000..341f40a47
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-20/src/lib.rs
@@ -0,0 +1 @@
+use std::io::{self, Write};
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs
new file mode 100644
index 000000000..6875dfdb6
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs
@@ -0,0 +1,3 @@
+pub mod hosting {
+ pub fn add_to_waitlist() {}
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs
new file mode 100644
index 000000000..d6769556a
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs
@@ -0,0 +1,7 @@
+mod front_of_house;
+
+pub use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.toml
new file mode 100644
index 000000000..cc63f6f02
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/Cargo.toml
@@ -0,0 +1,9 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/src/main.rs b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/src/main.rs
new file mode 100644
index 000000000..3a02c9963
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/src/main.rs
@@ -0,0 +1,31 @@
+use rand::Rng;
+// ANCHOR: here
+// --snip--
+use std::cmp::Ordering;
+use std::io;
+// --snip--
+// ANCHOR_END: here
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ println!("The secret number is: {secret_number}");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.lock
new file mode 100644
index 000000000..f25ab358f
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "restaurant"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.toml
new file mode 100644
index 000000000..60cec7cb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "restaurant"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house.rs b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house.rs
new file mode 100644
index 000000000..d0a8154ea
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house.rs
@@ -0,0 +1 @@
+pub mod hosting;
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs
new file mode 100644
index 000000000..d65f3afd1
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs
@@ -0,0 +1 @@
+pub fn add_to_waitlist() {}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/lib.rs b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/lib.rs
new file mode 100644
index 000000000..d6769556a
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/lib.rs
@@ -0,0 +1,7 @@
+mod front_of_house;
+
+pub use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.lock b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.lock
new file mode 100644
index 000000000..4773c201d
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "backyard"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.toml b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.toml
new file mode 100644
index 000000000..6e904abbe
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "backyard"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/output.txt b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/output.txt
new file mode 100644
index 000000000..e36a45eb0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling backyard v0.1.0 (file:///projects/backyard)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.36s
+ Running `target/debug/backyard`
+I'm growing Asparagus!
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden.rs b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden.rs
new file mode 100644
index 000000000..6c7f9b1cb
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden.rs
@@ -0,0 +1 @@
+pub mod vegetables;
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden/vegetables.rs b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden/vegetables.rs
new file mode 100644
index 000000000..b00f785ef
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/garden/vegetables.rs
@@ -0,0 +1,2 @@
+#[derive(Debug)]
+pub struct Asparagus {}
diff --git a/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/main.rs b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/main.rs
new file mode 100644
index 000000000..7a024a9a0
--- /dev/null
+++ b/src/doc/book/listings/ch07-managing-growing-projects/quick-reference-example/src/main.rs
@@ -0,0 +1,8 @@
+use crate::garden::vegetables::Asparagus;
+
+pub mod garden;
+
+fn main() {
+ let plant = Asparagus {};
+ println!("I'm growing {:?}!", plant);
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs
new file mode 100644
index 000000000..45e45581e
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-01/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let v: Vec<i32> = Vec::new();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs
new file mode 100644
index 000000000..3b10a53e8
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-02/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![1, 2, 3];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs
new file mode 100644
index 000000000..147223f9a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-03/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = Vec::new();
+
+ v.push(5);
+ v.push(6);
+ v.push(7);
+ v.push(8);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs
new file mode 100644
index 000000000..fa4e090d5
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-04/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![1, 2, 3, 4, 5];
+
+ let third: &i32 = &v[2];
+ println!("The third element is {}", third);
+
+ let third: Option<&i32> = v.get(2);
+ match third {
+ Some(third) => println!("The third element is {}", third),
+ None => println!("There is no third element."),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs
new file mode 100644
index 000000000..783d9b110
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-05/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![1, 2, 3, 4, 5];
+
+ let does_not_exist = &v[100];
+ let does_not_exist = v.get(100);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt b/src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt
new file mode 100644
index 000000000..ab512a9e6
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling collections v0.1.0 (file:///projects/collections)
+error[E0502]: cannot borrow `v` as mutable because it is also borrowed as immutable
+ --> src/main.rs:6:5
+ |
+4 | let first = &v[0];
+ | - immutable borrow occurs here
+5 |
+6 | v.push(6);
+ | ^^^^^^^^^ mutable borrow occurs here
+7 |
+8 | println!("The first element is: {}", first);
+ | ----- immutable borrow later used here
+
+For more information about this error, try `rustc --explain E0502`.
+error: could not compile `collections` due to previous error
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs
new file mode 100644
index 000000000..1b42274a6
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-06/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = vec![1, 2, 3, 4, 5];
+
+ let first = &v[0];
+
+ v.push(6);
+
+ println!("The first element is: {}", first);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs
new file mode 100644
index 000000000..38b97784b
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-07/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec![100, 32, 57];
+ for i in &v {
+ println!("{}", i);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs
new file mode 100644
index 000000000..c62ba21b4
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-08/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = vec![100, 32, 57];
+ for i in &mut v {
+ *i += 50;
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs
new file mode 100644
index 000000000..c2198883b
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-09/src/main.rs
@@ -0,0 +1,15 @@
+fn main() {
+ // ANCHOR: here
+ enum SpreadsheetCell {
+ Int(i32),
+ Float(f64),
+ Text(String),
+ }
+
+ let row = vec![
+ SpreadsheetCell::Int(3),
+ SpreadsheetCell::Text(String::from("blue")),
+ SpreadsheetCell::Float(10.12),
+ ];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs
new file mode 100644
index 000000000..abda2db66
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-10/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ {
+ let v = vec![1, 2, 3, 4];
+
+ // do stuff with v
+ } // <- v goes out of scope and is freed here
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs
new file mode 100644
index 000000000..4cf4c81c2
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-11/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::new();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs
new file mode 100644
index 000000000..d9e5e768a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-12/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let data = "initial contents";
+
+ let s = data.to_string();
+
+ // the method also works on a literal directly:
+ let s = "initial contents".to_string();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs
new file mode 100644
index 000000000..b81e37453
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-13/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let s = String::from("initial contents");
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs
new file mode 100644
index 000000000..f701fd578
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-14/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ // ANCHOR: here
+ let hello = String::from("السلام عليكم");
+ let hello = String::from("Dobrý den");
+ let hello = String::from("Hello");
+ let hello = String::from("שָׁלוֹם");
+ let hello = String::from("नमस्ते");
+ let hello = String::from("こんにちは");
+ let hello = String::from("안녕하세요");
+ let hello = String::from("你好");
+ let hello = String::from("Olá");
+ // ANCHOR: russian
+ let hello = String::from("Здравствуйте");
+ // ANCHOR_END: russian
+ // ANCHOR: spanish
+ let hello = String::from("Hola");
+ // ANCHOR_END: spanish
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs
new file mode 100644
index 000000000..7dec657d9
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-15/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("foo");
+ s.push_str("bar");
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs
new file mode 100644
index 000000000..8938dc143
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-16/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let mut s1 = String::from("foo");
+ let s2 = "bar";
+ s1.push_str(s2);
+ println!("s2 is {}", s2);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs
new file mode 100644
index 000000000..0a9e8cc0a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-17/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let mut s = String::from("lo");
+ s.push('l');
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs
new file mode 100644
index 000000000..93939a69f
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-18/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("Hello, ");
+ let s2 = String::from("world!");
+ let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt b/src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt
new file mode 100644
index 000000000..95577772e
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/output.txt
@@ -0,0 +1,20 @@
+$ cargo run
+ Compiling collections v0.1.0 (file:///projects/collections)
+error[E0277]: the type `String` cannot be indexed by `{integer}`
+ --> src/main.rs:3:13
+ |
+3 | let h = s1[0];
+ | ^^^^^ `String` cannot be indexed by `{integer}`
+ |
+ = help: the trait `Index<{integer}>` is not implemented for `String`
+ = help: the following other types implement trait `Index<Idx>`:
+ <String as Index<RangeFrom<usize>>>
+ <String as Index<RangeFull>>
+ <String as Index<RangeInclusive<usize>>>
+ <String as Index<RangeTo<usize>>>
+ <String as Index<RangeToInclusive<usize>>>
+ <String as Index<std::ops::Range<usize>>>
+ <str as Index<I>>
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `collections` due to previous error
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs
new file mode 100644
index 000000000..fc08e9cea
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-19/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("hello");
+ let h = s1[0];
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs
new file mode 100644
index 000000000..54c201091
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-20/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs
new file mode 100644
index 000000000..07551549d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-21/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+
+ let team_name = String::from("Blue");
+ let score = scores.get(&team_name).copied().unwrap_or(0);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs
new file mode 100644
index 000000000..2b2a73f94
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-22/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let field_name = String::from("Favorite color");
+ let field_value = String::from("Blue");
+
+ let mut map = HashMap::new();
+ map.insert(field_name, field_value);
+ // field_name and field_value are invalid at this point, try using them and
+ // see what compiler error you get!
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs
new file mode 100644
index 000000000..e8684cf2b
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-23/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Blue"), 25);
+
+ println!("{:?}", scores);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs
new file mode 100644
index 000000000..3ad97b57a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-24/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+ scores.insert(String::from("Blue"), 10);
+
+ scores.entry(String::from("Yellow")).or_insert(50);
+ scores.entry(String::from("Blue")).or_insert(50);
+
+ println!("{:?}", scores);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs b/src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs
new file mode 100644
index 000000000..f3f6aa166
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/listing-08-25/src/main.rs
@@ -0,0 +1,16 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let text = "hello world wonderful world";
+
+ let mut map = HashMap::new();
+
+ for word in text.split_whitespace() {
+ let count = map.entry(word).or_insert(0);
+ *count += 1;
+ }
+
+ println!("{:?}", map);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs
new file mode 100644
index 000000000..4995650d1
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("tic");
+ let s2 = String::from("tac");
+ let s3 = String::from("toe");
+
+ let s = s1 + "-" + &s2 + "-" + &s3;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs
new file mode 100644
index 000000000..4a38e63d2
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-02-format/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let s1 = String::from("tic");
+ let s2 = String::from("tac");
+ let s3 = String::from("toe");
+
+ let s = format!("{}-{}-{}", s1, s2, s3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs
new file mode 100644
index 000000000..2e7dc02e6
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ use std::collections::HashMap;
+
+ let mut scores = HashMap::new();
+
+ scores.insert(String::from("Blue"), 10);
+ scores.insert(String::from("Yellow"), 50);
+
+ for (key, value) in &scores {
+ println!("{}: {}", key, value);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock
new file mode 100644
index 000000000..d3daeff7d
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "collections"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml
new file mode 100644
index 000000000..fe4959823
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "collections"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt
new file mode 100644
index 000000000..98d1f183a
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling collections v0.1.0 (file:///projects/collections)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.43s
+ Running `target/debug/collections`
+thread 'main' panicked at 'byte index 1 is not a char boundary; it is inside 'З' (bytes 0..2) of `Здравствуйте`', library/core/src/str/mod.rs:127:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs
new file mode 100644
index 000000000..9283ff5bd
--- /dev/null
+++ b/src/doc/book/listings/ch08-common-collections/output-only-01-not-char-boundary/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let hello = "Здравствуйте";
+
+ let s = &hello[0..1];
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.lock
new file mode 100644
index 000000000..4fe030fab
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "panic"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.toml
new file mode 100644
index 000000000..660e2c819
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "panic"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-01/output.txt b/src/doc/book/listings/ch09-error-handling/listing-09-01/output.txt
new file mode 100644
index 000000000..89aebb952
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-01/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling panic v0.1.0 (file:///projects/panic)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.27s
+ Running `target/debug/panic`
+thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 99', src/main.rs:4:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-01/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-01/src/main.rs
new file mode 100644
index 000000000..70194abd7
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-01/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ let v = vec![1, 2, 3];
+
+ v[99];
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-03/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-03/src/main.rs
new file mode 100644
index 000000000..2342904ed
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-03/src/main.rs
@@ -0,0 +1,5 @@
+use std::fs::File;
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-04/output.txt b/src/doc/book/listings/ch09-error-handling/listing-09-04/output.txt
new file mode 100644
index 000000000..f776a591c
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-04/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling error-handling v0.1.0 (file:///projects/error-handling)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.73s
+ Running `target/debug/error-handling`
+thread 'main' panicked at 'Problem opening the file: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:8:23
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-04/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-04/src/main.rs
new file mode 100644
index 000000000..69da109fe
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-04/src/main.rs
@@ -0,0 +1,10 @@
+use std::fs::File;
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+
+ let greeting_file = match greeting_file_result {
+ Ok(file) => file,
+ Err(error) => panic!("Problem opening the file: {:?}", error),
+ };
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-05/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-05/src/main.rs
new file mode 100644
index 000000000..83ea01044
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-05/src/main.rs
@@ -0,0 +1,19 @@
+use std::fs::File;
+use std::io::ErrorKind;
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+
+ let greeting_file = match greeting_file_result {
+ Ok(file) => file,
+ Err(error) => match error.kind() {
+ ErrorKind::NotFound => match File::create("hello.txt") {
+ Ok(fc) => fc,
+ Err(e) => panic!("Problem creating the file: {:?}", e),
+ },
+ other_error => {
+ panic!("Problem opening the file: {:?}", other_error);
+ }
+ },
+ };
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-06/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-06/src/main.rs
new file mode 100644
index 000000000..a70734cb5
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-06/src/main.rs
@@ -0,0 +1,24 @@
+// ANCHOR: here
+use std::fs::File;
+use std::io::{self, Read};
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ let username_file_result = File::open("hello.txt");
+
+ let mut username_file = match username_file_result {
+ Ok(file) => file,
+ Err(e) => return Err(e),
+ };
+
+ let mut username = String::new();
+
+ match username_file.read_to_string(&mut username) {
+ Ok(_) => Ok(username),
+ Err(e) => Err(e),
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let username = read_username_from_file().expect("Unable to get username");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-07/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-07/src/main.rs
new file mode 100644
index 000000000..f4564f670
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-07/src/main.rs
@@ -0,0 +1,16 @@
+// ANCHOR: here
+use std::fs::File;
+use std::io;
+use std::io::Read;
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ let mut username_file = File::open("hello.txt")?;
+ let mut username = String::new();
+ username_file.read_to_string(&mut username)?;
+ Ok(username)
+}
+// ANCHOR_END: here
+
+fn main() {
+ let username = read_username_from_file().expect("Unable to get username");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-08/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-08/src/main.rs
new file mode 100644
index 000000000..c3c6e23ef
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-08/src/main.rs
@@ -0,0 +1,17 @@
+// ANCHOR: here
+use std::fs::File;
+use std::io;
+use std::io::Read;
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ let mut username = String::new();
+
+ File::open("hello.txt")?.read_to_string(&mut username)?;
+
+ Ok(username)
+}
+// ANCHOR_END: here
+
+fn main() {
+ let username = read_username_from_file().expect("Unable to get username");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-09/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-09/src/main.rs
new file mode 100644
index 000000000..4597dc2ee
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-09/src/main.rs
@@ -0,0 +1,12 @@
+// ANCHOR: here
+use std::fs;
+use std::io;
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ fs::read_to_string("hello.txt")
+}
+// ANCHOR_END: here
+
+fn main() {
+ let username = read_username_from_file().expect("Unable to get username");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-10/output.txt b/src/doc/book/listings/ch09-error-handling/listing-09-10/output.txt
new file mode 100644
index 000000000..26e4ff8cc
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-10/output.txt
@@ -0,0 +1,15 @@
+$ cargo run
+ Compiling error-handling v0.1.0 (file:///projects/error-handling)
+error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
+ --> src/main.rs:4:48
+ |
+3 | / fn main() {
+4 | | let greeting_file = File::open("hello.txt")?;
+ | | ^ cannot use the `?` operator in a function that returns `()`
+5 | | }
+ | |_- this function should return `Result` or `Option` to accept `?`
+ |
+ = help: the trait `FromResidual<Result<Infallible, std::io::Error>>` is not implemented for `()`
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `error-handling` due to previous error
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-10/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-10/src/main.rs
new file mode 100644
index 000000000..38b005480
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-10/src/main.rs
@@ -0,0 +1,5 @@
+use std::fs::File;
+
+fn main() {
+ let greeting_file = File::open("hello.txt")?;
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.lock
new file mode 100644
index 000000000..7320ae639
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "error-handling"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-11/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-11/src/main.rs
new file mode 100644
index 000000000..bd5322786
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-11/src/main.rs
@@ -0,0 +1,15 @@
+// ANCHOR: here
+fn last_char_of_first_line(text: &str) -> Option<char> {
+ text.lines().next()?.chars().last()
+}
+// ANCHOR_END: here
+
+fn main() {
+ assert_eq!(
+ last_char_of_first_line("Hello, world\nHow are you today?"),
+ Some('d')
+ );
+
+ assert_eq!(last_char_of_first_line(""), None);
+ assert_eq!(last_char_of_first_line("\nhi"), None);
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-12/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-12/src/main.rs
new file mode 100644
index 000000000..b0f7445f4
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-12/src/main.rs
@@ -0,0 +1,8 @@
+use std::error::Error;
+use std::fs::File;
+
+fn main() -> Result<(), Box<dyn Error>> {
+ let greeting_file = File::open("hello.txt")?;
+
+ Ok(())
+}
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.lock b/src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.toml b/src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.toml
new file mode 100644
index 000000000..15b3fffca
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-13/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch09-error-handling/listing-09-13/src/main.rs b/src/doc/book/listings/ch09-error-handling/listing-09-13/src/main.rs
new file mode 100644
index 000000000..9e07c1ee2
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/listing-09-13/src/main.rs
@@ -0,0 +1,55 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+// ANCHOR: here
+pub struct Guess {
+ value: i32,
+}
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 || value > 100 {
+ panic!("Guess value must be between 1 and 100, got {}.", value);
+ }
+
+ Guess { value }
+ }
+
+ pub fn value(&self) -> i32 {
+ self.value
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ loop {
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: i32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ let guess = Guess::new(guess);
+
+ match guess.value().cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.lock b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.lock
new file mode 100644
index 000000000..4fe030fab
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "panic"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.toml b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.toml
new file mode 100644
index 000000000..660e2c819
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "panic"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/output.txt b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/output.txt
new file mode 100644
index 000000000..b25ed85d7
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling panic v0.1.0 (file:///projects/panic)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.25s
+ Running `target/debug/panic`
+thread 'main' panicked at 'crash and burn', src/main.rs:2:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/src/main.rs b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/src/main.rs
new file mode 100644
index 000000000..32a4c243d
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-01-panic/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ panic!("crash and burn");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.lock b/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.toml b/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/src/main.rs b/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/src/main.rs
new file mode 100644
index 000000000..92e9452f1
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-04-unwrap/src/main.rs
@@ -0,0 +1,5 @@
+use std::fs::File;
+
+fn main() {
+ let greeting_file = File::open("hello.txt").unwrap();
+}
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.lock b/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.toml b/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/src/main.rs b/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/src/main.rs
new file mode 100644
index 000000000..3d36fa5b1
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-05-expect/src/main.rs
@@ -0,0 +1,6 @@
+use std::fs::File;
+
+fn main() {
+ let greeting_file = File::open("hello.txt")
+ .expect("hello.txt should be included in this project");
+}
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.lock b/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.lock
new file mode 100644
index 000000000..1fa96b797
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "error-handling"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.toml b/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.toml
new file mode 100644
index 000000000..c496db783
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "error-handling"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/src/main.rs b/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/src/main.rs
new file mode 100644
index 000000000..3e1835266
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ use std::net::IpAddr;
+
+ let home: IpAddr = "127.0.0.1"
+ .parse()
+ .expect("Hardcoded IP address should be valid");
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.lock b/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.lock
new file mode 100644
index 000000000..0a2f222c2
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.lock
@@ -0,0 +1,83 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.toml b/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.toml
new file mode 100644
index 000000000..15b3fffca
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/src/main.rs b/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/src/main.rs
new file mode 100644
index 000000000..fc22cbc5e
--- /dev/null
+++ b/src/doc/book/listings/ch09-error-handling/no-listing-09-guess-out-of-range/src/main.rs
@@ -0,0 +1,47 @@
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ // ANCHOR: here
+ loop {
+ // --snip--
+
+ // ANCHOR_END: here
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ // ANCHOR: here
+ let guess: i32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ if guess < 1 || guess > 100 {
+ println!("The secret number will be between 1 and 100.");
+ continue;
+ }
+
+ match guess.cmp(&secret_number) {
+ // --snip--
+ // ANCHOR_END: here
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ // ANCHOR: here
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/src/main.rs
new file mode 100644
index 000000000..a4dba7ed4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/src/main.rs
@@ -0,0 +1,18 @@
+// ANCHOR: here
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let mut largest = &number_list[0];
+
+ for number in &number_list {
+ if number > largest {
+ largest = number;
+ }
+ }
+
+ println!("The largest number is {}", largest);
+ // ANCHOR_END: here
+ assert_eq!(*largest, 100);
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/src/main.rs
new file mode 100644
index 000000000..8c523a8be
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/src/main.rs
@@ -0,0 +1,25 @@
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let mut largest = &number_list[0];
+
+ for number in &number_list {
+ if number > largest {
+ largest = number;
+ }
+ }
+
+ println!("The largest number is {}", largest);
+
+ let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
+
+ let mut largest = &number_list[0];
+
+ for number in &number_list {
+ if number > largest {
+ largest = number;
+ }
+ }
+
+ println!("The largest number is {}", largest);
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/src/main.rs
new file mode 100644
index 000000000..899222909
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/src/main.rs
@@ -0,0 +1,31 @@
+// ANCHOR: here
+fn largest(list: &[i32]) -> &i32 {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let result = largest(&number_list);
+ println!("The largest number is {}", result);
+ // ANCHOR_END: here
+ assert_eq!(*result, 100);
+ // ANCHOR: here
+
+ let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
+
+ let result = largest(&number_list);
+ println!("The largest number is {}", result);
+ // ANCHOR_END: here
+ assert_eq!(*result, 6000);
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs
new file mode 100644
index 000000000..a47e3f232
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs
@@ -0,0 +1,43 @@
+// ANCHOR: here
+fn largest_i32(list: &[i32]) -> &i32 {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn largest_char(list: &[char]) -> &char {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let result = largest_i32(&number_list);
+ println!("The largest number is {}", result);
+ // ANCHOR_END: here
+ assert_eq!(*result, 100);
+ // ANCHOR: here
+
+ let char_list = vec!['y', 'm', 'a', 'q'];
+
+ let result = largest_char(&char_list);
+ println!("The largest char is {}", result);
+ // ANCHOR_END: here
+ assert_eq!(*result, 'y');
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/output.txt b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/output.txt
new file mode 100644
index 000000000..1a705ed57
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/output.txt
@@ -0,0 +1,17 @@
+$ cargo run
+ Compiling chapter10 v0.1.0 (file:///projects/chapter10)
+error[E0369]: binary operation `>` cannot be applied to type `&T`
+ --> src/main.rs:5:17
+ |
+5 | if item > largest {
+ | ---- ^ ------- &T
+ | |
+ | &T
+ |
+help: consider restricting type parameter `T`
+ |
+1 | fn largest<T: std::cmp::PartialOrd>(list: &[T]) -> &T {
+ | ++++++++++++++++++++++
+
+For more information about this error, try `rustc --explain E0369`.
+error: could not compile `chapter10` due to previous error
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs
new file mode 100644
index 000000000..df33743f7
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs
@@ -0,0 +1,23 @@
+fn largest<T>(list: &[T]) -> &T {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let result = largest(&number_list);
+ println!("The largest number is {}", result);
+
+ let char_list = vec!['y', 'm', 'a', 'q'];
+
+ let result = largest(&char_list);
+ println!("The largest char is {}", result);
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs
new file mode 100644
index 000000000..4252593df
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs
@@ -0,0 +1,9 @@
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+fn main() {
+ let integer = Point { x: 5, y: 10 };
+ let float = Point { x: 1.0, y: 4.0 };
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/output.txt b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/output.txt
new file mode 100644
index 000000000..2482c3843
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/output.txt
@@ -0,0 +1,10 @@
+$ cargo run
+ Compiling chapter10 v0.1.0 (file:///projects/chapter10)
+error[E0308]: mismatched types
+ --> src/main.rs:7:38
+ |
+7 | let wont_work = Point { x: 5, y: 4.0 };
+ | ^^^ expected integer, found floating-point number
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `chapter10` due to previous error
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs
new file mode 100644
index 000000000..7883db1a6
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs
@@ -0,0 +1,8 @@
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+fn main() {
+ let wont_work = Point { x: 5, y: 4.0 };
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs
new file mode 100644
index 000000000..615b78cfd
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs
@@ -0,0 +1,10 @@
+struct Point<T, U> {
+ x: T,
+ y: U,
+}
+
+fn main() {
+ let both_integer = Point { x: 5, y: 10 };
+ let both_float = Point { x: 1.0, y: 4.0 };
+ let integer_and_float = Point { x: 5, y: 4.0 };
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs
new file mode 100644
index 000000000..288b64eac
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs
@@ -0,0 +1,16 @@
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+impl<T> Point<T> {
+ fn x(&self) -> &T {
+ &self.x
+ }
+}
+
+fn main() {
+ let p = Point { x: 5, y: 10 };
+
+ println!("p.x = {}", p.x());
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs
new file mode 100644
index 000000000..4c5b01bdc
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs
@@ -0,0 +1,24 @@
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+impl<T> Point<T> {
+ fn x(&self) -> &T {
+ &self.x
+ }
+}
+
+// ANCHOR: here
+impl Point<f32> {
+ fn distance_from_origin(&self) -> f32 {
+ (self.x.powi(2) + self.y.powi(2)).sqrt()
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let p = Point { x: 5, y: 10 };
+
+ println!("p.x = {}", p.x());
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs
new file mode 100644
index 000000000..86b028108
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs
@@ -0,0 +1,22 @@
+struct Point<X1, Y1> {
+ x: X1,
+ y: Y1,
+}
+
+impl<X1, Y1> Point<X1, Y1> {
+ fn mixup<X2, Y2>(self, other: Point<X2, Y2>) -> Point<X1, Y2> {
+ Point {
+ x: self.x,
+ y: other.y,
+ }
+ }
+}
+
+fn main() {
+ let p1 = Point { x: 5, y: 10.4 };
+ let p2 = Point { x: "Hello", y: 'c' };
+
+ let p3 = p1.mixup(p2);
+
+ println!("p3.x = {}, p3.y = {}", p3.x, p3.y);
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/src/lib.rs
new file mode 100644
index 000000000..cfaedb02f
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/src/lib.rs
new file mode 100644
index 000000000..c4c83329e
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/src/lib.rs
@@ -0,0 +1,31 @@
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
+
+// ANCHOR: here
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {
+ fn summarize(&self) -> String {
+ format!("{}, by {} ({})", self.headline, self.author, self.location)
+ }
+}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/src/lib.rs
new file mode 100644
index 000000000..fb59b84fb
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/src/lib.rs
@@ -0,0 +1,29 @@
+// ANCHOR: here
+pub trait Summary {
+ fn summarize(&self) -> String {
+ String::from("(Read more...)")
+ }
+}
+// ANCHOR_END: here
+
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/src/lib.rs
new file mode 100644
index 000000000..669cc5fdc
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/src/lib.rs
@@ -0,0 +1,22 @@
+use std::fmt::Display;
+
+struct Pair<T> {
+ x: T,
+ y: T,
+}
+
+impl<T> Pair<T> {
+ fn new(x: T, y: T) -> Self {
+ Self { x, y }
+ }
+}
+
+impl<T: Display + PartialOrd> Pair<T> {
+ fn cmp_display(&self) {
+ if self.x >= self.y {
+ println!("The largest member is x = {}", self.x);
+ } else {
+ println!("The largest member is y = {}", self.y);
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/output.txt b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/output.txt
new file mode 100644
index 000000000..b63bf83a1
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/output.txt
@@ -0,0 +1,15 @@
+$ cargo run
+ Compiling chapter10 v0.1.0 (file:///projects/chapter10)
+error[E0597]: `x` does not live long enough
+ --> src/main.rs:6:13
+ |
+6 | r = &x;
+ | ^^ borrowed value does not live long enough
+7 | }
+ | - `x` dropped here while still borrowed
+8 |
+9 | println!("r: {}", r);
+ | - borrow later used here
+
+For more information about this error, try `rustc --explain E0597`.
+error: could not compile `chapter10` due to previous error
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/src/main.rs
new file mode 100644
index 000000000..d71134ea0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ let r;
+
+ {
+ let x = 5;
+ r = &x;
+ }
+
+ println!("r: {}", r);
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.lock
new file mode 100644
index 000000000..6388bb2b5
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/rustfmt-ignore b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/src/main.rs
new file mode 100644
index 000000000..e8ca92328
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ let r; // ---------+-- 'a
+ // |
+ { // |
+ let x = 5; // -+-- 'b |
+ r = &x; // | |
+ } // -+ |
+ // |
+ println!("r: {}", r); // |
+} // ---------+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.lock
new file mode 100644
index 000000000..6388bb2b5
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/rustfmt-ignore b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/rustfmt-ignore
new file mode 100644
index 000000000..9a53c718a
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/rustfmt-ignore
@@ -0,0 +1,3 @@
+We have some weird comments pointing out borrowing scopes that we don't want to change;
+unfortunately I haven't found a way to skip them with rustfmt that works so for now we're going to
+manually skip those listings. See: https://github.com/rust-lang/rustfmt/issues/4028
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/src/main.rs
new file mode 100644
index 000000000..09ae3919c
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ let x = 5; // ----------+-- 'b
+ // |
+ let r = &x; // --+-- 'a |
+ // | |
+ println!("r: {}", r); // | |
+ // --+ |
+} // ----------+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/src/main.rs
new file mode 100644
index 000000000..0f076a71d
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "xyz";
+
+ let result = longest(string1.as_str(), string2);
+ println!("The longest string is {}", result);
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/output.txt b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/output.txt
new file mode 100644
index 000000000..534a984a6
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling chapter10 v0.1.0 (file:///projects/chapter10)
+error[E0106]: missing lifetime specifier
+ --> src/main.rs:9:33
+ |
+9 | fn longest(x: &str, y: &str) -> &str {
+ | ---- ---- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `x` or `y`
+help: consider introducing a named lifetime parameter
+ |
+9 | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
+ | ++++ ++ ++ ++
+
+For more information about this error, try `rustc --explain E0106`.
+error: could not compile `chapter10` due to previous error
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/src/main.rs
new file mode 100644
index 000000000..6af8c9f0d
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/src/main.rs
@@ -0,0 +1,17 @@
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "xyz";
+
+ let result = longest(string1.as_str(), string2);
+ println!("The longest string is {}", result);
+}
+
+// ANCHOR: here
+fn longest(x: &str, y: &str) -> &str {
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/src/main.rs
new file mode 100644
index 000000000..09c3a0daa
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/src/main.rs
@@ -0,0 +1,17 @@
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "xyz";
+
+ let result = longest(string1.as_str(), string2);
+ println!("The longest string is {}", result);
+}
+
+// ANCHOR: here
+fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/src/main.rs
new file mode 100644
index 000000000..836ec7295
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/src/main.rs
@@ -0,0 +1,19 @@
+// ANCHOR: here
+fn main() {
+ let string1 = String::from("long string is long");
+
+ {
+ let string2 = String::from("xyz");
+ let result = longest(string1.as_str(), string2.as_str());
+ println!("The longest string is {}", result);
+ }
+}
+// ANCHOR_END: here
+
+fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/output.txt b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/output.txt
new file mode 100644
index 000000000..7f31ce02c
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/output.txt
@@ -0,0 +1,14 @@
+$ cargo run
+ Compiling chapter10 v0.1.0 (file:///projects/chapter10)
+error[E0597]: `string2` does not live long enough
+ --> src/main.rs:6:44
+ |
+6 | result = longest(string1.as_str(), string2.as_str());
+ | ^^^^^^^^^^^^^^^^ borrowed value does not live long enough
+7 | }
+ | - `string2` dropped here while still borrowed
+8 | println!("The longest string is {}", result);
+ | ------ borrow later used here
+
+For more information about this error, try `rustc --explain E0597`.
+error: could not compile `chapter10` due to previous error
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/src/main.rs
new file mode 100644
index 000000000..2a6fa5898
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/src/main.rs
@@ -0,0 +1,19 @@
+// ANCHOR: here
+fn main() {
+ let string1 = String::from("long string is long");
+ let result;
+ {
+ let string2 = String::from("xyz");
+ result = longest(string1.as_str(), string2.as_str());
+ }
+ println!("The longest string is {}", result);
+}
+// ANCHOR_END: here
+
+fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/src/main.rs
new file mode 100644
index 000000000..2937b194c
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/src/main.rs
@@ -0,0 +1,11 @@
+struct ImportantExcerpt<'a> {
+ part: &'a str,
+}
+
+fn main() {
+ let novel = String::from("Call me Ishmael. Some years ago...");
+ let first_sentence = novel.split('.').next().expect("Could not find a '.'");
+ let i = ImportantExcerpt {
+ part: first_sentence,
+ };
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.lock
new file mode 100644
index 000000000..2aa4918e5
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "ownership"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.toml
new file mode 100644
index 000000000..e8847526d
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "ownership"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/src/main.rs
new file mode 100644
index 000000000..431a261d2
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/src/main.rs
@@ -0,0 +1,29 @@
+// ANCHOR: here
+fn first_word(s: &str) -> &str {
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+// ANCHOR_END: here
+
+fn main() {
+ let my_string = String::from("hello world");
+
+ // first_word works on slices of `String`s
+ let word = first_word(&my_string[..]);
+
+ let my_string_literal = "hello world";
+
+ // first_word works on slices of string literals
+ let word = first_word(&my_string_literal[..]);
+
+ // Because string literals *are* string slices already,
+ // this works too, without the slice syntax!
+ let word = first_word(my_string_literal);
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/lib.rs
new file mode 100644
index 000000000..fa644ca4f
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/lib.rs
@@ -0,0 +1,29 @@
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
+
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {
+ fn summarize(&self) -> String {
+ format!("{}, by {} ({})", self.headline, self.author, self.location)
+ }
+}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/main.rs
new file mode 100644
index 000000000..0b51121d9
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/main.rs
@@ -0,0 +1,14 @@
+use aggregator::{Summary, Tweet};
+
+fn main() {
+ let tweet = Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ };
+
+ println!("1 new tweet: {}", tweet.summarize());
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/lib.rs
new file mode 100644
index 000000000..b6f93a68f
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/lib.rs
@@ -0,0 +1,27 @@
+pub trait Summary {
+ fn summarize(&self) -> String {
+ String::from("(Read more...)")
+ }
+}
+
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/main.rs
new file mode 100644
index 000000000..cc9b98e31
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/main.rs
@@ -0,0 +1,17 @@
+use aggregator::{self, NewsArticle, Summary};
+
+fn main() {
+ // ANCHOR: here
+ let article = NewsArticle {
+ headline: String::from("Penguins win the Stanley Cup Championship!"),
+ location: String::from("Pittsburgh, PA, USA"),
+ author: String::from("Iceburgh"),
+ content: String::from(
+ "The Pittsburgh Penguins once again are the best \
+ hockey team in the NHL.",
+ ),
+ };
+
+ println!("New article available! {}", article.summarize());
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs
new file mode 100644
index 000000000..643906f69
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs
@@ -0,0 +1,24 @@
+// ANCHOR: here
+pub trait Summary {
+ fn summarize_author(&self) -> String;
+
+ fn summarize(&self) -> String {
+ format!("(Read more from {}...)", self.summarize_author())
+ }
+}
+// ANCHOR_END: here
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+// ANCHOR: impl
+impl Summary for Tweet {
+ fn summarize_author(&self) -> String {
+ format!("@{}", self.username)
+ }
+}
+// ANCHOR_END: impl
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/main.rs
new file mode 100644
index 000000000..e05e8e1c6
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/main.rs
@@ -0,0 +1,16 @@
+use aggregator::{self, Summary, Tweet};
+
+fn main() {
+ // ANCHOR: here
+ let tweet = Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ };
+
+ println!("1 new tweet: {}", tweet.summarize());
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/src/lib.rs
new file mode 100644
index 000000000..261994351
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/src/lib.rs
@@ -0,0 +1,35 @@
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
+
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {
+ fn summarize(&self) -> String {
+ format!("{}, by {} ({})", self.headline, self.author, self.location)
+ }
+}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
+
+// ANCHOR: here
+pub fn notify(item: &impl Summary) {
+ println!("Breaking news! {}", item.summarize());
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/src/lib.rs
new file mode 100644
index 000000000..a611fce38
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/src/lib.rs
@@ -0,0 +1,42 @@
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
+
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {
+ fn summarize(&self) -> String {
+ format!("{}, by {} ({})", self.headline, self.author, self.location)
+ }
+}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
+
+// ANCHOR: here
+fn returns_summarizable() -> impl Summary {
+ Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.lock
new file mode 100644
index 000000000..2835471f0
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aggregator"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.toml
new file mode 100644
index 000000000..46f46a7f4
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "aggregator"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/src/lib.rs
new file mode 100644
index 000000000..7cd81d4c3
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/src/lib.rs
@@ -0,0 +1,56 @@
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
+
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {
+ fn summarize(&self) -> String {
+ format!("{}, by {} ({})", self.headline, self.author, self.location)
+ }
+}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
+
+// ANCHOR: here
+fn returns_summarizable(switch: bool) -> impl Summary {
+ if switch {
+ NewsArticle {
+ headline: String::from(
+ "Penguins win the Stanley Cup Championship!",
+ ),
+ location: String::from("Pittsburgh, PA, USA"),
+ author: String::from("Iceburgh"),
+ content: String::from(
+ "The Pittsburgh Penguins once again are the best \
+ hockey team in the NHL.",
+ ),
+ }
+ } else {
+ Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/Cargo.toml
new file mode 100644
index 000000000..4dbde9090
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/src/lib.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/src/lib.rs
new file mode 100644
index 000000000..05b07c31a
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/src/lib.rs
@@ -0,0 +1,9 @@
+// ANCHOR: here
+fn some_function<T, U>(t: &T, u: &U) -> i32
+where
+ T: Display + Clone,
+ U: Clone + Debug,
+{
+ // ANCHOR_END: here
+ unimplemented!()
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/src/main.rs
new file mode 100644
index 000000000..d144305cb
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "efghijklmnopqrstuvwxyz";
+
+ let result = longest(string1.as_str(), string2);
+ println!("The longest string is {}", result);
+}
+
+// ANCHOR: here
+fn longest<'a>(x: &'a str, y: &str) -> &'a str {
+ x
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/output.txt b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/output.txt
new file mode 100644
index 000000000..0c628b697
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/output.txt
@@ -0,0 +1,10 @@
+$ cargo run
+ Compiling chapter10 v0.1.0 (file:///projects/chapter10)
+error[E0515]: cannot return reference to local variable `result`
+ --> src/main.rs:11:5
+ |
+11 | result.as_str()
+ | ^^^^^^^^^^^^^^^ returns a reference to data owned by the current function
+
+For more information about this error, try `rustc --explain E0515`.
+error: could not compile `chapter10` due to previous error
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/src/main.rs
new file mode 100644
index 000000000..aca4be0a7
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "xyz";
+
+ let result = longest(string1.as_str(), string2);
+ println!("The longest string is {}", result);
+}
+
+// ANCHOR: here
+fn longest<'a>(x: &str, y: &str) -> &'a str {
+ let result = String::from("really long string");
+ result.as_str()
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs
new file mode 100644
index 000000000..32ad530b5
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs
@@ -0,0 +1,28 @@
+struct ImportantExcerpt<'a> {
+ part: &'a str,
+}
+
+// ANCHOR: 1st
+impl<'a> ImportantExcerpt<'a> {
+ fn level(&self) -> i32 {
+ 3
+ }
+}
+// ANCHOR_END: 1st
+
+// ANCHOR: 3rd
+impl<'a> ImportantExcerpt<'a> {
+ fn announce_and_return_part(&self, announcement: &str) -> &str {
+ println!("Attention please: {}", announcement);
+ self.part
+ }
+}
+// ANCHOR_END: 3rd
+
+fn main() {
+ let novel = String::from("Call me Ishmael. Some years ago...");
+ let first_sentence = novel.split('.').next().expect("Could not find a '.'");
+ let i = ImportantExcerpt {
+ part: first_sentence,
+ };
+}
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.lock b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.lock
new file mode 100644
index 000000000..e8007a19b
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "chapter10"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.toml b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.toml
new file mode 100644
index 000000000..489f80967
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "chapter10"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/src/main.rs b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/src/main.rs
new file mode 100644
index 000000000..cfafa9a6d
--- /dev/null
+++ b/src/doc/book/listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/src/main.rs
@@ -0,0 +1,31 @@
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "xyz";
+
+ let result = longest_with_an_announcement(
+ string1.as_str(),
+ string2,
+ "Today is someone's birthday!",
+ );
+ println!("The longest string is {}", result);
+}
+
+// ANCHOR: here
+use std::fmt::Display;
+
+fn longest_with_an_announcement<'a, T>(
+ x: &'a str,
+ y: &'a str,
+ ann: T,
+) -> &'a str
+where
+ T: Display,
+{
+ println!("Announcement! {}", ann);
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/output.txt
new file mode 100644
index 000000000..c3e812ed8
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/output.txt
@@ -0,0 +1,16 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.57s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs
new file mode 100644
index 000000000..1b4a90c93
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs
@@ -0,0 +1,8 @@
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() {
+ let result = 2 + 2;
+ assert_eq!(result, 4);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/output.txt
new file mode 100644
index 000000000..0c2fd0327
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/output.txt
@@ -0,0 +1,22 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.72s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 2 tests
+test tests::another ... FAILED
+test tests::exploration ... ok
+
+failures:
+
+---- tests::another stdout ----
+thread 'main' panicked at 'Make this test fail', src/lib.rs:10:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::another
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/src/lib.rs
new file mode 100644
index 000000000..a9ec00891
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-03/src/lib.rs
@@ -0,0 +1,14 @@
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn exploration() {
+ assert_eq!(2 + 2, 4);
+ }
+
+ #[test]
+ fn another() {
+ panic!("Make this test fail");
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.lock
new file mode 100644
index 000000000..9dcd5439d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangle"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.toml
new file mode 100644
index 000000000..2447c67f5
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangle"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/src/lib.rs
new file mode 100644
index 000000000..0f1bc4e08
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-05/src/lib.rs
@@ -0,0 +1,13 @@
+// ANCHOR: here
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.lock
new file mode 100644
index 000000000..9dcd5439d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangle"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.toml
new file mode 100644
index 000000000..2447c67f5
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangle"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/output.txt
new file mode 100644
index 000000000..dad02b460
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/output.txt
@@ -0,0 +1,16 @@
+$ cargo test
+ Compiling rectangle v0.1.0 (file:///projects/rectangle)
+ Finished test [unoptimized + debuginfo] target(s) in 0.66s
+ Running unittests src/lib.rs (target/debug/deps/rectangle-6584c4561e48942e)
+
+running 1 test
+test tests::larger_can_hold_smaller ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests rectangle
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/src/lib.rs
new file mode 100644
index 000000000..6ad1512ed
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-06/src/lib.rs
@@ -0,0 +1,32 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn larger_can_hold_smaller() {
+ let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ assert!(larger.can_hold(&smaller));
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/output.txt
new file mode 100644
index 000000000..fa02835bd
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/output.txt
@@ -0,0 +1,16 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.58s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/src/lib.rs
new file mode 100644
index 000000000..3e5d66bfa
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-07/src/lib.rs
@@ -0,0 +1,13 @@
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn it_adds_two() {
+ assert_eq!(4, add_two(2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.lock
new file mode 100644
index 000000000..5802b7dc9
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.toml
new file mode 100644
index 000000000..4e348c8d2
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/output.txt
new file mode 100644
index 000000000..caca1542f
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/output.txt
@@ -0,0 +1,16 @@
+$ cargo test
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished test [unoptimized + debuginfo] target(s) in 0.58s
+ Running unittests src/lib.rs (target/debug/deps/guessing_game-57d70c3acb738f4d)
+
+running 1 test
+test tests::greater_than_100 - should panic ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests guessing_game
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/src/lib.rs
new file mode 100644
index 000000000..9391be5b1
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-08/src/lib.rs
@@ -0,0 +1,24 @@
+pub struct Guess {
+ value: i32,
+}
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 || value > 100 {
+ panic!("Guess value must be between 1 and 100, got {}.", value);
+ }
+
+ Guess { value }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ #[should_panic]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.lock
new file mode 100644
index 000000000..5802b7dc9
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.toml
new file mode 100644
index 000000000..4e348c8d2
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/src/lib.rs
new file mode 100644
index 000000000..cc1c5c35d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-09/src/lib.rs
@@ -0,0 +1,36 @@
+pub struct Guess {
+ value: i32,
+}
+
+// ANCHOR: here
+// --snip--
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 {
+ panic!(
+ "Guess value must be greater than or equal to 1, got {}.",
+ value
+ );
+ } else if value > 100 {
+ panic!(
+ "Guess value must be less than or equal to 100, got {}.",
+ value
+ );
+ }
+
+ Guess { value }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ #[should_panic(expected = "less than or equal to 100")]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.lock
new file mode 100644
index 000000000..a6d35e395
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "silly-function"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.toml
new file mode 100644
index 000000000..f751864de
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "silly-function"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/output.txt
new file mode 100644
index 000000000..0512cd59f
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/output.txt
@@ -0,0 +1,25 @@
+$ cargo test
+ Compiling silly-function v0.1.0 (file:///projects/silly-function)
+ Finished test [unoptimized + debuginfo] target(s) in 0.58s
+ Running unittests src/lib.rs (target/debug/deps/silly_function-160869f38cff9166)
+
+running 2 tests
+test tests::this_test_will_fail ... FAILED
+test tests::this_test_will_pass ... ok
+
+failures:
+
+---- tests::this_test_will_fail stdout ----
+I got the value 8
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `5`,
+ right: `10`', src/lib.rs:19:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::this_test_will_fail
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/src/lib.rs
new file mode 100644
index 000000000..6fd76ce00
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-10/src/lib.rs
@@ -0,0 +1,21 @@
+fn prints_and_returns_10(a: i32) -> i32 {
+ println!("I got the value {}", a);
+ 10
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn this_test_will_pass() {
+ let value = prints_and_returns_10(4);
+ assert_eq!(10, value);
+ }
+
+ #[test]
+ fn this_test_will_fail() {
+ let value = prints_and_returns_10(8);
+ assert_eq!(5, value);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/output.txt
new file mode 100644
index 000000000..fe19c83c4
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/output.txt
@@ -0,0 +1,18 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.62s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 3 tests
+test tests::add_three_and_two ... ok
+test tests::add_two_and_two ... ok
+test tests::one_hundred ... ok
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/src/lib.rs
new file mode 100644
index 000000000..f56715263
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-11/src/lib.rs
@@ -0,0 +1,23 @@
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn add_two_and_two() {
+ assert_eq!(4, add_two(2));
+ }
+
+ #[test]
+ fn add_three_and_two() {
+ assert_eq!(5, add_two(3));
+ }
+
+ #[test]
+ fn one_hundred() {
+ assert_eq!(102, add_two(100));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/src/lib.rs
new file mode 100644
index 000000000..c3961b1f6
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-12/src/lib.rs
@@ -0,0 +1,17 @@
+pub fn add_two(a: i32) -> i32 {
+ internal_adder(a, 2)
+}
+
+fn internal_adder(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn internal() {
+ assert_eq!(4, internal_adder(2, 2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/output.txt
new file mode 100644
index 000000000..22970e9e1
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/output.txt
@@ -0,0 +1,23 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 1.31s
+ Running unittests src/lib.rs (target/debug/deps/adder-1082c4b063a8fbe6)
+
+running 1 test
+test tests::internal ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running tests/integration_test.rs (target/debug/deps/integration_test-1082c4b063a8fbe6)
+
+running 1 test
+test it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/src/lib.rs
new file mode 100644
index 000000000..c3961b1f6
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/src/lib.rs
@@ -0,0 +1,17 @@
+pub fn add_two(a: i32) -> i32 {
+ internal_adder(a, 2)
+}
+
+fn internal_adder(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn internal() {
+ assert_eq!(4, internal_adder(2, 2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/tests/integration_test.rs b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/tests/integration_test.rs
new file mode 100644
index 000000000..e26fa7109
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/listing-11-13/tests/integration_test.rs
@@ -0,0 +1,6 @@
+use adder;
+
+#[test]
+fn it_adds_two() {
+ assert_eq!(4, adder::add_two(2));
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/output.txt
new file mode 100644
index 000000000..8a3330844
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/output.txt
@@ -0,0 +1,16 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.59s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::exploration ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/src/lib.rs
new file mode 100644
index 000000000..330bddf6a
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/src/lib.rs
@@ -0,0 +1,7 @@
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn exploration() {
+ assert_eq!(2 + 2, 4);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.lock
new file mode 100644
index 000000000..9dcd5439d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangle"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.toml
new file mode 100644
index 000000000..2447c67f5
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangle"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/output.txt
new file mode 100644
index 000000000..30e45e525
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/output.txt
@@ -0,0 +1,17 @@
+$ cargo test
+ Compiling rectangle v0.1.0 (file:///projects/rectangle)
+ Finished test [unoptimized + debuginfo] target(s) in 0.66s
+ Running unittests src/lib.rs (target/debug/deps/rectangle-6584c4561e48942e)
+
+running 2 tests
+test tests::larger_can_hold_smaller ... ok
+test tests::smaller_cannot_hold_larger ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests rectangle
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/src/lib.rs
new file mode 100644
index 000000000..ee4fc45b9
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/src/lib.rs
@@ -0,0 +1,49 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn larger_can_hold_smaller() {
+ // --snip--
+ // ANCHOR_END: here
+ let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ assert!(larger.can_hold(&smaller));
+ // ANCHOR: here
+ }
+
+ #[test]
+ fn smaller_cannot_hold_larger() {
+ let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ assert!(!smaller.can_hold(&larger));
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.lock
new file mode 100644
index 000000000..9dcd5439d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "rectangle"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.toml
new file mode 100644
index 000000000..2447c67f5
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangle"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/output.txt
new file mode 100644
index 000000000..fdeb597e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/output.txt
@@ -0,0 +1,22 @@
+$ cargo test
+ Compiling rectangle v0.1.0 (file:///projects/rectangle)
+ Finished test [unoptimized + debuginfo] target(s) in 0.66s
+ Running unittests src/lib.rs (target/debug/deps/rectangle-6584c4561e48942e)
+
+running 2 tests
+test tests::larger_can_hold_smaller ... FAILED
+test tests::smaller_cannot_hold_larger ... ok
+
+failures:
+
+---- tests::larger_can_hold_smaller stdout ----
+thread 'main' panicked at 'assertion failed: larger.can_hold(&smaller)', src/lib.rs:28:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::larger_can_hold_smaller
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/src/lib.rs
new file mode 100644
index 000000000..f5968fcaf
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/src/lib.rs
@@ -0,0 +1,47 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+// ANCHOR: here
+// --snip--
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width < other.width && self.height > other.height
+ }
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn larger_can_hold_smaller() {
+ let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ assert!(larger.can_hold(&smaller));
+ }
+
+ #[test]
+ fn smaller_cannot_hold_larger() {
+ let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ assert!(!smaller.can_hold(&larger));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/output.txt
new file mode 100644
index 000000000..0af0401e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/output.txt
@@ -0,0 +1,23 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.61s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::it_adds_two ... FAILED
+
+failures:
+
+---- tests::it_adds_two stdout ----
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `4`,
+ right: `5`', src/lib.rs:11:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::it_adds_two
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/src/lib.rs
new file mode 100644
index 000000000..f18662526
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/src/lib.rs
@@ -0,0 +1,15 @@
+// ANCHOR: here
+pub fn add_two(a: i32) -> i32 {
+ a + 3
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn it_adds_two() {
+ assert_eq!(4, add_two(2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.lock
new file mode 100644
index 000000000..9a7ecdd9f
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "greeter"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.toml
new file mode 100644
index 000000000..90a826cf4
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "greeter"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/src/lib.rs
new file mode 100644
index 000000000..3ba3d8819
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-05-greeter/src/lib.rs
@@ -0,0 +1,14 @@
+pub fn greeting(name: &str) -> String {
+ format!("Hello {}!", name)
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn greeting_contains_name() {
+ let result = greeting("Carol");
+ assert!(result.contains("Carol"));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.lock
new file mode 100644
index 000000000..9a7ecdd9f
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "greeter"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.toml
new file mode 100644
index 000000000..90a826cf4
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "greeter"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/output.txt
new file mode 100644
index 000000000..3049543a7
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/output.txt
@@ -0,0 +1,21 @@
+$ cargo test
+ Compiling greeter v0.1.0 (file:///projects/greeter)
+ Finished test [unoptimized + debuginfo] target(s) in 0.91s
+ Running unittests src/lib.rs (target/debug/deps/greeter-170b942eb5bf5e3a)
+
+running 1 test
+test tests::greeting_contains_name ... FAILED
+
+failures:
+
+---- tests::greeting_contains_name stdout ----
+thread 'main' panicked at 'assertion failed: result.contains(\"Carol\")', src/lib.rs:12:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::greeting_contains_name
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/src/lib.rs
new file mode 100644
index 000000000..6f28fc52a
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/src/lib.rs
@@ -0,0 +1,16 @@
+// ANCHOR: here
+pub fn greeting(name: &str) -> String {
+ String::from("Hello!")
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn greeting_contains_name() {
+ let result = greeting("Carol");
+ assert!(result.contains("Carol"));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.lock
new file mode 100644
index 000000000..9a7ecdd9f
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "greeter"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.toml
new file mode 100644
index 000000000..90a826cf4
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "greeter"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/output.txt
new file mode 100644
index 000000000..d2ba1961b
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/output.txt
@@ -0,0 +1,21 @@
+$ cargo test
+ Compiling greeter v0.1.0 (file:///projects/greeter)
+ Finished test [unoptimized + debuginfo] target(s) in 0.93s
+ Running unittests src/lib.rs (target/debug/deps/greeter-170b942eb5bf5e3a)
+
+running 1 test
+test tests::greeting_contains_name ... FAILED
+
+failures:
+
+---- tests::greeting_contains_name stdout ----
+thread 'main' panicked at 'Greeting did not contain name, value was `Hello!`', src/lib.rs:12:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::greeting_contains_name
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/src/lib.rs
new file mode 100644
index 000000000..519c7a4c6
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/src/lib.rs
@@ -0,0 +1,20 @@
+pub fn greeting(name: &str) -> String {
+ String::from("Hello!")
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ // ANCHOR: here
+ #[test]
+ fn greeting_contains_name() {
+ let result = greeting("Carol");
+ assert!(
+ result.contains("Carol"),
+ "Greeting did not contain name, value was `{}`",
+ result
+ );
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.lock
new file mode 100644
index 000000000..5802b7dc9
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.toml
new file mode 100644
index 000000000..4e348c8d2
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/output.txt
new file mode 100644
index 000000000..f59dddec4
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/output.txt
@@ -0,0 +1,19 @@
+$ cargo test
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished test [unoptimized + debuginfo] target(s) in 0.62s
+ Running unittests src/lib.rs (target/debug/deps/guessing_game-57d70c3acb738f4d)
+
+running 1 test
+test tests::greater_than_100 - should panic ... FAILED
+
+failures:
+
+---- tests::greater_than_100 stdout ----
+note: test did not panic as expected
+
+failures:
+ tests::greater_than_100
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/src/lib.rs
new file mode 100644
index 000000000..32540ba83
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/src/lib.rs
@@ -0,0 +1,27 @@
+pub struct Guess {
+ value: i32,
+}
+
+// ANCHOR: here
+// --snip--
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 {
+ panic!("Guess value must be between 1 and 100, got {}.", value);
+ }
+
+ Guess { value }
+ }
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ #[should_panic]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.lock
new file mode 100644
index 000000000..5802b7dc9
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "guessing_game"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.toml
new file mode 100644
index 000000000..4e348c8d2
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/output.txt
new file mode 100644
index 000000000..c8cba98fe
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/output.txt
@@ -0,0 +1,23 @@
+$ cargo test
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished test [unoptimized + debuginfo] target(s) in 0.66s
+ Running unittests src/lib.rs (target/debug/deps/guessing_game-57d70c3acb738f4d)
+
+running 1 test
+test tests::greater_than_100 - should panic ... FAILED
+
+failures:
+
+---- tests::greater_than_100 stdout ----
+thread 'main' panicked at 'Guess value must be greater than or equal to 1, got 200.', src/lib.rs:13:13
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+note: panic did not contain expected string
+ panic message: `"Guess value must be greater than or equal to 1, got 200."`,
+ expected substring: `"less than or equal to 100"`
+
+failures:
+ tests::greater_than_100
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/src/lib.rs
new file mode 100644
index 000000000..7703dd75a
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/src/lib.rs
@@ -0,0 +1,34 @@
+pub struct Guess {
+ value: i32,
+}
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ // ANCHOR: here
+ if value < 1 {
+ panic!(
+ "Guess value must be less than or equal to 100, got {}.",
+ value
+ );
+ } else if value > 100 {
+ panic!(
+ "Guess value must be greater than or equal to 1, got {}.",
+ value
+ );
+ }
+ // ANCHOR_END: here
+
+ Guess { value }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ #[should_panic(expected = "less than or equal to 100")]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs
new file mode 100644
index 000000000..6284f4f29
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs
@@ -0,0 +1,11 @@
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() -> Result<(), String> {
+ if 2 + 2 == 4 {
+ Ok(())
+ } else {
+ Err(String::from("two plus two does not equal four"))
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/output.txt
new file mode 100644
index 000000000..c559de8d0
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/output.txt
@@ -0,0 +1,17 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.60s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 2 tests
+test expensive_test ... ignored
+test it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/src/lib.rs
new file mode 100644
index 000000000..d54a6095d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/src/lib.rs
@@ -0,0 +1,10 @@
+#[test]
+fn it_works() {
+ assert_eq!(2 + 2, 4);
+}
+
+#[test]
+#[ignore]
+fn expensive_test() {
+ // code that takes an hour to run
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/output.txt
new file mode 100644
index 000000000..324d566ab
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/output.txt
@@ -0,0 +1,29 @@
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.89s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::internal ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running tests/common.rs (target/debug/deps/common-92948b65e88960b4)
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running tests/integration_test.rs (target/debug/deps/integration_test-92948b65e88960b4)
+
+running 1 test
+test it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/src/lib.rs
new file mode 100644
index 000000000..c3961b1f6
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/src/lib.rs
@@ -0,0 +1,17 @@
+pub fn add_two(a: i32) -> i32 {
+ internal_adder(a, 2)
+}
+
+fn internal_adder(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn internal() {
+ assert_eq!(4, internal_adder(2, 2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/common.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/common.rs
new file mode 100644
index 000000000..5fb7a390a
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/common.rs
@@ -0,0 +1,3 @@
+pub fn setup() {
+ // setup code specific to your library's tests would go here
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/integration_test.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/integration_test.rs
new file mode 100644
index 000000000..e26fa7109
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/integration_test.rs
@@ -0,0 +1,6 @@
+use adder;
+
+#[test]
+fn it_adds_two() {
+ assert_eq!(4, adder::add_two(2));
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/src/lib.rs
new file mode 100644
index 000000000..c3961b1f6
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/src/lib.rs
@@ -0,0 +1,17 @@
+pub fn add_two(a: i32) -> i32 {
+ internal_adder(a, 2)
+}
+
+fn internal_adder(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn internal() {
+ assert_eq!(4, internal_adder(2, 2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/common/mod.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/common/mod.rs
new file mode 100644
index 000000000..5fb7a390a
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/common/mod.rs
@@ -0,0 +1,3 @@
+pub fn setup() {
+ // setup code specific to your library's tests would go here
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/integration_test.rs b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/integration_test.rs
new file mode 100644
index 000000000..58b8b7b89
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/integration_test.rs
@@ -0,0 +1,9 @@
+use adder;
+
+mod common;
+
+#[test]
+fn it_adds_two() {
+ common::setup();
+ assert_eq!(4, adder::add_two(2));
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.lock
new file mode 100644
index 000000000..a6d35e395
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "silly-function"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.toml
new file mode 100644
index 000000000..f751864de
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "silly-function"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/output.txt
new file mode 100644
index 000000000..8caaeda06
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/output.txt
@@ -0,0 +1,34 @@
+$ cargo test -- --show-output
+ Compiling silly-function v0.1.0 (file:///projects/silly-function)
+ Finished test [unoptimized + debuginfo] target(s) in 0.60s
+ Running unittests src/lib.rs (target/debug/deps/silly_function-160869f38cff9166)
+
+running 2 tests
+test tests::this_test_will_fail ... FAILED
+test tests::this_test_will_pass ... ok
+
+successes:
+
+---- tests::this_test_will_pass stdout ----
+I got the value 4
+
+
+successes:
+ tests::this_test_will_pass
+
+failures:
+
+---- tests::this_test_will_fail stdout ----
+I got the value 8
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `5`,
+ right: `10`', src/lib.rs:19:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::this_test_will_fail
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/src/lib.rs
new file mode 100644
index 000000000..43c4c92f9
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-01-show-output/src/lib.rs
@@ -0,0 +1,21 @@
+pub fn prints_and_returns_10(a: i32) -> i32 {
+ println!("I got the value {}", a);
+ 10
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn this_test_will_pass() {
+ let value = prints_and_returns_10(4);
+ assert_eq!(10, value);
+ }
+
+ #[test]
+ fn this_test_will_fail() {
+ let value = prints_and_returns_10(8);
+ assert_eq!(5, value);
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/output.txt
new file mode 100644
index 000000000..f2da98442
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/output.txt
@@ -0,0 +1,10 @@
+$ cargo test one_hundred
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.69s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::one_hundred ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/src/lib.rs
new file mode 100644
index 000000000..f56715263
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-02-single-test/src/lib.rs
@@ -0,0 +1,23 @@
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn add_two_and_two() {
+ assert_eq!(4, add_two(2));
+ }
+
+ #[test]
+ fn add_three_and_two() {
+ assert_eq!(5, add_two(3));
+ }
+
+ #[test]
+ fn one_hundred() {
+ assert_eq!(102, add_two(100));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/output.txt
new file mode 100644
index 000000000..255a051b5
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/output.txt
@@ -0,0 +1,11 @@
+$ cargo test add
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.61s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 2 tests
+test tests::add_three_and_two ... ok
+test tests::add_two_and_two ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/src/lib.rs
new file mode 100644
index 000000000..f56715263
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-03-multiple-tests/src/lib.rs
@@ -0,0 +1,23 @@
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn add_two_and_two() {
+ assert_eq!(4, add_two(2));
+ }
+
+ #[test]
+ fn add_three_and_two() {
+ assert_eq!(5, add_two(3));
+ }
+
+ #[test]
+ fn one_hundred() {
+ assert_eq!(102, add_two(100));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/output.txt
new file mode 100644
index 000000000..b37868d3d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/output.txt
@@ -0,0 +1,16 @@
+$ cargo test -- --ignored
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.61s
+ Running unittests src/lib.rs (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test expensive_test ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/src/lib.rs
new file mode 100644
index 000000000..2290c699d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-04-running-ignored/src/lib.rs
@@ -0,0 +1,12 @@
+// ANCHOR: here
+#[test]
+fn it_works() {
+ assert_eq!(2 + 2, 4);
+}
+
+#[test]
+#[ignore]
+fn expensive_test() {
+ // code that takes an hour to run
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.lock b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.toml b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/output.txt b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/output.txt
new file mode 100644
index 000000000..260beaa2d
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/output.txt
@@ -0,0 +1,10 @@
+$ cargo test --test integration_test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.64s
+ Running tests/integration_test.rs (target/debug/deps/integration_test-82e7799c1bc62298)
+
+running 1 test
+test it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/src/lib.rs b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/src/lib.rs
new file mode 100644
index 000000000..c3961b1f6
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/src/lib.rs
@@ -0,0 +1,17 @@
+pub fn add_two(a: i32) -> i32 {
+ internal_adder(a, 2)
+}
+
+fn internal_adder(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn internal() {
+ assert_eq!(4, internal_adder(2, 2));
+ }
+}
diff --git a/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/tests/integration_test.rs b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/tests/integration_test.rs
new file mode 100644
index 000000000..e26fa7109
--- /dev/null
+++ b/src/doc/book/listings/ch11-writing-automated-tests/output-only-05-single-integration/tests/integration_test.rs
@@ -0,0 +1,6 @@
+use adder;
+
+#[test]
+fn it_adds_two() {
+ assert_eq!(4, adder::add_two(2));
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-01/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-01/output.txt
new file mode 100644
index 000000000..529115f8d
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-01/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.61s
+ Running `target/debug/minigrep`
+[src/main.rs:5] args = [
+ "target/debug/minigrep",
+]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-01/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-01/src/main.rs
new file mode 100644
index 000000000..ae7def53d
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-01/src/main.rs
@@ -0,0 +1,6 @@
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ dbg!(args);
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-02/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-02/output.txt
new file mode 100644
index 000000000..6ef87f7ce
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-02/output.txt
@@ -0,0 +1,6 @@
+$ cargo run -- test sample.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep test sample.txt`
+Searching for test
+In file sample.txt
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-02/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-02/src/main.rs
new file mode 100644
index 000000000..ae2fa7bb1
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-02/src/main.rs
@@ -0,0 +1,11 @@
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let query = &args[1];
+ let file_path = &args[2];
+
+ println!("Searching for {}", query);
+ println!("In file {}", file_path);
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-03/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-03/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-03/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-03/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-03/src/main.rs
new file mode 100644
index 000000000..ae2fa7bb1
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-03/src/main.rs
@@ -0,0 +1,11 @@
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let query = &args[1];
+ let file_path = &args[2];
+
+ println!("Searching for {}", query);
+ println!("In file {}", file_path);
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-04/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-04/output.txt
new file mode 100644
index 000000000..6582ca169
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-04/output.txt
@@ -0,0 +1,17 @@
+$ cargo run -- the poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep the poem.txt`
+Searching for the
+In file poem.txt
+With text:
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-04/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-04/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-04/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-04/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-04/src/main.rs
new file mode 100644
index 000000000..944e4300e
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-04/src/main.rs
@@ -0,0 +1,22 @@
+// ANCHOR: here
+use std::env;
+use std::fs;
+
+fn main() {
+ // --snip--
+ // ANCHOR_END: here
+ let args: Vec<String> = env::args().collect();
+
+ let query = &args[1];
+ let file_path = &args[2];
+
+ println!("Searching for {}", query);
+ // ANCHOR: here
+ println!("In file {}", file_path);
+
+ let contents = fs::read_to_string(file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-05/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-05/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-05/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-05/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-05/src/main.rs
new file mode 100644
index 000000000..061591833
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-05/src/main.rs
@@ -0,0 +1,29 @@
+use std::env;
+use std::fs;
+
+// ANCHOR: here
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let (query, file_path) = parse_config(&args);
+
+ // --snip--
+ // ANCHOR_END: here
+
+ println!("Searching for {}", query);
+ println!("In file {}", file_path);
+
+ let contents = fs::read_to_string(file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+ // ANCHOR: here
+}
+
+fn parse_config(args: &[String]) -> (&str, &str) {
+ let query = &args[1];
+ let file_path = &args[2];
+
+ (query, file_path)
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-06/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-06/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-06/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-06/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-06/src/main.rs
new file mode 100644
index 000000000..c77e848d8
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-06/src/main.rs
@@ -0,0 +1,34 @@
+use std::env;
+use std::fs;
+
+// ANCHOR: here
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = parse_config(&args);
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ // --snip--
+ // ANCHOR_END: here
+
+ println!("With text:\n{contents}");
+ // ANCHOR: here
+}
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+fn parse_config(args: &[String]) -> Config {
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Config { query, file_path }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-07/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-07/output.txt
new file mode 100644
index 000000000..d3fa7777d
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-07/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep`
+thread 'main' panicked at 'index out of bounds: the len is 1 but the index is 1', src/main.rs:27:21
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-07/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-07/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-07/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-07/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-07/src/main.rs
new file mode 100644
index 000000000..ff6c29420
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-07/src/main.rs
@@ -0,0 +1,40 @@
+use std::env;
+use std::fs;
+
+// ANCHOR: here
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::new(&args);
+ // ANCHOR_END: here
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+ // ANCHOR: here
+
+ // --snip--
+}
+
+// --snip--
+
+// ANCHOR_END: here
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+// ANCHOR: here
+impl Config {
+ fn new(args: &[String]) -> Config {
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Config { query, file_path }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-08/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-08/output.txt
new file mode 100644
index 000000000..de2abd1af
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-08/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep`
+thread 'main' panicked at 'not enough arguments', src/main.rs:26:13
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-08/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-08/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-08/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-08/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-08/src/main.rs
new file mode 100644
index 000000000..cecd15abf
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-08/src/main.rs
@@ -0,0 +1,38 @@
+use std::env;
+use std::fs;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::new(&args);
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+}
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+impl Config {
+ // ANCHOR: here
+ // --snip--
+ fn new(args: &[String]) -> Config {
+ if args.len() < 3 {
+ panic!("not enough arguments");
+ }
+ // --snip--
+ // ANCHOR_END: here
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Config { query, file_path }
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-09/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-09/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-09/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-09/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-09/src/main.rs
new file mode 100644
index 000000000..3418e718c
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-09/src/main.rs
@@ -0,0 +1,36 @@
+use std::env;
+use std::fs;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::new(&args);
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+}
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+// ANCHOR: here
+impl Config {
+ fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-10/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-10/output.txt
new file mode 100644
index 000000000..7aad57f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-10/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/minigrep`
+Problem parsing arguments: not enough arguments
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-10/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-10/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-10/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-10/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-10/src/main.rs
new file mode 100644
index 000000000..ab6d3e548
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-10/src/main.rs
@@ -0,0 +1,42 @@
+use std::env;
+use std::fs;
+// ANCHOR: here
+use std::process;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // --snip--
+ // ANCHOR_END: here
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+}
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+impl Config {
+ fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-11/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-11/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-11/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-11/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-11/src/main.rs
new file mode 100644
index 000000000..3f476b975
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-11/src/main.rs
@@ -0,0 +1,50 @@
+use std::env;
+use std::fs;
+use std::process;
+
+// ANCHOR: here
+fn main() {
+ // --snip--
+
+ // ANCHOR_END: here
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // ANCHOR: here
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ run(config);
+}
+
+fn run(config: Config) {
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+}
+
+// --snip--
+// ANCHOR_END: here
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+impl Config {
+ fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-12/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-12/output.txt
new file mode 100644
index 000000000..c18902518
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-12/output.txt
@@ -0,0 +1,27 @@
+$ cargo run the poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+warning: unused `Result` that must be used
+ --> src/main.rs:19:5
+ |
+19 | run(config);
+ | ^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_must_use)]` on by default
+ = note: this `Result` may be an `Err` variant, which should be handled
+
+warning: `minigrep` (bin "minigrep") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 0.71s
+ Running `target/debug/minigrep the poem.txt`
+Searching for the
+In file poem.txt
+With text:
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-12/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-12/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-12/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-12/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-12/src/main.rs
new file mode 100644
index 000000000..ab5fdb894
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-12/src/main.rs
@@ -0,0 +1,51 @@
+use std::env;
+use std::fs;
+use std::process;
+// ANCHOR: here
+use std::error::Error;
+
+// --snip--
+
+// ANCHOR_END: here
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ run(config);
+}
+
+// ANCHOR: here
+fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ println!("With text:\n{contents}");
+
+ Ok(())
+}
+// ANCHOR_END: here
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+impl Config {
+ fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-13/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-13/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-13/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-13/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-13/src/lib.rs
new file mode 100644
index 000000000..1a3c48089
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-13/src/lib.rs
@@ -0,0 +1,36 @@
+// ANCHOR: here
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ // --snip--
+ // ANCHOR_END: here
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ // ANCHOR: here
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ // --snip--
+ // ANCHOR_END: here
+ let contents = fs::read_to_string(config.file_path)?;
+
+ println!("With text:\n{contents}");
+
+ Ok(())
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-13/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-13/src/main.rs
new file mode 100644
index 000000000..09756ca3f
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-13/src/main.rs
@@ -0,0 +1,19 @@
+use std::env;
+use std::process;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ if let Err(e) = run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-14/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-14/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-14/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-14/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-14/src/lib.rs
new file mode 100644
index 000000000..4f3a4e865
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-14/src/lib.rs
@@ -0,0 +1,28 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ println!("With text:\n{contents}");
+
+ Ok(())
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-14/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-14/src/main.rs
new file mode 100644
index 000000000..3b76009b5
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-14/src/main.rs
@@ -0,0 +1,29 @@
+// ANCHOR: here
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ // --snip--
+ // ANCHOR_END: here
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ // ANCHOR: here
+ if let Err(e) = minigrep::run(config) {
+ // --snip--
+ // ANCHOR_END: here
+ println!("Application error: {e}");
+ process::exit(1);
+ // ANCHOR: here
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-15/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-15/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-15/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-15/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-15/src/lib.rs
new file mode 100644
index 000000000..20c4a782b
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-15/src/lib.rs
@@ -0,0 +1,44 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ Ok(())
+}
+
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-15/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-15/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-15/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-16/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-16/output.txt
new file mode 100644
index 000000000..d0cda6024
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-16/output.txt
@@ -0,0 +1,23 @@
+$ cargo test
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished test [unoptimized + debuginfo] target(s) in 0.97s
+ Running unittests src/lib.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)
+
+running 1 test
+test tests::one_result ... FAILED
+
+failures:
+
+---- tests::one_result stdout ----
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `["safe, fast, productive."]`,
+ right: `[]`', src/lib.rs:44:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::one_result
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-16/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-16/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-16/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-16/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-16/src/lib.rs
new file mode 100644
index 000000000..f5e593484
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-16/src/lib.rs
@@ -0,0 +1,48 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ Ok(())
+}
+
+// ANCHOR: here
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ vec![]
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-16/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-16/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-16/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-17/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-17/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-17/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-17/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-17/src/lib.rs
new file mode 100644
index 000000000..cb9fab401
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-17/src/lib.rs
@@ -0,0 +1,50 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ Ok(())
+}
+
+// ANCHOR: here
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ for line in contents.lines() {
+ // do something with line
+ }
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-17/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-17/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-17/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-18/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-18/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-18/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-18/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-18/src/lib.rs
new file mode 100644
index 000000000..a05d046d7
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-18/src/lib.rs
@@ -0,0 +1,52 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ Ok(())
+}
+
+// ANCHOR: here
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ for line in contents.lines() {
+ if line.contains(query) {
+ // do something with line
+ }
+ }
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-18/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-18/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-18/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-19/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-19/output.txt
new file mode 100644
index 000000000..9b2078cb8
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-19/output.txt
@@ -0,0 +1,22 @@
+$ cargo test
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished test [unoptimized + debuginfo] target(s) in 1.22s
+ Running unittests src/lib.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)
+
+running 1 test
+test tests::one_result ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running unittests src/main.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests minigrep
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-19/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-19/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-19/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-19/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-19/src/lib.rs
new file mode 100644
index 000000000..f5d3ffa9f
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-19/src/lib.rs
@@ -0,0 +1,58 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ Ok(())
+}
+
+// ANCHOR: here
+// ANCHOR: ch13
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+// ANCHOR_END: ch13
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-19/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-19/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-19/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-20/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-20/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-20/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-20/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-20/src/lib.rs
new file mode 100644
index 000000000..a757f7f55
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-20/src/lib.rs
@@ -0,0 +1,76 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ for line in search(&config.query, &contents) {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-20/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-20/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-20/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-21/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-21/output.txt
new file mode 100644
index 000000000..dafeb7862
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-21/output.txt
@@ -0,0 +1,23 @@
+$ cargo test
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished test [unoptimized + debuginfo] target(s) in 1.33s
+ Running unittests src/lib.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)
+
+running 2 tests
+test tests::case_insensitive ... ok
+test tests::case_sensitive ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running unittests src/main.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests minigrep
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-21/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-21/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-21/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-21/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-21/src/lib.rs
new file mode 100644
index 000000000..3aaa04082
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-21/src/lib.rs
@@ -0,0 +1,92 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ for line in search(&config.query, &contents) {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+// ANCHOR: here
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-21/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-21/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-21/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-22/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-22/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-22/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-22/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-22/src/lib.rs
new file mode 100644
index 000000000..c3f4723f1
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-22/src/lib.rs
@@ -0,0 +1,101 @@
+use std::error::Error;
+use std::fs;
+
+// ANCHOR: here
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+// ANCHOR_END: here
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+// ANCHOR: there
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+// ANCHOR_END: there
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-22/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-22/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-22/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-23/output.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-23/output.txt
new file mode 100644
index 000000000..eaffc2f24
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-23/output.txt
@@ -0,0 +1,6 @@
+$ cargo run -- to poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep to poem.txt`
+Are you nobody, too?
+How dreary to be somebody!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-23/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-23/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-23/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-23/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-23/src/lib.rs
new file mode 100644
index 000000000..20eda2197
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-23/src/lib.rs
@@ -0,0 +1,110 @@
+// ANCHOR: here
+use std::env;
+// --snip--
+
+// ANCHOR_END: here
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+// ANCHOR: here
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+// ANCHOR_END: here
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-23/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-23/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-23/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-24/poem.txt b/src/doc/book/listings/ch12-an-io-project/listing-12-24/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-24/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-24/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-24/src/lib.rs
new file mode 100644
index 000000000..292b09789
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-24/src/lib.rs
@@ -0,0 +1,104 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/listing-12-24/src/main.rs b/src/doc/book/listings/ch12-an-io-project/listing-12-24/src/main.rs
new file mode 100644
index 000000000..1278a6c17
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/listing-12-24/src/main.rs
@@ -0,0 +1,20 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+// ANCHOR: here
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/poem.txt b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/src/main.rs b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/src/main.rs
new file mode 100644
index 000000000..e51319efe
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/src/main.rs
@@ -0,0 +1,53 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+use std::process;
+
+// ANCHOR: here
+fn main() {
+ // --snip--
+
+ // ANCHOR_END: here
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // ANCHOR: here
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ if let Err(e) = run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
+// ANCHOR_END: here
+
+fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ println!("With text:\n{contents}");
+
+ Ok(())
+}
+
+struct Config {
+ query: String,
+ file_path: String,
+}
+
+impl Config {
+ fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/output.txt b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/output.txt
new file mode 100644
index 000000000..a5a4ef8c2
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/output.txt
@@ -0,0 +1,5 @@
+$ cargo run -- frog poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.38s
+ Running `target/debug/minigrep frog poem.txt`
+How public, like a frog
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/poem.txt b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/lib.rs
new file mode 100644
index 000000000..e06eae4cd
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/lib.rs
@@ -0,0 +1,60 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+// ANCHOR: here
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ for line in search(&config.query, &contents) {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+// ANCHOR_END: here
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/main.rs b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/output.txt b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/output.txt
new file mode 100644
index 000000000..b48bb0e10
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/output.txt
@@ -0,0 +1,9 @@
+$ cargo run -- needle haystack
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.57s
+ Running `target/debug/minigrep needle haystack`
+[src/main.rs:5] args = [
+ "target/debug/minigrep",
+ "needle",
+ "haystack",
+]
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/src/main.rs b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/src/main.rs
new file mode 100644
index 000000000..ae7def53d
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-01-with-args/src/main.rs
@@ -0,0 +1,6 @@
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ dbg!(args);
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/output.txt b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/output.txt
new file mode 100644
index 000000000..93116dd5e
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/output.txt
@@ -0,0 +1,16 @@
+$ cargo build
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+error[E0106]: missing lifetime specifier
+ --> src/lib.rs:28:51
+ |
+28 | pub fn search(query: &str, contents: &str) -> Vec<&str> {
+ | ---- ---- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `query` or `contents`
+help: consider introducing a named lifetime parameter
+ |
+28 | pub fn search<'a>(query: &'a str, contents: &'a str) -> Vec<&'a str> {
+ | ++++ ++ ++ ++
+
+For more information about this error, try `rustc --explain E0106`.
+error: could not compile `minigrep` due to previous error
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/poem.txt b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/lib.rs
new file mode 100644
index 000000000..df623bdea
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/lib.rs
@@ -0,0 +1,48 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ Ok(())
+}
+
+// ANCHOR: here
+pub fn search(query: &str, contents: &str) -> Vec<&str> {
+ vec![]
+}
+// ANCHOR_END: here
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/main.rs b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-02-missing-lifetimes/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/output.txt b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/output.txt
new file mode 100644
index 000000000..b46835766
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/output.txt
@@ -0,0 +1,7 @@
+$ cargo run -- body poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep body poem.txt`
+I'm nobody! Who are you?
+Are you nobody, too?
+How dreary to be somebody!
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/poem.txt b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/lib.rs
new file mode 100644
index 000000000..e06eae4cd
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/lib.rs
@@ -0,0 +1,60 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+// ANCHOR: here
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ for line in search(&config.query, &contents) {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+// ANCHOR_END: here
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/main.rs b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-03-multiple-matches/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.lock b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.toml b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/output.txt b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/output.txt
new file mode 100644
index 000000000..a53624f83
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/output.txt
@@ -0,0 +1,4 @@
+$ cargo run -- monomorphization poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep monomorphization poem.txt`
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/poem.txt b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/lib.rs b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/lib.rs
new file mode 100644
index 000000000..e06eae4cd
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/lib.rs
@@ -0,0 +1,60 @@
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+
+// ANCHOR: here
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ for line in search(&config.query, &contents) {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+// ANCHOR_END: here
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
diff --git a/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/main.rs b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch12-an-io-project/output-only-04-no-matches/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/poem.txt b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs
new file mode 100644
index 000000000..e54343d24
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs
@@ -0,0 +1,106 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+// ANCHOR: ch13
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+// ANCHOR_END: ch13
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs
new file mode 100644
index 000000000..a4f8a7411
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-23-reproduced/src/main.rs
@@ -0,0 +1,18 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ println!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/poem.txt b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs
new file mode 100644
index 000000000..292b09789
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/lib.rs
@@ -0,0 +1,104 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs
new file mode 100644
index 000000000..f9d179c8c
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs
@@ -0,0 +1,24 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+// ANCHOR: ch13
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // --snip--
+ // ANCHOR_END: ch13
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+ // ANCHOR: ch13
+}
+// ANCHOR_END: ch13
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.lock
new file mode 100644
index 000000000..6f974d1ba
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "shirt-company"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.toml
new file mode 100644
index 000000000..1eb392dfa
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shirt-company"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-01/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-01/output.txt
new file mode 100644
index 000000000..b64a4d8dc
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-01/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling shirt-company v0.1.0 (file:///projects/shirt-company)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.27s
+ Running `target/debug/shirt-company`
+The user with preference Some(Red) gets Red
+The user with preference None gets Blue
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-01/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-01/src/main.rs
new file mode 100644
index 000000000..2c87d6965
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-01/src/main.rs
@@ -0,0 +1,52 @@
+#[derive(Debug, PartialEq, Copy, Clone)]
+enum ShirtColor {
+ Red,
+ Blue,
+}
+
+struct Inventory {
+ shirts: Vec<ShirtColor>,
+}
+
+impl Inventory {
+ fn giveaway(&self, user_preference: Option<ShirtColor>) -> ShirtColor {
+ user_preference.unwrap_or_else(|| self.most_stocked())
+ }
+
+ fn most_stocked(&self) -> ShirtColor {
+ let mut num_red = 0;
+ let mut num_blue = 0;
+
+ for color in &self.shirts {
+ match color {
+ ShirtColor::Red => num_red += 1,
+ ShirtColor::Blue => num_blue += 1,
+ }
+ }
+ if num_red > num_blue {
+ ShirtColor::Red
+ } else {
+ ShirtColor::Blue
+ }
+ }
+}
+
+fn main() {
+ let store = Inventory {
+ shirts: vec![ShirtColor::Blue, ShirtColor::Red, ShirtColor::Blue],
+ };
+
+ let user_pref1 = Some(ShirtColor::Red);
+ let giveaway1 = store.giveaway(user_pref1);
+ println!(
+ "The user with preference {:?} gets {:?}",
+ user_pref1, giveaway1
+ );
+
+ let user_pref2 = None;
+ let giveaway2 = store.giveaway(user_pref2);
+ println!(
+ "The user with preference {:?} gets {:?}",
+ user_pref2, giveaway2
+ );
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.lock
new file mode 100644
index 000000000..75ff09e51
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "workout-app"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.toml
new file mode 100644
index 000000000..f09a737d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "workout-app"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-02/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-02/src/main.rs
new file mode 100644
index 000000000..b3f4cc2c2
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-02/src/main.rs
@@ -0,0 +1,33 @@
+use std::thread;
+use std::time::Duration;
+
+fn generate_workout(intensity: u32, random_number: u32) {
+ // ANCHOR: here
+ let expensive_closure = |num: u32| -> u32 {
+ println!("calculating slowly...");
+ thread::sleep(Duration::from_secs(2));
+ num
+ };
+ // ANCHOR_END: here
+
+ if intensity < 25 {
+ println!("Today, do {} pushups!", expensive_closure(intensity));
+ println!("Next, do {} situps!", expensive_closure(intensity));
+ } else {
+ if random_number == 3 {
+ println!("Take a break today! Remember to stay hydrated!");
+ } else {
+ println!(
+ "Today, run for {} minutes!",
+ expensive_closure(intensity)
+ );
+ }
+ }
+}
+
+fn main() {
+ let simulated_user_specified_value = 10;
+ let simulated_random_number = 7;
+
+ generate_workout(simulated_user_specified_value, simulated_random_number);
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.lock
new file mode 100644
index 000000000..c190d3a41
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "closure-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.toml
new file mode 100644
index 000000000..914c4cfaa
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "closure-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-03/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-03/output.txt
new file mode 100644
index 000000000..37d83618a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-03/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling closure-example v0.1.0 (file:///projects/closure-example)
+error[E0308]: mismatched types
+ --> src/main.rs:5:29
+ |
+5 | let n = example_closure(5);
+ | ^- help: try using a conversion method: `.to_string()`
+ | |
+ | expected struct `String`, found integer
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `closure-example` due to previous error
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-03/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-03/src/main.rs
new file mode 100644
index 000000000..ebb2489bf
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-03/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let example_closure = |x| x;
+
+ let s = example_closure(String::from("hello"));
+ let n = example_closure(5);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.lock
new file mode 100644
index 000000000..75ff09e51
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "workout-app"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.toml
new file mode 100644
index 000000000..914c4cfaa
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "closure-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-04/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-04/output.txt
new file mode 100644
index 000000000..64d763b51
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-04/output.txt
@@ -0,0 +1,8 @@
+$ cargo run
+ Compiling closure-example v0.1.0 (file:///projects/closure-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.43s
+ Running `target/debug/closure-example`
+Before defining closure: [1, 2, 3]
+Before calling closure: [1, 2, 3]
+From closure: [1, 2, 3]
+After calling closure: [1, 2, 3]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-04/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-04/src/main.rs
new file mode 100644
index 000000000..43b91bb30
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-04/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ let list = vec![1, 2, 3];
+ println!("Before defining closure: {:?}", list);
+
+ let only_borrows = || println!("From closure: {:?}", list);
+
+ println!("Before calling closure: {:?}", list);
+ only_borrows();
+ println!("After calling closure: {:?}", list);
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.lock
new file mode 100644
index 000000000..75ff09e51
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "workout-app"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.toml
new file mode 100644
index 000000000..914c4cfaa
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "closure-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-05/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-05/output.txt
new file mode 100644
index 000000000..ce0ad5e37
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-05/output.txt
@@ -0,0 +1,6 @@
+$ cargo run
+ Compiling closure-example v0.1.0 (file:///projects/closure-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.43s
+ Running `target/debug/closure-example`
+Before defining closure: [1, 2, 3]
+After calling closure: [1, 2, 3, 7]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-05/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-05/src/main.rs
new file mode 100644
index 000000000..37f8130e2
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-05/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let mut list = vec![1, 2, 3];
+ println!("Before defining closure: {:?}", list);
+
+ let mut borrows_mutably = || list.push(7);
+
+ borrows_mutably();
+ println!("After calling closure: {:?}", list);
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-06/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-06/Cargo.toml
new file mode 100644
index 000000000..8085ade0f
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-06/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "closure-example"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-06/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-06/src/main.rs
new file mode 100644
index 000000000..2c8e18c9f
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-06/src/main.rs
@@ -0,0 +1,10 @@
+use std::thread;
+
+fn main() {
+ let list = vec![1, 2, 3];
+ println!("Before defining closure: {:?}", list);
+
+ thread::spawn(move || println!("From thread: {:?}", list))
+ .join()
+ .unwrap();
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-07/.rustfmt.toml b/src/doc/book/listings/ch13-functional-features/listing-13-07/.rustfmt.toml
new file mode 100644
index 000000000..ee10c634b
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-07/.rustfmt.toml
@@ -0,0 +1,2 @@
+struct_lit_width = 50
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-07/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-07/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-07/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-07/output.txt
new file mode 100644
index 000000000..f18fce46e
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-07/output.txt
@@ -0,0 +1,18 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.41s
+ Running `target/debug/rectangles`
+[
+ Rectangle {
+ width: 3,
+ height: 5,
+ },
+ Rectangle {
+ width: 7,
+ height: 12,
+ },
+ Rectangle {
+ width: 10,
+ height: 1,
+ },
+]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-07/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-07/src/main.rs
new file mode 100644
index 000000000..73a25e5f9
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-07/src/main.rs
@@ -0,0 +1,16 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let mut list = [
+ Rectangle { width: 10, height: 1 },
+ Rectangle { width: 3, height: 5 },
+ Rectangle { width: 7, height: 12 },
+ ];
+
+ list.sort_by_key(|r| r.width);
+ println!("{:#?}", list);
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-08/.rustfmt.toml b/src/doc/book/listings/ch13-functional-features/listing-13-08/.rustfmt.toml
new file mode 100644
index 000000000..ee10c634b
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-08/.rustfmt.toml
@@ -0,0 +1,2 @@
+struct_lit_width = 50
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-08/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-08/Cargo.toml
new file mode 100644
index 000000000..703c9d977
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-08/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-08/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-08/output.txt
new file mode 100644
index 000000000..7a39ac618
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-08/output.txt
@@ -0,0 +1,18 @@
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+error[E0507]: cannot move out of `value`, a captured variable in an `FnMut` closure
+ --> src/main.rs:18:30
+ |
+15 | let value = String::from("by key called");
+ | ----- captured outer variable
+16 |
+17 | list.sort_by_key(|r| {
+ | ______________________-
+18 | | sort_operations.push(value);
+ | | ^^^^^ move occurs because `value` has type `String`, which does not implement the `Copy` trait
+19 | | r.width
+20 | | });
+ | |_____- captured by this `FnMut` closure
+
+For more information about this error, try `rustc --explain E0507`.
+error: could not compile `rectangles` due to previous error
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-08/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-08/src/main.rs
new file mode 100644
index 000000000..3b9c9cbdf
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-08/src/main.rs
@@ -0,0 +1,22 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let mut list = [
+ Rectangle { width: 10, height: 1 },
+ Rectangle { width: 3, height: 5 },
+ Rectangle { width: 7, height: 12 },
+ ];
+
+ let mut sort_operations = vec![];
+ let value = String::from("by key called");
+
+ list.sort_by_key(|r| {
+ sort_operations.push(value);
+ r.width
+ });
+ println!("{:#?}", list);
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-09/.rustfmt.toml b/src/doc/book/listings/ch13-functional-features/listing-13-09/.rustfmt.toml
new file mode 100644
index 000000000..ee10c634b
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-09/.rustfmt.toml
@@ -0,0 +1,2 @@
+struct_lit_width = 50
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.lock
new file mode 100644
index 000000000..e090432bc
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cacher"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.toml
new file mode 100644
index 000000000..4a279a450
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "rectangles"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-09/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-09/src/main.rs
new file mode 100644
index 000000000..a60d6fd3f
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-09/src/main.rs
@@ -0,0 +1,20 @@
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let mut list = [
+ Rectangle { width: 10, height: 1 },
+ Rectangle { width: 3, height: 5 },
+ Rectangle { width: 7, height: 12 },
+ ];
+
+ let mut num_sort_operations = 0;
+ list.sort_by_key(|r| {
+ num_sort_operations += 1;
+ r.width
+ });
+ println!("{:#?}, sorted in {num_sort_operations} operations", list);
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.lock
new file mode 100644
index 000000000..e91eaa8d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "iterators"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.toml
new file mode 100644
index 000000000..2652a8a1a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "iterators"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-10/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-10/src/main.rs
new file mode 100644
index 000000000..55a0dd37e
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-10/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ let v1 = vec![1, 2, 3];
+
+ let v1_iter = v1.iter();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.lock
new file mode 100644
index 000000000..e91eaa8d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "iterators"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.toml
new file mode 100644
index 000000000..2652a8a1a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "iterators"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-11/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-11/src/main.rs
new file mode 100644
index 000000000..712aff408
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-11/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let v1 = vec![1, 2, 3];
+
+ let v1_iter = v1.iter();
+
+ for val in v1_iter {
+ println!("Got: {}", val);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.lock
new file mode 100644
index 000000000..e91eaa8d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "iterators"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.toml
new file mode 100644
index 000000000..2652a8a1a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "iterators"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-12/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-12/src/lib.rs
new file mode 100644
index 000000000..758284044
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-12/src/lib.rs
@@ -0,0 +1,16 @@
+#[cfg(test)]
+mod tests {
+ // ANCHOR: here
+ #[test]
+ fn iterator_demonstration() {
+ let v1 = vec![1, 2, 3];
+
+ let mut v1_iter = v1.iter();
+
+ assert_eq!(v1_iter.next(), Some(&1));
+ assert_eq!(v1_iter.next(), Some(&2));
+ assert_eq!(v1_iter.next(), Some(&3));
+ assert_eq!(v1_iter.next(), None);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.lock
new file mode 100644
index 000000000..e91eaa8d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "iterators"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.toml
new file mode 100644
index 000000000..2652a8a1a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "iterators"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-13/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-13/src/lib.rs
new file mode 100644
index 000000000..d1cb54d0a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-13/src/lib.rs
@@ -0,0 +1,15 @@
+#[cfg(test)]
+mod tests {
+ // ANCHOR: here
+ #[test]
+ fn iterator_sum() {
+ let v1 = vec![1, 2, 3];
+
+ let v1_iter = v1.iter();
+
+ let total: i32 = v1_iter.sum();
+
+ assert_eq!(total, 6);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.lock
new file mode 100644
index 000000000..e91eaa8d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "iterators"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.toml
new file mode 100644
index 000000000..2652a8a1a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "iterators"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-14/output.txt b/src/doc/book/listings/ch13-functional-features/listing-13-14/output.txt
new file mode 100644
index 000000000..228c764ed
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-14/output.txt
@@ -0,0 +1,14 @@
+$ cargo run
+ Compiling iterators v0.1.0 (file:///projects/iterators)
+warning: unused `Map` that must be used
+ --> src/main.rs:4:5
+ |
+4 | v1.iter().map(|x| x + 1);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_must_use)]` on by default
+ = note: iterators are lazy and do nothing unless consumed
+
+warning: `iterators` (bin "iterators") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 0.47s
+ Running `target/debug/iterators`
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-14/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-14/src/main.rs
new file mode 100644
index 000000000..62a68be9b
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-14/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ let v1: Vec<i32> = vec![1, 2, 3];
+
+ v1.iter().map(|x| x + 1);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.lock
new file mode 100644
index 000000000..e91eaa8d4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "iterators"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.toml
new file mode 100644
index 000000000..2652a8a1a
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "iterators"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-15/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-15/src/main.rs
new file mode 100644
index 000000000..db9025d6f
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-15/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let v1: Vec<i32> = vec![1, 2, 3];
+
+ let v2: Vec<_> = v1.iter().map(|x| x + 1).collect();
+
+ assert_eq!(v2, vec![2, 3, 4]);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.lock
new file mode 100644
index 000000000..0b15e2157
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "shoe_size"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.toml
new file mode 100644
index 000000000..cc803776b
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shoe_size"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-16/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-16/src/lib.rs
new file mode 100644
index 000000000..281c3c9e4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-16/src/lib.rs
@@ -0,0 +1,48 @@
+#[derive(PartialEq, Debug)]
+struct Shoe {
+ size: u32,
+ style: String,
+}
+
+fn shoes_in_size(shoes: Vec<Shoe>, shoe_size: u32) -> Vec<Shoe> {
+ shoes.into_iter().filter(|s| s.size == shoe_size).collect()
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn filters_by_size() {
+ let shoes = vec![
+ Shoe {
+ size: 10,
+ style: String::from("sneaker"),
+ },
+ Shoe {
+ size: 13,
+ style: String::from("sandal"),
+ },
+ Shoe {
+ size: 10,
+ style: String::from("boot"),
+ },
+ ];
+
+ let in_my_size = shoes_in_size(shoes, 10);
+
+ assert_eq!(
+ in_my_size,
+ vec![
+ Shoe {
+ size: 10,
+ style: String::from("sneaker")
+ },
+ Shoe {
+ size: 10,
+ style: String::from("boot")
+ },
+ ]
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-18/poem.txt b/src/doc/book/listings/ch13-functional-features/listing-13-18/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-18/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-18/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-18/src/lib.rs
new file mode 100644
index 000000000..292b09789
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-18/src/lib.rs
@@ -0,0 +1,104 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-18/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-18/src/main.rs
new file mode 100644
index 000000000..40109ef63
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-18/src/main.rs
@@ -0,0 +1,22 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+// ANCHOR: here
+fn main() {
+ let config = Config::build(env::args()).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // --snip--
+ // ANCHOR_END: here
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-19/poem.txt b/src/doc/book/listings/ch13-functional-features/listing-13-19/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-19/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-19/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-19/src/lib.rs
new file mode 100644
index 000000000..79ae2b8f6
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-19/src/lib.rs
@@ -0,0 +1,109 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+// ANCHOR: here
+impl Config {
+ pub fn build(
+ mut args: impl Iterator<Item = String>,
+ ) -> Result<Config, &'static str> {
+ // --snip--
+ // ANCHOR_END: here
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-19/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-19/src/main.rs
new file mode 100644
index 000000000..9ac022545
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-19/src/main.rs
@@ -0,0 +1,16 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let config = Config::build(env::args()).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-20/poem.txt b/src/doc/book/listings/ch13-functional-features/listing-13-20/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-20/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-20/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-20/src/lib.rs
new file mode 100644
index 000000000..4410964a7
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-20/src/lib.rs
@@ -0,0 +1,113 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+// ANCHOR: here
+impl Config {
+ pub fn build(
+ mut args: impl Iterator<Item = String>,
+ ) -> Result<Config, &'static str> {
+ args.next();
+
+ let query = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Didn't get a query string"),
+ };
+
+ let file_path = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Didn't get a file path"),
+ };
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+// ANCHOR_END: here
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-20/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-20/src/main.rs
new file mode 100644
index 000000000..9ac022545
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-20/src/main.rs
@@ -0,0 +1,16 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let config = Config::build(env::args()).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.lock b/src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.lock
new file mode 100644
index 000000000..88bf82d16
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "minigrep"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.toml b/src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.toml
new file mode 100644
index 000000000..64c2a3f52
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "minigrep"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-22/poem.txt b/src/doc/book/listings/ch13-functional-features/listing-13-22/poem.txt
new file mode 100644
index 000000000..870752731
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-22/poem.txt
@@ -0,0 +1,9 @@
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-22/src/lib.rs b/src/doc/book/listings/ch13-functional-features/listing-13-22/src/lib.rs
new file mode 100644
index 000000000..d694669b4
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-22/src/lib.rs
@@ -0,0 +1,108 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+
+impl Config {
+ pub fn build(
+ mut args: impl Iterator<Item = String>,
+ ) -> Result<Config, &'static str> {
+ args.next();
+
+ let query = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Didn't get a query string"),
+ };
+
+ let file_path = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Didn't get a file path"),
+ };
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+
+// ANCHOR: here
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ contents
+ .lines()
+ .filter(|line| line.contains(query))
+ .collect()
+}
+// ANCHOR_END: here
+
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase().contains(&query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
diff --git a/src/doc/book/listings/ch13-functional-features/listing-13-22/src/main.rs b/src/doc/book/listings/ch13-functional-features/listing-13-22/src/main.rs
new file mode 100644
index 000000000..9ac022545
--- /dev/null
+++ b/src/doc/book/listings/ch13-functional-features/listing-13-22/src/main.rs
@@ -0,0 +1,16 @@
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ let config = Config::build(env::args()).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.lock
new file mode 100644
index 000000000..b304dd7c7
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "my_crate"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.toml
new file mode 100644
index 000000000..c52da0412
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "my_crate"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/src/lib.rs
new file mode 100644
index 000000000..ed7abb727
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-01/src/lib.rs
@@ -0,0 +1,13 @@
+/// Adds one to the number given.
+///
+/// # Examples
+///
+/// ```
+/// let arg = 5;
+/// let answer = my_crate::add_one(arg);
+///
+/// assert_eq!(6, answer);
+/// ```
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.lock
new file mode 100644
index 000000000..b304dd7c7
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "my_crate"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.toml
new file mode 100644
index 000000000..c52da0412
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "my_crate"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/src/lib.rs
new file mode 100644
index 000000000..64c9c439c
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-02/src/lib.rs
@@ -0,0 +1,21 @@
+// ANCHOR: here
+//! # My Crate
+//!
+//! `my_crate` is a collection of utilities to make performing certain
+//! calculations more convenient.
+
+/// Adds one to the number given.
+// --snip--
+// ANCHOR_END: here
+///
+/// # Examples
+///
+/// ```
+/// let arg = 5;
+/// let answer = my_crate::add_one(arg);
+///
+/// assert_eq!(6, answer);
+/// ```
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.lock
new file mode 100644
index 000000000..df19c247b
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "art"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.toml
new file mode 100644
index 000000000..66ef4b532
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "art"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/src/lib.rs
new file mode 100644
index 000000000..bffbe058d
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-03/src/lib.rs
@@ -0,0 +1,34 @@
+// ANCHOR: here
+//! # Art
+//!
+//! A library for modeling artistic concepts.
+
+pub mod kinds {
+ /// The primary colors according to the RYB color model.
+ pub enum PrimaryColor {
+ Red,
+ Yellow,
+ Blue,
+ }
+
+ /// The secondary colors according to the RYB color model.
+ pub enum SecondaryColor {
+ Orange,
+ Green,
+ Purple,
+ }
+}
+
+pub mod utils {
+ use crate::kinds::*;
+
+ /// Combines two primary colors in equal amounts to create
+ /// a secondary color.
+ pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
+ // --snip--
+ // ANCHOR_END: here
+ unimplemented!();
+ // ANCHOR: here
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.lock
new file mode 100644
index 000000000..df19c247b
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "art"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.toml
new file mode 100644
index 000000000..66ef4b532
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "art"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/lib.rs
new file mode 100644
index 000000000..b077a9a71
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/lib.rs
@@ -0,0 +1,29 @@
+//! # Art
+//!
+//! A library for modeling artistic concepts.
+
+pub mod kinds {
+ /// The primary colors according to the RYB color model.
+ pub enum PrimaryColor {
+ Red,
+ Yellow,
+ Blue,
+ }
+
+ /// The secondary colors according to the RYB color model.
+ pub enum SecondaryColor {
+ Orange,
+ Green,
+ Purple,
+ }
+}
+
+pub mod utils {
+ use crate::kinds::*;
+
+ /// Combines two primary colors in equal amounts to create
+ /// a secondary color.
+ pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
+ SecondaryColor::Orange
+ }
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/main.rs
new file mode 100644
index 000000000..b1a4bf792
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-04/src/main.rs
@@ -0,0 +1,8 @@
+use art::kinds::PrimaryColor;
+use art::utils::mix;
+
+fn main() {
+ let red = PrimaryColor::Red;
+ let yellow = PrimaryColor::Yellow;
+ mix(red, yellow);
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.lock
new file mode 100644
index 000000000..df19c247b
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "art"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.toml
new file mode 100644
index 000000000..66ef4b532
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "art"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/src/lib.rs
new file mode 100644
index 000000000..c5aa9e7b0
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-05/src/lib.rs
@@ -0,0 +1,41 @@
+// ANCHOR: here
+//! # Art
+//!
+//! A library for modeling artistic concepts.
+
+pub use self::kinds::PrimaryColor;
+pub use self::kinds::SecondaryColor;
+pub use self::utils::mix;
+
+pub mod kinds {
+ // --snip--
+ // ANCHOR_END: here
+ /// The primary colors according to the RYB color model.
+ pub enum PrimaryColor {
+ Red,
+ Yellow,
+ Blue,
+ }
+
+ /// The secondary colors according to the RYB color model.
+ pub enum SecondaryColor {
+ Orange,
+ Green,
+ Purple,
+ }
+ // ANCHOR: here
+}
+
+pub mod utils {
+ // --snip--
+ // ANCHOR_END: here
+ use crate::kinds::*;
+
+ /// Combines two primary colors in equal amounts to create
+ /// a secondary color.
+ pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
+ SecondaryColor::Orange
+ }
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.lock
new file mode 100644
index 000000000..df19c247b
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "art"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.toml
new file mode 100644
index 000000000..66ef4b532
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "art"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/lib.rs
new file mode 100644
index 000000000..daabd006d
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/lib.rs
@@ -0,0 +1,33 @@
+//! # Art
+//!
+//! A library for modeling artistic concepts.
+
+pub use self::kinds::PrimaryColor;
+pub use self::kinds::SecondaryColor;
+pub use self::utils::mix;
+
+pub mod kinds {
+ /// The primary colors according to the RYB color model.
+ pub enum PrimaryColor {
+ Red,
+ Yellow,
+ Blue,
+ }
+
+ /// The secondary colors according to the RYB color model.
+ pub enum SecondaryColor {
+ Orange,
+ Green,
+ Purple,
+ }
+}
+
+pub mod utils {
+ use crate::kinds::*;
+
+ /// Combines two primary colors in equal amounts to create
+ /// a secondary color.
+ pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
+ SecondaryColor::Orange
+ }
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/main.rs
new file mode 100644
index 000000000..51f3b761d
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-06/src/main.rs
@@ -0,0 +1,13 @@
+// ANCHOR: here
+use art::mix;
+use art::PrimaryColor;
+
+fn main() {
+ // --snip--
+ // ANCHOR_END: here
+ let red = PrimaryColor::Red;
+ let yellow = PrimaryColor::Yellow;
+ mix(red, yellow);
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.lock
new file mode 100644
index 000000000..a456055c9
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.lock
@@ -0,0 +1,13 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "add_one"
+version = "0.1.0"
+
+[[package]]
+name = "adder"
+version = "0.1.0"
+dependencies = [
+ "add_one 0.1.0",
+]
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.toml
new file mode 100644
index 000000000..1448801d5
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/Cargo.toml
@@ -0,0 +1,6 @@
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/Cargo.toml
new file mode 100644
index 000000000..8af4ab816
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "add_one"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/src/lib.rs
new file mode 100644
index 000000000..b0bb86943
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/add_one/src/lib.rs
@@ -0,0 +1,3 @@
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/Cargo.toml
new file mode 100644
index 000000000..feb3d956e
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+
+add_one = { path = "../add_one" }
diff --git a/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/src/main.rs
new file mode 100644
index 000000000..131629490
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/listing-14-07/add/adder/src/main.rs
@@ -0,0 +1,6 @@
+use add_one;
+
+fn main() {
+ let num = 10;
+ println!("Hello, world! {num} plus one is {}!", add_one::add_one(num));
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.lock
new file mode 100644
index 000000000..d37189b33
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.toml
new file mode 100644
index 000000000..c5ea8e510
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+
+members = [
+ "adder",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/Cargo.toml
new file mode 100644
index 000000000..e61cb12e3
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/src/main.rs
new file mode 100644
index 000000000..e7a11a969
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/adder/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.lock
new file mode 100644
index 000000000..a456055c9
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.lock
@@ -0,0 +1,13 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "add_one"
+version = "0.1.0"
+
+[[package]]
+name = "adder"
+version = "0.1.0"
+dependencies = [
+ "add_one 0.1.0",
+]
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.toml
new file mode 100644
index 000000000..1448801d5
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.toml
@@ -0,0 +1,6 @@
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/Cargo.toml
new file mode 100644
index 000000000..8af4ab816
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "add_one"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/src/lib.rs
new file mode 100644
index 000000000..b0bb86943
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/src/lib.rs
@@ -0,0 +1,3 @@
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/Cargo.toml
new file mode 100644
index 000000000..55c02036c
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+add_one = { path = "../add_one" }
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/src/main.rs
new file mode 100644
index 000000000..e7a11a969
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.lock
new file mode 100644
index 000000000..eec3a9e4b
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.lock
@@ -0,0 +1,90 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "add_one"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "adder"
+version = "0.1.0"
+dependencies = [
+ "add_one",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.toml
new file mode 100644
index 000000000..1448801d5
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/Cargo.toml
@@ -0,0 +1,6 @@
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/Cargo.toml
new file mode 100644
index 000000000..fd4942ace
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "add_one"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/src/lib.rs
new file mode 100644
index 000000000..7b61b40a4
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/src/lib.rs
@@ -0,0 +1,5 @@
+use rand;
+
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/Cargo.toml
new file mode 100644
index 000000000..feb3d956e
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+
+add_one = { path = "../add_one" }
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/src/main.rs
new file mode 100644
index 000000000..7deb7962f
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/adder/src/main.rs
@@ -0,0 +1,10 @@
+use add_one;
+
+fn main() {
+ let num = 10;
+ println!(
+ "Hello, world! {} plus one is {}!",
+ num,
+ add_one::add_one(num)
+ );
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.lock
new file mode 100644
index 000000000..a456055c9
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.lock
@@ -0,0 +1,13 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "add_one"
+version = "0.1.0"
+
+[[package]]
+name = "adder"
+version = "0.1.0"
+dependencies = [
+ "add_one 0.1.0",
+]
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.toml
new file mode 100644
index 000000000..1448801d5
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/Cargo.toml
@@ -0,0 +1,6 @@
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/Cargo.toml
new file mode 100644
index 000000000..8af4ab816
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "add_one"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/src/lib.rs
new file mode 100644
index 000000000..40ceb1285
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/src/lib.rs
@@ -0,0 +1,13 @@
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn it_works() {
+ assert_eq!(3, add_one(2));
+ }
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/Cargo.toml
new file mode 100644
index 000000000..feb3d956e
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+
+add_one = { path = "../add_one" }
diff --git a/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/src/main.rs
new file mode 100644
index 000000000..7deb7962f
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/adder/src/main.rs
@@ -0,0 +1,10 @@
+use add_one;
+
+fn main() {
+ let num = 10;
+ println!(
+ "Hello, world! {} plus one is {}!",
+ num,
+ add_one::add_one(num)
+ );
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.lock
new file mode 100644
index 000000000..d98623d6e
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.lock
@@ -0,0 +1,5 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "adder"
+version = "0.1.0"
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.toml
new file mode 100644
index 000000000..c5ea8e510
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/Cargo.toml
@@ -0,0 +1,5 @@
+[workspace]
+
+members = [
+ "adder",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/rustfmt-ignore b/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/rustfmt-ignore
new file mode 100644
index 000000000..958e56837
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-01-adder-crate/add/rustfmt-ignore
@@ -0,0 +1,2 @@
+This listing is used for demonstrating how to set up a workspace, but the workspace isn't
+completely set up yet, so rustfmt complains the crate mentioned in Cargo.toml doesn't exist yet.
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.lock
new file mode 100644
index 000000000..a456055c9
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.lock
@@ -0,0 +1,13 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "add_one"
+version = "0.1.0"
+
+[[package]]
+name = "adder"
+version = "0.1.0"
+dependencies = [
+ "add_one 0.1.0",
+]
+
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.toml
new file mode 100644
index 000000000..1448801d5
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/Cargo.toml
@@ -0,0 +1,6 @@
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/Cargo.toml
new file mode 100644
index 000000000..900018470
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "add_one"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/src/lib.rs
new file mode 100644
index 000000000..1b4a90c93
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/add_one/src/lib.rs
@@ -0,0 +1,8 @@
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() {
+ let result = 2 + 2;
+ assert_eq!(result, 4);
+ }
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/Cargo.toml
new file mode 100644
index 000000000..feb3d956e
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+
+add_one = { path = "../add_one" }
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/src/main.rs
new file mode 100644
index 000000000..e7a11a969
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-02-add-one/add/adder/src/main.rs
@@ -0,0 +1,3 @@
+fn main() {
+ println!("Hello, world!");
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.lock b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.lock
new file mode 100644
index 000000000..eec3a9e4b
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.lock
@@ -0,0 +1,90 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "add_one"
+version = "0.1.0"
+dependencies = [
+ "rand",
+]
+
+[[package]]
+name = "adder"
+version = "0.1.0"
+dependencies = [
+ "add_one",
+]
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "getrandom"
+version = "0.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9495705279e7140bf035dde1f6e750c162df8b625267cd52cc44e0b156732c8"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.86"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b7282d924be3275cec7f6756ff4121987bc6481325397dde6ba3e7802b1a8b1c"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
+
+[[package]]
+name = "rand"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0ef9e7e66b4468674bfcb0c81af8b7fa0bb154fa9f28eb840da5c447baeb8d7e"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+ "rand_hc",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34cf66eb183df1c5876e2dcf6b13d57340741e8dc255b48e40a26de954d06ae7"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "rand_hc"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.2+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.toml
new file mode 100644
index 000000000..1448801d5
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/Cargo.toml
@@ -0,0 +1,6 @@
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/Cargo.toml
new file mode 100644
index 000000000..fd4942ace
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "add_one"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+rand = "0.8.3"
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/src/lib.rs b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/src/lib.rs
new file mode 100644
index 000000000..7b61b40a4
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/add_one/src/lib.rs
@@ -0,0 +1,5 @@
+use rand;
+
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/Cargo.toml b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/Cargo.toml
new file mode 100644
index 000000000..feb3d956e
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "adder"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+
+add_one = { path = "../add_one" }
diff --git a/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/src/main.rs b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/src/main.rs
new file mode 100644
index 000000000..eb4050dc3
--- /dev/null
+++ b/src/doc/book/listings/ch14-more-about-cargo/output-only-03-use-rand/add/adder/src/main.rs
@@ -0,0 +1,11 @@
+use add_one;
+use rand;
+
+fn main() {
+ let num = 10;
+ println!(
+ "Hello, world! {} plus one is {}!",
+ num,
+ add_one::add_one(num)
+ );
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.lock
new file mode 100644
index 000000000..8c125fc84
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "box-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.toml
new file mode 100644
index 000000000..690385c7a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "box-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-01/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-01/src/main.rs
new file mode 100644
index 000000000..8da1d905d
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-01/src/main.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let b = Box::new(5);
+ println!("b = {}", b);
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-02/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-02/src/main.rs
new file mode 100644
index 000000000..84640b9b9
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-02/src/main.rs
@@ -0,0 +1,8 @@
+// ANCHOR: here
+enum List {
+ Cons(i32, List),
+ Nil,
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-03/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/output.txt
new file mode 100644
index 000000000..437d74b5c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/output.txt
@@ -0,0 +1,27 @@
+$ cargo run
+ Compiling cons-list v0.1.0 (file:///projects/cons-list)
+error[E0072]: recursive type `List` has infinite size
+ --> src/main.rs:1:1
+ |
+1 | enum List {
+ | ^^^^^^^^^ recursive type has infinite size
+2 | Cons(i32, List),
+ | ---- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `List` representable
+ |
+2 | Cons(i32, Box<List>),
+ | ++++ +
+
+error[E0391]: cycle detected when computing drop-check constraints for `List`
+ --> src/main.rs:1:1
+ |
+1 | enum List {
+ | ^^^^^^^^^
+ |
+ = note: ...which immediately requires computing drop-check constraints for `List` again
+ = note: cycle used when computing dropck types for `Canonical { max_universe: U0, variables: [], value: ParamEnvAnd { param_env: ParamEnv { caller_bounds: [], reveal: UserFacing, constness: NotConst }, value: List } }`
+
+Some errors have detailed explanations: E0072, E0391.
+For more information about an error, try `rustc --explain E0072`.
+error: could not compile `cons-list` due to 2 previous errors
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-03/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/src/main.rs
new file mode 100644
index 000000000..a96f3d7b1
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-03/src/main.rs
@@ -0,0 +1,12 @@
+enum List {
+ Cons(i32, List),
+ Nil,
+}
+
+// ANCHOR: here
+use crate::List::{Cons, Nil};
+
+fn main() {
+ let list = Cons(1, Cons(2, Cons(3, Nil)));
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-05/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-05/src/main.rs
new file mode 100644
index 000000000..22f7d8338
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-05/src/main.rs
@@ -0,0 +1,10 @@
+enum List {
+ Cons(i32, Box<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+
+fn main() {
+ let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil))))));
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-06/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-06/src/main.rs
new file mode 100644
index 000000000..174b620cf
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-06/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let x = 5;
+ let y = &x;
+
+ assert_eq!(5, x);
+ assert_eq!(5, *y);
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-07/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-07/src/main.rs
new file mode 100644
index 000000000..4933a416b
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-07/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let x = 5;
+ let y = Box::new(x);
+
+ assert_eq!(5, x);
+ assert_eq!(5, *y);
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-08/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-08/src/main.rs
new file mode 100644
index 000000000..f48594673
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-08/src/main.rs
@@ -0,0 +1,11 @@
+// ANCHOR: here
+struct MyBox<T>(T);
+
+impl<T> MyBox<T> {
+ fn new(x: T) -> MyBox<T> {
+ MyBox(x)
+ }
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-09/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/output.txt
new file mode 100644
index 000000000..75e5f1c8c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/output.txt
@@ -0,0 +1,10 @@
+$ cargo run
+ Compiling deref-example v0.1.0 (file:///projects/deref-example)
+error[E0614]: type `MyBox<{integer}>` cannot be dereferenced
+ --> src/main.rs:14:19
+ |
+14 | assert_eq!(5, *y);
+ | ^^
+
+For more information about this error, try `rustc --explain E0614`.
+error: could not compile `deref-example` due to previous error
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-09/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/src/main.rs
new file mode 100644
index 000000000..d07f2d78a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-09/src/main.rs
@@ -0,0 +1,17 @@
+struct MyBox<T>(T);
+
+impl<T> MyBox<T> {
+ fn new(x: T) -> MyBox<T> {
+ MyBox(x)
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ let x = 5;
+ let y = MyBox::new(x);
+
+ assert_eq!(5, x);
+ assert_eq!(5, *y);
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-10/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-10/src/main.rs
new file mode 100644
index 000000000..cce754d08
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-10/src/main.rs
@@ -0,0 +1,27 @@
+// ANCHOR: here
+use std::ops::Deref;
+
+impl<T> Deref for MyBox<T> {
+ type Target = T;
+
+ fn deref(&self) -> &Self::Target {
+ &self.0
+ }
+}
+// ANCHOR_END: here
+
+struct MyBox<T>(T);
+
+impl<T> MyBox<T> {
+ fn new(x: T) -> MyBox<T> {
+ MyBox(x)
+ }
+}
+
+fn main() {
+ let x = 5;
+ let y = MyBox::new(x);
+
+ assert_eq!(5, x);
+ assert_eq!(5, *y);
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-11/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-11/src/main.rs
new file mode 100644
index 000000000..77a88c91f
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-11/src/main.rs
@@ -0,0 +1,7 @@
+// ANCHOR: here
+fn hello(name: &str) {
+ println!("Hello, {name}!");
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-12/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-12/src/main.rs
new file mode 100644
index 000000000..8cd3893cb
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-12/src/main.rs
@@ -0,0 +1,28 @@
+use std::ops::Deref;
+
+impl<T> Deref for MyBox<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ &self.0
+ }
+}
+
+struct MyBox<T>(T);
+
+impl<T> MyBox<T> {
+ fn new(x: T) -> MyBox<T> {
+ MyBox(x)
+ }
+}
+
+fn hello(name: &str) {
+ println!("Hello, {name}!");
+}
+
+// ANCHOR: here
+fn main() {
+ let m = MyBox::new(String::from("Rust"));
+ hello(&m);
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-13/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-13/src/main.rs
new file mode 100644
index 000000000..9debe2a31
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-13/src/main.rs
@@ -0,0 +1,28 @@
+use std::ops::Deref;
+
+impl<T> Deref for MyBox<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ &self.0
+ }
+}
+
+struct MyBox<T>(T);
+
+impl<T> MyBox<T> {
+ fn new(x: T) -> MyBox<T> {
+ MyBox(x)
+ }
+}
+
+fn hello(name: &str) {
+ println!("Hello, {name}!");
+}
+
+// ANCHOR: here
+fn main() {
+ let m = MyBox::new(String::from("Rust"));
+ hello(&(*m)[..]);
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.lock
new file mode 100644
index 000000000..eb8a2817a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "drop-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.toml
new file mode 100644
index 000000000..1e4c99481
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "drop-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-14/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/output.txt
new file mode 100644
index 000000000..4e795949a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling drop-example v0.1.0 (file:///projects/drop-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.60s
+ Running `target/debug/drop-example`
+CustomSmartPointers created.
+Dropping CustomSmartPointer with data `other stuff`!
+Dropping CustomSmartPointer with data `my stuff`!
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-14/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/src/main.rs
new file mode 100644
index 000000000..231612ae6
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-14/src/main.rs
@@ -0,0 +1,19 @@
+struct CustomSmartPointer {
+ data: String,
+}
+
+impl Drop for CustomSmartPointer {
+ fn drop(&mut self) {
+ println!("Dropping CustomSmartPointer with data `{}`!", self.data);
+ }
+}
+
+fn main() {
+ let c = CustomSmartPointer {
+ data: String::from("my stuff"),
+ };
+ let d = CustomSmartPointer {
+ data: String::from("other stuff"),
+ };
+ println!("CustomSmartPointers created.");
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.lock
new file mode 100644
index 000000000..eb8a2817a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "drop-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.toml
new file mode 100644
index 000000000..1e4c99481
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "drop-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-15/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/output.txt
new file mode 100644
index 000000000..a38c9ccb7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/output.txt
@@ -0,0 +1,13 @@
+$ cargo run
+ Compiling drop-example v0.1.0 (file:///projects/drop-example)
+error[E0040]: explicit use of destructor method
+ --> src/main.rs:16:7
+ |
+16 | c.drop();
+ | --^^^^--
+ | | |
+ | | explicit destructor calls not allowed
+ | help: consider using `drop` function: `drop(c)`
+
+For more information about this error, try `rustc --explain E0040`.
+error: could not compile `drop-example` due to previous error
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-15/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/src/main.rs
new file mode 100644
index 000000000..ff3b391a9
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-15/src/main.rs
@@ -0,0 +1,20 @@
+struct CustomSmartPointer {
+ data: String,
+}
+
+impl Drop for CustomSmartPointer {
+ fn drop(&mut self) {
+ println!("Dropping CustomSmartPointer with data `{}`!", self.data);
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ let c = CustomSmartPointer {
+ data: String::from("some data"),
+ };
+ println!("CustomSmartPointer created.");
+ c.drop();
+ println!("CustomSmartPointer dropped before the end of main.");
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.lock
new file mode 100644
index 000000000..eb8a2817a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "drop-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.toml
new file mode 100644
index 000000000..1e4c99481
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "drop-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-16/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/output.txt
new file mode 100644
index 000000000..e960cd89a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling drop-example v0.1.0 (file:///projects/drop-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.73s
+ Running `target/debug/drop-example`
+CustomSmartPointer created.
+Dropping CustomSmartPointer with data `some data`!
+CustomSmartPointer dropped before the end of main.
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-16/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/src/main.rs
new file mode 100644
index 000000000..f11715c45
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-16/src/main.rs
@@ -0,0 +1,20 @@
+struct CustomSmartPointer {
+ data: String,
+}
+
+impl Drop for CustomSmartPointer {
+ fn drop(&mut self) {
+ println!("Dropping CustomSmartPointer with data `{}`!", self.data);
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ let c = CustomSmartPointer {
+ data: String::from("some data"),
+ };
+ println!("CustomSmartPointer created.");
+ drop(c);
+ println!("CustomSmartPointer dropped before the end of main.");
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-17/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/output.txt
new file mode 100644
index 000000000..ab314d883
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/output.txt
@@ -0,0 +1,14 @@
+$ cargo run
+ Compiling cons-list v0.1.0 (file:///projects/cons-list)
+error[E0382]: use of moved value: `a`
+ --> src/main.rs:11:30
+ |
+9 | let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));
+ | - move occurs because `a` has type `List`, which does not implement the `Copy` trait
+10 | let b = Cons(3, Box::new(a));
+ | - value moved here
+11 | let c = Cons(4, Box::new(a));
+ | ^ value used here after move
+
+For more information about this error, try `rustc --explain E0382`.
+error: could not compile `cons-list` due to previous error
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-17/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/src/main.rs
new file mode 100644
index 000000000..47c33e4c4
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-17/src/main.rs
@@ -0,0 +1,12 @@
+enum List {
+ Cons(i32, Box<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+
+fn main() {
+ let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));
+ let b = Cons(3, Box::new(a));
+ let c = Cons(4, Box::new(a));
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-18/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-18/src/main.rs
new file mode 100644
index 000000000..602f7de40
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-18/src/main.rs
@@ -0,0 +1,13 @@
+enum List {
+ Cons(i32, Rc<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+use std::rc::Rc;
+
+fn main() {
+ let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
+ let b = Cons(3, Rc::clone(&a));
+ let c = Cons(4, Rc::clone(&a));
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-19/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/output.txt
new file mode 100644
index 000000000..6a8cc8efe
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/output.txt
@@ -0,0 +1,8 @@
+$ cargo run
+ Compiling cons-list v0.1.0 (file:///projects/cons-list)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.45s
+ Running `target/debug/cons-list`
+count after creating a = 1
+count after creating b = 2
+count after creating c = 3
+count after c goes out of scope = 2
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-19/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/src/main.rs
new file mode 100644
index 000000000..1bd7bc533
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-19/src/main.rs
@@ -0,0 +1,21 @@
+enum List {
+ Cons(i32, Rc<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+use std::rc::Rc;
+
+// ANCHOR: here
+fn main() {
+ let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
+ println!("count after creating a = {}", Rc::strong_count(&a));
+ let b = Cons(3, Rc::clone(&a));
+ println!("count after creating b = {}", Rc::strong_count(&a));
+ {
+ let c = Cons(4, Rc::clone(&a));
+ println!("count after creating c = {}", Rc::strong_count(&a));
+ }
+ println!("count after c goes out of scope = {}", Rc::strong_count(&a));
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.lock
new file mode 100644
index 000000000..4dc2226a5
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "limit-tracker"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.toml
new file mode 100644
index 000000000..98c3f537c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "limit-tracker"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-20/src/lib.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-20/src/lib.rs
new file mode 100644
index 000000000..a5181834c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-20/src/lib.rs
@@ -0,0 +1,38 @@
+pub trait Messenger {
+ fn send(&self, msg: &str);
+}
+
+pub struct LimitTracker<'a, T: Messenger> {
+ messenger: &'a T,
+ value: usize,
+ max: usize,
+}
+
+impl<'a, T> LimitTracker<'a, T>
+where
+ T: Messenger,
+{
+ pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
+ LimitTracker {
+ messenger,
+ value: 0,
+ max,
+ }
+ }
+
+ pub fn set_value(&mut self, value: usize) {
+ self.value = value;
+
+ let percentage_of_max = self.value as f64 / self.max as f64;
+
+ if percentage_of_max >= 1.0 {
+ self.messenger.send("Error: You are over your quota!");
+ } else if percentage_of_max >= 0.9 {
+ self.messenger
+ .send("Urgent warning: You've used up over 90% of your quota!");
+ } else if percentage_of_max >= 0.75 {
+ self.messenger
+ .send("Warning: You've used up over 75% of your quota!");
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.lock
new file mode 100644
index 000000000..4dc2226a5
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "limit-tracker"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.toml
new file mode 100644
index 000000000..98c3f537c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "limit-tracker"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-21/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/output.txt
new file mode 100644
index 000000000..6b07b66ea
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/output.txt
@@ -0,0 +1,14 @@
+$ cargo test
+ Compiling limit-tracker v0.1.0 (file:///projects/limit-tracker)
+error[E0596]: cannot borrow `self.sent_messages` as mutable, as it is behind a `&` reference
+ --> src/lib.rs:58:13
+ |
+2 | fn send(&self, msg: &str);
+ | ----- help: consider changing that to be a mutable reference: `&mut self`
+...
+58 | self.sent_messages.push(String::from(message));
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+
+For more information about this error, try `rustc --explain E0596`.
+error: could not compile `limit-tracker` due to previous error
+warning: build failed, waiting for other jobs to finish...
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-21/src/lib.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/src/lib.rs
new file mode 100644
index 000000000..4572d4313
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-21/src/lib.rs
@@ -0,0 +1,73 @@
+pub trait Messenger {
+ fn send(&self, msg: &str);
+}
+
+pub struct LimitTracker<'a, T: Messenger> {
+ messenger: &'a T,
+ value: usize,
+ max: usize,
+}
+
+impl<'a, T> LimitTracker<'a, T>
+where
+ T: Messenger,
+{
+ pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
+ LimitTracker {
+ messenger,
+ value: 0,
+ max,
+ }
+ }
+
+ pub fn set_value(&mut self, value: usize) {
+ self.value = value;
+
+ let percentage_of_max = self.value as f64 / self.max as f64;
+
+ if percentage_of_max >= 1.0 {
+ self.messenger.send("Error: You are over your quota!");
+ } else if percentage_of_max >= 0.9 {
+ self.messenger
+ .send("Urgent warning: You've used up over 90% of your quota!");
+ } else if percentage_of_max >= 0.75 {
+ self.messenger
+ .send("Warning: You've used up over 75% of your quota!");
+ }
+ }
+}
+
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ struct MockMessenger {
+ sent_messages: Vec<String>,
+ }
+
+ impl MockMessenger {
+ fn new() -> MockMessenger {
+ MockMessenger {
+ sent_messages: vec![],
+ }
+ }
+ }
+
+ impl Messenger for MockMessenger {
+ fn send(&self, message: &str) {
+ self.sent_messages.push(String::from(message));
+ }
+ }
+
+ #[test]
+ fn it_sends_an_over_75_percent_warning_message() {
+ let mock_messenger = MockMessenger::new();
+ let mut limit_tracker = LimitTracker::new(&mock_messenger, 100);
+
+ limit_tracker.set_value(80);
+
+ assert_eq!(mock_messenger.sent_messages.len(), 1);
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.lock
new file mode 100644
index 000000000..4dc2226a5
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "limit-tracker"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.toml
new file mode 100644
index 000000000..98c3f537c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "limit-tracker"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-22/src/lib.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-22/src/lib.rs
new file mode 100644
index 000000000..a77ffa41c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-22/src/lib.rs
@@ -0,0 +1,78 @@
+pub trait Messenger {
+ fn send(&self, msg: &str);
+}
+
+pub struct LimitTracker<'a, T: Messenger> {
+ messenger: &'a T,
+ value: usize,
+ max: usize,
+}
+
+impl<'a, T> LimitTracker<'a, T>
+where
+ T: Messenger,
+{
+ pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
+ LimitTracker {
+ messenger,
+ value: 0,
+ max,
+ }
+ }
+
+ pub fn set_value(&mut self, value: usize) {
+ self.value = value;
+
+ let percentage_of_max = self.value as f64 / self.max as f64;
+
+ if percentage_of_max >= 1.0 {
+ self.messenger.send("Error: You are over your quota!");
+ } else if percentage_of_max >= 0.9 {
+ self.messenger
+ .send("Urgent warning: You've used up over 90% of your quota!");
+ } else if percentage_of_max >= 0.75 {
+ self.messenger
+ .send("Warning: You've used up over 75% of your quota!");
+ }
+ }
+}
+
+// ANCHOR: here
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use std::cell::RefCell;
+
+ struct MockMessenger {
+ sent_messages: RefCell<Vec<String>>,
+ }
+
+ impl MockMessenger {
+ fn new() -> MockMessenger {
+ MockMessenger {
+ sent_messages: RefCell::new(vec![]),
+ }
+ }
+ }
+
+ impl Messenger for MockMessenger {
+ fn send(&self, message: &str) {
+ self.sent_messages.borrow_mut().push(String::from(message));
+ }
+ }
+
+ #[test]
+ fn it_sends_an_over_75_percent_warning_message() {
+ // --snip--
+ // ANCHOR_END: here
+ let mock_messenger = MockMessenger::new();
+ let mut limit_tracker = LimitTracker::new(&mock_messenger, 100);
+
+ limit_tracker.set_value(80);
+ // ANCHOR: here
+
+ // ANCHOR: here
+ assert_eq!(mock_messenger.sent_messages.borrow().len(), 1);
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.lock
new file mode 100644
index 000000000..4dc2226a5
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "limit-tracker"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.toml
new file mode 100644
index 000000000..98c3f537c
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "limit-tracker"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-23/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/output.txt
new file mode 100644
index 000000000..c44e69f13
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/output.txt
@@ -0,0 +1,21 @@
+$ cargo test
+ Compiling limit-tracker v0.1.0 (file:///projects/limit-tracker)
+ Finished test [unoptimized + debuginfo] target(s) in 0.91s
+ Running unittests src/lib.rs (target/debug/deps/limit_tracker-e599811fa246dbde)
+
+running 1 test
+test tests::it_sends_an_over_75_percent_warning_message ... FAILED
+
+failures:
+
+---- tests::it_sends_an_over_75_percent_warning_message stdout ----
+thread 'main' panicked at 'already borrowed: BorrowMutError', src/lib.rs:60:53
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::it_sends_an_over_75_percent_warning_message
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-23/src/lib.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/src/lib.rs
new file mode 100644
index 000000000..7d288e680
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-23/src/lib.rs
@@ -0,0 +1,78 @@
+pub trait Messenger {
+ fn send(&self, msg: &str);
+}
+
+pub struct LimitTracker<'a, T: Messenger> {
+ messenger: &'a T,
+ value: usize,
+ max: usize,
+}
+
+impl<'a, T> LimitTracker<'a, T>
+where
+ T: Messenger,
+{
+ pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
+ LimitTracker {
+ messenger,
+ value: 0,
+ max,
+ }
+ }
+
+ pub fn set_value(&mut self, value: usize) {
+ self.value = value;
+
+ let percentage_of_max = self.value as f64 / self.max as f64;
+
+ if percentage_of_max >= 1.0 {
+ self.messenger.send("Error: You are over your quota!");
+ } else if percentage_of_max >= 0.9 {
+ self.messenger
+ .send("Urgent warning: You've used up over 90% of your quota!");
+ } else if percentage_of_max >= 0.75 {
+ self.messenger
+ .send("Warning: You've used up over 75% of your quota!");
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use std::cell::RefCell;
+
+ struct MockMessenger {
+ sent_messages: RefCell<Vec<String>>,
+ }
+
+ impl MockMessenger {
+ fn new() -> MockMessenger {
+ MockMessenger {
+ sent_messages: RefCell::new(vec![]),
+ }
+ }
+ }
+
+ // ANCHOR: here
+ impl Messenger for MockMessenger {
+ fn send(&self, message: &str) {
+ let mut one_borrow = self.sent_messages.borrow_mut();
+ let mut two_borrow = self.sent_messages.borrow_mut();
+
+ one_borrow.push(String::from(message));
+ two_borrow.push(String::from(message));
+ }
+ }
+ // ANCHOR_END: here
+
+ #[test]
+ fn it_sends_an_over_75_percent_warning_message() {
+ let mock_messenger = MockMessenger::new();
+ let mut limit_tracker = LimitTracker::new(&mock_messenger, 100);
+
+ limit_tracker.set_value(80);
+
+ assert_eq!(mock_messenger.sent_messages.borrow().len(), 1);
+ }
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-24/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/output.txt
new file mode 100644
index 000000000..21b3530d9
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling cons-list v0.1.0 (file:///projects/cons-list)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.63s
+ Running `target/debug/cons-list`
+a after = Cons(RefCell { value: 15 }, Nil)
+b after = Cons(RefCell { value: 3 }, Cons(RefCell { value: 15 }, Nil))
+c after = Cons(RefCell { value: 4 }, Cons(RefCell { value: 15 }, Nil))
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-24/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/src/main.rs
new file mode 100644
index 000000000..e225bd862
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-24/src/main.rs
@@ -0,0 +1,24 @@
+#[derive(Debug)]
+enum List {
+ Cons(Rc<RefCell<i32>>, Rc<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+use std::cell::RefCell;
+use std::rc::Rc;
+
+fn main() {
+ let value = Rc::new(RefCell::new(5));
+
+ let a = Rc::new(Cons(Rc::clone(&value), Rc::new(Nil)));
+
+ let b = Cons(Rc::new(RefCell::new(3)), Rc::clone(&a));
+ let c = Cons(Rc::new(RefCell::new(4)), Rc::clone(&a));
+
+ *value.borrow_mut() += 10;
+
+ println!("a after = {:?}", a);
+ println!("b after = {:?}", b);
+ println!("c after = {:?}", c);
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-25/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-25/src/main.rs
new file mode 100644
index 000000000..f36c7fd06
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-25/src/main.rs
@@ -0,0 +1,20 @@
+use crate::List::{Cons, Nil};
+use std::cell::RefCell;
+use std::rc::Rc;
+
+#[derive(Debug)]
+enum List {
+ Cons(i32, RefCell<Rc<List>>),
+ Nil,
+}
+
+impl List {
+ fn tail(&self) -> Option<&RefCell<Rc<List>>> {
+ match self {
+ Cons(_, item) => Some(item),
+ Nil => None,
+ }
+ }
+}
+
+fn main() {}
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.lock
new file mode 100644
index 000000000..a792c49aa
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "cons-list"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.toml
new file mode 100644
index 000000000..dce1515c3
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "cons-list"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-26/output.txt b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/output.txt
new file mode 100644
index 000000000..8b8eb40b6
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/output.txt
@@ -0,0 +1,11 @@
+$ cargo run
+ Compiling cons-list v0.1.0 (file:///projects/cons-list)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.53s
+ Running `target/debug/cons-list`
+a initial rc count = 1
+a next item = Some(RefCell { value: Nil })
+a rc count after b creation = 2
+b initial rc count = 1
+b next item = Some(RefCell { value: Cons(5, RefCell { value: Nil }) })
+b rc count after changing a = 2
+a rc count after changing a = 2
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-26/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/src/main.rs
new file mode 100644
index 000000000..08963aaa5
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-26/src/main.rs
@@ -0,0 +1,44 @@
+use crate::List::{Cons, Nil};
+use std::cell::RefCell;
+use std::rc::Rc;
+
+#[derive(Debug)]
+enum List {
+ Cons(i32, RefCell<Rc<List>>),
+ Nil,
+}
+
+impl List {
+ fn tail(&self) -> Option<&RefCell<Rc<List>>> {
+ match self {
+ Cons(_, item) => Some(item),
+ Nil => None,
+ }
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ let a = Rc::new(Cons(5, RefCell::new(Rc::new(Nil))));
+
+ println!("a initial rc count = {}", Rc::strong_count(&a));
+ println!("a next item = {:?}", a.tail());
+
+ let b = Rc::new(Cons(10, RefCell::new(Rc::clone(&a))));
+
+ println!("a rc count after b creation = {}", Rc::strong_count(&a));
+ println!("b initial rc count = {}", Rc::strong_count(&b));
+ println!("b next item = {:?}", b.tail());
+
+ if let Some(link) = a.tail() {
+ *link.borrow_mut() = Rc::clone(&b);
+ }
+
+ println!("b rc count after changing a = {}", Rc::strong_count(&b));
+ println!("a rc count after changing a = {}", Rc::strong_count(&a));
+
+ // Uncomment the next line to see that we have a cycle;
+ // it will overflow the stack
+ // println!("a next item = {:?}", a.tail());
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.lock
new file mode 100644
index 000000000..dd1f00a87
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "tree"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.toml
new file mode 100644
index 000000000..0bbf897d0
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-27/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tree"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-27/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-27/src/main.rs
new file mode 100644
index 000000000..335d154dd
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-27/src/main.rs
@@ -0,0 +1,24 @@
+// ANCHOR: here
+use std::cell::RefCell;
+use std::rc::Rc;
+
+#[derive(Debug)]
+struct Node {
+ value: i32,
+ children: RefCell<Vec<Rc<Node>>>,
+}
+// ANCHOR_END: here
+
+// ANCHOR: there
+fn main() {
+ let leaf = Rc::new(Node {
+ value: 3,
+ children: RefCell::new(vec![]),
+ });
+
+ let branch = Rc::new(Node {
+ value: 5,
+ children: RefCell::new(vec![Rc::clone(&leaf)]),
+ });
+}
+// ANCHOR_END: there
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.lock
new file mode 100644
index 000000000..dd1f00a87
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "tree"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.toml
new file mode 100644
index 000000000..0bbf897d0
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-28/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tree"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-28/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-28/src/main.rs
new file mode 100644
index 000000000..fabd1cbce
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-28/src/main.rs
@@ -0,0 +1,33 @@
+// ANCHOR: here
+use std::cell::RefCell;
+use std::rc::{Rc, Weak};
+
+#[derive(Debug)]
+struct Node {
+ value: i32,
+ parent: RefCell<Weak<Node>>,
+ children: RefCell<Vec<Rc<Node>>>,
+}
+// ANCHOR_END: here
+
+// ANCHOR: there
+fn main() {
+ let leaf = Rc::new(Node {
+ value: 3,
+ parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![]),
+ });
+
+ println!("leaf parent = {:?}", leaf.parent.borrow().upgrade());
+
+ let branch = Rc::new(Node {
+ value: 5,
+ parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![Rc::clone(&leaf)]),
+ });
+
+ *leaf.parent.borrow_mut() = Rc::downgrade(&branch);
+
+ println!("leaf parent = {:?}", leaf.parent.borrow().upgrade());
+}
+// ANCHOR_END: there
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.lock
new file mode 100644
index 000000000..dd1f00a87
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "tree"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.toml
new file mode 100644
index 000000000..0bbf897d0
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-29/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "tree"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/listing-15-29/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/listing-15-29/src/main.rs
new file mode 100644
index 000000000..ea13df0eb
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/listing-15-29/src/main.rs
@@ -0,0 +1,54 @@
+use std::cell::RefCell;
+use std::rc::{Rc, Weak};
+
+#[derive(Debug)]
+struct Node {
+ value: i32,
+ parent: RefCell<Weak<Node>>,
+ children: RefCell<Vec<Rc<Node>>>,
+}
+
+// ANCHOR: here
+fn main() {
+ let leaf = Rc::new(Node {
+ value: 3,
+ parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![]),
+ });
+
+ println!(
+ "leaf strong = {}, weak = {}",
+ Rc::strong_count(&leaf),
+ Rc::weak_count(&leaf),
+ );
+
+ {
+ let branch = Rc::new(Node {
+ value: 5,
+ parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![Rc::clone(&leaf)]),
+ });
+
+ *leaf.parent.borrow_mut() = Rc::downgrade(&branch);
+
+ println!(
+ "branch strong = {}, weak = {}",
+ Rc::strong_count(&branch),
+ Rc::weak_count(&branch),
+ );
+
+ println!(
+ "leaf strong = {}, weak = {}",
+ Rc::strong_count(&leaf),
+ Rc::weak_count(&leaf),
+ );
+ }
+
+ println!("leaf parent = {:?}", leaf.parent.borrow().upgrade());
+ println!(
+ "leaf strong = {}, weak = {}",
+ Rc::strong_count(&leaf),
+ Rc::weak_count(&leaf),
+ );
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.lock
new file mode 100644
index 000000000..340f6604a
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "borrowing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.toml
new file mode 100644
index 000000000..16f92447f
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "borrowing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/output.txt b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/output.txt
new file mode 100644
index 000000000..8e84746ee
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling borrowing v0.1.0 (file:///projects/borrowing)
+error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
+ --> src/main.rs:3:13
+ |
+2 | let x = 5;
+ | - help: consider changing this to be mutable: `mut x`
+3 | let y = &mut x;
+ | ^^^^^^ cannot borrow as mutable
+
+For more information about this error, try `rustc --explain E0596`.
+error: could not compile `borrowing` due to previous error
diff --git a/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/src/main.rs
new file mode 100644
index 000000000..8f48d41c1
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/src/main.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let x = 5;
+ let y = &mut x;
+}
diff --git a/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.lock b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.lock
new file mode 100644
index 000000000..4297c6733
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "deref-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.toml b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.toml
new file mode 100644
index 000000000..67ec198f7
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "deref-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/output.txt b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/output.txt
new file mode 100644
index 000000000..a03cc34e2
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/output.txt
@@ -0,0 +1,23 @@
+$ cargo run
+ Compiling deref-example v0.1.0 (file:///projects/deref-example)
+error[E0277]: can't compare `{integer}` with `&{integer}`
+ --> src/main.rs:6:5
+ |
+6 | assert_eq!(5, y);
+ | ^^^^^^^^^^^^^^^^ no implementation for `{integer} == &{integer}`
+ |
+ = help: the trait `PartialEq<&{integer}>` is not implemented for `{integer}`
+ = help: the following other types implement trait `PartialEq<Rhs>`:
+ f32
+ f64
+ i128
+ i16
+ i32
+ i64
+ i8
+ isize
+ and 6 others
+ = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `deref-example` due to previous error
diff --git a/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/src/main.rs b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/src/main.rs
new file mode 100644
index 000000000..4e20cae0b
--- /dev/null
+++ b/src/doc/book/listings/ch15-smart-pointers/output-only-01-comparing-to-reference/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ let x = 5;
+ let y = &x;
+
+ assert_eq!(5, x);
+ assert_eq!(5, y);
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/src/main.rs
new file mode 100644
index 000000000..6305a98e3
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-01/src/main.rs
@@ -0,0 +1,16 @@
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ thread::spawn(|| {
+ for i in 1..10 {
+ println!("hi number {} from the spawned thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+ });
+
+ for i in 1..5 {
+ println!("hi number {} from the main thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/src/main.rs
new file mode 100644
index 000000000..e37607f1d
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-02/src/main.rs
@@ -0,0 +1,18 @@
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let handle = thread::spawn(|| {
+ for i in 1..10 {
+ println!("hi number {} from the spawned thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+ });
+
+ for i in 1..5 {
+ println!("hi number {} from the main thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+
+ handle.join().unwrap();
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/output.txt b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/output.txt
new file mode 100644
index 000000000..321bf59d7
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/output.txt
@@ -0,0 +1,25 @@
+$ cargo run
+ Compiling threads v0.1.0 (file:///projects/threads)
+error[E0373]: closure may outlive the current function, but it borrows `v`, which is owned by the current function
+ --> src/main.rs:6:32
+ |
+6 | let handle = thread::spawn(|| {
+ | ^^ may outlive borrowed value `v`
+7 | println!("Here's a vector: {:?}", v);
+ | - `v` is borrowed here
+ |
+note: function requires argument type to outlive `'static`
+ --> src/main.rs:6:18
+ |
+6 | let handle = thread::spawn(|| {
+ | __________________^
+7 | | println!("Here's a vector: {:?}", v);
+8 | | });
+ | |______^
+help: to force the closure to take ownership of `v` (and any other referenced variables), use the `move` keyword
+ |
+6 | let handle = thread::spawn(move || {
+ | ++++
+
+For more information about this error, try `rustc --explain E0373`.
+error: could not compile `threads` due to previous error
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/src/main.rs
new file mode 100644
index 000000000..defc87648
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-03/src/main.rs
@@ -0,0 +1,11 @@
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(|| {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ handle.join().unwrap();
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/src/main.rs
new file mode 100644
index 000000000..0bccc5f56
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-04/src/main.rs
@@ -0,0 +1,13 @@
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(|| {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ drop(v); // oh no!
+
+ handle.join().unwrap();
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/src/main.rs
new file mode 100644
index 000000000..a6547dc4c
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-05/src/main.rs
@@ -0,0 +1,11 @@
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(move || {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ handle.join().unwrap();
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.lock
new file mode 100644
index 000000000..55d2252da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "message-passing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.toml
new file mode 100644
index 000000000..24bd2ee7b
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "message-passing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/src/main.rs
new file mode 100644
index 000000000..d80dac4a0
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-06/src/main.rs
@@ -0,0 +1,5 @@
+use std::sync::mpsc;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.lock
new file mode 100644
index 000000000..55d2252da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "message-passing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.toml
new file mode 100644
index 000000000..24bd2ee7b
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "message-passing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/src/main.rs
new file mode 100644
index 000000000..7859b64da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-07/src/main.rs
@@ -0,0 +1,11 @@
+use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let val = String::from("hi");
+ tx.send(val).unwrap();
+ });
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.lock
new file mode 100644
index 000000000..55d2252da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "message-passing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.toml
new file mode 100644
index 000000000..24bd2ee7b
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "message-passing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/src/main.rs
new file mode 100644
index 000000000..fbba9167d
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-08/src/main.rs
@@ -0,0 +1,14 @@
+use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let val = String::from("hi");
+ tx.send(val).unwrap();
+ });
+
+ let received = rx.recv().unwrap();
+ println!("Got: {}", received);
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.lock
new file mode 100644
index 000000000..55d2252da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "message-passing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.toml
new file mode 100644
index 000000000..24bd2ee7b
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "message-passing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/output.txt b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/output.txt
new file mode 100644
index 000000000..0795a3a4f
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling message-passing v0.1.0 (file:///projects/message-passing)
+error[E0382]: borrow of moved value: `val`
+ --> src/main.rs:10:31
+ |
+8 | let val = String::from("hi");
+ | --- move occurs because `val` has type `String`, which does not implement the `Copy` trait
+9 | tx.send(val).unwrap();
+ | --- value moved here
+10 | println!("val is {}", val);
+ | ^^^ value borrowed here after move
+ |
+ = note: this error originates in the macro `$crate::format_args_nl` (in Nightly builds, run with -Z macro-backtrace for more info)
+
+For more information about this error, try `rustc --explain E0382`.
+error: could not compile `message-passing` due to previous error
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/src/main.rs
new file mode 100644
index 000000000..98a8129ab
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-09/src/main.rs
@@ -0,0 +1,15 @@
+use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let val = String::from("hi");
+ tx.send(val).unwrap();
+ println!("val is {}", val);
+ });
+
+ let received = rx.recv().unwrap();
+ println!("Got: {}", received);
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.lock
new file mode 100644
index 000000000..55d2252da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "message-passing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.toml
new file mode 100644
index 000000000..24bd2ee7b
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "message-passing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/src/main.rs
new file mode 100644
index 000000000..82b220de4
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-10/src/main.rs
@@ -0,0 +1,25 @@
+use std::sync::mpsc;
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let vals = vec![
+ String::from("hi"),
+ String::from("from"),
+ String::from("the"),
+ String::from("thread"),
+ ];
+
+ for val in vals {
+ tx.send(val).unwrap();
+ thread::sleep(Duration::from_secs(1));
+ }
+ });
+
+ for received in rx {
+ println!("Got: {}", received);
+ }
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.lock
new file mode 100644
index 000000000..55d2252da
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "message-passing"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.toml
new file mode 100644
index 000000000..24bd2ee7b
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "message-passing"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/src/main.rs
new file mode 100644
index 000000000..d92deab5c
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-11/src/main.rs
@@ -0,0 +1,46 @@
+use std::sync::mpsc;
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ // ANCHOR: here
+ // --snip--
+
+ let (tx, rx) = mpsc::channel();
+
+ let tx1 = tx.clone();
+ thread::spawn(move || {
+ let vals = vec![
+ String::from("hi"),
+ String::from("from"),
+ String::from("the"),
+ String::from("thread"),
+ ];
+
+ for val in vals {
+ tx1.send(val).unwrap();
+ thread::sleep(Duration::from_secs(1));
+ }
+ });
+
+ thread::spawn(move || {
+ let vals = vec![
+ String::from("more"),
+ String::from("messages"),
+ String::from("for"),
+ String::from("you"),
+ ];
+
+ for val in vals {
+ tx.send(val).unwrap();
+ thread::sleep(Duration::from_secs(1));
+ }
+ });
+
+ for received in rx {
+ println!("Got: {}", received);
+ }
+
+ // --snip--
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.lock
new file mode 100644
index 000000000..8e7ba9cf5
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "shared-state"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.toml
new file mode 100644
index 000000000..da297eaba
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shared-state"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/src/main.rs
new file mode 100644
index 000000000..0c0d6767a
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-12/src/main.rs
@@ -0,0 +1,12 @@
+use std::sync::Mutex;
+
+fn main() {
+ let m = Mutex::new(5);
+
+ {
+ let mut num = m.lock().unwrap();
+ *num = 6;
+ }
+
+ println!("m = {:?}", m);
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.lock
new file mode 100644
index 000000000..8e7ba9cf5
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "shared-state"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.toml
new file mode 100644
index 000000000..da297eaba
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shared-state"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/output.txt b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/output.txt
new file mode 100644
index 000000000..ea6963903
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/output.txt
@@ -0,0 +1,15 @@
+$ cargo run
+ Compiling shared-state v0.1.0 (file:///projects/shared-state)
+error[E0382]: use of moved value: `counter`
+ --> src/main.rs:9:36
+ |
+5 | let counter = Mutex::new(0);
+ | ------- move occurs because `counter` has type `Mutex<i32>`, which does not implement the `Copy` trait
+...
+9 | let handle = thread::spawn(move || {
+ | ^^^^^^^ value moved into closure here, in previous iteration of loop
+10 | let mut num = counter.lock().unwrap();
+ | ------- use occurs due to use in closure
+
+For more information about this error, try `rustc --explain E0382`.
+error: could not compile `shared-state` due to previous error
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/src/main.rs
new file mode 100644
index 000000000..4e380a59a
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-13/src/main.rs
@@ -0,0 +1,22 @@
+use std::sync::Mutex;
+use std::thread;
+
+fn main() {
+ let counter = Mutex::new(0);
+ let mut handles = vec![];
+
+ for _ in 0..10 {
+ let handle = thread::spawn(move || {
+ let mut num = counter.lock().unwrap();
+
+ *num += 1;
+ });
+ handles.push(handle);
+ }
+
+ for handle in handles {
+ handle.join().unwrap();
+ }
+
+ println!("Result: {}", *counter.lock().unwrap());
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.lock
new file mode 100644
index 000000000..8e7ba9cf5
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "shared-state"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.toml
new file mode 100644
index 000000000..da297eaba
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shared-state"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/output.txt b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/output.txt
new file mode 100644
index 000000000..9546e1e48
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/output.txt
@@ -0,0 +1,21 @@
+$ cargo run
+ Compiling shared-state v0.1.0 (file:///projects/shared-state)
+error[E0277]: `Rc<Mutex<i32>>` cannot be sent between threads safely
+ --> src/main.rs:11:22
+ |
+11 | let handle = thread::spawn(move || {
+ | ______________________^^^^^^^^^^^^^_-
+ | | |
+ | | `Rc<Mutex<i32>>` cannot be sent between threads safely
+12 | | let mut num = counter.lock().unwrap();
+13 | |
+14 | | *num += 1;
+15 | | });
+ | |_________- within this `[closure@src/main.rs:11:36: 15:10]`
+ |
+ = help: within `[closure@src/main.rs:11:36: 15:10]`, the trait `Send` is not implemented for `Rc<Mutex<i32>>`
+ = note: required because it appears within the type `[closure@src/main.rs:11:36: 15:10]`
+note: required by a bound in `spawn`
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `shared-state` due to previous error
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/src/main.rs
new file mode 100644
index 000000000..d940b1a34
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-14/src/main.rs
@@ -0,0 +1,24 @@
+use std::rc::Rc;
+use std::sync::Mutex;
+use std::thread;
+
+fn main() {
+ let counter = Rc::new(Mutex::new(0));
+ let mut handles = vec![];
+
+ for _ in 0..10 {
+ let counter = Rc::clone(&counter);
+ let handle = thread::spawn(move || {
+ let mut num = counter.lock().unwrap();
+
+ *num += 1;
+ });
+ handles.push(handle);
+ }
+
+ for handle in handles {
+ handle.join().unwrap();
+ }
+
+ println!("Result: {}", *counter.lock().unwrap());
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.lock
new file mode 100644
index 000000000..8e7ba9cf5
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "shared-state"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.toml
new file mode 100644
index 000000000..da297eaba
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shared-state"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/src/main.rs
new file mode 100644
index 000000000..30247dd52
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/listing-16-15/src/main.rs
@@ -0,0 +1,23 @@
+use std::sync::{Arc, Mutex};
+use std::thread;
+
+fn main() {
+ let counter = Arc::new(Mutex::new(0));
+ let mut handles = vec![];
+
+ for _ in 0..10 {
+ let counter = Arc::clone(&counter);
+ let handle = thread::spawn(move || {
+ let mut num = counter.lock().unwrap();
+
+ *num += 1;
+ });
+ handles.push(handle);
+ }
+
+ for handle in handles {
+ handle.join().unwrap();
+ }
+
+ println!("Result: {}", *counter.lock().unwrap());
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/src/main.rs
new file mode 100644
index 000000000..6205e57d3
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-01-join-too-early/src/main.rs
@@ -0,0 +1,18 @@
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let handle = thread::spawn(|| {
+ for i in 1..10 {
+ println!("hi number {} from the spawned thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+ });
+
+ handle.join().unwrap();
+
+ for i in 1..5 {
+ println!("hi number {} from the main thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.lock
new file mode 100644
index 000000000..8e7ba9cf5
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "shared-state"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.toml
new file mode 100644
index 000000000..da297eaba
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "shared-state"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/src/main.rs
new file mode 100644
index 000000000..dbb139771
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/no-listing-02-no-loop-to-understand-error/src/main.rs
@@ -0,0 +1,27 @@
+use std::sync::Mutex;
+use std::thread;
+
+fn main() {
+ let counter = Mutex::new(0);
+ let mut handles = vec![];
+
+ let handle = thread::spawn(move || {
+ let mut num = counter.lock().unwrap();
+
+ *num += 1;
+ });
+ handles.push(handle);
+
+ let handle2 = thread::spawn(move || {
+ let mut num2 = counter.lock().unwrap();
+
+ *num2 += 1;
+ });
+ handles.push(handle2);
+
+ for handle in handles {
+ handle.join().unwrap();
+ }
+
+ println!("Result: {}", *counter.lock().unwrap());
+}
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.lock b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.lock
new file mode 100644
index 000000000..8ecc3ae17
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "threads"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.toml b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.toml
new file mode 100644
index 000000000..bd4edf762
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "threads"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/output.txt b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/output.txt
new file mode 100644
index 000000000..f7be53b9a
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/output.txt
@@ -0,0 +1,18 @@
+$ cargo run
+ Compiling threads v0.1.0 (file:///projects/threads)
+error[E0382]: use of moved value: `v`
+ --> src/main.rs:10:10
+ |
+4 | let v = vec![1, 2, 3];
+ | - move occurs because `v` has type `Vec<i32>`, which does not implement the `Copy` trait
+5 |
+6 | let handle = thread::spawn(move || {
+ | ------- value moved into closure here
+7 | println!("Here's a vector: {:?}", v);
+ | - variable moved due to use in closure
+...
+10 | drop(v); // oh no!
+ | ^ value used here after move
+
+For more information about this error, try `rustc --explain E0382`.
+error: could not compile `threads` due to previous error
diff --git a/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/src/main.rs b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/src/main.rs
new file mode 100644
index 000000000..70f659c5f
--- /dev/null
+++ b/src/doc/book/listings/ch16-fearless-concurrency/output-only-01-move-drop/src/main.rs
@@ -0,0 +1,13 @@
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(move || {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ drop(v); // oh no!
+
+ handle.join().unwrap();
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-01/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-01/Cargo.lock
new file mode 100644
index 000000000..471d8dfc3
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "averaged-collection"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-01/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-01/Cargo.toml
new file mode 100644
index 000000000..aed614e93
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "averaged-collection"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-01/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-01/src/lib.rs
new file mode 100644
index 000000000..b5ce2ab64
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-01/src/lib.rs
@@ -0,0 +1,4 @@
+pub struct AveragedCollection {
+ list: Vec<i32>,
+ average: f64,
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-02/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-02/Cargo.lock
new file mode 100644
index 000000000..471d8dfc3
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "averaged-collection"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-02/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-02/Cargo.toml
new file mode 100644
index 000000000..aed614e93
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "averaged-collection"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-02/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-02/src/lib.rs
new file mode 100644
index 000000000..bb407ec5f
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-02/src/lib.rs
@@ -0,0 +1,33 @@
+pub struct AveragedCollection {
+ list: Vec<i32>,
+ average: f64,
+}
+
+// ANCHOR: here
+impl AveragedCollection {
+ pub fn add(&mut self, value: i32) {
+ self.list.push(value);
+ self.update_average();
+ }
+
+ pub fn remove(&mut self) -> Option<i32> {
+ let result = self.list.pop();
+ match result {
+ Some(value) => {
+ self.update_average();
+ Some(value)
+ }
+ None => None,
+ }
+ }
+
+ pub fn average(&self) -> f64 {
+ self.average
+ }
+
+ fn update_average(&mut self) {
+ let total: i32 = self.list.iter().sum();
+ self.average = total as f64 / self.list.len() as f64;
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-03/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-03/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-03/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-03/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-03/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-03/src/lib.rs
new file mode 100644
index 000000000..3a5cb779c
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-03/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait Draw {
+ fn draw(&self);
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-04/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-04/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-04/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-04/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-04/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-04/src/lib.rs
new file mode 100644
index 000000000..0c45e2a62
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-04/src/lib.rs
@@ -0,0 +1,9 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+// ANCHOR: here
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-05/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-05/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-05/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-05/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-05/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-05/src/lib.rs
new file mode 100644
index 000000000..57ebb5782
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-05/src/lib.rs
@@ -0,0 +1,17 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+
+// ANCHOR: here
+impl Screen {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-06/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-06/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-06/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-06/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-06/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-06/src/lib.rs
new file mode 100644
index 000000000..63a8907d3
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-06/src/lib.rs
@@ -0,0 +1,20 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+// ANCHOR: here
+pub struct Screen<T: Draw> {
+ pub components: Vec<T>,
+}
+
+impl<T> Screen<T>
+where
+ T: Draw,
+{
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-07/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-07/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-07/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-07/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-07/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-07/src/lib.rs
new file mode 100644
index 000000000..b16cd0155
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-07/src/lib.rs
@@ -0,0 +1,29 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+
+impl Screen {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+
+// ANCHOR: here
+pub struct Button {
+ pub width: u32,
+ pub height: u32,
+ pub label: String,
+}
+
+impl Draw for Button {
+ fn draw(&self) {
+ // code to actually draw a button
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-08/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-08/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-08/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-08/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-08/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-08/src/lib.rs
new file mode 100644
index 000000000..960fee23d
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-08/src/lib.rs
@@ -0,0 +1,27 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+
+impl Screen {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+
+pub struct Button {
+ pub width: u32,
+ pub height: u32,
+ pub label: String,
+}
+
+impl Draw for Button {
+ fn draw(&self) {
+ // code to actually draw a button
+ }
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-08/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-08/src/main.rs
new file mode 100644
index 000000000..9575d407e
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-08/src/main.rs
@@ -0,0 +1,17 @@
+// ANCHOR: here
+use gui::Draw;
+
+struct SelectBox {
+ width: u32,
+ height: u32,
+ options: Vec<String>,
+}
+
+impl Draw for SelectBox {
+ fn draw(&self) {
+ // code to actually draw a select box
+ }
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-09/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-09/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-09/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-09/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-09/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-09/src/lib.rs
new file mode 100644
index 000000000..960fee23d
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-09/src/lib.rs
@@ -0,0 +1,27 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+
+impl Screen {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+
+pub struct Button {
+ pub width: u32,
+ pub height: u32,
+ pub label: String,
+}
+
+impl Draw for Button {
+ fn draw(&self) {
+ // code to actually draw a button
+ }
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-09/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-09/src/main.rs
new file mode 100644
index 000000000..4eb13f6b7
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-09/src/main.rs
@@ -0,0 +1,40 @@
+use gui::Draw;
+
+struct SelectBox {
+ width: u32,
+ height: u32,
+ options: Vec<String>,
+}
+
+impl Draw for SelectBox {
+ fn draw(&self) {
+ // code to actually draw a select box
+ }
+}
+
+// ANCHOR: here
+use gui::{Button, Screen};
+
+fn main() {
+ let screen = Screen {
+ components: vec![
+ Box::new(SelectBox {
+ width: 75,
+ height: 10,
+ options: vec![
+ String::from("Yes"),
+ String::from("Maybe"),
+ String::from("No"),
+ ],
+ }),
+ Box::new(Button {
+ width: 50,
+ height: 10,
+ label: String::from("OK"),
+ }),
+ ],
+ };
+
+ screen.run();
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-10/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-10/Cargo.lock
new file mode 100644
index 000000000..00d7b2182
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "gui"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-10/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-10/Cargo.toml
new file mode 100644
index 000000000..9b816e766
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "gui"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-10/output.txt b/src/doc/book/listings/ch17-oop/listing-17-10/output.txt
new file mode 100644
index 000000000..74330fa0a
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-10/output.txt
@@ -0,0 +1,13 @@
+$ cargo run
+ Compiling gui v0.1.0 (file:///projects/gui)
+error[E0277]: the trait bound `String: Draw` is not satisfied
+ --> src/main.rs:5:26
+ |
+5 | components: vec![Box::new(String::from("Hi"))],
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Draw` is not implemented for `String`
+ |
+ = help: the trait `Draw` is implemented for `Button`
+ = note: required for the cast to the object type `dyn Draw`
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `gui` due to previous error
diff --git a/src/doc/book/listings/ch17-oop/listing-17-10/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-10/src/lib.rs
new file mode 100644
index 000000000..960fee23d
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-10/src/lib.rs
@@ -0,0 +1,27 @@
+pub trait Draw {
+ fn draw(&self);
+}
+
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+
+impl Screen {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+
+pub struct Button {
+ pub width: u32,
+ pub height: u32,
+ pub label: String,
+}
+
+impl Draw for Button {
+ fn draw(&self) {
+ // code to actually draw a button
+ }
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-10/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-10/src/main.rs
new file mode 100644
index 000000000..2ede87ab7
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-10/src/main.rs
@@ -0,0 +1,9 @@
+use gui::Screen;
+
+fn main() {
+ let screen = Screen {
+ components: vec![Box::new(String::from("Hi"))],
+ };
+
+ screen.run();
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-11/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-11/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-11/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-11/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-11/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-11/src/main.rs
new file mode 100644
index 000000000..d99170a97
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-11/src/main.rs
@@ -0,0 +1,20 @@
+// ANCHOR: all
+use blog::Post;
+
+// ANCHOR: here
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+ // ANCHOR_END: here
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+ // ANCHOR: here
+}
+// ANCHOR_END: here
+// ANCHOR_END: all
diff --git a/src/doc/book/listings/ch17-oop/listing-17-12/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-12/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-12/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-12/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-12/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-12/src/lib.rs
new file mode 100644
index 000000000..b8156c39d
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-12/src/lib.rs
@@ -0,0 +1,19 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+impl Post {
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+}
+
+trait State {}
+
+struct Draft {}
+
+impl State for Draft {}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-12/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-12/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-12/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-13/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-13/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-13/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-13/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-13/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-13/src/lib.rs
new file mode 100644
index 000000000..bd68557a0
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-13/src/lib.rs
@@ -0,0 +1,28 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+// ANCHOR: here
+impl Post {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+
+ // ANCHOR: here
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+}
+// ANCHOR_END: here
+
+trait State {}
+
+struct Draft {}
+
+impl State for Draft {}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-13/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-13/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-13/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-14/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-14/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-14/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-14/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-14/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-14/src/lib.rs
new file mode 100644
index 000000000..09cf0c466
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-14/src/lib.rs
@@ -0,0 +1,32 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+// ANCHOR: here
+impl Post {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ // ANCHOR: here
+ pub fn content(&self) -> &str {
+ ""
+ }
+}
+// ANCHOR_END: here
+
+trait State {}
+
+struct Draft {}
+
+impl State for Draft {}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-14/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-14/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-14/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-15/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-15/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-15/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-15/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-15/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-15/src/lib.rs
new file mode 100644
index 000000000..909dd5274
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-15/src/lib.rs
@@ -0,0 +1,52 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+// ANCHOR: here
+impl Post {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ pub fn content(&self) -> &str {
+ ""
+ }
+
+ // ANCHOR: here
+ pub fn request_review(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.request_review())
+ }
+ }
+}
+
+trait State {
+ fn request_review(self: Box<Self>) -> Box<dyn State>;
+}
+
+struct Draft {}
+
+impl State for Draft {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ Box::new(PendingReview {})
+ }
+}
+
+struct PendingReview {}
+
+impl State for PendingReview {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-15/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-15/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-15/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-16/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-16/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-16/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-16/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-16/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-16/src/lib.rs
new file mode 100644
index 000000000..92cb29813
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-16/src/lib.rs
@@ -0,0 +1,85 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+// ANCHOR: here
+impl Post {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ pub fn content(&self) -> &str {
+ ""
+ }
+
+ pub fn request_review(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.request_review())
+ }
+ }
+
+ // ANCHOR: here
+ pub fn approve(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.approve())
+ }
+ }
+}
+
+trait State {
+ fn request_review(self: Box<Self>) -> Box<dyn State>;
+ fn approve(self: Box<Self>) -> Box<dyn State>;
+}
+
+struct Draft {}
+
+impl State for Draft {
+ // --snip--
+ // ANCHOR_END: here
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ Box::new(PendingReview {})
+ }
+
+ // ANCHOR: here
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
+
+struct PendingReview {}
+
+impl State for PendingReview {
+ // --snip--
+ // ANCHOR_END: here
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ // ANCHOR: here
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ Box::new(Published {})
+ }
+}
+
+struct Published {}
+
+impl State for Published {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-16/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-16/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-16/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-17/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-17/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-17/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-17/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-17/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-17/src/lib.rs
new file mode 100644
index 000000000..0beee7b8d
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-17/src/lib.rs
@@ -0,0 +1,82 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+// ANCHOR: here
+impl Post {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ // ANCHOR: here
+ pub fn content(&self) -> &str {
+ self.state.as_ref().unwrap().content(self)
+ }
+ // --snip--
+ // ANCHOR_END: here
+
+ pub fn request_review(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.request_review())
+ }
+ }
+
+ pub fn approve(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.approve())
+ }
+ }
+ // ANCHOR: here
+}
+// ANCHOR_END: here
+
+trait State {
+ fn request_review(self: Box<Self>) -> Box<dyn State>;
+ fn approve(self: Box<Self>) -> Box<dyn State>;
+}
+
+struct Draft {}
+
+impl State for Draft {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ Box::new(PendingReview {})
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
+
+struct PendingReview {}
+
+impl State for PendingReview {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ Box::new(Published {})
+ }
+}
+
+struct Published {}
+
+impl State for Published {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-17/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-17/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-17/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-18/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-18/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-18/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-18/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-18/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-18/src/lib.rs
new file mode 100644
index 000000000..1bac8a87a
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-18/src/lib.rs
@@ -0,0 +1,94 @@
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+impl Post {
+ pub fn new() -> Post {
+ Post {
+ state: Some(Box::new(Draft {})),
+ content: String::new(),
+ }
+ }
+
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ pub fn content(&self) -> &str {
+ self.state.as_ref().unwrap().content(self)
+ }
+
+ pub fn request_review(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.request_review())
+ }
+ }
+
+ pub fn approve(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.approve())
+ }
+ }
+}
+
+// ANCHOR: here
+trait State {
+ // --snip--
+ // ANCHOR_END: here
+ fn request_review(self: Box<Self>) -> Box<dyn State>;
+ fn approve(self: Box<Self>) -> Box<dyn State>;
+
+ // ANCHOR: here
+ fn content<'a>(&self, post: &'a Post) -> &'a str {
+ ""
+ }
+}
+
+// --snip--
+// ANCHOR_END: here
+
+struct Draft {}
+
+impl State for Draft {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ Box::new(PendingReview {})
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
+
+struct PendingReview {}
+
+impl State for PendingReview {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ Box::new(Published {})
+ }
+}
+
+// ANCHOR: here
+struct Published {}
+
+impl State for Published {
+ // --snip--
+ // ANCHOR_END: here
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ // ANCHOR: here
+ fn content<'a>(&self, post: &'a Post) -> &'a str {
+ &post.content
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-18/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-18/src/main.rs
new file mode 100644
index 000000000..14b4c0824
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-18/src/main.rs
@@ -0,0 +1,14 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+
+ post.request_review();
+ assert_eq!("", post.content());
+
+ post.approve();
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-19/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-19/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-19/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-19/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-19/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-19/src/lib.rs
new file mode 100644
index 000000000..bfe034eaf
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-19/src/lib.rs
@@ -0,0 +1,25 @@
+pub struct Post {
+ content: String,
+}
+
+pub struct DraftPost {
+ content: String,
+}
+
+impl Post {
+ pub fn new() -> DraftPost {
+ DraftPost {
+ content: String::new(),
+ }
+ }
+
+ pub fn content(&self) -> &str {
+ &self.content
+ }
+}
+
+impl DraftPost {
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-20/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-20/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-20/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-20/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-20/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-20/src/lib.rs
new file mode 100644
index 000000000..3b82ec05d
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-20/src/lib.rs
@@ -0,0 +1,48 @@
+pub struct Post {
+ content: String,
+}
+
+pub struct DraftPost {
+ content: String,
+}
+
+impl Post {
+ pub fn new() -> DraftPost {
+ DraftPost {
+ content: String::new(),
+ }
+ }
+
+ pub fn content(&self) -> &str {
+ &self.content
+ }
+}
+
+// ANCHOR: here
+impl DraftPost {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ // ANCHOR: here
+ pub fn request_review(self) -> PendingReviewPost {
+ PendingReviewPost {
+ content: self.content,
+ }
+ }
+}
+
+pub struct PendingReviewPost {
+ content: String,
+}
+
+impl PendingReviewPost {
+ pub fn approve(self) -> Post {
+ Post {
+ content: self.content,
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch17-oop/listing-17-21/Cargo.lock b/src/doc/book/listings/ch17-oop/listing-17-21/Cargo.lock
new file mode 100644
index 000000000..b6f4232c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "blog"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch17-oop/listing-17-21/Cargo.toml b/src/doc/book/listings/ch17-oop/listing-17-21/Cargo.toml
new file mode 100644
index 000000000..1619af5c6
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "blog"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch17-oop/listing-17-21/src/lib.rs b/src/doc/book/listings/ch17-oop/listing-17-21/src/lib.rs
new file mode 100644
index 000000000..38500a651
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-21/src/lib.rs
@@ -0,0 +1,43 @@
+pub struct Post {
+ content: String,
+}
+
+pub struct DraftPost {
+ content: String,
+}
+
+impl Post {
+ pub fn new() -> DraftPost {
+ DraftPost {
+ content: String::new(),
+ }
+ }
+
+ pub fn content(&self) -> &str {
+ &self.content
+ }
+}
+
+impl DraftPost {
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+
+ pub fn request_review(self) -> PendingReviewPost {
+ PendingReviewPost {
+ content: self.content,
+ }
+ }
+}
+
+pub struct PendingReviewPost {
+ content: String,
+}
+
+impl PendingReviewPost {
+ pub fn approve(self) -> Post {
+ Post {
+ content: self.content,
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch17-oop/listing-17-21/src/main.rs b/src/doc/book/listings/ch17-oop/listing-17-21/src/main.rs
new file mode 100644
index 000000000..720c55e6a
--- /dev/null
+++ b/src/doc/book/listings/ch17-oop/listing-17-21/src/main.rs
@@ -0,0 +1,13 @@
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+
+ let post = post.request_review();
+
+ let post = post.approve();
+
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs
new file mode 100644
index 000000000..fc87768fb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-01/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ let favorite_color: Option<&str> = None;
+ let is_tuesday = false;
+ let age: Result<u8, _> = "34".parse();
+
+ if let Some(color) = favorite_color {
+ println!("Using your favorite color, {color}, as the background");
+ } else if is_tuesday {
+ println!("Tuesday is green day!");
+ } else if let Ok(age) = age {
+ if age > 30 {
+ println!("Using purple as the background color");
+ } else {
+ println!("Using orange as the background color");
+ }
+ } else {
+ println!("Using blue as the background color");
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs
new file mode 100644
index 000000000..5f75a4f2d
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-02/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ let mut stack = Vec::new();
+
+ stack.push(1);
+ stack.push(2);
+ stack.push(3);
+
+ while let Some(top) = stack.pop() {
+ println!("{}", top);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt
new file mode 100644
index 000000000..02fdecbf5
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.52s
+ Running `target/debug/patterns`
+a is at index 0
+b is at index 1
+c is at index 2
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs
new file mode 100644
index 000000000..eb922d62c
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-03/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ let v = vec!['a', 'b', 'c'];
+
+ for (index, value) in v.iter().enumerate() {
+ println!("{} is at index {}", value, index);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs
new file mode 100644
index 000000000..27b0c3fbd
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-04/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let (x, y, z) = (1, 2, 3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt
new file mode 100644
index 000000000..57916a1f1
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/output.txt
@@ -0,0 +1,15 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+error[E0308]: mismatched types
+ --> src/main.rs:2:9
+ |
+2 | let (x, y) = (1, 2, 3);
+ | ^^^^^^ --------- this expression has type `({integer}, {integer}, {integer})`
+ | |
+ | expected a tuple with 3 elements, found one with 2 elements
+ |
+ = note: expected tuple `({integer}, {integer}, {integer})`
+ found tuple `(_, _)`
+
+For more information about this error, try `rustc --explain E0308`.
+error: could not compile `patterns` due to previous error
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs
new file mode 100644
index 000000000..39f768e29
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-05/src/main.rs
@@ -0,0 +1,5 @@
+fn main() {
+ // ANCHOR: here
+ let (x, y) = (1, 2, 3);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs
new file mode 100644
index 000000000..c5d71e6c1
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-06/src/main.rs
@@ -0,0 +1,7 @@
+// ANCHOR: here
+fn foo(x: i32) {
+ // code goes here
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs
new file mode 100644
index 000000000..4eccb8088
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-07/src/main.rs
@@ -0,0 +1,8 @@
+fn print_coordinates(&(x, y): &(i32, i32)) {
+ println!("Current location: ({}, {})", x, y);
+}
+
+fn main() {
+ let point = (3, 5);
+ print_coordinates(&point);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt
new file mode 100644
index 000000000..72274d07c
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/output.txt
@@ -0,0 +1,19 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+error[E0005]: refutable pattern in local binding: `None` not covered
+ --> src/main.rs:3:9
+ |
+3 | let Some(x) = some_option_value;
+ | ^^^^^^^ pattern `None` not covered
+ |
+ = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
+ = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
+note: `Option<i32>` defined here
+ = note: the matched value is of type `Option<i32>`
+help: you might want to use `if let` to ignore the variant that isn't matched
+ |
+3 | let x = if let Some(x) = some_option_value { x } else { todo!() };
+ | ++++++++++ ++++++++++++++++++++++
+
+For more information about this error, try `rustc --explain E0005`.
+error: could not compile `patterns` due to previous error
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs
new file mode 100644
index 000000000..7baa02a49
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-08/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ let some_option_value: Option<i32> = None;
+ // ANCHOR: here
+ let Some(x) = some_option_value;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs
new file mode 100644
index 000000000..d6274fc0e
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-09/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ let some_option_value: Option<i32> = None;
+ // ANCHOR: here
+ if let Some(x) = some_option_value {
+ println!("{}", x);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt
new file mode 100644
index 000000000..702d10a23
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/output.txt
@@ -0,0 +1,16 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+warning: irrefutable `if let` pattern
+ --> src/main.rs:2:8
+ |
+2 | if let x = 5 {
+ | ^^^^^^^^^
+ |
+ = note: `#[warn(irrefutable_let_patterns)]` on by default
+ = note: this pattern will always match, so the `if let` is useless
+ = help: consider replacing the `if let` with a `let`
+
+warning: `patterns` (bin "patterns") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 0.39s
+ Running `target/debug/patterns`
+5
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs
new file mode 100644
index 000000000..cb81772e0
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-10/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ if let x = 5 {
+ println!("{}", x);
+ };
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs
new file mode 100644
index 000000000..db942b7ac
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-11/src/main.rs
@@ -0,0 +1,14 @@
+fn main() {
+ // ANCHOR: here
+ let x = Some(5);
+ let y = 10;
+
+ match x {
+ Some(50) => println!("Got 50"),
+ Some(y) => println!("Matched, y = {y}"),
+ _ => println!("Default case, x = {:?}", x),
+ }
+
+ println!("at the end: x = {:?}, y = {y}", x);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs
new file mode 100644
index 000000000..62f4ccbf1
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-12/src/main.rs
@@ -0,0 +1,12 @@
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ let Point { x: a, y: b } = p;
+ assert_eq!(0, a);
+ assert_eq!(7, b);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs
new file mode 100644
index 000000000..5badc1594
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-13/src/main.rs
@@ -0,0 +1,12 @@
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ let Point { x, y } = p;
+ assert_eq!(0, x);
+ assert_eq!(7, y);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs
new file mode 100644
index 000000000..8d445d9b9
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-14/src/main.rs
@@ -0,0 +1,16 @@
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+// ANCHOR: here
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ match p {
+ Point { x, y: 0 } => println!("On the x axis at {}", x),
+ Point { x: 0, y } => println!("On the y axis at {}", y),
+ Point { x, y } => println!("On neither axis: ({}, {})", x, y),
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs
new file mode 100644
index 000000000..9b8dac193
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-15/src/main.rs
@@ -0,0 +1,27 @@
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+
+fn main() {
+ let msg = Message::ChangeColor(0, 160, 255);
+
+ match msg {
+ Message::Quit => {
+ println!("The Quit variant has no data to destructure.")
+ }
+ Message::Move { x, y } => {
+ println!(
+ "Move in the x direction {} and in the y direction {}",
+ x, y
+ );
+ }
+ Message::Write(text) => println!("Text message: {}", text),
+ Message::ChangeColor(r, g, b) => println!(
+ "Change the color to red {}, green {}, and blue {}",
+ r, g, b
+ ),
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs
new file mode 100644
index 000000000..ed6a20bf4
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-16/src/main.rs
@@ -0,0 +1,27 @@
+enum Color {
+ Rgb(i32, i32, i32),
+ Hsv(i32, i32, i32),
+}
+
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(Color),
+}
+
+fn main() {
+ let msg = Message::ChangeColor(Color::Hsv(0, 160, 255));
+
+ match msg {
+ Message::ChangeColor(Color::Rgb(r, g, b)) => println!(
+ "Change the color to red {}, green {}, and blue {}",
+ r, g, b
+ ),
+ Message::ChangeColor(Color::Hsv(h, s, v)) => println!(
+ "Change the color to hue {}, saturation {}, and value {}",
+ h, s, v
+ ),
+ _ => (),
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs
new file mode 100644
index 000000000..cf1fbe072
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-17/src/main.rs
@@ -0,0 +1,7 @@
+fn foo(_: i32, y: i32) {
+ println!("This code only uses the y parameter: {}", y);
+}
+
+fn main() {
+ foo(3, 4);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs
new file mode 100644
index 000000000..b776c64c4
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-18/src/main.rs
@@ -0,0 +1,17 @@
+fn main() {
+ // ANCHOR: here
+ let mut setting_value = Some(5);
+ let new_setting_value = Some(10);
+
+ match (setting_value, new_setting_value) {
+ (Some(_), Some(_)) => {
+ println!("Can't overwrite an existing customized value");
+ }
+ _ => {
+ setting_value = new_setting_value;
+ }
+ }
+
+ println!("setting is {:?}", setting_value);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs
new file mode 100644
index 000000000..e28dab111
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-19/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (first, _, third, _, fifth) => {
+ println!("Some numbers: {first}, {third}, {fifth}")
+ }
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs
new file mode 100644
index 000000000..1ffc46bad
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-20/src/main.rs
@@ -0,0 +1,4 @@
+fn main() {
+ let _x = 5;
+ let y = 10;
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs
new file mode 100644
index 000000000..980610503
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-21/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let s = Some(String::from("Hello!"));
+
+ if let Some(_s) = s {
+ println!("found a string");
+ }
+
+ println!("{:?}", s);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs
new file mode 100644
index 000000000..e2faa345b
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-22/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let s = Some(String::from("Hello!"));
+
+ if let Some(_) = s {
+ println!("found a string");
+ }
+
+ println!("{:?}", s);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs
new file mode 100644
index 000000000..7a9d9bb36
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-23/src/main.rs
@@ -0,0 +1,15 @@
+fn main() {
+ // ANCHOR: here
+ struct Point {
+ x: i32,
+ y: i32,
+ z: i32,
+ }
+
+ let origin = Point { x: 0, y: 0, z: 0 };
+
+ match origin {
+ Point { x, .. } => println!("x is {}", x),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs
new file mode 100644
index 000000000..3f9aaafc2
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-24/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (first, .., last) => {
+ println!("Some numbers: {first}, {last}");
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock
new file mode 100644
index 000000000..a233623e5
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.lock
@@ -0,0 +1,4 @@
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt
new file mode 100644
index 000000000..7e0357eac
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/output.txt
@@ -0,0 +1,11 @@
+$ cargo run
+ Compiling patterns v0.1.0 (file:///projects/patterns)
+error: `..` can only be used once per tuple pattern
+ --> src/main.rs:5:22
+ |
+5 | (.., second, ..) => {
+ | -- ^^ can only be used once per tuple pattern
+ | |
+ | previously used here
+
+error: could not compile `patterns` due to previous error
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore
new file mode 100644
index 000000000..06a976dd4
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/rustfmt-ignore
@@ -0,0 +1 @@
+This listing deliberately doesn't parse so rustfmt fails.
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs
new file mode 100644
index 000000000..b90884eb9
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-25/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (.., second, ..) => {
+ println!("Some numbers: {}", second)
+ },
+ }
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs
new file mode 100644
index 000000000..41fce9795
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-26/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let num = Some(4);
+
+ match num {
+ Some(x) if x % 2 == 0 => println!("The number {} is even", x),
+ Some(x) => println!("The number {} is odd", x),
+ None => (),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs
new file mode 100644
index 000000000..8386a0ab8
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-27/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ let x = Some(5);
+ let y = 10;
+
+ match x {
+ Some(50) => println!("Got 50"),
+ Some(n) if n == y => println!("Matched, n = {n}"),
+ _ => println!("Default case, x = {:?}", x),
+ }
+
+ println!("at the end: x = {:?}, y = {y}", x);
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs
new file mode 100644
index 000000000..15804553f
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-28/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let x = 4;
+ let y = false;
+
+ match x {
+ 4 | 5 | 6 if y => println!("yes"),
+ _ => println!("no"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs
new file mode 100644
index 000000000..3514deb63
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/listing-18-29/src/main.rs
@@ -0,0 +1,19 @@
+fn main() {
+ // ANCHOR: here
+ enum Message {
+ Hello { id: i32 },
+ }
+
+ let msg = Message::Hello { id: 5 };
+
+ match msg {
+ Message::Hello {
+ id: id_variable @ 3..=7,
+ } => println!("Found an id in range: {}", id_variable),
+ Message::Hello { id: 10..=12 } => {
+ println!("Found an id in another range")
+ }
+ Message::Hello { id } => println!("Found some other id: {}", id),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs
new file mode 100644
index 000000000..7978e1ade
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ let x = 1;
+
+ match x {
+ 1 => println!("one"),
+ 2 => println!("two"),
+ 3 => println!("three"),
+ _ => println!("anything"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
new file mode 100644
index 000000000..e52d815d8
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let x = 1;
+
+ match x {
+ 1 | 2 => println!("one or two"),
+ 3 => println!("three"),
+ _ => println!("anything"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs
new file mode 100644
index 000000000..a3ebe7af0
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ let x = 5;
+
+ match x {
+ 1..=5 => println!("one through five"),
+ _ => println!("something else"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
new file mode 100644
index 000000000..8cebfef5e
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs
@@ -0,0 +1,11 @@
+fn main() {
+ // ANCHOR: here
+ let x = 'c';
+
+ match x {
+ 'a'..='j' => println!("early ASCII letter"),
+ 'k'..='z' => println!("late ASCII letter"),
+ _ => println!("something else"),
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
new file mode 100644
index 000000000..2b4fa2903
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "patterns"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
new file mode 100644
index 000000000..82fe057bb
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "patterns"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
new file mode 100644
index 000000000..962d09349
--- /dev/null
+++ b/src/doc/book/listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ struct Point {
+ x: i32,
+ y: i32,
+ }
+
+ // ANCHOR: here
+ let ((feet, inches), Point { x, y }) = ((3, 10), Point { x: 3, y: -10 });
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-01/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-01/src/main.rs
new file mode 100644
index 000000000..893f57890
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-01/src/main.rs
@@ -0,0 +1,8 @@
+fn main() {
+ // ANCHOR: here
+ let mut num = 5;
+
+ let r1 = &num as *const i32;
+ let r2 = &mut num as *mut i32;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-02/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-02/src/main.rs
new file mode 100644
index 000000000..849629a7c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-02/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let address = 0x012345usize;
+ let r = address as *const i32;
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-03/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-03/src/main.rs
new file mode 100644
index 000000000..02a0be6b0
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-03/src/main.rs
@@ -0,0 +1,13 @@
+fn main() {
+ // ANCHOR: here
+ let mut num = 5;
+
+ let r1 = &num as *const i32;
+ let r2 = &mut num as *mut i32;
+
+ unsafe {
+ println!("r1 is: {}", *r1);
+ println!("r2 is: {}", *r2);
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-04/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-04/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-04/src/main.rs
new file mode 100644
index 000000000..6ac58442d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-04/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: here
+ let mut v = vec![1, 2, 3, 4, 5, 6];
+
+ let r = &mut v[..];
+
+ let (a, b) = r.split_at_mut(3);
+
+ assert_eq!(a, &mut [1, 2, 3]);
+ assert_eq!(b, &mut [4, 5, 6]);
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-05/output.txt b/src/doc/book/listings/ch19-advanced-features/listing-19-05/output.txt
new file mode 100644
index 000000000..f4b7582ac
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-05/output.txt
@@ -0,0 +1,17 @@
+$ cargo run
+ Compiling unsafe-example v0.1.0 (file:///projects/unsafe-example)
+error[E0499]: cannot borrow `*values` as mutable more than once at a time
+ --> src/main.rs:6:31
+ |
+1 | fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
+ | - let's call the lifetime of this reference `'1`
+...
+6 | (&mut values[..mid], &mut values[mid..])
+ | --------------------------^^^^^^--------
+ | | | |
+ | | | second mutable borrow occurs here
+ | | first mutable borrow occurs here
+ | returning this value requires that `*values` is borrowed for `'1`
+
+For more information about this error, try `rustc --explain E0499`.
+error: could not compile `unsafe-example` due to previous error
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-05/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-05/src/main.rs
new file mode 100644
index 000000000..dabf63de1
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-05/src/main.rs
@@ -0,0 +1,14 @@
+// ANCHOR: here
+fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
+ let len = values.len();
+
+ assert!(mid <= len);
+
+ (&mut values[..mid], &mut values[mid..])
+}
+// ANCHOR_END: here
+
+fn main() {
+ let mut vector = vec![1, 2, 3, 4, 5, 6];
+ let (left, right) = split_at_mut(&mut vector, 3);
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-06/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-06/src/main.rs
new file mode 100644
index 000000000..3af21f761
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-06/src/main.rs
@@ -0,0 +1,22 @@
+// ANCHOR: here
+use std::slice;
+
+fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
+ let len = values.len();
+ let ptr = values.as_mut_ptr();
+
+ assert!(mid <= len);
+
+ unsafe {
+ (
+ slice::from_raw_parts_mut(ptr, mid),
+ slice::from_raw_parts_mut(ptr.add(mid), len - mid),
+ )
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let mut vector = vec![1, 2, 3, 4, 5, 6];
+ let (left, right) = split_at_mut(&mut vector, 3);
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-07/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-07/src/main.rs
new file mode 100644
index 000000000..b4d6cdb7c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-07/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ use std::slice;
+
+ let address = 0x01234usize;
+ let r = address as *mut i32;
+
+ let values: &[i32] = unsafe { slice::from_raw_parts_mut(r, 10000) };
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-08/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-08/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-08/src/main.rs
new file mode 100644
index 000000000..8b56630c9
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-08/src/main.rs
@@ -0,0 +1,9 @@
+extern "C" {
+ fn abs(input: i32) -> i32;
+}
+
+fn main() {
+ unsafe {
+ println!("Absolute value of -3 according to C: {}", abs(-3));
+ }
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-09/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-09/src/main.rs
new file mode 100644
index 000000000..82a4b4219
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-09/src/main.rs
@@ -0,0 +1,5 @@
+static HELLO_WORLD: &str = "Hello, world!";
+
+fn main() {
+ println!("name is: {}", HELLO_WORLD);
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-10/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-10/src/main.rs
new file mode 100644
index 000000000..e8dab68e0
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-10/src/main.rs
@@ -0,0 +1,15 @@
+static mut COUNTER: u32 = 0;
+
+fn add_to_count(inc: u32) {
+ unsafe {
+ COUNTER += inc;
+ }
+}
+
+fn main() {
+ add_to_count(3);
+
+ unsafe {
+ println!("COUNTER: {}", COUNTER);
+ }
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-11/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-11/src/main.rs
new file mode 100644
index 000000000..885c1aa1d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-11/src/main.rs
@@ -0,0 +1,9 @@
+unsafe trait Foo {
+ // methods go here
+}
+
+unsafe impl Foo for i32 {
+ // method implementations go here
+}
+
+fn main() {}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-12/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-12/src/lib.rs
new file mode 100644
index 000000000..dbe04620e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-12/src/lib.rs
@@ -0,0 +1,5 @@
+pub trait Iterator {
+ type Item;
+
+ fn next(&mut self) -> Option<Self::Item>;
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-13/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-13/src/lib.rs
new file mode 100644
index 000000000..7c9479c5b
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-13/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait Iterator<T> {
+ fn next(&mut self) -> Option<T>;
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-14/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-14/src/main.rs
new file mode 100644
index 000000000..9111fbc55
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-14/src/main.rs
@@ -0,0 +1,25 @@
+use std::ops::Add;
+
+#[derive(Debug, Copy, Clone, PartialEq)]
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+impl Add for Point {
+ type Output = Point;
+
+ fn add(self, other: Point) -> Point {
+ Point {
+ x: self.x + other.x,
+ y: self.y + other.y,
+ }
+ }
+}
+
+fn main() {
+ assert_eq!(
+ Point { x: 1, y: 0 } + Point { x: 2, y: 3 },
+ Point { x: 3, y: 3 }
+ );
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-15/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-15/src/lib.rs
new file mode 100644
index 000000000..f38bf475c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-15/src/lib.rs
@@ -0,0 +1,12 @@
+use std::ops::Add;
+
+struct Millimeters(u32);
+struct Meters(u32);
+
+impl Add<Meters> for Millimeters {
+ type Output = Millimeters;
+
+ fn add(self, other: Meters) -> Millimeters {
+ Millimeters(self.0 + (other.0 * 1000))
+ }
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-16/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-16/src/main.rs
new file mode 100644
index 000000000..d854e287d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-16/src/main.rs
@@ -0,0 +1,31 @@
+// ANCHOR: here
+trait Pilot {
+ fn fly(&self);
+}
+
+trait Wizard {
+ fn fly(&self);
+}
+
+struct Human;
+
+impl Pilot for Human {
+ fn fly(&self) {
+ println!("This is your captain speaking.");
+ }
+}
+
+impl Wizard for Human {
+ fn fly(&self) {
+ println!("Up!");
+ }
+}
+
+impl Human {
+ fn fly(&self) {
+ println!("*waving arms furiously*");
+ }
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-17/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-17/src/main.rs
new file mode 100644
index 000000000..3df65a7ce
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-17/src/main.rs
@@ -0,0 +1,34 @@
+trait Pilot {
+ fn fly(&self);
+}
+
+trait Wizard {
+ fn fly(&self);
+}
+
+struct Human;
+
+impl Pilot for Human {
+ fn fly(&self) {
+ println!("This is your captain speaking.");
+ }
+}
+
+impl Wizard for Human {
+ fn fly(&self) {
+ println!("Up!");
+ }
+}
+
+impl Human {
+ fn fly(&self) {
+ println!("*waving arms furiously*");
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ let person = Human;
+ person.fly();
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-18/output.txt b/src/doc/book/listings/ch19-advanced-features/listing-19-18/output.txt
new file mode 100644
index 000000000..2e9da17d6
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-18/output.txt
@@ -0,0 +1,7 @@
+$ cargo run
+ Compiling traits-example v0.1.0 (file:///projects/traits-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.46s
+ Running `target/debug/traits-example`
+This is your captain speaking.
+Up!
+*waving arms furiously*
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-18/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-18/src/main.rs
new file mode 100644
index 000000000..fa01c09cc
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-18/src/main.rs
@@ -0,0 +1,36 @@
+trait Pilot {
+ fn fly(&self);
+}
+
+trait Wizard {
+ fn fly(&self);
+}
+
+struct Human;
+
+impl Pilot for Human {
+ fn fly(&self) {
+ println!("This is your captain speaking.");
+ }
+}
+
+impl Wizard for Human {
+ fn fly(&self) {
+ println!("Up!");
+ }
+}
+
+impl Human {
+ fn fly(&self) {
+ println!("*waving arms furiously*");
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ let person = Human;
+ Pilot::fly(&person);
+ Wizard::fly(&person);
+ person.fly();
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-19/output.txt b/src/doc/book/listings/ch19-advanced-features/listing-19-19/output.txt
new file mode 100644
index 000000000..087e802b1
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-19/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling traits-example v0.1.0 (file:///projects/traits-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.54s
+ Running `target/debug/traits-example`
+A baby dog is called a Spot
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-19/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-19/src/main.rs
new file mode 100644
index 000000000..44affe0ee
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-19/src/main.rs
@@ -0,0 +1,21 @@
+trait Animal {
+ fn baby_name() -> String;
+}
+
+struct Dog;
+
+impl Dog {
+ fn baby_name() -> String {
+ String::from("Spot")
+ }
+}
+
+impl Animal for Dog {
+ fn baby_name() -> String {
+ String::from("puppy")
+ }
+}
+
+fn main() {
+ println!("A baby dog is called a {}", Dog::baby_name());
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-20/output.txt b/src/doc/book/listings/ch19-advanced-features/listing-19-20/output.txt
new file mode 100644
index 000000000..684508245
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-20/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling traits-example v0.1.0 (file:///projects/traits-example)
+error[E0283]: type annotations needed
+ --> src/main.rs:20:43
+ |
+20 | println!("A baby dog is called a {}", Animal::baby_name());
+ | ^^^^^^^^^^^^^^^^^ cannot infer type
+ |
+ = note: cannot satisfy `_: Animal`
+
+For more information about this error, try `rustc --explain E0283`.
+error: could not compile `traits-example` due to previous error
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-20/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-20/src/main.rs
new file mode 100644
index 000000000..8e295c9b6
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-20/src/main.rs
@@ -0,0 +1,23 @@
+trait Animal {
+ fn baby_name() -> String;
+}
+
+struct Dog;
+
+impl Dog {
+ fn baby_name() -> String {
+ String::from("Spot")
+ }
+}
+
+impl Animal for Dog {
+ fn baby_name() -> String {
+ String::from("puppy")
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ println!("A baby dog is called a {}", Animal::baby_name());
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-21/output.txt b/src/doc/book/listings/ch19-advanced-features/listing-19-21/output.txt
new file mode 100644
index 000000000..4d1ee5ab4
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-21/output.txt
@@ -0,0 +1,5 @@
+$ cargo run
+ Compiling traits-example v0.1.0 (file:///projects/traits-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/traits-example`
+A baby dog is called a puppy
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-21/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-21/src/main.rs
new file mode 100644
index 000000000..b1df72895
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-21/src/main.rs
@@ -0,0 +1,23 @@
+trait Animal {
+ fn baby_name() -> String;
+}
+
+struct Dog;
+
+impl Dog {
+ fn baby_name() -> String {
+ String::from("Spot")
+ }
+}
+
+impl Animal for Dog {
+ fn baby_name() -> String {
+ String::from("puppy")
+ }
+}
+
+// ANCHOR: here
+fn main() {
+ println!("A baby dog is called a {}", <Dog as Animal>::baby_name());
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-22/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-22/src/main.rs
new file mode 100644
index 000000000..febe58b0c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-22/src/main.rs
@@ -0,0 +1,17 @@
+// ANCHOR: here
+use std::fmt;
+
+trait OutlinePrint: fmt::Display {
+ fn outline_print(&self) {
+ let output = self.to_string();
+ let len = output.len();
+ println!("{}", "*".repeat(len + 4));
+ println!("*{}*", " ".repeat(len + 2));
+ println!("* {} *", output);
+ println!("*{}*", " ".repeat(len + 2));
+ println!("{}", "*".repeat(len + 4));
+ }
+}
+// ANCHOR_END: here
+
+fn main() {}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-23/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-23/src/main.rs
new file mode 100644
index 000000000..eae46c92f
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-23/src/main.rs
@@ -0,0 +1,14 @@
+use std::fmt;
+
+struct Wrapper(Vec<String>);
+
+impl fmt::Display for Wrapper {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "[{}]", self.0.join(", "))
+ }
+}
+
+fn main() {
+ let w = Wrapper(vec![String::from("hello"), String::from("world")]);
+ println!("w = {}", w);
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-24/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-24/src/main.rs
new file mode 100644
index 000000000..d604ae8d6
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-24/src/main.rs
@@ -0,0 +1,16 @@
+fn main() {
+ // ANCHOR: here
+ let f: Box<dyn Fn() + Send + 'static> = Box::new(|| println!("hi"));
+
+ fn takes_long_type(f: Box<dyn Fn() + Send + 'static>) {
+ // --snip--
+ }
+
+ fn returns_long_type() -> Box<dyn Fn() + Send + 'static> {
+ // --snip--
+ // ANCHOR_END: here
+ Box::new(|| ())
+ // ANCHOR: here
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-25/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-25/src/main.rs
new file mode 100644
index 000000000..af35bed2c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-25/src/main.rs
@@ -0,0 +1,18 @@
+fn main() {
+ // ANCHOR: here
+ type Thunk = Box<dyn Fn() + Send + 'static>;
+
+ let f: Thunk = Box::new(|| println!("hi"));
+
+ fn takes_long_type(f: Thunk) {
+ // --snip--
+ }
+
+ fn returns_long_type() -> Thunk {
+ // --snip--
+ // ANCHOR_END: here
+ Box::new(|| ())
+ // ANCHOR: here
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.lock
new file mode 100644
index 000000000..b2327c755
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.toml
new file mode 100644
index 000000000..b196f35b5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-27/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-27/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-27/src/main.rs
new file mode 100644
index 000000000..91b2cf04b
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-27/src/main.rs
@@ -0,0 +1,13 @@
+fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
+ f(arg) + f(arg)
+}
+
+fn main() {
+ let answer = do_twice(add_one, 5);
+
+ println!("The answer is: {}", answer);
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.lock
new file mode 100644
index 000000000..b2d925754
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "macros-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.toml
new file mode 100644
index 000000000..9218091c8
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-28/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "macros-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-28/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-28/src/lib.rs
new file mode 100644
index 000000000..7c7c4756c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-28/src/lib.rs
@@ -0,0 +1,12 @@
+#[macro_export]
+macro_rules! vec {
+ ( $( $x:expr ),* ) => {
+ {
+ let mut temp_vec = Vec::new();
+ $(
+ temp_vec.push($x);
+ )*
+ temp_vec
+ }
+ };
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.lock
new file mode 100644
index 000000000..39afcf282
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.toml
new file mode 100644
index 000000000..c6fb92087
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-30/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello_macro"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-30/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-30/src/main.rs
new file mode 100644
index 000000000..468c30aa4
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-30/src/main.rs
@@ -0,0 +1,9 @@
+use hello_macro::HelloMacro;
+use hello_macro_derive::HelloMacro;
+
+#[derive(HelloMacro)]
+struct Pancakes;
+
+fn main() {
+ Pancakes::hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.lock
new file mode 100644
index 000000000..39afcf282
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.toml
new file mode 100644
index 000000000..c6fb92087
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello_macro"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.lock
new file mode 100644
index 000000000..9a38c8ac2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.lock
@@ -0,0 +1,46 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro_derive"
+version = "0.1.0"
+dependencies = [
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml
new file mode 100644
index 000000000..aa076ac48
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "hello_macro_derive"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+syn = "1.0"
+quote = "1.0"
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs
new file mode 100644
index 000000000..11643a8d6
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs
@@ -0,0 +1,13 @@
+use proc_macro::TokenStream;
+use quote::quote;
+use syn;
+
+#[proc_macro_derive(HelloMacro)]
+pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
+ // Construct a representation of Rust code as a syntax tree
+ // that we can manipulate
+ let ast = syn::parse(input).unwrap();
+
+ // Build the trait implementation
+ impl_hello_macro(&ast)
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/lib.rs
new file mode 100644
index 000000000..e74793184
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait HelloMacro {
+ fn hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/main.rs
new file mode 100644
index 000000000..10b028b2d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-31/hello_macro/src/main.rs
@@ -0,0 +1,13 @@
+use hello_macro::HelloMacro;
+
+struct Pancakes;
+
+impl HelloMacro for Pancakes {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is Pancakes!");
+ }
+}
+
+fn main() {
+ Pancakes::hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.lock
new file mode 100644
index 000000000..39afcf282
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.toml
new file mode 100644
index 000000000..c6fb92087
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello_macro"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.lock
new file mode 100644
index 000000000..9a38c8ac2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.lock
@@ -0,0 +1,46 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro_derive"
+version = "0.1.0"
+dependencies = [
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.toml
new file mode 100644
index 000000000..aa076ac48
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "hello_macro_derive"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+syn = "1.0"
+quote = "1.0"
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs
new file mode 100644
index 000000000..dac6c98f6
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs
@@ -0,0 +1,27 @@
+use proc_macro::TokenStream;
+use quote::quote;
+use syn;
+
+#[proc_macro_derive(HelloMacro)]
+pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
+ // Construct a representation of Rust code as a syntax tree
+ // that we can manipulate
+ let ast = syn::parse(input).unwrap();
+
+ // Build the trait implementation
+ impl_hello_macro(&ast)
+}
+
+// ANCHOR: here
+fn impl_hello_macro(ast: &syn::DeriveInput) -> TokenStream {
+ let name = &ast.ident;
+ let gen = quote! {
+ impl HelloMacro for #name {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is {}!", stringify!(#name));
+ }
+ }
+ };
+ gen.into()
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/lib.rs
new file mode 100644
index 000000000..e74793184
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait HelloMacro {
+ fn hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/main.rs b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/main.rs
new file mode 100644
index 000000000..10b028b2d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/listing-19-33/hello_macro/src/main.rs
@@ -0,0 +1,13 @@
+use hello_macro::HelloMacro;
+
+struct Pancakes;
+
+impl HelloMacro for Pancakes {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is Pancakes!");
+ }
+}
+
+fn main() {
+ Pancakes::hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs
new file mode 100644
index 000000000..21ecdbe5a
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ unsafe fn dangerous() {}
+
+ unsafe {
+ dangerous();
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt
new file mode 100644
index 000000000..0991f10fa
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt
@@ -0,0 +1,18 @@
+$ cargo run
+ Compiling traits-example v0.1.0 (file:///projects/traits-example)
+error[E0277]: `Point` doesn't implement `std::fmt::Display`
+ --> src/main.rs:20:6
+ |
+20 | impl OutlinePrint for Point {}
+ | ^^^^^^^^^^^^ `Point` cannot be formatted with the default formatter
+ |
+ = help: the trait `std::fmt::Display` is not implemented for `Point`
+ = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+note: required by a bound in `OutlinePrint`
+ --> src/main.rs:3:21
+ |
+3 | trait OutlinePrint: fmt::Display {
+ | ^^^^^^^^^^^^ required by this bound in `OutlinePrint`
+
+For more information about this error, try `rustc --explain E0277`.
+error: could not compile `traits-example` due to previous error
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs
new file mode 100644
index 000000000..a1e2fe4c4
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs
@@ -0,0 +1,27 @@
+use std::fmt;
+
+trait OutlinePrint: fmt::Display {
+ fn outline_print(&self) {
+ let output = self.to_string();
+ let len = output.len();
+ println!("{}", "*".repeat(len + 4));
+ println!("*{}*", " ".repeat(len + 2));
+ println!("* {} *", output);
+ println!("*{}*", " ".repeat(len + 2));
+ println!("{}", "*".repeat(len + 4));
+ }
+}
+
+// ANCHOR: here
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+impl OutlinePrint for Point {}
+// ANCHOR_END: here
+
+fn main() {
+ let p = Point { x: 1, y: 3 };
+ p.outline_print();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs
new file mode 100644
index 000000000..c7bbb6a70
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs
@@ -0,0 +1,33 @@
+trait OutlinePrint: fmt::Display {
+ fn outline_print(&self) {
+ let output = self.to_string();
+ let len = output.len();
+ println!("{}", "*".repeat(len + 4));
+ println!("*{}*", " ".repeat(len + 2));
+ println!("* {} *", output);
+ println!("*{}*", " ".repeat(len + 2));
+ println!("{}", "*".repeat(len + 4));
+ }
+}
+
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+impl OutlinePrint for Point {}
+
+// ANCHOR: here
+use std::fmt;
+
+impl fmt::Display for Point {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "({}, {})", self.x, self.y)
+ }
+}
+// ANCHOR_END: here
+
+fn main() {
+ let p = Point { x: 1, y: 3 };
+ p.outline_print();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs
new file mode 100644
index 000000000..d3fe32e2f
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs
@@ -0,0 +1,12 @@
+fn main() {
+ // ANCHOR: there
+ // ANCHOR: here
+ type Kilometers = i32;
+ // ANCHOR_END: here
+
+ let x: i32 = 5;
+ let y: Kilometers = 5;
+
+ println!("x + y = {}", x + y);
+ // ANCHOR_END: there
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs
new file mode 100644
index 000000000..8300dccee
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs
@@ -0,0 +1,10 @@
+use std::fmt;
+use std::io::Error;
+
+pub trait Write {
+ fn write(&mut self, buf: &[u8]) -> Result<usize, Error>;
+ fn flush(&mut self) -> Result<(), Error>;
+
+ fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>;
+ fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<(), Error>;
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs
new file mode 100644
index 000000000..573559934
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs
@@ -0,0 +1,15 @@
+use std::fmt;
+
+// ANCHOR: here
+type Result<T> = std::result::Result<T, std::io::Error>;
+// ANCHOR_END: here
+
+// ANCHOR: there
+pub trait Write {
+ fn write(&mut self, buf: &[u8]) -> Result<usize>;
+ fn flush(&mut self) -> Result<()>;
+
+ fn write_all(&mut self, buf: &[u8]) -> Result<()>;
+ fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<()>;
+}
+// ANCHOR_END: there
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.lock
new file mode 100644
index 000000000..b1977d01e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "traits-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.toml
new file mode 100644
index 000000000..52395a587
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "traits-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs
new file mode 100644
index 000000000..f0f7acac2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs
@@ -0,0 +1,8 @@
+// ANCHOR: here
+fn bar() -> ! {
+ // --snip--
+ // ANCHOR_END: here
+ panic!();
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs
new file mode 100644
index 000000000..6d56008ad
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ let guess = "3";
+ // ANCHOR: here
+ let guess = match guess.trim().parse() {
+ Ok(_) => 5,
+ Err(_) => "hello",
+ };
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs
new file mode 100644
index 000000000..aa4f937ff
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs
@@ -0,0 +1,17 @@
+enum Option<T> {
+ Some(T),
+ None,
+}
+
+use crate::Option::*;
+
+// ANCHOR: here
+impl<T> Option<T> {
+ pub fn unwrap(self) -> T {
+ match self {
+ Some(val) => val,
+ None => panic!("called `Option::unwrap()` on a `None` value"),
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs
new file mode 100644
index 000000000..e7768913b
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs
@@ -0,0 +1,9 @@
+fn main() {
+ // ANCHOR: here
+ print!("forever ");
+
+ loop {
+ print!("and ever ");
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs
new file mode 100644
index 000000000..075d5110c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs
@@ -0,0 +1,6 @@
+fn main() {
+ // ANCHOR: here
+ let s1: str = "Hello there!";
+ let s2: str = "How's it going?";
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs
new file mode 100644
index 000000000..69186ddfb
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs
@@ -0,0 +1,3 @@
+fn generic<T>(t: T) {
+ // --snip--
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs
new file mode 100644
index 000000000..c2d00e216
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs
@@ -0,0 +1,3 @@
+fn generic<T: Sized>(t: T) {
+ // --snip--
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock
new file mode 100644
index 000000000..c0c98a79c
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "types-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml
new file mode 100644
index 000000000..a2ae20c77
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "types-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs
new file mode 100644
index 000000000..e4722267a
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs
@@ -0,0 +1,3 @@
+fn generic<T: ?Sized>(t: &T) {
+ // --snip--
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.lock
new file mode 100644
index 000000000..b2327c755
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.toml
new file mode 100644
index 000000000..b196f35b5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs
new file mode 100644
index 000000000..b4fcf7eb8
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ let list_of_numbers = vec![1, 2, 3];
+ let list_of_strings: Vec<String> =
+ list_of_numbers.iter().map(|i| i.to_string()).collect();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.lock
new file mode 100644
index 000000000..b2327c755
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.toml
new file mode 100644
index 000000000..b196f35b5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs
new file mode 100644
index 000000000..dff20fe71
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ let list_of_numbers = vec![1, 2, 3];
+ let list_of_strings: Vec<String> =
+ list_of_numbers.iter().map(ToString::to_string).collect();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.lock
new file mode 100644
index 000000000..b2327c755
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.toml
new file mode 100644
index 000000000..b196f35b5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs
new file mode 100644
index 000000000..60fb73005
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs
@@ -0,0 +1,10 @@
+fn main() {
+ // ANCHOR: here
+ enum Status {
+ Value(u32),
+ Stop,
+ }
+
+ let list_of_statuses: Vec<Status> = (0u32..20).map(Status::Value).collect();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.lock
new file mode 100644
index 000000000..b2327c755
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.toml
new file mode 100644
index 000000000..b196f35b5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt
new file mode 100644
index 000000000..d6fffc967
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt
@@ -0,0 +1,16 @@
+$ cargo build
+ Compiling functions-example v0.1.0 (file:///projects/functions-example)
+error[E0746]: return type cannot have an unboxed trait object
+ --> src/lib.rs:1:25
+ |
+1 | fn returns_closure() -> dyn Fn(i32) -> i32 {
+ | ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
+help: use `impl Fn(i32) -> i32` as the return type, as all return paths are of type `[closure@src/lib.rs:2:5: 2:14]`, which implements `Fn(i32) -> i32`
+ |
+1 | fn returns_closure() -> impl Fn(i32) -> i32 {
+ | ~~~~~~~~~~~~~~~~~~~
+
+For more information about this error, try `rustc --explain E0746`.
+error: could not compile `functions-example` due to previous error
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs
new file mode 100644
index 000000000..d699ac34e
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs
@@ -0,0 +1,3 @@
+fn returns_closure() -> dyn Fn(i32) -> i32 {
+ |x| x + 1
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock
new file mode 100644
index 000000000..b2327c755
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "functions-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml
new file mode 100644
index 000000000..b196f35b5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "functions-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs
new file mode 100644
index 000000000..b11407747
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs
@@ -0,0 +1,3 @@
+fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
+ Box::new(|x| x + 1)
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock
new file mode 100644
index 000000000..39afcf282
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml
new file mode 100644
index 000000000..c6fb92087
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello_macro"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs
new file mode 100644
index 000000000..e74793184
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait HelloMacro {
+ fn hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock
new file mode 100644
index 000000000..881cd3f6d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.lock
@@ -0,0 +1,13 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
+[[package]]
+name = "pancakes"
+version = "0.1.0"
+dependencies = [
+ "hello_macro 0.1.0",
+]
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml
new file mode 100644
index 000000000..3ad910862
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/Cargo.toml
@@ -0,0 +1,7 @@
+[package]
+name = "pancakes"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+hello_macro = { path = "../hello_macro" } \ No newline at end of file
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs
new file mode 100644
index 000000000..10b028b2d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs
@@ -0,0 +1,13 @@
+use hello_macro::HelloMacro;
+
+struct Pancakes;
+
+impl HelloMacro for Pancakes {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is Pancakes!");
+ }
+}
+
+fn main() {
+ Pancakes::hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock
new file mode 100644
index 000000000..39afcf282
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml
new file mode 100644
index 000000000..c6fb92087
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello_macro"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock
new file mode 100644
index 000000000..9a38c8ac2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.lock
@@ -0,0 +1,46 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro_derive"
+version = "0.1.0"
+dependencies = [
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml
new file mode 100644
index 000000000..aa076ac48
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "hello_macro_derive"
+version = "0.1.0"
+edition = "2021"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+syn = "1.0"
+quote = "1.0"
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs
new file mode 100644
index 000000000..5e0b96c27
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/hello_macro_derive/src/lib.rs
@@ -0,0 +1,25 @@
+use proc_macro::TokenStream;
+use quote::quote;
+use syn;
+
+#[proc_macro_derive(HelloMacro)]
+pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
+ // Construct a representation of Rust code as a syntax tree
+ // that we can manipulate
+ let ast = syn::parse(input).unwrap();
+
+ // Build the trait implementation
+ impl_hello_macro(&ast)
+}
+
+fn impl_hello_macro(ast: &syn::DeriveInput) -> TokenStream {
+ let name = &ast.ident;
+ let gen = quote! {
+ impl HelloMacro for #name {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is {}!", stringify!(#name));
+ }
+ }
+ };
+ gen.into()
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs
new file mode 100644
index 000000000..e74793184
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/lib.rs
@@ -0,0 +1,3 @@
+pub trait HelloMacro {
+ fn hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs
new file mode 100644
index 000000000..10b028b2d
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/hello_macro/src/main.rs
@@ -0,0 +1,13 @@
+use hello_macro::HelloMacro;
+
+struct Pancakes;
+
+impl HelloMacro for Pancakes {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is Pancakes!");
+ }
+}
+
+fn main() {
+ Pancakes::hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock
new file mode 100644
index 000000000..dee23ecf9
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.lock
@@ -0,0 +1,58 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello_macro"
+version = "0.1.0"
+
+[[package]]
+name = "hello_macro_derive"
+version = "0.1.0"
+dependencies = [
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "pancakes"
+version = "0.1.0"
+dependencies = [
+ "hello_macro 0.1.0",
+ "hello_macro_derive 0.1.0",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "syn"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "unicode-xid"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[metadata]
+"checksum proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3acb317c6ff86a4e579dfa00fc5e6cca91ecbb4e7eb2df0468805b674eb88548"
+"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum syn 1.0.14 (registry+https://github.com/rust-lang/crates.io-index)" = "af6f3550d8dff9ef7dc34d384ac6f107e5d31c8f57d9f28e0081503f547ac8f5"
+"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml
new file mode 100644
index 000000000..cb3a98c3a
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "pancakes"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+hello_macro = { path = "../hello_macro" }
+hello_macro_derive = { path = "../hello_macro/hello_macro_derive" }
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs
new file mode 100644
index 000000000..468c30aa4
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/src/main.rs
@@ -0,0 +1,9 @@
+use hello_macro::HelloMacro;
+use hello_macro_derive::HelloMacro;
+
+#[derive(HelloMacro)]
+struct Pancakes;
+
+fn main() {
+ Pancakes::hello_macro();
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock
new file mode 100644
index 000000000..58b70c5b7
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "counter"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml
new file mode 100644
index 000000000..9e103f3eb
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "counter"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs b/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs
new file mode 100644
index 000000000..04c7f38f5
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs
@@ -0,0 +1,25 @@
+struct Counter {
+ count: u32,
+}
+
+impl Counter {
+ fn new() -> Counter {
+ Counter { count: 0 }
+ }
+}
+
+// ANCHOR: ch19
+impl Iterator for Counter {
+ type Item = u32;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ // --snip--
+ // ANCHOR_END: ch19
+ if self.count < 5 {
+ self.count += 1;
+ Some(self.count)
+ } else {
+ None
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.lock b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.lock
new file mode 100644
index 000000000..497817bf2
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "unsafe-example"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.toml b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.toml
new file mode 100644
index 000000000..3e8a29201
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "unsafe-example"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt
new file mode 100644
index 000000000..5886bc630
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt
@@ -0,0 +1,12 @@
+$ cargo run
+ Compiling unsafe-example v0.1.0 (file:///projects/unsafe-example)
+error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
+ --> src/main.rs:4:5
+ |
+4 | dangerous();
+ | ^^^^^^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+
+For more information about this error, try `rustc --explain E0133`.
+error: could not compile `unsafe-example` due to previous error
diff --git a/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/src/main.rs b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/src/main.rs
new file mode 100644
index 000000000..01305be74
--- /dev/null
+++ b/src/doc/book/listings/ch19-advanced-features/output-only-01-missing-unsafe/src/main.rs
@@ -0,0 +1,7 @@
+fn main() {
+ // ANCHOR: here
+ unsafe fn dangerous() {}
+
+ dangerous();
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-01/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-01/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-01/src/main.rs
new file mode 100644
index 000000000..d868c3ec1
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-01/src/main.rs
@@ -0,0 +1,11 @@
+use std::net::TcpListener;
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ println!("Connection established!");
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-02/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-02/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-02/src/main.rs
new file mode 100644
index 000000000..7240c73c7
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-02/src/main.rs
@@ -0,0 +1,25 @@
+use std::{
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let http_request: Vec<_> = buf_reader
+ .lines()
+ .map(|result| result.unwrap())
+ .take_while(|line| !line.is_empty())
+ .collect();
+
+ println!("Request: {:#?}", http_request);
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-03/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-03/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-03/src/main.rs
new file mode 100644
index 000000000..c72d4a9c6
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-03/src/main.rs
@@ -0,0 +1,29 @@
+use std::{
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+
+// ANCHOR: here
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let http_request: Vec<_> = buf_reader
+ .lines()
+ .map(|result| result.unwrap())
+ .take_while(|line| !line.is_empty())
+ .collect();
+
+ let response = "HTTP/1.1 200 OK\r\n\r\n";
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-05/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-05/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-05/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-05/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-05/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-05/src/main.rs
new file mode 100644
index 000000000..d4b78b640
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-05/src/main.rs
@@ -0,0 +1,38 @@
+// ANCHOR: here
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+// --snip--
+
+// ANCHOR_END: here
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+
+// ANCHOR: here
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let http_request: Vec<_> = buf_reader
+ .lines()
+ .map(|result| result.unwrap())
+ .take_while(|line| !line.is_empty())
+ .collect();
+
+ let status_line = "HTTP/1.1 200 OK";
+ let contents = fs::read_to_string("hello.html").unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-06/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-06/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-06/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-06/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-06/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-06/src/main.rs
new file mode 100644
index 000000000..5523a42d7
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-06/src/main.rs
@@ -0,0 +1,37 @@
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+// ANCHOR: here
+// --snip--
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ if request_line == "GET / HTTP/1.1" {
+ let status_line = "HTTP/1.1 200 OK";
+ let contents = fs::read_to_string("hello.html").unwrap();
+ let length = contents.len();
+
+ let response = format!(
+ "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ } else {
+ // some other request
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-07/404.html b/src/doc/book/listings/ch20-web-server/listing-20-07/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-07/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-07/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-07/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-07/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-07/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-07/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-07/src/main.rs
new file mode 100644
index 000000000..a14b7d538
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-07/src/main.rs
@@ -0,0 +1,45 @@
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ if request_line == "GET / HTTP/1.1" {
+ let status_line = "HTTP/1.1 200 OK";
+ let contents = fs::read_to_string("hello.html").unwrap();
+ let length = contents.len();
+
+ let response = format!(
+ "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ // ANCHOR: here
+ // --snip--
+ } else {
+ let status_line = "HTTP/1.1 404 NOT FOUND";
+ let contents = fs::read_to_string("404.html").unwrap();
+ let length = contents.len();
+
+ let response = format!(
+ "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ }
+ // ANCHOR_END: here
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-09/404.html b/src/doc/book/listings/ch20-web-server/listing-20-09/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-09/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-09/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-09/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-09/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-09/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-09/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-09/src/main.rs
new file mode 100644
index 000000000..ffc51e803
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-09/src/main.rs
@@ -0,0 +1,40 @@
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+// ANCHOR: here
+// --snip--
+
+fn handle_connection(mut stream: TcpStream) {
+ // --snip--
+ // ANCHOR_END: here
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+ // ANCHOR: here
+
+ let (status_line, filename) = if request_line == "GET / HTTP/1.1" {
+ ("HTTP/1.1 200 OK", "hello.html")
+ } else {
+ ("HTTP/1.1 404 NOT FOUND", "404.html")
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-10/404.html b/src/doc/book/listings/ch20-web-server/listing-20-10/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-10/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-10/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-10/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-10/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-10/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-10/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-10/src/main.rs
new file mode 100644
index 000000000..5a18b45c0
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-10/src/main.rs
@@ -0,0 +1,52 @@
+// ANCHOR: here
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+// --snip--
+// ANCHOR_END: here
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ handle_connection(stream);
+ }
+}
+// ANCHOR: here
+
+fn handle_connection(mut stream: TcpStream) {
+ // --snip--
+
+ // ANCHOR_END: here
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ // ANCHOR: here
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ // --snip--
+ // ANCHOR_END: here
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-11/404.html b/src/doc/book/listings/ch20-web-server/listing-20-11/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-11/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-11/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-11/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-11/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-11/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-11/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-11/src/main.rs
new file mode 100644
index 000000000..1181357b0
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-11/src/main.rs
@@ -0,0 +1,43 @@
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+// ANCHOR: here
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ thread::spawn(|| {
+ handle_connection(stream);
+ });
+ }
+}
+// ANCHOR_END: here
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-12/404.html b/src/doc/book/listings/ch20-web-server/listing-20-12/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-12/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-12/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-12/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-12/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-12/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-12/output.txt b/src/doc/book/listings/ch20-web-server/listing-20-12/output.txt
new file mode 100644
index 000000000..57a58b960
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-12/output.txt
@@ -0,0 +1,10 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0433]: failed to resolve: use of undeclared type `ThreadPool`
+ --> src/main.rs:11:16
+ |
+11 | let pool = ThreadPool::new(4);
+ | ^^^^^^^^^^ use of undeclared type `ThreadPool`
+
+For more information about this error, try `rustc --explain E0433`.
+error: could not compile `hello` due to previous error
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-12/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-12/src/main.rs
new file mode 100644
index 000000000..21b9a80f1
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-12/src/main.rs
@@ -0,0 +1,44 @@
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+// ANCHOR: here
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+// ANCHOR_END: here
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-13/404.html b/src/doc/book/listings/ch20-web-server/listing-20-13/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-13/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-13/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-13/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-13/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-13/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-13/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-13/src/lib.rs
new file mode 100644
index 000000000..35960e7c0
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-13/src/lib.rs
@@ -0,0 +1,27 @@
+pub struct ThreadPool;
+
+// ANCHOR: here
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ ThreadPool
+ }
+
+ // --snip--
+ // ANCHOR_END: here
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-13/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-13/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-13/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-14/404.html b/src/doc/book/listings/ch20-web-server/listing-20-14/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-14/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-14/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-14/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-14/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-14/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-14/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-14/src/lib.rs
new file mode 100644
index 000000000..c1fa1828b
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-14/src/lib.rs
@@ -0,0 +1,40 @@
+// ANCHOR: here
+use std::thread;
+
+pub struct ThreadPool {
+ threads: Vec<thread::JoinHandle<()>>,
+}
+
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ // ANCHOR: here
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let mut threads = Vec::with_capacity(size);
+
+ for _ in 0..size {
+ // create some threads and store them in the vector
+ }
+
+ ThreadPool { threads }
+ }
+ // --snip--
+ // ANCHOR_END: here
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+ // ANCHOR: here
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-14/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-14/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-14/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-15/404.html b/src/doc/book/listings/ch20-web-server/listing-20-15/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-15/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-15/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-15/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-15/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-15/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-15/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-15/src/lib.rs
new file mode 100644
index 000000000..80a6eeeb3
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-15/src/lib.rs
@@ -0,0 +1,53 @@
+// ANCHOR: here
+use std::thread;
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+}
+
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ // ANCHOR: here
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id));
+ }
+
+ ThreadPool { workers }
+ }
+ // --snip--
+ // ANCHOR_END: here
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+ // ANCHOR: here
+}
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+impl Worker {
+ fn new(id: usize) -> Worker {
+ let thread = thread::spawn(|| {});
+
+ Worker { id, thread }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-15/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-15/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-15/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-16/404.html b/src/doc/book/listings/ch20-web-server/listing-20-16/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-16/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-16/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-16/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-16/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-16/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-16/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-16/src/lib.rs
new file mode 100644
index 000000000..411c1d003
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-16/src/lib.rs
@@ -0,0 +1,58 @@
+// ANCHOR: here
+use std::{sync::mpsc, thread};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+struct Job;
+
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ // ANCHOR: here
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id));
+ }
+
+ ThreadPool { workers, sender }
+ }
+ // --snip--
+ // ANCHOR_END: here
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+ // ANCHOR: here
+}
+// ANCHOR_END: here
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+impl Worker {
+ fn new(id: usize) -> Worker {
+ let thread = thread::spawn(|| {});
+
+ Worker { id, thread }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-16/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-16/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-16/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/404.html b/src/doc/book/listings/ch20-web-server/listing-20-17/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-17/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/output.txt b/src/doc/book/listings/ch20-web-server/listing-20-17/output.txt
new file mode 100644
index 000000000..8bedfecfd
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/output.txt
@@ -0,0 +1,13 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0382]: use of moved value: `receiver`
+ --> src/lib.rs:26:42
+ |
+21 | let (sender, receiver) = mpsc::channel();
+ | -------- move occurs because `receiver` has type `std::sync::mpsc::Receiver<Job>`, which does not implement the `Copy` trait
+...
+26 | workers.push(Worker::new(id, receiver));
+ | ^^^^^^^^ value moved here, in previous iteration of loop
+
+For more information about this error, try `rustc --explain E0382`.
+error: could not compile `hello` due to previous error
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-17/src/lib.rs
new file mode 100644
index 000000000..d764879e5
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/src/lib.rs
@@ -0,0 +1,65 @@
+use std::{sync::mpsc, thread};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+struct Job;
+
+// ANCHOR: here
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ // ANCHOR: here
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, receiver));
+ }
+
+ ThreadPool { workers, sender }
+ }
+ // --snip--
+ // ANCHOR_END: here
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+ // ANCHOR: here
+}
+
+// --snip--
+
+// ANCHOR_END: here
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+// ANCHOR: here
+impl Worker {
+ fn new(id: usize, receiver: mpsc::Receiver<Job>) -> Worker {
+ let thread = thread::spawn(|| {
+ receiver;
+ });
+
+ Worker { id, thread }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-17/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-17/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-17/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-18/404.html b/src/doc/book/listings/ch20-web-server/listing-20-18/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-18/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-18/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-18/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-18/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-18/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-18/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-18/src/lib.rs
new file mode 100644
index 000000000..4bff8acad
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-18/src/lib.rs
@@ -0,0 +1,76 @@
+// ANCHOR: here
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+// --snip--
+
+// ANCHOR_END: here
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+struct Job;
+
+// ANCHOR: here
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ // ANCHOR: here
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ // --snip--
+ // ANCHOR_END: here
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+ // ANCHOR: here
+}
+
+// --snip--
+
+// ANCHOR_END: here
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+// ANCHOR: here
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ // --snip--
+ // ANCHOR_END: here
+ let thread = thread::spawn(|| {
+ receiver;
+ });
+
+ Worker { id, thread }
+ // ANCHOR: here
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-18/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-18/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-18/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-19/404.html b/src/doc/book/listings/ch20-web-server/listing-20-19/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-19/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-19/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-19/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-19/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-19/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-19/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-19/src/lib.rs
new file mode 100644
index 000000000..aeb1facd6
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-19/src/lib.rs
@@ -0,0 +1,69 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+// ANCHOR: here
+// --snip--
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+ // ANCHOR: here
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+// --snip--
+// ANCHOR_END: here
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(|| {
+ receiver;
+ });
+
+ Worker { id, thread }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-19/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-19/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-19/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-20/404.html b/src/doc/book/listings/ch20-web-server/listing-20-20/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-20/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-20/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-20/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-20/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-20/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-20/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-20/src/lib.rs
new file mode 100644
index 000000000..86157c9e7
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-20/src/lib.rs
@@ -0,0 +1,68 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+// ANCHOR: here
+// --snip--
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock().unwrap().recv().unwrap();
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ Worker { id, thread }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-20/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-20/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-20/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-21/404.html b/src/doc/book/listings/ch20-web-server/listing-20-21/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-21/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-21/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-21/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-21/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-21/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-21/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-21/src/lib.rs
new file mode 100644
index 000000000..17b37e77b
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-21/src/lib.rs
@@ -0,0 +1,67 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+// ANCHOR: here
+// --snip--
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || {
+ while let Ok(job) = receiver.lock().unwrap().recv() {
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ }
+ });
+
+ Worker { id, thread }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-21/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-21/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-21/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/404.html b/src/doc/book/listings/ch20-web-server/listing-20-22/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-22/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/output.txt b/src/doc/book/listings/ch20-web-server/listing-20-22/output.txt
new file mode 100644
index 000000000..4402092e9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/output.txt
@@ -0,0 +1,14 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0507]: cannot move out of `worker.thread` which is behind a mutable reference
+ --> src/lib.rs:52:13
+ |
+52 | worker.thread.join().unwrap();
+ | ^^^^^^^^^^^^^ ------ `worker.thread` moved due to this method call
+ | |
+ | move occurs because `worker.thread` has type `JoinHandle<()>`, which does not implement the `Copy` trait
+ |
+note: this function takes ownership of the receiver `self`, which moves `worker.thread`
+
+For more information about this error, try `rustc --explain E0507`.
+error: could not compile `hello` due to previous error
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-22/src/lib.rs
new file mode 100644
index 000000000..72a8c4808
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/src/lib.rs
@@ -0,0 +1,76 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+// ANCHOR: here
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ worker.thread.join().unwrap();
+ }
+ }
+}
+// ANCHOR_END: here
+
+struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock().unwrap().recv().unwrap();
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ Worker { id, thread }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-22/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-22/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-22/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-23/404.html b/src/doc/book/listings/ch20-web-server/listing-20-23/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-23/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-23/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-23/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-23/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-23/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-23/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-23/src/lib.rs
new file mode 100644
index 000000000..eea339b02
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-23/src/lib.rs
@@ -0,0 +1,95 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+// ANCHOR: here
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: Option<mpsc::Sender<Job>>,
+}
+// --snip--
+// ANCHOR_END: here
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+// ANCHOR: here
+impl ThreadPool {
+ // ANCHOR_END: here
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ // ANCHOR: here
+ pub fn new(size: usize) -> ThreadPool {
+ // --snip--
+
+ // ANCHOR_END: here
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ // ANCHOR: here
+ ThreadPool {
+ workers,
+ sender: Some(sender),
+ }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.as_ref().unwrap().send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ drop(self.sender.take());
+
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ if let Some(thread) = worker.thread.take() {
+ thread.join().unwrap();
+ }
+ }
+ }
+}
+// ANCHOR_END: here
+
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock().unwrap().recv().unwrap();
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-23/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-23/src/main.rs
new file mode 100644
index 000000000..b6aa046d1
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-23/src/main.rs
@@ -0,0 +1,45 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming().take(2) {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+
+ println!("Shutting down.");
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-24/404.html b/src/doc/book/listings/ch20-web-server/listing-20-24/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-24/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-24/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-24/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-24/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-24/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-24/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-24/src/lib.rs
new file mode 100644
index 000000000..55e8fef8f
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-24/src/lib.rs
@@ -0,0 +1,92 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: Option<mpsc::Sender<Job>>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool {
+ workers,
+ sender: Some(sender),
+ }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.as_ref().unwrap().send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ drop(self.sender.take());
+
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ if let Some(thread) = worker.thread.take() {
+ thread.join().unwrap();
+ }
+ }
+ }
+}
+
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+
+// ANCHOR: here
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ match receiver.lock().unwrap().recv() {
+ Ok(job) => {
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ }
+ Err(_) => {
+ println!("Worker {id} disconnected; shutting down.");
+ break;
+ }
+ }
+ });
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-24/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-24/src/main.rs
new file mode 100644
index 000000000..b6aa046d1
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-24/src/main.rs
@@ -0,0 +1,45 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming().take(2) {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+
+ println!("Shutting down.");
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-25/404.html b/src/doc/book/listings/ch20-web-server/listing-20-25/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-25/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.lock b/src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.toml b/src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-25/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-25/hello.html b/src/doc/book/listings/ch20-web-server/listing-20-25/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-25/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-25/src/lib.rs b/src/doc/book/listings/ch20-web-server/listing-20-25/src/lib.rs
new file mode 100644
index 000000000..54c0489ab
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-25/src/lib.rs
@@ -0,0 +1,92 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: Option<mpsc::Sender<Job>>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool {
+ workers,
+ sender: Some(sender),
+ }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.as_ref().unwrap().send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ drop(self.sender.take());
+
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ if let Some(thread) = worker.thread.take() {
+ thread.join().unwrap();
+ }
+ }
+ }
+}
+
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let message = receiver.lock().unwrap().recv();
+
+ match message {
+ Ok(job) => {
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ }
+ Err(_) => {
+ println!("Worker {id} disconnected; shutting down.");
+ break;
+ }
+ }
+ });
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/listing-20-25/src/main.rs b/src/doc/book/listings/ch20-web-server/listing-20-25/src/main.rs
new file mode 100644
index 000000000..a649ff103
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/listing-20-25/src/main.rs
@@ -0,0 +1,53 @@
+use hello::ThreadPool;
+use std::fs;
+use std::io::prelude::*;
+use std::net::TcpListener;
+use std::net::TcpStream;
+use std::thread;
+use std::time::Duration;
+
+// ANCHOR: here
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming().take(2) {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+
+ println!("Shutting down.");
+}
+// ANCHOR_END: here
+
+fn handle_connection(mut stream: TcpStream) {
+ let mut buffer = [0; 1024];
+ stream.read(&mut buffer).unwrap();
+
+ let get = b"GET / HTTP/1.1\r\n";
+ let sleep = b"GET /sleep HTTP/1.1\r\n";
+
+ let (status_line, filename) = if buffer.starts_with(get) {
+ ("HTTP/1.1 200 OK", "hello.html")
+ } else if buffer.starts_with(sleep) {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ } else {
+ ("HTTP/1.1 404 NOT FOUND", "404.html")
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+
+ let response = format!(
+ "{}\r\nContent-Length: {}\r\n\r\n{}",
+ status_line,
+ contents.len(),
+ contents
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ stream.flush().unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/404.html b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt
new file mode 100644
index 000000000..fa337b8a8
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt
@@ -0,0 +1,10 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0599]: no function or associated item named `new` found for struct `ThreadPool` in the current scope
+ --> src/main.rs:12:28
+ |
+12 | let pool = ThreadPool::new(4);
+ | ^^^ function or associated item not found in `ThreadPool`
+
+For more information about this error, try `rustc --explain E0599`.
+error: could not compile `hello` due to previous error
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs
new file mode 100644
index 000000000..7312e293d
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs
@@ -0,0 +1 @@
+pub struct ThreadPool;
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs
new file mode 100644
index 000000000..f7b42167f
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs
@@ -0,0 +1,45 @@
+// ANCHOR: here
+use hello::ThreadPool;
+// ANCHOR_END: here
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/404.html b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt
new file mode 100644
index 000000000..44c8f3953
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt
@@ -0,0 +1,10 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0599]: no method named `execute` found for struct `ThreadPool` in the current scope
+ --> src/main.rs:17:14
+ |
+17 | pool.execute(|| {
+ | ^^^^^^^ method not found in `ThreadPool`
+
+For more information about this error, try `rustc --explain E0599`.
+error: could not compile `hello` due to previous error
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs
new file mode 100644
index 000000000..f0e1890bb
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs
@@ -0,0 +1,7 @@
+pub struct ThreadPool;
+
+impl ThreadPool {
+ pub fn new(size: usize) -> ThreadPool {
+ ThreadPool
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/404.html b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/output.txt b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/output.txt
new file mode 100644
index 000000000..dc76c43d6
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/output.txt
@@ -0,0 +1,3 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.24s
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs
new file mode 100644
index 000000000..1321ab873
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs
@@ -0,0 +1,18 @@
+pub struct ThreadPool;
+
+// ANCHOR: here
+impl ThreadPool {
+ // --snip--
+ // ANCHOR_END: here
+ pub fn new(size: usize) -> ThreadPool {
+ ThreadPool
+ }
+
+ // ANCHOR: here
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-03-define-execute/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/404.html b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt
new file mode 100644
index 000000000..34d30fe05
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt
@@ -0,0 +1,24 @@
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0599]: no method named `join` found for enum `Option` in the current scope
+ --> src/lib.rs:52:27
+ |
+52 | worker.thread.join().unwrap();
+ | ^^^^ method not found in `Option<JoinHandle<()>>`
+
+error[E0308]: mismatched types
+ --> src/lib.rs:72:22
+ |
+72 | Worker { id, thread }
+ | ^^^^^^ expected enum `Option`, found struct `JoinHandle`
+ |
+ = note: expected enum `Option<JoinHandle<()>>`
+ found struct `JoinHandle<_>`
+help: try wrapping the expression in `Some`
+ |
+72 | Worker { id, thread: Some(thread) }
+ | +++++++++++++ +
+
+Some errors have detailed explanations: E0308, E0599.
+For more information about an error, try `rustc --explain E0308`.
+error: could not compile `hello` due to 2 previous errors
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs
new file mode 100644
index 000000000..6ef710a26
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs
@@ -0,0 +1,76 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ worker.thread.join().unwrap();
+ }
+ }
+}
+
+// ANCHOR: here
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+// ANCHOR_END: here
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock().unwrap().recv().unwrap();
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ Worker { id, thread }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-04-update-worker-definition/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/404.html b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs
new file mode 100644
index 000000000..ede3750a1
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs
@@ -0,0 +1,83 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ worker.thread.join().unwrap();
+ }
+ }
+}
+
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+
+// ANCHOR: here
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ // --snip--
+
+ // ANCHOR_END: here
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock().unwrap().recv().unwrap();
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ // ANCHOR: here
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
+// ANCHOR_END: here
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/main.rs
new file mode 100644
index 000000000..79efb28a2
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-05-fix-worker-new/src/main.rs
@@ -0,0 +1,43 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/404.html b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs
new file mode 100644
index 000000000..b795ea53b
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs
@@ -0,0 +1,81 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.send(job).unwrap();
+ }
+}
+
+// ANCHOR: here
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ if let Some(thread) = worker.thread.take() {
+ thread.join().unwrap();
+ }
+ }
+ }
+}
+// ANCHOR_END: here
+
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock().unwrap().recv().unwrap();
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/main.rs
new file mode 100644
index 000000000..b6aa046d1
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/main.rs
@@ -0,0 +1,45 @@
+use hello::ThreadPool;
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming().take(2) {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+
+ println!("Shutting down.");
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ let (status_line, filename) = match &request_line[..] {
+ "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/404.html b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/404.html
new file mode 100644
index 000000000..88d8e9152
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/404.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.lock b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.lock
new file mode 100644
index 000000000..f2d069f46
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.lock
@@ -0,0 +1,6 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "hello"
+version = "0.1.0"
+
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.toml b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.toml
new file mode 100644
index 000000000..fe619478a
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/Cargo.toml
@@ -0,0 +1,6 @@
+[package]
+name = "hello"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/hello.html b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/hello.html
new file mode 100644
index 000000000..fe442d6b9
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/hello.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/lib.rs b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/lib.rs
new file mode 100644
index 000000000..54c0489ab
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/lib.rs
@@ -0,0 +1,92 @@
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: Option<mpsc::Sender<Job>>,
+}
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)));
+ }
+
+ ThreadPool {
+ workers,
+ sender: Some(sender),
+ }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.as_ref().unwrap().send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ drop(self.sender.take());
+
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ if let Some(thread) = worker.thread.take() {
+ thread.join().unwrap();
+ }
+ }
+ }
+}
+
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let message = receiver.lock().unwrap().recv();
+
+ match message {
+ Ok(job) => {
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ }
+ Err(_) => {
+ println!("Worker {id} disconnected; shutting down.");
+ break;
+ }
+ }
+ });
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
diff --git a/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/main.rs b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/main.rs
new file mode 100644
index 000000000..3161c2ee5
--- /dev/null
+++ b/src/doc/book/listings/ch20-web-server/no-listing-07-final-code/src/main.rs
@@ -0,0 +1,51 @@
+use hello::ThreadPool;
+use std::fs;
+use std::io::prelude::*;
+use std::net::TcpListener;
+use std::net::TcpStream;
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming().take(2) {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+
+ println!("Shutting down.");
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ let mut buffer = [0; 1024];
+ stream.read(&mut buffer).unwrap();
+
+ let get = b"GET / HTTP/1.1\r\n";
+ let sleep = b"GET /sleep HTTP/1.1\r\n";
+
+ let (status_line, filename) = if buffer.starts_with(get) {
+ ("HTTP/1.1 200 OK", "hello.html")
+ } else if buffer.starts_with(sleep) {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ } else {
+ ("HTTP/1.1 404 NOT FOUND", "404.html")
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+
+ let response = format!(
+ "{}\r\nContent-Length: {}\r\n\r\n{}",
+ status_line,
+ contents.len(),
+ contents
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ stream.flush().unwrap();
+}
diff --git a/src/doc/book/nostarch/acknowledgments.md b/src/doc/book/nostarch/acknowledgments.md
new file mode 100644
index 000000000..89d4adffc
--- /dev/null
+++ b/src/doc/book/nostarch/acknowledgments.md
@@ -0,0 +1,19 @@
+# Acknowledgments
+
+We would like to thank everyone who has worked on the Rust language for
+creating an amazing language worth writing a book about. We’re grateful to
+everyone in the Rust community for being welcoming and creating an environment
+worth welcoming more folks into.
+
+We’re especially thankful for everyone who read early versions of this book
+online and provided feedback, bug reports, and pull requests. Special thanks to
+Eduard-Mihai Burtescu, Alex Crichton, and JT for providing technical review and
+Karen Rustad Tölva for the cover art. Thank you to our team at No Starch,
+including Bill Pollock, Liz Chadwick, and Janelle Ludowise, for improving this
+book and bringing it to print.
+
+<!--Insert Steve's acknowledgements here -->
+
+Carol is grateful for the opportunity to work on this book. She thanks her
+family for their constant love and support, especially her husband Jake
+Goulding and her daughter Vivian.
diff --git a/src/doc/book/nostarch/appendix.md b/src/doc/book/nostarch/appendix.md
new file mode 100644
index 000000000..1722a9345
--- /dev/null
+++ b/src/doc/book/nostarch/appendix.md
@@ -0,0 +1,765 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+## Appendix A: Keywords
+
+The following list contains keywords that are reserved for current or future
+use by the Rust language. As such, they cannot be used as identifiers (except
+as raw identifiers as we’ll discuss in the “Raw Identifiers” section).
+Identifiers are names of functions, variables, parameters, struct fields,
+modules, crates, constants, macros, static values, attributes, types, traits,
+or lifetimes.
+
+### Keywords Currently in Use
+
+The following is a list of keywords currently in use, with their functionality
+described.
+
+* `as` - perform primitive casting, disambiguate the specific trait containing
+ an item, or rename items in `use` statements
+
+<!-- `extern crate` is a bit old. Not sure if it needs a mention
+/JT -->
+<!-- good call, took it out /Carol -->
+
+* `async` - return a `Future` instead of blocking the current thread
+* `await` - suspend execution until the result of a `Future` is ready
+* `break` - exit a loop immediately
+* `const` - define constant items or constant raw pointers
+* `continue` - continue to the next loop iteration
+* `crate` - in a module path, refers to the crate root
+<!-- these days `crate` is mostly just used as part of the module path
+/JT -->
+<!-- fixed! /Carol -->
+
+* `dyn` - dynamic dispatch to a trait object
+* `else` - fallback for `if` and `if let` control flow constructs
+* `enum` - define an enumeration
+* `extern` - link an external function or variable
+<!-- `extern crate` is a bit out of date
+/JT -->
+<!-- fixed! /Carol -->
+
+* `false` - Boolean false literal
+* `fn` - define a function or the function pointer type
+* `for` - loop over items from an iterator, implement a trait, or specify a
+ higher-ranked lifetime
+* `if` - branch based on the result of a conditional expression
+* `impl` - implement inherent or trait functionality
+* `in` - part of `for` loop syntax
+* `let` - bind a variable
+* `loop` - loop unconditionally
+* `match` - match a value to patterns
+* `mod` - define a module
+* `move` - make a closure take ownership of all its captures
+* `mut` - denote mutability in references, raw pointers, or pattern bindings
+* `pub` - denote public visibility in struct fields, `impl` blocks, or modules
+* `ref` - bind by reference
+* `return` - return from function
+* `Self` - a type alias for the type we are defining or implementing
+* `self` - method subject or current module
+* `static` - global variable or lifetime lasting the entire program execution
+* `struct` - define a structure
+* `super` - parent module of the current module
+* `trait` - define a trait
+* `true` - Boolean true literal
+* `type` - define a type alias or associated type
+* `union` - define a union; is only a keyword when used in a union declaration
+* `unsafe` - denote unsafe code, functions, traits, or implementations
+* `use` - bring symbols into scope
+* `where` - denote clauses that constrain a type
+* `while` - loop conditionally based on the result of an expression
+
+### Keywords Reserved for Future Use
+
+The following keywords do not yet have any functionality but are reserved by
+Rust for potential future use.
+
+* `abstract`
+* `become`
+* `box`
+* `do`
+* `final`
+* `macro`
+* `override`
+* `priv`
+* `try`
+* `typeof`
+* `unsized`
+* `virtual`
+* `yield`
+
+### Raw Identifiers
+
+*Raw identifiers* are the syntax that lets you use keywords where they wouldn’t
+normally be allowed. You use a raw identifier by prefixing a keyword with `r#`.
+
+For example, `match` is a keyword. If you try to compile the following function
+that uses `match` as its name:
+
+Filename: src/main.rs
+
+```
+fn match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+```
+
+you’ll get this error:
+
+```
+error: expected identifier, found keyword `match`
+ --> src/main.rs:4:4
+ |
+4 | fn match(needle: &str, haystack: &str) -> bool {
+ | ^^^^^ expected identifier, found keyword
+```
+
+The error shows that you can’t use the keyword `match` as the function
+identifier. To use `match` as a function name, you need to use the raw
+identifier syntax, like this:
+
+Filename: src/main.rs
+
+```
+fn r#match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+
+fn main() {
+ assert!(r#match("foo", "foobar"));
+}
+```
+
+This code will compile without any errors. Note the `r#` prefix on the function
+name in its definition as well as where the function is called in `main`.
+
+Raw identifiers allow you to use any word you choose as an identifier, even if
+that word happens to be a reserved keyword. This gives us more freedom to
+choose identifier names, as well as lets us integrate with programs written in
+a language where these words aren’t keywords. In addition, raw identifiers
+allow you to use libraries written in a different Rust edition than your crate
+uses. For example, `try` isn’t a keyword in the 2015 edition but is in the 2018
+edition. If you depend on a library that’s written using the 2015 edition and
+has a `try` function, you’ll need to use the raw identifier syntax, `r#try` in
+this case, to call that function from your 2018 edition code. See Appendix E
+for more information on editions.
+
+## Appendix B: Operators and Symbols
+
+This appendix contains a glossary of Rust’s syntax, including operators and
+other symbols that appear by themselves or in the context of paths, generics,
+trait bounds, macros, attributes, comments, tuples, and brackets.
+
+### Operators
+
+Table B-1 contains the operators in Rust, an example of how the operator would
+appear in context, a short explanation, and whether that operator is
+overloadable. If an operator is overloadable, the relevant trait to use to
+overload that operator is listed.
+
+Table B-1: Operators
+
+| Operator | Example | Explanation | Overloadable? |
+|----------|---------|-------------|---------------|
+| `!` | `ident!(...)`, `ident!{...}`, `ident![...]` | Macro expansion | |
+| `!` | `!expr` | Bitwise or logical complement | `Not` |
+| `!=` | `expr != expr` | Nonequality comparison | `PartialEq` |
+| `%` | `expr % expr` | Arithmetic remainder | `Rem` |
+| `%=` | `var %= expr` | Arithmetic remainder and assignment | `RemAssign` |
+| `&` | `&expr`, `&mut expr` | Borrow | |
+| `&` | `&type`, `&mut type`, `&'a type`, `&'a mut type` | Borrowed pointer type | |
+| `&` | `expr & expr` | Bitwise AND | `BitAnd` |
+| `&=` | `var &= expr` | Bitwise AND and assignment | `BitAndAssign` |
+| `&&` | `expr && expr` | Short-circuiting logical AND | |
+| `*` | `expr * expr` | Arithmetic multiplication | `Mul` |
+| `*=` | `var *= expr` | Arithmetic multiplication and assignment | `MulAssign` |
+| `*` | `*expr` | Dereference | `Deref` |
+| `*` | `*const type`, `*mut type` | Raw pointer | |
+| `+` | `trait + trait`, `'a + trait` | Compound type constraint | |
+| `+` | `expr + expr` | Arithmetic addition | `Add` |
+| `+=` | `var += expr` | Arithmetic addition and assignment | `AddAssign` |
+| `,` | `expr, expr` | Argument and element separator | |
+| `-` | `- expr` | Arithmetic negation | `Neg` |
+| `-` | `expr - expr` | Arithmetic subtraction | `Sub` |
+| `-=` | `var -= expr` | Arithmetic subtraction and assignment | `SubAssign` |
+| `->` | `fn(...) -> type`, <code>&vert;...&vert; -> type</code> | Function and closure return type | |
+| `.` | `expr.ident` | Member access | |
+| `..` | `..`, `expr..`, `..expr`, `expr..expr` | Right-exclusive range literal | `PartialOrd` |
+| `..=` | `..=expr`, `expr..=expr` | Right-inclusive range literal | `PartialOrd` |
+| `..` | `..expr` | Struct literal update syntax | |
+| `..` | `variant(x, ..)`, `struct_type { x, .. }` | “And the rest” pattern binding | |
+| `...` | `expr...expr` | (Deprecated, use `..=` instead) In a pattern: inclusive range pattern | |
+| `/` | `expr / expr` | Arithmetic division | `Div` |
+| `/=` | `var /= expr` | Arithmetic division and assignment | `DivAssign` |
+| `:` | `pat: type`, `ident: type` | Constraints | |
+| `:` | `ident: expr` | Struct field initializer | |
+| `:` | `'a: loop {...}` | Loop label | |
+| `;` | `expr;` | Statement and item terminator | |
+| `;` | `[...; len]` | Part of fixed-size array syntax | |
+| `<<` | `expr << expr` | Left-shift | `Shl` |
+| `<<=` | `var <<= expr` | Left-shift and assignment | `ShlAssign` |
+| `<` | `expr < expr` | Less than comparison | `PartialOrd` |
+| `<=` | `expr <= expr` | Less than or equal to comparison | `PartialOrd` |
+| `=` | `var = expr`, `ident = type` | Assignment/equivalence | |
+| `==` | `expr == expr` | Equality comparison | `PartialEq` |
+| `=>` | `pat => expr` | Part of match arm syntax | |
+| `>` | `expr > expr` | Greater than comparison | `PartialOrd` |
+| `>=` | `expr >= expr` | Greater than or equal to comparison | `PartialOrd` |
+| `>>` | `expr >> expr` | Right-shift | `Shr` |
+| `>>=` | `var >>= expr` | Right-shift and assignment | `ShrAssign` |
+| `@` | `ident @ pat` | Pattern binding | |
+| `^` | `expr ^ expr` | Bitwise exclusive OR | `BitXor` |
+| `^=` | `var ^= expr` | Bitwise exclusive OR and assignment | `BitXorAssign` |
+| <code>&vert;</code> | <code>pat &vert; pat</code> | Pattern alternatives | |
+| <code>&vert;</code> | <code>expr &vert; expr</code> | Bitwise OR | `BitOr` |
+| <code>&vert;=</code> | <code>var &vert;= expr</code> | Bitwise OR and assignment | `BitOrAssign` |
+| <code>&vert;&vert;</code> | <code>expr &vert;&vert; expr</code> | Short-circuiting logical OR | |
+| `?` | `expr?` | Error propagation | |
+
+### Non-operator Symbols
+
+The following list contains all symbols that don’t function as operators;
+that is, they don’t behave like a function or method call.
+
+Table B-2 shows symbols that appear on their own and are valid in a variety of
+locations.
+
+Table B-2: Stand-Alone Syntax
+
+| Symbol | Explanation |
+|--------|-------------|
+| `'ident` | Named lifetime or loop label |
+| `...u8`, `...i32`, `...f64`, `...usize`, etc. | Numeric literal of specific type |
+| `"..."` | String literal |
+| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | Raw string literal, escape characters not processed |
+| `b"..."` | Byte string literal; constructs an array of bytes instead of a string |
+| `br"..."`, `br#"..."#`, `br##"..."##`, etc. | Raw byte string literal, combination of raw and byte string literal |
+| `'...'` | Character literal |
+| `b'...'` | ASCII byte literal |
+| <code>&vert;...&vert; expr</code> | Closure |
+| `!` | Always empty bottom type for diverging functions |
+| `_` | “Ignored” pattern binding; also used to make integer literals readable |
+
+Table B-3 shows symbols that appear in the context of a path through the module
+hierarchy to an item.
+
+Table B-3: Path-Related Syntax
+
+| Symbol | Explanation |
+|--------|-------------|
+| `ident::ident` | Namespace path |
+| `::path` | Path relative to the crate root (i.e., an explicitly absolute path) |
+| `self::path` | Path relative to the current module (i.e., an explicitly relative path).
+| `super::path` | Path relative to the parent of the current module |
+| `type::ident`, `<type as trait>::ident` | Associated constants, functions, and types |
+| `<type>::...` | Associated item for a type that cannot be directly named (e.g., `<&T>::...`, `<[T]>::...`, etc.) |
+| `trait::method(...)` | Disambiguating a method call by naming the trait that defines it |
+| `type::method(...)` | Disambiguating a method call by naming the type for which it’s defined |
+| `<type as trait>::method(...)` | Disambiguating a method call by naming the trait and type |
+
+Table B-4 shows symbols that appear in the context of using generic type
+parameters.
+
+Table B-4: Generics
+
+| Symbol | Explanation |
+|--------|-------------|
+| `path<...>` | Specifies parameters to generic type in a type (e.g., `Vec<u8>`) |
+| `path::<...>`, `method::<...>` | Specifies parameters to generic type, function, or method in an expression; often referred to as turbofish (e.g., `"42".parse::<i32>()`) |
+| `fn ident<...> ...` | Define generic function |
+| `struct ident<...> ...` | Define generic structure |
+| `enum ident<...> ...` | Define generic enumeration |
+| `impl<...> ...` | Define generic implementation |
+| `for<...> type` | Higher-ranked lifetime bounds |
+| `type<ident=type>` | A generic type where one or more associated types have specific assignments (e.g., `Iterator<Item=T>`) |
+
+Table B-5 shows symbols that appear in the context of constraining generic type
+parameters with trait bounds.
+
+Table B-5: Trait Bound Constraints
+
+| Symbol | Explanation |
+|--------|-------------|
+| `T: U` | Generic parameter `T` constrained to types that implement `U` |
+| `T: 'a` | Generic type `T` must outlive lifetime `'a` (meaning the type cannot transitively contain any references with lifetimes shorter than `'a`) |
+| `T: 'static` | Generic type `T` contains no borrowed references other than `'static` ones |
+| `'b: 'a` | Generic lifetime `'b` must outlive lifetime `'a` |
+| `T: ?Sized` | Allow generic type parameter to be a dynamically sized type |
+| `'a + trait`, `trait + trait` | Compound type constraint |
+
+Table B-6 shows symbols that appear in the context of calling or defining
+macros and specifying attributes on an item.
+
+Table B-6: Macros and Attributes
+
+| Symbol | Explanation |
+|--------|-------------|
+| `#[meta]` | Outer attribute |
+| `#![meta]` | Inner attribute |
+| `$ident` | Macro substitution |
+| `$ident:kind` | Macro capture |
+| `$(…)…` | Macro repetition |
+| `ident!(...)`, `ident!{...}`, `ident![...]` | Macro invocation |
+
+Table B-7 shows symbols that create comments.
+
+Table B-7: Comments
+
+| Symbol | Explanation |
+|--------|-------------|
+| `//` | Line comment |
+| `//!` | Inner line doc comment |
+| `///` | Outer line doc comment |
+| `/*...*/` | Block comment |
+| `/*!...*/` | Inner block doc comment |
+| `/**...*/` | Outer block doc comment |
+
+Table B-8 shows symbols that appear in the context of using tuples.
+
+Table B-8: Tuples
+
+| Symbol | Explanation |
+|--------|-------------|
+| `()` | Empty tuple (aka unit), both literal and type |
+| `(expr)` | Parenthesized expression |
+| `(expr,)` | Single-element tuple expression |
+| `(type,)` | Single-element tuple type |
+| `(expr, ...)` | Tuple expression |
+| `(type, ...)` | Tuple type |
+| `expr(expr, ...)` | Function call expression; also used to initialize tuple `struct`s and tuple `enum` variants |
+| `expr.0`, `expr.1`, etc. | Tuple indexing |
+
+Table B-9 shows the contexts in which curly braces are used.
+
+Table B-9: Curly Brackets
+
+| Context | Explanation |
+|---------|-------------|
+| `{...}` | Block expression |
+| `Type {...}` | `struct` literal |
+
+Table B-10 shows the contexts in which square brackets are used.
+
+Table B-10: Square Brackets
+
+| Context | Explanation |
+|---------|-------------|
+| `[...]` | Array literal |
+| `[expr; len]` | Array literal containing `len` copies of `expr` |
+| `[type; len]` | Array type containing `len` instances of `type` |
+| `expr[expr]` | Collection indexing. Overloadable (`Index`, `IndexMut`) |
+| `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]` | Collection indexing pretending to be collection slicing, using `Range`, `RangeFrom`, `RangeTo`, or `RangeFull` as the “index” |
+
+## Appendix C: Derivable Traits
+
+In various places in the book, we’ve discussed the `derive` attribute, which
+you can apply to a struct or enum definition. The `derive` attribute generates
+code that will implement a trait with its own default implementation on the
+type you’ve annotated with the `derive` syntax.
+
+In this appendix, we provide a reference of all the traits in the standard
+library that you can use with `derive`. Each section covers:
+
+* What operators and methods deriving this trait will enable
+* What the implementation of the trait provided by `derive` does
+* What implementing the trait signifies about the type
+* The conditions in which you’re allowed or not allowed to implement the trait
+* Examples of operations that require the trait
+
+If you want different behavior from that provided by the `derive` attribute,
+consult the standard library documentation for each trait for details of how to
+manually implement them.
+
+These traits listed here are the only ones defined by the standard library that
+can be implemented on your types using `derive`.
+Other traits defined in the standard library don’t have sensible default
+behavior, so it’s up to you to implement them in the way that makes sense for
+what you’re trying to accomplish.
+
+An example of a trait that can’t be derived is `Display`, which handles
+formatting for end users. You should always consider the appropriate way to
+display a type to an end user. What parts of the type should an end user be
+allowed to see? What parts would they find relevant? What format of the data
+would be most relevant to them? The Rust compiler doesn’t have this insight, so
+it can’t provide appropriate default behavior for you.
+
+The list of derivable traits provided in this appendix is not comprehensive:
+libraries can implement `derive` for their own traits, making the list of
+traits you can use `derive` with truly open-ended. Implementing `derive`
+involves using a procedural macro, which is covered in the
+“Macros” section of Chapter 19.
+
+### `Debug` for Programmer Output
+
+The `Debug` trait enables debug formatting in format strings, which you
+indicate by adding `:?` within `{}` placeholders.
+
+The `Debug` trait allows you to print instances of a type for debugging
+purposes, so you and other programmers using your type can inspect an instance
+at a particular point in a program’s execution.
+
+The `Debug` trait is required, for example, in use of the `assert_eq!` macro.
+This macro prints the values of instances given as arguments if the equality
+assertion fails so programmers can see why the two instances weren’t equal.
+
+### `PartialEq` and `Eq` for Equality Comparisons
+
+The `PartialEq` trait allows you to compare instances of a type to check for
+equality and enables use of the `==` and `!=` operators.
+
+Deriving `PartialEq` implements the `eq` method. When `PartialEq` is derived on
+structs, two instances are equal only if *all* fields are equal, and the
+instances are not equal if any fields are not equal. When derived on enums,
+each variant is equal to itself and not equal to the other variants.
+
+The `PartialEq` trait is required, for example, with the use of the
+`assert_eq!` macro, which needs to be able to compare two instances of a type
+for equality.
+
+The `Eq` trait has no methods. Its purpose is to signal that for every value of
+the annotated type, the value is equal to itself. The `Eq` trait can only be
+applied to types that also implement `PartialEq`, although not all types that
+implement `PartialEq` can implement `Eq`. One example of this is floating point
+number types: the implementation of floating point numbers states that two
+instances of the not-a-number (`NaN`) value are not equal to each other.
+
+An example of when `Eq` is required is for keys in a `HashMap<K, V>` so the
+`HashMap<K, V>` can tell whether two keys are the same.
+
+### `PartialOrd` and `Ord` for Ordering Comparisons
+
+The `PartialOrd` trait allows you to compare instances of a type for sorting
+purposes. A type that implements `PartialOrd` can be used with the `<`, `>`,
+`<=`, and `>=` operators. You can only apply the `PartialOrd` trait to types
+that also implement `PartialEq`.
+
+Deriving `PartialOrd` implements the `partial_cmp` method, which returns an
+`Option<Ordering>` that will be `None` when the values given don’t produce an
+ordering. An example of a value that doesn’t produce an ordering, even though
+most values of that type can be compared, is the not-a-number (`NaN`) floating
+point value. Calling `partial_cmp` with any floating point number and the `NaN`
+floating point value will return `None`.
+
+When derived on structs, `PartialOrd` compares two instances by comparing the
+value in each field in the order in which the fields appear in the struct
+definition. When derived on enums, variants of the enum declared earlier in the
+enum definition are considered less than the variants listed later.
+
+The `PartialOrd` trait is required, for example, for the `gen_range` method
+from the `rand` crate that generates a random value in the range specified by a
+range expression.
+
+The `Ord` trait allows you to know that for any two values of the annotated
+type, a valid ordering will exist. The `Ord` trait implements the `cmp` method,
+which returns an `Ordering` rather than an `Option<Ordering>` because a valid
+ordering will always be possible. You can only apply the `Ord` trait to types
+that also implement `PartialOrd` and `Eq` (and `Eq` requires `PartialEq`). When
+derived on structs and enums, `cmp` behaves the same way as the derived
+implementation for `partial_cmp` does with `PartialOrd`.
+
+An example of when `Ord` is required is when storing values in a `BTreeSet<T>`,
+a data structure that stores data based on the sort order of the values.
+
+### `Clone` and `Copy` for Duplicating Values
+
+The `Clone` trait allows you to explicitly create a deep copy of a value, and
+the duplication process might involve running arbitrary code and copying heap
+data. See the “Ways Variables and Data Interact: Clone” section in Chapter 4
+for more information on `Clone`.
+
+Deriving `Clone` implements the `clone` method, which when implemented for the
+whole type, calls `clone` on each of the parts of the type. This means all the
+fields or values in the type must also implement `Clone` to derive `Clone`.
+
+An example of when `Clone` is required is when calling the `to_vec` method on a
+slice. The slice doesn’t own the type instances it contains, but the vector
+returned from `to_vec` will need to own its instances, so `to_vec` calls
+`clone` on each item. Thus, the type stored in the slice must implement `Clone`.
+
+The `Copy` trait allows you to duplicate a value by only copying bits stored on
+the stack; no arbitrary code is necessary. See the “Stack-Only Data: Copy”
+section in Chapter 4 for more information on `Copy`.
+
+The `Copy` trait doesn’t define any methods to prevent programmers from
+overloading those methods and violating the assumption that no arbitrary code
+is being run. That way, all programmers can assume that copying a value will be
+very fast.
+
+You can derive `Copy` on any type whose parts all implement `Copy`. A type that
+implements `Copy` must also implement `Clone`, because a type that implements
+`Copy` has a trivial implementation of `Clone` that performs the same task as
+`Copy`.
+
+The `Copy` trait is rarely required; types that implement `Copy` have
+optimizations available, meaning you don’t have to call `clone`, which makes
+the code more concise.
+
+Everything possible with `Copy` you can also accomplish with `Clone`, but the
+code might be slower or have to use `clone` in places.
+
+### `Hash` for Mapping a Value to a Value of Fixed Size
+
+The `Hash` trait allows you to take an instance of a type of arbitrary size and
+map that instance to a value of fixed size using a hash function. Deriving
+`Hash` implements the `hash` method. The derived implementation of the `hash`
+method combines the result of calling `hash` on each of the parts of the type,
+meaning all fields or values must also implement `Hash` to derive `Hash`.
+
+An example of when `Hash` is required is in storing keys in a `HashMap<K, V>`
+to store data efficiently.
+
+### `Default` for Default Values
+
+The `Default` trait allows you to create a default value for a type. Deriving
+`Default` implements the `default` function. The derived implementation of the
+`default` function calls the `default` function on each part of the type,
+meaning all fields or values in the type must also implement `Default` to
+derive `Default`.
+
+The `Default::default` function is commonly used in combination with the struct
+update syntax discussed in the “Creating Instances From Other Instances With
+Struct Update Syntax” section in Chapter 5. You can customize a few fields of a
+struct and then set and use a default value for the rest of the fields by using
+`..Default::default()`.
+
+The `Default` trait is required when you use the method `unwrap_or_default` on
+`Option<T>` instances, for example. If the `Option<T>` is `None`, the method
+`unwrap_or_default` will return the result of `Default::default` for the type
+`T` stored in the `Option<T>`.
+
+## Appendix D - Useful Development Tools
+
+In this appendix, we talk about some useful development tools that the Rust
+project provides. We’ll look at automatic formatting, quick ways to apply
+warning fixes, a linter, and integrating with IDEs.
+
+### Automatic Formatting with `rustfmt`
+
+The `rustfmt` tool reformats your code according to the community code style.
+Many collaborative projects use `rustfmt` to prevent arguments about which
+style to use when writing Rust: everyone formats their code using the tool.
+
+To install `rustfmt`, enter the following:
+
+```
+$ rustup component add rustfmt
+```
+
+This command gives you `rustfmt` and `cargo-fmt`, similar to how Rust gives you
+both `rustc` and `cargo`. To format any Cargo project, enter the following:
+
+```
+$ cargo fmt
+```
+
+Running this command reformats all the Rust code in the current crate. This
+should only change the code style, not the code semantics. For more information
+on `rustfmt`, see its documentation at *https://github.com/rust-lang/rustfmt*.
+
+
+### Fix Your Code with `rustfix`
+
+The rustfix tool is included with Rust installations and can automatically fix
+compiler warnings that have a clear way to correct the problem that’s likely
+what you want. It’s likely you’ve seen compiler warnings before. For example,
+consider this code:
+
+Filename: src/main.rs
+
+```
+fn do_something() {}
+
+fn main() {
+ for i in 0..100 {
+ do_something();
+ }
+}
+```
+
+Here, we’re calling the `do_something` function 100 times, but we never use the
+variable `i` in the body of the `for` loop. Rust warns us about that:
+
+```
+$ cargo build
+ Compiling myprogram v0.1.0 (file:///projects/myprogram)
+warning: unused variable: `i`
+ --> src/main.rs:4:9
+ |
+4 | for i in 0..100 {
+ | ^ help: consider using `_i` instead
+ |
+ = note: #[warn(unused_variables)] on by default
+
+ Finished dev [unoptimized + debuginfo] target(s) in 0.50s
+```
+
+The warning suggests that we use `_i` as a name instead: the underscore
+indicates that we intend for this variable to be unused. We can automatically
+apply that suggestion using the `rustfix` tool by running the command `cargo
+fix`:
+
+```
+$ cargo fix
+ Checking myprogram v0.1.0 (file:///projects/myprogram)
+ Fixing src/main.rs (1 fix)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.59s
+```
+
+When we look at *src/main.rs* again, we’ll see that `cargo fix` has changed the
+code:
+
+Filename: src/main.rs
+
+```
+fn do_something() {}
+
+fn main() {
+ for _i in 0..100 {
+ do_something();
+ }
+}
+```
+
+The `for` loop variable is now named `_i`, and the warning no longer appears.
+
+You can also use the `cargo fix` command to transition your code between
+different Rust editions. Editions are covered in Appendix E.
+
+### More Lints with Clippy
+
+The Clippy tool is a collection of lints to analyze your code so you can catch
+common mistakes and improve your Rust code.
+
+To install Clippy, enter the following:
+
+```
+$ rustup component add clippy
+```
+
+To run Clippy’s lints on any Cargo project, enter the following:
+
+```
+$ cargo clippy
+```
+
+For example, say you write a program that uses an approximation of a
+mathematical constant, such as pi, as this program does:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = 3.1415;
+ let r = 8.0;
+ println!("the area of the circle is {}", x * r * r);
+}
+```
+
+Running `cargo clippy` on this project results in this error:
+
+```
+error: approximate value of `f{32, 64}::consts::PI` found. Consider using it directly
+ --> src/main.rs:2:13
+ |
+2 | let x = 3.1415;
+ | ^^^^^^
+ |
+ = note: #[deny(clippy::approx_constant)] on by default
+ = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/master/index.html#approx_constant
+```
+
+This error lets you know that Rust already has a more precise `PI` constant
+defined, and that your program would be more correct if you used the constant
+instead. You would then change your code to use the `PI` constant.
+
+The following code doesn’t result in any errors or warnings from Clippy:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = std::f64::consts::PI;
+ let r = 8.0;
+ println!("the area of the circle is {}", x * r * r);
+}
+```
+
+For more information on Clippy, see its documentation at *https://github.com/rust-lang/rust-clippy*.
+
+### IDE Integration Using `rust-analyzer`
+
+To help IDE integration, the Rust community recommends using `rust-analyzer`.
+This tool is a set of compiler-centric utilities that speaks the Language
+Server Protocol, which is a specification for IDEs and programming languages to
+communicate with each other. Different clients can use `rust-analyzer`, such as
+the Rust analyzer plug-in for Visual Studio Code at
+*https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer*.
+
+Visit the `rust-analyzer` project’s home page at
+*https://rust-analyzer.github.io* for installation instructions, then install
+the language server support in your particular IDE. Your IDE will gain
+abilities such as autocompletion, jump to definition, and inline errors.
+
+## Appendix E - Editions
+
+In Chapter 1, you saw that `cargo new` adds a bit of metadata to your
+*Cargo.toml* file about an edition. This appendix talks about what that means!
+
+The Rust language and compiler have a six-week release cycle, meaning users get
+a constant stream of new features. Other programming languages release larger
+changes less often; Rust releases smaller updates more frequently. After a
+while, all of these tiny changes add up. But from release to release, it can be
+difficult to look back and say, “Wow, between Rust 1.10 and Rust 1.31, Rust has
+changed a lot!”
+
+Every two or three years, the Rust team produces a new Rust *edition*. Each
+edition brings together the features that have landed into a clear package with
+fully updated documentation and tooling. New editions ship as part of the usual
+six-week release process.
+
+Editions serve different purposes for different people:
+
+* For active Rust users, a new edition brings together incremental changes into
+ an easy-to-understand package.
+* For non-users, a new edition signals that some major advancements have
+ landed, which might make Rust worth another look.
+* For those developing Rust, a new edition provides a rallying point for the
+ project as a whole.
+
+At the time of this writing, three Rust editions are available: Rust 2015, Rust
+2018, and Rust 2021. This book is written using Rust 2021 edition idioms.
+
+The `edition` key in *Cargo.toml* indicates which edition the compiler should
+use for your code. If the key doesn’t exist, Rust uses `2015` as the edition
+value for backward compatibility reasons.
+
+Each project can opt in to an edition other than the default 2015 edition.
+Editions can contain incompatible changes, such as including a new keyword that
+conflicts with identifiers in code. However, unless you opt in to those
+changes, your code will continue to compile even as you upgrade the Rust
+compiler version you use.
+
+All Rust compiler versions support any edition that existed prior to that
+compiler’s release, and they can link crates of any supported editions
+together. Edition changes only affect the way the compiler initially parses
+code. Therefore, if you’re using Rust 2015 and one of your dependencies uses
+Rust 2018, your project will compile and be able to use that dependency. The
+opposite situation, where your project uses Rust 2018 and a dependency uses
+Rust 2015, works as well.
+
+To be clear: most features will be available on all editions. Developers using
+any Rust edition will continue to see improvements as new stable releases are
+made. However, in some cases, mainly when new keywords are added, some new
+features might only be available in later editions. You will need to switch
+editions if you want to take advantage of such features.
+
+For more details, the *Edition
+Guide* at *https://doc.rust-lang.org/stable/edition-guide/* is a complete book
+about editions that enumerates the differences between editions and explains
+how to automatically upgrade your code to a new edition via `cargo fix`.
diff --git a/src/doc/book/nostarch/bio.md b/src/doc/book/nostarch/bio.md
new file mode 100644
index 000000000..cbb2bd4bb
--- /dev/null
+++ b/src/doc/book/nostarch/bio.md
@@ -0,0 +1,5 @@
+# About the Authors
+
+<!--Insert Steve's bio here -->
+
+Carol Nichols is a member of the Rust Crates.io Team and a former member of the Rust Core Team. She’s a co-founder of Integer 32, LLC, the world’s first Rust-focused software consultancy. Nichols has also organized the Rust Belt Rust Conference. \ No newline at end of file
diff --git a/src/doc/book/nostarch/chapter01.md b/src/doc/book/nostarch/chapter01.md
new file mode 100644
index 000000000..87848b66f
--- /dev/null
+++ b/src/doc/book/nostarch/chapter01.md
@@ -0,0 +1,649 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Getting Started
+
+Let’s start your Rust journey! There’s a lot to learn, but every journey starts
+somewhere. In this chapter, we’ll discuss:
+
+* Installing Rust on Linux, macOS, and Windows
+* Writing a program that prints `Hello, world!`
+* Using `cargo`, Rust’s package manager and build system
+
+## Installation
+
+The first step is to install Rust. We’ll download Rust through `rustup`, a
+command line tool for managing Rust versions and associated tools. You’ll need
+an internet connection for the download.
+
+> Note: If you prefer not to use `rustup` for some reason, please see the
+> Other Rust Installation Methods page at
+> *https://forge.rust-lang.org/infra/other-installation-methods.html* for more
+> options.
+
+The following steps install the latest stable version of the Rust compiler.
+Rust’s stability guarantees ensure that all the examples in the book that
+compile will continue to compile with newer Rust versions. The output might
+differ slightly between versions, because Rust often improves error messages
+and warnings. In other words, any newer, stable version of Rust you install
+using these steps should work as expected with the content of this book.
+
+> ### Command Line Notation
+>
+> In this chapter and throughout the book, we’ll show some commands used in the
+> terminal. Lines that you should enter in a terminal all start with `$`. You
+> don’t need to type in the `$` character; it’s the command line prompt shown
+> to indicate the start of each command. Lines that don’t start with `$`
+> typically show the output of the previous command. Additionally,
+> PowerShell-specific examples will use `>` rather than `$`.
+
+### Installing `rustup` on Linux or macOS
+
+If you’re using Linux or macOS, open a terminal and enter the following command:
+
+```
+$ curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh
+```
+
+The command downloads a script and starts the installation of the `rustup`
+tool, which installs the latest stable version of Rust. You might be prompted
+for your password. If the install is successful, the following line will appear:
+
+```
+Rust is installed now. Great!
+```
+
+You will also need a *linker*, which is a program that Rust uses to join its
+compiled outputs into one file. It is likely you already have one. If you get
+linker errors, you should install a C compiler, which will typically include a
+linker. A C compiler is also useful because some common Rust packages depend on
+C code and will need a C compiler.
+
+On macOS, you can get a C compiler by running:
+
+```
+$ xcode-select --install
+```
+
+Linux users should generally install GCC or Clang, according to their
+distribution’s documentation. For example, if you use Ubuntu, you can install
+the `build-essential` package.
+
+### Installing `rustup` on Windows
+
+On Windows, go to *https://www.rust-lang.org/tools/install* and follow the
+instructions for installing Rust. At some point in the installation, you’ll
+receive a message explaining that you’ll also need the MSVC build tools for
+Visual Studio 2013 or later.
+
+To acquire the build tools, you’ll need to install Visual Studio 2022 from
+*https://visualstudio.microsoft.com/downloads/*. When asked which workloads to
+install, include:
+
+- “Desktop Development with C++”
+- The Windows 10 or 11 SDK
+- The English language pack component, along with any other language pack of
+ your choosing
+
+<!-- Liz: We do want to recommend the English language pack along with whatever
+other languages the reader speaks-- otherwise, sometimes error messages are
+printed strangely
+https://github.com/rust-lang/rust/issues/35785#issuecomment-735051657 /Carol -->
+
+The rest of this book uses commands that work in both *cmd.exe* and PowerShell.
+If there are specific differences, we’ll explain which to use.
+
+### Troubleshooting
+
+To check whether you have Rust installed correctly, open a shell and enter this
+line:
+
+```
+$ rustc --version
+```
+
+You should see the version number, commit hash, and commit date for the latest
+stable version that has been released in the following format:
+
+```
+rustc x.y.z (abcabcabc yyyy-mm-dd)
+```
+
+If you see this information, you have installed Rust successfully! If you don’t
+see this information, check that Rust is in your `%PATH%` system variable as
+follows.
+
+In Windows CMD, use:
+
+```
+> echo %PATH%
+```
+
+In PowerShell, use:
+
+```
+> echo $env:Path
+```
+
+In Linux and macOS, use:
+
+```
+echo $PATH
+```
+
+If that’s all correct and Rust still isn’t working, there are a number of
+places you can get help. The easiest is the #beginners channel on the official
+Rust Discord at *https://discord.gg/rust-lang*. There, you can chat with other
+Rustaceans (a silly nickname we call ourselves) who can help you out. Other
+great resources include the Users forum at *https://users.rust-lang.org/* and
+Stack Overflow at *https://stackoverflow.com/questions/tagged/rust*.
+
+<!-- `echo %PATH%` will work for cmd. PowerShell would use `echo $env:Path`.
+Bash would use `echo $PATH` /JT -->
+<!-- I've added these instructions above /Carol -->
+
+### Updating and Uninstalling
+
+Once Rust is installed via `rustup`, when a new version of Rust is released,
+updating to the latest version is easy. From your shell, run the following
+update script:
+
+```
+$ rustup update
+```
+
+To uninstall Rust and `rustup`, run the following uninstall script from your
+shell:
+
+```
+$ rustup self uninstall
+```
+
+### Local Documentation
+
+The installation of Rust also includes a local copy of the documentation, so
+you can read it offline. Run `rustup doc` to open the local documentation in
+your browser.
+
+Any time a type or function is provided by the standard library and you’re not
+sure what it does or how to use it, use the application programming interface
+(API) documentation to find out!
+
+## Hello, World!
+
+Now that you’ve installed Rust, let’s write your first Rust program. It’s
+traditional when learning a new language to write a little program that prints
+the text `Hello, world!` to the screen, so we’ll do the same here!
+
+> Note: This book assumes basic familiarity with the command line. Rust makes
+> no specific demands about your editing or tooling or where your code lives, so
+> if you prefer to use an integrated development environment (IDE) instead of
+> the command line, feel free to use your favorite IDE. Many IDEs now have some
+> degree of Rust support; check the IDE’s documentation for details. The Rust
+> team has been focusing on enabling great IDE support via `rust-analyzer`. See
+> Appendix D for more details!
+
+### Creating a Project Directory
+
+You’ll start by making a directory to store your Rust code. It doesn’t matter
+to Rust where your code lives, but for the exercises and projects in this book,
+we suggest making a *projects* directory in your home directory and keeping all
+your projects there.
+
+Open a terminal and enter the following commands to make a *projects* directory
+and a directory for the “Hello, world!” project within the *projects* directory.
+
+For Linux, macOS, and PowerShell on Windows, enter this:
+
+```
+$ mkdir ~/projects
+$ cd ~/projects
+$ mkdir hello_world
+$ cd hello_world
+```
+
+For Windows CMD, enter this:
+
+```
+> mkdir "%USERPROFILE%\projects"
+> cd /d "%USERPROFILE%\projects"
+> mkdir hello_world
+> cd hello_world
+```
+
+### Writing and Running a Rust Program
+
+Next, make a new source file and call it *main.rs*. Rust files always end with
+the *.rs* extension. If you’re using more than one word in your filename, the
+convention is to use an underscore to separate them. For example, use
+*hello_world.rs* rather than *helloworld.rs*.
+
+Now open the *main.rs* file you just created and enter the code in Listing 1-1.
+
+Filename: main.rs
+
+```
+fn main() {
+ println!("Hello, world!");
+}
+```
+
+Listing 1-1: A program that prints `Hello, world!`
+
+Save the file and go back to your terminal window in the
+*~/projects/hello_world* directory. On Linux or macOS, enter the following
+commands to compile and run the file:
+
+```
+$ rustc main.rs
+$ ./main
+Hello, world!
+```
+
+On Windows, enter the command `.\main.exe` instead of `./main`:
+
+```
+> rustc main.rs
+> .\main.exe
+Hello, world!
+```
+
+Regardless of your operating system, the string `Hello, world!` should print to
+the terminal. If you don’t see this output, refer back to the “Troubleshooting”
+part of the Installation section for ways to get help.
+
+If `Hello, world!` did print, congratulations! You’ve officially written a Rust
+program. That makes you a Rust programmer—welcome!
+
+### Anatomy of a Rust Program
+
+Let’s review this “Hello, world!” program in detail. Here’s the first piece of
+the puzzle:
+
+```
+fn main() {
+
+}
+```
+
+These lines define a function named `main`. The `main` function is special: it
+is always the first code that runs in every executable Rust program. Here, the
+first line declares a function named `main` that has no parameters and returns
+nothing. If there were parameters, they would go inside the parentheses `()`.
+
+The function body is wrapped in `{}`. Rust requires curly brackets around all
+function bodies. It’s good style to place the opening curly bracket on the same
+line as the function declaration, adding one space in between.
+
+> Note: If you want to stick to a standard style across Rust projects, you can
+> use an automatic formatter tool called `rustfmt` to format your code in a
+> particular style (more on `rustfmt` in Appendix D). The Rust team has
+> included this tool with the standard Rust distribution, like `rustc`, so it
+> should already be installed on your computer!
+
+The body of the `main` function holds the following code:
+
+```
+ println!("Hello, world!");
+```
+
+This line does all the work in this little program: it prints text to the
+screen. There are four important details to notice here.
+
+First, Rust style is to indent with four spaces, not a tab.
+
+Second, `println!` calls a Rust macro. If it had called a function instead, it
+would be entered as `println` (without the `!`). We’ll discuss Rust macros in
+more detail in Chapter 19. For now, you just need to know that using a `!`
+means that you’re calling a macro instead of a normal function, and that macros
+don’t always follow the same rules as functions.
+
+Third, you see the `"Hello, world!"` string. We pass this string as an argument
+to `println!`, and the string is printed to the screen.
+
+Fourth, we end the line with a semicolon (`;`), which indicates that this
+expression is over and the next one is ready to begin. Most lines of Rust code
+end with a semicolon.
+
+### Compiling and Running Are Separate Steps
+
+You’ve just run a newly created program, so let’s examine each step in the
+process.
+
+Before running a Rust program, you must compile it using the Rust compiler by
+entering the `rustc` command and passing it the name of your source file, like
+this:
+
+```
+$ rustc main.rs
+```
+
+If you have a C or C++ background, you’ll notice that this is similar to `gcc`
+or `clang`. After compiling successfully, Rust outputs a binary executable.
+
+On Linux, macOS, and PowerShell on Windows, you can see the executable by
+entering the `ls` command in your shell. On Linux and macOS, you’ll see two
+files. With PowerShell on Windows, you’ll see the same three files that you
+would see using CMD.
+
+```
+$ ls
+main main.rs
+```
+
+With CMD on Windows, you would enter the following:
+
+```
+> dir /B %= the /B option says to only show the file names =%
+main.exe
+main.pdb
+main.rs
+```
+
+This shows the source code file with the *.rs* extension, the executable file
+(*main.exe* on Windows, but *main* on all other platforms), and, when using
+Windows, a file containing debugging information with the *.pdb* extension.
+From here, you run the *main* or *main.exe* file, like this:
+
+```
+$ ./main # or .\main.exe on Windows
+```
+
+If your *main.rs* is your “Hello, world!” program, this line prints `Hello,
+world!` to your terminal.
+
+If you’re more familiar with a dynamic language, such as Ruby, Python, or
+JavaScript, you might not be used to compiling and running a program as
+separate steps. Rust is an *ahead-of-time compiled* language, meaning you can
+compile a program and give the executable to someone else, and they can run it
+even without having Rust installed. If you give someone a *.rb*, *.py*, or
+*.js* file, they need to have a Ruby, Python, or JavaScript implementation
+installed (respectively). But in those languages, you only need one command to
+compile and run your program. Everything is a trade-off in language design.
+
+Just compiling with `rustc` is fine for simple programs, but as your project
+grows, you’ll want to manage all the options and make it easy to share your
+code. Next, we’ll introduce you to the Cargo tool, which will help you write
+real-world Rust programs.
+
+## Hello, Cargo!
+
+Cargo is Rust’s build system and package manager. Most Rustaceans use this tool
+to manage their Rust projects because Cargo handles a lot of tasks for you,
+such as building your code, downloading the libraries your code depends on, and
+building those libraries. (We call the libraries that your code needs
+*dependencies*.)
+
+The simplest Rust programs, like the one we’ve written so far, don’t have any
+dependencies. If we had built the “Hello, world!” project with Cargo, it would
+only use the part of Cargo that handles building your code. As you write more
+complex Rust programs, you’ll add dependencies, and if you start a project
+using Cargo, adding dependencies will be much easier to do.
+
+Because the vast majority of Rust projects use Cargo, the rest of this book
+assumes that you’re using Cargo too. Cargo comes installed with Rust if you
+used the official installers discussed in the “Installation” section. If you
+installed Rust through some other means, check whether Cargo is installed by
+entering the following into your terminal:
+
+```
+$ cargo --version
+```
+
+If you see a version number, you have it! If you see an error, such as `command
+not found`, look at the documentation for your method of installation to
+determine how to install Cargo separately.
+
+### Creating a Project with Cargo
+
+Let’s create a new project using Cargo and look at how it differs from our
+original “Hello, world!” project. Navigate back to your *projects* directory (or
+wherever you decided to store your code). Then, on any operating system, run
+the following:
+
+```
+$ cargo new hello_cargo
+$ cd hello_cargo
+```
+
+The first command creates a new directory and project called *hello_cargo*.
+We’ve named our project *hello_cargo*, and Cargo creates its files in a
+directory of the same name.
+
+Go into the *hello_cargo* directory and list the files. You’ll see that Cargo
+has generated two files and one directory for us: a *Cargo.toml* file and a
+*src* directory with a *main.rs* file inside.
+
+It has also initialized a new Git repository along with a *.gitignore* file.
+Git files won’t be generated if you run `cargo new` within an existing Git
+repository; you can override this behavior by using `cargo new --vcs=git`.
+
+> Note: Git is a common version control system. You can change `cargo new` to
+> use a different version control system or no version control system by using
+> the `--vcs` flag. Run `cargo new --help` to see the available options.
+
+Open *Cargo.toml* in your text editor of choice. It should look similar to the
+code in Listing 1-2.
+
+Filename: Cargo.toml
+
+```
+[package]
+name = "hello_cargo"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+```
+
+Listing 1-2: Contents of *Cargo.toml* generated by `cargo new`
+
+This file is in the *TOML* (*Tom’s Obvious, Minimal Language*) format, which is
+Cargo’s configuration format.
+
+The first line, `[package]`, is a section heading that indicates that the
+following statements are configuring a package. As we add more information to
+this file, we’ll add other sections.
+
+The next three lines set the configuration information Cargo needs to compile
+your program: the name, the version, and the edition of Rust to use. We’ll talk
+about the `edition` key in Appendix E.
+
+The last line, `[dependencies]`, is the start of a section for you to list any
+of your project’s dependencies. In Rust, packages of code are referred to as
+*crates*. We won’t need any other crates for this project, but we will in the
+first project in Chapter 2, so we’ll use this dependencies section then.
+
+Now open *src/main.rs* and take a look:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ println!("Hello, world!");
+}
+```
+
+Cargo has generated a “Hello, world!” program for you, just like the one we
+wrote in Listing 1-1! So far, the differences between our project and the
+project Cargo generated are that Cargo placed the code in the *src* directory,
+and we have a *Cargo.toml* configuration file in the top directory.
+
+Cargo expects your source files to live inside the *src* directory. The
+top-level project directory is just for README files, license information,
+configuration files, and anything else not related to your code. Using Cargo
+helps you organize your projects. There’s a place for everything, and
+everything is in its place.
+
+If you started a project that doesn’t use Cargo, as we did with the “Hello,
+world!” project, you can convert it to a project that does use Cargo. Move the
+project code into the *src* directory and create an appropriate *Cargo.toml*
+file.
+
+### Building and Running a Cargo Project
+
+Now let’s look at what’s different when we build and run the “Hello, world!”
+program with Cargo! From your *hello_cargo* directory, build your project by
+entering the following command:
+
+```
+$ cargo build
+ Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
+```
+
+This command creates an executable file in *target/debug/hello_cargo* (or
+*target\debug\hello_cargo.exe* on Windows) rather than in your current
+<!-- why does it put it in a debug folder? Interesting to know, because it seems
+laborious to have to enter the whole path to run the executable /LC -->
+<!-- Because `build` uses debug settings by default, and the compiler tries to
+make it clear that this isn't a release build by storing it in the `debug`
+path. Most people use `cargo run` instead, which is what we show in a few
+paragraphs. We talk about building for release mode in the next section; do you
+think it needs to be mentioned here too? I think it would be somewhat
+distracting and repetitive to get into that right here... /Carol -->
+<!-- JT, what do you think? I don't want to get into the weeds... but will the
+reader be wondering? /LC -->
+<!-- I think we could quickly mention that because the default build is a debug
+build, cargo will put the binary in the debug directory. If we created a release
+build, it would put it in the release directory. Looks like we do mention this
+later /JT -->
+<!-- I've added a sentence here along the lines of what JT suggested /Carol -->
+directory. Because the default build is a debug build, Cargo puts the binary in
+a directory named *debug*. You can run the executable with this command:
+
+```
+$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
+Hello, world!
+```
+
+If all goes well, `Hello, world!` should print to the terminal. Running `cargo
+build` for the first time also causes Cargo to create a new file at the top
+level: *Cargo.lock*. This file keeps track of the exact versions of
+dependencies in your project. This project doesn’t have dependencies, so the
+file is a bit sparse. You won’t ever need to change this file manually; Cargo
+manages its contents for you.
+
+We just built a project with `cargo build` and ran it with
+`./target/debug/hello_cargo`, but we can also use `cargo run` to compile the
+code and then run the resulting executable all in one command:
+
+```
+$ cargo run
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
+ Running `target/debug/hello_cargo`
+Hello, world!
+```
+
+Using `cargo run` is more convenient than having to remember to run `cargo
+build` and then use the whole path to the binary, so most developers use `cargo
+run`.
+
+Notice that this time we didn’t see output indicating that Cargo was compiling
+`hello_cargo`. Cargo figured out that the files hadn’t changed, so it didn’t
+rebuild but just ran the binary. If you had modified your source code, Cargo
+would have rebuilt the project before running it, and you would have seen this
+output:
+
+```
+$ cargo run
+ Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
+ Running `target/debug/hello_cargo`
+Hello, world!
+```
+
+Cargo also provides a command called `cargo check`. This command quickly checks
+your code to make sure it compiles but doesn’t produce an executable:
+
+```
+$ cargo check
+ Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
+```
+
+Why would you not want an executable? Often, `cargo check` is much faster than
+`cargo build`, because it skips the step of producing an executable. If you’re
+continually checking your work while writing the code, using `cargo check` will
+speed up the process of letting you know if your project is still compiling! As
+such, many Rustaceans run `cargo check` periodically as they write their
+program to make sure it compiles. Then they run `cargo build` when they’re
+ready to use the executable.
+
+Let’s recap what we’ve learned so far about Cargo:
+
+* We can create a project using `cargo new`.
+* We can build a project using `cargo build`.
+* We can build and run a project in one step using `cargo run`.
+* We can build a project without producing a binary to check for errors using
+ `cargo check`.
+* Instead of saving the result of the build in the same directory as our code,
+ Cargo stores it in the *target/debug* directory.
+
+An additional advantage of using Cargo is that the commands are the same no
+matter which operating system you’re working on. So, at this point, we’ll no
+longer provide specific instructions for Linux and macOS versus Windows.
+
+### Building for Release
+
+When your project is finally ready for release, you can use `cargo build
+--release` to compile it with optimizations. This command will create an
+executable in *target/release* instead of *target/debug*. The optimizations
+make your Rust code run faster, but turning them on lengthens the time it takes
+for your program to compile. This is why there are two different profiles: one
+for development, when you want to rebuild quickly and often, and another for
+building the final program you’ll give to a user that won’t be rebuilt
+repeatedly and that will run as fast as possible. If you’re benchmarking your
+code’s running time, be sure to run `cargo build --release` and benchmark with
+the executable in *target/release*.
+
+### Cargo as Convention
+
+With simple projects, Cargo doesn’t provide a lot of value over just using
+`rustc`, but it will prove its worth as your programs become more intricate.
+Once programs grow to multiple files or need a dependency, it’s much easier to
+let Cargo coordinate the build.
+
+<!-- I think once you go add a second file or add a single dependency, you
+already want to move to cargo imho. /JT -->
+<!-- Updated above! /Carol -->
+
+Even though the `hello_cargo` project is simple, it now uses much of the real
+tooling you’ll use in the rest of your Rust career. In fact, to work on any
+existing projects, you can use the following commands to check out the code
+using Git, change to that project’s directory, and build:
+
+```
+$ git clone example.org/someproject
+$ cd someproject
+$ cargo build
+```
+
+For more information about Cargo, check out its documentation at *https://doc.rust-lang.org/cargo/*.
+
+## Summary
+
+You’re already off to a great start on your Rust journey! In this chapter,
+you’ve learned how to:
+
+* Install the latest stable version of Rust using `rustup`
+* Update to a newer Rust version
+* Open locally installed documentation
+* Write and run a “Hello, world!” program using `rustc` directly
+* Create and run a new project using the conventions of Cargo
+
+This is a great time to build a more substantial program to get used to reading
+and writing Rust code. So, in Chapter 2, we’ll build a guessing game program.
+If you would rather start by learning how common programming concepts work in
+Rust, see Chapter 3 and then return to Chapter 2.
+
+<!-- Question for Carol: Do we want to mention IDE support? Rust Analyzer is
+pretty good these days. /JT -->
+<!-- I don't want to make the reader feel like they *have* to stop at this
+point and set up their IDE (or use an unfamiliar IDE); I did add a sentence to
+the note about IDEs pointing to Appendix D for more info on Rust Analyzer. -->
diff --git a/src/doc/book/nostarch/chapter02.md b/src/doc/book/nostarch/chapter02.md
new file mode 100644
index 000000000..b7986c0de
--- /dev/null
+++ b/src/doc/book/nostarch/chapter02.md
@@ -0,0 +1,1111 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Programming a Guessing Game
+
+Let’s jump into Rust by working through a hands-on project together! This
+chapter introduces you to a few common Rust concepts by showing you how to use
+them in a real program. You’ll learn about `let`, `match`, methods, associated
+functions, using external crates, and more! In the following chapters, we’ll
+explore these ideas in more detail. In this chapter, you’ll practice the
+fundamentals.
+
+We’ll implement a classic beginner programming problem: a guessing game. Here’s
+how it works: the program will generate a random integer between 1 and 100. It
+will then prompt the player to enter a guess. After a guess is entered, the
+program will indicate whether the guess is too low or too high. If the guess is
+correct, the game will print a congratulatory message and exit.
+
+## Setting Up a New Project
+
+To set up a new project, go to the *projects* directory that you created in
+Chapter 1 and make a new project using Cargo, like so:
+
+```
+$ cargo new guessing_game
+$ cd guessing_game
+```
+
+The first command, `cargo new`, takes the name of the project (`guessing_game`)
+as the first argument. The second command changes to the new project’s
+directory.
+
+Look at the generated *Cargo.toml* file:
+
+Filename: Cargo.toml
+
+```
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+```
+
+<!--- We should move to the 2021 edition. /JT --->
+<!-- Totally right, done! /Carol -->
+
+As you saw in Chapter 1, `cargo new` generates a “Hello, world!” program for
+you. Check out the *src/main.rs* file:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ println!("Hello, world!");
+}
+```
+
+Now let’s compile this “Hello, world!” program and run it in the same step
+using the `cargo run` command:
+
+```
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.50s
+ Running `target/debug/guessing_game`
+Hello, world!
+```
+
+The `run` command comes in handy when you need to rapidly iterate on a project,
+as we’ll do in this game, quickly testing each iteration before moving on to
+the next one.
+
+Reopen the *src/main.rs* file. You’ll be writing all the code in this file.
+
+## Processing a Guess
+
+The first part of the guessing game program will ask for user input, process
+that input, and check that the input is in the expected form. To start, we’ll
+allow the player to input a guess. Enter the code in Listing 2-1 into
+*src/main.rs*.
+
+Filename: src/main.rs
+
+```
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ println!("You guessed: {guess}");
+}
+```
+
+<!--- Style question, should we switch to the more recent style of:
+```
+ println!("You guessed: {guess}");
+```
+/JT --->
+<!-- Good call, I'll switch these throughout as I edit after TR. /Carol -->
+
+Listing 2-1: Code that gets a guess from the user and prints it
+
+This code contains a lot of information, so let’s go over it line by line. To
+obtain user input and then print the result as output, we need to bring the
+`io` input/output library into scope. The `io` library comes from the
+standard library, known as `std`:
+
+```
+use std::io;
+```
+
+By default, Rust has a set of items defined in the standard library that it brings
+into the scope of every program. This set is called the *prelude*, and you can
+see everything in it at *https://doc.rust-lang.org/std/prelude/index.html*.
+
+If a type you want to use isn’t in the prelude, you have to bring that type
+into scope explicitly with a `use` statement. Using the `std::io` library
+provides you with a number of useful features, including the ability to accept
+user input.
+
+As you saw in Chapter 1, the `main` function is the entry point into the
+program:
+
+```
+fn main() {
+```
+
+The `fn` syntax declares a new function, the parentheses, `()`, indicate there
+are no parameters, and the curly bracket, `{`, starts the body of the function.
+
+As you also learned in Chapter 1, `println!` is a macro that prints a string to
+the screen:
+
+<!--- Not sure if we want to go into it just yet, but `println!` formats a string
+and then prints the resulting string to stdout (which is often, but not always
+the screen). /JT --->
+<!-- Yeah, I want to gloss over that for now. Leaving this as-is. /Carol -->
+
+```
+ println!("Guess the number!");
+
+ println!("Please input your guess.");
+```
+
+This code is printing a prompt stating what the game is and requesting input
+from the user.
+
+### Storing Values with Variables
+
+Next, we’ll create a *variable* to store the user input, like this:
+
+```
+ let mut guess = String::new();
+```
+
+Now the program is getting interesting! There’s a lot going on in this little
+line. We use the `let` statement to create the variable. Here’s another example:
+
+```
+let apples = 5;
+```
+
+This line creates a new variable named `apples` and binds it to the value 5. In
+Rust, variables are immutable by default, meaning once we give the variable a
+value, the value won't change. We’ll be discussing this concept in detail in
+the “Variables and Mutability” section in Chapter 3. To make a variable
+mutable, we add `mut` before the variable name:
+
+<!--- Do we want to give a quick word about what "mutable" means? Folks who grab
+this book but aren't familiar with some of the technical programming language terms
+might need something like "variable are immutable by default, meaning once we give
+the variable its value, it won't change". /JT --->
+<!-- Sounds good, made that change /Carol -->
+
+```
+let apples = 5; // immutable
+let mut bananas = 5; // mutable
+```
+
+> Note: The `//` syntax starts a comment that continues until the end of the
+> line. Rust ignores everything in comments. We’ll discuss comments in more
+> detail in Chapter 3.
+
+Returning to the guessing game program, you now know that `let mut guess` will
+introduce a mutable variable named `guess`. The equal sign (`=`) tells Rust we
+want to bind something to the variable now. On the right of the equals sign is
+the value that `guess` is bound to, which is the result of calling
+`String::new`, a function that returns a new instance of a `String`. `String`
+is a string type provided by the standard library that is a growable, UTF-8
+encoded bit of text.
+
+The `::` syntax in the `::new` line indicates that `new` is an associated
+function of the `String` type. An *associated function* is a function that’s
+implemented on a type, in this case `String`. This `new` function creates a
+new, empty string. You’ll find a `new` function on many types, because it’s a
+common name for a function that makes a new value of some kind.
+
+<!--- For some readers, we might want to say "If you've used languages with
+static methods, associated function work very similarly" or something along
+those lines. /JT --->
+<!-- I don't think that's helpful enough for all readers to include here, given
+that we're trying to make the book mostly background-agnostic. /Carol -->
+
+In full, the `let mut guess = String::new();` line has created a mutable
+variable that is currently bound to a new, empty instance of a `String`. Whew!
+
+### Receiving User Input
+
+Recall that we included the input/output functionality from the standard
+library with `use std::io;` on the first line of the program. Now we’ll call
+the `stdin` function from the `io` module, which will allow us to handle user
+input:
+
+```
+ io::stdin()
+ .read_line(&mut guess)
+```
+
+If we hadn’t imported the `io` library with `use std::io` at the beginning of
+the program, we could still use the function by writing this function call as
+`std::io::stdin`. The `stdin` function returns an instance of `std::io::Stdin`,
+which is a type that represents a handle to the standard input for your
+terminal.
+
+Next, the line `.read_line(&mut guess)` calls the `read_line` method on the
+standard input handle to get input from the user. We’re also passing `&mut
+guess` as the argument to `read_line` to tell it what string to store the user
+input in. The full job of `read_line` is to take whatever the user types into
+standard input and append that into a string (without overwriting its
+contents), so we therefore pass that string as an argument. The string argument
+needs to be mutable so the method can change the string’s content.
+
+The `&` indicates that this argument is a *reference*, which gives you a way to
+let multiple parts of your code access one piece of data without needing to
+copy that data into memory multiple times. References are a complex feature,
+and one of Rust’s major advantages is how safe and easy it is to use
+references. You don’t need to know a lot of those details to finish this
+program. For now, all you need to know is that like variables, references are
+immutable by default. Hence, you need to write `&mut guess` rather than
+`&guess` to make it mutable. (Chapter 4 will explain references more
+thoroughly.)
+
+### Handling Potential Failure with the `Result` Type
+
+We’re still working on this line of code. We’re now discussing a third line of
+text, but note that it’s still part of a single logical line of code. The next
+part is this method:
+
+<!--- in the program this is the second line of code -- do you mean the third
+section of this line? -->
+<!-- This is still discussing the code in Listing 2-1, and is going to talk
+about the third line, if you're counting the lines of the page, of this logical
+line of code, where logical lines of code are ended with semicolons. Do you
+have suggestions on how to make that clearer? /Carol -->
+<!--- Ashley, does this all track now? /LC --->
+
+```
+ .expect("Failed to read line");
+```
+
+We could have written this code as:
+
+```
+io::stdin().read_line(&mut guess).expect("Failed to read line");
+```
+
+However, one long line is difficult to read, so it’s best to divide it. It’s
+often wise to introduce a newline and other whitespace to help break up long
+lines when you call a method with the `.method_name()` syntax. Now let’s
+discuss what this line does.
+
+As mentioned earlier, `read_line` puts whatever the user enters into the string
+we pass to it, but it also returns a `Result` value. `Result` is an
+*enumeration*, often called an *enum*, which is a type that can be in one of
+multiple possible states. We call each possible state a *variant*.
+
+<!--- Typo above: possibilities /JT --->
+<!--- Personally, I think the above paragraph might be introducing a little too
+much all at once. You might be able to shorten it to: "`Result` is an *enumeration*,
+often called an *enum*, which is a type that can be in one of multiple possible
+states. We call each possible state a *variant*. /JT --->
+<!-- I like it, made that change /Carol -->
+
+Chapter 6 will cover enums in more detail. The purpose of these `Result` types
+is to encode error-handling information.
+
+`Result`'s variants are `Ok` and `Err`. The `Ok` variant indicates the
+operation was successful, and inside `Ok` is the successfully generated value.
+The `Err` variant means the operation failed, and `Err` contains information
+about how or why the operation failed.
+
+Values of the `Result` type, like values of any type, have methods defined on
+them. An instance of `Result` has an `expect` method that you can call. If this
+instance of `Result` is an `Err` value, `expect` will cause the program to
+crash and display the message that you passed as an argument to `expect`. If
+the `read_line` method returns an `Err`, it would likely be the result of an
+error coming from the underlying operating system. If this instance of `Result`
+is an `Ok` value, `expect` will take the return value that `Ok` is holding and
+return just that value to you so you can use it. In this case, that value is
+the number of bytes in the user’s input.
+
+If you don’t call `expect`, the program will compile, but you’ll get a warning:
+
+```
+$ cargo build
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+warning: unused `Result` that must be used
+ --> src/main.rs:10:5
+ |
+10 | io::stdin().read_line(&mut guess);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_must_use)]` on by default
+ = note: this `Result` may be an `Err` variant, which should be handled
+
+warning: `guessing_game` (bin "guessing_game") generated 1 warning
+ Finished dev [unoptimized + debuginfo] target(s) in 0.59s
+```
+
+Rust warns that you haven’t used the `Result` value returned from `read_line`,
+indicating that the program hasn’t handled a possible error.
+
+The right way to suppress the warning is to actually write error handling, but
+in our case we just want to crash this program when a problem occurs, so we can
+use `expect`. You’ll learn about recovering from errors in Chapter 9.
+
+### Printing Values with `println!` Placeholders
+
+Aside from the closing curly bracket, there’s only one more line to discuss in
+the code so far:
+
+```
+ println!("You guessed: {guess}");
+```
+
+<!--- Ditto with using the `{guess}` style in this line. /JT --->
+
+This line prints the string that now contains the user’s input. The `{}` set of
+curly brackets is a placeholder: think of `{}` as little crab pincers that hold
+a value in place. You can print more than one value using curly brackets: the
+first set of curly brackets holds the first value listed after the format
+string, the second set holds the second value, and so on. Printing multiple
+values in one call to `println!` would look like this:
+
+```
+let x = 5;
+let y = 10;
+
+println!("x = {x} and y = {y}");
+```
+<!--- And `println!("x = {x} and y = {y}");` in this example. /JT --->
+<!-- Done! /Carol -->
+
+This code would print `x = 5 and y = 10`.
+
+### Testing the First Part
+
+Let’s test the first part of the guessing game. Run it using `cargo run`:
+
+```
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 6.44s
+ Running `target/debug/guessing_game`
+Guess the number!
+Please input your guess.
+6
+You guessed: 6
+```
+
+At this point, the first part of the game is done: we’re getting input from the
+keyboard and then printing it.
+
+## Generating a Secret Number
+
+Next, we need to generate a secret number that the user will try to guess. The
+secret number should be different every time so the game is fun to play more
+than once. We’ll use a random number between 1 and 100 so the game isn’t too
+difficult. Rust doesn’t yet include random number functionality in its standard
+library. However, the Rust team does provide a `rand` crate at
+*https://crates.io/crates/rand* with said functionality.
+
+### Using a Crate to Get More Functionality
+
+Remember that a crate is a collection of Rust source code files. The project
+we’ve been building is a *binary crate*, which is an executable. The `rand`
+crate is a *library crate*, which contains code intended to be used in other
+programs and can't be executed on its own.
+
+<!--- Nit: ", and" followed by incomplete sentence. /JT --->
+<!-- Fixed /Carol -->
+
+Cargo’s coordination of external crates is where Cargo really shines. Before we
+can write code that uses `rand`, we need to modify the *Cargo.toml* file to
+include the `rand` crate as a dependency. Open that file now and add the
+following line to the bottom beneath the `[dependencies]` section header that
+Cargo created for you. Be sure to specify `rand` exactly as we have here, with
+this version number, or the code examples in this tutorial may not work.
+
+Filename: Cargo.toml
+
+```
+rand = "0.8.3"
+```
+<!--- 0.8.5 is the current latest. /JT --->
+<!-- I will update this version to whatever is latest once we're in Word; there
+could be another version between now and then. If it's another 0.8.x version,
+it doesn't really matter in any case. /Carol -->
+
+In the *Cargo.toml* file, everything that follows a header is part of that
+section that continues until another section starts. In `[dependencies]` you
+tell Cargo which external crates your project depends on and which versions of
+those crates you require. In this case, we specify the `rand` crate with the
+semantic version specifier `0.8.3`. Cargo understands Semantic Versioning
+(sometimes called *SemVer*), which is a standard for writing version numbers.
+The number `0.8.3` is actually shorthand for `^0.8.3`, which means any version
+that is at least `0.8.3` but below `0.9.0`.
+
+Cargo considers these versions to have public APIs compatible with version
+`0.8.3`, and this specification ensures you’ll get the latest patch release
+that will still compile with the code in this chapter. Any version `0.9.0` or
+greater is not guaranteed to have the same API as what the following examples
+use.
+
+Now, without changing any of the code, let’s build the project, as shown in
+Listing 2-2.
+
+```
+$ cargo build
+ Updating crates.io index
+ Downloaded rand v0.8.3
+ Downloaded libc v0.2.86
+ Downloaded getrandom v0.2.2
+ Downloaded cfg-if v1.0.0
+ Downloaded ppv-lite86 v0.2.10
+ Downloaded rand_chacha v0.3.0
+ Downloaded rand_core v0.6.2
+ Compiling rand_core v0.6.2
+ Compiling libc v0.2.86
+ Compiling getrandom v0.2.2
+ Compiling cfg-if v1.0.0
+ Compiling ppv-lite86 v0.2.10
+ Compiling rand_chacha v0.3.0
+ Compiling rand v0.8.3
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.53s
+```
+<!--- If we feel like refreshing this, here's what I saw today:
+
+ Compiling cfg-if v1.0.0
+ Compiling ppv-lite86 v0.2.16
+ Compiling libc v0.2.120
+ Compiling getrandom v0.2.5
+ Compiling rand_core v0.6.3
+ Compiling rand_chacha v0.3.1
+ Compiling rand v0.8.5
+ Compiling guessing_game v0.1.0 (/Users/jt/Source/book/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.50s
+
+/JT --->
+<!-- I will refresh this when we're in Word /Carol -->
+
+Listing 2-2: The output from running `cargo build` after adding the rand crate
+as a dependency
+
+You may see different version numbers (but they will all be compatible with the
+code, thanks to SemVer!), different lines (depending on the operating system),
+and the lines may be in a different order.
+
+When we include an external dependency, Cargo fetches the latest versions of
+everything that dependency needs from the *registry*, which is a copy of data
+from Crates.io at *https://crates.io/*. Crates.io is where people in the Rust
+ecosystem post their open source Rust projects for others to use.
+
+After updating the registry, Cargo checks the `[dependencies]` section and
+downloads any crates listed that aren’t already downloaded. In this case,
+although we only listed `rand` as a dependency, Cargo also grabbed other crates
+that `rand` depends on to work. After downloading the crates, Rust compiles
+them and then compiles the project with the dependencies available.
+
+If you immediately run `cargo build` again without making any changes, you
+won’t get any output aside from the `Finished` line. Cargo knows it has already
+downloaded and compiled the dependencies, and you haven’t changed anything
+about them in your *Cargo.toml* file. Cargo also knows that you haven’t changed
+anything about your code, so it doesn’t recompile that either. With nothing to
+do, it simply exits.
+
+If you open up the *src/main.rs* file, make a trivial change, and then save it
+and build again, you’ll only see two lines of output:
+
+```
+$ cargo build
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.53 secs
+```
+
+These lines show Cargo only updates the build with your tiny change to the
+*src/main.rs* file. Your dependencies haven’t changed, so Cargo knows it can
+reuse what it has already downloaded and compiled for those.
+
+#### Ensuring Reproducible Builds with the *Cargo.lock* File
+
+Cargo has a mechanism that ensures you can rebuild the same artifact every time
+you or anyone else builds your code: Cargo will use only the versions of the
+dependencies you specified until you indicate otherwise. For example, say that
+next week version 0.8.4 of the `rand` crate comes out, and that version
+contains an important bug fix, but it also contains a regression that will
+break your code. To handle this, Rust creates the *Cargo.lock* file the first
+time you run `cargo build`, so we now have this in the *guessing_game*
+directory.
+
+<!--- If we bump version numbers, we should bump above and below also. /JT --->
+<!-- Yup, will do in Word! /Carol -->
+
+When you build a project for the first time, Cargo figures out all the
+versions of the dependencies that fit the criteria and then writes them to
+the *Cargo.lock* file. When you build your project in the future, Cargo will
+see that the *Cargo.lock* file exists and use the versions specified there
+rather than doing all the work of figuring out versions again. This lets you
+have a reproducible build automatically. In other words, your project will
+remain at `0.8.3` until you explicitly upgrade, thanks to the *Cargo.lock*
+file. Because the *Cargo.lock* file is important for reproducible builds, it's
+often checked into source control with the rest of the code in your project.
+
+<!--- We could mention that because Cargo.lock is important for reproducible
+builds, they're often checked into source control alongside the Cargo.toml and
+the rest of the code of your project. /JT --->
+<!-- Liz, is this sentence ok even though we don't really talk about source
+control or what it is anywhere else in the book? I don't really want to get
+into it, but at this point I think it's a fair assumption that developers know
+what "source control" is. If you disagree, this sentence can come back out.
+/Carol -->
+
+#### Updating a Crate to Get a New Version
+
+When you *do* want to update a crate, Cargo provides the command `update`,
+which will ignore the *Cargo.lock* file and figure out all the latest versions
+that fit your specifications in *Cargo.toml*. Cargo will then write those
+versions to the *Cargo.lock* file. Otherwise, by default, Cargo will only look
+for versions greater than `0.8.3` and less than `0.9.0`. If the `rand` crate
+has released the two new versions `0.8.4` and `0.9.0` you would see the
+following if you ran `cargo update`:
+
+```
+$ cargo update
+ Updating crates.io index
+ Updating rand v0.8.3 -> v0.8.4
+```
+
+Cargo ignores the `0.9.0` release. At this point, you would also notice a
+change in your *Cargo.lock* file noting that the version of the `rand` crate
+you are now using is `0.8.4`. To use `rand` version `0.9.0` or any version in
+the `0.9.x` series, you’d have to update the *Cargo.toml* file to look like
+this instead:
+
+<!--- Typo first line: release. /JT --->
+<!-- Fixed /Carol -->
+
+```
+[dependencies]
+rand = "0.9.0"
+```
+
+The next time you run `cargo build`, Cargo will update the registry of crates
+available and reevaluate your `rand` requirements according to the new version
+you have specified.
+
+There’s a lot more to say about Cargo and its ecosystem which we’ll discuss in
+Chapter 14, but for now, that’s all you need to know. Cargo makes it very easy
+to reuse libraries, so Rustaceans are able to write smaller projects that are
+assembled from a number of packages.
+
+### Generating a Random Number
+
+Let’s start using `rand` to generate a number to guess. The next step is to
+update *src/main.rs*, as shown in Listing 2-3.
+
+Filename: src/main.rs
+
+```
+use std::io;
+[1]use rand::Rng;
+
+fn main() {
+ println!("Guess the number!");
+
+ [2] let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ [3] println!("The secret number is: {secret_number}");
+
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ println!("You guessed: {guess}");
+}
+```
+
+<!--- Same style suggestion re: `{secret_number}`. /JT --->
+<!--- Thought: for first-time readability, we could use `1..=100` in the above
+and let people know later this is equivalent to `1..101` later. We say a number
+between 1 and 100, so we could show the syntax equivalent of that description.
+/JT --->
+<!-- I'm into both these suggestions! /Carol -->
+
+Listing 2-3: Adding code to generate a random number
+
+<!--- I can't remember how we handled wingdings in markdown before... I don't
+have those files on this machine. I've just used [x] for now, does that work?
+Then we'll replace them when we convert to Word /LC --->
+<!-- I don't think we added the wingdings at all until we moved to Word. For
+code listings that are the same as the last printing version, I'd definitely
+like to keep the wingdings the way they were. Using the brackets with numbers
+as you have here works fine! /Carol -->
+
+First, we add the line `use rand::Rng` [1]. The `Rng` trait defines methods
+that random number generators implement, and this trait must be in scope for us
+to use those methods. Chapter 10 will cover traits in detail.
+
+Next, we’re adding two lines in the middle. In the first line [2], we call the
+`rand::thread_rng` function that gives us the particular random number
+generator that we’re going to use: one that is local to the current thread of
+execution and seeded by the operating system. Then we call the `gen_range`
+method on the random number generator. This method is defined by the `Rng`
+trait that we brought into scope with the `use rand::Rng` statement. The
+`gen_range` method takes a range expression as an argument and generates a
+random number in the range. The kind of range expression we’re using here takes
+the form `start..=end` and is inclusive on the lower and upper bounds, so we
+need to specify `1..=100` to request a number between 1 and 100.
+
+> Note: You won’t just know which traits to use and which methods and functions
+> to call from a crate, so each crate has documentation with instructions for
+> using it. Another neat feature of Cargo is that running the `cargo
+> doc --open` command will build documentation provided by all of your
+> dependencies locally and open it in your browser. If you’re interested in
+> other functionality in the `rand` crate, for example, run `cargo doc --open`
+> and click `rand` in the sidebar on the left.
+
+The second new line [3] prints the secret number. This is useful while
+we’re developing the program to be able to test it, but we’ll delete it from
+the final version. It’s not much of a game if the program prints the answer as
+soon as it starts!
+
+Try running the program a few times:
+
+```
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.53s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 7
+Please input your guess.
+4
+You guessed: 4
+
+$ cargo run
+ Finished dev [unoptimized + debuginfo] target(s) in 0.02s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 83
+Please input your guess.
+5
+You guessed: 5
+```
+
+You should get different random numbers, and they should all be numbers between
+1 and 100. Great job!
+
+## Comparing the Guess to the Secret Number
+
+Now that we have user input and a random number, we can compare them. That step
+is shown in Listing 2-4. Note that this code won’t compile quite yet, as we
+will explain.
+
+Filename: src/main.rs
+
+```
+use rand::Rng;
+[1]use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ // --snip--
+
+ println!("You guessed: {guess}");
+
+ match[2] guess.cmp(&secret_number)[3] {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+}
+```
+
+Listing 2-4: Handling the possible return values of comparing two numbers
+
+First we add another `use` statement [1], bringing a type called
+`std::cmp::Ordering` into scope from the standard library. The `Ordering` type
+is another enum and has the variants `Less`, `Greater`, and `Equal`. These are
+the three outcomes that are possible when you compare two values.
+
+Then we add five new lines at the bottom that use the `Ordering` type. The
+`cmp` method [3] compares two values and can be called on anything that can be
+compared. It takes a reference to whatever you want to compare with: here it’s
+comparing the `guess` to the `secret_number`. Then it returns a variant of the
+`Ordering` enum we brought into scope with the `use` statement. We use a
+`match` expression [2] to decide what to do next based on which variant of
+`Ordering` was returned from the call to `cmp` with the values in `guess` and
+`secret_number`.
+
+A `match` expression is made up of *arms*. An arm consists of a *pattern* to
+match against, and the code that should be run if the value given to `match`
+fits that arm’s pattern. Rust takes the value given to `match` and looks
+through each arm’s pattern in turn. Patterns and the `match` construct are
+powerful Rust features that let you express a variety of situations your code
+might encounter and make sure that you handle them all. These features will be
+covered in detail in Chapter 6 and Chapter 18, respectively.
+
+Let’s walk through an example with the `match` expression we use here. Say that
+the user has guessed 50 and the randomly generated secret number this time is
+38. When the code compares 50 to 38, the `cmp` method will return
+`Ordering::Greater`, because 50 is greater than 38. The `match` expression gets
+the `Ordering::Greater` value and starts checking each arm’s pattern. It looks
+at the first arm’s pattern, `Ordering::Less`, and sees that the value
+`Ordering::Greater` does not match `Ordering::Less`, so it ignores the code in
+that arm and moves to the next arm. The next arm’s pattern is
+`Ordering::Greater`, which *does* match `Ordering::Greater`! The associated
+code in that arm will execute and print `Too big!` to the screen. The `match`
+expression ends after the first successful match, so it won’t look at the last
+arm in this scenario.
+
+<!--- Since `match` always ends after the first successful match, we might want
+to just say that directly: "The `match` expression ends after the first successful
+match, so it won't look at the last arm in this scenario". /JT --->
+<!-- Sounds good, done! /Carol -->
+
+However, the code in Listing 2-4 won’t compile yet. Let’s try it:
+
+```
+$ cargo build
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+error[E0308]: mismatched types
+ --> src/main.rs:22:21
+ |
+22 | match guess.cmp(&secret_number) {
+ | ^^^^^^^^^^^^^^ expected struct `String`, found integer
+ |
+ = note: expected reference `&String`
+ found reference `&{integer}`
+```
+
+The core of the error states that there are *mismatched types*. Rust has a
+strong, static type system. However, it also has type inference. When we wrote
+`let mut guess = String::new()`, Rust was able to infer that `guess` should be
+a `String` and didn’t make us write the type. The `secret_number`, on the other
+hand, is a number type. A few of Rust’s number types can have a value between 1
+and 100: `i32`, a 32-bit number; `u32`, an unsigned 32-bit number; `i64`, a
+64-bit number; as well as others. Unless otherwise specified, Rust defaults to
+an `i32`, which is the type of `secret_number` unless you add type information
+elsewhere that would cause Rust to infer a different numerical type. The reason
+for the error is that Rust cannot compare a string and a number type.
+
+<!--- Typo: Unless otherwise specified. /JT --->
+<!-- Fixed /Carol -->
+
+Ultimately, we want to convert the `String` the program reads as input into a
+real number type so we can compare it numerically to the secret number. We do so
+by adding this line to the `main` function body:
+
+Filename: src/main.rs
+
+```
+ // --snip--
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = guess.trim().parse().expect("Please type a number!");
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+```
+
+We create a variable named `guess`. But wait, doesn’t the program already have
+a variable named `guess`? It does, but helpfully Rust allows us to *shadow* the
+previous value of `guess` with a new one. Shadowing lets us reuse the `guess`
+variable name rather than forcing us to create two unique variables, such as
+`guess_str` and `guess` for example. We’ll cover this in more detail in Chapter
+3, but for now know that this feature is often used when you want to convert a
+value from one type to another type.
+
+We bind this new variable to the expression `guess.trim().parse()`. The `guess`
+in the expression refers to the original `guess` variable that contained the
+input as a string. The `trim` method on a `String` instance will eliminate any
+whitespace at the beginning and end, which we must do to be able to compare the
+string to the `u32`, which can only contain numerical data. The user must press
+<span class="keystroke">enter</span> to satisfy `read_line` and input their
+guess, which adds a newline character to the string. For example, if the user
+types <span class="keystroke">5</span> and presses <span
+class="keystroke">enter</span>, `guess` looks like this: `5\n`. The `\n`
+represents “newline”. (On Windows, pressing <span
+class="keystroke">enter</span> results in a carriage return and a newline,
+`\r\n`). The `trim` method eliminates `\n` or `\r\n`, resulting in just `5`.
+
+The `parse` method on strings converts a string to another type. Here, we use
+it to convert from a string to a number. We need to tell Rust the exact number
+type we want by using `let guess: u32`. The colon (`:`) after `guess` tells
+Rust we’ll annotate the variable’s type. Rust has a few built-in number types;
+the `u32` seen here is an unsigned, 32-bit integer. It’s a good default choice
+for a small positive number. You’ll learn about other number types in Chapter
+3. Additionally, the `u32` annotation in this example program and the
+comparison with `secret_number` means that Rust will infer that `secret_number`
+should be a `u32` as well. So now the comparison will be between two values of
+the same type!
+
+<!--- More correct to say "The `parse` method converts a string to another type.
+Here, we use it to convert from a string to a number." You can use `parse` to
+convert to non-numeric types also. /JT --->
+<!-- Great catch, fixed! /Carol -->
+
+The `parse` method will only work on characters that can logically be converted
+into numbers and so can easily cause errors. If, for example, the string
+contained `A👍%`, there would be no way to convert that to a number. Because it
+might fail, the `parse` method returns a `Result` type, much as the `read_line`
+method does (discussed earlier in “Handling Potential Failure with the `Result`
+Type”). We’ll treat this `Result` the same way by using the `expect` method
+again. If `parse` returns an `Err` `Result` variant because it couldn’t create
+a number from the string, the `expect` call will crash the game and print the
+message we give it. If `parse` can successfully convert the string to a number,
+it will return the `Ok` variant of `Result`, and `expect` will return the
+number that we want from the `Ok` value.
+
+Let’s run the program now!
+
+```
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.43s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 58
+Please input your guess.
+ 76
+You guessed: 76
+Too big!
+```
+
+Nice! Even though spaces were added before the guess, the program still figured
+out that the user guessed 76. Run the program a few times to verify the
+different behavior with different kinds of input: guess the number correctly,
+guess a number that is too high, and guess a number that is too low.
+
+We have most of the game working now, but the user can make only one guess.
+Let’s change that by adding a loop!
+
+## Allowing Multiple Guesses with Looping
+
+The `loop` keyword creates an infinite loop. We’ll add a loop to give users
+more chances at guessing the number:
+
+Filename: src/main.rs
+
+```
+ // --snip--
+
+ println!("The secret number is: {secret_number}");
+
+ loop {
+ println!("Please input your guess.");
+
+ // --snip--
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => println!("You win!"),
+ }
+ }
+}
+```
+
+As you can see, we’ve moved everything from the guess input prompt onward into
+a loop. Be sure to indent the lines inside the loop another four spaces each
+and run the program again. The program will now ask for another guess forever,
+which actually introduces a new problem. It doesn’t seem like the user can quit!
+
+The user could always interrupt the program by using the keyboard shortcut
+<span class="keystroke">ctrl-c</span>. But there’s another way to escape this
+insatiable monster, as mentioned in the `parse` discussion in “Comparing the
+Guess to the Secret Number”: if the user enters a non-number answer, the
+program will crash. We can take advantage of that to allow the user to quit, as
+shown here:
+
+```
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.50s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 59
+Please input your guess.
+45
+You guessed: 45
+Too small!
+Please input your guess.
+60
+You guessed: 60
+Too big!
+Please input your guess.
+59
+You guessed: 59
+You win!
+Please input your guess.
+quit
+thread 'main' panicked at 'Please type a number!: ParseIntError { kind: InvalidDigit }', src/main.rs:28:47
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+Typing `quit` will quit the game, but as you’ll notice so will entering any
+other non-number input. This is suboptimal to say the least; we want the game
+to also stop when the correct number is guessed.
+
+### Quitting After a Correct Guess
+
+Let’s program the game to quit when the user wins by adding a `break` statement:
+
+Filename: src/main.rs
+
+```
+ // --snip--
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
+```
+
+Adding the `break` line after `You win!` makes the program exit the loop when
+the user guesses the secret number correctly. Exiting the loop also means
+exiting the program, because the loop is the last part of `main`.
+
+### Handling Invalid Input
+
+To further refine the game’s behavior, rather than crashing the program when
+the user inputs a non-number, let’s make the game ignore a non-number so the
+user can continue guessing. We can do that by altering the line where `guess`
+is converted from a `String` to a `u32`, as shown in Listing 2-5.
+
+Filename: src/main.rs
+
+```
+ // --snip--
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ println!("You guessed: {guess}");
+
+ // --snip--
+```
+
+Listing 2-5: Ignoring a non-number guess and asking for another guess instead
+of crashing the program
+
+We switch from an `expect` call to a `match` expression to move from crashing
+on an error to handling the error. Remember that `parse` returns a `Result`
+type and `Result` is an enum that has the variants `Ok` and `Err`. We’re using
+a `match` expression here, as we did with the `Ordering` result of the `cmp`
+method.
+
+If `parse` is able to successfully turn the string into a number, it will
+return an `Ok` value that contains the resulting number. That `Ok` value will
+match the first arm’s pattern, and the `match` expression will just return the
+`num` value that `parse` produced and put inside the `Ok` value. That number
+will end up right where we want it in the new `guess` variable we’re creating.
+
+If `parse` is *not* able to turn the string into a number, it will return an
+`Err` value that contains more information about the error. The `Err` value
+does not match the `Ok(num)` pattern in the first `match` arm, but it does
+match the `Err(_)` pattern in the second arm. The underscore, `_`, is a
+catchall value; in this example, we’re saying we want to match all `Err`
+values, no matter what information they have inside them. So the program will
+execute the second arm’s code, `continue`, which tells the program to go to the
+next iteration of the `loop` and ask for another guess. So, effectively, the
+program ignores all errors that `parse` might encounter!
+
+Now everything in the program should work as expected. Let’s try it:
+
+```
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 4.45s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 61
+Please input your guess.
+10
+You guessed: 10
+Too small!
+Please input your guess.
+99
+You guessed: 99
+Too big!
+Please input your guess.
+foo
+Please input your guess.
+61
+You guessed: 61
+You win!
+```
+
+Awesome! With one tiny final tweak, we will finish the guessing game. Recall
+that the program is still printing the secret number. That worked well for
+testing, but it ruins the game. Let’s delete the `println!` that outputs the
+secret number. Listing 2-6 shows the final code.
+
+Filename: src/main.rs
+
+```
+use rand::Rng;
+use std::cmp::Ordering;
+use std::io;
+
+fn main() {
+ println!("Guess the number!");
+
+ let secret_number = rand::thread_rng().gen_range(1..=100);
+
+ loop {
+ println!("Please input your guess.");
+
+ let mut guess = String::new();
+
+ io::stdin()
+ .read_line(&mut guess)
+ .expect("Failed to read line");
+
+ let guess: u32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ println!("You guessed: {guess}");
+
+ match guess.cmp(&secret_number) {
+ Ordering::Less => println!("Too small!"),
+ Ordering::Greater => println!("Too big!"),
+ Ordering::Equal => {
+ println!("You win!");
+ break;
+ }
+ }
+ }
+}
+```
+
+Listing 2-6: Complete guessing game code
+
+## Summary
+
+At this point, you’ve successfully built the guessing game. Congratulations!
+
+This project was a hands-on way to introduce you to many new Rust concepts:
+`let`, `match`, functions, the use of external crates, and more. In the next
+few chapters, you’ll learn about these concepts in more detail. Chapter 3
+covers concepts that most programming languages have, such as variables, data
+types, and functions, and shows how to use them in Rust. Chapter 4 explores
+ownership, a feature that makes Rust different from other languages. Chapter 5
+discusses structs and method syntax, and Chapter 6 explains how enums work.
diff --git a/src/doc/book/nostarch/chapter03.md b/src/doc/book/nostarch/chapter03.md
new file mode 100644
index 000000000..281f31d33
--- /dev/null
+++ b/src/doc/book/nostarch/chapter03.md
@@ -0,0 +1,1789 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Common Programming Concepts
+
+This chapter covers concepts that appear in almost every programming language
+and how they work in Rust. Many programming languages have much in common at
+their core. None of the concepts presented in this chapter are unique to Rust,
+but we’ll discuss them in the context of Rust and explain the conventions
+around using these concepts.
+
+Specifically, you’ll learn about variables, basic types, functions, comments,
+and control flow. These foundations will be in every Rust program, and learning
+them early will give you a strong core to start from.
+
+> #### Keywords
+>
+> The Rust language has a set of *keywords* that are reserved for use by
+> the language only, much as in other languages. Keep in mind that you cannot
+> use these words as names of variables or functions. Most of the keywords have
+> special meanings, and you’ll be using them to do various tasks in your Rust
+> programs; a few have no current functionality associated with them but have
+> been reserved for functionality that might be added to Rust in the future. You
+> can find a list of the keywords in Appendix A.
+
+## Variables and Mutability
+
+As mentioned in the “Storing Values with Variables” section, by default
+variables are immutable. This is one of many nudges Rust gives you to write
+your code in a way that takes advantage of the safety and easy concurrency that
+Rust offers. However, you still have the option to make your variables mutable.
+Let’s explore how and why Rust encourages you to favor immutability and why
+sometimes you might want to opt out.
+
+When a variable is immutable, once a value is bound to a name, you can’t change
+that value. To illustrate this, let’s generate a new project called *variables*
+in your *projects* directory by using `cargo new variables`.
+
+Then, in your new *variables* directory, open *src/main.rs* and replace its
+code with the following code. This code won’t compile just yet, we’ll first
+examine the immutability error.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = 5;
+ println!("The value of x is: {x}");
+ x = 6;
+ println!("The value of x is: {x}");
+}
+```
+
+Save and run the program using `cargo run`. You should receive an error
+message, as shown in this output:
+
+```
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+error[E0384]: cannot assign twice to immutable variable `x`
+ --> src/main.rs:4:5
+ |
+2 | let x = 5;
+ | -
+ | |
+ | first assignment to `x`
+ | help: consider making this binding mutable: `mut x`
+3 | println!("The value of x is: {x}");
+4 | x = 6;
+ | ^^^^^ cannot assign twice to immutable variable
+```
+
+This example shows how the compiler helps you find errors in your programs.
+Compiler errors can be frustrating, but really they only mean your program
+isn’t safely doing what you want it to do yet; they do *not* mean that you’re
+not a good programmer! Experienced Rustaceans still get compiler errors.
+
+The error message indicates that the cause of the error is that you `` cannot
+assign twice to immutable variable `x` ``, because you tried to assign a second
+value to the immutable `x` variable.
+
+It’s important that we get compile-time errors when we attempt to change a
+value that’s designated as immutable because this very situation can lead to
+bugs. If one part of our code operates on the assumption that a value will
+never change and another part of our code changes that value, it’s possible
+that the first part of the code won’t do what it was designed to do. The cause
+of this kind of bug can be difficult to track down after the fact, especially
+when the second piece of code changes the value only *sometimes*. The Rust
+compiler guarantees that when you state a value won’t change, it really won’t
+change, so you don’t have to keep track of it yourself. Your code is thus
+easier to reason through.
+
+But mutability can be very useful, and can make code more convenient to write.
+Variables are immutable only by default; as you did in Chapter 2, you can make
+them mutable by adding `mut` in front of the variable name. Adding `mut` also
+conveys intent to future readers of the code by indicating that other parts of
+the code will be changing this variable’s value.
+
+For example, let’s change *src/main.rs* to the following:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut x = 5;
+ println!("The value of x is: {x}");
+ x = 6;
+ println!("The value of x is: {x}");
+}
+```
+
+When we run the program now, we get this:
+
+```
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.30s
+ Running `target/debug/variables`
+The value of x is: 5
+The value of x is: 6
+```
+
+We’re allowed to change the value bound to `x` from `5` to `6` when `mut`
+is used. Ultimately, deciding whether to use mutability or not is up to you and
+depends on what you think is clearest in that particular situation.
+
+<!--- Just to voice some thoughts here: there's a kind of bad pattern I see sometimes
+with the Rust dev mindset around performance. In my experience it happens maybe less
+often than you'd think that cloning shows up in the profile as a performance hit. I
+wonder if we should maybe tone down or remove the discussion of performance above
+because it's far stronger for the developer to pick a clear representation for their
+program and then improve performance after they've found that model. /JT --->
+<!-- Ok, I've removed the discussion of performance here. Good call. /Carol -->
+
+### Constants
+
+Like immutable variables, *constants* are values that are bound to a name and
+are not allowed to change, but there are a few differences between constants
+and variables.
+
+First, you aren’t allowed to use `mut` with constants. Constants aren’t just
+immutable by default—they’re always immutable. You declare constants using the
+`const` keyword instead of the `let` keyword, and the type of the value *must*
+be annotated. We’re about to cover types and type annotations in the next
+section, “Data Types,” so don’t worry about the details right now. Just know
+that you must always annotate the type.
+
+Constants can be declared in any scope, including the global scope, which makes
+them useful for values that many parts of code need to know about.
+
+The last difference is that constants may be set only to a constant expression,
+not the result of a value that could only be computed at runtime.
+
+Here’s an example of a constant declaration:
+
+```
+const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
+```
+
+The constant’s name is `THREE_HOURS_IN_SECONDS` and its value is set to the
+result of multiplying 60 (the number of seconds in a minute) by 60 (the number
+of minutes in an hour) by 3 (the number of hours we want to count in this
+program). Rust’s naming convention for constants is to use all uppercase with
+underscores between words. The compiler is able to evaluate a limited set of
+operations at compile time, which lets us choose to write out this value in a
+way that’s easier to understand and verify, rather than setting this constant
+to the value 10,800. See the Rust Reference’s section on constant evaluation at
+*https://doc.rust-lang.org/reference/const_eval.html* for more information on
+what operations can be used when declaring constants.
+
+Constants are valid for the entire time a program runs, within the scope they
+were declared in. This property makes constants useful for values in your
+application domain that multiple parts of the program might need to know about,
+such as the maximum number of points any player of a game is allowed to earn or
+the speed of light.
+
+Naming hardcoded values used throughout your program as constants is useful in
+conveying the meaning of that value to future maintainers of the code. It also
+helps to have only one place in your code you would need to change if the
+hardcoded value needed to be updated in the future.
+
+### Shadowing
+
+As you saw in the guessing game tutorial in Chapter 2, you can declare a new
+variable with the same name as a previous variable. Rustaceans say that the
+first variable is *shadowed* by the second, which means that the second
+variable is what the compiler will see when you use the name of the variable.
+In effect, the second variable overshadows the first, taking any uses of the
+variable name to itself until either it itself is shadowed or the scope ends.
+We can shadow a variable by using the same variable’s name and repeating the
+use of the `let` keyword as follows:
+
+<!--- A potential reword of the above for clarity:
+
+As you saw in the guessing game tutorial in Chapter 2, you can declare a new
+variable with the same name as a previous variable. Rustaceans say that the
+first variable is *shadowed* by the second, which means that the second
+variable is what the compiler will see when you use the name of the variable.
+In effect, the second variable overshadows the first, taking any uses of the
+variable name to itself until either it itself is shadowed or the scope ends.
+We can shadow a variable by using the same variable’s name and repeating the
+use of the `let` keyword as follows:
+
+/JT --->
+<!-- Sounds good to me, I've made the change to JT's version. What do you
+think, Liz? /Carol -->
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = 5;
+
+ let x = x + 1;
+
+ {
+ let x = x * 2;
+ println!("The value of x in the inner scope is: {x}");
+ }
+
+ println!("The value of x is: {x}");
+}
+```
+<!--- We haven't really introduced block scoping yet. I know we're starting
+with variables, but I wonder if we should introduce scopes before shadowing,
+or explain that each block has its own set of variables.
+/JT --->
+<!-- Chapter 4 goes into scopes in more detail. I feel like block scoping is a
+pretty common programming concept, and the behavior of scopes in Rust that
+we're demonstrating here is the same behavior as scopes have in most other
+common programming languages. I don't recall getting comments from readers
+being confused about scopes at this point. I added a small phrase in the next
+paragraph that the curly brackets are creating a new scope... do you think
+that's enough, Liz? /Carol -->
+
+This program first binds `x` to a value of `5`. Then it creates a new variable
+`x` by repeating `let x =`, taking the original value and adding `1` so the
+value of `x` is then `6`. Then, within an inner scope created with the curly
+brackets, the third `let` statement also shadows `x` and creates a new
+variable, multiplying the previous value by `2` to give `x` a value of `12`.
+When that scope is over, the inner shadowing ends and `x` returns to being `6`.
+When we run this program, it will output the following:
+
+<!--- I lean towards reiterating that each `let x` is creating a new variable.
+/JT -->
+<!-- I've added a few mentions to that effect in the previous paragraph, what do you think, Liz? /Carol -->
+
+```
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/variables`
+The value of x in the inner scope is: 12
+The value of x is: 6
+```
+
+Shadowing is different from marking a variable as `mut`, because we’ll get a
+compile-time error if we accidentally try to reassign to this variable without
+using the `let` keyword. By using `let`, we can perform a few transformations
+on a value but have the variable be immutable after those transformations have
+been completed.
+
+<!--- so, to be clear, we're not overwriting the variable, so when the
+shadowing variable goes out of scope the earlier variables become visible to
+the compiler? --->
+<!-- Well, we *are* overwriting it *in the inner scope* -- there's no way to
+access the original value from the outer scope within the inner scope after
+the shadowing. But yes, shadowing only applies to the scope it happens in,
+which is what this example illustrates. Is there something that could be
+made clearer? /Carol -->
+<!-- JT, what do you think, is this clear enough as is or is there some way to clarify in the text? /LC -->
+<!--- I made a couple notes above trying to see if we could tease out a good
+explanation. Shadowing is effectively creating new variables and then these
+variables get a kind of "higher priority" when you look up the same variable
+name. Shadowing priority is kind of a "most recent wins", and it stays until
+that variable is shadowed by a following one or that variable goes out of scope.
+/JT -->
+
+The other difference between `mut` and shadowing is that because we’re
+effectively creating a new variable when we use the `let` keyword again, we can
+change the type of the value but reuse the same name. For example, say our
+program asks a user to show how many spaces they want between some text by
+inputting space characters, and then we want to store that input as a number:
+
+<!--- Question: the further I read, the more I wonder if we should put the shadowing
+stuff later. Is it valuable here as a kind of "building the right mental model" or
+are we using up too much of our complexity budget for building that mental model
+relatively early in the journey? Once we're introducing shadowing into new types
+we're getting relatively deep into Rust-specific coding patterns /JT -->
+<!-- I think it's important to address this here because shadowing is extremely
+common in idiomatic Rust code, but can be unfamiliar. I'm not sure where it
+would be appropriate to address if not here. /Carol -->
+
+```
+ let spaces = " ";
+ let spaces = spaces.len();
+```
+
+The first `spaces` variable is a string type and the second `spaces` variable
+is a number type. Shadowing thus spares us from having to come up with
+different names, such as `spaces_str` and `spaces_num`; instead, we can reuse
+the simpler `spaces` name. However, if we try to use `mut` for this, as shown
+here, we’ll get a compile-time error:
+
+```
+ let mut spaces = " ";
+ spaces = spaces.len();
+```
+
+The error says we’re not allowed to mutate a variable’s type:
+
+```
+$ cargo run
+ Compiling variables v0.1.0 (file:///projects/variables)
+error[E0308]: mismatched types
+ --> src/main.rs:3:14
+ |
+2 | let mut spaces = " ";
+ | ----- expected due to this value
+3 | spaces = spaces.len();
+ | ^^^^^^^^^^^^ expected `&str`, found `usize`
+```
+
+Now that we’ve explored how variables work, let’s look at more data types they
+can have.
+
+## Data Types
+
+Every value in Rust is of a certain *data type*, which tells Rust what kind of
+data is being specified so it knows how to work with that data. We’ll look at
+two data type subsets: scalar and compound.
+
+Keep in mind that Rust is a *statically typed* language, which means that it
+must know the types of all variables at compile time. The compiler can usually
+infer what type we want to use based on the value and how we use it. In cases
+when many types are possible, such as when we converted a `String` to a numeric
+type using `parse` in the “Comparing the Guess to the Secret Number” section in
+Chapter 2, we must add a type annotation, like this:
+
+```
+let guess: u32 = "42".parse().expect("Not a number!");
+```
+
+If we don’t add the `: u32` type annotation above, Rust will display the
+following error, which means the compiler needs more information from us to
+know which type we want to use:
+
+<!--- To help visual parsing, you might want to say "If we don't add the `: u32` type
+annotation above... /JT --->
+<!-- Done /Carol -->
+
+```
+$ cargo build
+ Compiling no_type_annotations v0.1.0 (file:///projects/no_type_annotations)
+error[E0282]: type annotations needed
+ --> src/main.rs:2:9
+ |
+2 | let guess = "42".parse().expect("Not a number!");
+ | ^^^^^ consider giving `guess` a type
+```
+
+You’ll see different type annotations for other data types.
+
+### Scalar Types
+
+A *scalar* type represents a single value. Rust has four primary scalar types:
+integers, floating-point numbers, Booleans, and characters. You may recognize
+these from other programming languages. Let’s jump into how they work in Rust.
+
+#### Integer Types
+
+An *integer* is a number without a fractional component. We used one integer
+type in Chapter 2, the `u32` type. This type declaration indicates that the
+value it’s associated with should be an unsigned integer (signed integer types
+start with `i`, instead of `u`) that takes up 32 bits of space. Table 3-1 shows
+the built-in integer types in Rust. We can use any of these variants to declare
+the type of an integer value.
+
+Table 3-1: Integer Types in Rust
+
+| Length | Signed | Unsigned |
+|---------|---------|----------|
+| 8-bit | `i8` | `u8` |
+| 16-bit | `i16` | `u16` |
+| 32-bit | `i32` | `u32` |
+| 64-bit | `i64` | `u64` |
+| 128-bit | `i128` | `u128` |
+| arch | `isize` | `usize` |
+
+Each variant can be either signed or unsigned and has an explicit size.
+*Signed* and *unsigned* refer to whether it’s possible for the number to be
+negative—in other words, whether the number needs to have a sign with it
+(signed) or whether it will only ever be positive and can therefore be
+represented without a sign (unsigned). It’s like writing numbers on paper: when
+the sign matters, a number is shown with a plus sign or a minus sign; however,
+when it’s safe to assume the number is positive, it’s shown with no sign.
+Signed numbers are stored using two’s complement representation.
+
+Each signed variant can store numbers from -(2<sup>n - 1</sup>) to 2<sup>n -
+1</sup> - 1 inclusive, where *n* is the number of bits that variant uses. So an
+`i8` can store numbers from -(2<sup>7</sup>) to 2<sup>7</sup> - 1, which equals
+-128 to 127. Unsigned variants can store numbers from 0 to 2<sup>n</sup> - 1,
+so a `u8` can store numbers from 0 to 2<sup>8</sup> - 1, which equals 0 to 255.
+
+Additionally, the `isize` and `usize` types depend on the architecture of the
+computer your program is running on, which is denoted in the table as “arch”:
+64 bits if you’re on a 64-bit architecture and 32 bits if you’re on a 32-bit
+architecture.
+
+You can write integer literals in any of the forms shown in Table 3-2. Note
+that number literals that can be multiple numeric types allow a type suffix,
+such as `57u8`, to designate the type. Number literals can also use `_` as a
+visual separator to make the number easier to read, such as `1_000`, which will
+have the same value as if you had specified `1000`.
+
+Table 3-2: Integer Literals in Rust
+
+| Number literals | Example |
+|------------------|---------------|
+| Decimal | `98_222` |
+| Hex | `0xff` |
+| Octal | `0o77` |
+| Binary | `0b1111_0000` |
+| Byte (`u8` only) | `b'A'` |
+
+So how do you know which type of integer to use? If you’re unsure, Rust’s
+defaults are generally good places to start: integer types default to `i32`.
+The primary situation in which you’d use `isize` or `usize` is when indexing
+some sort of collection.
+
+> ##### Integer Overflow
+>
+> Let’s say you have a variable of type `u8` that can hold values between 0 and
+> 255. If you try to change the variable to a value outside of that range, such
+> as 256, *integer overflow* will occur, which can result in one of two
+> behaviors. When you’re compiling in debug mode, Rust includes checks for
+> integer overflow that cause your program to *panic* at runtime if this
+> behavior occurs. Rust uses the term panicking when a program exits with an
+> error; we’ll discuss panics in more depth in the “Unrecoverable Errors with
+> `panic!`” section in Chapter 9.
+>
+> When you’re compiling in release mode with the `--release` flag, Rust does
+> *not* include checks for integer overflow that cause panics. Instead, if
+> overflow occurs, Rust performs *two’s complement wrapping*. In short, values
+> greater than the maximum value the type can hold “wrap around” to the minimum
+> of the values the type can hold. In the case of a `u8`, the value 256 becomes
+> 0, the value 257 becomes 1, and so on. The program won’t panic, but the
+> variable will have a value that probably isn’t what you were expecting it to
+> have. Relying on integer overflow’s wrapping behavior is considered an error.
+>
+> To explicitly handle the possibility of overflow, you can use these families
+> of methods provided by the standard library for primitive numeric types:
+>
+> - Wrap in all modes with the `wrapping_*` methods, such as `wrapping_add`
+> - Return the `None` value if there is overflow with the `checked_*` methods
+> - Return the value and a boolean indicating whether there was overflow with
+> the `overflowing_*` methods
+> - Saturate at the value’s minimum or maximum values with `saturating_*`
+> methods
+
+#### Floating-Point Types
+
+Rust also has two primitive types for *floating-point numbers*, which are
+numbers with decimal points. Rust’s floating-point types are `f32` and `f64`,
+which are 32 bits and 64 bits in size, respectively. The default type is `f64`
+because on modern CPUs it’s roughly the same speed as `f32` but is capable of
+more precision. All floating-point types are signed.
+
+Here’s an example that shows floating-point numbers in action:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = 2.0; // f64
+
+ let y: f32 = 3.0; // f32
+}
+```
+
+Floating-point numbers are represented according to the IEEE-754 standard. The
+`f32` type is a single-precision float, and `f64` has double precision.
+
+#### Numeric Operations
+
+Rust supports the basic mathematical operations you’d expect for all of the
+number types: addition, subtraction, multiplication, division, and remainder.
+Integer division rounds down to the nearest integer. The following code shows
+how you’d use each numeric operation in a `let` statement:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ // addition
+ let sum = 5 + 10;
+
+ // subtraction
+ let difference = 95.5 - 4.3;
+
+ // multiplication
+ let product = 4 * 30;
+
+ // division
+ let quotient = 56.7 / 32.2;
+ let floored = 2 / 3; // Results in 0
+
+ // remainder
+ let remainder = 43 % 5;
+}
+```
+
+Each expression in these statements uses a mathematical operator and evaluates
+to a single value, which is then bound to a variable. Appendix B contains a
+list of all operators that Rust provides.
+
+#### The Boolean Type
+
+As in most other programming languages, a Boolean type in Rust has two possible
+values: `true` and `false`. Booleans are one byte in size. The Boolean type in
+Rust is specified using `bool`. For example:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let t = true;
+
+ let f: bool = false; // with explicit type annotation
+}
+```
+
+The main way to use Boolean values is through conditionals, such as an `if`
+expression. We’ll cover how `if` expressions work in Rust in the “Control
+Flow” section.
+
+#### The Character Type
+
+Rust’s `char` type is the language’s most primitive alphabetic type. Here’s
+some examples of declaring `char` values:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let c = 'z';
+ let z: char = 'ℤ'; // with explicit type annotation
+ let heart_eyed_cat = '😻';
+}
+```
+
+Note that we specify `char` literals with single quotes, as opposed to string
+literals, which use double quotes. Rust’s `char` type is four bytes in size and
+represents a Unicode Scalar Value, which means it can represent a lot more than
+just ASCII. Accented letters; Chinese, Japanese, and Korean characters; emoji;
+and zero-width spaces are all valid `char` values in Rust. Unicode Scalar
+Values range from `U+0000` to `U+D7FF` and `U+E000` to `U+10FFFF` inclusive.
+However, a “character” isn’t really a concept in Unicode, so your human
+intuition for what a “character” is may not match up with what a `char` is in
+Rust. We’ll discuss this topic in detail in “Storing UTF-8 Encoded Text with
+Strings” in Chapter 8.
+
+### Compound Types
+
+*Compound types* can group multiple values into one type. Rust has two
+primitive compound types: tuples and arrays.
+
+#### The Tuple Type
+
+A tuple is a general way of grouping together a number of values with a variety
+of types into one compound type. Tuples have a fixed length: once declared,
+they cannot grow or shrink in size.
+
+We create a tuple by writing a comma-separated list of values inside
+parentheses. Each position in the tuple has a type, and the types of the
+different values in the tuple don’t have to be the same. We’ve added optional
+type annotations in this example:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let tup: (i32, f64, u8) = (500, 6.4, 1);
+}
+```
+
+The variable `tup` binds to the entire tuple, because a tuple is considered a
+single compound element. To get the individual values out of a tuple, we can
+use pattern matching to destructure a tuple value, like this:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let tup = (500, 6.4, 1);
+
+ let (x, y, z) = tup;
+
+ println!("The value of y is: {y}");
+}
+```
+
+This program first creates a tuple and binds it to the variable `tup`. It then
+uses a pattern with `let` to take `tup` and turn it into three separate
+variables, `x`, `y`, and `z`. This is called *destructuring*, because it breaks
+the single tuple into three parts. Finally, the program prints the value of
+`y`, which is `6.4`.
+
+We can also access a tuple element directly by using a period (`.`) followed by
+the index of the value we want to access. For example:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x: (i32, f64, u8) = (500, 6.4, 1);
+
+ let five_hundred = x.0;
+
+ let six_point_four = x.1;
+
+ let one = x.2;
+}
+```
+
+This program creates the tuple `x` and then accesses each element of the tuple
+using their respective indices. As with most programming languages, the first
+index in a tuple is 0.
+
+<!--- Indexing into a tuple using a constant, just like accessing a field of a struct,
+I think is maybe a more natural way to think of this than thinking of `x.0`, `x.1`, etc
+as separate variables. In the struct case, we don't think of each field as a separate
+variable, but instead that there's a path to get to the contained values that can be
+used and checked at compile time. /JT --->
+<!-- I think JT was actually confused with what this paragraph was trying to
+say, it was explaining that this particular example created new variables and
+bound them to the values of the tuple elements, not that the tuple elements
+*were* separate variables, so I've reworded this paragraph. Please check that
+this makes sense, Liz! /Carol -->
+
+The tuple without any values has a special name, *unit*. This value and its
+corresponding type are both written `()` and represent an empty value or an
+empty return type. Expressions implicitly return the unit value if they don’t
+return any other value.
+
+<!--- It's trick to see the difference between `()` and `()`. Maybe we can say: "The
+tuple without any values has a special name, *unit*. This value, and its corresponding
+type -- also written `()` -- represent an empty value or an empty return type." /JT --->
+<!-- I've tried to clear this up, but didn't take JT's suggestion exactly,
+there were too many subphrases in my opinion /Carol -->
+
+#### The Array Type
+
+Another way to have a collection of multiple values is with an *array*. Unlike
+a tuple, every element of an array must have the same type. Unlike arrays in
+some other languages, arrays in Rust have a fixed length.
+
+We write the values in an array as a comma-separated list inside square
+brackets:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let a = [1, 2, 3, 4, 5];
+}
+```
+
+Arrays are useful when you want your data allocated on the stack rather than
+the heap (we will discuss the stack and the heap more in Chapter 4) or when you
+want to ensure you always have a fixed number of elements. An array isn’t as
+flexible as the vector type, though. A vector is a similar collection type
+provided by the standard library that *is* allowed to grow or shrink in size.
+If you’re unsure whether to use an array or a vector, chances are you should
+use a vector. Chapter 8 discusses vectors in more detail.
+
+However, arrays are more useful when you know the number of elements will not
+need to change. For example, if you were using the names of the month in a
+program, you would probably use an array rather than a vector because you know
+it will always contain 12 elements:
+
+```
+let months = ["January", "February", "March", "April", "May", "June", "July",
+ "August", "September", "October", "November", "December"];
+```
+
+You write an array’s type using square brackets with the type of each element,
+a semicolon, and then the number of elements in the array, like so:
+
+```
+let a: [i32; 5] = [1, 2, 3, 4, 5];
+```
+
+Here, `i32` is the type of each element. After the semicolon, the number `5`
+indicates the array contains five elements.
+
+You can also initialize an array to contain the same value for each element by
+specifying the initial value, followed by a semicolon, and then the length of
+the array in square brackets, as shown here:
+
+```
+let a = [3; 5];
+```
+
+The array named `a` will contain `5` elements that will all be set to the value
+`3` initially. This is the same as writing `let a = [3, 3, 3, 3, 3];` but in a
+more concise way.
+
+##### Accessing Array Elements
+
+An array is a single chunk of memory of a known, fixed size that can be
+allocated on the stack. You can access elements of an array using indexing,
+like this:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let a = [1, 2, 3, 4, 5];
+
+ let first = a[0];
+ let second = a[1];
+}
+```
+
+In this example, the variable named `first` will get the value `1`, because
+that is the value at index `[0]` in the array. The variable named `second` will
+get the value `2` from index `[1]` in the array.
+
+##### Invalid Array Element Access
+
+Let’s see what happens if you try to access an element of an array that is past
+the end of the array. Say you run this code, similar to the guessing game in
+Chapter 2, to get an array index from the user:
+
+Filename: src/main.rs
+
+```
+use std::io;
+
+fn main() {
+ let a = [1, 2, 3, 4, 5];
+
+ println!("Please enter an array index.");
+
+ let mut index = String::new();
+
+ io::stdin()
+ .read_line(&mut index)
+ .expect("Failed to read line");
+
+ let index: usize = index
+ .trim()
+ .parse()
+ .expect("Index entered was not a number");
+
+ let element = a[index];
+
+ println!(
+ "The value of the element at index {index} is: {element}"
+ );
+}
+```
+
+This code compiles successfully. If you run this code using `cargo run` and
+enter 0, 1, 2, 3, or 4, the program will print out the corresponding value at
+that index in the array. If you instead enter a number past the end of the
+array, such as 10, you’ll see output like this:
+
+```
+thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10', src/main.rs:19:19
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+The program resulted in a *runtime* error at the point of using an invalid
+value in the indexing operation. The program exited with an error message and
+didn’t execute the final `println!` statement. When you attempt to access an
+element using indexing, Rust will check that the index you’ve specified is less
+than the array length. If the index is greater than or equal to the length,
+Rust will panic. This check has to happen at runtime, especially in this case,
+because the compiler can’t possibly know what value a user will enter when they
+run the code later.
+
+This is an example of Rust’s memory safety principles in action. In many
+low-level languages, this kind of check is not done, and when you provide an
+incorrect index, invalid memory can be accessed. Rust protects you against this
+kind of error by immediately exiting instead of allowing the memory access and
+continuing. Chapter 9 discusses more of Rust’s error handling and how you can
+write readable, safe code that neither panics nor allows invalid memory access.
+
+<!--- I get the idea, though I'm feeling a little uneasy with leaving the reader
+thinking "panic > invalid access" as the end of the story. Maybe we can tag something
+on to the end: "Chapter 9 discusses more of Rust's error handling, and how you can
+write readable, safe code that doesn't panic and doesn't allow invalid memory access.
+/JT --->
+<!-- I've incorporated JT's suggestion with a bit of rewording above /Carol -->
+
+## Functions
+
+Functions are prevalent in Rust code. You’ve already seen one of the most
+important functions in the language: the `main` function, which is the entry
+point of many programs. You’ve also seen the `fn` keyword, which allows you to
+declare new functions.
+
+Rust code uses *snake case* as the conventional style for function and variable
+names, in which all letters are lowercase and underscores separate words.
+Here’s a program that contains an example function definition:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ println!("Hello, world!");
+
+ another_function();
+}
+
+fn another_function() {
+ println!("Another function.");
+}
+```
+
+We define a function in Rust by entering `fn` followed by a function name and a
+set of parentheses. The curly brackets tell the compiler where the function
+body begins and ends.
+
+We can call any function we’ve defined by entering its name followed by a set
+of parentheses. Because `another_function` is defined in the program, it can be
+called from inside the `main` function. Note that we defined `another_function`
+*after* the `main` function in the source code; we could have defined it before
+as well. Rust doesn’t care where you define your functions, only that they’re
+defined somewhere in a scope that can be seen by the caller.
+
+<!--- nit: Rust does want the functions in a place the caller can see. If they're
+not in scope, Rust won't let the program build. Maybe we can say:
+"only that they're defined somewhere the caller can see them".
+or alt: "only that they're defined somewhere in a scope that can be seen by the
+caller"
+/JT --->
+<!-- Done! /Carol -->
+
+Let’s start a new binary project named *functions* to explore functions
+further. Place the `another_function` example in *src/main.rs* and run it. You
+should see the following output:
+
+```
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.28s
+ Running `target/debug/functions`
+Hello, world!
+Another function.
+```
+
+The lines execute in the order in which they appear in the `main` function.
+First, the “Hello, world!” message prints, and then `another_function` is
+called and its message is printed.
+
+### Parameters
+
+We can define functions to have *parameters*, which are special variables that
+are part of a function’s signature. When a function has parameters, you can
+provide it with concrete values for those parameters. Technically, the concrete
+values are called *arguments*, but in casual conversation, people tend to use
+the words *parameter* and *argument* interchangeably for either the variables
+in a function’s definition or the concrete values passed in when you call a
+function.
+
+In this version of `another_function` we add a parameter:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ another_function(5);
+}
+
+fn another_function(x: i32) {
+ println!("The value of x is: {x}");
+}
+```
+
+<!--- nit: might want to use `{x}` /JT --->
+<!-- Done! /Carol -->
+
+Try running this program; you should get the following output:
+
+```
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.21s
+ Running `target/debug/functions`
+The value of x is: 5
+```
+
+The declaration of `another_function` has one parameter named `x`. The type of
+`x` is specified as `i32`. When we pass `5` in to `another_function`, the
+`println!` macro puts `5` where the pair of curly brackets containing `x` was
+in the format string.
+
+In function signatures, you *must* declare the type of each parameter. This is
+a deliberate decision in Rust’s design: requiring type annotations in function
+definitions means the compiler almost never needs you to use them elsewhere in
+the code to figure out what type you mean. The compiler is also able to give
+more helpful error messages if it knows what types the function expects.
+
+<!--- Also helps give much better error messages /JT --->
+<!-- Added a note! /Carol -->
+
+When defining multiple parameters, separate the parameter declarations with
+commas, like this:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ print_labeled_measurement(5, 'h');
+}
+
+fn print_labeled_measurement(value: i32, unit_label: char) {
+ println!("The measurement is: {value}{unit_label}");
+}
+```
+
+This example creates a function named `print_labeled_measurement` with two
+parameters. The first parameter is named `value` and is an `i32`. The second is
+named `unit_label` and is type `char`. The function then prints text containing
+both the `value` and the `unit_label`.
+
+Let’s try running this code. Replace the program currently in your *functions*
+project’s *src/main.rs* file with the preceding example and run it using `cargo
+run`:
+
+```
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/functions`
+The measurement is: 5h
+```
+
+Because we called the function with `5` as the value for `value` and `'h'` as
+the value for `unit_label`, the program output contains those values.
+
+### Statements and Expressions
+
+Function bodies are made up of a series of statements optionally ending in an
+expression. So far, the functions we’ve covered haven’t included an ending
+expression, but you have seen an expression as part of a statement. Because
+Rust is an expression-based language, this is an important distinction to
+understand. Other languages don’t have the same distinctions, so let’s look at
+what statements and expressions are and how their differences affect the bodies
+of functions.
+
+*Statements* are instructions that perform some action and do not return a
+value. *Expressions* evaluate to a resulting value. Let’s look at some examples.
+
+We’ve actually already used statements and expressions. Creating a variable and
+assigning a value to it with the `let` keyword is a statement. In Listing 3-1,
+`let y = 6;` is a statement.
+
+<!--- To help clarify how they're related, we could say that "`let y = 6;`" is a
+statement, and the `6` being assigned to `y` is an expression. edit: I see we
+say this later, just thought it might be a little nicer to give an examples of
+each just following their definition. /JT --->
+<!-- I think I'm going to leave this as-is /Carol -->
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let y = 6;
+}
+```
+
+Listing 3-1: A `main` function declaration containing one statement
+
+Function definitions are also statements; the entire preceding example is a
+statement in itself.
+
+Statements do not return values. Therefore, you can’t assign a `let` statement
+to another variable, as the following code tries to do; you’ll get an error:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = (let y = 6);
+}
+```
+
+When you run this program, the error you’ll get looks like this:
+
+```
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+error: expected expression, found statement (`let`)
+ --> src/main.rs:2:14
+ |
+2 | let x = (let y = 6);
+ | ^^^^^^^^^
+ |
+ = note: variable declaration using `let` is a statement
+
+error[E0658]: `let` expressions in this position are experimental
+ --> src/main.rs:2:14
+ |
+2 | let x = (let y = 6);
+ | ^^^^^^^^^
+ |
+ = note: see issue #53667 <https://github.com/rust-lang/rust/issues/53667> for more information
+ = help: you can write `matches!(<expr>, <pattern>)` instead of `let <pattern> = <expr>`
+
+warning: unnecessary parentheses around assigned value
+ --> src/main.rs:2:13
+ |
+2 | let x = (let y = 6);
+ | ^ ^
+ |
+ = note: `#[warn(unused_parens)]` on by default
+help: remove these parentheses
+ |
+2 - let x = (let y = 6);
+2 + let x = let y = 6;
+ |
+```
+
+<!--- The errors in more recent Rust look slightly different here, if we want
+to update before publication. /JT --->
+<!-- Updated here and I will also check when we're in Word /Carol -->
+
+The `let y = 6` statement does not return a value, so there isn’t anything for
+`x` to bind to. This is different from what happens in other languages, such as
+C and Ruby, where the assignment returns the value of the assignment. In those
+languages, you can write `x = y = 6` and have both `x` and `y` have the value
+`6`; that is not the case in Rust.
+
+Expressions evaluate to a value and make up most of the rest of the code that
+you’ll write in Rust. Consider a math operation, such as `5 + 6`, which is an
+expression that evaluates to the value `11`. Expressions can be part of
+statements: in Listing 3-1, the `6` in the statement `let y = 6;` is an
+expression that evaluates to the value `6`. Calling a function is an
+expression. Calling a macro is an expression. A new scope block created with
+curly brackets is an expression, for example:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let y = {
+ let x = 3;
+ x + 1
+ };
+
+ println!("The value of y is: {y}");
+}
+```
+
+This expression:
+
+```
+{
+ let x = 3;
+ x + 1
+}
+```
+
+is a block that, in this case, evaluates to `4`. That value gets bound to `y`
+as part of the `let` statement. Note that the `x + 1` line doesn’t have a
+semicolon at the end, unlike most of the lines you’ve seen so far. Expressions
+do not include ending semicolons. If you add a semicolon to the end of an
+expression, you turn it into a statement, and it will then not return a value.
+Keep this in mind as you explore function return values and expressions next.
+
+### Functions with Return Values
+
+Functions can return values to the code that calls them. We don’t name return
+values, but we must declare their type after an arrow (`->`). In Rust, the
+return value of the function is synonymous with the value of the final
+expression in the block of the body of a function. You can return early from a
+function by using the `return` keyword and specifying a value, but most
+functions return the last expression implicitly. Here’s an example of a
+function that returns a value:
+
+Filename: src/main.rs
+
+```
+fn five() -> i32 {
+ 5
+}
+
+fn main() {
+ let x = five();
+
+ println!("The value of x is: {x}");
+}
+```
+
+There are no function calls, macros, or even `let` statements in the `five`
+function—just the number `5` by itself. That’s a perfectly valid function in
+Rust. Note that the function’s return type is specified too, as `-> i32`. Try
+running this code; the output should look like this:
+
+```
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.30s
+ Running `target/debug/functions`
+The value of x is: 5
+```
+
+The `5` in `five` is the function’s return value, which is why the return type
+is `i32`. Let’s examine this in more detail. There are two important bits:
+first, the line `let x = five();` shows that we’re using the return value of a
+function to initialize a variable. Because the function `five` returns a `5`,
+that line is the same as the following:
+
+```
+let x = 5;
+```
+
+Second, the `five` function has no parameters and defines the type of the
+return value, but the body of the function is a lonely `5` with no semicolon
+because it’s an expression whose value we want to return.
+
+<!--- If you want, you could point out that the `println!` line that main ends
+on is a statement, hence why main doesn't have a return value. /JT --->
+<!-- I don't think I want to :) /Carol -->
+
+Let’s look at another example:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = plus_one(5);
+
+ println!("The value of x is: {x}");
+}
+
+fn plus_one(x: i32) -> i32 {
+ x + 1
+}
+```
+
+Running this code will print `The value of x is: 6`. But if we place a
+semicolon at the end of the line containing `x + 1`, changing it from an
+expression to a statement, we’ll get an error.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = plus_one(5);
+
+ println!("The value of x is: {x}");
+}
+
+fn plus_one(x: i32) -> i32 {
+ x + 1;
+}
+```
+
+Compiling this code produces an error, as follows:
+
+```
+$ cargo run
+ Compiling functions v0.1.0 (file:///projects/functions)
+error[E0308]: mismatched types
+ --> src/main.rs:7:24
+ |
+7 | fn plus_one(x: i32) -> i32 {
+ | -------- ^^^ expected `i32`, found `()`
+ | |
+ | implicitly returns `()` as its body has no tail or `return` expression
+8 | x + 1;
+ | - help: consider removing this semicolon
+```
+
+The main error message, “mismatched types,” reveals the core issue with this
+code. The definition of the function `plus_one` says that it will return an
+`i32`, but statements don’t evaluate to a value, which is expressed by `()`,
+the unit type. Therefore, nothing is returned, which contradicts the function
+definition and results in an error. In this output, Rust provides a message to
+possibly help rectify this issue: it suggests removing the semicolon, which
+would fix the error.
+
+## Comments
+
+All programmers strive to make their code easy to understand, but sometimes
+extra explanation is warranted. In these cases, programmers leave *comments* in
+their source code that the compiler will ignore but people reading the source
+code may find useful.
+
+Here’s a simple comment:
+
+```
+// hello, world
+```
+
+In Rust, the idiomatic comment style starts a comment with two slashes, and the
+comment continues until the end of the line. For comments that extend beyond a
+single line, you’ll need to include `//` on each line, like this:
+
+```
+// So we’re doing something complicated here, long enough that we need
+// multiple lines of comments to do it! Whew! Hopefully, this comment will
+// explain what’s going on.
+```
+
+Comments can also be placed at the end of lines containing code:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let lucky_number = 7; // I’m feeling lucky today
+}
+```
+
+But you’ll more often see them used in this format, with the comment on a
+separate line above the code it’s annotating:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ // I’m feeling lucky today
+ let lucky_number = 7;
+}
+```
+
+Rust also has another kind of comment, documentation comments, which we’ll
+discuss in the “Publishing a Crate to Crates.io” section of Chapter 14.
+
+## Control Flow
+
+The ability to run some code depending on if a condition is true, or run some
+code repeatedly while a condition is true, are basic building blocks in most
+programming languages. The most common constructs that let you control the flow
+of execution of Rust code are `if` expressions and loops.
+
+### `if` Expressions
+
+An `if` expression allows you to branch your code depending on conditions. You
+provide a condition and then state, “If this condition is met, run this block
+of code. If the condition is not met, do not run this block of code.”
+
+Create a new project called *branches* in your *projects* directory to explore
+the `if` expression. In the *src/main.rs* file, input the following:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let number = 3;
+
+ if number < 5 {
+ println!("condition was true");
+ } else {
+ println!("condition was false");
+ }
+}
+```
+
+All `if` expressions start with the keyword `if`, followed by a condition. In
+this case, the condition checks whether or not the variable `number` has a
+value less than 5. We place the block of code to execute if the condition is true
+immediately after the condition inside curly brackets. Blocks of code
+associated with the conditions in `if` expressions are sometimes called *arms*,
+just like the arms in `match` expressions that we discussed in the “Comparing
+the Guess to the Secret Number” section of Chapter 2.
+
+Optionally, we can also include an `else` expression, which we chose
+to do here, to give the program an alternative block of code to execute should
+the condition evaluate to false. If you don’t provide an `else` expression and
+the condition is false, the program will just skip the `if` block and move on
+to the next bit of code.
+
+Try running this code; you should see the following output:
+
+```
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/branches`
+condition was true
+```
+
+Let’s try changing the value of `number` to a value that makes the condition
+`false` to see what happens:
+
+```
+ let number = 7;
+```
+
+Run the program again, and look at the output:
+
+```
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/branches`
+condition was false
+```
+
+It’s also worth noting that the condition in this code *must* be a `bool`. If
+the condition isn’t a `bool`, we’ll get an error. For example, try running the
+following code:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let number = 3;
+
+ if number {
+ println!("number was three");
+ }
+}
+```
+
+The `if` condition evaluates to a value of `3` this time, and Rust throws an
+error:
+
+```
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+error[E0308]: mismatched types
+ --> src/main.rs:4:8
+ |
+4 | if number {
+ | ^^^^^^ expected `bool`, found integer
+```
+
+The error indicates that Rust expected a `bool` but got an integer. Unlike
+languages such as Ruby and JavaScript, Rust will not automatically try to
+convert non-Boolean types to a Boolean. You must be explicit and always provide
+`if` with a Boolean as its condition. If we want the `if` code block to run
+only when a number is not equal to `0`, for example, we can change the `if`
+expression to the following:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let number = 3;
+
+ if number != 0 {
+ println!("number was something other than zero");
+ }
+}
+```
+
+Running this code will print `number was something other than zero`.
+
+#### Handling Multiple Conditions with `else if`
+
+You can use multiple conditions by combining `if` and `else` in an `else if`
+expression. For example:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let number = 6;
+
+ if number % 4 == 0 {
+ println!("number is divisible by 4");
+ } else if number % 3 == 0 {
+ println!("number is divisible by 3");
+ } else if number % 2 == 0 {
+ println!("number is divisible by 2");
+ } else {
+ println!("number is not divisible by 4, 3, or 2");
+ }
+}
+```
+
+This program has four possible paths it can take. After running it, you should
+see the following output:
+
+```
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.31s
+ Running `target/debug/branches`
+number is divisible by 3
+```
+
+When this program executes, it checks each `if` expression in turn and executes
+the first body for which the condition holds true. Note that even though 6 is
+divisible by 2, we don’t see the output `number is divisible by 2`, nor do we
+see the `number is not divisible by 4, 3, or 2` text from the `else` block.
+That’s because Rust only executes the block for the first true condition, and
+once it finds one, it doesn’t even check the rest.
+
+Using too many `else if` expressions can clutter your code, so if you have more
+than one, you might want to refactor your code. Chapter 6 describes a powerful
+Rust branching construct called `match` for these cases.
+
+#### Using `if` in a `let` Statement
+
+Because `if` is an expression, we can use it on the right side of a `let`
+statement to assign the outcome to a variable, as in Listing 3-2.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let condition = true;
+ let number = if condition { 5 } else { 6 };
+
+ println!("The value of number is: {number}");
+}
+```
+
+<!--- Style nit: `{number}`. /JT --->
+<!-- Fixed! /Carol -->
+
+Listing 3-2: Assigning the result of an `if` expression to a variable
+
+<!--- I was wondering when listings got numbered and when they didn't. Many of
+the above don't get a number a title, though maybe it'd help readability? /JT --->
+<!-- Liz: Chapter 3 doesn't have many listing numbers because on the first
+round of printing, we hadn't really figured out what we were doing with listing
+numbers yet. I'm happy to add more listing numbers in Chapter 3, but it'll take
+me some time to go through and add appropriate captions, check cross
+references, etc. Let me know if you'd like me to spend that time. /Carol -->
+
+The `number` variable will be bound to a value based on the outcome of the `if`
+expression. Run this code to see what happens:
+
+```
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.30s
+ Running `target/debug/branches`
+The value of number is: 5
+```
+
+Remember that blocks of code evaluate to the last expression in them, and
+numbers by themselves are also expressions. In this case, the value of the
+whole `if` expression depends on which block of code executes. This means the
+values that have the potential to be results from each arm of the `if` must be
+the same type; in Listing 3-2, the results of both the `if` arm and the `else`
+arm were `i32` integers. If the types are mismatched, as in the following
+example, we’ll get an error:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let condition = true;
+
+ let number = if condition { 5 } else { "six" };
+
+ println!("The value of number is: {number}");
+}
+```
+
+When we try to compile this code, we’ll get an error. The `if` and `else` arms
+have value types that are incompatible, and Rust indicates exactly where to
+find the problem in the program:
+
+```
+$ cargo run
+ Compiling branches v0.1.0 (file:///projects/branches)
+error[E0308]: `if` and `else` have incompatible types
+ --> src/main.rs:4:44
+ |
+4 | let number = if condition { 5 } else { "six" };
+ | - ^^^^^ expected integer, found `&str`
+ | |
+ | expected because of this
+```
+
+The expression in the `if` block evaluates to an integer, and the expression in
+the `else` block evaluates to a string. This won’t work because variables must
+have a single type, and Rust needs to know at compile time what type the
+`number` variable is, definitively. Knowing the type of `number` lets the
+compiler verify the type is valid everywhere we use `number`. Rust wouldn’t be
+able to do that if the type of `number` was only determined at runtime; the
+compiler would be more complex and would make fewer guarantees about the code
+if it had to keep track of multiple hypothetical types for any variable.
+
+### Repetition with Loops
+
+It’s often useful to execute a block of code more than once. For this task,
+Rust provides several *loops*, which will run through the code inside the loop
+body to the end and then start immediately back at the beginning. To
+experiment with loops, let’s make a new project called *loops*.
+
+Rust has three kinds of loops: `loop`, `while`, and `for`. Let’s try each one.
+
+#### Repeating Code with `loop`
+
+The `loop` keyword tells Rust to execute a block of code over and over again
+forever or until you explicitly tell it to stop.
+
+As an example, change the *src/main.rs* file in your *loops* directory to look
+like this:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ loop {
+ println!("again!");
+ }
+}
+```
+
+When we run this program, we’ll see `again!` printed over and over continuously
+until we stop the program manually. Most terminals support the keyboard shortcut
+<span class="keystroke">ctrl-c</span> to interrupt a program that is stuck in
+a continual loop. Give it a try:
+
+```
+$ cargo run
+ Compiling loops v0.1.0 (file:///projects/loops)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.29s
+ Running `target/debug/loops`
+again!
+again!
+again!
+again!
+^Cagain!
+```
+
+The symbol `^C` represents where you pressed <span class="keystroke">ctrl-c
+</span>. You may or may not see the word `again!` printed after the `^C`,
+depending on where the code was in the loop when it received the interrupt
+signal.
+
+Fortunately, Rust also provides a way to break out of a loop using code. You
+can place the `break` keyword within the loop to tell the program when to stop
+executing the loop. Recall that we did this in the guessing game in the
+“Quitting After a Correct Guess” section of Chapter 2 to exit the program when
+the user won the game by guessing the correct number.
+
+We also used `continue` in the guessing game, which in a loop tells the program
+to skip over any remaining code in this iteration of the loop and go to the
+next iteration.
+
+<!--- Before you show loop labels below, you might want to give a code example
+of using `break` to break a loop. /JT --->
+<!-- I've rearranged the sections to take this suggestion here /Carol -->
+
+#### Returning Values from Loops
+
+One of the uses of a `loop` is to retry an operation you know might fail, such
+as checking whether a thread has completed its job. You might also need to pass
+the result of that operation out of the loop to the rest of your code. To do
+this, you can add the value you want returned after the `break` expression you
+use to stop the loop; that value will be returned out of the loop so you can
+use it, as shown here:
+
+```
+fn main() {
+ let mut counter = 0;
+
+ let result = loop {
+ counter += 1;
+
+ if counter == 10 {
+ break counter * 2;
+ }
+ };
+
+ println!("The result is {result}");
+}
+```
+
+Before the loop, we declare a variable named `counter` and initialize it to
+`0`. Then we declare a variable named `result` to hold the value returned from
+the loop. On every iteration of the loop, we add `1` to the `counter` variable,
+and then check whether the counter is equal to `10`. When it is, we use the
+`break` keyword with the value `counter * 2`. After the loop, we use a
+semicolon to end the statement that assigns the value to `result`. Finally, we
+print the value in `result`, which in this case is 20.
+
+#### Loop Labels to Disambiguate Between Multiple Loops
+
+<!-- Liz: New heading for this section, what do you think? /Carol -->
+
+If you have loops within loops, `break` and `continue` apply to the innermost
+loop at that point. You can optionally specify a *loop label* on a loop that we
+can then use with `break` or `continue` to specify that those keywords apply to
+the labeled loop instead of the innermost loop. Loop labels must begin with a
+single quote. Here’s an example with two nested loops:
+
+```
+fn main() {
+ let mut count = 0;
+ 'counting_up: loop {
+ println!("count = {count}");
+ let mut remaining = 10;
+
+ loop {
+ println!("remaining = {remaining}");
+ if remaining == 9 {
+ break;
+ }
+ if count == 2 {
+ break 'counting_up;
+ }
+ remaining -= 1;
+ }
+
+ count += 1;
+ }
+ println!("End count = {count}");
+}
+```
+
+The outer loop has the label `'counting_up`, and it will count up from 0 to 2.
+The inner loop without a label counts down from 10 to 9. The first `break` that
+doesn’t specify a label will exit the inner loop only. The `break
+'counting_up;` statement will exit the outer loop. This code prints:
+
+```
+ Compiling loops v0.1.0 (file:///projects/loops)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.58s
+ Running `target/debug/loops`
+count = 0
+remaining = 10
+remaining = 9
+count = 1
+remaining = 10
+remaining = 9
+count = 2
+remaining = 10
+End count = 2
+```
+
+#### Conditional Loops with `while`
+
+A program will often need to evaluate a condition within a loop. While the
+condition is true, the loop runs. When the condition ceases to be true, the
+program calls `break`, stopping the loop. It’s possible to implement behavior
+like this using a combination of `loop`, `if`, `else`, and `break`; you could
+try that now in a program, if you’d like. However, this pattern is so common
+that Rust has a built-in language construct for it, called a `while` loop. In
+Listing 3-3, we use `while` to loop the program three times, counting down each
+time, and then, after the loop, print a message and exit.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut number = 3;
+
+ while number != 0 {
+ println!("{number}!");
+
+ number -= 1;
+ }
+
+ println!("LIFTOFF!!!");
+}
+```
+
+Listing 3-3: Using a `while` loop to run code while a condition holds true
+
+This construct eliminates a lot of nesting that would be necessary if you used
+`loop`, `if`, `else`, and `break`, and it’s clearer. While a condition holds
+true, the code runs; otherwise, it exits the loop.
+
+#### Looping Through a Collection with `for`
+
+You can choose to use the `while` construct to loop over the elements of a
+collection, such as an array. For example, the loop in Listing 3-4 prints each
+element in the array `a`.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let a = [10, 20, 30, 40, 50];
+ let mut index = 0;
+
+ while index < 5 {
+ println!("the value is: {}", a[index]);
+
+ index += 1;
+ }
+}
+```
+
+Listing 3-4: Looping through each element of a collection using a `while` loop
+
+Here, the code counts up through the elements in the array. It starts at index
+`0`, and then loops until it reaches the final index in the array (that is,
+when `index < 5` is no longer true). Running this code will print every element
+in the array:
+
+```
+$ cargo run
+ Compiling loops v0.1.0 (file:///projects/loops)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.32s
+ Running `target/debug/loops`
+the value is: 10
+the value is: 20
+the value is: 30
+the value is: 40
+the value is: 50
+```
+
+All five array values appear in the terminal, as expected. Even though `index`
+will reach a value of `5` at some point, the loop stops executing before trying
+to fetch a sixth value from the array.
+
+However, this approach is error prone; we could cause the program to panic if
+the index value or test condition are incorrect. For example, if you changed
+the definition of the `a` array to have four elements but forgot to update the
+condition to `while index < 4`, the code would panic. It’s also slow, because
+the compiler adds runtime code to perform the conditional check of whether the
+index is within the bounds of the array on every iteration through the loop.
+
+As a more concise alternative, you can use a `for` loop and execute some code
+for each item in a collection. A `for` loop looks like the code in Listing 3-5.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let a = [10, 20, 30, 40, 50];
+
+ for element in a {
+ println!("the value is: {element}");
+ }
+}
+```
+
+Listing 3-5: Looping through each element of a collection using a `for` loop
+
+When we run this code, we’ll see the same output as in Listing 3-4. More
+importantly, we’ve now increased the safety of the code and eliminated the
+chance of bugs that might result from going beyond the end of the array or not
+going far enough and missing some items.
+
+Using the `for` loop, you wouldn’t need to remember to change any other code if
+you changed the number of values in the array, as you would with the method
+used in Listing 3-4.
+
+The safety and conciseness of `for` loops make them the most commonly used loop
+construct in Rust. Even in situations in which you want to run some code a
+certain number of times, as in the countdown example that used a `while` loop
+in Listing 3-3, most Rustaceans would use a `for` loop. The way to do that
+would be to use a `Range`, provided by the standard library, which generates
+all numbers in sequence starting from one number and ending before another
+number.
+
+Here’s what the countdown would look like using a `for` loop and another method
+we’ve not yet talked about, `rev`, to reverse the range:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ for number in (1..4).rev() {
+ println!("{number}!");
+ }
+ println!("LIFTOFF!!!");
+}
+```
+
+This code is a bit nicer, isn’t it?
+
+## Summary
+
+You made it! That was a sizable chapter: you learned about variables, scalar
+and compound data types, functions, comments, `if` expressions, and loops!
+To practice with the concepts discussed in this chapter, try building
+programs to do the following:
+
+* Convert temperatures between Fahrenheit and Celsius.
+* Generate the nth Fibonacci number.
+* Print the lyrics to the Christmas carol “The Twelve Days of Christmas,”
+ taking advantage of the repetition in the song.
+
+When you’re ready to move on, we’ll talk about a concept in Rust that *doesn’t*
+commonly exist in other programming languages: ownership.
diff --git a/src/doc/book/nostarch/chapter04.md b/src/doc/book/nostarch/chapter04.md
new file mode 100644
index 000000000..cbcad103e
--- /dev/null
+++ b/src/doc/book/nostarch/chapter04.md
@@ -0,0 +1,1390 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Understanding Ownership
+
+Ownership is Rust’s most unique feature and has deep implications for the rest
+of the language. It enables Rust to make memory safety guarantees without
+needing a garbage collector, so it’s important to understand how ownership
+works. In this chapter, we’ll talk about ownership as well as several related
+features: borrowing, slices, and how Rust lays data out in memory.
+
+## What Is Ownership?
+
+*Ownership* is a set of rules that governs how a Rust program manages memory.
+All programs have to manage the way they use a computer’s memory while running.
+Some languages have garbage collection that regularly looks for no-longer used
+memory as the program runs; in other languages, the programmer must explicitly
+allocate and free the memory. Rust uses a third approach: memory is managed
+through a system of ownership with a set of rules that the compiler checks. If
+any of the rules are violated, the program won’t compile. None of the features
+of ownership will slow down your program while it’s running.
+
+<!--- Minor nit: garbage collection isn't constant, it happens at times specified
+by the collection algorithm. Maybe "Some languages have garbage collection that
+regularly looks for no-longer used memory as the program runs."
+/JT --->
+<!-- Took this suggestion! /Carol -->
+
+Because ownership is a new concept for many programmers, it does take some time
+to get used to. The good news is that the more experienced you become with Rust
+and the rules of the ownership system, the easier you’ll find it to naturally
+develop code that is safe and efficient. Keep at it!
+
+When you understand ownership, you’ll have a solid foundation for understanding
+the features that make Rust unique. In this chapter, you’ll learn ownership by
+working through some examples that focus on a very common data structure:
+strings.
+
+> ### The Stack and the Heap
+>
+> Many programming languages don’t require you to think about the stack and the
+> heap very often. But in a systems programming language like Rust, whether a
+> value is on the stack or the heap affects how the language behaves and why
+> you have to make certain decisions. Parts of ownership will be described in
+> relation to the stack and the heap later in this chapter, so here is a brief
+> explanation in preparation.
+>
+> Both the stack and the heap are parts of memory available to your code to use
+> at runtime, but they are structured in different ways. The stack stores
+> values in the order it gets them and removes the values in the opposite
+> order. This is referred to as *last in, first out*. Think of a stack of
+> plates: when you add more plates, you put them on top of the pile, and when
+> you need a plate, you take one off the top. Adding or removing plates from
+> the middle or bottom wouldn’t work as well! Adding data is called *pushing
+> onto the stack*, and removing data is called *popping off the stack*. All
+> data stored on the stack must have a known, fixed size. Data with an unknown
+> size at compile time or a size that might change must be stored on the heap
+> instead.
+>
+> The heap is less organized: when you put data on the heap, you request a
+> certain amount of space. The memory allocator finds an empty spot in the heap
+> that is big enough, marks it as being in use, and returns a *pointer*, which
+> is the address of that location. This process is called *allocating on the
+> heap* and is sometimes abbreviated as just *allocating* (pushing values onto
+> the stack is not considered allocating). Because the pointer to the heap is a
+> known, fixed size, you can store the pointer on the stack, but when you want
+> the actual data, you must follow the pointer. Think of being seated at a
+> restaurant. When you enter, you state the number of people in your group, and
+> the staff finds an empty table that fits everyone and leads you there. If
+> someone in your group comes late, they can ask where you’ve been seated to
+> find you.
+>
+> Pushing to the stack is faster than allocating on the heap because the
+> allocator never has to search for a place to store new data; that location is
+> always at the top of the stack. Comparatively, allocating space on the heap
+> requires more work, because the allocator must first find a big enough space
+> to hold the data and then perform bookkeeping to prepare for the next
+> allocation.
+
+<!--- Minor nit: not sure if worth clarifying but thought I'd mention - performance
+for heap allocation I think isn't as much the time spent in the allocator but that
+you have to spend time asking the system for memory. Custom allocators still have to
+do the allocation step but try to avoid the system step where possible.
+/JT --->
+<!-- I think this is a bit in the weeds, not making any change here /Carol -->
+
+> Accessing data in the heap is slower than accessing data on the stack because
+> you have to follow a pointer to get there. Contemporary processors are faster
+> if they jump around less in memory. Continuing the analogy, consider a server
+> at a restaurant taking orders from many tables. It’s most efficient to get
+> all the orders at one table before moving on to the next table. Taking an
+> order from table A, then an order from table B, then one from A again, and
+> then one from B again would be a much slower process. By the same token, a
+> processor can do its job better if it works on data that’s close to other
+> data (as it is on the stack) rather than farther away (as it can be on the
+> heap).
+
+<!--- I don't quite understand the last sentence. If you allocate enough to create
+virtual memory, sure. But modern systems you're probably safe for most things? Also,
+if we're contrasting against something like the heap, just having the ability to allocate
+large space is probably a big benefit of the heap rather than a drawback. IMHO I'd probably
+just drop the last sentence.
+/JT --->
+<!-- Done! /Carol -->
+
+>
+> When your code calls a function, the values passed into the function
+> (including, potentially, pointers to data on the heap) and the function’s
+> local variables get pushed onto the stack. When the function is over, those
+> values get popped off the stack.
+
+<!--- Some calling conventions don't always use the stack for parameters.
+For example, Windows x64 calling convention puts the first 4 arguments into
+registers, and only puts args 5 and later on the stack. Ditto for the return
+value. If it can fit in a register, x64 will use that instead of the stack:
+
+https://docs.microsoft.com/en-us/cpp/build/x64-calling-convention?view=msvc-170#parameter-passing
+/JT --->
+<!-- I think this is a bit in the weeds, not making any change here /Carol -->
+
+>
+> Keeping track of what parts of code are using what data on the heap,
+> minimizing the amount of duplicate data on the heap, and cleaning up unused
+> data on the heap so you don’t run out of space are all problems that ownership
+> addresses. Once you understand ownership, you won’t need to think about the
+> stack and the heap very often, but knowing that the main purpose of ownership
+> is to manage heap data can help explain why it works the way it does.
+
+### Ownership Rules
+
+First, let’s take a look at the ownership rules. Keep these rules in mind as we
+work through the examples that illustrate them:
+
+* Each value in Rust has an *owner*.
+* There can only be one owner at a time.
+* When the owner goes out of scope, the value will be dropped.
+
+<!--- Maybe splitting hairs, but for the first bullet I'd say:
+"Each value in Rust has an *owner*".
+
+If we say variables here, and then find out later that, for example, structs can
+also be owners, this gets a bit mirky.
+/JT --->
+<!-- Took this suggestion! /Carol -->
+
+### Variable Scope
+
+Now that we’re past basic Rust syntax, we won’t include all the `fn main() {`
+code in examples, so if you’re following along, make sure to put the following
+examples inside a `main` function manually. As a result, our examples will be a
+bit more concise, letting us focus on the actual details rather than
+boilerplate code.
+
+As a first example of ownership, we’ll look at the *scope* of some variables. A
+scope is the range within a program for which an item is valid. Take the
+following variable:
+
+```
+let s = "hello";
+```
+
+The variable `s` refers to a string literal, where the value of the string is
+hardcoded into the text of our program. The variable is valid from the point at
+which it’s declared until the end of the current *scope*. Listing 4-1 shows a
+program with comments annotating where the variable `s` would be valid.
+
+```
+{ // s is not valid here, it’s not yet declared
+ let s = "hello"; // s is valid from this point forward.
+
+ // do stuff with s
+} // this scope is now over, and s is no longer valid
+```
+
+Listing 4-1: A variable and the scope in which it is valid
+
+In other words, there are two important points in time here:
+
+* When `s` comes *into scope*, it is valid.
+* It remains valid until it goes *out of scope*.
+
+At this point, the relationship between scopes and when variables are valid is
+similar to that in other programming languages. Now we’ll build on top of this
+understanding by introducing the `String` type.
+
+### The `String` Type
+
+To illustrate the rules of ownership, we need a data type that is more complex
+than those we covered in the “Data Types” section of Chapter 3. The types
+covered previously are all a known size, can be stored on the stack and popped
+off the stack when their scope is over, and can be quickly and trivially copied
+to make a new, independent instance if another part of code needs to use the
+same value in a different scope. But we want to look at data that is stored on
+the heap and explore how Rust knows when to clean up that data, and the
+`String` type is a great example.
+
+We’ll concentrate on the parts of `String` that relate to ownership. These
+aspects also apply to other complex data types, whether they are provided by
+the standard library or created by you. We’ll discuss `String` in more depth in
+Chapter 8.
+
+We’ve already seen string literals, where a string value is hardcoded into our
+program. String literals are convenient, but they aren’t suitable for every
+situation in which we may want to use text. One reason is that they’re
+immutable. Another is that not every string value can be known when we write
+our code: for example, what if we want to take user input and store it? For
+these situations, Rust has a second string type, `String`. This type manages
+data allocated on the heap and as such is able to store an amount of text that
+is unknown to us at compile time. You can create a `String` from a string
+literal using the `from` function, like so:
+
+```
+let s = String::from("hello");
+```
+
+The double colon `::` operator allows us to namespace this particular `from`
+function under the `String` type rather than using some sort of name like
+`string_from`. We’ll discuss this syntax more in the “Method Syntax” section of
+Chapter 5 and when we talk about namespacing with modules in “Paths for
+Referring to an Item in the Module Tree” in Chapter 7.
+
+This kind of string *can* be mutated:
+
+```
+let mut s = String::from("hello");
+
+s.push_str(", world!"); // push_str() appends a literal to a String
+
+println!("{}", s); // This will print `hello, world!`
+```
+
+So, what’s the difference here? Why can `String` be mutated but literals
+cannot? The difference is how these two types deal with memory.
+
+### Memory and Allocation
+
+In the case of a string literal, we know the contents at compile time, so the
+text is hardcoded directly into the final executable. This is why string
+literals are fast and efficient. But these properties only come from the string
+literal’s immutability. Unfortunately, we can’t put a blob of memory into the
+binary for each piece of text whose size is unknown at compile time and whose
+size might change while running the program.
+
+With the `String` type, in order to support a mutable, growable piece of text,
+we need to allocate an amount of memory on the heap, unknown at compile time,
+to hold the contents. This means:
+
+* The memory must be requested from the memory allocator at runtime.
+* We need a way of returning this memory to the allocator when we’re
+ done with our `String`.
+
+That first part is done by us: when we call `String::from`, its implementation
+requests the memory it needs. This is pretty much universal in programming
+languages.
+
+However, the second part is different. In languages with a *garbage collector
+(GC)*, the GC keeps track of and cleans up memory that isn’t being used
+anymore, and we don’t need to think about it. In most languages without a GC,
+it’s our responsibility to identify when memory is no longer being used and
+call code to explicitly free it, just as we did to request it. Doing this
+correctly has historically been a difficult programming problem. If we forget,
+we’ll waste memory. If we do it too early, we’ll have an invalid variable. If
+we do it twice, that’s a bug too. We need to pair exactly one `allocate` with
+exactly one `free`.
+
+<!--- The phrase "explicitly return it" gives a connotation in programming of
+returning a value to a caller rather than the more casual returning it to the OS.
+Maybe we can say "explicitly delete it" or "explicitly free it".
+/JT --->
+<!-- Changed "return" to "free" /Carol -->
+
+Rust takes a different path: the memory is automatically returned once the
+variable that owns it goes out of scope. Here’s a version of our scope example
+from Listing 4-1 using a `String` instead of a string literal:
+
+```
+{
+ let s = String::from("hello"); // s is valid from this point forward
+
+ // do stuff with s
+} // this scope is now over, and s is no
+ // longer valid
+```
+
+There is a natural point at which we can return the memory our `String` needs
+to the allocator: when `s` goes out of scope. When a variable goes out of
+scope, Rust calls a special function for us. This function is called `drop`,
+and it’s where the author of `String` can put the code to return the memory.
+Rust calls `drop` automatically at the closing curly bracket.
+
+> Note: In C++, this pattern of deallocating resources at the end of an item’s
+> lifetime is sometimes called *Resource Acquisition Is Initialization (RAII)*.
+> The `drop` function in Rust will be familiar to you if you’ve used RAII
+> patterns.
+
+This pattern has a profound impact on the way Rust code is written. It may seem
+simple right now, but the behavior of code can be unexpected in more
+complicated situations when we want to have multiple variables use the data
+we’ve allocated on the heap. Let’s explore some of those situations now.
+
+#### Ways Variables and Data Interact: Move
+
+Multiple variables can interact with the same data in different ways in Rust.
+Let’s look at an example using an integer in Listing 4-2.
+
+```
+ let x = 5;
+ let y = x;
+```
+
+Listing 4-2: Assigning the integer value of variable `x` to `y`
+
+We can probably guess what this is doing: “bind the value `5` to `x`; then make
+a copy of the value in `x` and bind it to `y`.” We now have two variables, `x`
+and `y`, and both equal `5`. This is indeed what is happening, because integers
+are simple values with a known, fixed size, and these two `5` values are pushed
+onto the stack.
+
+Now let’s look at the `String` version:
+
+```
+ let s1 = String::from("hello");
+ let s2 = s1;
+```
+
+This looks very similar, so we might assume that the way it works would be the
+same: that is, the second line would make a copy of the value in `s1` and bind
+it to `s2`. But this isn’t quite what happens.
+
+Take a look at Figure 4-1 to see what is happening to `String` under the
+covers. A `String` is made up of three parts, shown on the left: a pointer to
+the memory that holds the contents of the string, a length, and a capacity.
+This group of data is stored on the stack. On the right is the memory on the
+heap that holds the contents.
+
+<img alt="String in memory" src="img/trpl04-01.svg" class="center" style="width: 50%;" />
+
+<!--- This might be me being a bit nitpicky - when you show what the string looks like
+in memory, we're showing indices for data pointed to by ptr. I have a bit of a knee-jerk
+reaction here since we don't think of strings has having indices in Rust (because of UTF-8)
+Not sure if it's well enough alone, or if it might be better for the ptr to point at
+at cells of memory without giving them indices.
+
+Something like:
+
+[ptr | --] -> [h][e][l][l][o]
+[len | 5]
+[capacity | 5]
+/JT --->
+<!-- I think this is a bit in the weeds, not making any change here /Carol -->
+
+Figure 4-1: Representation in memory of a `String` holding the value `"hello"`
+bound to `s1`
+
+The length is how much memory, in bytes, the contents of the `String` is
+currently using. The capacity is the total amount of memory, in bytes, that the
+`String` has received from the allocator. The difference between length
+and capacity matters, but not in this context, so for now, it’s fine to ignore
+the capacity.
+
+When we assign `s1` to `s2`, the `String` data is copied, meaning we copy the
+pointer, the length, and the capacity that are on the stack. We do not copy the
+data on the heap that the pointer refers to. In other words, the data
+representation in memory looks like Figure 4-2.
+
+<img alt="s1 and s2 pointing to the same value" src="img/trpl04-02.svg" class="center" style="width: 50%;" />
+
+Figure 4-2: Representation in memory of the variable `s2` that has a copy of
+the pointer, length, and capacity of `s1`
+
+The representation does *not* look like Figure 4-3, which is what memory would
+look like if Rust instead copied the heap data as well. If Rust did this, the
+operation `s2 = s1` could be very expensive in terms of runtime performance if
+the data on the heap were large.
+
+<img alt="s1 and s2 to two places" src="img/trpl04-03.svg" class="center" style="width: 50%;" />
+
+Figure 4-3: Another possibility for what `s2 = s1` might do if Rust copied the
+heap data as well
+
+Earlier, we said that when a variable goes out of scope, Rust automatically
+calls the `drop` function and cleans up the heap memory for that variable. But
+Figure 4-2 shows both data pointers pointing to the same location. This is a
+problem: when `s2` and `s1` go out of scope, they will both try to free the
+same memory. This is known as a *double free* error and is one of the memory
+safety bugs we mentioned previously. Freeing memory twice can lead to memory
+corruption, which can potentially lead to security vulnerabilities.
+
+To ensure memory safety, after the line `let s2 = s1`, Rust considers `s1` as
+no longer valid. Therefore, Rust doesn’t need to free anything when `s1` goes
+out of scope. Check out what happens when you try to use `s1` after `s2` is
+created; it won’t work:
+
+```
+let s1 = String::from("hello");
+let s2 = s1;
+
+println!("{}, world!", s1);
+```
+
+You’ll get an error like this because Rust prevents you from using the
+invalidated reference:
+
+```
+error[E0382]: borrow of moved value: `s1`
+ --> src/main.rs:5:28
+ |
+2 | let s1 = String::from("hello");
+ | -- move occurs because `s1` has type `String`, which does not implement the `Copy` trait
+3 | let s2 = s1;
+ | -- value moved here
+4 |
+5 | println!("{}, world!", s1);
+ | ^^ value borrowed here after move
+```
+
+If you’ve heard the terms *shallow copy* and *deep copy* while working with
+other languages, the concept of copying the pointer, length, and capacity
+without copying the data probably sounds like making a shallow copy. But
+because Rust also invalidates the first variable, instead of calling it a
+shallow copy, it’s known as a *move*. In this example, we would say that
+`s1` was *moved* into `s2`. So what actually happens is shown in Figure 4-4.
+
+<img alt="s1 moved to s2" src="img/trpl04-04.svg" class="center" style="width: 50%;" />
+
+Figure 4-4: Representation in memory after `s1` has been invalidated
+
+That solves our problem! With only `s2` valid, when it goes out of scope, it
+alone will free the memory, and we’re done.
+
+In addition, there’s a design choice that’s implied by this: Rust will never
+automatically create “deep” copies of your data. Therefore, any *automatic*
+copying can be assumed to be inexpensive in terms of runtime performance.
+
+#### Ways Variables and Data Interact: Clone
+
+If we *do* want to deeply copy the heap data of the `String`, not just the
+stack data, we can use a common method called `clone`. We’ll discuss method
+syntax in Chapter 5, but because methods are a common feature in many
+programming languages, you’ve probably seen them before.
+
+Here’s an example of the `clone` method in action:
+
+```
+let s1 = String::from("hello");
+let s2 = s1.clone();
+
+println!("s1 = {}, s2 = {}", s1, s2);
+```
+
+This works just fine and explicitly produces the behavior shown in Figure 4-3,
+where the heap data *does* get copied.
+
+When you see a call to `clone`, you know that some arbitrary code is being
+executed and that code may be expensive. It’s a visual indicator that something
+different is going on.
+
+#### Stack-Only Data: Copy
+
+There’s another wrinkle we haven’t talked about yet. This code using integers –
+part of which was shown in Listing 4-2 – works and is valid:
+
+```
+let x = 5;
+let y = x;
+
+println!("x = {}, y = {}", x, y);
+```
+
+But this code seems to contradict what we just learned: we don’t have a call to
+`clone`, but `x` is still valid and wasn’t moved into `y`.
+
+The reason is that types such as integers that have a known size at compile
+time are stored entirely on the stack, so copies of the actual values are quick
+to make. That means there’s no reason we would want to prevent `x` from being
+valid after we create the variable `y`. In other words, there’s no difference
+between deep and shallow copying here, so calling `clone` wouldn’t do anything
+different from the usual shallow copying and we can leave it out.
+
+Rust has a special annotation called the `Copy` trait that we can place on
+types that are stored on the stack, as integers are (we’ll talk more about
+traits in Chapter 10). If a type implements the `Copy` trait, variables that
+use it do not move, but rather are trivially copied, making them still valid
+after assignment to another variable.
+
+<!--- an older variable that uses that type, we mean? /LC --->
+<!-- I removed "older" here, I don't think that was quite right-- this sentence
+is trying to describe the line `let y = x` where the variable `x` is assigned
+to `y`. The variables must be the same type because they're getting the same
+value, so "that uses that type" isn't relevant. Let me know if there's any
+aspects that are still confusing here. /Carol -->
+<!-- JT, is this all clear in the text? /LC -->
+<!--- I think this is fine. When I teach it, I tend to stress *move* and *copy*
+so that they can build up that framework. So my slight tweak to the above might
+be:
+
+"If a type implements the `Copy` trait, variables that use it do not move but rather are
+trivially copied, making them still valid after assignment to another variable."
+/JT --->
+<!-- Took this suggestion! /Carol -->
+
+Rust won’t let us annotate a type with `Copy` if the type, or any of its parts,
+has implemented the `Drop` trait. If the type needs something special to happen
+when the value goes out of scope and we add the `Copy` annotation to that type,
+we’ll get a compile-time error. To learn about how to add the `Copy` annotation
+to your type to implement the trait, see “Derivable Traits” in Appendix C.
+
+So what types implement the `Copy` trait? You can check the documentation for
+the given type to be sure, but as a general rule, any group of simple scalar
+values can implement `Copy`, and nothing that requires allocation or is some
+form of resource can implement `Copy`. Here are some of the types that
+implement `Copy`:
+
+* All the integer types, such as `u32`.
+* The Boolean type, `bool`, with values `true` and `false`.
+* All the floating point types, such as `f64`.
+* The character type, `char`.
+* Tuples, if they only contain types that also implement `Copy`. For example,
+ `(i32, i32)` implements `Copy`, but `(i32, String)` does not.
+
+### Ownership and Functions
+
+The mechanics of passing a value to a function are similar to those when
+assigning a value to a variable. Passing a variable to a function will move or
+copy, just as assignment does. Listing 4-3 has an example with some annotations
+showing where variables go into and out of scope.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let s = String::from("hello"); // s comes into scope
+
+ takes_ownership(s); // s's value moves into the function...
+ // ... and so is no longer valid here
+
+ let x = 5; // x comes into scope
+
+ makes_copy(x); // x would move into the function,
+ // but i32 is Copy, so it's okay to still
+ // use x afterward
+
+} // Here, x goes out of scope, then s. But because s's value was moved, nothing
+ // special happens.
+
+fn takes_ownership(some_string: String) { // some_string comes into scope
+ println!("{}", some_string);
+} // Here, some_string goes out of scope and `drop` is called. The backing
+ // memory is freed.
+
+fn makes_copy(some_integer: i32) { // some_integer comes into scope
+ println!("{}", some_integer);
+} // Here, some_integer goes out of scope. Nothing special happens.
+```
+
+Listing 4-3: Functions with ownership and scope annotated
+
+If we tried to use `s` after the call to `takes_ownership`, Rust would throw a
+compile-time error. These static checks protect us from mistakes. Try adding
+code to `main` that uses `s` and `x` to see where you can use them and where
+the ownership rules prevent you from doing so.
+
+### Return Values and Scope
+
+Returning values can also transfer ownership. Listing 4-4 shows an example
+of a function that returns some value, with similar annotations as those in
+Listing 4-3.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let s1 = gives_ownership(); // gives_ownership moves its return
+ // value into s1
+
+ let s2 = String::from("hello"); // s2 comes into scope
+
+ let s3 = takes_and_gives_back(s2); // s2 is moved into
+ // takes_and_gives_back, which also
+ // moves its return value into s3
+} // Here, s3 goes out of scope and is dropped. s2 was moved, so nothing
+ // happens. s1 goes out of scope and is dropped.
+
+fn gives_ownership() -> String { // gives_ownership will move its
+ // return value into the function
+ // that calls it
+
+ let some_string = String::from("yours"); // some_string comes into scope
+
+ some_string // some_string is returned and
+ // moves out to the calling
+ // function
+}
+
+// This function takes a String and returns one
+fn takes_and_gives_back(a_string: String) -> String { // a_string comes into
+ // scope
+
+ a_string // a_string is returned and moves out to the calling function
+}
+```
+
+Listing 4-4: Transferring ownership of return values
+
+The ownership of a variable follows the same pattern every time: assigning a
+value to another variable moves it. When a variable that includes data on the
+heap goes out of scope, the value will be cleaned up by `drop` unless ownership
+of the data has been moved to another variable.
+
+While this works, taking ownership and then returning ownership with every
+function is a bit tedious. What if we want to let a function use a value but
+not take ownership? It’s quite annoying that anything we pass in also needs to
+be passed back if we want to use it again, in addition to any data resulting
+from the body of the function that we might want to return as well.
+
+Rust does let us return multiple values using a tuple, as shown in Listing 4-5.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let s1 = String::from("hello");
+
+ let (s2, len) = calculate_length(s1);
+
+ println!("The length of '{}' is {}.", s2, len);
+}
+
+fn calculate_length(s: String) -> (String, usize) {
+ let length = s.len(); // len() returns the length of a String
+
+ (s, length)
+}
+```
+
+Listing 4-5: Returning ownership of parameters
+
+But this is too much ceremony and a lot of work for a concept that should be
+common. Luckily for us, Rust has a feature for using a value without
+transferring ownership, called *references*.
+
+## References and Borrowing
+
+The issue with the tuple code in Listing 4-5 is that we have to return the
+`String` to the calling function so we can still use the `String` after the
+call to `calculate_length`, because the `String` was moved into
+`calculate_length`. Instead, we can provide a reference to the `String` value.
+A *reference* is like a pointer in that it’s an address we can follow to access
+the data stored at that address; that data is owned by some other variable.
+Unlike a pointer, a reference is guaranteed to point to a valid value of a
+particular type for the life of that reference.
+
+<!--- Possible wording tweak: "a reference is guaranteed to point to a valid value of a
+particular type for the life of that reference" or "a reference is always guaranteed
+to point to a valid value of a particular type"
+/JT --->
+<!-- Took this suggestion! /Carol -->
+
+Here is how you would define and use a `calculate_length` function that has a
+reference to an object as a parameter instead of taking ownership of the value:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let s1 = String::from("hello");
+
+ let len = calculate_length(&s1);
+
+ println!("The length of '{}' is {}.", s1, len);
+}
+
+fn calculate_length(s: &String) -> usize {
+ s.len()
+}
+```
+
+First, notice that all the tuple code in the variable declaration and the
+function return value is gone. Second, note that we pass `&s1` into
+`calculate_length` and, in its definition, we take `&String` rather than
+`String`. These ampersands represent *references*, and they allow you to refer
+to some value without taking ownership of it. Figure 4-5 depicts this concept.
+
+<img alt="&String s pointing at String s1" src="img/trpl04-05.svg" class="center" />
+
+Figure 4-5: A diagram of `&String s` pointing at `String s1`
+
+> Note: The opposite of referencing by using `&` is *dereferencing*, which is
+> accomplished with the dereference operator, `*`. We’ll see some uses of the
+> dereference operator in Chapter 8 and discuss details of dereferencing in
+> Chapter 15.
+
+Let’s take a closer look at the function call here:
+
+```
+let s1 = String::from("hello");
+
+let len = calculate_length(&s1);
+```
+
+The `&s1` syntax lets us create a reference that *refers* to the value of `s1`
+but does not own it. Because it does not own it, the value it points to will
+not be dropped when the reference stops being used.
+
+Likewise, the signature of the function uses `&` to indicate that the type of
+the parameter `s` is a reference. Let’s add some explanatory annotations:
+
+```
+fn calculate_length(s: &String) -> usize { // s is a reference to a String
+ s.len()
+} // Here, s goes out of scope. But because it does not have ownership of what
+ // it refers to, it is not dropped.
+```
+
+The scope in which the variable `s` is valid is the same as any function
+parameter’s scope, but the value pointed to by the reference is not dropped
+when `s` stops being used because `s` doesn’t have ownership. When functions
+have references as parameters instead of the actual values, we won’t need to
+return the values in order to give back ownership, because we never had
+ownership.
+
+We call the action of creating a reference *borrowing*. As in real life, if a
+person owns something, you can borrow it from them. When you’re done, you have
+to give it back. You don’t own it.
+
+So what happens if we try to modify something we’re borrowing? Try the code in
+Listing 4-6. Spoiler alert: it doesn’t work!
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let s = String::from("hello");
+
+ change(&s);
+}
+
+fn change(some_string: &String) {
+ some_string.push_str(", world");
+}
+```
+
+Listing 4-6: Attempting to modify a borrowed value
+
+Here’s the error:
+
+```
+error[E0596]: cannot borrow `*some_string` as mutable, as it is behind a `&` reference
+ --> src/main.rs:8:5
+ |
+7 | fn change(some_string: &String) {
+ | ------- help: consider changing this to be a mutable reference: `&mut String`
+8 | some_string.push_str(", world");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `some_string` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+```
+
+Just as variables are immutable by default, so are references. We’re not
+allowed to modify something we have a reference to.
+
+### Mutable References
+
+We can fix the code from Listing 4-6 to allow us to modify a borrowed value
+with just a few small tweaks that use, instead, a *mutable reference*:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut s = String::from("hello");
+
+ change(&mut s);
+}
+
+fn change(some_string: &mut String) {
+ some_string.push_str(", world");
+}
+```
+
+First, we change `s` to be `mut`. Then we create a mutable reference with `&mut
+s` where we call the `change` function, and update the function signature to
+accept a mutable reference with `some_string: &mut String`. This makes it very
+clear that the `change` function will mutate the value it borrows.
+
+Mutable references have one big restriction: if you have a mutable reference to
+a value, you can have no other references to that value. This code that
+attempts to create two mutable references to `s` will fail:
+
+<!--- Clarification: "Mutable references have one big restriction: if you have a
+mutable reference to a value, you can have no other references to that value."
+This covers both not having two mutable references and having a mutable references
+and an immutable reference to the same value.
+/JT --->
+<!-- Took this suggestion! /Carol -->
+
+Filename: src/main.rs
+
+```
+ let mut s = String::from("hello");
+
+ let r1 = &mut s;
+ let r2 = &mut s;
+
+ println!("{}, {}", r1, r2);
+```
+
+Here’s the error:
+
+```
+error[E0499]: cannot borrow `s` as mutable more than once at a time
+ --> src/main.rs:5:14
+ |
+4 | let r1 = &mut s;
+ | ------ first mutable borrow occurs here
+5 | let r2 = &mut s;
+ | ^^^^^^ second mutable borrow occurs here
+6 |
+7 | println!("{}, {}", r1, r2);
+ | -- first borrow later used here
+```
+
+This error says that this code is invalid because we cannot borrow `s` as
+mutable more than once at a time. The first mutable borrow is in `r1` and must
+last until it’s used in the `println!`, but between the creation of that
+mutable reference and its usage, we tried to create another mutable reference
+in `r2` that borrows the same data as `r1`.
+
+The restriction preventing multiple mutable references to the same data at the
+same time allows for mutation but in a very controlled fashion. It’s something
+that new Rustaceans struggle with, because most languages let you mutate
+whenever you’d like. The benefit of having this restriction is that Rust can
+prevent data races at compile time. A *data race* is similar to a race
+condition and happens when these three behaviors occur:
+
+* Two or more pointers access the same data at the same time.
+* At least one of the pointers is being used to write to the data.
+* There’s no mechanism being used to synchronize access to the data.
+
+Data races cause undefined behavior and can be difficult to diagnose and fix
+when you’re trying to track them down at runtime; Rust prevents this problem
+by refusing to compile code with data races!
+
+As always, we can use curly brackets to create a new scope, allowing for
+multiple mutable references, just not *simultaneous* ones:
+
+```
+let mut s = String::from("hello");
+
+{
+ let r1 = &mut s;
+} // r1 goes out of scope here, so we can make a new reference with no problems.
+
+let r2 = &mut s;
+```
+
+Rust enforces a similar rule for combining mutable and immutable references.
+This code results in an error:
+
+```
+let mut s = String::from("hello");
+
+let r1 = &s; // no problem
+let r2 = &s; // no problem
+let r3 = &mut s; // BIG PROBLEM
+
+println!("{}, {}, and {}", r1, r2, r3);
+```
+
+Here’s the error:
+
+```
+error[E0502]: cannot borrow `s` as mutable because it is also borrowed as immutable
+ --> src/main.rs:6:14
+ |
+4 | let r1 = &s; // no problem
+ | -- immutable borrow occurs here
+5 | let r2 = &s; // no problem
+6 | let r3 = &mut s; // BIG PROBLEM
+ | ^^^^^^ mutable borrow occurs here
+7 |
+8 | println!("{}, {}, and {}", r1, r2, r3);
+ | -- immutable borrow later used here
+```
+
+Whew! We *also* cannot have a mutable reference while we have an immutable one
+to the same value.
+
+Users of an immutable reference don’t expect the value to suddenly change out
+from under them! However, multiple immutable references are allowed because no
+one who is just reading the data has the ability to affect anyone else’s
+reading of the data.
+
+Note that a reference’s scope starts from where it is introduced and continues
+through the last time that reference is used. For instance, this code will
+compile because the last usage of the immutable references, the `println!`,
+occurs before the mutable reference is introduced:
+
+```
+let mut s = String::from("hello");
+
+let r1 = &s; // no problem
+let r2 = &s; // no problem
+println!("{} and {}", r1, r2);
+// variables r1 and r2 will not be used after this point
+
+let r3 = &mut s; // no problem
+println!("{}", r3);
+```
+
+The scopes of the immutable references `r1` and `r2` end after the `println!`
+where they are last used, which is before the mutable reference `r3` is
+created. These scopes don’t overlap, so this code is allowed. The ability of
+the compiler to tell that a reference is no longer being used at a point before
+the end of the scope is called *Non-Lexical Lifetimes* (NLL for short), and you
+can read more about it in The Edition Guide at
+*https://doc.rust-lang.org/edition-guide/rust-2018/ownership-and-lifetimes/non-lexical-lifetimes.html*.
+
+Even though borrowing errors may be frustrating at times, remember that it’s
+the Rust compiler pointing out a potential bug early (at compile time rather
+than at runtime) and showing you exactly where the problem is. Then you don’t
+have to track down why your data isn’t what you thought it was.
+
+### Dangling References
+
+In languages with pointers, it’s easy to erroneously create a *dangling
+pointer*--a pointer that references a location in memory that may have been
+given to someone else--by freeing some memory while preserving a pointer to
+that memory. In Rust, by contrast, the compiler guarantees that references will
+never be dangling references: if you have a reference to some data, the
+compiler will ensure that the data will not go out of scope before the
+reference to the data does.
+
+Let’s try to create a dangling reference to see how Rust prevents them with a
+compile-time error:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let reference_to_nothing = dangle();
+}
+
+fn dangle() -> &String {
+ let s = String::from("hello");
+
+ &s
+}
+```
+
+Here’s the error:
+
+```
+error[E0106]: missing lifetime specifier
+ --> src/main.rs:5:16
+ |
+5 | fn dangle() -> &String {
+ | ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
+help: consider using the `'static` lifetime
+ |
+5 | fn dangle() -> &'static String {
+ | ~~~~~~~~
+```
+
+This error message refers to a feature we haven’t covered yet: lifetimes. We’ll
+discuss lifetimes in detail in Chapter 10. But, if you disregard the parts
+about lifetimes, the message does contain the key to why this code is a problem:
+
+```
+this function's return type contains a borrowed value, but there is no value
+for it to be borrowed from
+```
+
+Let’s take a closer look at exactly what’s happening at each stage of our
+`dangle` code:
+
+Filename: src/main.rs
+
+```
+fn dangle() -> &String { // dangle returns a reference to a String
+
+ let s = String::from("hello"); // s is a new String
+
+ &s // we return a reference to the String, s
+} // Here, s goes out of scope, and is dropped. Its memory goes away.
+ // Danger!
+```
+
+Because `s` is created inside `dangle`, when the code of `dangle` is finished,
+`s` will be deallocated. But we tried to return a reference to it. That means
+this reference would be pointing to an invalid `String`. That’s no good! Rust
+won’t let us do this.
+
+The solution here is to return the `String` directly:
+
+```
+fn no_dangle() -> String {
+ let s = String::from("hello");
+
+ s
+}
+```
+
+This works without any problems. Ownership is moved out, and nothing is
+deallocated.
+
+### The Rules of References
+
+Let’s recap what we’ve discussed about references:
+
+* At any given time, you can have *either* one mutable reference *or* any
+ number of immutable references.
+* References must always be valid.
+
+Next, we’ll look at a different kind of reference: slices.
+
+## The Slice Type
+
+*Slices* let you reference a contiguous sequence of elements in a collection
+rather than the whole collection. A slice is a kind of reference, so it does
+not have ownership.
+
+Here’s a small programming problem: write a function that takes a string of
+words separated by spaces and returns the first word it finds in that string.
+If the function doesn’t find a space in the string, the whole string must be
+one word, so the entire string should be returned.
+
+<!--- Do we want to clarify this is for words separated by spaces?
+Not all languages use spaces to separate words:
+https://www.w3.org/International/articles/typography/linebreak.en#whatisword
+/JT --->
+<!-- Took this suggestion! /Carol -->
+
+Let’s work through how we’d write the signature of this function without using
+slices, to understand the problem that slices will solve:
+
+```
+fn first_word(s: &String) -> ?
+```
+
+The `first_word` function has a `&String` as a parameter. We don’t want
+ownership, so this is fine. But what should we return? We don’t really have a
+way to talk about *part* of a string. However, we could return the index of the
+end of the word, indicated by a space. Let’s try that, as shown in Listing 4-7.
+
+Filename: src/main.rs
+
+```
+fn first_word(s: &String) -> usize {
+ [1] let bytes = s.as_bytes();
+
+ for (i, &item)[2] in bytes.iter()[3].enumerate() {
+ [4] if item == b' ' {
+ return i;
+ }
+ }
+
+ [5] s.len()
+}
+```
+
+Listing 4-7: The `first_word` function that returns a byte index value into the
+`String` parameter
+
+Because we need to go through the `String` element by element and check whether
+a value is a space, we’ll convert our `String` to an array of bytes using the
+`as_bytes` method [1].
+
+Next, we create an iterator over the array of bytes using the `iter` method [3].
+We’ll discuss iterators in more detail in Chapter 13. For now, know that `iter`
+is a method that returns each element in a collection and that `enumerate`
+wraps the result of `iter` and returns each element as part of a tuple instead.
+The first element of the tuple returned from `enumerate` is the index, and the
+second element is a reference to the element. This is a bit more convenient
+than calculating the index ourselves.
+
+Because the `enumerate` method returns a tuple, we can use patterns to
+destructure that tuple. We’ll be discussing patterns more in Chapter 6. In the
+`for` loop, we specify a pattern that has `i` for the index in the tuple and
+`&item` for the single byte in the tuple [2]. Because we get a reference to the
+element from `.iter().enumerate()`, we use `&` in the pattern.
+
+Inside the `for` loop, we search for the byte that represents the space by
+using the byte literal syntax [4]. If we find a space, we return the position.
+Otherwise, we return the length of the string by using `s.len()` [5].
+
+We now have a way to find out the index of the end of the first word in the
+string, but there’s a problem. We’re returning a `usize` on its own, but it’s
+only a meaningful number in the context of the `&String`. In other words,
+because it’s a separate value from the `String`, there’s no guarantee that it
+will still be valid in the future. Consider the program in Listing 4-8 that
+uses the `first_word` function from Listing 4-7.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut s = String::from("hello world");
+
+ let word = first_word(&s); // word will get the value 5
+
+ s.clear(); // this empties the String, making it equal to ""
+
+ // word still has the value 5 here, but there's no more string that
+ // we could meaningfully use the value 5 with. word is now totally invalid!
+}
+```
+
+Listing 4-8: Storing the result from calling the `first_word` function and then
+changing the `String` contents
+
+This program compiles without any errors and would also do so if we used `word`
+after calling `s.clear()`. Because `word` isn’t connected to the state of `s`
+at all, `word` still contains the value `5`. We could use that value `5` with
+the variable `s` to try to extract the first word out, but this would be a bug
+because the contents of `s` have changed since we saved `5` in `word`.
+
+Having to worry about the index in `word` getting out of sync with the data in
+`s` is tedious and error prone! Managing these indices is even more brittle if
+we write a `second_word` function. Its signature would have to look like this:
+
+```
+fn second_word(s: &String) -> (usize, usize) {
+```
+
+Now we’re tracking a starting *and* an ending index, and we have even more
+values that were calculated from data in a particular state but aren’t tied to
+that state at all. We have three unrelated variables floating around that
+need to be kept in sync.
+
+Luckily, Rust has a solution to this problem: string slices.
+
+### String Slices
+
+A *string slice* is a reference to part of a `String`, and it looks like this:
+
+```
+ let s = String::from("hello world");
+
+ let hello = &s[0..5];
+ let world = &s[6..11];
+```
+
+Rather than a reference to the entire `String`, `hello` is a reference to a
+portion of the `String`, specified in the extra `[0..5]` bit. We create slices
+using a range within brackets by specifying `[starting_index..ending_index]`,
+where `starting_index` is the first position in the slice and `ending_index` is
+one more than the last position in the slice. Internally, the slice data
+structure stores the starting position and the length of the slice, which
+corresponds to `ending_index` minus `starting_index`. So in the case of `let
+world = &s[6..11];`, `world` would be a slice that contains a pointer to the
+byte at index 6 of `s` with a length value of 5.
+
+Figure 4-6 shows this in a diagram.
+
+<img alt="world containing a pointer to the byte at index 6 of String s and a length 5" src="img/trpl04-06.svg" class="center" style="width: 50%;" />
+
+Figure 4-6: String slice referring to part of a `String`
+
+With Rust’s `..` range syntax, if you want to start at index zero, you can drop
+the value before the two periods. In other words, these are equal:
+
+```
+let s = String::from("hello");
+
+let slice = &s[0..2];
+let slice = &s[..2];
+```
+
+By the same token, if your slice includes the last byte of the `String`, you
+can drop the trailing number. That means these are equal:
+
+```
+let s = String::from("hello");
+
+let len = s.len();
+
+let slice = &s[3..len];
+let slice = &s[3..];
+```
+
+You can also drop both values to take a slice of the entire string. So these
+are equal:
+
+```
+let s = String::from("hello");
+
+let len = s.len();
+
+let slice = &s[0..len];
+let slice = &s[..];
+```
+
+> Note: String slice range indices must occur at valid UTF-8 character
+> boundaries. If you attempt to create a string slice in the middle of a
+> multibyte character, your program will exit with an error. For the purposes
+> of introducing string slices, we are assuming ASCII only in this section; a
+> more thorough discussion of UTF-8 handling is in the “Storing UTF-8 Encoded
+> Text with Strings” section of Chapter 8.
+
+With all this information in mind, let’s rewrite `first_word` to return a
+slice. The type that signifies “string slice” is written as `&str`:
+
+Filename: src/main.rs
+
+```
+fn first_word(s: &String) -> &str {
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+```
+
+We get the index for the end of the word in the same way as we did in Listing
+4-7, by looking for the first occurrence of a space. When we find a space, we
+return a string slice using the start of the string and the index of the space
+as the starting and ending indices.
+
+Now when we call `first_word`, we get back a single value that is tied to the
+underlying data. The value is made up of a reference to the starting point of
+the slice and the number of elements in the slice.
+
+Returning a slice would also work for a `second_word` function:
+
+```
+fn second_word(s: &String) -> &str {
+```
+
+We now have a straightforward API that’s much harder to mess up, because the
+compiler will ensure the references into the `String` remain valid. Remember
+the bug in the program in Listing 4-8, when we got the index to the end of the
+first word but then cleared the string so our index was invalid? That code was
+logically incorrect but didn’t show any immediate errors. The problems would
+show up later if we kept trying to use the first word index with an emptied
+string. Slices make this bug impossible and let us know we have a problem with
+our code much sooner. Using the slice version of `first_word` will throw a
+compile-time error:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut s = String::from("hello world");
+
+ let word = first_word(&s);
+
+ s.clear(); // error!
+
+ println!("the first word is: {}", word);
+}
+```
+
+Here’s the compiler error:
+
+```
+error[E0502]: cannot borrow `s` as mutable because it is also borrowed as
+immutable
+ --> src/main.rs:18:5
+ |
+16 | let word = first_word(&s);
+ | -- immutable borrow occurs here
+17 |
+18 | s.clear(); // error!
+ | ^^^^^^^^^ mutable borrow occurs here
+19 |
+20 | println!("the first word is: {}", word);
+ | ---- immutable borrow later used here
+```
+
+Recall from the borrowing rules that if we have an immutable reference to
+something, we cannot also take a mutable reference. Because `clear` needs to
+truncate the `String`, it needs to get a mutable reference. The `println!`
+after the call to `clear` uses the reference in `word`, so the immutable
+reference must still be active at that point. Rust disallows the mutable
+reference in `clear` and the immutable reference in `word` from existing at the
+same time, and compilation fails. Not only has Rust made our API easier to use,
+but it has also eliminated an entire class of errors at compile time!
+
+#### String Literals Are Slices
+
+Recall that we talked about string literals being stored inside the binary. Now
+that we know about slices, we can properly understand string literals:
+
+```
+let s = "Hello, world!";
+```
+
+The type of `s` here is `&str`: it’s a slice pointing to that specific point of
+the binary. This is also why string literals are immutable; `&str` is an
+immutable reference.
+
+#### String Slices as Parameters
+
+Knowing that you can take slices of literals and `String` values leads us to
+one more improvement on `first_word`, and that’s its signature:
+
+```
+fn first_word(s: &String) -> &str {
+```
+
+A more experienced Rustacean would write the signature shown in Listing 4-9
+instead because it allows us to use the same function on both `&String` values
+and `&str` values.
+
+```
+fn first_word(s: &str) -> &str {
+```
+
+Listing 4-9: Improving the `first_word` function by using a string slice for
+the type of the `s` parameter
+
+If we have a string slice, we can pass that directly. If we have a `String`, we
+can pass a slice of the `String` or a reference to the `String`. This
+flexibility takes advantage of *deref coercions*, a feature we will cover in
+the “Implicit Deref Coercions with Functions and Methods” section of Chapter
+15. Defining a function to take a string slice instead of a reference to a
+`String` makes our API more general and useful without losing any functionality:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let my_string = String::from("hello world");
+
+ // `first_word` works on slices of `String`s, whether partial or whole
+ let word = first_word(&my_string[0..6]);
+ let word = first_word(&my_string[..]);
+ // `first_word` also works on references to `String`s, which are equivalent
+ // to whole slices of `String`s
+ let word = first_word(&my_string);
+
+ let my_string_literal = "hello world";
+
+ // `first_word` works on slices of string literals, whether partial or whole
+ let word = first_word(&my_string_literal[0..6]);
+ let word = first_word(&my_string_literal[..]);
+
+ // Because string literals *are* string slices already,
+ // this works too, without the slice syntax!
+ let word = first_word(my_string_literal);
+}
+```
+
+### Other Slices
+
+String slices, as you might imagine, are specific to strings. But there’s a
+more general slice type, too. Consider this array:
+
+```
+let a = [1, 2, 3, 4, 5];
+```
+
+Just as we might want to refer to a part of a string, we might want to refer
+to part of an array. We’d do so like this:
+
+```
+let a = [1, 2, 3, 4, 5];
+
+let slice = &a[1..3];
+
+assert_eq!(slice, &[2, 3]);
+```
+
+This slice has the type `&[i32]`. It works the same way as string slices do, by
+storing a reference to the first element and a length. You’ll use this kind of
+slice for all sorts of other collections. We’ll discuss these collections in
+detail when we talk about vectors in Chapter 8.
+
+## Summary
+
+The concepts of ownership, borrowing, and slices ensure memory safety in Rust
+programs at compile time. The Rust language gives you control over your memory
+usage in the same way as other systems programming languages, but having the
+owner of data automatically clean up that data when the owner goes out of scope
+means you don’t have to write and debug extra code to get this control.
+
+Ownership affects how lots of other parts of Rust work, so we’ll talk about
+these concepts further throughout the rest of the book. Let’s move on to
+Chapter 5 and look at grouping pieces of data together in a `struct`.
diff --git a/src/doc/book/nostarch/chapter05.md b/src/doc/book/nostarch/chapter05.md
new file mode 100644
index 000000000..356ba82af
--- /dev/null
+++ b/src/doc/book/nostarch/chapter05.md
@@ -0,0 +1,1073 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Using Structs to Structure Related Data
+
+A *struct*, or *structure*, is a custom data type that lets you package
+together and name multiple related values that make up a meaningful group. If
+you’re familiar with an object-oriented language, a *struct* is like an
+object’s data attributes. In this chapter, we’ll compare and contrast tuples
+with structs to build on what you already know and demonstrate when structs are
+a better way to group data.
+
+We’ll demonstrate how to define and instantiate structs. We’ll discuss how to
+define associated functions, especially the kind of associated functions called
+*methods*, to specify behavior associated with a struct type. Structs and enums
+(discussed in Chapter 6) are the building blocks for creating new types in your
+program’s domain to take full advantage of Rust’s compile time type checking.
+
+## Defining and Instantiating Structs
+
+Structs are similar to tuples, discussed in “The Tuple Type” section, in that
+both hold multiple related values. Like tuples, the pieces of a struct can be
+different types. Unlike with tuples, in a struct you’ll name each piece of data
+so it’s clear what the values mean. Adding these names means that structs are
+more flexible than tuples: you don’t have to rely on the order of the data to
+specify or access the values of an instance.
+
+To define a struct, we enter the keyword `struct` and name the entire struct. A
+struct’s name should describe the significance of the pieces of data being
+grouped together. Then, inside curly brackets, we define the names and types of
+the pieces of data, which we call *fields*. For example, Listing 5-1 shows a
+struct that stores information about a user account.
+
+```
+struct User {
+ active: bool,
+ username: String,
+ email: String,
+ sign_in_count: u64,
+}
+```
+
+Listing 5-1: A `User` struct definition
+
+To use a struct after we’ve defined it, we create an *instance* of that struct
+by specifying concrete values for each of the fields. We create an instance by
+stating the name of the struct and then add curly brackets containing `key:
+value` pairs, where the keys are the names of the fields and the values are the
+data we want to store in those fields. We don’t have to specify the fields in
+the same order in which we declared them in the struct. In other words, the
+struct definition is like a general template for the type, and instances fill
+in that template with particular data to create values of the type. For
+example, we can declare a particular user as shown in Listing 5-2.
+
+```
+fn main() {
+ let user1 = User {
+ email: String::from("someone@example.com"),
+ username: String::from("someusername123"),
+ active: true,
+ sign_in_count: 1,
+ };
+}
+```
+
+Listing 5-2: Creating an instance of the `User` struct
+
+To get a specific value from a struct, we use dot notation. For example, to
+access this user’s email address, we use `user1.email`. If the instance is
+mutable, we can change a value by using the dot notation and assigning into a
+particular field. Listing 5-3 shows how to change the value in the `email`
+field of a mutable `User` instance.
+
+<!--- Do we want to mention that `user1.email` will move the field? We can't
+just use `user1.email` multiple times re: "wherever we wanted
+to use this value"
+/JT --->
+<!-- I don't really want to mention that, but I did reword to avoid the
+implication that we can use the value wherever we wanted to. /Carol -->
+
+```
+fn main() {
+ let mut user1 = User {
+ email: String::from("someone@example.com"),
+ username: String::from("someusername123"),
+ active: true,
+ sign_in_count: 1,
+ };
+
+ user1.email = String::from("anotheremail@example.com");
+}
+```
+
+Listing 5-3: Changing the value in the `email` field of a `User` instance
+
+Note that the entire instance must be mutable; Rust doesn’t allow us to mark
+only certain fields as mutable. As with any expression, we can construct a new
+instance of the struct as the last expression in the function body to
+implicitly return that new instance.
+
+Listing 5-4 shows a `build_user` function that returns a `User` instance with
+the given email and username. The `active` field gets the value of `true`, and
+the `sign_in_count` gets a value of `1`.
+
+```
+fn build_user(email: String, username: String) -> User {
+ User {
+ email: email,
+ username: username,
+ active: true,
+ sign_in_count: 1,
+ }
+}
+```
+
+Listing 5-4: A `build_user` function that takes an email and username and
+returns a `User` instance
+
+It makes sense to name the function parameters with the same name as the struct
+fields, but having to repeat the `email` and `username` field names and
+variables is a bit tedious. If the struct had more fields, repeating each name
+would get even more annoying. Luckily, there’s a convenient shorthand!
+
+### Using the Field Init Shorthand
+
+Because the parameter names and the struct field names are exactly the same in
+Listing 5-4, we can use the *field init shorthand* syntax to rewrite
+`build_user` so that it behaves exactly the same but doesn’t have the
+repetition of `email` and `username`, as shown in Listing 5-5.
+
+```
+fn build_user(email: String, username: String) -> User {
+ User {
+ email,
+ username,
+ active: true,
+ sign_in_count: 1,
+ }
+}
+```
+
+Listing 5-5: A `build_user` function that uses field init shorthand because the
+`email` and `username` parameters have the same name as struct fields
+
+Here, we’re creating a new instance of the `User` struct, which has a field
+named `email`. We want to set the `email` field’s value to the value in the
+`email` parameter of the `build_user` function. Because the `email` field and
+the `email` parameter have the same name, we only need to write `email` rather
+than `email: email`.
+
+### Creating Instances From Other Instances With Struct Update Syntax
+
+It’s often useful to create a new instance of a struct that includes most of
+the values from another instance, but changes some. You can do this using
+*struct update syntax*.
+
+First, in Listing 5-6 we show how to create a new `User` instance in `user2`
+regularly, without the update syntax. We set a new value for `email` but
+otherwise use the same values from `user1` that we created in Listing 5-2.
+
+```
+fn main() {
+ // --snip--
+
+ let user2 = User {
+ active: user1.active,
+ username: user1.username,
+ email: String::from("another@example.com"),
+ sign_in_count: user1.sign_in_count,
+ };
+}
+```
+
+Listing 5-6: Creating a new `User` instance using one of the values from `user1`
+
+Using struct update syntax, we can achieve the same effect with less code, as
+shown in Listing 5-7. The syntax `..` specifies that the remaining fields not
+explicitly set should have the same value as the fields in the given instance.
+
+```
+fn main() {
+ // --snip--
+
+ let user2 = User {
+ email: String::from("another@example.com"),
+ ..user1
+ };
+}
+```
+
+Listing 5-7: Using struct update syntax to set a new `email` value for a `User`
+instance but use the rest of the values from `user1`
+
+The code in Listing 5-7 also creates an instance in `user2` that has a
+different value for `email` but has the same values for the `username`,
+`active`, and `sign_in_count` fields from `user1`. The `..user1` must come last
+to specify that any remaining fields should get their values from the
+corresponding fields in `user1`, but we can choose to specify values for as
+many fields as we want in any order, regardless of the order of the fields in
+the struct’s definition.
+
+Note that the struct update syntax uses `=` like an assignment; this is
+because it moves the data, just as we saw in the “Ways Variables and Data
+Interact: Move” section. In this example, we can no longer use `user1` after
+creating `user2` because the `String` in the `username` field of `user1` was
+moved into `user2`. If we had given `user2` new `String` values for both
+`email` and `username`, and thus only used the `active` and `sign_in_count`
+values from `user1`, then `user1` would still be valid after creating `user2`.
+The types of `active` and `sign_in_count` are types that implement the `Copy`
+trait, so the behavior we discussed in the “Stack-Only Data: Copy” section
+would apply.
+
+<!--- Misspelled "assignment" above.
+/JT --->
+<!-- Fixed! /Carol -->
+
+### Using Tuple Structs without Named Fields to Create Different Types
+
+Rust also supports structs that look similar to tuples, called *tuple
+structs*. Tuple structs have the added meaning the struct name provides but
+don’t have names associated with their fields; rather, they just have the types
+of the fields. Tuple structs are useful when you want to give the whole tuple a
+name and make the tuple a different type from other tuples, and when naming each
+field as in a regular struct would be verbose or redundant.
+
+To define a tuple struct, start with the `struct` keyword and the struct name
+followed by the types in the tuple. For example, here we define and use
+two tuple structs named `Color` and `Point`:
+
+```
+struct Color(i32, i32, i32);
+struct Point(i32, i32, i32);
+
+fn main() {
+ let black = Color(0, 0, 0);
+ let origin = Point(0, 0, 0);
+}
+```
+
+Note that the `black` and `origin` values are different types, because they’re
+instances of different tuple structs. Each struct you define is its own type,
+even though the fields within the struct might have the same types. For
+example, a function that takes a parameter of type `Color` cannot take a
+`Point` as an argument, even though both types are made up of three `i32`
+values. Otherwise, tuple struct instances are similar to tuples in that you can
+destructure them into their individual pieces, and you can use a `.` followed
+by the index to access an individual value.
+
+<!--- The last line above feels a bit misleading. There are related
+restrictions on tuple structs that don't apply to tuples.
+
+One example is you can't create a tuple struct with a tuple.
+```
+struct Color(i32, i32, i32);
+
+fn main() {
+ let x: Color = (1, 2, 3);
+}
+```
+
+You can't pass a tuple struct to something that expects a tuple, either.
+/JT --->
+<!-- I've reworded to avoid that implication /Carol -->
+
+### Unit-Like Structs Without Any Fields
+
+You can also define structs that don’t have any fields! These are called
+*unit-like structs* because they behave similarly to `()`, the unit type that
+we mentioned in “The Tuple Type” section. Unit-like structs can be useful when
+you need to implement a trait on some type but don’t have any data that you
+want to store in the type itself. We’ll discuss traits in Chapter 10. Here’s an
+example of declaring and instantiating a unit struct named `AlwaysEqual`:
+
+```
+struct AlwaysEqual;
+
+fn main() {
+ let subject = AlwaysEqual;
+}
+```
+
+To define `AlwaysEqual`, we use the `struct` keyword, the name we want, then a
+semicolon. No need for curly brackets or parentheses! Then we can get an
+instance of `AlwaysEqual` in the `subject` variable in a similar way: using the
+name we defined, without any curly brackets or parentheses. Imagine that later
+we’ll implement behavior for this type such that every instance of
+`AlwaysEqual` is always equal to every instance of any other type, perhaps to
+have a known result for testing purposes. We wouldn’t need any data to
+implement that behavior! You’ll see in Chapter 10 how to define traits and
+implement them on any type, including unit-like structs.
+
+> ### Ownership of Struct Data
+>
+> In the `User` struct definition in Listing 5-1, we used the owned `String`
+> type rather than the `&str` string slice type. This is a deliberate choice
+> because we want each instance of this struct to own all of its data and for
+> that data to be valid for as long as the entire struct is valid.
+>
+> It’s also possible for structs to store references to data owned by something
+> else, but to do so requires the use of *lifetimes*, a Rust feature that we’ll
+> discuss in Chapter 10. Lifetimes ensure that the data referenced by a struct
+> is valid for as long as the struct is. Let’s say you try to store a reference
+> in a struct without specifying lifetimes, like the following; this won’t work:
+>
+> Filename: src/main.rs
+>
+> ```
+> struct User {
+> username: &str,
+> email: &str,
+> sign_in_count: u64,
+> active: bool,
+> }
+>
+> fn main() {
+> let user1 = User {
+> email: "someone@example.com",
+> username: "someusername123",
+> active: true,
+> sign_in_count: 1,
+> };
+> }
+> ```
+>
+> The compiler will complain that it needs lifetime specifiers:
+>
+> ```
+> $ cargo run
+> Compiling structs v0.1.0 (file:///projects/structs)
+> error[E0106]: missing lifetime specifier
+> --> src/main.rs:3:15
+> |
+> 3 | username: &str,
+> | ^ expected named lifetime parameter
+> |
+> help: consider introducing a named lifetime parameter
+> |
+> 1 ~ struct User<'a> {
+> 2 | active: bool,
+> 3 ~ username: &'a str,
+> |
+>
+> error[E0106]: missing lifetime specifier
+> --> src/main.rs:4:12
+> |
+> 4 | email: &str,
+> | ^ expected named lifetime parameter
+> |
+> help: consider introducing a named lifetime parameter
+> |
+> 1 ~ struct User<'a> {
+> 2 | active: bool,
+> 3 | username: &str,
+> 4 ~ email: &'a str,
+> |
+> ```
+>
+> In Chapter 10, we’ll discuss how to fix these errors so you can store
+> references in structs, but for now, we’ll fix errors like these using owned
+> types like `String` instead of references like `&str`.
+
+## An Example Program Using Structs
+
+To understand when we might want to use structs, let’s write a program that
+calculates the area of a rectangle. We’ll start by using single variables, and
+then refactor the program until we’re using structs instead.
+
+Let’s make a new binary project with Cargo called *rectangles* that will take
+the width and height of a rectangle specified in pixels and calculate the area
+of the rectangle. Listing 5-8 shows a short program with one way of doing
+exactly that in our project’s *src/main.rs*.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let width1 = 30;
+ let height1 = 50;
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ area(width1, height1)
+ );
+}
+
+fn area(width: u32, height: u32) -> u32 {
+ width * height
+}
+```
+
+Listing 5-8: Calculating the area of a rectangle specified by separate width
+and height variables
+
+Now, run this program using `cargo run`:
+
+```
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.42s
+ Running `target/debug/rectangles`
+The area of the rectangle is 1500 square pixels.
+```
+
+This code succeeds in figuring out the area of the rectangle by calling the
+`area` function with each dimension, but we can do more to make this code clear
+and readable.
+
+The issue with this code is evident in the signature of `area`:
+
+```
+fn area(width: u32, height: u32) -> u32 {
+```
+
+The `area` function is supposed to calculate the area of one rectangle, but the
+function we wrote has two parameters, and it's not clear anywhere in our
+program that the parameters are related. It would be more readable and more
+manageable to group width and height together. We’ve already discussed one way
+we might do that in “The Tuple Type” section of Chapter 3: by using tuples.
+
+### Refactoring with Tuples
+
+Listing 5-9 shows another version of our program that uses tuples.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let rect1 = (30, 50);
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ area(rect1)
+ );
+}
+
+fn area(dimensions: (u32, u32)) -> u32 {
+ dimensions.0 * dimensions.1
+}
+```
+
+Listing 5-9: Specifying the width and height of the rectangle with a tuple
+
+In one way, this program is better. Tuples let us add a bit of structure, and
+we’re now passing just one argument. But in another way, this version is less
+clear: tuples don’t name their elements, so we have to index into the parts of
+the tuple, making our calculation less obvious.
+
+Mixing up the width and height wouldn’t matter for the area calculation, but if
+we want to draw the rectangle on the screen, it would matter! We would have to
+keep in mind that `width` is the tuple index `0` and `height` is the tuple
+index `1`. This would be even harder for someone else to figure out and keep in
+mind if they were to use our code. Because we haven’t conveyed the meaning of
+our data in our code, it’s now easier to introduce errors.
+
+### Refactoring with Structs: Adding More Meaning
+
+We use structs to add meaning by labeling the data. We can transform the tuple
+we’re using into a struct with a name for the whole as well as names for the
+parts, as shown in Listing 5-10.
+
+Filename: src/main.rs
+
+```
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ area(&rect1)
+ );
+}
+
+fn area(rectangle: &Rectangle) -> u32 {
+ rectangle.width * rectangle.height
+}
+```
+
+Listing 5-10: Defining a `Rectangle` struct
+
+Here we’ve defined a struct and named it `Rectangle`. Inside the curly
+brackets, we defined the fields as `width` and `height`, both of which have
+type `u32`. Then in `main`, we created a particular instance of `Rectangle`
+that has a width of 30 and a height of 50.
+
+Our `area` function is now defined with one parameter, which we’ve named
+`rectangle`, whose type is an immutable borrow of a struct `Rectangle`
+instance. As mentioned in Chapter 4, we want to borrow the struct rather than
+take ownership of it. This way, `main` retains its ownership and can continue
+using `rect1`, which is the reason we use the `&` in the function signature and
+where we call the function.
+
+The `area` function accesses the `width` and `height` fields of the `Rectangle`
+instance (note that accessing fields of a borrowed struct instance does not
+move the field values, which is why you often see borrows of structs). Our
+function signature for `area` now says exactly what we mean: calculate the area
+of `Rectangle`, using its `width` and `height` fields. This conveys that the
+width and height are related to each other, and it gives descriptive names to
+the values rather than using the tuple index values of `0` and `1`. This is a
+win for clarity.
+
+<!--- Tying to my comment above about `user1.email` moving that field: we should
+take a minute here and explain that accessing fields on a borrowed struct does
+not move them, and why you often see borrows of structs.
+/JT --->
+<!-- I've added a note in the paragraph above; I haven't really seen people
+struggle with that concept though so I don't want to spend too much time on it
+/Carol -->
+
+### Adding Useful Functionality with Derived Traits
+
+It’d be useful to be able to print an instance of `Rectangle` while we’re
+debugging our program and see the values for all its fields. Listing 5-11 tries
+using the `println!` macro as we have used in previous chapters. This won’t
+work, however.
+
+Filename: src/main.rs
+
+```
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!("rect1 is {}", rect1);
+}
+```
+
+Listing 5-11: Attempting to print a `Rectangle` instance
+
+When we compile this code, we get an error with this core message:
+
+```
+error[E0277]: `Rectangle` doesn't implement `std::fmt::Display`
+```
+
+The `println!` macro can do many kinds of formatting, and by default, the curly
+brackets tell `println!` to use formatting known as `Display`: output intended
+for direct end user consumption. The primitive types we’ve seen so far
+implement `Display` by default, because there’s only one way you’d want to show
+a `1` or any other primitive type to a user. But with structs, the way
+`println!` should format the output is less clear because there are more
+display possibilities: Do you want commas or not? Do you want to print the
+curly brackets? Should all the fields be shown? Due to this ambiguity, Rust
+doesn’t try to guess what we want, and structs don’t have a provided
+implementation of `Display` to use with `println!` and the `{}` placeholder.
+
+If we continue reading the errors, we’ll find this helpful note:
+
+```
+= help: the trait `std::fmt::Display` is not implemented for `Rectangle`
+= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+```
+
+Let’s try it! The `println!` macro call will now look like `println!("rect1 is
+{:?}", rect1);`. Putting the specifier `:?` inside the curly brackets tells
+`println!` we want to use an output format called `Debug`. The `Debug` trait
+enables us to print our struct in a way that is useful for developers so we can
+see its value while we’re debugging our code.
+
+Compile the code with this change. Drat! We still get an error:
+
+```
+error[E0277]: `Rectangle` doesn't implement `Debug`
+```
+
+But again, the compiler gives us a helpful note:
+
+```
+= help: the trait `Debug` is not implemented for `Rectangle`
+= note: add `#[derive(Debug)]` or manually implement `Debug`
+```
+
+Rust *does* include functionality to print out debugging information, but we
+have to explicitly opt in to make that functionality available for our struct.
+To do that, we add the outer attribute `#[derive(Debug)]` just before the
+struct definition, as shown in Listing 5-12.
+
+Filename: src/main.rs
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!("rect1 is {:?}", rect1);
+}
+```
+
+Listing 5-12: Adding the attribute to derive the `Debug` trait and printing the
+`Rectangle` instance using debug formatting
+
+Now when we run the program, we won’t get any errors, and we’ll see the
+following output:
+
+```
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/rectangles`
+rect1 is Rectangle { width: 30, height: 50 }
+```
+
+Nice! It’s not the prettiest output, but it shows the values of all the fields
+for this instance, which would definitely help during debugging. When we have
+larger structs, it’s useful to have output that’s a bit easier to read; in
+those cases, we can use `{:#?}` instead of `{:?}` in the `println!` string.
+In this example, using the `{:#?}` style will output:
+
+```
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/rectangles`
+rect1 is Rectangle {
+ width: 30,
+ height: 50,
+}
+```
+
+Another way to print out a value using the `Debug` format is to use the `dbg!`
+macro, which takes ownership of an expression (as opposed to `println!` that
+takes a reference), prints the file and line number of where that `dbg!` macro
+call occurs in your code along with the resulting value of that expression, and
+returns ownership of the value.
+
+> Note: Calling the `dbg!` macro prints to the standard error console stream
+> (`stderr`), as opposed to `println!` which prints to the standard output
+> console stream (`stdout`). We’ll talk more about `stderr` and `stdout` in the
+> “Writing Error Messages to Standard Error Instead of Standard Output” section
+> in Chapter 12.
+
+Here’s an example where we’re interested in the value that gets assigned to the
+`width` field, as well as the value of the whole struct in `rect1`:
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let scale = 2;
+ let rect1 = Rectangle {
+ width: dbg!(30 * scale),
+ height: 50,
+ };
+
+ dbg!(&rect1);
+}
+```
+
+We can put `dbg!` around the expression `30 * scale` and, because `dbg!`
+returns ownership of the expression’s value, the `width` field will get the
+same value as if we didn’t have the `dbg!` call there. We don’t want `dbg!` to
+take ownership of `rect1`, so we use a reference to `rect1` in the next call.
+Here’s what the output of this example looks like:
+
+<!--- is it worth calling out that println! doesn't have the dbg! shortcoming
+of taking ownership?
+/JT --->
+<!-- I added a note in the paragraph above that starts with "Another way to
+print out a value" /Carol -->
+
+```
+$ cargo run
+ Compiling rectangles v0.1.0 (file:///projects/rectangles)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.61s
+ Running `target/debug/rectangles`
+[src/main.rs:10] 30 * scale = 60
+[src/main.rs:14] &rect1 = Rectangle {
+ width: 60,
+ height: 50,
+}
+```
+
+We can see the first bit of output came from *src/main.rs* line 10, where we’re
+debugging the expression `30 * scale`, and its resulting value is 60 (the
+`Debug` formatting implemented for integers is to print only their value). The
+`dbg!` call on line 14 of *src/main.rs* outputs the value of `&rect1`, which is
+the `Rectangle` struct. This output uses the pretty `Debug` formatting of the
+`Rectangle` type. The `dbg!` macro can be really helpful when you’re trying to
+figure out what your code is doing!
+
+In addition to the `Debug` trait, Rust has provided a number of traits for us
+to use with the `derive` attribute that can add useful behavior to our custom
+types. Those traits and their behaviors are listed in Appendix C. We’ll cover
+how to implement these traits with custom behavior as well as how to create
+your own traits in Chapter 10. There are also many attributes other than
+`derive`; for more information, see the “Attributes” section of the Rust
+Reference at *https://doc.rust-lang.org/reference/attributes.html*.
+
+Our `area` function is very specific: it only computes the area of rectangles.
+It would be helpful to tie this behavior more closely to our `Rectangle`
+struct, because it won’t work with any other type. Let’s look at how we can
+continue to refactor this code by turning the `area` function into an `area`
+*method* defined on our `Rectangle` type.
+
+## Method Syntax
+
+*Methods* are similar to functions: we declare them with the `fn` keyword and a
+name, they can have parameters and a return value, and they contain some code
+that’s run when the method is called from somewhere else. Unlike functions,
+methods are defined within the context of a struct (or an enum or a trait
+object, which we cover in Chapters 6 and 17, respectively), and their first
+parameter is always `self`, which represents the instance of the struct the
+method is being called on.
+
+<!--- minor nit: some folks call the non-self functions in an `impl`
+"static methods" as a nod to OO languages that do the same. For folks
+from that background, we may want to call out that instance methods always
+have `self` and methods on the type do not.
+/JT --->
+<!-- This paragraph already says "their first parameter is always `self`", and
+we get into associated functions in just a bit. I don't want to distract with
+that info here; not changing anything at this spot. /Carol -->
+
+### Defining Methods
+
+Let’s change the `area` function that has a `Rectangle` instance as a parameter
+and instead make an `area` method defined on the `Rectangle` struct, as shown
+in Listing 5-13.
+
+Filename: src/main.rs
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ println!(
+ "The area of the rectangle is {} square pixels.",
+ rect1.area()
+ );
+}
+```
+
+Listing 5-13: Defining an `area` method on the `Rectangle` struct
+
+To define the function within the context of `Rectangle`, we start an `impl`
+(implementation) block for `Rectangle`. Everything within this `impl` block
+will be associated with the `Rectangle` type. Then we move the `area` function
+within the `impl` curly brackets and change the first (and in this case, only)
+parameter to be `self` in the signature and everywhere within the body. In
+`main`, where we called the `area` function and passed `rect1` as an argument,
+we can instead use *method syntax* to call the `area` method on our `Rectangle`
+instance. The method syntax goes after an instance: we add a dot followed by
+the method name, parentheses, and any arguments.
+
+In the signature for `area`, we use `&self` instead of `rectangle: &Rectangle`.
+The `&self` is actually short for `self: &Self`. Within an `impl` block, the
+type `Self` is an alias for the type that the `impl` block is for. Methods must
+have a parameter named `self` of type `Self` for their first parameter, so Rust
+lets you abbreviate this with only the name `self` in the first parameter spot.
+Note that we still need to use the `&` in front of the `self` shorthand to
+indicate this method borrows the `Self` instance, just as we did in `rectangle:
+&Rectangle`. Methods can take ownership of `self`, borrow `self` immutably as
+we’ve done here, or borrow `self` mutably, just as they can any other parameter.
+
+We’ve chosen `&self` here for the same reason we used `&Rectangle` in the
+function version: we don’t want to take ownership, and we just want to read the
+data in the struct, not write to it. If we wanted to change the instance that
+we’ve called the method on as part of what the method does, we’d use `&mut
+self` as the first parameter. Having a method that takes ownership of the
+instance by using just `self` as the first parameter is rare; this technique is
+usually used when the method transforms `self` into something else and you want
+to prevent the caller from using the original instance after the transformation.
+
+The main reason for using methods instead of functions, in addition to providing
+method syntax and not having to repeat the type of `self` in every method’s
+signature, is for organization. We’ve put all the things we can do with an
+instance of a type in one `impl` block rather than making future users of our
+code search for capabilities of `Rectangle` in various places in the library we
+provide.
+
+Note that we can choose to give a method the same name as one of the struct’s
+fields. For example, we can define a method on `Rectangle` also named `width`:
+
+Filename: src/main.rs
+
+```
+impl Rectangle {
+ fn width(&self) -> bool {
+ self.width > 0
+ }
+}
+
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+
+ if rect1.width() {
+ println!("The rectangle has a nonzero width; it is {}", rect1.width);
+ }
+}
+```
+
+Here, we’re choosing to make the `width` method return `true` if the value in
+the instance’s `width` field is greater than 0, and `false` if the value is 0:
+we can use a field within a method of the same name for any purpose. In `main`,
+when we follow `rect1.width` with parentheses, Rust knows we mean the method
+`width`. When we don’t use parentheses, Rust knows we mean the field `width`.
+
+Often, but not always, when we give methods with the same name as a field we
+want it to only return the value in the field and do nothing else. Methods like
+this are called *getters*, and Rust does not implement them automatically for
+struct fields as some other languages do. Getters are useful because you can
+make the field private but the method public and thus enable read-only access
+to that field as part of the type’s public API. We will be discussing what
+public and private are and how to designate a field or method as public or
+private in Chapter 7.
+
+> ### Where’s the `->` Operator?
+>
+> In C and C++, two different operators are used for calling methods: you use
+> `.` if you’re calling a method on the object directly and `->` if you’re
+> calling the method on a pointer to the object and need to dereference the
+> pointer first. In other words, if `object` is a pointer,
+> `object->something()` is similar to `(*object).something()`.
+>
+> Rust doesn’t have an equivalent to the `->` operator; instead, Rust has a
+> feature called *automatic referencing and dereferencing*. Calling methods is
+> one of the few places in Rust that has this behavior.
+>
+> Here’s how it works: when you call a method with `object.something()`, Rust
+> automatically adds in `&`, `&mut`, or `*` so `object` matches the signature of
+> the method. In other words, the following are the same:
+>
+>
+> ```
+> p1.distance(&p2);
+> (&p1).distance(&p2);
+> ```
+>
+> The first one looks much cleaner. This automatic referencing behavior works
+> because methods have a clear receiver—the type of `self`. Given the receiver
+> and name of a method, Rust can figure out definitively whether the method is
+> reading (`&self`), mutating (`&mut self`), or consuming (`self`). The fact
+> that Rust makes borrowing implicit for method receivers is a big part of
+> making ownership ergonomic in practice.
+
+### Methods with More Parameters
+
+Let’s practice using methods by implementing a second method on the `Rectangle`
+struct. This time, we want an instance of `Rectangle` to take another instance
+of `Rectangle` and return `true` if the second `Rectangle` can fit completely
+within `self` (the first `Rectangle`); otherwise it should return `false`. That
+is, once we’ve defined the `can_hold` method, we want to be able to write the
+program shown in Listing 5-14.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let rect1 = Rectangle {
+ width: 30,
+ height: 50,
+ };
+ let rect2 = Rectangle {
+ width: 10,
+ height: 40,
+ };
+ let rect3 = Rectangle {
+ width: 60,
+ height: 45,
+ };
+
+ println!("Can rect1 hold rect2? {}", rect1.can_hold(&rect2));
+ println!("Can rect1 hold rect3? {}", rect1.can_hold(&rect3));
+}
+```
+
+Listing 5-14: Using the as-yet-unwritten `can_hold` method
+
+And the expected output would look like the following, because both dimensions
+of `rect2` are smaller than the dimensions of `rect1` but `rect3` is wider than
+`rect1`:
+
+```
+Can rect1 hold rect2? true
+Can rect1 hold rect3? false
+```
+
+We know we want to define a method, so it will be within the `impl Rectangle`
+block. The method name will be `can_hold`, and it will take an immutable borrow
+of another `Rectangle` as a parameter. We can tell what the type of the
+parameter will be by looking at the code that calls the method:
+`rect1.can_hold(&rect2)` passes in `&rect2`, which is an immutable borrow to
+`rect2`, an instance of `Rectangle`. This makes sense because we only need to
+read `rect2` (rather than write, which would mean we’d need a mutable borrow),
+and we want `main` to retain ownership of `rect2` so we can use it again after
+calling the `can_hold` method. The return value of `can_hold` will be a
+Boolean, and the implementation will check whether the width and height of
+`self` are both greater than the width and height of the other `Rectangle`,
+respectively. Let’s add the new `can_hold` method to the `impl` block from
+Listing 5-13, shown in Listing 5-15.
+
+Filename: src/main.rs
+
+```
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+```
+
+Listing 5-15: Implementing the `can_hold` method on `Rectangle` that takes
+another `Rectangle` instance as a parameter
+
+When we run this code with the `main` function in Listing 5-14, we’ll get our
+desired output. Methods can take multiple parameters that we add to the
+signature after the `self` parameter, and those parameters work just like
+parameters in functions.
+
+### Associated Functions
+
+All functions defined within an `impl` block are called *associated functions*
+because they’re associated with the type named after the `impl`. We can define
+associated functions that don’t have `self` as their first parameter (and thus
+are not methods) because they don’t need an instance of the type to work with.
+We’ve already used one function like this: the `String::from` function that’s
+defined on the `String` type.
+
+Associated functions that aren’t methods are often used for constructors that
+will return a new instance of the struct. These are often called `new`, but
+`new` isn’t a special name and isn’t built into the language. For example, we
+could choose to provide an associated function named `square` that would have
+one dimension parameter and use that as both width and height, thus making it
+easier to create a square `Rectangle` rather than having to specify the same
+value twice:
+
+Filename: src/main.rs
+
+```
+impl Rectangle {
+ fn square(size: u32) -> Self [1] {
+ Self [2] {
+ width: size,
+ height: size,
+ }
+ }
+}
+```
+
+The `Self` keywords in the return type [1] and in the body of the function [2]
+are aliases for the type that appears after the `impl` keyword, which in this
+case is `Rectangle`.
+
+To call this associated function, we use the `::` syntax with the struct name;
+`let sq = Rectangle::square(3);` is an example. This function is namespaced by
+the struct: the `::` syntax is used for both associated functions and
+namespaces created by modules. We’ll discuss modules in Chapter 7.
+
+<!--- Should we mention the most common associated function is `new`? And that
+new isn't built into the language.
+/JT --->
+<!-- I've added a note as such above to the paragraph that starts with
+"Associated functions that aren’t methods" /Carol -->
+
+### Multiple `impl` Blocks
+
+Each struct is allowed to have multiple `impl` blocks. For example, Listing
+5-15 is equivalent to the code shown in Listing 5-16, which has each method
+in its own `impl` block.
+
+```
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+}
+
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+```
+
+Listing 5-16: Rewriting Listing 5-15 using multiple `impl` blocks
+
+There’s no reason to separate these methods into multiple `impl` blocks here,
+but this is valid syntax. We’ll see a case in which multiple `impl` blocks are
+useful in Chapter 10, where we discuss generic types and traits.
+
+## Summary
+
+Structs let you create custom types that are meaningful for your domain. By
+using structs, you can keep associated pieces of data connected to each other
+and name each piece to make your code clear. In `impl` blocks, you can define
+functions that are associated with your type, and methods are a kind of
+associated function that let you specify the behavior that instances of your
+structs have.
+
+But structs aren’t the only way you can create custom types: let’s turn to
+Rust’s enum feature to add another tool to your toolbox.
+
+<!--- We don't mention that you can only use `impl` in the same crate as the
+type it's created in, otherwise you could use `impl` and add methods on types
+that come from other people (which you can't do, unless you make a trait to
+attach them to)
+
+Another thing we may want to mention is that `Self` inside of an `impl` refers
+to the type being impl'd. So you might write the above:
+
+```
+impl Rectangle {
+ fn square(size: u32) -> Self {
+ Self {
+ width: size,
+ height: size,
+ }
+ }
+}
+```
+which is often a bit more ergonomic.
+
+/JT --->
+<!-- I've changed the `square` example to use `Self` and added some wingdings
+and notes explaining that. I don't really want to get into the restrictions on
+`impl` on types defined in another crate, because we haven't covered traits
+yet. Traits let you do `impl Trait for OtherCrateType` in some circumstances,
+so I don't want to say "you can't use an `impl` block on types from other
+crates" because I'd have to allude to traits or potentially give the reader the
+wrong impression. We get into these restrictions in chapter 10. -->
diff --git a/src/doc/book/nostarch/chapter06.md b/src/doc/book/nostarch/chapter06.md
new file mode 100644
index 000000000..47b51b5a1
--- /dev/null
+++ b/src/doc/book/nostarch/chapter06.md
@@ -0,0 +1,919 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Enums and Pattern Matching
+
+In this chapter we’ll look at *enumerations*, also referred to as *enums*.
+Enums allow you to define a type by enumerating its possible *variants*. First,
+we’ll define and use an enum to show how an enum can encode meaning along with
+data. Next, we’ll explore a particularly useful enum, called `Option`, which
+expresses that a value can be either something or nothing. Then we’ll look at
+how pattern matching in the `match` expression makes it easy to run different
+code for different values of an enum. Finally, we’ll cover how the `if let`
+construct is another convenient and concise idiom available to handle enums in
+your code.
+
+<!--- The above about algebraic data types feels pretty niche. Should it get
+the "expert aside" treatment that some of the early texts gets? /JT --->
+<!-- I decided to just remove the paragraph this comment was about. /Carol -->
+
+## Defining an Enum
+
+<!--- I added this first line, it seems like this is what we're saying? Maybe
+summarize what enums are better suited for: when you know all possible outcomes
+and that the outcomes must be distinct from each other? I was hoping to
+generalize their usage early. Edit: reading on, I can see that might be tricky,
+so ignore this if so! /LC --->
+<!-- I made a slight edit to the first line here, what do you think? I don't
+think "enums are an alternative to structs" was quite right, because that
+sounded like in any situation, you could choose either enum or struct according
+to your preferences, but what I'd like the reader to come away with is that
+some situations are better expressed with enums; others with structs. /Carol -->
+<!-- I think this makes sense! I wonder if there's more we could add to give an
+idea of why we're contrasting them with structs, to give the reader a point of
+reference. What do you think JT? Would more explanation here be redundant? /LC
+-->
+<!--- Here's my try for a framing, using our earlier Rectangle example:
+Where structs give you a way of grouping together related fields and data, like
+a `Rectangle` with its `width` and `height`, we don't yet have a way of saying
+a values is one of a possible set of values. For example, we may want to say
+that Rectangle is one of a set of possible shapes. To do this, Rust allows us
+to encode these possibilities as an enum. Let's look at...
+/JT --->
+<!-- I've generally taken JT's suggestion with a few edits. I'm a little
+concerned that we won't ever actually make a `Shape` enum with variants
+`Rectangle`, `Circle`, and `Triangle`? Is that a problem, Liz? /Carol -->
+
+Where structs give you a way of grouping together related fields and data, like
+a `Rectangle` with its `width` and `height`, enums give you a way of saying a
+value is one of a possible set of values. For example, we may want to say that
+`Rectangle` is one of a set of possible shapes that also includes `Circle` and
+`Triangle`. To do this, Rust allows us to encode these possibilities as an enum.
+
+Let’s look at a situation we might want to express in code and see why enums
+are useful and more appropriate than structs in this case. Say we need to work
+with IP addresses. Currently, two major standards are used for IP addresses:
+version four and version six. Because these are the only possibilities for an
+IP address that our program will come across, we can *enumerate* all possible
+variants, which is where enumeration gets its name.
+
+Any IP address can be either a version four or a version six address, but not
+both at the same time. That property of IP addresses makes the enum data
+structure appropriate, because an enum value can only be one of its variants.
+Both version four and version six addresses are still fundamentally IP
+addresses, so they should be treated as the same type when the code is handling
+situations that apply to any kind of IP address.
+
+We can express this concept in code by defining an `IpAddrKind` enumeration and
+listing the possible kinds an IP address can be, `V4` and `V6`. These are the
+variants of the enum:
+
+```
+enum IpAddrKind {
+ V4,
+ V6,
+}
+```
+
+`IpAddrKind` is now a custom data type that we can use elsewhere in our code.
+
+### Enum Values
+
+We can create instances of each of the two variants of `IpAddrKind` like this:
+
+```
+let four = IpAddrKind::V4;
+let six = IpAddrKind::V6;
+```
+
+Note that the variants of the enum are namespaced under its identifier, and we
+use a double colon to separate the two. This is useful because now both values
+`IpAddrKind::V4` and `IpAddrKind::V6` are of the same type: `IpAddrKind`. We
+can then, for instance, define a function that takes any `IpAddrKind`:
+
+```
+fn route(ip_kind: IpAddrKind) {}
+```
+
+And we can call this function with either variant:
+
+```
+route(IpAddrKind::V4);
+route(IpAddrKind::V6);
+```
+
+Using enums has even more advantages. Thinking more about our IP address type,
+at the moment we don’t have a way to store the actual IP address *data*; we
+only know what *kind* it is. Given that you just learned about structs in
+Chapter 5, you might be tempted to tackle this problem with structs as shown in
+Listing 6-1.
+
+```
+enum IpAddrKind {
+ V4,
+ V6,
+}
+
+struct IpAddr {
+ kind: IpAddrKind,
+ address: String,
+}
+
+let home = IpAddr {
+ kind: IpAddrKind::V4,
+ address: String::from("127.0.0.1"),
+};
+
+let loopback = IpAddr {
+ kind: IpAddrKind::V6,
+ address: String::from("::1"),
+};
+```
+
+Listing 6-1: Storing the data and `IpAddrKind` variant of an IP address using a
+`struct`
+
+Here, we’ve defined a struct `IpAddr` that has two fields: a `kind` field that
+is of type `IpAddrKind` (the enum we defined previously) and an `address` field
+of type `String`. We have two instances of this struct. The first is `home`,
+and it has the value `IpAddrKind::V4` as its `kind` with associated address
+data of `127.0.0.1`. The second instance is `loopback`. It has the other
+variant of `IpAddrKind` as its `kind` value, `V6`, and has address `::1`
+associated with it. We’ve used a struct to bundle the `kind` and `address`
+values together, so now the variant is associated with the value.
+
+However, representing the same concept using just an enum is more concise:
+rather than an enum inside a struct, we can put data directly into each enum
+variant. This new definition of the `IpAddr` enum says that both `V4` and `V6`
+variants will have associated `String` values:
+
+```
+enum IpAddr {
+ V4(String),
+ V6(String),
+}
+
+let home = IpAddr::V4(String::from("127.0.0.1"));
+
+let loopback = IpAddr::V6(String::from("::1"));
+```
+
+We attach data to each variant of the enum directly, so there is no need for an
+extra struct. Here it’s also easier to see another detail of how enums work:
+the name of each enum variant that we define also becomes a function that
+constructs an instance of the enum. That is, `IpAddr::V4()` is a function call
+that takes a `String` argument and returns an instance of the `IpAddr` type. We
+automatically get this constructor function defined as a result of defining the
+enum.
+
+There’s another advantage to using an enum rather than a struct: each variant
+can have different types and amounts of associated data. Version four type IP
+addresses will always have four numeric components that will have values
+between 0 and 255. If we wanted to store `V4` addresses as four `u8` values but
+still express `V6` addresses as one `String` value, we wouldn’t be able to with
+a struct. Enums handle this case with ease:
+
+```
+enum IpAddr {
+ V4(u8, u8, u8, u8),
+ V6(String),
+}
+
+let home = IpAddr::V4(127, 0, 0, 1);
+
+let loopback = IpAddr::V6(String::from("::1"));
+```
+
+We’ve shown several different ways to define data structures to store version
+four and version six IP addresses. However, as it turns out, wanting to store
+IP addresses and encode which kind they are is so common that the standard
+library has a definition we can use! Let’s look at how the standard library
+defines `IpAddr`: it has the exact enum and variants that we’ve defined and
+used, but it embeds the address data inside the variants in the form of two
+different structs, which are defined differently for each variant:
+
+```
+struct Ipv4Addr {
+ // --snip--
+}
+
+struct Ipv6Addr {
+ // --snip--
+}
+
+enum IpAddr {
+ V4(Ipv4Addr),
+ V6(Ipv6Addr),
+}
+```
+
+This code illustrates that you can put any kind of data inside an enum variant:
+strings, numeric types, or structs, for example. You can even include another
+enum! Also, standard library types are often not much more complicated than
+what you might come up with.
+
+Note that even though the standard library contains a definition for `IpAddr`,
+we can still create and use our own definition without conflict because we
+haven’t brought the standard library’s definition into our scope. We’ll talk
+more about bringing types into scope in Chapter 7.
+
+Let’s look at another example of an enum in Listing 6-2: this one has a wide
+variety of types embedded in its variants.
+
+```
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+```
+
+Listing 6-2: A `Message` enum whose variants each store different amounts and
+types of values
+
+This enum has four variants with different types:
+
+* `Quit` has no data associated with it at all.
+* `Move` has named fields like a struct does.
+* `Write` includes a single `String`.
+* `ChangeColor` includes three `i32` values.
+
+Defining an enum with variants such as the ones in Listing 6-2 is similar to
+defining different kinds of struct definitions, except the enum doesn’t use the
+`struct` keyword and all the variants are grouped together under the `Message`
+type. The following structs could hold the same data that the preceding enum
+variants hold:
+
+```
+struct QuitMessage; // unit struct
+struct MoveMessage {
+ x: i32,
+ y: i32,
+}
+struct WriteMessage(String); // tuple struct
+struct ChangeColorMessage(i32, i32, i32); // tuple struct
+```
+
+But if we used the different structs, which each have their own type, we
+couldn’t as easily define a function to take any of these kinds of messages as
+we could with the `Message` enum defined in Listing 6-2, which is a single type.
+
+<!--- We're also hinting at pattern matching complexity if we use the struct
+method. Should we call it out and mention the pattern matching chapter?
+/JT --->
+<!-- If readers don't have experience with pattern matching, I don't think this
+will resonate with them, so I'm not going to mention it here. /Carol -->
+
+There is one more similarity between enums and structs: just as we’re able to
+define methods on structs using `impl`, we’re also able to define methods on
+enums. Here’s a method named `call` that we could define on our `Message` enum:
+
+```
+impl Message {
+ fn call(&self) {
+ // method body would be defined here
+ }
+}
+
+let m = Message::Write(String::from("hello"));
+m.call();
+```
+
+The body of the method would use `self` to get the value that we called the
+method on. In this example, we’ve created a variable `m` that has the value
+`Message::Write(String::from("hello"))`, and that is what `self` will be in the
+body of the `call` method when `m.call()` runs.
+
+Let’s look at another enum in the standard library that is very common and
+useful: `Option`.
+
+### The `Option` Enum and Its Advantages Over Null Values
+
+This section explores a case study of `Option`, which is another enum defined
+by the standard library. The `Option` type encodes the very common scenario in
+which a value could be something or it could be nothing.
+
+For example, if you request the first of a list containing items, you would get
+a value. If you request the first item of an empty list, you would get nothing.
+Expressing this concept in terms of the type system means the compiler can
+check whether you’ve handled all the cases you should be handling; this
+functionality can prevent bugs that are extremely common in other programming
+languages.
+
+Programming language design is often thought of in terms of which features you
+include, but the features you exclude are important too. Rust doesn’t have the
+null feature that many other languages have. *Null* is a value that means there
+is no value there. In languages with null, variables can always be in one of
+two states: null or not-null.
+
+In his 2009 presentation “Null References: The Billion Dollar Mistake,” Tony
+Hoare, the inventor of null, has this to say:
+
+> I call it my billion-dollar mistake. At that time, I was designing the first
+> comprehensive type system for references in an object-oriented language. My
+> goal was to ensure that all use of references should be absolutely safe, with
+> checking performed automatically by the compiler. But I couldn’t resist the
+> temptation to put in a null reference, simply because it was so easy to
+> implement. This has led to innumerable errors, vulnerabilities, and system
+> crashes, which have probably caused a billion dollars of pain and damage in
+> the last forty years.
+
+The problem with null values is that if you try to use a null value as a
+not-null value, you’ll get an error of some kind. Because this null or not-null
+property is pervasive, it’s extremely easy to make this kind of error.
+
+However, the concept that null is trying to express is still a useful one: a
+null is a value that is currently invalid or absent for some reason.
+
+The problem isn’t really with the concept but with the particular
+implementation. As such, Rust does not have nulls, but it does have an enum
+that can encode the concept of a value being present or absent. This enum is
+`Option<T>`, and it is defined by the standard library
+as follows:
+
+```
+enum Option<T> {
+ None,
+ Some(T),
+}
+```
+
+The `Option<T>` enum is so useful that it’s even included in the prelude; you
+don’t need to bring it into scope explicitly. Its variants are also included in
+the prelude: you can use `Some` and `None` directly without the `Option::`
+prefix. The `Option<T>` enum is still just a regular enum, and `Some(T)` and
+`None` are still variants of type `Option<T>`.
+
+The `<T>` syntax is a feature of Rust we haven’t talked about yet. It’s a
+generic type parameter, and we’ll cover generics in more detail in Chapter 10.
+For now, all you need to know is that `<T>` means the `Some` variant of the
+`Option` enum can hold one piece of data of any type, and that each concrete
+type that gets used in place of `T` makes the overall `Option<T>` type a
+different type. Here are some examples of using `Option` values to hold number
+types and string types:
+
+```
+let some_number = Some(5);
+let some_char = Some('e');
+
+let absent_number: Option<i32> = None;
+```
+
+<!--- I would maybe do the above more explicitly as:
+
+"
+```
+let some_number = Some(5);
+
+let some_number2: Option<i32> = Some(5);
+```
+The types of `some_number` and `some_number2` in the above are identical.
+"
+
+Using `Some("a string")` we're going to open the door to references in
+generic positions (which we still need to build up to). We talk a little about
+Option<&str> below, but I don't think it helps explain the enum concept.
+
+/JT --->
+<!-- I changed the above to use `char` rather than string slice, but we're
+trying to show that options holding different types are themselves different
+types below, so I didn't want to make them both `i32`. /Carol -->
+
+The type of `some_number` is `Option<i32>`. The type of `some_char` is
+`Option<char>`, which is a different type. Rust can infer these types because
+we’ve specified a value inside the `Some` variant. For `absent_number`, Rust
+requires us to annotate the overall `Option` type: the compiler can’t infer the
+type that the corresponding `Some` variant will hold by looking only at a
+`None` value. Here, we tell Rust that we mean for `absent_number` to be of type
+`Option<i32>`.
+
+When we have a `Some` value, we know that a value is present and the value is
+held within the `Some`. When we have a `None` value, in some sense, it means
+the same thing as null: we don’t have a valid value. So why is having
+`Option<T>` any better than having null?
+
+In short, because `Option<T>` and `T` (where `T` can be any type) are different
+types, the compiler won’t let us use an `Option<T>` value as if it were
+definitely a valid value. For example, this code won’t compile because it’s
+trying to add an `i8` to an `Option<i8>`:
+
+```
+let x: i8 = 5;
+let y: Option<i8> = Some(5);
+
+let sum = x + y;
+```
+
+If we run this code, we get an error message like this:
+
+```
+$ cargo run
+ Compiling enums v0.1.0 (file:///projects/enums)
+error[E0277]: cannot add `Option<i8>` to `i8`
+ --> src/main.rs:5:17
+ |
+5 | let sum = x + y;
+ | ^ no implementation for `i8 + Option<i8>`
+ |
+ = help: the trait `Add<Option<i8>>` is not implemented for `i8`
+```
+
+Intense! In effect, this error message means that Rust doesn’t understand how
+to add an `i8` and an `Option<i8>`, because they’re different types. When we
+have a value of a type like `i8` in Rust, the compiler will ensure that we
+always have a valid value. We can proceed confidently without having to check
+for null before using that value. Only when we have an `Option<i8>` (or
+whatever type of value we’re working with) do we have to worry about possibly
+not having a value, and the compiler will make sure we handle that case before
+using the value.
+
+In other words, you have to convert an `Option<T>` to a `T` before you can
+perform `T` operations with it. Generally, this helps catch one of the most
+common issues with null: assuming that something isn’t null when it actually
+is.
+
+Eliminating the risk of incorrectly assuming a not-null value helps you to be
+more confident in your code. In order to have a value that can possibly be
+null, you must explicitly opt in by making the type of that value `Option<T>`.
+Then, when you use that value, you are required to explicitly handle the case
+when the value is null. Everywhere that a value has a type that isn’t an
+`Option<T>`, you *can* safely assume that the value isn’t null. This was a
+deliberate design decision for Rust to limit null’s pervasiveness and increase
+the safety of Rust code.
+
+So, how do you get the `T` value out of a `Some` variant when you have a value
+of type `Option<T>` so you can use that value? The `Option<T>` enum has a large
+number of methods that are useful in a variety of situations; you can check
+them out in its documentation. Becoming familiar with the methods on
+`Option<T>` will be extremely useful in your journey with Rust.
+
+In general, in order to use an `Option<T>` value, you want to have code that
+will handle each variant. You want some code that will run only when you have a
+`Some(T)` value, and this code is allowed to use the inner `T`. You want some
+other code to run if you have a `None` value, and that code doesn’t have a `T`
+value available. The `match` expression is a control flow construct that does
+just this when used with enums: it will run different code depending on which
+variant of the enum it has, and that code can use the data inside the matching
+value.
+
+## The `match` Control Flow Construct
+
+Rust has an extremely powerful control flow construct called `match` that allows
+you to compare a value against a series of patterns and then execute code based
+on which pattern matches. Patterns can be made up of literal values, variable
+names, wildcards, and many other things; Chapter 18 covers all the different
+kinds of patterns and what they do. The power of `match` comes from the
+expressiveness of the patterns and the fact that the compiler confirms that all
+possible cases are handled.
+
+Think of a `match` expression as being like a coin-sorting machine: coins slide
+down a track with variously sized holes along it, and each coin falls through
+the first hole it encounters that it fits into. In the same way, values go
+through each pattern in a `match`, and at the first pattern the value “fits,”
+the value falls into the associated code block to be used during execution.
+
+Speaking of coins, let’s use them as an example using `match`! We can write a
+function that takes an unknown United States coin and, in a similar way as the
+counting machine, determines which coin it is and return its value in cents, as
+shown here in Listing 6-3.
+
+```
+[1]enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter,
+}
+
+fn value_in_cents(coin: Coin) -> u8 {
+ match coin {
+ Coin::Penny => 1,
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter => 25,
+ }
+}
+```
+
+Listing 6-3: An enum and a `match` expression that has the variants of the enum
+as its patterns
+
+Let’s break down the `match` in the `value_in_cents` function. First, we list
+the `match` keyword followed by an expression, which in this case is the value
+`coin`. This seems very similar to an expression used with `if`, but there’s a
+big difference: with `if`, the expression needs to return a Boolean value, but
+here, it can return any type. The type of `coin` in this example is the `Coin`
+enum that we defined at [1].
+
+Next are the `match` arms. An arm has two parts: a pattern and some code. The
+first arm here has a pattern that is the value `Coin::Penny` and then the `=>`
+operator that separates the pattern and the code to run. The code in this case
+is just the value `1`. Each arm is separated from the next with a comma.
+
+<!--- Tiny nit, though not sure how to phrase it. Arms are separated by commas
+in this example, though if you use blocks instead of simple values you won't use
+commas. We see this happen in the next example.
+/JT --->
+<!-- I clarified in the paragraph before the next example. You *can* use commas
+even if there's curly brackets, but people don't usually. /Carol -->
+
+When the `match` expression executes, it compares the resulting value against
+the pattern of each arm, in order. If a pattern matches the value, the code
+associated with that pattern is executed. If that pattern doesn’t match the
+value, execution continues to the next arm, much as in a coin-sorting machine.
+We can have as many arms as we need: in Listing 6-3, our `match` has four arms.
+
+The code associated with each arm is an expression, and the resulting value of
+the expression in the matching arm is the value that gets returned for the
+entire `match` expression.
+
+We don't typically use curly brackets if the match arm code is short, as it is
+in Listing 6-3 where each arm just returns a value. If you want to run multiple
+lines of code in a match arm, you must use curly brackets, and the comma
+following the arm is then optional. For example, the following code prints
+“Lucky penny!” every time the method is called with a `Coin::Penny`, but still
+returns the last value of the block, `1`:
+
+```
+fn value_in_cents(coin: Coin) -> u8 {
+ match coin {
+ Coin::Penny => {
+ println!("Lucky penny!");
+ 1
+ }
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter => 25,
+ }
+}
+```
+
+### Patterns that Bind to Values
+
+Another useful feature of match arms is that they can bind to the parts of the
+values that match the pattern. This is how we can extract values out of enum
+variants.
+
+As an example, let’s change one of our enum variants to hold data inside it.
+From 1999 through 2008, the United States minted quarters with different
+designs for each of the 50 states on one side. No other coins got state
+designs, so only quarters have this extra value. We can add this information to
+our `enum` by changing the `Quarter` variant to include a `UsState` value stored
+inside it, which we’ve done here in Listing 6-4.
+
+```
+#[derive(Debug)] // so we can inspect the state in a minute
+enum UsState {
+ Alabama,
+ Alaska,
+ // --snip--
+}
+
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter(UsState),
+}
+```
+
+Listing 6-4: A `Coin` enum in which the `Quarter` variant also holds a
+`UsState` value
+
+Let’s imagine that a friend is trying to collect all 50 state quarters. While
+we sort our loose change by coin type, we’ll also call out the name of the
+state associated with each quarter so if it’s one our friend doesn’t have, they
+can add it to their collection.
+
+In the match expression for this code, we add a variable called `state` to the
+pattern that matches values of the variant `Coin::Quarter`. When a
+`Coin::Quarter` matches, the `state` variable will bind to the value of that
+quarter’s state. Then we can use `state` in the code for that arm, like so:
+
+```
+fn value_in_cents(coin: Coin) -> u8 {
+ match coin {
+ Coin::Penny => 1,
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter(state) => {
+ println!("State quarter from {:?}!", state);
+ 25
+ }
+ }
+}
+```
+
+If we were to call `value_in_cents(Coin::Quarter(UsState::Alaska))`, `coin`
+would be `Coin::Quarter(UsState::Alaska)`. When we compare that value with each
+of the match arms, none of them match until we reach `Coin::Quarter(state)`. At
+that point, the binding for `state` will be the value `UsState::Alaska`. We can
+then use that binding in the `println!` expression, thus getting the inner
+state value out of the `Coin` enum variant for `Quarter`.
+
+### Matching with `Option<T>`
+
+In the previous section, we wanted to get the inner `T` value out of the `Some`
+case when using `Option<T>`; we can also handle `Option<T>` using `match` as we
+did with the `Coin` enum! Instead of comparing coins, we’ll compare the
+variants of `Option<T>`, but the way that the `match` expression works remains
+the same.
+
+Let’s say we want to write a function that takes an `Option<i32>` and, if
+there’s a value inside, adds 1 to that value. If there isn’t a value inside,
+the function should return the `None` value and not attempt to perform any
+operations.
+
+This function is very easy to write, thanks to `match`, and will look like
+Listing 6-5.
+
+```
+fn plus_one(x: Option<i32>) -> Option<i32> {
+ match x {
+ None => None,
+ Some(i) => Some(i + 1),
+ }
+}
+
+let five = Some(5);
+let six = plus_one(five);
+let none = plus_one(None);
+```
+
+Listing 6-5: A function that uses a `match` expression on an `Option<i32>`
+
+Let’s examine the first execution of `plus_one` in more detail. When we call
+`plus_one(five)`, the variable `x` in the body of `plus_one` will have the
+value `Some(5)`. We then compare that against each match arm.
+
+```
+None => None,
+```
+
+The `Some(5)` value doesn’t match the pattern `None`, so we continue to the
+next arm.
+
+```
+Some(i) => Some(i + 1),
+```
+
+Does `Some(5)` match `Some(i)`? Why yes it does! We have the same variant. The
+`i` binds to the value contained in `Some`, so `i` takes the value `5`. The
+code in the match arm is then executed, so we add 1 to the value of `i` and
+create a new `Some` value with our total `6` inside.
+
+Now let’s consider the second call of `plus_one` in Listing 6-5, where `x` is
+`None`. We enter the `match` and compare to the first arm.
+
+```
+None => None,
+```
+
+It matches! There’s no value to add to, so the program stops and returns the
+`None` value on the right side of `=>`. Because the first arm matched, no other
+arms are compared.
+
+Combining `match` and enums is useful in many situations. You’ll see this
+pattern a lot in Rust code: `match` against an enum, bind a variable to the
+data inside, and then execute code based on it. It’s a bit tricky at first, but
+once you get used to it, you’ll wish you had it in all languages. It’s
+consistently a user favorite.
+
+### Matches Are Exhaustive
+
+There’s one other aspect of `match` we need to discuss: the arms’ patterns must
+cover all possibilities. Consider this version of our `plus_one` function,
+which has a bug and won’t compile:
+
+```
+fn plus_one(x: Option<i32>) -> Option<i32> {
+ match x {
+ Some(i) => Some(i + 1),
+ }
+}
+```
+
+We didn’t handle the `None` case, so this code will cause a bug. Luckily, it’s
+a bug Rust knows how to catch. If we try to compile this code, we’ll get this
+error:
+
+```
+$ cargo run
+ Compiling enums v0.1.0 (file:///projects/enums)
+error[E0004]: non-exhaustive patterns: `None` not covered
+ --> src/main.rs:3:15
+ |
+3 | match x {
+ | ^ pattern `None` not covered
+ |
+ = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
+ = note: the matched value is of type `Option<i32>`
+```
+
+Rust knows that we didn’t cover every possible case and even knows which
+pattern we forgot! Matches in Rust are *exhaustive*: we must exhaust every last
+possibility in order for the code to be valid. Especially in the case of
+`Option<T>`, when Rust prevents us from forgetting to explicitly handle the
+`None` case, it protects us from assuming that we have a value when we might
+have null, thus making the billion-dollar mistake discussed earlier impossible.
+
+### Catch-all Patterns and the `_` Placeholder
+
+Using enums, we can also take special actions for a few particular values, but
+for all other values take one default action. Imagine we’re implementing a game
+where, if you roll a 3 on a dice roll, your player doesn’t move, but instead
+gets a new fancy hat. If you roll a 7, your player loses a fancy hat. For all
+other values, your player moves that number of spaces on the game board. Here’s
+a `match` that implements that logic, with the result of the dice roll
+hardcoded rather than a random value, and all other logic represented by
+functions without bodies because actually implementing them is out of scope for
+this example:
+
+```
+let dice_roll = 9;
+match dice_roll {
+ 3 => add_fancy_hat(),
+ 7 => remove_fancy_hat(),
+ other => move_player(other),
+}
+
+fn add_fancy_hat() {}
+fn remove_fancy_hat() {}
+fn move_player(num_spaces: u8) {}
+```
+
+For the first two arms, the patterns are the literal values 3 and 7. For the
+last arm that covers every other possible value, the pattern is the variable
+we’ve chosen to name `other`. The code that runs for the `other` arm uses the
+variable by passing it to the `move_player` function.
+
+This code compiles, even though we haven’t listed all the possible values a
+`u8` can have, because the last pattern will match all values not specifically
+listed. This catch-all pattern meets the requirement that `match` must be
+exhaustive. Note that we have to put the catch-all arm last because the
+patterns are evaluated in order. If we put the catch-all arm earlier, the other
+arms would never run, so Rust will warn us if we add arms after a catch-all!
+
+Rust also has a pattern we can use when we want a catch-all but don’t want to
+*use* the value in the catch-all pattern: `_` is a special pattern that matches
+any value and does not bind to that value. This tells Rust we aren’t going to
+use the value, so Rust won’t warn us about an unused variable.
+
+Let’s change the rules of the game: now, if you roll anything other than a 3 or
+a 7, you must roll again. We no longer need to use the catch-all value, so we
+can change our code to use `_` instead of the variable named `other`:
+
+```
+let dice_roll = 9;
+match dice_roll {
+ 3 => add_fancy_hat(),
+ 7 => remove_fancy_hat(),
+ _ => reroll(),
+}
+
+fn add_fancy_hat() {}
+fn remove_fancy_hat() {}
+fn reroll() {}
+```
+
+This example also meets the exhaustiveness requirement because we’re explicitly
+ignoring all other values in the last arm; we haven’t forgotten anything.
+
+Finally, we’ll change the rules of the game one more time, so that nothing else
+happens on your turn if you roll anything other than a 3 or a 7. We can express
+that by using the unit value (the empty tuple type we mentioned in “The Tuple
+Type” section) as the code that goes with the `_` arm:
+
+```
+let dice_roll = 9;
+match dice_roll {
+ 3 => add_fancy_hat(),
+ 7 => remove_fancy_hat(),
+ _ => (),
+}
+
+fn add_fancy_hat() {}
+fn remove_fancy_hat() {}
+```
+
+Here, we’re telling Rust explicitly that we aren’t going to use any other value
+that doesn’t match a pattern in an earlier arm, and we don’t want to run any
+code in this case.
+
+There’s more about patterns and matching that we’ll cover in Chapter 18. For
+now, we’re going to move on to the `if let` syntax, which can be useful in
+situations where the `match` expression is a bit wordy.
+
+## Concise Control Flow with `if let`
+
+The `if let` syntax lets you combine `if` and `let` into a less verbose way to
+handle values that match one pattern while ignoring the rest. Consider the
+program in Listing 6-6 that matches on an `Option<u8>` value in the `config_max`
+variable but only wants to execute code if the value is the `Some` variant.
+
+```
+let config_max = Some(3u8);
+match config_max {
+ Some(max) => println!("The maximum is configured to be {}", max),
+ _ => (),
+}
+```
+
+Listing 6-6: A `match` that only cares about executing code when the value is
+`Some`
+
+If the value is `Some`, we print out the value in the `Some` variant by binding
+the value to the variable `max` in the pattern. We don’t want to do anything
+with the `None` value. To satisfy the `match` expression, we have to add `_ =>
+()` after processing just one variant, which is annoying boilerplate code to
+add.
+
+Instead, we could write this in a shorter way using `if let`. The following
+code behaves the same as the `match` in Listing 6-6:
+
+```
+let config_max = Some(3u8);
+if let Some(max) = config_max {
+ println!("The maximum is configured to be {}", max);
+}
+```
+
+The syntax `if let` takes a pattern and an expression separated by an equal
+sign. It works the same way as a `match`, where the expression is given to the
+`match` and the pattern is its first arm. In this case, the pattern is
+`Some(max)`, and the `max` binds to the value inside the `Some`. We can then
+use `max` in the body of the `if let` block in the same way as we used `max` in
+the corresponding `match` arm. The code in the `if let` block isn’t run if the
+value doesn’t match the pattern.
+
+Using `if let` means less typing, less indentation, and less boilerplate code.
+However, you lose the exhaustive checking that `match` enforces. Choosing
+between `match` and `if let` depends on what you’re doing in your particular
+situation and whether gaining conciseness is an appropriate trade-off for
+losing exhaustive checking.
+
+In other words, you can think of `if let` as syntax sugar for a `match` that
+runs code when the value matches one pattern and then ignores all other values.
+
+We can include an `else` with an `if let`. The block of code that goes with the
+`else` is the same as the block of code that would go with the `_` case in the
+`match` expression that is equivalent to the `if let` and `else`. Recall the
+`Coin` enum definition in Listing 6-4, where the `Quarter` variant also held a
+`UsState` value. If we wanted to count all non-quarter coins we see while also
+announcing the state of the quarters, we could do that with a `match`
+expression like this:
+
+```
+let mut count = 0;
+match coin {
+ Coin::Quarter(state) => println!("State quarter from {:?}!", state),
+ _ => count += 1,
+}
+```
+
+Or we could use an `if let` and `else` expression like this:
+
+```
+let mut count = 0;
+if let Coin::Quarter(state) = coin {
+ println!("State quarter from {:?}!", state);
+} else {
+ count += 1;
+}
+```
+
+If you have a situation in which your program has logic that is too verbose to
+express using a `match`, remember that `if let` is in your Rust toolbox as well.
+
+## Summary
+
+We’ve now covered how to use enums to create custom types that can be one of a
+set of enumerated values. We’ve shown how the standard library’s `Option<T>`
+type helps you use the type system to prevent errors. When enum values have
+data inside them, you can use `match` or `if let` to extract and use those
+values, depending on how many cases you need to handle.
+
+Your Rust programs can now express concepts in your domain using structs and
+enums. Creating custom types to use in your API ensures type safety: the
+compiler will make certain your functions get only values of the type each
+function expects.
+
+In order to provide a well-organized API to your users that is straightforward
+to use and only exposes exactly what your users will need, let’s now turn to
+Rust’s modules.
+
+<!--- I'm of two minds whether `?` should squeeze in here? We talk about `if
+let` but then switch topics next chapter and talk about modules. In the wild,
+I'd bet `?` would be as common, perhaps more common, than `if let`.
+
+But I'll defer to your pedagogy plan. Just wanted to share the thought.
+/JT --->
+<!-- Yeah introducing `?` here would be a big change; I don't want to talk
+about that until we've talked about `Result` even though you can use `?` on
+`Option` now, because `?` is still way more common with `Result`. /Carol -->
diff --git a/src/doc/book/nostarch/chapter07.md b/src/doc/book/nostarch/chapter07.md
new file mode 100644
index 000000000..32a9eb2fb
--- /dev/null
+++ b/src/doc/book/nostarch/chapter07.md
@@ -0,0 +1,1328 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Managing Growing Projects with Packages, Crates, and Modules
+
+As you write large programs, organizing your code will become increasingly
+important. By grouping related functionality and separating code with distinct
+features, you’ll clarify where to find code that implements a particular
+feature and where to go to change how a feature works.
+
+The programs we’ve written so far have been in one module in one file. As a
+project grows, you should organize code by splitting it into multiple modules
+and then multiple files. A package can contain multiple binary crates and
+optionally one library crate. As a package grows, you can extract parts into
+separate crates that become external dependencies. This chapter covers all
+these techniques. For very large projects comprising a set of interrelated
+packages that evolve together, Cargo provides *workspaces*, which we’ll cover
+in the “Cargo Workspaces” section in Chapter 14.
+
+We’ll also discuss encapsulating implementation details, which lets you reuse
+code at a higher level: once you’ve implemented an operation, other code can
+call your code via its public interface without having to know how the
+implementation works. The way you write code defines which parts are public for
+other code to use and which parts are private implementation details that you
+reserve the right to change. This is another way to limit the amount of detail
+you have to keep in your head.
+
+A related concept is scope: the nested context in which code is written has a
+set of names that are defined as “in scope.” When reading, writing, and
+compiling code, programmers and compilers need to know whether a particular
+name at a particular spot refers to a variable, function, struct, enum, module,
+constant, or other item and what that item means. You can create scopes and
+change which names are in or out of scope. You can’t have two items with the
+same name in the same scope; tools are available to resolve name conflicts.
+
+Rust has a number of features that allow you to manage your code’s
+organization, including which details are exposed, which details are private,
+and what names are in each scope in your programs. These features, sometimes
+collectively referred to as the *module system*, include:
+
+* **Packages:** A Cargo feature that lets you build, test, and share crates
+* **Crates:** A tree of modules that produces a library or executable
+* **Modules** and **use:** Let you control the organization, scope, and
+ privacy of paths
+* **Paths:** A way of naming an item, such as a struct, function, or module
+
+In this chapter, we’ll cover all these features, discuss how they interact, and
+explain how to use them to manage scope. By the end, you should have a solid
+understanding of the module system and be able to work with scopes like a pro!
+
+## Packages and Crates
+
+The first parts of the module system we’ll cover are packages and crates.
+
+<!-- Do you have a general definition of a crate we can add, or is it too
+dependent on whether it's a binary or library crate? /LC -->
+<!-- I've struggled to come up with something that isn't just "smaller than a
+package but bigger than a module"... "reusable" or "what you specify as a
+dependency" only applies to library crates... this definition I've added here
+gets a little bit into how the compiler sees crates, which might be too much
+detail? What do you think about this next paragraph? /Carol -->
+<!-- JT, what do you think? /LC -->
+<!-- I think this works.
+
+Carol - I'm wondering a bit if "packages" above helps the reader build the
+mental model or if it's kind of an implementation detail for cargo (we could
+say we "package crates"). You're definitely the expert here, but I wonder if we
+can simplify down to Crates/Modules/Paths and mention that we'll introduce some
+of the techniques the tooling uses to work with these later. /JT -->
+<!-- I feel like we need to explain the `[package]` section in *Cargo.toml*,
+and explain what the container is when you have a library and one or more
+binaries in one directory, and that's a package. It is a little weird because
+people hardly ever talk in terms of packages, only in terms of crates, but I
+think it's better to have the discussion of package here. /Carol -->
+
+A *crate* is the smallest amount of code that the Rust compiler considers at a
+time. Even if you run `rustc` rather than `cargo` and pass a single source code
+file (as we did all the way back in the “Writing and Running a Rust Program”
+section of Chapter 1), the compiler considers that file to be a crate. Crates
+can contain modules, and the modules may be defined in other files that get
+compiled with the crate, as we’ll see in the coming sections.
+
+A crate can come in one of two forms: a binary crate or a library crate.
+*Binary crates* are programs you can compile to an executable that you can run,
+such as a command-line program or a server. Each must have a function called
+`main` that defines what happens when the executable runs. All the crates we’ve
+created so far have been binary crates.
+
+*Library crates* don’t have a `main` function, and they don’t compile to an
+executable. Instead, they define functionality intended to be shared with
+multiple projects. For example, the `rand` crate we used in Chapter 2 provides
+functionality that generates random numbers. Most of the time when Rustaceans
+say “crate”, they mean library crate, and they use “crate” interchangeably with
+the general programming concept of a “library".
+
+The *crate root* is a source file that the Rust compiler starts from and makes
+up the root module of your crate (we’ll explain modules in depth in the
+“Defining Modules to Control Scope and Privacy” section).
+
+A *package* is a bundle of one or more crates that provides a set of
+functionality. A package contains a *Cargo.toml* file that describes how to
+build those crates. Cargo is actually a package that contains the binary crate
+for the command-line tool you’ve been using to build your code. The Cargo
+package also contains a library crate that the binary crate depends on. Other
+projects can depend on the Cargo library crate to use the same logic the Cargo
+command-line tool uses.
+
+A package can contain as many binary crates as you like, but at most only one
+library crate. A package must contain at least one crate, whether that’s a
+library or binary crate.
+
+Let’s walk through what happens when we create a package. First, we enter the
+command `cargo new`:
+
+```
+$ cargo new my-project
+ Created binary (application) `my-project` package
+$ ls my-project
+Cargo.toml
+src
+$ ls my-project/src
+main.rs
+```
+
+<!-- I can't remember if we warned folks we were going to use unix commands. May
+want to throw in the Windows command here too, so they feel welcome. /JT -->
+<!-- I don't think JT has seen chapter 1 yet, we address that there /Carol -->
+
+After we run `cargo new`, we use `ls` to see what Cargo creates. In the project
+directory, there’s a *Cargo.toml* file, giving us a package. There’s also a
+*src* directory that contains *main.rs*. Open *Cargo.toml* in your text editor,
+and note there’s no mention of *src/main.rs*. Cargo follows a convention that
+*src/main.rs* is the crate root of a binary crate with the same name as the
+package. Likewise, Cargo knows that if the package directory contains
+*src/lib.rs*, the package contains a library crate with the same name as the
+package, and *src/lib.rs* is its crate root. Cargo passes the crate root files
+to `rustc` to build the library or binary.
+
+Here, we have a package that only contains *src/main.rs*, meaning it only
+contains a binary crate named `my-project`. If a package contains *src/main.rs*
+and *src/lib.rs*, it has two crates: a binary and a library, both with the same
+name as the package. A package can have multiple binary crates by placing files
+in the *src/bin* directory: each file will be a separate binary crate.
+
+## Defining Modules to Control Scope and Privacy
+
+In this section, we’ll talk about modules and other parts of the module system,
+namely *paths* that allow you to name items; the `use` keyword that brings a
+path into scope; and the `pub` keyword to make items public. We’ll also discuss
+the `as` keyword, external packages, and the glob operator.
+
+First, we’re going to start with a list of rules for easy reference when you’re
+organizing your code in the future. Then we’ll explain each of the rules in
+detail.
+
+### Modules Cheat Sheet
+
+<!--WHEN TRANSFERRED TO WORD, DECIDE ON BOX OR NOT -->
+
+Here we provide a quick reference on how modules, paths, the `use` keyword, and
+the `pub` keyword work in the compiler, and how most developers organize their
+code. We’ll be going through examples of each of these rules throughout this
+chapter, but this is a great place to refer to as a reminder of how modules
+work.
+
+- **Start from the crate root**: When compiling a crate, the compiler first
+ looks in the crate root file (usually *src/lib.rs* for a library crate or
+ *src/main.rs* for a binary crate) for code to compile.
+ <!-- I may be asking a silly question here... but what is the compiler looking
+ for in the crate root file? just things to start compiling? /LC -->
+ <!-- That's exactly it-- it's the starting point of compilation, and the
+ compiler will only find files if they're connected to the crate root somehow.
+ Do you think that should be mentioned here? Is there something about this
+ explanation that would make you feel more confident about the concept? /Carol
+ -->
+ <!-- I've added "for things to compile" -- I wanted to make sure the reader
+ knew they weren't missing anything, that there wasn't a particular thing
+ being looked for that the reader wasn't aware of /LC -->
+ <!-- I changed "things" to "code" to be more precise /Carol -->
+- **Declaring modules**: In the crate root file, you can declare new modules;
+say, you declare a “garden” module with `mod garden;`. The compiler will look
+for the module’s code in these places:
+
+ - Inline, within curly brackets that replace the semicolon following `mod
+ garden`
+ <!-- instead of or after the semicolon? Or is all of this instead of a
+ semicolon? /LC -->
+ <!-- Curly brackets and everything within them instead of the semicolon.
+ I'm not sure a pithy way to make that distinction clearer? /Carol -->
+ <!-- JT, would "Inline, within curly brackets that replace the semicolon
+ following `mod garden` be clearer/accurate? /LC -->
+ <!-- I wonder if we should order it where this cheatsheet happens after
+ we show more examples. Most of the time, you'll use the `mod` keyword to
+ pull files in as you refactor out into separate files. Sometimes you'll use
+ it for those key cases, like grouping tests. Showing those examples and then
+ going into the resolution may be a bit easier.
+
+ To your question - I think of this as something that could be more of
+ a warning. If you want to use `mod foo`, then be sure you haven't already
+ declared a module called that in the current file. If you do, the compiler
+ will see it first before it looks for a file with that name. /JT -->
+ <!-- I feel pretty strongly that the cheat sheet needs to go first, so that
+ after a reader's first time through the book, when they go back to the
+ modules chapter to try and figure out why their modules aren't working,
+ they get this first rather than having to read through or skip through the
+ examples when they're already frustrated.
+
+ I also don't feel like the "warning" way of talking about this belongs
+ here. I almost added a section called "common mistakes" or "pitfalls" or
+ "troubleshooting", and I think talking about what you *don't* want to do
+ would belong there...
+
+ Liz, I'm fine with your suggested wording and I've made that change. /Carol
+ -->
+
+ - In the file *src/garden.rs*
+ - In the file *src/garden/mod.rs*
+- **Declaring submodules**: In any file other than the crate root, you can
+ declare submodules. For example, you might declare `mod vegetables;` in
+ *src/garden.rs*. The compiler will look for the submodule’s code within the
+ directory named for the parent module in these places:
+ - Inline, directly following `mod vegetables`, within curly brackets instead
+ of the semicolon
+ - In the file *src/garden/vegetables.rs*
+ - In the file *src/garden/vegetables/mod.rs*
+- **Paths to code in modules**: Once a module is part of your crate, you can
+ refer to code in that module from anywhere else in that same crate, as long
+ as the privacy rules allow, using the path to the code. For example, an
+ `Asparagus` type in the garden vegetables module would be found at
+ `crate::garden::vegetables::Asparagus`.
+- **Private vs public**: Code within a module is private from its parent
+ modules by default. To make a module public, declare it with `pub mod`
+ instead of `mod`. To make items within a public module public as well, use
+ `pub` before their declarations.
+- **The `use` keyword**: Within a scope, the `use` keyword creates shortcuts to
+ items to reduce repetition of long paths. In any scope that can refer to
+ `crate::garden::vegetables::Asparagus`, you can create a shortcut with `use
+ crate::garden::vegetables::Asparagus;` and from then on you only need to
+ write `Asparagus` to make use of that type in the scope.
+
+Here we create a binary crate named `backyard` that illustrates these rules. The
+crate’s directory, also named `backyard`, contains these files and directories:
+
+```
+backyard
+├── Cargo.lock
+├── Cargo.toml
+└── src
+ ├── garden
+ │   └── vegetables.rs
+ ├── garden.rs
+ └── main.rs
+```
+
+The crate root file in this case is *src/main.rs*, and it contains:
+
+Filename: src/main.rs
+
+```
+use crate::garden::vegetables::Asparagus;
+
+pub mod garden;
+
+fn main() {
+ let plant = Asparagus {};
+ println!("I'm growing {:?}!", plant);
+}
+```
+
+The `pub mod garden;` line tells the compiler to include the code it finds in
+*src/garden.rs*, which is:
+
+Filename: src/garden.rs
+
+```
+pub mod vegetables;
+```
+
+Here, `pub mod vegetables;` means the code in *src/garden/vegetables.rs* is
+included too. That code is:
+
+```
+#[derive(Debug)]
+pub struct Asparagus {}
+```
+
+Now let’s get into the details of these rules and demonstrate them in action!
+
+### Grouping Related Code in Modules
+
+*Modules* let us organize code within a crate for readability and easy reuse.
+Modules also allow us to control the *privacy* of items, because code within a
+module is private by default. Private items are internal implementation details
+not available for outside use. We can choose to make modules and the items
+within them public, which exposes them to allow external code to use and depend
+on them.
+
+As an example, let’s write a library crate that provides the functionality of a
+restaurant. We’ll define the signatures of functions but leave their bodies
+empty to concentrate on the organization of the code, rather than the
+implementation of a restaurant.
+
+In the restaurant industry, some parts of a restaurant are referred to as
+*front of house* and others as *back of house*. Front of house is where
+customers are; this encompasses where the hosts seat customers, servers take
+orders and payment, and bartenders make drinks. Back of house is where the
+chefs and cooks work in the kitchen, dishwashers clean up, and managers do
+administrative work.
+
+To structure our crate in this way, we can organize its functions into nested
+modules. Create a new library named `restaurant` by running `cargo new --lib
+restaurant`; then enter the code in Listing 7-1 into *src/lib.rs* to define
+some modules and function signatures. Here’s the front of house section:
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ mod hosting {
+ fn add_to_waitlist() {}
+
+ fn seat_at_table() {}
+ }
+
+ mod serving {
+ fn take_order() {}
+
+ fn serve_order() {}
+
+ fn take_payment() {}
+ }
+}
+```
+
+Listing 7-1: A `front_of_house` module containing other modules that then
+contain functions
+
+We define a module with the `mod` keyword followed by the name of the module
+(in this case, `front_of_house`). The body of the module then goes inside curly
+brackets. Inside modules, we can place other modules, as in this case with the
+modules `hosting` and `serving`. Modules can also hold definitions for other
+items, such as structs, enums, constants, traits, and—as in Listing
+7-1—functions.
+
+By using modules, we can group related definitions together and name why
+they’re related. Programmers using this code can navigate the code based on the
+groups rather than having to read through all the definitions, making it easier
+to find the definitions relevant to them. Programmers adding new functionality
+to this code would know where to place the code to keep the program organized.
+
+Earlier, we mentioned that *src/main.rs* and *src/lib.rs* are called crate
+roots. The reason for their name is that the contents of either of these two
+files form a module named `crate` at the root of the crate’s module structure,
+known as the *module tree*.
+
+Listing 7-2 shows the module tree for the structure in Listing 7-1.
+
+```
+crate
+ └── front_of_house
+ ├── hosting
+ │ ├── add_to_waitlist
+ │ └── seat_at_table
+ └── serving
+ ├── take_order
+ ├── serve_order
+ └── take_payment
+```
+
+Listing 7-2: The module tree for the code in Listing 7-1
+
+This tree shows how some of the modules nest inside one another; for example,
+`hosting` nests inside `front_of_house`. The tree also shows that some modules
+are *siblings* to each other, meaning they’re defined in the same module;
+`hosting` and `serving` are siblings defined within `front_of_house`. If module
+A is contained inside module B, we say that module A is the *child* of module B
+and that module B is the *parent* of module A. Notice that the entire module
+tree is rooted under the implicit module named `crate`.
+
+The module tree might remind you of the filesystem’s directory tree on your
+computer; this is a very apt comparison! Just like directories in a filesystem,
+you use modules to organize your code. And just like files in a directory, we
+need a way to find our modules.
+
+## Paths for Referring to an Item in the Module Tree
+
+To show Rust where to find an item in a module tree, we use a path in the same
+way we use a path when navigating a filesystem. To call a function, we need to
+know its path.
+
+A path can take two forms:
+
+* An *absolute path* is the full path starting from a crate root; for code
+ from an external crate, the absolute path begins with the crate name, and for
+ code from the current crate, it starts with the literal `crate`.
+* A *relative path* starts from the current module and uses `self`, `super`, or
+ an identifier in the current module.
+
+Both absolute and relative paths are followed by one or more identifiers
+separated by double colons (`::`).
+
+Returning to Listing 7-1, say we want to call the `add_to_waitlist` function.
+This is the same as asking: what’s the path of the `add_to_waitlist` function?
+Listing 7-3 contains Listing 7-1 with some of the modules and functions
+removed.
+
+We’ll show two ways to call the `add_to_waitlist` function from a new function
+`eat_at_restaurant` defined in the crate root. These paths are correct, but
+there’s another problem remaining that will prevent this example from compiling
+as-is. We’ll explain why in a bit.
+
+The `eat_at_restaurant` function is part of our library crate’s public API, so
+we mark it with the `pub` keyword. In the “Exposing Paths with the `pub`
+Keyword” section, we’ll go into more detail about `pub`.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ mod hosting {
+ fn add_to_waitlist() {}
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Absolute path
+ crate::front_of_house::hosting::add_to_waitlist();
+
+ // Relative path
+ front_of_house::hosting::add_to_waitlist();
+}
+```
+
+<!-- We should probably let the reader know the above is expected to fail a
+little earlier. /JT -->
+<!-- I've rearranged a bit /Carol -->
+
+Listing 7-3: Calling the `add_to_waitlist` function using absolute and relative
+paths
+
+The first time we call the `add_to_waitlist` function in `eat_at_restaurant`,
+we use an absolute path. The `add_to_waitlist` function is defined in the same
+crate as `eat_at_restaurant`, which means we can use the `crate` keyword to
+start an absolute path. We then include each of the successive modules until we
+make our way to `add_to_waitlist`. You can imagine a filesystem with the same
+structure: we’d specify the path `/front_of_house/hosting/add_to_waitlist` to
+run the `add_to_waitlist` program; using the `crate` name to start from the
+crate root is like using `/` to start from the filesystem root in your shell.
+
+The second time we call `add_to_waitlist` in `eat_at_restaurant`, we use a
+relative path. The path starts with `front_of_house`, the name of the module
+defined at the same level of the module tree as `eat_at_restaurant`. Here the
+filesystem equivalent would be using the path
+`front_of_house/hosting/add_to_waitlist`. Starting with a module name means
+that the path is relative.
+
+Choosing whether to use a relative or absolute path is a decision you’ll make
+based on your project, and depends on whether you’re more likely to move item
+definition code separately from or together with the code that uses the item.
+For example, if we move the `front_of_house` module and the `eat_at_restaurant`
+function into a module named `customer_experience`, we’d need to update the
+absolute path to `add_to_waitlist`, but the relative path would still be valid.
+However, if we moved the `eat_at_restaurant` function separately into a module
+named `dining`, the absolute path to the `add_to_waitlist` call would stay the
+same, but the relative path would need to be updated.
+
+Our preference in general is to specify absolute paths because it’s more likely
+we’ll want to move code definitions and item calls independently of each other.
+
+Let’s try to compile Listing 7-3 and find out why it won’t compile yet! The
+error we get is shown in Listing 7-4.
+
+```
+$ cargo build
+ Compiling restaurant v0.1.0 (file:///projects/restaurant)
+error[E0603]: module `hosting` is private
+ --> src/lib.rs:9:28
+ |
+9 | crate::front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^ private module
+ |
+note: the module `hosting` is defined here
+ --> src/lib.rs:2:5
+ |
+2 | mod hosting {
+ | ^^^^^^^^^^^
+
+error[E0603]: module `hosting` is private
+ --> src/lib.rs:12:21
+ |
+12 | front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^ private module
+ |
+note: the module `hosting` is defined here
+ --> src/lib.rs:2:5
+ |
+2 | mod hosting {
+ | ^^^^^^^^^^^
+```
+
+Listing 7-4: Compiler errors from building the code in Listing 7-3
+
+The error messages say that module `hosting` is private. In other words, we
+have the correct paths for the `hosting` module and the `add_to_waitlist`
+function, but Rust won’t let us use them because it doesn’t have access to the
+private sections. In Rust, all items (functions, methods, structs, enums,
+modules, and constants) are private to parent modules by default. If you want
+to make an item like a function or struct private, you put it in a module.
+
+Items in a parent module can’t use the private items inside child modules, but
+items in child modules can use the items in their ancestor modules. This is
+because child modules wrap and hide their implementation details, but the child
+modules can see the context in which they’re defined. To continue with our
+metaphor, think of the privacy rules as being like the back office of a
+restaurant: what goes on in there is private to restaurant customers, but
+office managers can see and do everything in the restaurant they operate.
+
+Rust chose to have the module system function this way so that hiding inner
+implementation details is the default. That way, you know which parts of the
+inner code you can change without breaking outer code. However, Rust does give
+you the option to expose inner parts of child modules’ code to outer ancestor
+modules by using the `pub` keyword to make an item public.
+
+### Exposing Paths with the `pub` Keyword
+
+Let’s return to the error in Listing 7-4 that told us the `hosting` module is
+private. We want the `eat_at_restaurant` function in the parent module to have
+access to the `add_to_waitlist` function in the child module, so we mark the
+`hosting` module with the `pub` keyword, as shown in Listing 7-5.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ pub mod hosting {
+ fn add_to_waitlist() {}
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Absolute path
+ crate::front_of_house::hosting::add_to_waitlist();
+
+ // Relative path
+ front_of_house::hosting::add_to_waitlist();
+}
+```
+
+Listing 7-5: Declaring the `hosting` module as `pub` to use it from
+`eat_at_restaurant`
+
+Unfortunately, the code in Listing 7-5 still results in an error, as shown in
+Listing 7-6.
+
+```
+$ cargo build
+ Compiling restaurant v0.1.0 (file:///projects/restaurant)
+error[E0603]: function `add_to_waitlist` is private
+ --> src/lib.rs:9:37
+ |
+9 | crate::front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^^^^^^^^^ private function
+ |
+note: the function `add_to_waitlist` is defined here
+ --> src/lib.rs:3:9
+ |
+3 | fn add_to_waitlist() {}
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error[E0603]: function `add_to_waitlist` is private
+ --> src/lib.rs:12:30
+ |
+12 | front_of_house::hosting::add_to_waitlist();
+ | ^^^^^^^^^^^^^^^ private function
+ |
+note: the function `add_to_waitlist` is defined here
+ --> src/lib.rs:3:9
+ |
+3 | fn add_to_waitlist() {}
+ | ^^^^^^^^^^^^^^^^^^^^
+```
+
+Listing 7-6: Compiler errors from building the code in Listing 7-5
+
+What happened? Adding the `pub` keyword in front of `mod hosting` makes the
+module public. With this change, if we can access `front_of_house`, we can
+access `hosting`. But the *contents* of `hosting` are still private; making the
+module public doesn’t make its contents public. The `pub` keyword on a module
+only lets code in its ancestor modules refer to it, not access its inner code.
+Because modules are containers, there’s not much we can do by only making the
+module public; we need to go further and choose to make one or more of the
+items within the module public as well.
+
+The errors in Listing 7-6 say that the `add_to_waitlist` function is private.
+The privacy rules apply to structs, enums, functions, and methods as well as
+modules.
+
+Let’s also make the `add_to_waitlist` function public by adding the `pub`
+keyword before its definition, as in Listing 7-7.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Absolute path
+ crate::front_of_house::hosting::add_to_waitlist();
+
+ // Relative path
+ front_of_house::hosting::add_to_waitlist();
+}
+```
+
+Listing 7-7: Adding the `pub` keyword to `mod hosting` and `fn add_to_waitlist`
+lets us call the function from `eat_at_restaurant`
+
+Now the code will compile! To see why adding the `pub` keyword lets us use
+these paths in `add_to_waitlist` with respect to the privacy rules, let’s look
+at the absolute and the relative paths.
+
+In the absolute path, we start with `crate`, the root of our crate’s module
+tree. The `front_of_house` module is defined in the crate root. While
+`front_of_house` isn’t public, because the `eat_at_restaurant` function is
+defined in the same module as `front_of_house` (that is, `eat_at_restaurant`
+and `front_of_house` are siblings), we can refer to `front_of_house` from
+`eat_at_restaurant`. Next is the `hosting` module marked with `pub`. We can
+access the parent module of `hosting`, so we can access `hosting`. Finally, the
+`add_to_waitlist` function is marked with `pub` and we can access its parent
+module, so this function call works!
+
+In the relative path, the logic is the same as the absolute path except for the
+first step: rather than starting from the crate root, the path starts from
+`front_of_house`. The `front_of_house` module is defined within the same module
+as `eat_at_restaurant`, so the relative path starting from the module in which
+`eat_at_restaurant` is defined works. Then, because `hosting` and
+`add_to_waitlist` are marked with `pub`, the rest of the path works, and this
+function call is valid!
+
+If you plan on sharing your library crate so other projects can use your code,
+your public API is your contract with users of your crate that determines how
+they can interact with your code. There are many considerations around managing
+changes to your public API to make it easier for people to depend on your
+crate. These considerations are out of the scope of this book; if you’re
+interested in this topic, see The Rust API Guidelines at
+*https://rust-lang.github.io/api-guidelines/*.
+
+
+> #### Best Practices for Packages with a Binary and a Library
+>
+> We mentioned a package can contain both a *src/main.rs* binary crate root as
+> well as a *src/lib.rs* library crate root, and both crates will have the
+> package name by default. Typically, packages with this pattern of containing
+> both a library and a binary crate will have just
+> enough code in the binary crate to start an executable that calls code with
+> the library crate. This lets other projects benefit from the most
+> functionality that the package provides, because the library crate’s code can
+> be shared.
+>
+> The module tree should be defined in *src/lib.rs*. Then, any public items can
+> be used in the binary crate by starting paths with the name of the package.
+> The binary crate becomes a user of the library crate just like a completely
+> external crate would use the library crate: it can only use the public API.
+> This helps you design a good API; not only are you the author, you’re also a
+> client!
+>
+> In Chapter 12, we’ll demonstrate this organizational practice with a
+> command-line program that will contain both a binary crate and a library
+> crate.
+
+### Starting Relative Paths with `super`
+
+We can construct relative paths that begin in the parent module, rather than
+the current module or the crate root, by using `super` at the start of the
+path. This is like starting a filesystem path with the `..` syntax. Using
+`super` allows us to reference an item that we know is in the parent module,
+which can make rearranging the module tree easier when the module is closely
+related to the parent, but the parent might be moved elsewhere in the module
+tree someday.
+
+Consider the code in Listing 7-8 that models the situation in which a chef
+fixes an incorrect order and personally brings it out to the customer. The
+function `fix_incorrect_order` defined in the `back_of_house` module calls the
+function `deliver_order` defined in the parent module by specifying the path to
+`deliver_order` starting with `super`:
+
+Filename: src/lib.rs
+
+```
+fn deliver_order() {}
+
+mod back_of_house {
+ fn fix_incorrect_order() {
+ cook_order();
+ super::deliver_order();
+ }
+
+ fn cook_order() {}
+}
+```
+
+Listing 7-8: Calling a function using a relative path starting with `super`
+
+The `fix_incorrect_order` function is in the `back_of_house` module, so we can
+use `super` to go to the parent module of `back_of_house`, which in this case
+is `crate`, the root. From there, we look for `deliver_order` and find it.
+Success! We think the `back_of_house` module and the `deliver_order` function
+are likely to stay in the same relationship to each other and get moved
+together should we decide to reorganize the crate’s module tree. Therefore, we
+used `super` so we’ll have fewer places to update code in the future if this
+code gets moved to a different module.
+
+### Making Structs and Enums Public
+
+We can also use `pub` to designate structs and enums as public, but there are a
+few details extra to the usage of `pub` with structs and enums. If we use `pub`
+before a struct definition, we make the struct public, but the struct’s fields
+will still be private. We can make each field public or not on a case-by-case
+basis. In Listing 7-9, we’ve defined a public `back_of_house::Breakfast` struct
+with a public `toast` field but a private `seasonal_fruit` field. This models
+the case in a restaurant where the customer can pick the type of bread that
+comes with a meal, but the chef decides which fruit accompanies the meal based
+on what’s in season and in stock. The available fruit changes quickly, so
+customers can’t choose the fruit or even see which fruit they’ll get.
+
+Filename: src/lib.rs
+
+```
+mod back_of_house {
+ pub struct Breakfast {
+ pub toast: String,
+ seasonal_fruit: String,
+ }
+
+ impl Breakfast {
+ pub fn summer(toast: &str) -> Breakfast {
+ Breakfast {
+ toast: String::from(toast),
+ seasonal_fruit: String::from("peaches"),
+ }
+ }
+ }
+}
+
+pub fn eat_at_restaurant() {
+ // Order a breakfast in the summer with Rye toast
+ let mut meal = back_of_house::Breakfast::summer("Rye");
+ // Change our mind about what bread we'd like
+ meal.toast = String::from("Wheat");
+ println!("I'd like {} toast please", meal.toast);
+
+ // The next line won't compile if we uncomment it; we're not allowed
+ // to see or modify the seasonal fruit that comes with the meal
+ // meal.seasonal_fruit = String::from("blueberries");
+}
+```
+
+Listing 7-9: A struct with some public fields and some private fields
+
+Because the `toast` field in the `back_of_house::Breakfast` struct is public,
+in `eat_at_restaurant` we can write and read to the `toast` field using dot
+notation. Notice that we can’t use the `seasonal_fruit` field in
+`eat_at_restaurant` because `seasonal_fruit` is private. Try uncommenting the
+line modifying the `seasonal_fruit` field value to see what error you get!
+
+Also, note that because `back_of_house::Breakfast` has a private field, the
+struct needs to provide a public associated function that constructs an
+instance of `Breakfast` (we’ve named it `summer` here). If `Breakfast` didn’t
+have such a function, we couldn’t create an instance of `Breakfast` in
+`eat_at_restaurant` because we couldn’t set the value of the private
+`seasonal_fruit` field in `eat_at_restaurant`.
+
+In contrast, if we make an enum public, all of its variants are then public. We
+only need the `pub` before the `enum` keyword, as shown in Listing 7-10.
+
+Filename: src/lib.rs
+
+```
+mod back_of_house {
+ pub enum Appetizer {
+ Soup,
+ Salad,
+ }
+}
+
+pub fn eat_at_restaurant() {
+ let order1 = back_of_house::Appetizer::Soup;
+ let order2 = back_of_house::Appetizer::Salad;
+}
+```
+
+Listing 7-10: Designating an enum as public makes all its variants public
+
+Because we made the `Appetizer` enum public, we can use the `Soup` and `Salad`
+variants in `eat_at_restaurant`.
+
+Enums aren’t very useful unless their variants are public; it would be annoying
+to have to annotate all enum variants with `pub` in every case, so the default
+for enum variants is to be public. Structs are often useful without their
+fields being public, so struct fields follow the general rule of everything
+being private by default unless annotated with `pub`.
+
+There’s one more situation involving `pub` that we haven’t covered, and that is
+our last module system feature: the `use` keyword. We’ll cover `use` by itself
+first, and then we’ll show how to combine `pub` and `use`.
+
+## Bringing Paths into Scope with the `use` Keyword
+
+Having to write out the paths to call functions can feel inconvenient and
+repetitive. In Listing 7-7, whether we chose the absolute or relative path to
+the `add_to_waitlist` function, every time we wanted to call `add_to_waitlist`
+we had to specify `front_of_house` and `hosting` too. Fortunately, there’s a
+way to simplify this process: we can create a shortcut to a path with the `use`
+keyword once, and then use the shorter name everywhere else in the scope.
+
+In Listing 7-11, we bring the `crate::front_of_house::hosting` module into the
+scope of the `eat_at_restaurant` function so we only have to specify
+`hosting::add_to_waitlist` to call the `add_to_waitlist` function in
+`eat_at_restaurant`.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
+```
+
+Listing 7-11: Bringing a module into scope with `use`
+
+Adding `use` and a path in a scope is similar to creating a symbolic link in
+the filesystem. By adding `use crate::front_of_house::hosting` in the crate
+root, `hosting` is now a valid name in that scope, just as though the `hosting`
+module had been defined in the crate root. Paths brought into scope with `use`
+also check privacy, like any other paths.
+
+Note that `use` only creates the shortcut for the particular scope in which the
+`use` occurs. Listing 7-12 moves the `eat_at_restaurant` function into a new
+child module named `customer`, which is then a different scope than the `use`
+statement, so the function body won’t compile:
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+use crate::front_of_house::hosting;
+
+mod customer {
+ pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+ }
+}
+```
+
+Listing 7-12: A `use` statement only applies in the scope it’s in
+
+The compiler error shows that the shortcut no longer applies within the
+`customer` module:
+
+```
+error[E0433]: failed to resolve: use of undeclared crate or module `hosting`
+ --> src/lib.rs:11:9
+ |
+11 | hosting::add_to_waitlist();
+ | ^^^^^^^ use of undeclared crate or module `hosting`
+
+warning: unused import: `crate::front_of_house::hosting`
+ --> src/lib.rs:7:5
+ |
+7 | use crate::front_of_house::hosting;
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_imports)]` on by default
+```
+
+Notice there’s also a warning that the `use` is no longer used in its scope! To
+fix this problem, move the `use` within the `customer` module too, or reference
+the shortcut in the parent module with `super::hosting` within the child
+`customer` module.
+
+### Creating Idiomatic `use` Paths
+
+In Listing 7-11, you might have wondered why we specified `use
+crate::front_of_house::hosting` and then called `hosting::add_to_waitlist` in
+`eat_at_restaurant` rather than specifying the `use` path all the way out to
+the `add_to_waitlist` function to achieve the same result, as in Listing 7-13.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+use crate::front_of_house::hosting::add_to_waitlist;
+
+pub fn eat_at_restaurant() {
+ add_to_waitlist();
+}
+```
+
+Listing 7-13: Bringing the `add_to_waitlist` function into scope with `use`,
+which is unidiomatic
+
+Although both Listing 7-11 and 7-13 accomplish the same task, Listing 7-11 is
+the idiomatic way to bring a function into scope with `use`. Bringing the
+function’s parent module into scope with `use` means we have to specify the
+parent module when calling the function. Specifying the parent module when
+calling the function makes it clear that the function isn’t locally defined
+while still minimizing repetition of the full path. The code in Listing 7-13 is
+unclear as to where `add_to_waitlist` is defined.
+
+On the other hand, when bringing in structs, enums, and other items with `use`,
+it’s idiomatic to specify the full path. Listing 7-14 shows the idiomatic way
+to bring the standard library’s `HashMap` struct into the scope of a binary
+crate.
+
+Filename: src/main.rs
+
+```
+use std::collections::HashMap;
+
+fn main() {
+ let mut map = HashMap::new();
+ map.insert(1, 2);
+}
+```
+
+Listing 7-14: Bringing `HashMap` into scope in an idiomatic way
+
+There’s no strong reason behind this idiom: it’s just the convention that has
+emerged, and folks have gotten used to reading and writing Rust code this way.
+
+The exception to this idiom is if we’re bringing two items with the same name
+into scope with `use` statements, because Rust doesn’t allow that. Listing 7-15
+shows how to bring two `Result` types into scope that have the same name but
+different parent modules and how to refer to them.
+
+Filename: src/lib.rs
+
+```
+use std::fmt;
+use std::io;
+
+fn function1() -> fmt::Result {
+ // --snip--
+}
+
+fn function2() -> io::Result<()> {
+ // --snip--
+}
+```
+
+Listing 7-15: Bringing two types with the same name into the same scope
+requires using their parent modules.
+
+As you can see, using the parent modules distinguishes the two `Result` types.
+If instead we specified `use std::fmt::Result` and `use std::io::Result`, we’d
+have two `Result` types in the same scope and Rust wouldn’t know which one we
+meant when we used `Result`.
+
+### Providing New Names with the `as` Keyword
+
+There’s another solution to the problem of bringing two types of the same name
+into the same scope with `use`: after the path, we can specify `as` and a new
+local name, or *alias*, for the type. Listing 7-16 shows another way to write
+the code in Listing 7-15 by renaming one of the two `Result` types using `as`.
+
+Filename: src/lib.rs
+
+```
+use std::fmt::Result;
+use std::io::Result as IoResult;
+
+fn function1() -> Result {
+ // --snip--
+}
+
+fn function2() -> IoResult<()> {
+ // --snip--
+}
+```
+
+Listing 7-16: Renaming a type when it’s brought into scope with the `as` keyword
+
+In the second `use` statement, we chose the new name `IoResult` for the
+`std::io::Result` type, which won’t conflict with the `Result` from `std::fmt`
+that we’ve also brought into scope. Listing 7-15 and Listing 7-16 are
+considered idiomatic, so the choice is up to you!
+
+### Re-exporting Names with `pub use`
+
+When we bring a name into scope with the `use` keyword, the name available in
+the new scope is private. To enable the code that calls our code to refer to
+that name as if it had been defined in that code’s scope, we can combine `pub`
+and `use`. This technique is called *re-exporting* because we’re bringing
+an item into scope but also making that item available for others to bring into
+their scope.
+
+Listing 7-17 shows the code in Listing 7-11 with `use` in the root module
+changed to `pub use`.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house {
+ pub mod hosting {
+ pub fn add_to_waitlist() {}
+ }
+}
+
+pub use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
+```
+
+Listing 7-17: Making a name available for any code to use from a new scope with
+`pub use`
+
+Before this change, external code would have to call the `add_to_waitlist`
+function by using the path
+`restaurant::front_of_house::hosting::add_to_waitlist()`. Now that this `pub
+use` has re-exported the `hosting` module from the root module, external code
+can now use the path `restaurant::hosting::add_to_waitlist()` instead.
+
+Re-exporting is useful when the internal structure of your code is different
+from how programmers calling your code would think about the domain. For
+example, in this restaurant metaphor, the people running the restaurant think
+about “front of house” and “back of house.” But customers visiting a restaurant
+probably won’t think about the parts of the restaurant in those terms. With
+`pub use`, we can write our code with one structure but expose a different
+structure. Doing so makes our library well organized for programmers working on
+the library and programmers calling the library. We’ll look at another example
+of `pub use` and how it affects your crate’s documentation in the “Exporting a
+Convenient Public API with `pub use`” section of Chapter 14.
+
+### Using External Packages
+
+In Chapter 2, we programmed a guessing game project that used an external
+package called `rand` to get random numbers. To use `rand` in our project, we
+added this line to *Cargo.toml*:
+
+Filename: Cargo.toml
+
+```
+rand = "0.8.3"
+```
+
+Adding `rand` as a dependency in *Cargo.toml* tells Cargo to download the
+`rand` package and any dependencies from *https://crates.io/* and make `rand`
+available to our project.
+
+Then, to bring `rand` definitions into the scope of our package, we added a
+`use` line starting with the name of the crate, `rand`, and listed the items we
+wanted to bring into scope. Recall that in the “Generating a Random Number”
+section in Chapter 2, we brought the `Rng` trait into scope and called the
+`rand::thread_rng` function:
+
+```
+use rand::Rng;
+
+fn main() {
+ let secret_number = rand::thread_rng().gen_range(1..101);
+}
+```
+
+Members of the Rust community have made many packages available at
+*https://crates.io/*, and pulling any of them into your package involves these
+same steps: listing them in your package’s *Cargo.toml* file and using `use` to
+bring items from their crates into scope.
+
+Note that the standard `std` library is also a crate that’s external to our
+package. Because the standard library is shipped with the Rust language, we
+don’t need to change *Cargo.toml* to include `std`. But we do need to refer to
+it with `use` to bring items from there into our package’s scope. For example,
+with `HashMap` we would use this line:
+
+```
+use std::collections::HashMap;
+```
+
+This is an absolute path starting with `std`, the name of the standard library
+crate.
+
+### Using Nested Paths to Clean Up Large `use` Lists
+
+If we’re using multiple items defined in the same crate or same module,
+listing each item on its own line can take up a lot of vertical space in our
+files. For example, these two `use` statements we had in the Guessing Game in
+Listing 2-4 bring items from `std` into scope:
+
+Filename: src/main.rs
+
+```
+// --snip--
+use std::cmp::Ordering;
+use std::io;
+// --snip--
+```
+
+Instead, we can use nested paths to bring the same items into scope in one
+line. We do this by specifying the common part of the path, followed by two
+colons, and then curly brackets around a list of the parts of the paths that
+differ, as shown in Listing 7-18.
+
+Filename: src/main.rs
+
+```
+// --snip--
+use std::{cmp::Ordering, io};
+// --snip--
+```
+
+Listing 7-18: Specifying a nested path to bring multiple items with the same
+prefix into scope
+
+In bigger programs, bringing many items into scope from the same crate or
+module using nested paths can reduce the number of separate `use` statements
+needed by a lot!
+
+We can use a nested path at any level in a path, which is useful when combining
+two `use` statements that share a subpath. For example, Listing 7-19 shows two
+`use` statements: one that brings `std::io` into scope and one that brings
+`std::io::Write` into scope.
+
+Filename: src/lib.rs
+
+```
+use std::io;
+use std::io::Write;
+```
+
+Listing 7-19: Two `use` statements where one is a subpath of the other
+
+The common part of these two paths is `std::io`, and that’s the complete first
+path. To merge these two paths into one `use` statement, we can use `self` in
+the nested path, as shown in Listing 7-20.
+
+Filename: src/lib.rs
+
+```
+use std::io::{self, Write};
+```
+
+Listing 7-20: Combining the paths in Listing 7-19 into one `use` statement
+
+This line brings `std::io` and `std::io::Write` into scope.
+
+### The Glob Operator
+
+If we want to bring *all* public items defined in a path into scope, we can
+specify that path followed by the `*` glob operator:
+
+```
+use std::collections::*;
+```
+
+This `use` statement brings all public items defined in `std::collections` into
+the current scope. Be careful when using the glob operator! Glob can make it
+harder to tell what names are in scope and where a name used in your program
+was defined.
+
+The glob operator is often used when testing to bring everything under test
+into the `tests` module; we’ll talk about that in the “How to Write Tests”
+section in Chapter 11. The glob operator is also sometimes used as part of the
+prelude pattern: see the standard library documentation for more information on
+that pattern.
+
+## Separating Modules into Different Files
+
+So far, all the examples in this chapter defined multiple modules in one file.
+When modules get large, you might want to move their definitions to a separate
+file to make the code easier to navigate.
+
+For example, let’s start from the code in Listing 7-17 that had multiple
+restaurant modules. We’ll extract modules into files instead of having all the
+modules defined in the crate root file. In this case, the crate root file is
+*src/lib.rs*, but this procedure also works with binary crates whose crate root
+file is *src/main.rs*.
+
+First, we’ll extract the `front_of_house` module to its own file. Remove the
+code inside the curly brackets for the `front_of_house` module, leaving only
+the `mod front_of_house;` declaration, so that *src/lib.rs* contains the code
+shown in Listing 7-21. Note that this won’t compile until we create the
+*src/front_of_house.rs* file in Listing 7-22.
+
+Filename: src/lib.rs
+
+```
+mod front_of_house;
+
+pub use crate::front_of_house::hosting;
+
+pub fn eat_at_restaurant() {
+ hosting::add_to_waitlist();
+}
+```
+
+Listing 7-21: Declaring the `front_of_house` module whose body will be in
+*src/front_of_house.rs*
+
+Next, place the code that was in the curly brackets into a new file named
+*src/front_of_house.rs*, as shown in Listing 7-22. The compiler knows to look
+in this file because it came across the module declaration in the crate root
+with the name `front_of_house`.
+
+Filename: src/front_of_house.rs
+
+```
+pub mod hosting {
+ pub fn add_to_waitlist() {}
+}
+```
+
+Listing 7-22: Definitions inside the `front_of_house` module in
+*src/front_of_house.rs*
+
+Note that you only need to load a file using a `mod` declaration *once* in your
+module tree. Once the compiler knows the file is part of the project (and knows
+where in the module tree the code resides because of where you’ve put the `mod`
+statement), other files in your project should refer to the loaded file’s code
+using a path to where it was declared, as covered in the “Paths for Referring
+to an Item in the Module Tree” section. In other words, `mod` is *not* an
+“include” operation that you may have seen in other programming languages.
+
+Next, we’ll extract the `hosting` module to its own file. The process
+is a bit different because `hosting` is a child module of `front_of_house`, not
+of the root module. We’ll place the file for `hosting` in a new directory that
+will be named for its ancestors in the module tree, in this case
+*src/front_of_house/*.
+
+To start moving `hosting`, we change *src/front_of_house.rs* to contain only the
+declaration of the `hosting` module:
+
+Filename: src/front_of_house.rs
+
+```
+pub mod hosting;
+```
+
+Then we create a *src/front_of_house* directory and a file *hosting.rs* to
+contain the definitions made in the `hosting` module:
+
+Filename: src/front_of_house/hosting.rs
+
+```
+pub fn add_to_waitlist() {}
+```
+
+If we instead put *hosting.rs* in the *src* directory, the compiler would
+expect the *hosting.rs* code to be in a `hosting` module declared in the crate
+root, and not delcared as a child of the `front_of_house` module. The
+compiler’s rules for which files to check for which modules’ code means the
+directories and files more closely match the module tree.
+
+
+> ### Alternate File Paths
+>
+> So far we’ve covered the most idiomatic file paths the Rust compiler uses,
+> but Rust also supports an older style of file path. For a module named
+> `front_of_house` declared in the crate root, the compiler will look for the
+> module’s code in:
+>
+> * *src/front_of_house.rs* (what we covered)
+> * *src/front_of_house/mod.rs* (older style, still supported path)
+>
+> For a module named `hosting` that is a submodule of `front_of_house`, the
+> compiler will look for the module’s code in:
+>
+> * *src/front_of_house/hosting.rs* (what we covered)
+> * *src/front_of_house/hosting/mod.rs* (older style, still supported path)
+>
+> If you use both styles for the same module, you’ll get a compiler error. Using
+> a mix of both styles for different modules in the same project is allowed, but
+> might be confusing for people navigating your project.
+>
+> The main downside to the style that uses files named *mod.rs* is that your
+> project can end up with many files named *mod.rs*, which can get confusing
+> when you have them open in your editor at the same time.
+
+We’ve moved each module’s code to a separate file, and the module tree remains
+the same. The function calls in `eat_at_restaurant` will work without any
+modification, even though the definitions live in different files. This
+technique lets you move modules to new files as they grow in size.
+
+Note that the `pub use crate::front_of_house::hosting` statement in
+*src/lib.rs* also hasn’t changed, nor does `use` have any impact on what files
+are compiled as part of the crate. The `mod` keyword declares modules, and Rust
+looks in a file with the same name as the module for the code that goes into
+that module.
+
+## Summary
+
+Rust lets you split a package into multiple crates and a crate into modules
+so you can refer to items defined in one module from another module. You can do
+this by specifying absolute or relative paths. These paths can be brought into
+scope with a `use` statement so you can use a shorter path for multiple uses of
+the item in that scope. Module code is private by default, but you can make
+definitions public by adding the `pub` keyword.
+
+In the next chapter, we’ll look at some collection data structures in the
+standard library that you can use in your neatly organized code.
diff --git a/src/doc/book/nostarch/chapter08.md b/src/doc/book/nostarch/chapter08.md
new file mode 100644
index 000000000..1c7968c99
--- /dev/null
+++ b/src/doc/book/nostarch/chapter08.md
@@ -0,0 +1,1284 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Common Collections
+
+Rust’s standard library includes a number of very useful data structures called
+*collections*. Most other data types represent one specific value, but
+collections can contain multiple values. Unlike the built-in array and tuple
+types, the data these collections point to is stored on the heap, which means
+the amount of data does not need to be known at compile time and can grow or
+shrink as the program runs. Each kind of collection has different capabilities
+and costs, and choosing an appropriate one for your current situation is a
+skill you’ll develop over time. In this chapter, we’ll discuss three
+collections that are used very often in Rust programs:
+
+* A *vector* allows you to store a variable number of values next to each other.
+* A *string* is a collection of characters. We’ve mentioned the `String` type
+ previously, but in this chapter we’ll talk about it in depth.
+* A *hash map* allows you to associate a value with a particular key. It’s a
+ particular implementation of the more general data structure called a *map*.
+
+To learn about the other kinds of collections provided by the standard library,
+see the documentation at *https://doc.rust-lang.org/std/collections/index.html*.
+
+We’ll discuss how to create and update vectors, strings, and hash maps, as well
+as what makes each special.
+
+## Storing Lists of Values with Vectors
+
+The first collection type we’ll look at is `Vec<T>`, also known as a *vector*.
+Vectors allow you to store more than one value in a single data structure that
+puts all the values next to each other in memory. Vectors can only store values
+of the same type. They are useful when you have a list of items, such as the
+lines of text in a file or the prices of items in a shopping cart.
+
+### Creating a New Vector
+
+To create a new empty vector, we call the `Vec::new` function, as shown in
+Listing 8-1.
+
+```
+let v: Vec<i32> = Vec::new();
+```
+
+Listing 8-1: Creating a new, empty vector to hold values of type `i32`
+
+Note that we added a type annotation here. Because we aren’t inserting any
+values into this vector, Rust doesn’t know what kind of elements we intend to
+store. This is an important point. Vectors are implemented using generics;
+we’ll cover how to use generics with your own types in Chapter 10. For now,
+know that the `Vec<T>` type provided by the standard library can hold any type.
+When we create a vector to hold a specific type, we can specify the type within
+angle brackets. In Listing 8-1, we’ve told Rust that the `Vec<T>` in `v` will
+hold elements of the `i32` type.
+
+More often, you’ll create a `Vec<T>` with initial values and Rust will infer
+the type of value you want to store, so you rarely need to do this type
+annotation. Rust conveniently provides the `vec!` macro, which will create a
+new vector that holds the values you give it. Listing 8-2 creates a new
+`Vec<i32>` that holds the values `1`, `2`, and `3`. The integer type is `i32`
+because that’s the default integer type, as we discussed in the “Data Types”
+section of Chapter 3.
+
+```
+let v = vec![1, 2, 3];
+```
+
+Listing 8-2: Creating a new vector containing values
+
+Because we’ve given initial `i32` values, Rust can infer that the type of `v`
+is `Vec<i32>`, and the type annotation isn’t necessary. Next, we’ll look at how
+to modify a vector.
+
+### Updating a Vector
+
+To create a vector and then add elements to it, we can use the `push` method,
+as shown in Listing 8-3.
+
+```
+let mut v = Vec::new();
+
+v.push(5);
+v.push(6);
+v.push(7);
+v.push(8);
+```
+
+Listing 8-3: Using the `push` method to add values to a vector
+
+As with any variable, if we want to be able to change its value, we need to
+make it mutable using the `mut` keyword, as discussed in Chapter 3. The numbers
+we place inside are all of type `i32`, and Rust infers this from the data, so
+we don’t need the `Vec<i32>` annotation.
+
+<!--
+I think people from other languages may get stuck a bit here because this is
+the first time (I think?) that we're showing a hindley-milner style type
+inference in action (rather than using the initializer to infer the type).
+
+Should we show the definition for `push`? That'd let us tie together the method
+call, mutable reference to self drawing on the `impl` we saw in earlier
+chapters and help to explain a little why the above works without having to
+annotate the type of the Vec.
+/JT --->
+<!-- I think readers would be more confused showing the definition of `push`
+here because we haven't covered generics yet. I haven't gotten comments about
+people being confused at this point (which doesn't mean they aren't), but
+personally when I learned this, it made sense to me that the type of the vector
+would be known from what I put in it. I'm leaning towards not elaborating here.
+/Carol -->
+
+### Reading Elements of Vectors
+
+There are two ways to reference a value stored in a vector: via indexing or
+using the `get` method. In the following examples, we’ve annotated the types of
+the values that are returned from these functions for extra clarity.
+
+Listing 8-4 shows both methods of accessing a value in a vector, with indexing
+syntax and the `get` method.
+
+```
+let v = vec![1, 2, 3, 4, 5];
+
+[1] let third: &i32 = &v[2];
+println!("The third element is {}", third);
+
+[2] let third: Option<&i32> = v.get(2);
+match third {
+ Some(third) => println!("The third element is {}", third),
+ None => println!("There is no third element."),
+}
+```
+
+Listing 8-4: Using indexing syntax or the `get` method to access an item in a
+vector
+
+Note a few details here. We use the index value of `2` to get the third element
+[1] because vectors are indexed by number, starting at zero. Using `&` and `[]`
+gives us a reference to the element at the index value. When we use the `get`
+method with the index passed as an argument [2], we get an `Option<&T>` that we
+can use with `match`.
+
+<!---
+I think it should be "Second, we get the third element by using both `&` and
+`[]`"
+/JT --->
+<!-- No, it shouldn't, but I reworded this whole paragraph and added wingdings
+because it was unclear /Carol -->
+
+The reason Rust provides these two ways to reference an element is so you can
+choose how the program behaves when you try to use an index value outside the
+range of existing elements. As an example, let’s see what happens when we have
+a vector of five elements and then we try to access an element at index 100
+with each technique, as shown in Listing 8-5.
+
+```
+let v = vec![1, 2, 3, 4, 5];
+
+let does_not_exist = &v[100];
+let does_not_exist = v.get(100);
+```
+
+Listing 8-5: Attempting to access the element at index 100 in a vector
+containing five elements
+
+When we run this code, the first `[]` method will cause the program to panic
+because it references a nonexistent element. This method is best used when you
+want your program to crash if there’s an attempt to access an element past the
+end of the vector.
+
+When the `get` method is passed an index that is outside the vector, it returns
+`None` without panicking. You would use this method if accessing an element
+beyond the range of the vector may happen occasionally under normal
+circumstances. Your code will then have logic to handle having either
+`Some(&element)` or `None`, as discussed in Chapter 6. For example, the index
+could be coming from a person entering a number. If they accidentally enter a
+number that’s too large and the program gets a `None` value, you could tell the
+user how many items are in the current vector and give them another chance to
+enter a valid value. That would be more user-friendly than crashing the program
+due to a typo!
+
+When the program has a valid reference, the borrow checker enforces the
+ownership and borrowing rules (covered in Chapter 4) to ensure this reference
+and any other references to the contents of the vector remain valid. Recall the
+rule that states you can’t have mutable and immutable references in the same
+scope. That rule applies in Listing 8-6, where we hold an immutable reference
+to the first element in a vector and try to add an element to the end. This
+program won’t work if we also try to refer to that element later in the
+function:
+
+```
+let mut v = vec![1, 2, 3, 4, 5];
+
+let first = &v[0];
+
+v.push(6);
+
+println!("The first element is: {}", first);
+```
+
+Listing 8-6: Attempting to add an element to a vector while holding a reference
+to an item
+
+Compiling this code will result in this error:
+
+```
+ --> src/main.rs:6:5
+ |
+4 | let first = &v[0];
+ | - immutable borrow occurs here
+5 |
+6 | v.push(6);
+ | ^^^^^^^^^ mutable borrow occurs here
+7 |
+8 | println!("The first element is: {}", first);
+ | ----- immutable borrow later used here
+```
+
+The code in Listing 8-6 might look like it should work: why should a reference
+to the first element care about changes at the end of the vector? This error is
+due to the way vectors work: because vectors put the values next to each other
+in memory, adding a new element onto the end of the vector might require
+allocating new memory and copying the old elements to the new space, if there
+isn’t enough room to put all the elements next to each other where the vector
+is currently stored. In that case, the reference to the first element would be
+pointing to deallocated memory. The borrowing rules prevent programs from
+ending up in that situation.
+
+> Note: For more on the implementation details of the `Vec<T>` type, see “The
+> Rustonomicon” at *https://doc.rust-lang.org/nomicon/vec/vec.html*.
+
+### Iterating over the Values in a Vector
+
+To access each element in a vector in turn, we would iterate through all of the
+elements rather than use indices to access one at a time. Listing 8-7 shows how
+to use a `for` loop to get immutable references to each element in a vector of
+`i32` values and print them.
+
+```
+let v = vec![100, 32, 57];
+for i in &v {
+ println!("{}", i);
+}
+```
+
+Listing 8-7: Printing each element in a vector by iterating over the elements
+using a `for` loop
+
+We can also iterate over mutable references to each element in a mutable vector
+in order to make changes to all the elements. The `for` loop in Listing 8-8
+will add `50` to each element.
+
+```
+let mut v = vec![100, 32, 57];
+for i in &mut v {
+ *i += 50;
+}
+```
+
+Listing 8-8: Iterating over mutable references to elements in a vector
+
+To change the value that the mutable reference refers to, we have to use the
+`*` dereference operator to get to the value in `i` before we can use the
+`+=` operator. We’ll talk more about the dereference operator in the
+“Following the Pointer to the Value with the Dereference Operator”
+section of Chapter 15.
+
+Iterating over a vector, whether immutably or mutably, is safe because of the
+borrow checker’s rules. If we attempted to insert or remove items in the `for`
+loop bodies in Listing 8-7 and Listing 8-8, we would get a compiler error
+similar to the one we got with the code in Listing 8-6. The reference to the
+vector that the `for` loop holds prevents simultaneous modification of the
+whole vector.
+
+<!--
+Maybe worth a mention: the above use of the mutable reference while you iterate
+is perfectly safe because there's no changing that's happening to the vector
+that would invalidate the iterator. But, if you wanted to iterate the vector
+while also trying to remove or insert elements, you'd get an error. For example:
+
+```
+let mut v = vec![100, 32, 57];
+for i in &mut v {
+ *i += 50;
+ if *i > 100 {
+ v.push(10); // <-- a second mutable reference is needed and will fail to compile
+ }
+}
+```
+
+Things like this help Rust prevent some classic C++ issues where people didn't
+think about the implications of growing/shrinking a container while iterating
+over it.
+/JT --->
+<!-- I thought Listing 8-6 covered this, but I can see how driving home the
+connection with iteration as well is worthwhile so I added a paragraph just
+before this comment. Please check for clarity Liz! /Carol -->
+
+### Using an Enum to Store Multiple Types
+
+Vectors can only store values that are the same type. This can be inconvenient;
+there are definitely use cases for needing to store a list of items of
+different types. Fortunately, the variants of an enum are defined under the
+same enum type, so when we need one type to represent elements of different
+types, we can define and use an enum!
+
+For example, say we want to get values from a row in a spreadsheet in which
+some of the columns in the row contain integers, some floating-point numbers,
+and some strings. We can define an enum whose variants will hold the different
+value types, and all the enum variants will be considered the same type: that
+of the enum. Then we can create a vector to hold that enum and so, ultimately,
+holds different types. We’ve demonstrated this in Listing 8-9.
+
+```
+enum SpreadsheetCell {
+ Int(i32),
+ Float(f64),
+ Text(String),
+}
+
+let row = vec![
+ SpreadsheetCell::Int(3),
+ SpreadsheetCell::Text(String::from("blue")),
+ SpreadsheetCell::Float(10.12),
+];
+```
+
+Listing 8-9: Defining an `enum` to store values of different types in one
+vector
+
+Rust needs to know what types will be in the vector at compile time so it knows
+exactly how much memory on the heap will be needed to store each element. We
+must also be explicit about what types are allowed in this vector. If Rust
+allowed a vector to hold any type, there would be a chance that one or more of
+the types would cause errors with the operations performed on the elements of
+the vector. Using an enum plus a `match` expression means that Rust will ensure
+at compile time that every possible case is handled, as discussed in Chapter 6.
+
+If you don’t know the exhaustive set of types a program will get at runtime to
+store in a vector, the enum technique won’t work. Instead, you can use a trait
+object, which we’ll cover in Chapter 17.
+
+Now that we’ve discussed some of the most common ways to use vectors, be sure
+to review the API documentation for all the many useful methods defined on
+`Vec<T>` by the standard library. For example, in addition to `push`, a `pop`
+method removes and returns the last element.
+
+### Dropping a Vector Drops Its Elements
+
+Like any other `struct`, a vector is freed when it goes out of scope, as
+annotated in Listing 8-10.
+
+```
+{
+ let v = vec![1, 2, 3, 4];
+
+ // do stuff with v
+} // <- v goes out of scope and is freed here
+```
+
+Listing 8-10: Showing where the vector and its elements are dropped
+
+When the vector gets dropped, all of its contents are also dropped, meaning the
+integers it holds will be cleaned up. The borrow checker ensures that any
+references to contents of a vector are only used while the vector itself is
+valid.
+
+Let’s move on to the next collection type: `String`!
+
+<!--
+nit: I think "meaning the integers it holds will be cleaned up" reads a little
+better
+
+nit #2: imho dropping isn't as imports when you start using vectors as reading
+elements from the vector. Is it better for training to mention it here, or
+would it be possible to move it later?
+/JT -->
+<!-- Took both nit suggestions-- reworded for nit #1 and moved this section to
+the end of the Vec section (and renumbered the listings) for nit #2. Liz,
+please check to make sure I didn't miss anything in the way the Vec section
+flows now! /Carol -->
+
+## Storing UTF-8 Encoded Text with Strings
+
+We talked about strings in Chapter 4, but we’ll look at them in more depth now.
+New Rustaceans commonly get stuck on strings for a combination of three
+reasons: Rust’s propensity for exposing possible errors, strings being a more
+complicated data structure than many programmers give them credit for, and
+UTF-8. These factors combine in a way that can seem difficult when you’re
+coming from other programming languages.
+
+We discuss strings in the context of collections because strings are
+implemented as a collection of bytes, plus some methods to provide useful
+functionality when those bytes are interpreted as text. In this section, we’ll
+talk about the operations on `String` that every collection type has, such as
+creating, updating, and reading. We’ll also discuss the ways in which `String`
+is different from the other collections, namely how indexing into a `String` is
+complicated by the differences between how people and computers interpret
+`String` data.
+
+### What Is a String?
+
+We’ll first define what we mean by the term *string*. Rust has only one string
+type in the core language, which is the string slice `str` that is usually seen
+in its borrowed form `&str`. In Chapter 4, we talked about *string slices*,
+which are references to some UTF-8 encoded string data stored elsewhere. String
+literals, for example, are stored in the program’s binary and are therefore
+string slices.
+
+The `String` type, which is provided by Rust’s standard library rather than
+coded into the core language, is a growable, mutable, owned, UTF-8 encoded
+string type. When Rustaceans refer to “strings” in Rust, they might be
+referring to either the `String` or the string slice `&str` types, not just one
+of those types. Although this section is largely about `String`, both types are
+used heavily in Rust’s standard library, and both `String` and string slices
+are UTF-8 encoded.
+
+<!---
+I'm wondering if listing the above makes it a bit more cumbersome. In effect,
+out of gate we're saying there are a lot of different string types.
+
+But perhaps we could focus on String and &str here and let them learn about
+CString/CStr when doing FFI and OsString/OsStr when they work on paths?
+Basically, I'm wondering if we should cut down on the concept count and let
+them come across those alternate strings more naturally.
+/JT --->
+<!-- I'm ok with that! I removed the paragraph talking about the other, rarer
+string types. /Carol -->
+
+### Creating a New String
+
+Many of the same operations available with `Vec<T>` are available with `String`
+as well, because `String` is actually implemented as a wrapper around a vector
+of bytes with some extra guarantees, restrictions, and capabilities. An example
+of a function that works the same way with `Vec<T>` and `String` is the `new`
+function to create an instance, shown in Listing 8-11.
+
+```
+let mut s = String::new();
+```
+
+Listing 8-11: Creating a new, empty `String`
+
+This line creates a new empty string called `s`, which we can then load data
+into. Often, we’ll have some initial data that we want to start the string
+with. For that, we use the `to_string` method, which is available on any type
+that implements the `Display` trait, as string literals do. Listing 8-12 shows
+two examples.
+
+```
+let data = "initial contents";
+
+let s = data.to_string();
+
+// the method also works on a literal directly:
+let s = "initial contents".to_string();
+```
+
+Listing 8-12: Using the `to_string` method to create a `String` from a string
+literal
+
+This code creates a string containing `initial contents`.
+
+We can also use the function `String::from` to create a `String` from a string
+literal. The code in Listing 8-13 is equivalent to the code from Listing 8-12
+that uses `to_string`.
+
+```
+let s = String::from("initial contents");
+```
+
+Listing 8-13: Using the `String::from` function to create a `String` from a
+string literal
+
+Because strings are used for so many things, we can use many different generic
+APIs for strings, providing us with a lot of options. Some of them can seem
+redundant, but they all have their place! In this case, `String::from` and
+`to_string` do the same thing, so which you choose is a matter of style and
+readability.
+
+Remember that strings are UTF-8 encoded, so we can include any properly encoded
+data in them, as shown in Listing 8-14.
+
+```
+let hello = String::from("السلام عليكم");
+let hello = String::from("Dobrý den");
+let hello = String::from("Hello");
+let hello = String::from("שָׁלוֹם");
+let hello = String::from("नमस्ते");
+let hello = String::from("こんにちは");
+let hello = String::from("안녕하세요");
+let hello = String::from("你好");
+let hello = String::from("Olá");
+let hello = String::from("Здравствуйте");
+let hello = String::from("Hola");
+```
+
+Listing 8-14: Storing greetings in different languages in strings
+
+All of these are valid `String` values.
+
+### Updating a String
+
+A `String` can grow in size and its contents can change, just like the contents
+of a `Vec<T>`, if you push more data into it. In addition, you can conveniently
+use the `+` operator or the `format!` macro to concatenate `String` values.
+
+#### Appending to a String with `push_str` and `push`
+
+We can grow a `String` by using the `push_str` method to append a string slice,
+as shown in Listing 8-15.
+
+```
+let mut s = String::from("foo");
+s.push_str("bar");
+```
+
+Listing 8-15: Appending a string slice to a `String` using the `push_str` method
+
+After these two lines, `s` will contain `foobar`. The `push_str` method takes a
+string slice because we don’t necessarily want to take ownership of the
+parameter. For example, in the code in Listing 8-16, we want to be able to use
+`s2` after appending its contents to `s1`.
+
+```
+let mut s1 = String::from("foo");
+let s2 = "bar";
+s1.push_str(s2);
+println!("s2 is {}", s2);
+```
+
+Listing 8-16: Using a string slice after appending its contents to a `String`
+
+If the `push_str` method took ownership of `s2`, we wouldn’t be able to print
+its value on the last line. However, this code works as we’d expect!
+
+The `push` method takes a single character as a parameter and adds it to the
+`String`. Listing 8-17 adds the letter "l" to a `String` using the `push`
+method.
+
+```
+let mut s = String::from("lo");
+s.push('l');
+```
+
+Listing 8-17: Adding one character to a `String` value using `push`
+
+As a result, `s` will contain `lol`.
+
+#### Concatenation with the `+` Operator or the `format!` Macro
+
+Often, you’ll want to combine two existing strings. One way to do so is to use
+the `+` operator, as shown in Listing 8-18.
+
+```
+let s1 = String::from("Hello, ");
+let s2 = String::from("world!");
+let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
+```
+
+Listing 8-18: Using the `+` operator to combine two `String` values into a new
+`String` value
+
+The string `s3` will contain `Hello, world!`. The reason `s1` is no longer
+valid after the addition, and the reason we used a reference to `s2`, has to do
+with the signature of the method that’s called when we use the `+` operator.
+The `+` operator uses the `add` method, whose signature looks something like
+this:
+
+```
+fn add(self, s: &str) -> String {
+```
+
+In the standard library, you’ll see `add` defined using generics and associated
+types. Here, we’ve substituted in concrete types, which is what happens when we
+call this method with `String` values. We’ll discuss generics in Chapter 10.
+This signature gives us the clues we need to understand the tricky bits of the
+`+` operator.
+
+First, `s2` has an `&`, meaning that we’re adding a *reference* of the second
+string to the first string. This is because of the `s` parameter in the `add`
+function: we can only add a `&str` to a `String`; we can’t add two `String`
+values together. But wait—the type of `&s2` is `&String`, not `&str`, as
+specified in the second parameter to `add`. So why does Listing 8-18 compile?
+
+<!--
+The above isn't quite right - the trait for ops::Add uses an Rhs associated type
+instead of using T for both lhs and rhs.
+
+```
+pub trait Add<Rhs = Self> {
+ type Output;
+ fn add(self, rhs: Rhs) -> Self::Output;
+}
+```
+
+The implementation of Add for String fills in Rhs with the slice:
+
+```
+impl<'_> Add<&'_ str> for String
+```
+
+Not sure if it's better to fix the description and not have deref coercion
+discussion following, or fix the example so you can have the coercion
+discussion.
+/JT --->
+<!-- I've made an edit above to address this /Carol -->
+
+The reason we’re able to use `&s2` in the call to `add` is that the compiler
+can *coerce* the `&String` argument into a `&str`. When we call the `add`
+method, Rust uses a *deref coercion*, which here turns `&s2` into `&s2[..]`.
+We’ll discuss deref coercion in more depth in Chapter 15. Because `add` does
+not take ownership of the `s` parameter, `s2` will still be a valid `String`
+after this operation.
+
+Second, we can see in the signature that `add` takes ownership of `self`,
+because `self` does *not* have an `&`. This means `s1` in Listing 8-18 will be
+moved into the `add` call and will no longer be valid after that. So although
+`let s3 = s1 + &s2;` looks like it will copy both strings and create a new one,
+this statement actually takes ownership of `s1`, appends a copy of the contents
+of `s2`, and then returns ownership of the result. In other words, it looks
+like it’s making a lot of copies but isn’t; the implementation is more
+efficient than copying.
+
+If we need to concatenate multiple strings, the behavior of the `+` operator
+gets unwieldy:
+
+```
+let s1 = String::from("tic");
+let s2 = String::from("tac");
+let s3 = String::from("toe");
+
+let s = s1 + "-" + &s2 + "-" + &s3;
+```
+
+At this point, `s` will be `tic-tac-toe`. With all of the `+` and `"`
+characters, it’s difficult to see what’s going on. For more complicated string
+combining, we can instead use the `format!` macro:
+
+```
+let s1 = String::from("tic");
+let s2 = String::from("tac");
+let s3 = String::from("toe");
+
+let s = format!("{}-{}-{}", s1, s2, s3);
+```
+
+This code also sets `s` to `tic-tac-toe`. The `format!` macro works like
+`println!`, but instead of printing the output to the screen, it returns a
+`String` with the contents. The version of the code using `format!` is much
+easier to read, and the code generated by the `format!` macro uses references
+so that this call doesn’t take ownership of any of its parameters.
+
+### Indexing into Strings
+
+In many other programming languages, accessing individual characters in a
+string by referencing them by index is a valid and common operation. However,
+if you try to access parts of a `String` using indexing syntax in Rust, you’ll
+get an error. Consider the invalid code in Listing 8-19.
+
+```
+let s1 = String::from("hello");
+let h = s1[0];
+```
+
+Listing 8-19: Attempting to use indexing syntax with a String
+
+This code will result in the following error:
+
+```
+error[E0277]: the type `String` cannot be indexed by `{integer}`
+ --> src/main.rs:3:13
+ |
+3 | let h = s1[0];
+ | ^^^^^ `String` cannot be indexed by `{integer}`
+ |
+ = help: the trait `Index<{integer}>` is not implemented for `String`
+```
+
+The error and the note tell the story: Rust strings don’t support indexing. But
+why not? To answer that question, we need to discuss how Rust stores strings in
+memory.
+
+#### Internal Representation
+
+A `String` is a wrapper over a `Vec<u8>`. Let’s look at some of our properly
+encoded UTF-8 example strings from Listing 8-14. First, this one:
+
+```
+let hello = String::from("Hola");
+```
+
+In this case, `len` will be 4, which means the vector storing the string “Hola”
+is 4 bytes long. Each of these letters takes 1 byte when encoded in UTF-8. The
+following line, however, may surprise you. (Note that this string begins with
+the capital Cyrillic letter Ze, not the Arabic number 3.)
+
+```
+let hello = String::from("Здравствуйте");
+```
+
+Asked how long the string is, you might say 12. In fact, Rust’s answer is 24:
+that’s the number of bytes it takes to encode “Здравствуйте” in UTF-8, because
+each Unicode scalar value in that string takes 2 bytes of storage. Therefore,
+an index into the string’s bytes will not always correlate to a valid Unicode
+scalar value. To demonstrate, consider this invalid Rust code:
+
+```
+let hello = "Здравствуйте";
+let answer = &hello[0];
+```
+
+You already know that `answer` will not be `З`, the first letter. When encoded
+in UTF-8, the first byte of `З` is `208` and the second is `151`, so it would
+seem that `answer` should in fact be `208`, but `208` is not a valid character
+on its own. Returning `208` is likely not what a user would want if they asked
+for the first letter of this string; however, that’s the only data that Rust
+has at byte index 0. Users generally don’t want the byte value returned, even
+if the string contains only Latin letters: if `&"hello"[0]` were valid code
+that returned the byte value, it would return `104`, not `h`.
+
+The answer, then, is that to avoid returning an unexpected value and causing
+bugs that might not be discovered immediately, Rust doesn’t compile this code
+at all and prevents misunderstandings early in the development process.
+
+#### Bytes and Scalar Values and Grapheme Clusters! Oh My!
+
+Another point about UTF-8 is that there are actually three relevant ways to
+look at strings from Rust’s perspective: as bytes, scalar values, and grapheme
+clusters (the closest thing to what we would call *letters*).
+
+If we look at the Hindi word “नमस्ते” written in the Devanagari script, it is
+stored as a vector of `u8` values that looks like this:
+
+```
+[224, 164, 168, 224, 164, 174, 224, 164, 184, 224, 165, 141, 224, 164, 164,
+224, 165, 135]
+```
+
+That’s 18 bytes and is how computers ultimately store this data. If we look at
+them as Unicode scalar values, which are what Rust’s `char` type is, those
+bytes look like this:
+
+```
+['न', 'म', 'स', '्', 'त', 'े']
+```
+
+There are six `char` values here, but the fourth and sixth are not letters:
+they’re diacritics that don’t make sense on their own. Finally, if we look at
+them as grapheme clusters, we’d get what a person would call the four letters
+that make up the Hindi word:
+
+```
+["न", "म", "स्", "ते"]
+```
+
+Rust provides different ways of interpreting the raw string data that computers
+store so that each program can choose the interpretation it needs, no matter
+what human language the data is in.
+
+A final reason Rust doesn’t allow us to index into a `String` to get a
+character is that indexing operations are expected to always take constant time
+(O(1)). But it isn’t possible to guarantee that performance with a `String`,
+because Rust would have to walk through the contents from the beginning to the
+index to determine how many valid characters there were.
+
+### Slicing Strings
+
+Indexing into a string is often a bad idea because it’s not clear what the
+return type of the string-indexing operation should be: a byte value, a
+character, a grapheme cluster, or a string slice. If you really need to use
+indices to create string slices, therefore, Rust asks you to be more specific.
+
+Rather than indexing using `[]` with a single number, you can use `[]` with a
+range to create a string slice containing particular bytes:
+
+```
+let hello = "Здравствуйте";
+
+let s = &hello[0..4];
+```
+
+Here, `s` will be a `&str` that contains the first 4 bytes of the string.
+Earlier, we mentioned that each of these characters was 2 bytes, which means
+`s` will be `Зд`.
+
+If we were to try to slice only part of a character’s bytes with something like
+`&hello[0..1]`, Rust would panic at runtime in the same way as if an invalid
+index were accessed in a vector:
+
+```
+thread 'main' panicked at 'byte index 1 is not a char boundary; it is inside 'З' (bytes 0..2) of `Здравствуйте`', src/main.rs:4:14
+```
+
+You should use ranges to create string slices with caution, because doing so
+can crash your program.
+
+### Methods for Iterating Over Strings
+
+<!--- is there a reason this comes after how to slice, rather than after the
+discussion on why we can't directly index into a string? /LC --->
+<!-- I think the idea was that we show this progression of from worst technique
+to best:
+
+1. direct indexing, which doesn't compile
+2. slicing with a range, which looks similar to indexing, which does compile
+but might panic at runtime
+3. iterating over chars or bytes, which compiles and won't panic
+
+Do you have suggestions on making this clearer? I've tried to add a bit at the
+beginning of this section /Carol
+-->
+<!-- JT, what do you think -- is this ordering clear to you? /LC -->
+<!---
+I'm okay with the current order - I think showing why it's bad, what's close to
+what you try first, and then finally the idiomatic Rust solution reads okay.
+
+One tiny nit, for flow, would be to use the Cyrillic example first here to show
+how `.chars()` works well for it and then mention that for more complex
+scripts, like Hindi, you'll need to use the more full-featured string handling
+you find on crates.io.
+/JT --->
+<!-- I've taken JT's suggestion here to use part of the Cyrillic string, then
+mention you'll need a crate to correctly get the grapheme clusters for Hindi
+/Carol -->
+
+The best way to operate on pieces of strings is to be explicit about whether
+you want characters or bytes. For individual Unicode scalar values, use the
+`chars` method. Calling `chars` on “Зд” separates out and returns two values
+of type `char`, and you can iterate over the result to access each element:
+
+```rust
+for c in "Зд".chars() {
+ println!("{}", c);
+}
+```
+
+This code will print the following:
+
+```text
+```
+
+Alternatively, the `bytes` method returns each raw byte, which might be
+appropriate for your domain:
+
+```rust
+for b in "Зд".bytes() {
+ println!("{}", b);
+}
+```
+
+This code will print the four bytes that make up this string:
+
+```text
+208
+151
+208
+180
+```
+
+But be sure to remember that valid Unicode scalar values may be made up of more
+than 1 byte.
+
+Getting grapheme clusters from strings as with the Devanagari script is
+complex, so this functionality is not provided by the standard library. Crates
+are available on *https://crates.io/* if this is the functionality you need.
+
+### Strings Are Not So Simple
+
+<!---
+Because Strings are quite complicated, and have complications that are all
+their own and unlike any other containers, I wonder if maybe this chapter
+should be two different chapters with one specifically being about strings,
+string slices, chars, and related?
+/JT --->
+<!-- I don't think I want to make that big of a change at this point... the
+original idea was to compare and contrast the different containers, perhaps
+that's not serving its purpose as well as a chapter split could... I'll think
+about this for the next major revision. /Carol -->
+
+<!---
+We don't talk about searching in a string. Feels like it could use an example
+or two?
+/JT --->
+<!-- To address this suggestion and a bit of the previous suggestion as well, I
+changed the first paragraph in the "Creating a New String" section to mention
+that a `String` is implemented using a `Vec`. Then, to echo the last paragraph
+before the "Dropping a Vector Drops Its Elements" section, I've added some text
+here to again urge the reader to check out the standard library documentation
+for more functionality. /Carol -->
+
+To summarize, strings are complicated. Different programming languages make
+different choices about how to present this complexity to the programmer. Rust
+has chosen to make the correct handling of `String` data the default behavior
+for all Rust programs, which means programmers have to put more thought into
+handling UTF-8 data upfront. This trade-off exposes more of the complexity of
+strings than is apparent in other programming languages, but it prevents you
+from having to handle errors involving non-ASCII characters later in your
+development life cycle.
+
+The good news is that the standard library offers a lot of functionality built
+off the `String` and `&str` types to help handle these complex situations
+correctly. Be sure to check out the documentation for useful methods like
+`contains` for searching in a string and `replace` for substituting parts of a
+string with another string.
+
+Let’s switch to something a bit less complex: hash maps!
+
+## Storing Keys with Associated Values in Hash Maps
+
+The last of our common collections is the *hash map*. The type `HashMap<K, V>`
+stores a mapping of keys of type `K` to values of type `V` using a
+*hashing function*, which determines how it places these keys and values into
+memory. Many programming languages support this kind of data structure, but
+they often use a different name, such as hash, map, object, hash table,
+dictionary, or associative array, just to name a few.
+
+Hash maps are useful when you want to look up data not by using an index, as
+you can with vectors, but by using a key that can be of any type. For example,
+in a game, you could keep track of each team’s score in a hash map in which
+each key is a team’s name and the values are each team’s score. Given a team
+name, you can retrieve its score.
+
+We’ll go over the basic API of hash maps in this section, but many more goodies
+are hiding in the functions defined on `HashMap<K, V>` by the standard library.
+As always, check the standard library documentation for more information.
+
+### Creating a New Hash Map
+
+One way to create an empty hash map is using `new` and adding elements with
+`insert`. In Listing 8-20, we’re keeping track of the scores of two teams whose
+names are *Blue* and *Yellow*. The Blue team starts with 10 points, and the
+Yellow team starts with 50.
+
+```
+use std::collections::HashMap;
+
+let mut scores = HashMap::new();
+
+scores.insert(String::from("Blue"), 10);
+scores.insert(String::from("Yellow"), 50);
+```
+
+Listing 8-20: Creating a new hash map and inserting some keys and values
+
+Note that we need to first `use` the `HashMap` from the collections portion of
+the standard library. Of our three common collections, this one is the least
+often used, so it’s not included in the features brought into scope
+automatically in the prelude. Hash maps also have less support from the
+standard library; there’s no built-in macro to construct them, for example.
+
+Just like vectors, hash maps store their data on the heap. This `HashMap` has
+keys of type `String` and values of type `i32`. Like vectors, hash maps are
+homogeneous: all of the keys must have the same type as each other, and all of
+the values must have the same type.
+
+<!---
+I'm not sure I've seen this in the wild? I'm tempted to say to skip the zip
+example for flow and go from creating the hash map to working with its
+contents.
+/JT --->
+<!-- Cut Listing 8-21 and renumbered! /Carol -->
+
+### Accessing Values in a Hash Map
+
+<!---
+For flow, would it make sense for this section to follow creating the hash map?
+That way we introduce a useful concept and also continue the teams example.
+/JT --->
+<!-- Ok, I've switched the order of "Accessing Values in a Hash Map" and "Hash
+Maps and Ownership" and renumbered! Does this still make sense Liz? /Carol -->
+
+We can get a value out of the hash map by providing its key to the `get`
+method, as shown in Listing 8-21.
+
+```
+use std::collections::HashMap;
+
+let mut scores = HashMap::new();
+
+scores.insert(String::from("Blue"), 10);
+scores.insert(String::from("Yellow"), 50);
+
+let team_name = String::from("Blue");
+let score = scores.get(&team_name).unwrap_or(0);
+```
+
+Listing 8-21: Accessing the score for the Blue team stored in the hash map
+
+Here, `score` will have the value that’s associated with the Blue team, and the
+result will be `10`. The `get` method returns an `Option<&V>`; if there’s no
+value for that key in the hash map, `get` will return `None`. This program
+handles the `Option` by calling `unwrap_or` to set `score` to zero if `scores`
+doesn’t have an entry for the key.
+
+<!---
+Should there be a quick example here to show handling Some/None again before
+we move on to iteration?
+/JT --->
+<!-- I've changed the code in Listing 8-21 a bit to actually handle the
+`Option` instead of referencing chapter 6, what do you think Liz? /Carol -->
+
+We can iterate over each key/value pair in a hash map in a similar manner as we
+do with vectors, using a `for` loop:
+
+```
+use std::collections::HashMap;
+
+let mut scores = HashMap::new();
+
+scores.insert(String::from("Blue"), 10);
+scores.insert(String::from("Yellow"), 50);
+
+for (key, value) in &scores {
+ println!("{}: {}", key, value);
+}
+```
+
+This code will print each pair in an arbitrary order:
+
+```
+Yellow: 50
+Blue: 10
+```
+
+### Hash Maps and Ownership
+
+For types that implement the `Copy` trait, like `i32`, the values are copied
+into the hash map. For owned values like `String`, the values will be moved and
+the hash map will be the owner of those values, as demonstrated in Listing 8-22.
+
+```
+use std::collections::HashMap;
+
+let field_name = String::from("Favorite color");
+let field_value = String::from("Blue");
+
+let mut map = HashMap::new();
+map.insert(field_name, field_value);
+// field_name and field_value are invalid at this point, try using them and
+// see what compiler error you get!
+```
+
+Listing 8-22: Showing that keys and values are owned by the hash map once
+they’re inserted
+
+We aren’t able to use the variables `field_name` and `field_value` after
+they’ve been moved into the hash map with the call to `insert`.
+
+If we insert references to values into the hash map, the values won’t be moved
+into the hash map. The values that the references point to must be valid for at
+least as long as the hash map is valid. We’ll talk more about these issues in
+the “Validating References with Lifetimes” section in Chapter 10.
+
+### Updating a Hash Map
+
+Although the number of key and value pairs is growable, each unique key can
+only have one value associated with it at a time (but not vice versa: for
+example, both the Blue team and the Yellow team could have value 10 stored in
+the `scores` hash map).
+<!--- And vice versa? /LC --->
+<!-- No, you could have a hashmap that has ("Blue", 10) and ("Yellow", 10) for
+example. Stating this here feels a bit off topic for updating the value of an
+existing key, though, I'm not sure how to work it in. Do you think that's
+important enough to state here? If so, do you have suggestions on how to do it
+without distracting from the main point of this section? /Carol -->
+<!-- It may not be important enough, what do you think JT? /LC -->
+<!---
+I think it's maybe worth calling out. Something you could use to drive
+this home is the `.entry()` call. This makes it clear that for any key there's
+one cell (or entry) that you're updating in the hash map. I see we use it
+later, though worth a thought if bringing it earlier helps?
+/JT --->
+<!-- I've added a short sentence here, but every time I try to add something
+more, I end up getting tangled in saying things like "key value" as opposed to
+"value value", which is terrible... or I worry about misleading readers into
+thinking that you can't use a `Vec<T>` as a HashMap value type, which you
+totally can to store multiple "values" in one vector "value", which you totally
+can, it's just a little more complicated. Or I try to say "multiple keys can
+have the same value" which sounds like it could imply that there would be a
+*shared* value stored in the HashMap, which wouldn't be the case, there would
+be two separate allocations that would happen to have the same value... I just
+haven't heard a reader wondering if each value can only have one key with it
+before (which doesn't mean they haven't wondered it, I just haven't heard of
+it) so I don't want to lead readers astray if they weren't already going that
+direction? What do you think about what's here now, Liz? /Carol -->
+
+When you want to change the data in a hash map, you have to decide how to
+handle the case when a key already has a value assigned. You could replace the
+old value with the new value, completely disregarding the old value. You could
+keep the old value and ignore the new value, only adding the new value if the
+key *doesn’t* already have a value. Or you could combine the old value and the
+new value. Let’s look at how to do each of these!
+
+#### Overwriting a Value
+
+If we insert a key and a value into a hash map and then insert that same key
+with a different value, the value associated with that key will be replaced.
+Even though the code in Listing 8-23 calls `insert` twice, the hash map will
+only contain one key/value pair because we’re inserting the value for the Blue
+team’s key both times.
+
+```
+use std::collections::HashMap;
+
+let mut scores = HashMap::new();
+
+scores.insert(String::from("Blue"), 10);
+scores.insert(String::from("Blue"), 25);
+
+println!("{:?}", scores);
+```
+
+Listing 8-23: Replacing a value stored with a particular key
+
+This code will print `{"Blue": 25}`. The original value of `10` has been
+overwritten.
+
+#### Adding a Key and Value Only If a Key Isn’t Present
+
+<!--- to be clear, are we talking about default values here, or just checking
+for an existing value before allowing insertion of a value? /LC--->
+<!-- I'm not sure what you mean exactly. Checking for an existing value before
+allowing insertion of a value can be used to insert whatever value would mean
+"default" in your program, or it can be used to insert some other value that
+you wouldn't call a default. That is, in Listing 8-25, would you call 50 a
+default value or no? (I don't think we've given enough information about what
+the program is ultimately trying to do to tell if 50 is a default or not, and I
+don't think it matters, but I am interested to know if there's something I'm
+missing that you're trying to get at). Can you elaborate on what was confusing
+and perhaps propose wording that would have cleared this up for you, and I can
+fix if needed? /Carol-->
+<!-- I suppose what I'm asking is whether a value is inserted from the started
+as a default value and then updated, meaning the key never has no value, or
+whether we're only allowing insertion of a value if there isn't already a
+value. I think it's the latter and maybe that's clear enough as is! JT, what do
+you think? /LC -->
+<!---
+I think the idea is generally right, we're going to insert the value if the
+key is not already in the hash map. Maybe the title could be:
+
+"Adding a key and value only if a key isn't present"
+
+Worth a note: I think "default" values are a bit of a loaded term in Rust. If
+we use it, we may confuse people later if we they come across `Default`, which
+is the default value of a type (like 0 is for i64, via `i64::default()`)
+/JT --->
+<!-- Ok, I've taken JT's suggestion for the section title and tried to reword
+the text here a bit; is this clearer, Liz? I share JT's concern about using the
+word "default"... /Carol -->
+
+It’s common to check whether a particular key already exists in the hash map
+with a value then take the following actions: if the key does exist in the hash
+map, the existing value should remain the way it is. If the key doesn’t exist,
+insert it and a value for it.
+
+Hash maps have a special API for this called `entry` that takes the key you
+want to check as a parameter. The return value of the `entry` method is an enum
+called `Entry` that represents a value that might or might not exist. Let’s say
+we want to check whether the key for the Yellow team has a value associated
+with it. If it doesn’t, we want to insert the value 50, and the same for the
+Blue team. Using the `entry` API, the code looks like Listing 8-24.
+
+```
+use std::collections::HashMap;
+
+let mut scores = HashMap::new();
+scores.insert(String::from("Blue"), 10);
+
+scores.entry(String::from("Yellow")).or_insert(50);
+scores.entry(String::from("Blue")).or_insert(50);
+
+println!("{:?}", scores);
+```
+
+Listing 8-24: Using the `entry` method to only insert if the key does not
+already have a value
+
+The `or_insert` method on `Entry` is defined to return a mutable reference to
+the value for the corresponding `Entry` key if that key exists, and if not,
+inserts the parameter as the new value for this key and returns a mutable
+reference to the new value. This technique is much cleaner than writing the
+logic ourselves and, in addition, plays more nicely with the borrow checker.
+
+Running the code in Listing 8-24 will print `{"Yellow": 50, "Blue": 10}`. The
+first call to `entry` will insert the key for the Yellow team with the value
+50 because the Yellow team doesn’t have a value already. The second call to
+`entry` will not change the hash map because the Blue team already has the
+value 10.
+
+#### Updating a Value Based on the Old Value
+
+Another common use case for hash maps is to look up a key’s value and then
+update it based on the old value. For instance, Listing 8-25 shows code that
+counts how many times each word appears in some text. We use a hash map with
+the words as keys and increment the value to keep track of how many times we’ve
+seen that word. If it’s the first time we’ve seen a word, we’ll first insert
+the value 0.
+
+```
+use std::collections::HashMap;
+
+let text = "hello world wonderful world";
+
+let mut map = HashMap::new();
+
+for word in text.split_whitespace() {
+ let count = map.entry(word).or_insert(0);
+ *count += 1;
+}
+
+println!("{:?}", map);
+```
+
+Listing 8-25: Counting occurrences of words using a hash map that stores words
+and counts
+
+This code will print `{"world": 2, "hello": 1, "wonderful": 1}`. You might see
+the same key/value pairs printed in a different order: recall from the
+“Accessing Values in a Hash Map” section that iterating over a hash map happens
+in an arbitrary order.
+
+The `split_whitespace` method returns an iterator over sub-slices, separated by
+whitespace, of the value in `text`. The `or_insert` method returns a mutable
+reference (`&mut V`) to the value for the specified key. Here we store that
+mutable reference in the `count` variable, so in order to assign to that value,
+we must first dereference `count` using the asterisk (`*`). The mutable
+reference goes out of scope at the end of the `for` loop, so all of these
+changes are safe and allowed by the borrowing rules.
+
+<!---
+Running the above gave me `{"world": 2, "wonderful": 1, "hello": 1}` so the key
+order may not be deterministic or may change based on changes to the hashing
+function in the std lib.
+/JT --->
+<!-- I've added a note that getting a different order is perfectly normal
+/Carol -->
+
+### Hashing Functions
+
+By default, `HashMap` uses a hashing function called *SipHash* that can provide
+resistance to Denial of Service (DoS) attacks involving hash tables. This is
+not the fastest hashing algorithm available, but the trade-off for better
+security that comes with the drop in performance is worth it. If you profile
+your code and find that the default hash function is too slow for your
+purposes, you can switch to another function by specifying a different hasher.
+A *hasher* is a type that implements the `BuildHasher` trait. We’ll talk about
+traits and how to implement them in Chapter 10. You don’t necessarily have to
+implement your own hasher from scratch; *https://crates.io/* has libraries
+shared by other Rust users that provide hashers implementing many common
+hashing algorithms.
+
+## Summary
+
+Vectors, strings, and hash maps will provide a large amount of functionality
+necessary in programs when you need to store, access, and modify data. Here are
+some exercises you should now be equipped to solve:
+
+* Given a list of integers, use a vector and return the median (when sorted,
+ the value in the middle position) and mode (the value that occurs most often;
+ a hash map will be helpful here) of the list.
+* Convert strings to pig latin. The first consonant of each word is moved to
+ the end of the word and “ay” is added, so “first” becomes “irst-fay.” Words
+ that start with a vowel have “hay” added to the end instead (“apple” becomes
+ “apple-hay”). Keep in mind the details about UTF-8 encoding!
+* Using a hash map and vectors, create a text interface to allow a user to add
+ employee names to a department in a company. For example, “Add Sally to
+ Engineering” or “Add Amir to Sales.” Then let the user retrieve a list of all
+ people in a department or all people in the company by department, sorted
+ alphabetically.
+
+The standard library API documentation describes methods that vectors, strings,
+and hash maps have that will be helpful for these exercises!
+
+We’re getting into more complex programs in which operations can fail, so, it’s
+a perfect time to discuss error handling. We’ll do that next!
+
diff --git a/src/doc/book/nostarch/chapter09.md b/src/doc/book/nostarch/chapter09.md
new file mode 100644
index 000000000..693dc1be0
--- /dev/null
+++ b/src/doc/book/nostarch/chapter09.md
@@ -0,0 +1,1209 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Error Handling
+
+Errors are a fact of life in software, so Rust has a number of features for
+handling situations in which something goes wrong. In many cases, Rust requires
+you to acknowledge the possibility of an error and take some action before your
+code will compile. This requirement makes your program more robust by ensuring
+that you’ll discover errors and handle them appropriately before you’ve
+deployed your code to production!
+
+Rust groups errors into two major categories: *recoverable* and *unrecoverable*
+errors. For a recoverable error, such as a *file not found* error, we most
+likely just want to report the problem to the user and retry the operation.
+Unrecoverable errors are always symptoms of bugs, like trying to access a
+location beyond the end of an array, and so we want to immediately stop the
+program.
+
+Most languages don’t distinguish between these two kinds of errors and handle
+both in the same way, using mechanisms such as exceptions. Rust doesn’t have
+exceptions. Instead, it has the type `Result<T, E>` for recoverable errors and
+the `panic!` macro that stops execution when the program encounters an
+unrecoverable error. This chapter covers calling `panic!` first and then talks
+about returning `Result<T, E>` values. Additionally, we’ll explore
+considerations when deciding whether to try to recover from an error or to stop
+execution.
+
+## Unrecoverable Errors with `panic!`
+
+Sometimes, bad things happen in your code, and there’s nothing you can do about
+it. In these cases, Rust has the `panic!` macro. There are two ways to cause a
+panic in practice: by taking an action that causes our code to panic (such as
+accessing an array past the end) or by explicitly calling the `panic!` macro.
+In both cases, we cause a panic in our program. By default, these panics will
+print a failure message, unwind, clean up the stack, and quit. Via an
+environment variable, you can also have Rust display the call stack when a
+panic occurs to make it easier to track down the source of the panic.
+
+<!-- does Rust invoke the panic, or do we? Or sometimes it can be either? /LC --->
+<!-- We will have done *something* through a combination of the code we've
+written and the data the program gets at runtime. It *might* involve us
+literally typing `panic!` into our code, or it might be part of Rust that we're
+using that calls `panic!` for us because of something else we've done. Does
+that make sense? I've tried to clarify the last sentence a bit here /Carol -->
+<!---
+One way we could explain it is to say there are two ways to cause a panic in
+practice: by doing an action that causes our code to panic, like accessing an
+array past the end or dividing by zero, or by explicitly calling the `panic!`
+macro. In both cases, we cause a panic in our application. By default, these
+panics will unwind and clean up the stack. Via an environment setting, you can
+also have Rust display the call stack when a panic occurs to make it easier to
+track down the source of the panic.
+/JT --->
+<!-- I've taken JT's suggestion with some edits in the paragraph above /Carol
+-->
+> ### Unwinding the Stack or Aborting in Response to a Panic
+>
+> By default, when a panic occurs, the program starts *unwinding*, which
+> means Rust walks back up the stack and cleans up the data from each function
+> it encounters. However, this walking back and cleanup is a lot of work. Rust,
+> therefore, allows you to choose the alternative of immediately *aborting*,
+> which ends the program without cleaning up.
+>
+> Memory that the program was using will then need to be cleaned
+> up by the operating system. If in your project you need to make the resulting
+> binary as small as possible, you can switch from unwinding to aborting upon a
+> panic by adding `panic = 'abort'` to the appropriate `[profile]` sections in
+> your *Cargo.toml* file. For example, if you want to abort on panic in release
+> mode, add this:
+>
+> ```toml
+> [profile.release]
+> panic = 'abort'
+> ```
+
+Let’s try calling `panic!` in a simple program:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ panic!("crash and burn");
+}
+```
+
+When you run the program, you’ll see something like this:
+
+```
+thread 'main' panicked at 'crash and burn', src/main.rs:2:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+The call to `panic!` causes the error message contained in the last two lines.
+The first line shows our panic message and the place in our source code where
+the panic occurred: *src/main.rs:2:5* indicates that it’s the second line,
+fifth character of our *src/main.rs* file.
+
+In this case, the line indicated is part of our code, and if we go to that
+line, we see the `panic!` macro call. In other cases, the `panic!` call might
+be in code that our code calls, and the filename and line number reported by
+the error message will be someone else’s code where the `panic!` macro is
+called, not the line of our code that eventually led to the `panic!` call. We
+can use the backtrace of the functions the `panic!` call came from to figure
+out the part of our code that is causing the problem. We’ll discuss backtraces
+in more detail next.
+
+### Using a `panic!` Backtrace
+
+Let’s look at another example to see what it’s like when a `panic!` call comes
+from a library because of a bug in our code instead of from our code calling
+the macro directly. Listing 9-1 has some code that attempts to access an
+index in a vector beyond the range of valid indexes.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let v = vec![1, 2, 3];
+
+ v[99];
+}
+```
+
+Listing 9-1: Attempting to access an element beyond the end of a vector, which
+will cause a call to `panic!`
+
+Here, we’re attempting to access the 100th element of our vector (which is at
+index 99 because indexing starts at zero), but the vector has only 3 elements.
+In this situation, Rust will panic. Using `[]` is supposed to return an
+element, but if you pass an invalid index, there’s no element that Rust could
+return here that would be correct.
+
+In C, attempting to read beyond the end of a data structure is undefined
+behavior. You might get whatever is at the location in memory that would
+correspond to that element in the data structure, even though the memory
+doesn’t belong to that structure. This is called a *buffer overread* and can
+lead to security vulnerabilities if an attacker is able to manipulate the index
+in such a way as to read data they shouldn’t be allowed to that is stored after
+the data structure.
+
+To protect your program from this sort of vulnerability, if you try to read an
+element at an index that doesn’t exist, Rust will stop execution and refuse to
+continue. Let’s try it and see:
+
+```
+thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 99', src/main.rs:4:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+This error points at line 4 of our `main.rs` where we attempt to access index
+99. The next note line tells us that we can set the `RUST_BACKTRACE`
+environment variable to get a backtrace of exactly what happened to cause the
+error. A *backtrace* is a list of all the functions that have been called to
+get to this point. Backtraces in Rust work as they do in other languages: the
+key to reading the backtrace is to start from the top and read until you see
+files you wrote. That’s the spot where the problem originated. The lines above
+that spot are code that your code has called; the lines below are code that
+called your code. These before-and-after lines might include core Rust code,
+standard library code, or crates that you’re using. Let’s try getting a
+backtrace by setting the `RUST_BACKTRACE` environment variable to any value
+except 0. Listing 9-2 shows output similar to what you’ll see.
+
+```
+$ RUST_BACKTRACE=1 cargo run
+thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 99', src/main.rs:4:5
+stack backtrace:
+ 0: rust_begin_unwind
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/std/src/panicking.rs:483
+ 1: core::panicking::panic_fmt
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/panicking.rs:85
+ 2: core::panicking::panic_bounds_check
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/panicking.rs:62
+ 3: <usize as core::slice::index::SliceIndex<[T]>>::index
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/slice/index.rs:255
+ 4: core::slice::index::<impl core::ops::index::Index<I> for [T]>::index
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/slice/index.rs:15
+ 5: <alloc::vec::Vec<T> as core::ops::index::Index<I>>::index
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/alloc/src/vec.rs:1982
+ 6: panic::main
+ at ./src/main.rs:4
+ 7: core::ops::function::FnOnce::call_once
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/ops/function.rs:227
+note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
+```
+
+Listing 9-2: The backtrace generated by a call to `panic!` displayed when the
+environment variable `RUST_BACKTRACE` is set
+
+That’s a lot of output! The exact output you see might be different depending
+on your operating system and Rust version. In order to get backtraces with this
+information, debug symbols must be enabled. Debug symbols are enabled by
+default when using `cargo build` or `cargo run` without the `--release` flag,
+as we have here.
+
+In the output in Listing 9-2, line 6 of the backtrace points to the line in our
+project that’s causing the problem: line 4 of *src/main.rs*. If we don’t want
+our program to panic, we should start our investigation at the location pointed
+to by the first line mentioning a file we wrote. In Listing 9-1, where we
+deliberately wrote code that would panic, the way to fix the panic is to not
+request an element beyond the range of the vector indexes. When your code
+panics in the future, you’ll need to figure out what action the code is taking
+with what values to cause the panic and what the code should do instead.
+
+We’ll come back to `panic!` and when we should and should not use `panic!` to
+handle error conditions in the “To `panic!` or Not to `panic!`” section later
+in this chapter. Next, we’ll look at how to recover from an error using
+`Result`.
+
+## Recoverable Errors with `Result`
+
+Most errors aren’t serious enough to require the program to stop entirely.
+Sometimes, when a function fails, it’s for a reason that you can easily
+interpret and respond to. For example, if you try to open a file and that
+operation fails because the file doesn’t exist, you might want to create the
+file instead of terminating the process.
+
+Recall from “Handling Potential Failure with the `Result` Type” in Chapter 2
+that the `Result` enum is defined as having two variants, `Ok` and `Err`, as
+follows:
+
+```
+enum Result<T, E> {
+ Ok(T),
+ Err(E),
+}
+```
+
+The `T` and `E` are generic type parameters: we’ll discuss generics in more
+detail in Chapter 10. What you need to know right now is that `T` represents
+the type of the value that will be returned in a success case within the `Ok`
+variant, and `E` represents the type of the error that will be returned in a
+failure case within the `Err` variant. Because `Result` has these generic type
+parameters, we can use the `Result` type and the functions defined on it in
+many different situations where the successful value and error value we want to
+return may differ.
+
+Let’s call a function that returns a `Result` value because the function could
+fail. In Listing 9-3 we try to open a file.
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+}
+```
+
+Listing 9-3: Opening a file
+
+<!---
+This brings up an interesting point - should we teach them to install
+rust-analyzer in the setup instructions? If so, then we can tell them to mouse
+over the name of what they want the typename of. The "assign something to i32 to
+have rustc tell you what it is" feels a bit like old style Rust.
+/JT --->
+<!-- I somewhat disagree here; not everyone uses IDE plugins. I'll see what JT
+says about mentioning rust-analyzer in chapter 1 rather than in the appendix...
+I am in favor of making the book shorter, though, so I've removed the parts
+about asking the compiler what the type of something is by deliberately
+annotating with the wrong type. /Carol -->
+
+The return type of `File::open` is a `Result<T, E>`. The generic parameter `T`
+has been filled in by the implementation of `File::open` with the type of the
+success value, `std::fs::File`, which is a file handle. The type of `E` used in
+the error value is `std::io::Error`. This return type means the call to
+`File::open` might succeed and return a file handle that we can read from or
+write to. The function call also might fail: for example, the file might not
+exist, or we might not have permission to access the file. The `File::open`
+function needs to have a way to tell us whether it succeeded or failed and at
+the same time give us either the file handle or error information. This
+information is exactly what the `Result` enum conveys.
+
+In the case where `File::open` succeeds, the value in the variable
+`greeting_file_result` will be an instance of `Ok` that contains a file handle.
+In the case where it fails, the value in `greeting_file_result` will be an
+instance of `Err` that contains more information about the kind of error that
+happened.
+
+We need to add to the code in Listing 9-3 to take different actions depending
+on the value `File::open` returns. Listing 9-4 shows one way to handle the
+`Result` using a basic tool, the `match` expression that we discussed in
+Chapter 6.
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+
+ let greeting_file = match greeting_file_result {
+ Ok(file) => file,
+ Err(error) => panic!("Problem opening the file: {:?}", error),
+ };
+}
+```
+
+Listing 9-4: Using a `match` expression to handle the `Result` variants that
+might be returned
+
+Note that, like the `Option` enum, the `Result` enum and its variants have been
+brought into scope by the prelude, so we don’t need to specify `Result::`
+before the `Ok` and `Err` variants in the `match` arms.
+
+When the result is `Ok`, this code will return the inner `file` value out of
+the `Ok` variant, and we then assign that file handle value to the variable
+`greeting_file`. After the `match`, we can use the file handle for reading or
+writing.
+
+The other arm of the `match` handles the case where we get an `Err` value from
+`File::open`. In this example, we’ve chosen to call the `panic!` macro. If
+there’s no file named *hello.txt* in our current directory and we run this
+code, we’ll see the following output from the `panic!` macro:
+
+```
+thread 'main' panicked at 'Problem opening the file: Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:8:23
+```
+
+As usual, this output tells us exactly what has gone wrong.
+
+### Matching on Different Errors
+
+The code in Listing 9-4 will `panic!` no matter why `File::open` failed.
+However, we want to take different actions for different failure reasons: if
+`File::open` failed because the file doesn’t exist, we want to create the file
+and return the handle to the new file. If `File::open` failed for any other
+reason—for example, because we didn’t have permission to open the file—we still
+want the code to `panic!` in the same way as it did in Listing 9-4. For this we
+add an inner `match` expression, shown in Listing 9-5.
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+use std::io::ErrorKind;
+
+fn main() {
+ let greeting_file_result = File::open("hello.txt");
+
+ let greeting_file = match greeting_file_result {
+ Ok(file) => file,
+ Err(error) => match error.kind() {
+ ErrorKind::NotFound => match File::create("hello.txt") {
+ Ok(fc) => fc,
+ Err(e) => panic!("Problem creating the file: {:?}", e),
+ }
+ other_error => {
+ panic!("Problem opening the file: {:?}", other_error);
+ }
+ }
+ };
+}
+```
+
+Listing 9-5: Handling different kinds of errors in different ways
+
+The type of the value that `File::open` returns inside the `Err` variant is
+`io::Error`, which is a struct provided by the standard library. This struct
+has a method `kind` that we can call to get an `io::ErrorKind` value. The enum
+`io::ErrorKind` is provided by the standard library and has variants
+representing the different kinds of errors that might result from an `io`
+operation. The variant we want to use is `ErrorKind::NotFound`, which indicates
+the file we’re trying to open doesn’t exist yet. So we match on
+`greeting_file_result`, but we also have an inner match on `error.kind()`.
+
+The condition we want to check in the inner match is whether the value returned
+by `error.kind()` is the `NotFound` variant of the `ErrorKind` enum. If it is,
+we try to create the file with `File::create`. However, because `File::create`
+could also fail, we need a second arm in the inner `match` expression. When the
+file can’t be created, a different error message is printed. The second arm of
+the outer `match` stays the same, so the program panics on any error besides
+the missing file error.
+
+> ### Alternatives to Using `match` with `Result<T, E>`
+>
+> That’s a lot of `match`! The `match` expression is very useful but also very
+> much a primitive. In Chapter 13, you’ll learn about closures, which are used
+> with many of the methods defined on `Result<T, E>`. These methods can be more
+> concise than using `match` when handling `Result<T, E>` values in your code.
+
+> For example, here’s another way to write the same logic as shown in Listing
+> 9-5, this time using closures and the `unwrap_or_else` method:
+>
+> ```
+> use std::fs::File;
+> use std::io::ErrorKind;
+>
+> fn main() {
+> let greeting_file = File::open("hello.txt").unwrap_or_else(|error| {
+> if error.kind() == ErrorKind::NotFound {
+> File::create("hello.txt").unwrap_or_else(|error| {
+> panic!("Problem creating the file: {:?}", error);
+> })
+> } else {
+> panic!("Problem opening the file: {:?}", error);
+> }
+> });
+> }
+> ```
+>
+> Although this code has the same behavior as Listing 9-5, it doesn’t contain
+> any `match` expressions and is cleaner to read. Come back to this example
+> after you’ve read Chapter 13, and look up the `unwrap_or_else` method in the
+> standard library documentation. Many more of these methods can clean up huge
+> nested `match` expressions when you’re dealing with errors.
+
+### Shortcuts for Panic on Error: `unwrap` and `expect`
+
+Using `match` works well enough, but it can be a bit verbose and doesn’t always
+communicate intent well. The `Result<T, E>` type has many helper methods
+defined on it to do various, more specific tasks. The `unwrap` method is a
+shortcut method implemented just like the `match` expression we wrote in
+Listing 9-4. If the `Result` value is the `Ok` variant, `unwrap` will return
+the value inside the `Ok`. If the `Result` is the `Err` variant, `unwrap` will
+call the `panic!` macro for us. Here is an example of `unwrap` in action:
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+
+fn main() {
+ let greeting_file = File::open("hello.txt").unwrap();
+}
+```
+
+If we run this code without a *hello.txt* file, we’ll see an error message from
+the `panic!` call that the `unwrap` method makes:
+
+```
+thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error {
+repr: Os { code: 2, message: "No such file or directory" } }',
+src/libcore/result.rs:906:4
+```
+
+<!---
+More recent rustc versions give a bit better error here (specifically the location):
+
+thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value:
+Os { code: 2, kind: NotFound, message: "No such file or directory" }', src/main.rs:4:37
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+/JT --->
+<!-- I'll update the error output when we're in Word /Carol -->
+
+Similarly, the `expect` method lets us also choose the `panic!` error message.
+Using `expect` instead of `unwrap` and providing good error messages can convey
+your intent and make tracking down the source of a panic easier. The syntax of
+`expect` looks like this:
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+
+fn main() {
+ let greeting_file = File::open("hello.txt")
+ .expect("hello.txt should be included in this project");
+}
+```
+
+We use `expect` in the same way as `unwrap`: to return the file handle or call
+the `panic!` macro. The error message used by `expect` in its call to `panic!`
+will be the parameter that we pass to `expect`, rather than the default
+`panic!` message that `unwrap` uses. Here’s what it looks like:
+
+```
+thread 'main' panicked at 'hello.txt should be included in this project: Error { repr: Os { code:
+2, message: "No such file or directory" } }', src/libcore/result.rs:906:4
+```
+
+<!---
+Ditto with the above:
+
+thread 'main' panicked at 'Failed to open hello.txt: Os { code: 2, kind: NotFound,
+message: "No such file or directory" }', src/main.rs:4:37
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+/JT --->
+<!-- I'll update the error output when we're in Word /Carol -->
+
+In production-quality code, most Rustaceans choose `expect` rather than
+`unwrap` and give more context about why the operation is expected to always
+succeed. That way, if your assumptions are ever proven wrong, you have more
+information to use in debugging.
+
+<!---
+Now that `unwrap` and `expect` give an improved file location, we may not
+need the paragraph above.
+/JT --->
+<!-- I've changed the paragraph above, as well as the text in the examaple
+usage of `expect`, to better reflect current best practices and the reasons for
+them. /Carol -->
+
+### Propagating Errors
+
+When a function’s implementation calls something that might fail, instead of
+handling the error within the function itself, you can return the error to the
+calling code so that it can decide what to do. This is known as *propagating*
+the error and gives more control to the calling code, where there might be more
+information or logic that dictates how the error should be handled than what
+you have available in the context of your code.
+
+For example, Listing 9-6 shows a function that reads a username from a file. If
+the file doesn’t exist or can’t be read, this function will return those errors
+to the code that called the function.
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+use std::io::{self, Read};
+
+fn read_username_from_file() -> Result<String, io::Error> [1] {
+ let username_file_result = File::open("hello.txt"); [2]
+
+ let mut username_file [3] = match username_file_result {
+ Ok(file) => file, [4]
+ Err(e) => return Err(e), [5]
+ };
+
+ let mut username = String::new(); [6]
+
+ match username_file.read_to_string(&mut username) [7] {
+ Ok(_) => Ok(username), [8]
+ Err(e) => Err(e), [9]
+ }
+}
+```
+
+Listing 9-6: A function that returns errors to the calling code using `match`
+
+This function can be written in a much shorter way, but we’re going to start by
+doing a lot of it manually in order to explore error handling; at the end,
+we’ll show the shorter way. Let’s look at the return type of the function
+first: `Result<String, io::Error>` [1]. This means the function is returning a
+value of the type `Result<T, E>` where the generic parameter `T` has been
+filled in with the concrete type `String`, and the generic type `E` has been
+filled in with the concrete type `io::Error`.
+
+If this function succeeds without any problems, the code that calls this
+function will receive an `Ok` value that holds a `String`—the username that
+this function read from the file [8]. If this function encounters any problems,
+the calling code will receive an `Err` value that holds an instance of
+`io::Error` that contains more information about what the problems were. We
+chose `io::Error` as the return type of this function because that happens to
+be the type of the error value returned from both of the operations we’re
+calling in this function’s body that might fail: the `File::open` function [2]
+and the `read_to_string` method [7].
+
+The body of the function starts by calling the `File::open` function [2]. Then
+we handle the `Result` value with a `match` similar to the `match` in Listing
+9-4. If `File::open` succeeds, the file handle in the pattern variable `file`
+[4] becomes the value in the mutable variable `username_file` [3] and the
+function continues. In the `Err` case, instead of calling `panic!`, we use the
+`return` keyword to return early out of the function entirely and pass the
+error value from `File::open`, now in the pattern variable `e`, back to the
+calling code as this function’s error value [5].
+
+So if we have a file handle in `username_file`, the function then creates a new
+`String` in variable `username` [6] and calls the `read_to_string` method on
+the file handle in `username_file` to read the contents of the file into
+`username` [7]. The `read_to_string` method also returns a `Result` because it
+might fail, even though `File::open` succeeded. So we need another `match` to
+handle that `Result`: if `read_to_string` succeeds, then our function has
+succeeded, and we return the username from the file that’s now in `username`
+wrapped in an `Ok`. If `read_to_string` fails, we return the error value in the
+same way that we returned the error value in the `match` that handled the
+return value of `File::open`. However, we don’t need to explicitly say
+`return`, because this is the last expression in the function [9].
+
+<!---
+Style nit: I'm finding the above two paragraphs a bit difficult to read
+comfortably. I think one issue is that we're using a handful of single letter
+variable names while also trying to walk someone through an explanation of
+multiple concepts.
+
+Maybe just me? But feels like the above example might be explained a bit better
+if we used more complete variable names so the explanation could have a better
+flow (without trying to remember what each of the single-letter variables meant)
+/JT --->
+<!-- Totally valid! I've changed the variable names in this, previous, and
+following examples, broke up these paragraphs a bit, and added wingdings.
+/Carol -->
+
+The code that calls this code will then handle getting either an `Ok` value
+that contains a username or an `Err` value that contains an `io::Error`. It’s
+up to the calling code to decide what to do with those values. If the calling
+code gets an `Err` value, it could call `panic!` and crash the program, use a
+default username, or look up the username from somewhere other than a file, for
+example. We don’t have enough information on what the calling code is actually
+trying to do, so we propagate all the success or error information upward for
+it to handle appropriately.
+
+This pattern of propagating errors is so common in Rust that Rust provides the
+question mark operator `?` to make this easier.
+
+#### A Shortcut for Propagating Errors: the `?` Operator
+
+Listing 9-7 shows an implementation of `read_username_from_file` that has the
+same functionality as in Listing 9-6, but this implementation uses the
+`?` operator.
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+use std::io;
+use std::io::Read;
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ let mut username_file = File::open("hello.txt")?;
+ let mut username = String::new();
+ username_file.read_to_string(&mut username)?;
+ Ok(username)
+}
+```
+
+Listing 9-7: A function that returns errors to the calling code using the `?`
+operator
+
+The `?` placed after a `Result` value is defined to work in almost the same way
+as the `match` expressions we defined to handle the `Result` values in Listing
+9-6. If the value of the `Result` is an `Ok`, the value inside the `Ok` will
+get returned from this expression, and the program will continue. If the value
+is an `Err`, the `Err` will be returned from the whole function as if we had
+used the `return` keyword so the error value gets propagated to the calling
+code.
+
+There is a difference between what the `match` expression from Listing 9-6 does
+and what the `?` operator does: error values that have the `?` operator called
+on them go through the `from` function, defined in the `From` trait in the
+standard library, which is used to convert values from one type into another.
+When the `?` operator calls the `from` function, the error type received is
+converted into the error type defined in the return type of the current
+function. This is useful when a function returns one error type to represent
+all the ways a function might fail, even if parts might fail for many different
+reasons.
+
+For example, we could change the `read_username_from_file` function in Listing
+9-7 to return a custom error type named `OurError` that we define. If we also
+define `impl From<io::Error> for OurError` to construct an instance of
+`OurError` from an `io::Error`, then the `?` operator calls in the body of
+`read_username_from_file` will call `from` and convert the error types without
+needing to add any more code to the function.
+
+<!---
+It's a bit fuzzy what `impl From<OtherError> for ReturnedError` means. We may
+want to use a more concrete example, like: `impl From<OurError> for io::Error`.
+/JT --->
+<!-- I've added a more concrete example here, but converting the other way,
+which I think is more likely in production code /Carol -->
+
+In the context of Listing 9-7, the `?` at the end of the `File::open` call will
+return the value inside an `Ok` to the variable `username_file`. If an error
+occurs, the `?` operator will return early out of the whole function and give
+any `Err` value to the calling code. The same thing applies to the `?` at the
+end of the `read_to_string` call.
+
+The `?` operator eliminates a lot of boilerplate and makes this function’s
+implementation simpler. We could even shorten this code further by chaining
+method calls immediately after the `?`, as shown in Listing 9-8.
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+use std::io;
+use std::io::Read;
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ let mut username = String::new();
+
+ File::open("hello.txt")?.read_to_string(&mut username)?;
+
+ Ok(username)
+}
+```
+
+Listing 9-8: Chaining method calls after the `?` operator
+
+We’ve moved the creation of the new `String` in `username` to the beginning of
+the function; that part hasn’t changed. Instead of creating a variable
+`username_file`, we’ve chained the call to `read_to_string` directly onto the
+result of `File::open("hello.txt")?`. We still have a `?` at the end of the
+`read_to_string` call, and we still return an `Ok` value containing `username`
+when both `File::open` and `read_to_string` succeed rather than returning
+errors. The functionality is again the same as in Listing 9-6 and Listing 9-7;
+this is just a different, more ergonomic way to write it.
+
+Listing 9-9 shows a way to make this even shorter using `fs::read_to_string`.
+
+Filename: src/main.rs
+
+```
+use std::fs;
+use std::io;
+
+fn read_username_from_file() -> Result<String, io::Error> {
+ fs::read_to_string("hello.txt")
+}
+```
+
+Listing 9-9: Using `fs::read_to_string` instead of opening and then reading the
+file
+
+Reading a file into a string is a fairly common operation, so the standard
+library provides the convenient `fs::read_to_string` function that opens the
+file, creates a new `String`, reads the contents of the file, puts the contents
+into that `String`, and returns it. Of course, using `fs::read_to_string`
+doesn’t give us the opportunity to explain all the error handling, so we did it
+the longer way first.
+
+#### Where The `?` Operator Can Be Used
+
+The `?` operator can only be used in functions whose return type is compatible
+with the value the `?` is used on. This is because the `?` operator is defined
+to perform an early return of a value out of the function, in the same manner
+as the `match` expression we defined in Listing 9-6. In Listing 9-6, the
+`match` was using a `Result` value, and the early return arm returned an
+`Err(e)` value. The return type of the function has to be a `Result` so that
+it’s compatible with this `return`.
+
+In Listing 9-10, let’s look at the error we’ll get if we use the `?` operator
+in a `main` function with a return type incompatible with the type of the value
+we use `?` on:
+
+Filename: src/main.rs
+
+```
+use std::fs::File;
+
+fn main() {
+ let greeting_file = File::open("hello.txt")?;
+}
+```
+
+Listing 9-10: Attempting to use the `?` in the `main` function that returns
+`()` won’t compile
+
+This code opens a file, which might fail. The `?` operator follows the `Result`
+value returned by `File::open`, but this `main` function has the return type of
+`()`, not `Result`. When we compile this code, we get the following error
+message:
+
+```
+error[E0277]: the `?` operator can only be used in a function that returns `Result` or `Option` (or another type that implements `FromResidual`)
+ --> src/main.rs:4:36
+ |
+3 | / fn main() {
+4 | | let f = File::open("hello.txt")?;
+ | | ^ cannot use the `?` operator in a function that returns `()`
+5 | | }
+ | |_- this function should return `Result` or `Option` to accept `?`
+ |
+```
+
+This error points out that we’re only allowed to use the `?` operator in a
+function that returns `Result`, `Option`, or another type that implements
+`FromResidual`.
+
+To fix the error, you have two choices. One choice is to change the return type
+of your function to be compatible with the value you’re using the `?` operator
+on as long as you have no restrictions preventing that. The other technique is
+to use a `match` or one of the `Result<T, E>` methods to handle the `Result<T,
+E>` in whatever way is appropriate.
+
+The error message also mentioned that `?` can be used with `Option<T>` values
+as well. As with using `?` on `Result`, you can only use `?` on `Option` in a
+function that returns an `Option`. The behavior of the `?` operator when called
+on an `Option<T>` is similar to its behavior when called on a `Result<T, E>`:
+if the value is `None`, the `None` will be returned early from the function at
+that point. If the value is `Some`, the value inside the `Some` is the
+resulting value of the expression and the function continues. Listing 9-11 has
+an example of a function that finds the last character of the first line in the
+given text:
+
+```
+fn last_char_of_first_line(text: &str) -> Option<char> {
+ text.lines().next()?.chars().last()
+}
+```
+
+Listing 9-11: Using the `?` operator on an `Option<T>` value
+
+This function returns `Option<char>` because it’s possible that there is a
+character there, but it’s also possible that there isn’t. This code takes the
+`text` string slice argument and calls the `lines` method on it, which returns
+an iterator over the lines in the string. Because this function wants to
+examine the first line, it calls `next` on the iterator to get the first value
+from the iterator. If `text` is the empty string, this call to `next` will
+return `None`, in which case we use `?` to stop and return `None` from
+`last_char_of_first_line`. If `text` is not the empty string, `next` will
+return a `Some` value containing a string slice of the first line in `text`.
+
+The `?` extracts the string slice, and we can call `chars` on that string slice
+to get an iterator of its characters. We’re interested in the last character in
+this first line, so we call `last` to return the last item in the iterator.
+This is an `Option` because it’s possible that the first line is the empty
+string, for example if `text` starts with a blank line but has characters on
+other lines, as in `"\nhi"`. However, if there is a last character on the first
+line, it will be returned in the `Some` variant. The `?` operator in the middle
+gives us a concise way to express this logic, allowing us to implement the
+function in one line. If we couldn’t use the `?` operator on `Option`, we’d
+have to implement this logic using more method calls or a `match` expression.
+
+Note that you can use the `?` operator on a `Result` in a function that returns
+`Result`, and you can use the `?` operator on an `Option` in a function that
+returns `Option`, but you can’t mix and match. The `?` operator won’t
+automatically convert a `Result` to an `Option` or vice versa; in those cases,
+you can use methods like the `ok` method on `Result` or the `ok_or` method on
+`Option` to do the conversion explicitly.
+
+So far, all the `main` functions we’ve used return `()`. The `main` function is
+special because it’s the entry and exit point of executable programs, and there
+are restrictions on what its return type can be for the programs to behave as
+expected.
+
+Luckily, `main` can also return a `Result<(), E>`. Listing 9-12 has the
+code from Listing 9-10 but we’ve changed the return type of `main` to be
+`Result<(), Box<dyn Error>>` and added a return value `Ok(())` to the end. This
+code will now compile:
+
+```
+use std::error::Error;
+use std::fs::File;
+
+fn main() -> Result<(), Box<dyn Error>> {
+ let greeting_file = File::open("hello.txt")?;
+
+ Ok(())
+}
+```
+
+<!---
+The move to `Box<dyn Error>` isn't unexpected for an experienced Rust
+developer, but I wonder if we should keep `std::io::Error` here to keep with
+the flow of the previous examples?
+
+I think my instinct was to mention this since we don't use the flexibility
+the trait object gives us. Instead, we switch to explaining how exit codes
+work with Result values.
+/JT --->
+<!-- The idea here was to give the reader code that will work in the future no
+matter what errors they're trying to return from main. If we put in
+std::io::Error, it'll work for this example, but probably not in the reader's
+own projects. I've added a sentence to the end of the paragraph after Listing
+9-12's caption to explain this thinking. /Carol -->
+
+Listing 9-12: Changing `main` to return `Result<(), E>` allows the use of the
+`?` operator on `Result` values
+
+The `Box<dyn Error>` type is a *trait object*, which we’ll talk about in the
+“Using Trait Objects that Allow for Values of Different Types” section in
+Chapter 17. For now, you can read `Box<dyn Error>` to mean “any kind of error.”
+Using `?` on a `Result` value in a `main` function with the error type `Box<dyn
+Error>` is allowed, because it allows any `Err` value to be returned early.
+Even though the body of this `main` function will only ever return errors of
+type `std::io::Error`, by specifying `Box<dyn Error>`, this signature will
+continue to be correct even if more code that returns other errors is added to
+the body of `main`.
+
+When a `main` function returns a `Result<(), E>`, the executable will
+exit with a value of `0` if `main` returns `Ok(())` and will exit with a
+nonzero value if `main` returns an `Err` value. Executables written in C return
+integers when they exit: programs that exit successfully return the integer
+`0`, and programs that error return some integer other than `0`. Rust also
+returns integers from executables to be compatible with this convention.
+
+The `main` function may return any types that implement the
+`std::process::Termination` trait, which contains a function `report` that
+returns an `ExitCode` Consult the standard library documentation for more
+information on implementing the `Termination` trait for your own types.
+
+Now that we’ve discussed the details of calling `panic!` or returning `Result`,
+let’s return to the topic of how to decide which is appropriate to use in which
+cases.
+
+## To `panic!` or Not to `panic!`
+
+So how do you decide when you should call `panic!` and when you should return
+`Result`? When code panics, there’s no way to recover. You could call `panic!`
+for any error situation, whether there’s a possible way to recover or not, but
+then you’re making the decision that a situation is unrecoverable on behalf of
+the calling code. When you choose to return a `Result` value, you give the
+calling code options. The calling code could choose to attempt to recover in a
+way that’s appropriate for its situation, or it could decide that an `Err`
+value in this case is unrecoverable, so it can call `panic!` and turn your
+recoverable error into an unrecoverable one. Therefore, returning `Result` is a
+good default choice when you’re defining a function that might fail.
+
+In situations such as examples, prototype code, and tests, it’s more
+appropriate to write code that panics instead of returning a `Result`. Let’s
+explore why, then discuss situations in which the compiler can’t tell that
+failure is impossible, but you as a human can. The chapter will conclude with
+some general guidelines on how to decide whether to panic in library code.
+
+### Examples, Prototype Code, and Tests
+
+When you’re writing an example to illustrate some concept, also including robust
+error-handling code can make the example less clear. In
+examples, it’s understood that a call to a method like `unwrap` that could
+panic is meant as a placeholder for the way you’d want your application to
+handle errors, which can differ based on what the rest of your code is doing.
+
+Similarly, the `unwrap` and `expect` methods are very handy when prototyping,
+before you’re ready to decide how to handle errors. They leave clear markers in
+your code for when you’re ready to make your program more robust.
+
+If a method call fails in a test, you’d want the whole test to fail, even if
+that method isn’t the functionality under test. Because `panic!` is how a test
+is marked as a failure, calling `unwrap` or `expect` is exactly what should
+happen.
+
+### Cases in Which You Have More Information Than the Compiler
+
+It would also be appropriate to call `unwrap` or `expect` when you have some
+other logic that ensures the `Result` will have an `Ok` value, but the logic
+isn’t something the compiler understands. You’ll still have a `Result` value
+that you need to handle: whatever operation you’re calling still has the
+possibility of failing in general, even though it’s logically impossible in
+your particular situation. If you can ensure by manually inspecting the code
+that you’ll never have an `Err` variant, it’s perfectly acceptable to call
+`unwrap`, and even better to document the reason you think you’ll never have an
+`Err` variant in the `expect` text. Here’s an example:
+
+<!---
+Some Rust devs may have a nuanced take on the above, myself included. I'd say
+you'd be safer to use `.expect(...)` and put as the argument the reason why it
+should never fail. If, in the future it ever *does* fail for some reason
+(probably as a result of many code fixes over time), then you've got a message
+to start with telling you what the original expectation was.
+/JT --->
+<!-- I agree with this and reinforcing this best practice; I've changed the
+`unwrap` to `expect` and demonstrated a good message. I still don't want to
+shame people too much for using `unwrap`, though. /Carol -->
+
+```
+use std::net::IpAddr;
+
+let home: IpAddr = "127.0.0.1"
+ .parse()
+ .expect("Hardcoded IP address should be valid");
+```
+
+We’re creating an `IpAddr` instance by parsing a hardcoded string. We can see
+that `127.0.0.1` is a valid IP address, so it’s acceptable to use `expect`
+here. However, having a hardcoded, valid string doesn’t change the return type
+of the `parse` method: we still get a `Result` value, and the compiler will
+still make us handle the `Result` as if the `Err` variant is a possibility
+because the compiler isn’t smart enough to see that this string is always a
+valid IP address. If the IP address string came from a user rather than being
+hardcoded into the program and therefore *did* have a possibility of failure,
+we’d definitely want to handle the `Result` in a more robust way instead.
+Mentioning the assumption that this IP address is hardcoded will prompt us to
+change `expect` to better error handling code if in the future, we need to get
+the IP address from some other source instead.
+
+### Guidelines for Error Handling
+
+It’s advisable to have your code panic when it’s possible that your code
+could end up in a bad state. In this context, a *bad state* is when some
+assumption, guarantee, contract, or invariant has been broken, such as when
+invalid values, contradictory values, or missing values are passed to your
+code—plus one or more of the following:
+
+* The bad state is something that is unexpected, as opposed to something that
+ will likely happen occasionally, like a user entering data in the wrong
+ format.
+* Your code after this point needs to rely on not being in this bad state,
+ rather than checking for the problem at every step.
+* There’s not a good way to encode this information in the types you use. We’ll
+ work through an example of what we mean in the “Encoding States and Behavior
+ as Types” section of Chapter 17.
+
+If someone calls your code and passes in values that don’t make sense, it’s
+best to return an error if you can so the user of the library can decide what
+they want to do in that case. However, in cases where continuing could be
+insecure or harmful, the best choice might be to call `panic!` and alert the
+person using your library to the bug in their code so they can fix it during
+development. Similarly, `panic!` is often appropriate if you’re calling
+external code that is out of your control and it returns an invalid state that
+you have no way of fixing.
+
+<!---
+Disagree a bit with the above. I don't think libraries should ever panic. They
+should always be written defensively so they can be used in a broader range of
+applications, which include applications where crashing could result in data
+loss.
+
+Rather than crashing, libraries can encode the reasons they failed based on the
+user's input into an error that can be returned to the user.
+
+In practice, the only time the application should absolutely crash is if
+continuing could bring harm to the user's machine, their data, filesystem, and
+so on. Otherwise, the user should just be given a warning that the operation
+couldn't be completed successfully, so they can take their next action. If we
+crash, unfortunately the user never gets that choice.
+/JT --->
+<!-- I think we actually agree here but the original text wasn't clear enough;
+I've edited. /Carol -->
+
+However, when failure is expected, it’s more appropriate to return a `Result`
+than to make a `panic!` call. Examples include a parser being given malformed
+data or an HTTP request returning a status that indicates you have hit a rate
+limit. In these cases, returning a `Result` indicates that failure is an
+expected possibility that the calling code must decide how to handle.
+
+When your code performs an operation that could put a user at risk if it’s
+called using invalid values, your code should verify the values are valid first
+and panic if the values aren’t valid. This is mostly for safety reasons:
+attempting to operate on invalid data can expose your code to vulnerabilities.
+This is the main reason the standard library will call `panic!` if you attempt
+an out-of-bounds memory access: trying to access memory that doesn’t belong to
+the current data structure is a common security problem. Functions often have
+*contracts*: their behavior is only guaranteed if the inputs meet particular
+requirements. Panicking when the contract is violated makes sense because a
+contract violation always indicates a caller-side bug and it’s not a kind of
+error you want the calling code to have to explicitly handle. In fact, there’s
+no reasonable way for calling code to recover; the calling *programmers* need
+to fix the code. Contracts for a function, especially when a violation will
+cause a panic, should be explained in the API documentation for the function.
+
+<!---
+The wording of the first sentence in the above paragraph reads like we should
+panic on invalid data, but in the previous paragraph we say malformed data
+should be a `Result`. The rest makes sense, where the spirit of when the stdlib
+panics is less about invalid data and more about when the user will be put at
+risk.
+/JT --->
+<!-- I think we were trying to draw a distinction between "malformed" and
+"invalid" values that perhaps wasn't very clear. I've tried to clarify by
+adding "could put a user at risk", but I don't really want to get into the
+specifics of this because only a subset of readers will be writing code like
+this... /Carol -->
+
+However, having lots of error checks in all of your functions would be verbose
+and annoying. Fortunately, you can use Rust’s type system (and thus the type
+checking done by the compiler) to do many of the checks for you. If your
+function has a particular type as a parameter, you can proceed with your code’s
+logic knowing that the compiler has already ensured you have a valid value. For
+example, if you have a type rather than an `Option`, your program expects to
+have *something* rather than *nothing*. Your code then doesn’t have to handle
+two cases for the `Some` and `None` variants: it will only have one case for
+definitely having a value. Code trying to pass nothing to your function won’t
+even compile, so your function doesn’t have to check for that case at runtime.
+Another example is using an unsigned integer type such as `u32`, which ensures
+the parameter is never negative.
+
+### Creating Custom Types for Validation
+
+Let’s take the idea of using Rust’s type system to ensure we have a valid value
+one step further and look at creating a custom type for validation. Recall the
+guessing game in Chapter 2 in which our code asked the user to guess a number
+between 1 and 100. We never validated that the user’s guess was between those
+numbers before checking it against our secret number; we only validated that
+the guess was positive. In this case, the consequences were not very dire: our
+output of “Too high” or “Too low” would still be correct. But it would be a
+useful enhancement to guide the user toward valid guesses and have different
+behavior when a user guesses a number that’s out of range versus when a user
+types, for example, letters instead.
+
+One way to do this would be to parse the guess as an `i32` instead of only a
+`u32` to allow potentially negative numbers, and then add a check for the
+number being in range, like so:
+
+```
+loop {
+ // --snip--
+
+ let guess: i32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+ };
+
+ if guess < 1 || guess > 100 {
+ println!("The secret number will be between 1 and 100.");
+ continue;
+ }
+
+ match guess.cmp(&secret_number) {
+ // --snip--
+}
+```
+
+The `if` expression checks whether our value is out of range, tells the user
+about the problem, and calls `continue` to start the next iteration of the loop
+and ask for another guess. After the `if` expression, we can proceed with the
+comparisons between `guess` and the secret number knowing that `guess` is
+between 1 and 100.
+
+However, this is not an ideal solution: if it was absolutely critical that the
+program only operated on values between 1 and 100, and it had many functions
+with this requirement, having a check like this in every function would be
+tedious (and might impact performance).
+
+Instead, we can make a new type and put the validations in a function to create
+an instance of the type rather than repeating the validations everywhere. That
+way, it’s safe for functions to use the new type in their signatures and
+confidently use the values they receive. Listing 9-13 shows one way to define a
+`Guess` type that will only create an instance of `Guess` if the `new` function
+receives a value between 1 and 100.
+
+```
+pub struct Guess {
+ value: i32,
+}
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 || value > 100 {
+ panic!("Guess value must be between 1 and 100, got {}.", value);
+ }
+
+ Guess { value }
+ }
+
+ pub fn value(&self) -> i32 {
+ self.value
+ }
+}
+```
+
+<!---
+The above example feels a bit off to me. We talk earlier about user input being
+a prime candidate for recoverable errors, and then we talk about encoding only
+proper states in the type system. But this examples seems to work with user
+input and panic if it's not correct, rather than using recoverable errors or
+encoding the state into the type.
+
+Maybe you could have them guess rock/paper/scissors and encode the
+rock/paper/scissor as three enum values, and if they type something outside of
+that, we don't allow it. Otherwise we create an enum of that value.
+/JT --->
+<!-- The point about this listing panicking is valid, but I disagree a little.
+I think this is encoding only valid states into the type system. Also, Chapter
+11 builds on this example to show how to use `should_panic`, so I'm going to
+leave this the way it is. /Carol -->
+
+Listing 9-13: A `Guess` type that will only continue with values between 1 and
+100
+
+First, we define a struct named `Guess` that has a field named `value` that
+holds an `i32`. This is where the number will be stored.
+
+Then we implement an associated function named `new` on `Guess` that creates
+instances of `Guess` values. The `new` function is defined to have one
+parameter named `value` of type `i32` and to return a `Guess`. The code in the
+body of the `new` function tests `value` to make sure it’s between 1 and 100.
+If `value` doesn’t pass this test, we make a `panic!` call, which will alert
+the programmer who is writing the calling code that they have a bug they need
+to fix, because creating a `Guess` with a `value` outside this range would
+violate the contract that `Guess::new` is relying on. The conditions in which
+`Guess::new` might panic should be discussed in its public-facing API
+documentation; we’ll cover documentation conventions indicating the possibility
+of a `panic!` in the API documentation that you create in Chapter 14. If
+`value` does pass the test, we create a new `Guess` with its `value` field set
+to the `value` parameter and return the `Guess`.
+
+Next, we implement a method named `value` that borrows `self`, doesn’t have any
+other parameters, and returns an `i32`. This kind of method is sometimes called
+a *getter*, because its purpose is to get some data from its fields and return
+it. This public method is necessary because the `value` field of the `Guess`
+struct is private. It’s important that the `value` field be private so code
+using the `Guess` struct is not allowed to set `value` directly: code outside
+the module *must* use the `Guess::new` function to create an instance of
+`Guess`, thereby ensuring there’s no way for a `Guess` to have a `value` that
+hasn’t been checked by the conditions in the `Guess::new` function.
+
+A function that has a parameter or returns only numbers between 1 and 100 could
+then declare in its signature that it takes or returns a `Guess` rather than an
+`i32` and wouldn’t need to do any additional checks in its body.
+
+## Summary
+
+Rust’s error handling features are designed to help you write more robust code.
+The `panic!` macro signals that your program is in a state it can’t handle and
+lets you tell the process to stop instead of trying to proceed with invalid or
+incorrect values. The `Result` enum uses Rust’s type system to indicate that
+operations might fail in a way that your code could recover from. You can use
+`Result` to tell code that calls your code that it needs to handle potential
+success or failure as well. Using `panic!` and `Result` in the appropriate
+situations will make your code more reliable in the face of inevitable problems.
+
+Now that you’ve seen useful ways that the standard library uses generics with
+the `Option` and `Result` enums, we’ll talk about how generics work and how you
+can use them in your code.
+
+<!---
+A meta comment: the coverage of `panic!` here feels helpful in terms of giving
+a more complete understanding of Rust, but in practice (and this may depend
+on domain), using `panic!` should be a fairly limited thing.
+
+Something I noticed we don't touch on but may want to is panic hooks, as
+unrecoverable errors isn't exactly true. You can recover from an unwinding
+panic if you need to code defensively against, say, a dependency panicking and
+you don't want your app to go down as a result.
+/JT --->
+<!-- Yeahhh I don't want to mention panic hooks, one because I don't think most
+people will need to think about them or implement one, and two because a subset
+of people will look at that and think "oh look, exception handling!" which...
+is not what it's for. /Carol -->
diff --git a/src/doc/book/nostarch/chapter10.md b/src/doc/book/nostarch/chapter10.md
new file mode 100644
index 000000000..2030c335e
--- /dev/null
+++ b/src/doc/book/nostarch/chapter10.md
@@ -0,0 +1,2023 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Generic Types, Traits, and Lifetimes
+
+Every programming language has tools for effectively handling the duplication
+of concepts. In Rust, one such tool is *generics*: abstract stand-ins for
+concrete types or other properties. We can express the behavior of generics or
+how they relate to other generics without knowing what will be in their place
+when compiling and running the code.
+
+Functions can take parameters of some generic type, instead of a concrete type
+like `i32` or `String`, in the same way a function takes parameters with
+unknown values to run the same code on multiple concrete values. In fact, we’ve
+already used generics in Chapter 6 with `Option<T>`, Chapter 8 with `Vec<T>`
+and `HashMap<K, V>`, and Chapter 9 with `Result<T, E>`. In this chapter, you’ll
+explore how to define your own types, functions, and methods with generics!
+
+First, we’ll review how to extract a function to reduce code duplication. We’ll
+then use the same technique to make a generic function from two functions that
+differ only in the types of their parameters. We’ll also explain how to use
+generic types in struct and enum definitions.
+
+Then you’ll learn how to use *traits* to define behavior in a generic way. You
+can combine traits with generic types to constrain a generic type to accept
+only those types that have a particular behavior, as opposed to just any type.
+
+Finally, we’ll discuss *lifetimes*: a variety of generics that give the
+compiler information about how references relate to each other. Lifetimes allow
+us to give the compiler enough information about borrowed values so that it can
+ensure references will be valid in more situations than it could without our
+help.
+
+## Removing Duplication by Extracting a Function
+
+Generics allow us to replace specific types with a placeholder that represents
+multiple types to remove code duplication.
+Before diving into generics syntax, then, let’s first look at how to remove
+duplication in a way that doesn’t involve generic types by extracting a
+function that replaces specific values with a placeholder that represents
+multiple values. Then we’ll apply the same technique to extract a generic
+function! By looking at how to recognize duplicated code you can extract into a
+function, you’ll start to recognize duplicated code that can use generics.
+
+We begin with the short program in Listing 10-1 that finds the largest number
+in a list.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let mut largest = &number_list[0];
+
+ for number in &number_list {
+ if number > largest {
+ largest = number;
+ }
+ }
+
+ println!("The largest number is {}", largest);
+}
+```
+
+Listing 10-1: Finding the largest number in a list of numbers
+
+We store a list of integers in the variable `number_list` and place a reference
+to the first number in the list in a variable named `largest`. We then iterate
+through all the numbers in the list, and if the current number is greater than
+the number stored in `largest`, replace the reference in that variable.
+However, if the current number is less than or equal to the largest number seen
+so far, the variable doesn’t change, and the code moves on to the next number
+in the list. After considering all the numbers in the list, `largest` should
+refer to the largest number, which in this case is 100.
+
+We've now been tasked with finding the largest number in two different lists of
+numbers. To do so, we can choose to duplicate the code in Listing 10-1 and use
+the same logic at two different places in the program, as shown in Listing 10-2.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let mut largest = &number_list[0];
+
+ for number in &number_list {
+ if number > largest {
+ largest = number;
+ }
+ }
+
+ println!("The largest number is {}", largest);
+
+ let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
+
+ let mut largest = &number_list[0];
+
+ for number in &number_list {
+ if number > largest {
+ largest = number;
+ }
+ }
+
+ println!("The largest number is {}", largest);
+}
+```
+
+Listing 10-2: Code to find the largest number in *two* lists of numbers
+
+Although this code works, duplicating code is tedious and error prone. We also
+have to remember to update the code in multiple places when we want to change
+it.
+
+To eliminate this duplication, we’ll create an abstraction by defining a
+function that operates on any list of integers passed in a parameter. This
+solution makes our code clearer and lets us express the concept of finding the
+largest number in a list abstractly.
+
+In Listing 10-3, we extract the code that finds the largest number into a
+function named `largest`. Then we call the function to find the largest number
+in the two lists from Listing 10-2. We could also use the function on any other
+list of `i32` values we might have in the future.
+
+Filename: src/main.rs
+
+```
+fn largest(list: &[i32]) -> &i32 {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let result = largest(&number_list);
+ println!("The largest number is {}", result);
+
+ let number_list = vec![102, 34, 6000, 89, 54, 2, 43, 8];
+
+ let result = largest(&number_list);
+ println!("The largest number is {}", result);
+}
+```
+
+Listing 10-3: Abstracted code to find the largest number in two lists
+
+The `largest` function has a parameter called `list`, which represents any
+concrete slice of `i32` values we might pass into the function. As a result,
+when we call the function, the code runs on the specific values that we pass
+in.
+
+In summary, here are the steps we took to change the code from Listing 10-2 to
+Listing 10-3:
+
+<!---
+"In summary"?
+/JT --->
+<!-- I believe "In sum" to be fine, but other people have been confused by it
+as well, so I'm ok changing it. /Carol -->
+
+1. Identify duplicate code.
+2. Extract the duplicate code into the body of the function and specify the
+ inputs and return values of that code in the function signature.
+3. Update the two instances of duplicated code to call the function instead.
+
+Next, we’ll use these same steps with generics to reduce code duplication. In
+the same way that the function body can operate on an abstract `list` instead
+of specific values, generics allow code to operate on abstract types.
+
+For example, say we had two functions: one that finds the largest item in a
+slice of `i32` values and one that finds the largest item in a slice of `char`
+values. How would we eliminate that duplication? Let’s find out!
+
+## Generic Data Types
+
+We use generics to create definitions for items like function signatures or
+structs, which we can then use with many different concrete data types. Let’s
+first look at how to define functions, structs, enums, and methods using
+generics. Then we’ll discuss how generics affect code performance.
+
+### In Function Definitions
+
+When defining a function that uses generics, we place the generics in the
+signature of the function where we would usually specify the data types of the
+parameters and return value. Doing so makes our code more flexible and provides
+more functionality to callers of our function while preventing code duplication.
+
+Continuing with our `largest` function, Listing 10-4 shows two functions that
+both find the largest value in a slice. We'll then combine these into a single
+function that uses generics.
+
+Filename: src/main.rs
+
+```
+fn largest_i32(list: &[i32]) -> &i32 {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn largest_char(list: &[char]) -> &char {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let result = largest_i32(&number_list);
+ println!("The largest number is {}", result);
+
+ let char_list = vec!['y', 'm', 'a', 'q'];
+
+ let result = largest_char(&char_list);
+ println!("The largest char is {}", result);
+}
+```
+
+Listing 10-4: Two functions that differ only in their names and the types in
+their signatures
+
+The `largest_i32` function is the one we extracted in Listing 10-3 that finds
+the largest `i32` in a slice. The `largest_char` function finds the largest
+`char` in a slice. The function bodies have the same code, so let’s eliminate
+the duplication by introducing a generic type parameter in a single function.
+
+To parameterize the types in a new single function, we need to name the type
+parameter, just as we do for the value parameters to a function. You can use
+any identifier as a type parameter name. But we’ll use `T` because, by
+convention, parameter names in Rust are short, often just a letter, and Rust’s
+type-naming convention is CamelCase. Short for “type,” `T` is the default
+choice of most Rust programmers.
+
+When we use a parameter in the body of the function, we have to declare the
+parameter name in the signature so the compiler knows what that name means.
+Similarly, when we use a type parameter name in a function signature, we have
+to declare the type parameter name before we use it. To define the generic
+`largest` function, place type name declarations inside angle brackets, `<>`,
+between the name of the function and the parameter list, like this:
+
+```
+fn largest<T>(list: &[T]) -> &T {
+```
+
+We read this definition as: the function `largest` is generic over some type
+`T`. This function has one parameter named `list`, which is a slice of values
+of type `T`. The `largest` function will return a reference to a value of the
+same type `T`.
+
+Listing 10-5 shows the combined `largest` function definition using the generic
+data type in its signature. The listing also shows how we can call the function
+with either a slice of `i32` values or `char` values. Note that this code won’t
+compile yet, but we’ll fix it later in this chapter.
+
+Filename: src/main.rs
+
+```
+fn largest<T>(list: &[T]) -> &T {
+ let mut largest = &list[0];
+
+ for item in list {
+ if item > largest {
+ largest = item;
+ }
+ }
+
+ largest
+}
+
+fn main() {
+ let number_list = vec![34, 50, 25, 100, 65];
+
+ let result = largest(&number_list);
+ println!("The largest number is {}", result);
+
+ let char_list = vec!['y', 'm', 'a', 'q'];
+
+ let result = largest(&char_list);
+ println!("The largest char is {}", result);
+}
+```
+
+Listing 10-5: The `largest` function using generic type parameters; this
+doesn’t yet compile yet
+
+If we compile this code right now, we’ll get this error:
+
+```
+error[E0369]: binary operation `>` cannot be applied to type `T`
+ --> src/main.rs:5:17
+ |
+5 | if item > largest {
+ | ---- ^ ------- T
+ | |
+ | T
+ |
+help: consider restricting type parameter `T`
+ |
+1 | fn largest<T: std::cmp::PartialOrd>(list: &[T]) -> T {
+ | ^^^^^^^^^^^^^^^^^^^^^^
+```
+
+The help text mentions `std::cmp::PartialOrd`, which is a *trait*, and we’re
+going to talk about traits in the next section. For now, know that this error
+states that the body of `largest` won’t work for all possible types that `T`
+could be. Because we want to compare values of type `T` in the body, we can
+only use types whose values can be ordered. To enable comparisons, the standard
+library has the `std::cmp::PartialOrd` trait that you can implement on types
+(see Appendix C for more on this trait). By following the help text's
+suggestion, we restrict the types valid for `T` to only those that implement
+`PartialOrd` and this example will compile, because the standard library
+implements `PartialOrd` on both `i32` and `char`.
+
+<!---
+The wording at the end of the above paragraph feels a little odd. For the
+"You’ll learn how to specify that a generic type has a particular trait in the
+“Traits as Parameters” section." -- the error message above tells you how to
+maybe fix it.
+
+Well, it *could* fix it but the way the example is written adds multiple
+constraints.
+
+Do we want to leave this example unfinished and move onto other topics for a
+bit or revise the example so it's more self-contained, allowing the compiler to
+help us and later revisit after we've learned more?
+/JT --->
+<!-- I've modified the example and explanation just slightly so that only
+adding the `PartialOrd` trait as suggested here will fix it completely, perhaps
+leaving the reader hanging a little bit less. It's really hard to teach
+generics and trait bounds, though, because you can't do much with generics
+unless you have trait bounds too (and can't learn why you'd want trait bounds
+without knowing about generics). /Carol -->
+
+### In Struct Definitions
+
+We can also define structs to use a generic type parameter in one or more
+fields using the `<>` syntax. Listing 10-6 defines a `Point<T>` struct to hold
+`x` and `y` coordinate values of any type.
+
+Filename: src/main.rs
+
+```
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+fn main() {
+ let integer = Point { x: 5, y: 10 };
+ let float = Point { x: 1.0, y: 4.0 };
+}
+```
+
+Listing 10-6: A `Point<T>` struct that holds `x` and `y` values of type `T`
+
+The syntax for using generics in struct definitions is similar to that used in
+function definitions. First, we declare the name of the type parameter inside
+angle brackets just after the name of the struct. Then we use the generic type
+in the struct definition where we would otherwise specify concrete data types.
+
+Note that because we’ve used only one generic type to define `Point<T>`, this
+definition says that the `Point<T>` struct is generic over some type `T`, and
+the fields `x` and `y` are *both* that same type, whatever that type may be. If
+we create an instance of a `Point<T>` that has values of different types, as in
+Listing 10-7, our code won’t compile.
+
+Filename: src/main.rs
+
+```
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+fn main() {
+ let wont_work = Point { x: 5, y: 4.0 };
+}
+```
+
+Listing 10-7: The fields `x` and `y` must be the same type because both have
+the same generic data type `T`.
+
+In this example, when we assign the integer value 5 to `x`, we let the compiler
+know that the generic type `T` will be an integer for this instance of
+`Point<T>`. Then when we specify 4.0 for `y`, which we’ve defined to have the
+same type as `x`, we’ll get a type mismatch error like this:
+
+<!---
+Not sure how or where we might want to call this out, but this is also how
+type inference in Rust works. If we don't know the type, we look for how it's
+used. That fresh type becomes a concrete type, and any use after that which
+is different than we expect becomes an error.
+
+fn main() {
+ let mut x;
+
+ x = 5;
+ x = 4.0;
+}
+
+Also gives:
+ |
+2 | let mut x;
+ | ----- expected due to the type of this binding
+...
+5 | x = 4.0;
+ | ^^^ expected integer, found floating-point number
+
+/JT --->
+<!-- Yeah, it's kind of neat trivia, but doesn't really fit here I don't think.
+/Carol -->
+
+```
+error[E0308]: mismatched types
+ --> src/main.rs:7:38
+ |
+7 | let wont_work = Point { x: 5, y: 4.0 };
+ | ^^^ expected integer, found floating-point number
+```
+
+To define a `Point` struct where `x` and `y` are both generics but could have
+different types, we can use multiple generic type parameters. For example, in
+Listing 10-8, we change the definition of `Point` to be generic over types `T`
+and `U` where `x` is of type `T` and `y` is of type `U`.
+
+Filename: src/main.rs
+
+```
+struct Point<T, U> {
+ x: T,
+ y: U,
+}
+
+fn main() {
+ let both_integer = Point { x: 5, y: 10 };
+ let both_float = Point { x: 1.0, y: 4.0 };
+ let integer_and_float = Point { x: 5, y: 4.0 };
+}
+```
+
+Listing 10-8: A `Point<T, U>` generic over two types so that `x` and `y` can be
+values of different types
+
+Now all the instances of `Point` shown are allowed! You can use as many generic
+type parameters in a definition as you want, but using more than a few makes
+your code hard to read. If you're finding you need lots of generic types in
+your code, it could indicate that your code needs restructuring into smaller
+pieces.
+
+### In Enum Definitions
+
+As we did with structs, we can define enums to hold generic data types in their
+variants. Let’s take another look at the `Option<T>` enum that the standard
+library provides, which we used in Chapter 6:
+
+```
+enum Option<T> {
+ Some(T),
+ None,
+}
+```
+
+This definition should now make more sense to you. As you can see, the
+`Option<T>` enum is generic over type `T` and has two variants: `Some`, which
+holds one value of type `T`, and a `None` variant that doesn’t hold any value.
+By using the `Option<T>` enum, we can express the abstract concept of an
+optional value, and because `Option<T>` is generic, we can use this abstraction
+no matter what the type of the optional value is.
+
+Enums can use multiple generic types as well. The definition of the `Result`
+enum that we used in Chapter 9 is one example:
+
+```
+enum Result<T, E> {
+ Ok(T),
+ Err(E),
+}
+```
+
+The `Result` enum is generic over two types, `T` and `E`, and has two variants:
+`Ok`, which holds a value of type `T`, and `Err`, which holds a value of type
+`E`. This definition makes it convenient to use the `Result` enum anywhere we
+have an operation that might succeed (return a value of some type `T`) or fail
+(return an error of some type `E`). In fact, this is what we used to open a
+file in Listing 9-3, where `T` was filled in with the type `std::fs::File` when
+the file was opened successfully and `E` was filled in with the type
+`std::io::Error` when there were problems opening the file.
+
+When you recognize situations in your code with multiple struct or enum
+definitions that differ only in the types of the values they hold, you can
+avoid duplication by using generic types instead.
+
+### In Method Definitions
+
+We can implement methods on structs and enums (as we did in Chapter 5) and use
+generic types in their definitions, too. Listing 10-9 shows the `Point<T>`
+struct we defined in Listing 10-6 with a method named `x` implemented on it.
+
+Filename: src/main.rs
+
+```
+struct Point<T> {
+ x: T,
+ y: T,
+}
+
+impl<T> Point<T> {
+ fn x(&self) -> &T {
+ &self.x
+ }
+}
+
+fn main() {
+ let p = Point { x: 5, y: 10 };
+
+ println!("p.x = {}", p.x());
+}
+```
+
+<!---
+
+The above code gives a warning for the unused `y`. Maybe we can print both
+`x` and `y`?
+
+/JT --->
+<!-- In general, I'm not worried about unused code warnings, there's a lot of
+examples that have unused code because they're small examples. I don't think
+there's much value in adding a method and printing `y` as well. /Carol -->
+
+Listing 10-9: Implementing a method named `x` on the `Point<T>` struct that
+will return a reference to the `x` field of type `T`
+
+Here, we’ve defined a method named `x` on `Point<T>` that returns a reference
+to the data in the field `x`.
+
+Note that we have to declare `T` just after `impl` so we can use `T` to specify
+that we’re implementing methods on the type `Point<T>`. By declaring `T` as a
+generic type after `impl`, Rust can identify that the type in the angle
+brackets in `Point` is a generic type rather than a concrete type. We could
+have chosen a different name for this generic parameter than the generic
+parameter declared in the struct definition, but using the same name is
+conventional. Methods written within an `impl` that declares the generic type
+will be defined on any instance of the type, no matter what concrete type ends
+up substituting for the generic type.
+
+We can also specify constraints on generic types when defining methods on the
+type. We could, for example, implement methods only on `Point<f32>` instances
+rather than on `Point<T>` instances with any generic type. In Listing 10-10 we
+use the concrete type `f32`, meaning we don’t declare any types after `impl`.
+
+Filename: src/main.rs
+
+```
+impl Point<f32> {
+ fn distance_from_origin(&self) -> f32 {
+ (self.x.powi(2) + self.y.powi(2)).sqrt()
+ }
+}
+```
+
+Listing 10-10: An `impl` block that only applies to a struct with a particular
+concrete type for the generic type parameter `T`
+
+This code means the type `Point<f32>` will have a `distance_from_origin`
+method; other instances of `Point<T>` where `T` is not of type `f32` will not
+have this method defined. The method measures how far our point is from the
+point at coordinates (0.0, 0.0) and uses mathematical operations that are
+available only for floating point types.
+
+Generic type parameters in a struct definition aren’t always the same as those
+you use in that same struct’s method signatures. Listing 10-11 uses the generic
+types `X1` and `Y1` for the `Point` struct and `X2` `Y2` for the `mixup` method
+signature to make the example clearer. The method creates a new `Point`
+instance with the `x` value from the `self` `Point` (of type `X1`) and the `y`
+value from the passed-in `Point` (of type `Y2`).
+
+Filename: src/main.rs
+
+```
+struct Point<X1, Y1> {
+ x: X1,
+ y: Y1,
+}
+
+impl<X1, Y1> Point<X1, Y1> {
+ fn mixup<X2, Y2>(self, other: Point<X2, Y2>) -> Point<X1, Y2> {
+ Point {
+ x: self.x,
+ y: other.y,
+ }
+ }
+}
+
+fn main() {
+ let p1 = Point { x: 5, y: 10.4 };
+ let p2 = Point { x: "Hello", y: 'c' };
+
+ let p3 = p1.mixup(p2);
+
+ println!("p3.x = {}, p3.y = {}", p3.x, p3.y);
+}
+```
+
+Listing 10-11: A method that uses generic types different from its struct’s
+definition
+
+In `main`, we’ve defined a `Point` that has an `i32` for `x` (with value `5`)
+and an `f64` for `y` (with value `10.4`). The `p2` variable is a `Point` struct
+that has a string slice for `x` (with value `"Hello"`) and a `char` for `y`
+(with value `c`). Calling `mixup` on `p1` with the argument `p2` gives us `p3`,
+which will have an `i32` for `x`, because `x` came from `p1`. The `p3` variable
+will have a `char` for `y`, because `y` came from `p2`. The `println!` macro
+call will print `p3.x = 5, p3.y = c`.
+
+The purpose of this example is to demonstrate a situation in which some generic
+parameters are declared with `impl` and some are declared with the method
+definition. Here, the generic parameters `X1` and `Y1` are declared after
+`impl` because they go with the struct definition. The generic parameters `X2`
+and `Y2` are declared after `fn mixup`, because they’re only relevant to the
+method.
+
+### Performance of Code Using Generics
+
+You might be wondering whether there is a runtime cost when using generic type
+parameters. The good news is that using generic types won't make your run any
+slower than it would with concrete types.
+
+Rust accomplishes this by performing monomorphization of the code using
+generics at compile time. *Monomorphization* is the process of turning generic
+code into specific code by filling in the concrete types that are used when
+compiled. In this process, the compiler does the opposite of the steps we used
+to create the generic function in Listing 10-5: the compiler looks at all the
+places where generic code is called and generates code for the concrete types
+the generic code is called with.
+
+Let’s look at how this works by using the standard library’s generic
+`Option<T>` enum:
+
+```
+let integer = Some(5);
+let float = Some(5.0);
+```
+
+When Rust compiles this code, it performs monomorphization. During that
+process, the compiler reads the values that have been used in `Option<T>`
+instances and identifies two kinds of `Option<T>`: one is `i32` and the other
+is `f64`. As such, it expands the generic definition of `Option<T>` into two
+definitions specialized to `i32` and `f64`, thereby replacing the generic
+definition with the specific ones.
+
+<!---
+
+We may want to be clear in the above it doesn't actually do this, as you
+wouldn't be able to write `enum Option_i32` in your code as it would clash.
+
+/JT --->
+<!-- I've reworded the last sentence in the above paragraph and the next
+sentence to hopefully sidestep the issue JT pointed out. /Carol -->
+
+The monomorphized version of the code looks similar to the following (the
+compiler uses different names than what we’re using here for illustration):
+
+Filename: src/main.rs
+
+```
+enum Option_i32 {
+ Some(i32),
+ None,
+}
+
+enum Option_f64 {
+ Some(f64),
+ None,
+}
+
+fn main() {
+ let integer = Option_i32::Some(5);
+ let float = Option_f64::Some(5.0);
+}
+```
+
+The generic `Option<T>` is replaced with the specific definitions created by
+the compiler. Because Rust compiles generic code into code that specifies the
+type in each instance, we pay no runtime cost for using generics. When the code
+runs, it performs just as it would if we had duplicated each definition by
+hand. The process of monomorphization makes Rust’s generics extremely efficient
+at runtime.
+
+## Traits: Defining Shared Behavior
+
+A *trait* defines functionality a particular type has and can share with other
+types. We can use traits to define shared behavior in an abstract way. We can
+use *trait bounds* to specify that a generic type can be any type that has
+certain behavior.
+
+> Note: Traits are similar to a feature often called *interfaces* in other
+> languages, although with some differences.
+
+### Defining a Trait
+
+A type’s behavior consists of the methods we can call on that type. Different
+types share the same behavior if we can call the same methods on all of those
+types. Trait definitions are a way to group method signatures together to
+define a set of behaviors necessary to accomplish some purpose.
+
+For example, let’s say we have multiple structs that hold various kinds and
+amounts of text: a `NewsArticle` struct that holds a news story filed in a
+particular location and a `Tweet` that can have at most 280 characters along
+with metadata that indicates whether it was a new tweet, a retweet, or a reply
+to another tweet.
+
+We want to make a media aggregator library crate named `aggregator` that can
+display summaries of data that might be stored in a `NewsArticle` or `Tweet`
+instance. To do this, we need a summary from each type, and we’ll request
+that summary by calling a `summarize` method on an instance. Listing 10-12
+shows the definition of a public `Summary` trait that expresses this behavior.
+
+Filename: src/lib.rs
+
+```
+pub trait Summary {
+ fn summarize(&self) -> String;
+}
+```
+
+Listing 10-12: A `Summary` trait that consists of the behavior provided by a
+`summarize` method
+
+Here, we declare a trait using the `trait` keyword and then the trait’s name,
+which is `Summary` in this case. We’ve also declared the trait as `pub` so that
+crates depending on this crate can make use of this trait too, as we’ll see in
+a few examples. Inside the curly brackets, we declare the method signatures
+that describe the behaviors of the types that implement this trait, which in
+this case is `fn summarize(&self) -> String`.
+
+After the method signature, instead of providing an implementation within curly
+brackets, we use a semicolon. Each type implementing this trait must provide
+its own custom behavior for the body of the method. The compiler will enforce
+that any type that has the `Summary` trait will have the method `summarize`
+defined with this signature exactly.
+
+A trait can have multiple methods in its body: the method signatures are listed
+one per line and each line ends in a semicolon.
+
+### Implementing a Trait on a Type
+
+Now that we’ve defined the desired signatures of the `Summary` trait’s methods,
+we can implement it on the types in our media aggregator. Listing 10-13 shows
+an implementation of the `Summary` trait on the `NewsArticle` struct that uses
+the headline, the author, and the location to create the return value of
+`summarize`. For the `Tweet` struct, we define `summarize` as the username
+followed by the entire text of the tweet, assuming that tweet content is
+already limited to 280 characters.
+
+Filename: src/lib.rs
+
+```
+pub struct NewsArticle {
+ pub headline: String,
+ pub location: String,
+ pub author: String,
+ pub content: String,
+}
+
+impl Summary for NewsArticle {
+ fn summarize(&self) -> String {
+ format!("{}, by {} ({})", self.headline, self.author, self.location)
+ }
+}
+
+pub struct Tweet {
+ pub username: String,
+ pub content: String,
+ pub reply: bool,
+ pub retweet: bool,
+}
+
+impl Summary for Tweet {
+ fn summarize(&self) -> String {
+ format!("{}: {}", self.username, self.content)
+ }
+}
+```
+
+Listing 10-13: Implementing the `Summary` trait on the `NewsArticle` and
+`Tweet` types
+
+Implementing a trait on a type is similar to implementing regular methods. The
+difference is that after `impl`, we put the trait name we want to implement,
+then use the `for` keyword, and then specify the name of the type we want to
+implement the trait for. Within the `impl` block, we put the method signatures
+that the trait definition has defined. Instead of adding a semicolon after each
+signature, we use curly brackets and fill in the method body with the specific
+behavior that we want the methods of the trait to have for the particular type.
+
+<!-- NOTE TO ADD SOME NUMBER INDICATORS HERE IN THE WORD FILES -->
+
+Now that the library has implemented the `Summary` trait on `NewsArticle` and
+`Tweet`, users of the crate can call the trait methods on instances of
+`NewsArticle` and `Tweet` in the same way we call regular methods. The only
+difference is that the user must bring the trait into scope as well as the
+types. Here’s an example of how a binary crate could use our `aggregator`
+library crate:
+
+```
+use aggregator::{Summary, Tweet};
+
+fn main() {
+ let tweet = Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ };
+
+ println!("1 new tweet: {}", tweet.summarize());
+}
+```
+
+This code prints `1 new tweet: horse_ebooks: of course, as you probably already
+know, people`.
+
+Other crates that depend on the `aggregator` crate can also bring the `Summary`
+trait into scope to implement `Summary` on their own types. One restriction to
+note is that we can implement a trait on a type only if at least one of the
+trait or the type is local to our crate. For example, we can implement standard
+library traits like `Display` on a custom type like `Tweet` as part of our
+`aggregator` crate functionality, because the type `Tweet` is local to our
+`aggregator` crate. We can also implement `Summary` on `Vec<T>` in our
+`aggregator` crate, because the trait `Summary` is local to our `aggregator`
+crate.
+
+But we can’t implement external traits on external types. For example, we can’t
+implement the `Display` trait on `Vec<T>` within our `aggregator` crate,
+because `Display` and `Vec<T>` are both defined in the standard library and
+aren’t local to our `aggregator` crate. This restriction is part of a property
+called *coherence*, and more specifically the *orphan rule*, so named because
+the parent type is not present. This rule ensures that other people’s code
+can’t break your code and vice versa. Without the rule, two crates could
+implement the same trait for the same type, and Rust wouldn’t know which
+implementation to use.
+
+### Default Implementations
+
+Sometimes it’s useful to have default behavior for some or all of the methods
+in a trait instead of requiring implementations for all methods on every type.
+Then, as we implement the trait on a particular type, we can keep or override
+each method’s default behavior.
+
+In Listing 10-14 we specify a default string for the `summarize` method of the
+`Summary` trait instead of only defining the method signature, as we did in
+Listing 10-12.
+
+Filename: src/lib.rs
+
+```
+pub trait Summary {
+ fn summarize(&self) -> String {
+ String::from("(Read more...)")
+ }
+}
+```
+
+Listing 10-14: Defining a `Summary` trait with a default implementation of
+the `summarize` method
+
+To use a default implementation to summarize instances of `NewsArticle`, we
+specify an empty `impl` block with `impl Summary for NewsArticle {}`.
+
+Even though we’re no longer defining the `summarize` method on `NewsArticle`
+directly, we’ve provided a default implementation and specified that
+`NewsArticle` implements the `Summary` trait. As a result, we can still call
+the `summarize` method on an instance of `NewsArticle`, like this:
+
+```
+let article = NewsArticle {
+ headline: String::from("Penguins win the Stanley Cup Championship!"),
+ location: String::from("Pittsburgh, PA, USA"),
+ author: String::from("Iceburgh"),
+ content: String::from(
+ "The Pittsburgh Penguins once again are the best \
+ hockey team in the NHL.",
+ ),
+};
+
+println!("New article available! {}", article.summarize());
+```
+
+This code prints `New article available! (Read more...)`.
+
+Creating a default implementation doesn’t require us to change anything about
+the implementation of `Summary` on `Tweet` in Listing 10-13. The reason is that
+the syntax for overriding a default implementation is the same as the syntax
+for implementing a trait method that doesn’t have a default implementation.
+
+Default implementations can call other methods in the same trait, even if those
+other methods don’t have a default implementation. In this way, a trait can
+provide a lot of useful functionality and only require implementors to specify
+a small part of it. For example, we could define the `Summary` trait to have a
+`summarize_author` method whose implementation is required, and then define a
+`summarize` method that has a default implementation that calls the
+`summarize_author` method:
+
+```
+pub trait Summary {
+ fn summarize_author(&self) -> String;
+
+ fn summarize(&self) -> String {
+ format!("(Read more from {}...)", self.summarize_author())
+ }
+}
+```
+
+To use this version of `Summary`, we only need to define `summarize_author`
+when we implement the trait on a type:
+
+```
+impl Summary for Tweet {
+ fn summarize_author(&self) -> String {
+ format!("@{}", self.username)
+ }
+}
+```
+
+After we define `summarize_author`, we can call `summarize` on instances of the
+`Tweet` struct, and the default implementation of `summarize` will call the
+definition of `summarize_author` that we’ve provided. Because we’ve implemented
+`summarize_author`, the `Summary` trait has given us the behavior of the
+`summarize` method without requiring us to write any more code.
+
+```
+let tweet = Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+};
+
+println!("1 new tweet: {}", tweet.summarize());
+```
+
+This code prints `1 new tweet: (Read more from @horse_ebooks...)`.
+
+Note that it isn’t possible to call the default implementation from an
+overriding implementation of that same method.
+
+### Traits as Parameters
+
+Now that you know how to define and implement traits, we can explore how to use
+traits to define functions that accept many different types. We'll use the
+`Summary` trait we implemented on the `NewsArticle` and `Tweet` types in
+Listing 10-13 to define a `notify` function that calls the `summarize` method
+on its `item` parameter, which is of some type that implements the `Summary`
+trait. To do this, we use the `impl Trait` syntax, like this:
+
+```
+pub fn notify(item: &impl Summary) {
+ println!("Breaking news! {}", item.summarize());
+}
+```
+
+Instead of a concrete type for the `item` parameter, we specify the `impl`
+keyword and the trait name. This parameter accepts any type that implements the
+specified trait. In the body of `notify`, we can call any methods on `item`
+that come from the `Summary` trait, such as `summarize`. We can call `notify`
+and pass in any instance of `NewsArticle` or `Tweet`. Code that calls the
+function with any other type, such as a `String` or an `i32`, won’t compile
+because those types don’t implement `Summary`.
+
+#### Trait Bound Syntax
+
+The `impl Trait` syntax works for straightforward cases but is actually syntax
+sugar for a longer form known as a *trait bound*; it looks like this:
+
+```
+pub fn notify<T: Summary>(item: &T) {
+ println!("Breaking news! {}", item.summarize());
+}
+```
+
+This longer form is equivalent to the example in the previous section but is
+more verbose. We place trait bounds with the declaration of the generic type
+parameter after a colon and inside angle brackets.
+
+The `impl Trait` syntax is convenient and makes for more concise code in simple
+cases, while the fuller trait bound syntax can express more complexity in other
+cases. For example, we can have two parameters that implement `Summary`. Doing
+so with the `impl Trait` syntax looks like this:
+
+```
+pub fn notify(item1: &impl Summary, item2: &impl Summary) {
+```
+
+Using `impl Trait` is appropriate if we want this function to allow `item1` and
+`item2` to have different types (as long as both types implement `Summary`). If
+we want to force both parameters to have the same type, however, we must use a
+trait bound, like this:
+
+```
+pub fn notify<T: Summary>(item1: &T, item2: &T) {
+```
+
+The generic type `T` specified as the type of the `item1` and `item2`
+parameters constrains the function such that the concrete type of the value
+passed as an argument for `item1` and `item2` must be the same.
+
+#### Specifying Multiple Trait Bounds with the `+` Syntax
+
+We can also specify more than one trait bound. Say we wanted `notify` to use
+display formatting as well as `summarize` on `item`: we specify in the `notify`
+definition that `item` must implement both `Display` and `Summary`. We can do
+so using the `+` syntax:
+
+```
+pub fn notify(item: &(impl Summary + Display)) {
+```
+
+The `+` syntax is also valid with trait bounds on generic types:
+
+```
+pub fn notify<T: Summary + Display>(item: &T) {
+```
+
+With the two trait bounds specified, the body of `notify` can call `summarize`
+and use `{}` to format `item`.
+
+#### Clearer Trait Bounds with `where` Clauses
+
+Using too many trait bounds has its downsides. Each generic has its own trait
+bounds, so functions with multiple generic type parameters can contain lots of
+trait bound information between the function’s name and its parameter list,
+making the function signature hard to read. For this reason, Rust has alternate
+syntax for specifying trait bounds inside a `where` clause after the function
+signature. So instead of writing this:
+
+```
+fn some_function<T: Display + Clone, U: Clone + Debug>(t: &T, u: &U) -> i32 {
+```
+
+we can use a `where` clause, like this:
+
+```
+fn some_function<T, U>(t: &T, u: &U) -> i32
+ where T: Display + Clone,
+ U: Clone + Debug
+{
+```
+
+This function’s signature is less cluttered: the function name, parameter list,
+and return type are close together, similar to a function without lots of trait
+bounds.
+
+### Returning Types that Implement Traits
+
+We can also use the `impl Trait` syntax in the return position to return a
+value of some type that implements a trait, as shown here:
+
+```
+fn returns_summarizable() -> impl Summary {
+ Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ }
+}
+```
+
+By using `impl Summary` for the return type, we specify that the
+`returns_summarizable` function returns some type that implements the `Summary`
+trait without naming the concrete type. In this case, `returns_summarizable`
+returns a `Tweet`, but the code calling this function doesn’t need to know that.
+
+The ability to specify a return type only by the trait it implements is
+especially useful in the context of closures and iterators, which we cover in
+Chapter 13. Closures and iterators create types that only the compiler knows or
+types that are very long to specify. The `impl Trait` syntax lets you concisely
+specify that a function returns some type that implements the `Iterator` trait
+without needing to write out a very long type.
+
+However, you can only use `impl Trait` if you’re returning a single type. For
+example, this code that returns either a `NewsArticle` or a `Tweet` with the
+return type specified as `impl Summary` wouldn’t work:
+
+```
+fn returns_summarizable(switch: bool) -> impl Summary {
+ if switch {
+ NewsArticle {
+ headline: String::from(
+ "Penguins win the Stanley Cup Championship!",
+ ),
+ location: String::from("Pittsburgh, PA, USA"),
+ author: String::from("Iceburgh"),
+ content: String::from(
+ "The Pittsburgh Penguins once again are the best \
+ hockey team in the NHL.",
+ ),
+ }
+ } else {
+ Tweet {
+ username: String::from("horse_ebooks"),
+ content: String::from(
+ "of course, as you probably already know, people",
+ ),
+ reply: false,
+ retweet: false,
+ }
+ }
+}
+```
+
+Returning either a `NewsArticle` or a `Tweet` isn’t allowed due to restrictions
+around how the `impl Trait` syntax is implemented in the compiler. We’ll cover
+how to write a function with this behavior in the “Using Trait Objects That
+Allow for Values of Different Types” section of Chapter 17.
+
+<!-- I've removed the whole "Fixing the `largest` Function with Trait Bounds"
+section now that the example is slightly different and adding the one trait
+bound as the compiler suggests fixed Listing 10-5 earlier. I've also renumbered
+the following listings. /Carol-->
+
+### Using Trait Bounds to Conditionally Implement Methods
+
+By using a trait bound with an `impl` block that uses generic type parameters,
+we can implement methods conditionally for types that implement the specified
+traits. For example, the type `Pair<T>` in Listing 10-15 always implements the
+`new` function to return a new instance of `Pair<T>` (recall from the “Defining
+Methods” section of Chapter 5 that `Self` is a type alias for the type of the
+`impl` block, which in this case is `Pair<T>`). But in the next `impl` block,
+`Pair<T>` only implements the `cmp_display` method if its inner type `T`
+implements the `PartialOrd` trait that enables comparison *and* the `Display`
+trait that enables printing.
+
+Filename: src/lib.rs
+
+```
+use std::fmt::Display;
+
+struct Pair<T> {
+ x: T,
+ y: T,
+}
+
+impl<T> Pair<T> {
+ fn new(x: T, y: T) -> Self {
+ Self { x, y }
+ }
+}
+
+impl<T: Display + PartialOrd> Pair<T> {
+ fn cmp_display(&self) {
+ if self.x >= self.y {
+ println!("The largest member is x = {}", self.x);
+ } else {
+ println!("The largest member is y = {}", self.y);
+ }
+ }
+}
+```
+
+Listing 10-15: Conditionally implementing methods on a generic type depending
+on trait bounds
+
+We can also conditionally implement a trait for any type that implements
+another trait. Implementations of a trait on any type that satisfies the trait
+bounds are called *blanket implementations* and are extensively used in the
+Rust standard library. For example, the standard library implements the
+`ToString` trait on any type that implements the `Display` trait. The `impl`
+block in the standard library looks similar to this code:
+
+```
+impl<T: Display> ToString for T {
+ // --snip--
+}
+```
+
+Because the standard library has this blanket implementation, we can call the
+`to_string` method defined by the `ToString` trait on any type that implements
+the `Display` trait. For example, we can turn integers into their corresponding
+`String` values like this because integers implement `Display`:
+
+```
+let s = 3.to_string();
+```
+
+Blanket implementations appear in the documentation for the trait in the
+“Implementors” section.
+
+Traits and trait bounds let us write code that uses generic type parameters to
+reduce duplication but also specify to the compiler that we want the generic
+type to have particular behavior. The compiler can then use the trait bound
+information to check that all the concrete types used with our code provide the
+correct behavior. In dynamically typed languages, we would get an error at
+runtime if we called a method on a type which didn’t define the method. But Rust
+moves these errors to compile time so we’re forced to fix the problems before
+our code is even able to run. Additionally, we don’t have to write code that
+checks for behavior at runtime because we’ve already checked at compile time.
+Doing so improves performance without having to give up the flexibility of
+generics.
+
+## Validating References with Lifetimes
+
+<!---
+
+meta comment: this chapter is already pretty hefty. We just went through both
+generics and a whirlwind tour of traits. Lifetimes, while related to generics,
+feel like you might want to give a five minute break between them, let those
+sink in, and then pick up this topic.
+
+I noticed a couple topics we may want to touch on above for a bit of
+completeness:
+
+* A closer look at how From/Into work and how they relate to each other.
+* Using traits to specialize what you do when returning values.
+ i.e., Why does `let four: u32 = "4".parse().unwrap();` work?
+* Turbofish
+
+/JT --->
+<!-- These comments are totally valid, but seeing as this revision is already
+dragging on later than we were hoping, I don't really want to do large scale
+reorganization at this point. /Carol -->
+
+Lifetimes are another kind of generic that we’ve already been using. Rather
+than ensuring that a type has the behavior we want, lifetimes ensure that
+references are valid as long as we need them to be.
+
+One detail we didn’t discuss in the “References and Borrowing” section in
+Chapter 4 is that every reference in Rust has a *lifetime*, which is the scope
+for which that reference is valid. Most of the time, lifetimes are implicit and
+inferred, just like most of the time, types are inferred. We only must annotate
+types when multiple types are possible. In a similar way, we must annotate
+lifetimes when the lifetimes of references could be related in a few different
+ways. Rust requires us to annotate the relationships using generic lifetime
+parameters to ensure the actual references used at runtime will definitely be
+valid.
+
+Annotating lifetimes is not even a concept most other programming languages
+have, so this is going to feel unfamiliar. Although we won’t cover lifetimes in
+their entirety in this chapter, we’ll discuss common ways you might encounter
+lifetime syntax so you can get comfortable with the concept.
+
+### Preventing Dangling References with Lifetimes
+
+The main aim of lifetimes is to prevent *dangling references*, which cause a
+program to reference data other than the data it’s intended to reference.
+Consider the program in Listing 10-16, which has an outer scope and an inner
+scope.
+
+```
+fn main() {
+ let r;
+
+ {
+ let x = 5;
+ r = &x;
+ }
+
+ println!("r: {}", r);
+}
+```
+
+Listing 10-16: An attempt to use a reference whose value has gone out of scope
+
+> Note: The examples in Listings 10-16, 10-17, and 10-23 declare variables
+> without giving them an initial value, so the variable name exists in the
+> outer scope. At first glance, this might appear to be in conflict with Rust’s
+> having no null values. However, if we try to use a variable before giving it
+> a value, we’ll get a compile-time error, which shows that Rust indeed does
+> not allow null values.
+
+The outer scope declares a variable named `r` with no initial value, and the
+inner scope declares a variable named `x` with the initial value of 5. Inside
+the inner scope, we attempt to set the value of `r` as a reference to `x`. Then
+the inner scope ends, and we attempt to print the value in `r`. This code won’t
+compile because the value `r` is referring to has gone out of scope before we
+try to use it. Here is the error message:
+
+```
+error[E0597]: `x` does not live long enough
+ --> src/main.rs:6:13
+ |
+6 | r = &x;
+ | ^^ borrowed value does not live long enough
+7 | }
+ | - `x` dropped here while still borrowed
+8 |
+9 | println!("r: {}", r);
+ | - borrow later used here
+```
+
+The variable `x` doesn’t “live long enough.” The reason is that `x` will be out
+of scope when the inner scope ends on line 7. But `r` is still valid for the
+outer scope; because its scope is larger, we say that it “lives longer.” If
+Rust allowed this code to work, `r` would be referencing memory that was
+deallocated when `x` went out of scope, and anything we tried to do with `r`
+wouldn’t work correctly. So how does Rust determine that this code is invalid?
+It uses a borrow checker.
+
+### The Borrow Checker
+
+The Rust compiler has a *borrow checker* that compares scopes to determine
+whether all borrows are valid. Listing 10-17 shows the same code as Listing
+10-16 but with annotations showing the lifetimes of the variables.
+
+```
+fn main() {
+ let r; // ---------+-- 'a
+ // |
+ { // |
+ let x = 5; // -+-- 'b |
+ r = &x; // | |
+ } // -+ |
+ // |
+ println!("r: {}", r); // |
+} // ---------+
+```
+
+Listing 10-17: Annotations of the lifetimes of `r` and `x`, named `'a` and
+`'b`, respectively
+
+Here, we’ve annotated the lifetime of `r` with `'a` and the lifetime of `x`
+with `'b`. As you can see, the inner `'b` block is much smaller than the outer
+`'a` lifetime block. At compile time, Rust compares the size of the two
+lifetimes and sees that `r` has a lifetime of `'a` but that it refers to memory
+with a lifetime of `'b`. The program is rejected because `'b` is shorter than
+`'a`: the subject of the reference doesn’t live as long as the reference.
+
+Listing 10-18 fixes the code so it doesn’t have a dangling reference and
+compiles without any errors.
+
+```
+fn main() {
+ let x = 5; // ----------+-- 'b
+ // |
+ let r = &x; // --+-- 'a |
+ // | |
+ println!("r: {}", r); // | |
+ // --+ |
+} // ----------+
+```
+
+Listing 10-18: A valid reference because the data has a longer lifetime than
+the reference
+
+Here, `x` has the lifetime `'b`, which in this case is larger than `'a`. This
+means `r` can reference `x` because Rust knows that the reference in `r` will
+always be valid while `x` is valid.
+
+Now that you know where the lifetimes of references are and how Rust analyzes
+lifetimes to ensure references will always be valid, let’s explore generic
+lifetimes of parameters and return values in the context of functions.
+
+### Generic Lifetimes in Functions
+
+We’ll write a function that returns the longer of two string slices. This
+function will take two string slices and return a single string slice. After
+we’ve implemented the `longest` function, the code in Listing 10-19 should
+print `The longest string is abcd`.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let string1 = String::from("abcd");
+ let string2 = "xyz";
+
+ let result = longest(string1.as_str(), string2);
+ println!("The longest string is {}", result);
+}
+```
+
+Listing 10-19: A `main` function that calls the `longest` function to find the
+longer of two string slices
+
+Note that we want the function to take string slices, which are references,
+rather than strings, because we don’t want the `longest` function to take
+ownership of its parameters. Refer to the “String Slices as Parameters” section
+in Chapter 4 for more discussion about why the parameters we use in Listing
+10-19 are the ones we want.
+
+If we try to implement the `longest` function as shown in Listing 10-20, it
+won’t compile.
+
+Filename: src/main.rs
+
+```
+fn longest(x: &str, y: &str) -> &str {
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
+```
+
+Listing 10-20: An implementation of the `longest` function that returns the
+longer of two string slices but does not yet compile
+
+Instead, we get the following error that talks about lifetimes:
+
+```
+error[E0106]: missing lifetime specifier
+ --> src/main.rs:9:33
+ |
+9 | fn longest(x: &str, y: &str) -> &str {
+ | ---- ---- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `x` or `y`
+help: consider introducing a named lifetime parameter
+ |
+9 | fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
+ | ^^^^ ^^^^^^^ ^^^^^^^ ^^^
+```
+
+The help text reveals that the return type needs a generic lifetime parameter
+on it because Rust can’t tell whether the reference being returned refers to
+`x` or `y`. Actually, we don’t know either, because the `if` block in the body
+of this function returns a reference to `x` and the `else` block returns a
+reference to `y`!
+
+When we’re defining this function, we don’t know the concrete values that will
+be passed into this function, so we don’t know whether the `if` case or the
+`else` case will execute. We also don’t know the concrete lifetimes of the
+references that will be passed in, so we can’t look at the scopes as we did in
+Listings 10-17 and 10-18 to determine whether the reference we return will
+always be valid. The borrow checker can’t determine this either, because it
+doesn’t know how the lifetimes of `x` and `y` relate to the lifetime of the
+return value. To fix this error, we’ll add generic lifetime parameters that
+define the relationship between the references so the borrow checker can
+perform its analysis.
+
+### Lifetime Annotation Syntax
+
+Lifetime annotations don’t change how long any of the references live. Rather,
+they describe the relationships of the lifetimes of multiple references to each
+other without affecting the lifetimes. Just as functions can accept any type
+when the signature specifies a generic type parameter, functions can accept
+references with any lifetime by specifying a generic lifetime parameter.
+
+Lifetime annotations have a slightly unusual syntax: the names of lifetime
+parameters must start with an apostrophe (`'`) and are usually all lowercase
+and very short, like generic types. Most people use the name `'a` for the first
+lifetime annotation. We place lifetime parameter annotations after the `&` of a
+reference, using a space to separate the annotation from the reference’s type.
+
+Here are some examples: a reference to an `i32` without a lifetime parameter, a
+reference to an `i32` that has a lifetime parameter named `'a`, and a mutable
+reference to an `i32` that also has the lifetime `'a`.
+
+```
+&i32 // a reference
+&'a i32 // a reference with an explicit lifetime
+&'a mut i32 // a mutable reference with an explicit lifetime
+```
+
+One lifetime annotation by itself doesn’t have much meaning, because the
+annotations are meant to tell Rust how generic lifetime parameters of multiple
+references relate to each other. Let’s examine how the lifetime annotations
+relate to each other in the context of the `longest` function.
+
+<!---
+
+The above description is a little hard to follow with a code example.
+
+/JT --->
+<!-- Rather than fleshing out the code that goes with this description, I've
+moved some of the description to the next section to go with the code example
+there. /Carol -->
+
+### Lifetime Annotations in Function Signatures
+
+To use lifetime annotations in function signatures, we need to declare the
+generic *lifetime* parameters inside angle brackets between the function name
+and the parameter list, just as we did with generic *type* parameters
+
+We want the signature to express the following constraint: the returned
+reference will be valid as long as both the parameters are valid. This is the
+relationship between lifetimes of the parameters and the return value. We’ll
+name the lifetime `'a` and then add it to each reference, as shown in Listing
+10-21.
+
+Filename: src/main.rs
+
+```
+fn longest<'a>(x: &'a str, y: &'a str) -> &'a str {
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
+```
+
+Listing 10-21: The `longest` function definition specifying that all the
+references in the signature must have the same lifetime `'a`
+
+This code should compile and produce the result we want when we use it with the
+`main` function in Listing 10-19.
+
+The function signature now tells Rust that for some lifetime `'a`, the function
+takes two parameters, both of which are string slices that live at least as
+long as lifetime `'a`. The function signature also tells Rust that the string
+slice returned from the function will live at least as long as lifetime `'a`.
+In practice, it means that the lifetime of the reference returned by the
+`longest` function is the same as the smaller of the lifetimes of the values
+referred to by the function arguments. These relationships are what we want
+Rust to use when analyzing this code.
+
+Remember, when we specify the lifetime parameters in this function signature,
+we’re not changing the lifetimes of any values passed in or returned. Rather,
+we’re specifying that the borrow checker should reject any values that don’t
+adhere to these constraints. Note that the `longest` function doesn’t need to
+know exactly how long `x` and `y` will live, only that some scope can be
+substituted for `'a` that will satisfy this signature.
+
+When annotating lifetimes in functions, the annotations go in the function
+signature, not in the function body. The lifetime annotations become part of
+the contract of the function, much like the types in the signature. Having
+function signatures contain the lifetime contract means the analysis the Rust
+compiler does can be simpler. If there’s a problem with the way a function is
+annotated or the way it is called, the compiler errors can point to the part of
+our code and the constraints more precisely. If, instead, the Rust compiler
+made more inferences about what we intended the relationships of the lifetimes
+to be, the compiler might only be able to point to a use of our code many steps
+away from the cause of the problem.
+
+When we pass concrete references to `longest`, the concrete lifetime that is
+substituted for `'a` is the part of the scope of `x` that overlaps with the
+scope of `y`. In other words, the generic lifetime `'a` will get the concrete
+lifetime that is equal to the smaller of the lifetimes of `x` and `y`. Because
+we’ve annotated the returned reference with the same lifetime parameter `'a`,
+the returned reference will also be valid for the length of the smaller of the
+lifetimes of `x` and `y`.
+
+Let’s look at how the lifetime annotations restrict the `longest` function by
+passing in references that have different concrete lifetimes. Listing 10-22 is
+a straightforward example.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let string1 = String::from("long string is long");
+
+ {
+ let string2 = String::from("xyz");
+ let result = longest(string1.as_str(), string2.as_str());
+ println!("The longest string is {}", result);
+ }
+}
+```
+
+Listing 10-22: Using the `longest` function with references to `String` values
+that have different concrete lifetimes
+
+In this example, `string1` is valid until the end of the outer scope, `string2`
+is valid until the end of the inner scope, and `result` references something
+that is valid until the end of the inner scope. Run this code, and you’ll see
+that the borrow checker approves; it will compile and print `The longest string
+is long string is long`.
+
+Next, let’s try an example that shows that the lifetime of the reference in
+`result` must be the smaller lifetime of the two arguments. We’ll move the
+declaration of the `result` variable outside the inner scope but leave the
+assignment of the value to the `result` variable inside the scope with
+`string2`. Then we’ll move the `println!` that uses `result` to outside the
+inner scope, after the inner scope has ended. The code in Listing 10-23 will
+not compile.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let string1 = String::from("long string is long");
+ let result;
+ {
+ let string2 = String::from("xyz");
+ result = longest(string1.as_str(), string2.as_str());
+ }
+ println!("The longest string is {}", result);
+}
+```
+
+Listing 10-23: Attempting to use `result` after `string2` has gone out of scope
+
+When we try to compile this code, we get this error:
+
+```
+error[E0597]: `string2` does not live long enough
+ --> src/main.rs:6:44
+ |
+6 | result = longest(string1.as_str(), string2.as_str());
+ | ^^^^^^^ borrowed value does not live long enough
+7 | }
+ | - `string2` dropped here while still borrowed
+8 | println!("The longest string is {}", result);
+ | ------ borrow later used here
+```
+
+The error shows that for `result` to be valid for the `println!` statement,
+`string2` would need to be valid until the end of the outer scope. Rust knows
+this because we annotated the lifetimes of the function parameters and return
+values using the same lifetime parameter `'a`.
+
+As humans, we can look at this code and see that `string1` is longer than
+`string2` and therefore `result` will contain a reference to `string1`.
+Because `string1` has not gone out of scope yet, a reference to `string1` will
+still be valid for the `println!` statement. However, the compiler can’t see
+that the reference is valid in this case. We’ve told Rust that the lifetime of
+the reference returned by the `longest` function is the same as the smaller of
+the lifetimes of the references passed in. Therefore, the borrow checker
+disallows the code in Listing 10-23 as possibly having an invalid reference.
+
+Try designing more experiments that vary the values and lifetimes of the
+references passed in to the `longest` function and how the returned reference
+is used. Make hypotheses about whether or not your experiments will pass the
+borrow checker before you compile; then check to see if you’re right!
+
+### Thinking in Terms of Lifetimes
+
+The way in which you need to specify lifetime parameters depends on what your
+function is doing. For example, if we changed the implementation of the
+`longest` function to always return the first parameter rather than the longest
+string slice, we wouldn’t need to specify a lifetime on the `y` parameter. The
+following code will compile:
+
+Filename: src/main.rs
+
+```
+fn longest<'a>(x: &'a str, y: &str) -> &'a str {
+ x
+}
+```
+
+We’ve specified a lifetime parameter `'a` for the parameter `x` and the return
+type, but not for the parameter `y`, because the lifetime of `y` does not have
+any relationship with the lifetime of `x` or the return value.
+
+When returning a reference from a function, the lifetime parameter for the
+return type needs to match the lifetime parameter for one of the parameters. If
+the reference returned does *not* refer to one of the parameters, it must refer
+to a value created within this function. However, this would be a dangling
+reference because the value will go out of scope at the end of the function.
+Consider this attempted implementation of the `longest` function that won’t
+compile:
+
+Filename: src/main.rs
+
+```
+fn longest<'a>(x: &str, y: &str) -> &'a str {
+ let result = String::from("really long string");
+ result.as_str()
+}
+```
+
+Here, even though we’ve specified a lifetime parameter `'a` for the return
+type, this implementation will fail to compile because the return value
+lifetime is not related to the lifetime of the parameters at all. Here is the
+error message we get:
+
+```
+error[E0515]: cannot return value referencing local variable `result`
+ --> src/main.rs:11:5
+ |
+11 | result.as_str()
+ | ------^^^^^^^^^
+ | |
+ | returns a value referencing data owned by the current function
+ | `result` is borrowed here
+```
+
+The problem is that `result` goes out of scope and gets cleaned up at the end
+of the `longest` function. We’re also trying to return a reference to `result`
+from the function. There is no way we can specify lifetime parameters that
+would change the dangling reference, and Rust won’t let us create a dangling
+reference. In this case, the best fix would be to return an owned data type
+rather than a reference so the calling function is then responsible for
+cleaning up the value.
+
+Ultimately, lifetime syntax is about connecting the lifetimes of various
+parameters and return values of functions. Once they’re connected, Rust has
+enough information to allow memory-safe operations and disallow operations that
+would create dangling pointers or otherwise violate memory safety.
+
+### Lifetime Annotations in Struct Definitions
+
+So far, the structs we’ve defined all hold owned types. We can define structs to
+hold references, but in that case we would need to add a lifetime annotation on
+every reference in the struct’s definition. Listing 10-24 has a struct named
+`ImportantExcerpt` that holds a string slice.
+
+<!---
+
+nit: "So far, the structs we've *defined* all hold owned types"
+
+/JT --->
+<!-- Fixed! /Carol -->
+
+Filename: src/main.rs
+
+```
+struct ImportantExcerpt<'a> {
+ part: &'a str,
+}
+
+fn main() {
+ let novel = String::from("Call me Ishmael. Some years ago...");
+ let first_sentence = novel.split('.').next().expect("Could not find a '.'");
+ let i = ImportantExcerpt {
+ part: first_sentence,
+ };
+}
+```
+
+Listing 10-24: A struct that holds a reference, requiring a lifetime annotation
+
+This struct has the single field `part` that holds a string slice, which is a
+reference. As with generic data types, we declare the name of the generic
+lifetime parameter inside angle brackets after the name of the struct so we can
+use the lifetime parameter in the body of the struct definition. This
+annotation means an instance of `ImportantExcerpt` can’t outlive the reference
+it holds in its `part` field.
+
+The `main` function here creates an instance of the `ImportantExcerpt` struct
+that holds a reference to the first sentence of the `String` owned by the
+variable `novel`. The data in `novel` exists before the `ImportantExcerpt`
+instance is created. In addition, `novel` doesn’t go out of scope until after
+the `ImportantExcerpt` goes out of scope, so the reference in the
+`ImportantExcerpt` instance is valid.
+
+### Lifetime Elision
+
+You’ve learned that every reference has a lifetime and that you need to specify
+lifetime parameters for functions or structs that use references. However, in
+Chapter 4 we had a function in Listing 4-9, shown again in Listing 10-25, that
+compiled without lifetime annotations.
+
+Filename: src/lib.rs
+
+```
+fn first_word(s: &str) -> &str {
+ let bytes = s.as_bytes();
+
+ for (i, &item) in bytes.iter().enumerate() {
+ if item == b' ' {
+ return &s[0..i];
+ }
+ }
+
+ &s[..]
+}
+```
+
+Listing 10-25: A function we defined in Listing 4-9 that compiled without
+lifetime annotations, even though the parameter and return type are references
+
+The reason this function compiles without lifetime annotations is historical:
+in early versions (pre-1.0) of Rust, this code wouldn’t have compiled because
+every reference needed an explicit lifetime. At that time, the function
+signature would have been written like this:
+
+```
+fn first_word<'a>(s: &'a str) -> &'a str {
+```
+
+After writing a lot of Rust code, the Rust team found that Rust programmers
+were entering the same lifetime annotations over and over in particular
+situations. These situations were predictable and followed a few deterministic
+patterns. The developers programmed these patterns into the compiler’s code so
+the borrow checker could infer the lifetimes in these situations and wouldn’t
+need explicit annotations.
+
+This piece of Rust history is relevant because it’s possible that more
+deterministic patterns will emerge and be added to the compiler. In the future,
+even fewer lifetime annotations might be required.
+
+The patterns programmed into Rust’s analysis of references are called the
+*lifetime elision rules*. These aren’t rules for programmers to follow; they’re
+a set of particular cases that the compiler will consider, and if your code
+fits these cases, you don’t need to write the lifetimes explicitly.
+
+The elision rules don’t provide full inference. If Rust deterministically
+applies the rules but there is still ambiguity as to what lifetimes the
+references have, the compiler won’t guess what the lifetime of the remaining
+references should be. Instead of guessing, the compiler will give you an error
+that you can resolve by adding the lifetime annotations.
+
+Lifetimes on function or method parameters are called *input lifetimes*, and
+lifetimes on return values are called *output lifetimes*.
+
+The compiler uses three rules to figure out the lifetimes of the references
+when there aren’t explicit annotations. The first rule applies to input
+lifetimes, and the second and third rules apply to output lifetimes. If the
+compiler gets to the end of the three rules and there are still references for
+which it can’t figure out lifetimes, the compiler will stop with an error.
+These rules apply to `fn` definitions as well as `impl` blocks.
+
+The first rule is that the compiler assigns a lifetime parameter to each
+parameter that’s a reference. In other words, a function with one parameter gets
+one lifetime parameter: `fn foo<'a>(x: &'a i32)`; a function with two
+parameters gets two separate lifetime parameters: `fn foo<'a, 'b>(x: &'a i32,
+y: &'b i32)`; and so on.
+
+The second rule is that, if there is exactly one input lifetime parameter, that
+lifetime is assigned to all output lifetime parameters: `fn foo<'a>(x: &'a i32)
+-> &'a i32`.
+
+The third rule is that, if there are multiple input lifetime parameters, but
+one of them is `&self` or `&mut self` because this is a method, the lifetime of
+`self` is assigned to all output lifetime parameters. This third rule makes
+methods much nicer to read and write because fewer symbols are necessary.
+
+Let’s pretend we’re the compiler. We’ll apply these rules to figure out the
+lifetimes of the references in the signature of the `first_word` function in
+Listing 10-25. The signature starts without any lifetimes associated with the
+references:
+
+```
+fn first_word(s: &str) -> &str {
+```
+
+Then the compiler applies the first rule, which specifies that each parameter
+gets its own lifetime. We’ll call it `'a` as usual, so now the signature is
+this:
+
+```
+fn first_word<'a>(s: &'a str) -> &str {
+```
+
+The second rule applies because there is exactly one input lifetime. The second
+rule specifies that the lifetime of the one input parameter gets assigned to
+the output lifetime, so the signature is now this:
+
+```
+fn first_word<'a>(s: &'a str) -> &'a str {
+```
+
+Now all the references in this function signature have lifetimes, and the
+compiler can continue its analysis without needing the programmer to annotate
+the lifetimes in this function signature.
+
+Let’s look at another example, this time using the `longest` function that had
+no lifetime parameters when we started working with it in Listing 10-20:
+
+```
+fn longest(x: &str, y: &str) -> &str {
+```
+
+Let’s apply the first rule: each parameter gets its own lifetime. This time we
+have two parameters instead of one, so we have two lifetimes:
+
+```
+fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
+```
+
+You can see that the second rule doesn’t apply because there is more than one
+input lifetime. The third rule doesn’t apply either, because `longest` is a
+function rather than a method, so none of the parameters are `self`. After
+working through all three rules, we still haven’t figured out what the return
+type’s lifetime is. This is why we got an error trying to compile the code in
+Listing 10-20: the compiler worked through the lifetime elision rules but still
+couldn’t figure out all the lifetimes of the references in the signature.
+
+Because the third rule really only applies in method signatures, we’ll look at
+lifetimes in that context next to see why the third rule means we don’t have to
+annotate lifetimes in method signatures very often.
+
+### Lifetime Annotations in Method Definitions
+
+When we implement methods on a struct with lifetimes, we use the same syntax as
+that of generic type parameters shown in Listing 10-11. Where we declare and
+use the lifetime parameters depends on whether they’re related to the struct
+fields or the method parameters and return values.
+
+Lifetime names for struct fields always need to be declared after the `impl`
+keyword and then used after the struct’s name, because those lifetimes are part
+of the struct’s type.
+
+In method signatures inside the `impl` block, references might be tied to the
+lifetime of references in the struct’s fields, or they might be independent. In
+addition, the lifetime elision rules often make it so that lifetime annotations
+aren’t necessary in method signatures. Let’s look at some examples using the
+struct named `ImportantExcerpt` that we defined in Listing 10-24.
+
+First, we’ll use a method named `level` whose only parameter is a reference to
+`self` and whose return value is an `i32`, which is not a reference to anything:
+
+```
+impl<'a> ImportantExcerpt<'a> {
+ fn level(&self) -> i32 {
+ 3
+ }
+}
+```
+
+The lifetime parameter declaration after `impl` and its use after the type name
+are required, but we’re not required to annotate the lifetime of the reference
+to `self` because of the first elision rule.
+
+Here is an example where the third lifetime elision rule applies:
+
+```
+impl<'a> ImportantExcerpt<'a> {
+ fn announce_and_return_part(&self, announcement: &str) -> &str {
+ println!("Attention please: {}", announcement);
+ self.part
+ }
+}
+```
+
+There are two input lifetimes, so Rust applies the first lifetime elision rule
+and gives both `&self` and `announcement` their own lifetimes. Then, because
+one of the parameters is `&self`, the return type gets the lifetime of `&self`,
+and all lifetimes have been accounted for.
+
+### The Static Lifetime
+
+One special lifetime we need to discuss is `'static`, which denotes that the
+affected reference *can* live for the entire duration of the program. All
+string literals have the `'static` lifetime, which we can annotate as follows:
+
+```
+let s: &'static str = "I have a static lifetime.";
+```
+
+The text of this string is stored directly in the program’s binary, which
+is always available. Therefore, the lifetime of all string literals is
+`'static`.
+
+You might see suggestions to use the `'static` lifetime in error messages. But
+before specifying `'static` as the lifetime for a reference, think about
+whether the reference you have actually lives the entire lifetime of your
+program or not, and whether you want it to. Most of the time, an error message
+suggesting the `'static` lifetime results from attempting to create a dangling
+reference or a mismatch of the available lifetimes. In such cases, the solution
+is fixing those problems, not specifying the `'static` lifetime.
+
+## Generic Type Parameters, Trait Bounds, and Lifetimes Together
+
+Let’s briefly look at the syntax of specifying generic type parameters, trait
+bounds, and lifetimes all in one function!
+
+```
+use std::fmt::Display;
+
+fn longest_with_an_announcement<'a, T>(
+ x: &'a str,
+ y: &'a str,
+ ann: T,
+) -> &'a str
+where
+ T: Display,
+{
+ println!("Announcement! {}", ann);
+ if x.len() > y.len() {
+ x
+ } else {
+ y
+ }
+}
+```
+
+This is the `longest` function from Listing 10-21 that returns the longer of
+two string slices. But now it has an extra parameter named `ann` of the generic
+type `T`, which can be filled in by any type that implements the `Display`
+trait as specified by the `where` clause. This extra parameter will be printed
+using `{}`, which is why the `Display` trait bound is necessary. Because
+lifetimes are a type of generic, the declarations of the lifetime parameter
+`'a` and the generic type parameter `T` go in the same list inside the angle
+brackets after the function name.
+
+## Summary
+
+We covered a lot in this chapter! Now that you know about generic type
+parameters, traits and trait bounds, and generic lifetime parameters, you’re
+ready to write code without repetition that works in many different situations.
+Generic type parameters let you apply the code to different types. Traits and
+trait bounds ensure that even though the types are generic, they’ll have the
+behavior the code needs. You learned how to use lifetime annotations to ensure
+that this flexible code won’t have any dangling references. And all of this
+analysis happens at compile time, which doesn’t affect runtime performance!
+
+Believe it or not, there is much more to learn on the topics we discussed in
+this chapter: Chapter 17 discusses trait objects, which are another way to use
+traits. There are also more complex scenarios involving lifetime annotations
+that you will only need in very advanced scenarios; for those, you should read
+the Rust Reference at *https://doc.rust-lang.org/reference/trait-bounds.html*.
+But next, you’ll learn how to write tests in Rust so you can make sure your
+code is working the way it should.
diff --git a/src/doc/book/nostarch/chapter11.md b/src/doc/book/nostarch/chapter11.md
new file mode 100644
index 000000000..ea4ffe5bf
--- /dev/null
+++ b/src/doc/book/nostarch/chapter11.md
@@ -0,0 +1,1541 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Writing Automated Tests
+
+In his 1972 essay “The Humble Programmer,” Edsger W. Dijkstra said that
+“Program testing can be a very effective way to show the presence of bugs, but
+it is hopelessly inadequate for showing their absence.” That doesn’t mean we
+shouldn’t try to test as much as we can!
+
+Correctness in our programs is the extent to which our code does what we intend
+it to do. Rust is designed with a high degree of concern about the correctness
+of programs, but correctness is complex and not easy to prove. Rust’s type
+system shoulders a huge part of this burden, but the type system cannot catch
+everything. As such, Rust includes support for writing automated software tests.
+
+Say we write a function `add_two` that adds 2 to whatever number is passed to
+it. This function’s signature accepts an integer as a parameter and returns an
+integer as a result. When we implement and compile that function, Rust does all
+the type checking and borrow checking that you’ve learned so far to ensure
+that, for instance, we aren’t passing a `String` value or an invalid reference
+to this function. But Rust *can’t* check that this function will do precisely
+what we intend, which is return the parameter plus 2 rather than, say, the
+parameter plus 10 or the parameter minus 50! That’s where tests come in.
+
+We can write tests that assert, for example, that when we pass `3` to the
+`add_two` function, the returned value is `5`. We can run these tests whenever
+we make changes to our code to make sure any existing correct behavior has not
+changed.
+
+Testing is a complex skill: although we can’t cover every detail about how to
+write good tests in one chapter, we’ll discuss the mechanics of Rust’s testing
+facilities. We’ll talk about the annotations and macros available to you when
+writing your tests, the default behavior and options provided for running your
+tests, and how to organize tests into unit tests and integration tests.
+
+## How to Write Tests
+
+Tests are Rust functions that verify that the non-test code is functioning in
+the expected manner. The bodies of test functions typically perform these three
+actions:
+
+1. Set up any needed data or state.
+2. Run the code you want to test.
+3. Assert the results are what you expect.
+
+Let’s look at the features Rust provides specifically for writing tests that
+take these actions, which include the `test` attribute, a few macros, and the
+`should_panic` attribute.
+
+### The Anatomy of a Test Function
+
+At its simplest, a test in Rust is a function that’s annotated with the `test`
+attribute. Attributes are metadata about pieces of Rust code; one example is
+the `derive` attribute we used with structs in Chapter 5. To change a function
+into a test function, add `#[test]` on the line before `fn`. When you run your
+tests with the `cargo test` command, Rust builds a test runner binary that runs
+the annotated functions and reports on whether each
+test function passes or fails.
+
+Whenever we make a new library project with Cargo, a test module with a test
+function in it is automatically generated for us. This module gives you a
+template for writing your tests so you don’t have to look up the exact
+structure and syntax every time you start a new project. You can add as many
+additional test functions and as many test modules as you want!
+
+We’ll explore some aspects of how tests work by experimenting with the template
+test before we actually test any code. Then we’ll write some real-world tests
+that call some code that we’ve written and assert that its behavior is correct.
+
+Let’s create a new library project called `adder` that will add two numbers:
+
+```
+$ cargo new adder --lib
+ Created library `adder` project
+$ cd adder
+```
+
+The contents of the *src/lib.rs* file in your `adder` library should look like
+Listing 11-1.
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+[1] #[test]
+ fn it_works() {
+ let result = 2 + 2;
+ [2] assert_eq!(result, 4);
+ }
+}
+```
+
+Listing 11-1: The test module and function generated automatically by `cargo
+new`
+
+For now, let’s ignore the top two lines and focus on the function. Note the
+`#[test]` annotation [1]: this attribute indicates this is a test function, so
+the test runner knows to treat this function as a test. We might also have
+non-test functions in the `tests` module to help set up common scenarios or
+perform common operations, so we always need to indicate which functions are
+tests.
+
+The example function body uses the `assert_eq!` macro [2] to assert that
+`result`, which contains the result of adding 2 and 2, equals 4. This assertion
+serves as an example of the format for a typical test. Let’s run it to see that
+this test passes.
+
+The `cargo test` command runs all tests in our project, as shown in Listing
+11-2.
+
+```
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.57s
+ Running unittests (target/debug/deps/adder-92948b65e88960b4)
+
+[1] running 1 test
+[2] test tests::it_works ... ok
+
+[3] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+[4] Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+```
+
+Listing 11-2: The output from running the automatically generated test
+
+Cargo compiled and ran the test. We see the line `running 1 test` [1]. The next
+line shows the name of the generated test function, called `it_works`, and that
+the result of running that test is `ok` [2]. The overall summary `test result:
+ok.` [3] means that all the tests passed, and the portion that reads `1 passed;
+0 failed` totals the number of tests that passed or failed.
+
+It’s possible to mark a test as ignored so it doesn’t run in a particular
+instance; we’ll cover that in the “Ignoring Some Tests Unless Specifically
+Requested” section later in this chapter. Because we haven’t done that here,
+the summary shows `0 ignored`. We can also pass an argument to the `cargo test`
+command to run only tests whose name matches a string; this is called *filtering*
+and we’ll cover that in the “Running a Subset of Tests by Name” section.
+Here we haven’t filtered the tests being run, so the end of the summary shows `0
+filtered out`.
+
+The `0 measured` statistic is for benchmark tests that measure performance.
+Benchmark tests are, as of this writing, only available in nightly Rust. See
+the documentation about benchmark tests at
+*https://doc.rust-lang.org/unstable-book/library-features/test.html* to learn
+more.
+
+The next part of the test output starting at `Doc-tests adder` [4] is for the
+results of any documentation tests. We don’t have any documentation tests yet,
+but Rust can compile any code examples that appear in our API documentation.
+This feature helps keep your docs and your code in sync! We’ll discuss how to
+write documentation tests in the “Documentation Comments as Tests” section of
+Chapter 14. For now, we’ll ignore the `Doc-tests` output.
+
+Let’s start to customize the test to our own needs. First change the name of
+the `it_works` function to a different name, such as `exploration`, like so:
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn exploration() {
+ assert_eq!(2 + 2, 4);
+ }
+}
+```
+
+Then run `cargo test` again. The output now shows `exploration` instead of
+`it_works`:
+
+```
+running 1 test
+test tests::exploration ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out;
+```
+
+Now we’ll add another test, but this time we’ll make a test that fails! Tests
+fail when something in the test function panics. Each test is run in a new
+thread, and when the main thread sees that a test thread has died, the test is
+marked as failed. In Chapter 9, we talked about how the simplest way to panic
+is to call the `panic!` macro. Enter the new test as a function named
+`another`, so your *src/lib.rs* file looks like Listing 11-3.
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn exploration() {
+ assert_eq!(2 + 2, 4);
+ }
+
+ #[test]
+ fn another() {
+ panic!("Make this test fail");
+ }
+}
+```
+
+Listing 11-3: Adding a second test that will fail because we call the `panic!`
+macro
+
+Run the tests again using `cargo test`. The output should look like Listing
+11-4, which shows that our `exploration` test passed and `another` failed.
+
+```
+running 2 tests
+test tests::exploration ... ok
+[1] test tests::another ... FAILED
+
+[2] failures:
+
+---- tests::another stdout ----
+thread 'main' panicked at 'Make this test fail', src/lib.rs:10:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+[3] failures:
+ tests::another
+
+[4] test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
+```
+
+Listing 11-4: Test results when one test passes and one test fails
+
+Instead of `ok`, the line `test tests::another` shows `FAILED` [1]. Two new
+sections appear between the individual results and the summary: the first [2]
+displays the detailed reason for each test failure. In this case, we get the
+details that `another` failed because it `panicked at 'Make this test fail'` on
+line 10 in the *src/lib.rs* file. The next section [3] lists just the names of
+all the failing tests, which is useful when there are lots of tests and lots of
+detailed failing test output. We can use the name of a failing test to run just
+that test to more easily debug it; we’ll talk more about ways to run tests in
+the “Controlling How Tests Are Run” section.
+
+The summary line displays at the end [4]: overall, our test result is `FAILED`.
+We had one test pass and one test fail.
+
+Now that you’ve seen what the test results look like in different scenarios,
+let’s look at some macros other than `panic!` that are useful in tests.
+
+### Checking Results with the `assert!` Macro
+
+The `assert!` macro, provided by the standard library, is useful when you want
+to ensure that some condition in a test evaluates to `true`. We give the
+`assert!` macro an argument that evaluates to a Boolean. If the value is
+`true`, nothing happens and the test passes. If the value is `false`, the
+`assert!` macro calls `panic!` to cause the test to fail. Using the `assert!`
+macro helps us check that our code is functioning in the way we intend.
+
+In Chapter 5, Listing 5-15, we used a `Rectangle` struct and a `can_hold`
+method, which are repeated here in Listing 11-5. Let’s put this code in the
+*src/lib.rs* file, then write some tests for it using the `assert!` macro.
+
+Filename: src/lib.rs
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width > other.width && self.height > other.height
+ }
+}
+```
+
+Listing 11-5: Using the `Rectangle` struct and its `can_hold` method from
+Chapter 5
+
+The `can_hold` method returns a Boolean, which means it’s a perfect use case
+for the `assert!` macro. In Listing 11-6, we write a test that exercises the
+`can_hold` method by creating a `Rectangle` instance that has a width of 8 and
+a height of 7 and asserting that it can hold another `Rectangle` instance that
+has a width of 5 and a height of 1.
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+[1] use super::*;
+
+ #[test]
+[2] fn larger_can_hold_smaller() {
+ [3] let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ [4] assert!(larger.can_hold(&smaller));
+ }
+}
+```
+
+Listing 11-6: A test for `can_hold` that checks whether a larger rectangle can
+indeed hold a smaller rectangle
+
+Note that we’ve added a new line inside the `tests` module: `use super::*;`
+[1]. The `tests` module is a regular module that follows the usual visibility
+rules we covered in Chapter 7 in the “Paths for Referring to an Item in the
+Module Tree” section. Because the `tests` module is an inner module, we need to
+bring the code under test in the outer module into the scope of the inner
+module. We use a glob here so anything we define in the outer module is
+available to this `tests` module.
+
+We’ve named our test `larger_can_hold_smaller` [2], and we’ve created the two
+`Rectangle` instances that we need [3]. Then we called the `assert!` macro and
+passed it the result of calling `larger.can_hold(&smaller)` [4]. This
+expression is supposed to return `true`, so our test should pass. Let’s find
+out!
+
+```
+running 1 test
+test tests::larger_can_hold_smaller ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+It does pass! Let’s add another test, this time asserting that a smaller
+rectangle cannot hold a larger rectangle:
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn larger_can_hold_smaller() {
+ // --snip--
+ }
+
+ #[test]
+ fn smaller_cannot_hold_larger() {
+ let larger = Rectangle {
+ width: 8,
+ height: 7,
+ };
+ let smaller = Rectangle {
+ width: 5,
+ height: 1,
+ };
+
+ assert!(!smaller.can_hold(&larger));
+ }
+}
+```
+
+Because the correct result of the `can_hold` function in this case is `false`,
+we need to negate that result before we pass it to the `assert!` macro. As a
+result, our test will pass if `can_hold` returns `false`:
+
+```
+running 2 tests
+test tests::larger_can_hold_smaller ... ok
+test tests::smaller_cannot_hold_larger ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Two tests that pass! Now let’s see what happens to our test results when we
+introduce a bug in our code. We’ll change the implementation of the `can_hold`
+method by replacing the greater-than sign with a less-than sign when it
+compares the widths:
+
+```
+// --snip--
+impl Rectangle {
+ fn can_hold(&self, other: &Rectangle) -> bool {
+ self.width < other.width && self.height > other.height
+ }
+}
+```
+
+Running the tests now produces the following:
+
+```
+running 2 tests
+test tests::smaller_cannot_hold_larger ... ok
+test tests::larger_can_hold_smaller ... FAILED
+
+failures:
+
+---- tests::larger_can_hold_smaller stdout ----
+thread 'main' panicked at 'assertion failed: larger.can_hold(&smaller)', src/lib.rs:28:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::larger_can_hold_smaller
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Our tests caught the bug! Because `larger.width` is 8 and `smaller.width` is
+5, the comparison of the widths in `can_hold` now returns `false`: 8 is not
+less than 5.
+
+### Testing Equality with the `assert_eq!` and `assert_ne!` Macros
+
+A common way to verify functionality is to test for equality between the result
+of the code under test and the value you expect the code to return. You could
+do this using the `assert!` macro and passing it an expression using the `==`
+operator. However, this is such a common test that the standard library
+provides a pair of macros—`assert_eq!` and `assert_ne!`—to perform this test
+more conveniently. These macros compare two arguments for equality or
+inequality, respectively. They’ll also print the two values if the assertion
+fails, which makes it easier to see *why* the test failed; conversely, the
+`assert!` macro only indicates that it got a `false` value for the `==`
+expression, without printing the values that led to the `false` value.
+
+In Listing 11-7, we write a function named `add_two` that adds `2` to its
+parameter, then we test this function using the `assert_eq!` macro.
+
+Filename: src/lib.rs
+
+```
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn it_adds_two() {
+ assert_eq!(4, add_two(2));
+ }
+}
+```
+
+Listing 11-7: Testing the function `add_two` using the `assert_eq!` macro
+
+Let’s check that it passes!
+
+```
+running 1 test
+test tests::it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+We pass `4` as the argument to `assert_eq!`, which is equal to the result of
+calling `add_two(2)`. The line for this test is `test tests::it_adds_two ...
+ok`, and the `ok` text indicates that our test passed!
+
+Let’s introduce a bug into our code to see what `assert_eq!` looks like when it
+fails. Change the implementation of the `add_two` function to instead add `3`:
+
+```
+pub fn add_two(a: i32) -> i32 {
+ a + 3
+}
+```
+
+Run the tests again:
+
+```
+running 1 test
+test tests::it_adds_two ... FAILED
+
+failures:
+
+---- tests::it_adds_two stdout ----
+[1] thread 'main' panicked at 'assertion failed: `(left == right)`
+[2] left: `4`,
+[3] right: `5`', src/lib.rs:11:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+failures:
+ tests::it_adds_two
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Our test caught the bug! The `it_adds_two` test failed, and the message tells
+us that the assertion that fails was `` assertion failed: `(left == right)` ``
+[1] and what the `left` [2] and `right` [3] values are. This message helps us
+start debugging: the `left` argument was `4` but the `right` argument, where we
+had `add_two(2)`, was `5`. You can imagine that this would be especially
+helpful when we have a lot of tests going on.
+
+Note that in some languages and test frameworks, the parameters to equality
+assertion functions are called `expected` and `actual`, and the order in which
+we specify the arguments matters. However, in Rust, they’re called `left` and
+`right`, and the order in which we specify the value we expect and the value
+the code produces doesn’t matter. We could write the assertion in this test as
+`assert_eq!(add_two(2), 4)`, which would result in the same failure message
+that displays `` assertion failed: `(left == right)` ``.
+
+The `assert_ne!` macro will pass if the two values we give it are not equal and
+fail if they’re equal. This macro is most useful for cases when we’re not sure
+what a value *will* be, but we know what the value definitely *shouldn’t* be.
+For example, if we’re testing a function that is guaranteed to change its input
+in some way, but the way in which the input is changed depends on the day of
+the week that we run our tests, the best thing to assert might be that the
+output of the function is not equal to the input.
+
+Under the surface, the `assert_eq!` and `assert_ne!` macros use the operators
+`==` and `!=`, respectively. When the assertions fail, these macros print their
+arguments using debug formatting, which means the values being compared must
+implement the `PartialEq` and `Debug` traits. All primitive types and most of
+the standard library types implement these traits. For structs and enums that
+you define yourself, you’ll need to implement `PartialEq` to assert equality of
+those types. You’ll also need to implement `Debug` to print the values when the
+assertion fails. Because both traits are derivable traits, as mentioned in
+Listing 5-12 in Chapter 5, this is usually as straightforward as adding the
+`#[derive(PartialEq, Debug)]` annotation to your struct or enum definition. See
+Appendix C, “Derivable Traits,” for more details about these and other
+derivable traits.
+
+### Adding Custom Failure Messages
+
+You can also add a custom message to be printed with the failure message as
+optional arguments to the `assert!`, `assert_eq!`, and `assert_ne!` macros. Any
+arguments specified after the required arguments are passed along to the
+`format!` macro (discussed in Chapter 8 in the “Concatenation with the `+`
+Operator or the `format!` Macro” section), so you can pass a format string that
+contains `{}` placeholders and values to go in those placeholders. Custom
+messages are useful for documenting what an assertion means; when a test fails,
+you’ll have a better idea of what the problem is with the code.
+
+For example, let’s say we have a function that greets people by name and we
+want to test that the name we pass into the function appears in the output:
+
+Filename: src/lib.rs
+
+```
+pub fn greeting(name: &str) -> String {
+ format!("Hello {}!", name)
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn greeting_contains_name() {
+ let result = greeting("Carol");
+ assert!(result.contains("Carol"));
+ }
+}
+```
+
+The requirements for this program haven’t been agreed upon yet, and we’re
+pretty sure the `Hello` text at the beginning of the greeting will change. We
+decided we don’t want to have to update the test when the requirements change,
+so instead of checking for exact equality to the value returned from the
+`greeting` function, we’ll just assert that the output contains the text of the
+input parameter.
+
+Now let’s introduce a bug into this code by changing `greeting` to exclude
+`name` to see what the default test failure looks like:
+
+```
+pub fn greeting(name: &str) -> String {
+ String::from("Hello!")
+}
+```
+
+Running this test produces the following:
+
+```
+running 1 test
+test tests::greeting_contains_name ... FAILED
+
+failures:
+
+---- tests::greeting_contains_name stdout ----
+thread 'main' panicked at 'assertion failed: result.contains(\"Carol\")', src/lib.rs:12:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::greeting_contains_name
+```
+
+This result just indicates that the assertion failed and which line the
+assertion is on. A more useful failure message would print the value from the
+`greeting` function. Let’s add a custom failure message composed of a format
+string with a placeholder filled in with the actual value we got from the
+`greeting` function:
+
+```
+#[test]
+fn greeting_contains_name() {
+ let result = greeting("Carol");
+ assert!(
+ result.contains("Carol"),
+ "Greeting did not contain name, value was `{}`",
+ result
+ );
+}
+```
+
+Now when we run the test, we’ll get a more informative error message:
+
+```
+---- tests::greeting_contains_name stdout ----
+thread 'main' panicked at 'Greeting did not contain name, value was `Hello!`', src/lib.rs:12:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+We can see the value we actually got in the test output, which would help us
+debug what happened instead of what we were expecting to happen.
+
+### Checking for Panics with `should_panic`
+
+In addition to checking return values, it’s important to check that our code
+handles error conditions as we expect. For example, consider the `Guess` type
+that we created in Chapter 9, Listing 9-13. Other code that uses `Guess`
+depends on the guarantee that `Guess` instances will contain only values
+between 1 and 100. We can write a test that ensures that attempting to create a
+`Guess` instance with a value outside that range panics.
+
+We do this by adding the attribute `should_panic` to our test function. The
+test passes if the code inside the function panics; the test fails if the code
+inside the function doesn’t panic.
+
+Listing 11-8 shows a test that checks that the error conditions of `Guess::new`
+happen when we expect them to.
+
+Filename: src/lib.rs
+
+```
+pub struct Guess {
+ value: i32,
+}
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 || value > 100 {
+ panic!("Guess value must be between 1 and 100, got {}.", value);
+ }
+
+ Guess { value }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ #[should_panic]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
+```
+
+Listing 11-8: Testing that a condition will cause a `panic!`
+
+We place the `#[should_panic]` attribute after the `#[test]` attribute and
+before the test function it applies to. Let’s look at the result when this test
+passes:
+
+```
+running 1 test
+test tests::greater_than_100 - should panic ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Looks good! Now let’s introduce a bug in our code by removing the condition
+that the `new` function will panic if the value is greater than 100:
+
+```
+// --snip--
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 {
+ panic!("Guess value must be between 1 and 100, got {}.", value);
+ }
+
+ Guess { value }
+ }
+}
+```
+
+When we run the test in Listing 11-8, it will fail:
+
+```
+running 1 test
+test tests::greater_than_100 - should panic ... FAILED
+
+failures:
+
+---- tests::greater_than_100 stdout ----
+note: test did not panic as expected
+
+failures:
+ tests::greater_than_100
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+We don’t get a very helpful message in this case, but when we look at the test
+function, we see that it’s annotated with `#[should_panic]`. The failure we got
+means that the code in the test function did not cause a panic.
+
+Tests that use `should_panic` can be imprecise. A `should_panic` test would
+pass even if the test panics for a different reason from the one we were
+expecting. To make `should_panic` tests more precise, we can add an optional
+`expected` parameter to the `should_panic` attribute. The test harness will
+make sure that the failure message contains the provided text. For example,
+consider the modified code for `Guess` in Listing 11-9 where the `new` function
+panics with different messages depending on whether the value is too small or
+too large.
+
+Filename: src/lib.rs
+
+```
+// --snip--
+
+impl Guess {
+ pub fn new(value: i32) -> Guess {
+ if value < 1 {
+ panic!(
+ "Guess value must be greater than or equal to 1, got {}.",
+ value
+ );
+ } else if value > 100 {
+ panic!(
+ "Guess value must be less than or equal to 100, got {}.",
+ value
+ );
+ }
+
+ Guess { value }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ #[should_panic(expected = "less than or equal to 100")]
+ fn greater_than_100() {
+ Guess::new(200);
+ }
+}
+```
+
+Listing 11-9: Testing for a `panic!` with a panic message containing a
+specified substring
+
+This test will pass because the value we put in the `should_panic` attribute’s
+`expected` parameter is a substring of the message that the `Guess::new`
+function panics with. We could have specified the entire panic message that we
+expect, which in this case would be `Guess value must be less than or equal to
+100, got 200.` What you choose to specify depends on how much of the panic
+message is unique or dynamic and how precise you want your test to be. In this
+case, a substring of the panic message is enough to ensure that the code in the
+test function executes the `else if value > 100` case.
+
+<!---
+We may want to make extra clear above that `expected` here means substring. I
+think many people would assume equality rather than substring like the
+expected/actual of unit tests.
+
+(let alone how .expect(..) works. It seems we use the word expect in different
+ways around the language/library )
+/JT --->
+<!-- I've changed the example to be more clearly a substring specified, and
+changed the caption as well. Hope that makes it extra clear! /Carol -->
+
+To see what happens when a `should_panic` test with an `expected` message
+fails, let’s again introduce a bug into our code by swapping the bodies of the
+`if value < 1` and the `else if value > 100` blocks:
+
+```
+if value < 1 {
+ panic!("Guess value must be less than or equal to 100, got {}.", value);
+} else if value > 100 {
+ panic!("Guess value must be greater than or equal to 1, got {}.", value);
+}
+```
+
+This time when we run the `should_panic` test, it will fail:
+
+```
+running 1 test
+test tests::greater_than_100 - should panic ... FAILED
+
+failures:
+
+---- tests::greater_than_100 stdout ----
+thread 'main' panicked at 'Guess value must be greater than or equal to 1, got 200.', src/lib.rs:13:13
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+note: panic did not contain expected string
+ panic message: `"Guess value must be greater than or equal to 1, got 200."`,
+ expected substring: `"less than or equal to 100"`
+
+failures:
+ tests::greater_than_100
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+The failure message indicates that this test did indeed panic as we expected,
+but the panic message did not include the expected string `'Guess value must be
+less than or equal to 100'`. The panic message that we did get in this case was
+`Guess value must be greater than or equal to 1, got 200.` Now we can start
+figuring out where our bug is!
+
+### Using `Result<T, E>` in Tests
+
+Our tests so far all panic when they fail. We can also write tests that use
+`Result<T, E>`! Here’s the test from Listing 11-1, rewritten to use `Result<T,
+E>` and return an `Err` instead of panicking:
+
+```
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() -> Result<(), String> {
+ if 2 + 2 == 4 {
+ Ok(())
+ } else {
+ Err(String::from("two plus two does not equal four"))
+ }
+ }
+}
+```
+
+The `it_works` function now has the `Result<(), String>` return type. In the
+body of the function, rather than calling the `assert_eq!` macro, we return
+`Ok(())` when the test passes and an `Err` with a `String` inside when the test
+fails.
+
+Writing tests so they return a `Result<T, E>` enables you to use the question
+mark operator in the body of tests, which can be a convenient way to write
+tests that should fail if any operation within them returns an `Err` variant.
+
+You can’t use the `#[should_panic]` annotation on tests that use `Result<T,
+E>`. To assert that an operation returns an `Err` variant, *don’t* use the
+question mark operator on the `Result<T, E>` value. Instead, use
+`assert!(value.is_err())`.
+
+Now that you know several ways to write tests, let’s look at what is happening
+when we run our tests and explore the different options we can use with `cargo
+test`.
+
+## Controlling How Tests Are Run
+
+Just as `cargo run` compiles your code and then runs the resulting binary,
+`cargo test` compiles your code in test mode and runs the resulting test
+binary. The default behavior of the binary produced by `cargo test` is to run
+all the tests in parallel and capture output generated during test runs,
+preventing the output from being displayed and making it easier to read the
+output related to the test results. You can, however, specify command line
+options to change this default behavior.
+
+Some command line options go to `cargo test`, and some go to the resulting test
+binary. To separate these two types of arguments, you list the arguments that
+go to `cargo test` followed by the separator `--` and then the ones that go to
+the test binary. Running `cargo test --help` displays the options you can use
+with `cargo test`, and running `cargo test -- --help` displays the options you
+can use after the separator.
+
+### Running Tests in Parallel or Consecutively
+
+When you run multiple tests, by default they run in parallel using threads,
+meaning they finish running faster and you get feedback quicker. Because the
+tests are running at the same time, you must make sure your tests don’t depend
+on each other or on any shared state, including a shared environment, such as
+the current working directory or environment variables.
+
+For example, say each of your tests runs some code that creates a file on disk
+named *test-output.txt* and writes some data to that file. Then each test reads
+the data in that file and asserts that the file contains a particular value,
+which is different in each test. Because the tests run at the same time, one
+test might overwrite the file in the time between another test writing and
+reading the file. The second test will then fail, not because the code is
+incorrect but because the tests have interfered with each other while running
+in parallel. One solution is to make sure each test writes to a different file;
+another solution is to run the tests one at a time.
+
+If you don’t want to run the tests in parallel or if you want more fine-grained
+control over the number of threads used, you can send the `--test-threads` flag
+and the number of threads you want to use to the test binary. Take a look at
+the following example:
+
+```
+$ cargo test -- --test-threads=1
+```
+
+We set the number of test threads to `1`, telling the program not to use any
+parallelism. Running the tests using one thread will take longer than running
+them in parallel, but the tests won’t interfere with each other if they share
+state.
+
+### Showing Function Output
+
+By default, if a test passes, Rust’s test library captures anything printed to
+standard output. For example, if we call `println!` in a test and the test
+passes, we won’t see the `println!` output in the terminal; we’ll see only the
+line that indicates the test passed. If a test fails, we’ll see whatever was
+printed to standard output with the rest of the failure message.
+
+As an example, Listing 11-10 has a silly function that prints the value of its
+parameter and returns 10, as well as a test that passes and a test that fails.
+
+Filename: src/lib.rs
+
+```
+fn prints_and_returns_10(a: i32) -> i32 {
+ println!("I got the value {}", a);
+ 10
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn this_test_will_pass() {
+ let value = prints_and_returns_10(4);
+ assert_eq!(10, value);
+ }
+
+ #[test]
+ fn this_test_will_fail() {
+ let value = prints_and_returns_10(8);
+ assert_eq!(5, value);
+ }
+}
+```
+
+Listing 11-10: Tests for a function that calls `println!`
+
+When we run these tests with `cargo test`, we’ll see the following output:
+
+```
+running 2 tests
+test tests::this_test_will_pass ... ok
+test tests::this_test_will_fail ... FAILED
+
+failures:
+
+---- tests::this_test_will_fail stdout ----
+[1] I got the value 8
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `5`,
+ right: `10`', src/lib.rs:19:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+failures:
+ tests::this_test_will_fail
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Note that nowhere in this output do we see `I got the value 4`, which is
+printed when the test that passes runs. That output has been captured. The
+output from the test that failed, `I got the value 8` [1], appears in the
+section of the test summary output, which also shows the cause of the test
+failure.
+
+If we want to see printed values for passing tests as well, we can tell Rust
+to also show the output of successful tests with `--show-output`.
+
+```
+$ cargo test -- --show-output
+```
+
+When we run the tests in Listing 11-10 again with the `--show-output` flag, we
+see the following output:
+
+```
+running 2 tests
+test tests::this_test_will_pass ... ok
+test tests::this_test_will_fail ... FAILED
+
+successes:
+
+---- tests::this_test_will_pass stdout ----
+I got the value 4
+
+
+successes:
+ tests::this_test_will_pass
+
+failures:
+
+---- tests::this_test_will_fail stdout ----
+I got the value 8
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `5`,
+ right: `10`', src/lib.rs:19:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+failures:
+ tests::this_test_will_fail
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+### Running a Subset of Tests by Name
+
+Sometimes, running a full test suite can take a long time. If you’re working on
+code in a particular area, you might want to run only the tests pertaining to
+that code. You can choose which tests to run by passing `cargo test` the name
+or names of the test(s) you want to run as an argument.
+
+To demonstrate how to run a subset of tests, we’ll first create three tests for
+our `add_two` function, as shown in Listing 11-11, and choose which ones to run.
+
+Filename: src/lib.rs
+
+```
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn add_two_and_two() {
+ assert_eq!(4, add_two(2));
+ }
+
+ #[test]
+ fn add_three_and_two() {
+ assert_eq!(5, add_two(3));
+ }
+
+ #[test]
+ fn one_hundred() {
+ assert_eq!(102, add_two(100));
+ }
+}
+```
+
+Listing 11-11: Three tests with three different names
+
+If we run the tests without passing any arguments, as we saw earlier, all the
+tests will run in parallel:
+
+```
+running 3 tests
+test tests::add_three_and_two ... ok
+test tests::add_two_and_two ... ok
+test tests::one_hundred ... ok
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+#### Running Single Tests
+
+We can pass the name of any test function to `cargo test` to run only that test:
+
+```
+$ cargo test one_hundred
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.69s
+ Running unittests (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test tests::one_hundred ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out; finished in 0.00s
+```
+
+Only the test with the name `one_hundred` ran; the other two tests didn’t match
+that name. The test output lets us know we had more tests that didn’t run by
+displaying `2 filtered out` at the end.
+
+We can’t specify the names of multiple tests in this way; only the first value
+given to `cargo test` will be used. But there is a way to run multiple tests.
+
+#### Filtering to Run Multiple Tests
+
+We can specify part of a test name, and any test whose name matches that value
+will be run. For example, because two of our tests’ names contain `add`, we can
+run those two by running `cargo test add`:
+
+```
+$ cargo test add
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.61s
+ Running unittests (target/debug/deps/adder-92948b65e88960b4)
+
+running 2 tests
+test tests::add_three_and_two ... ok
+test tests::add_two_and_two ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s
+```
+
+This command ran all tests with `add` in the name and filtered out the test
+named `one_hundred`. Also note that the module in which a test appears becomes
+part of the test’s name, so we can run all the tests in a module by filtering
+on the module’s name.
+
+### Ignoring Some Tests Unless Specifically Requested
+
+Sometimes a few specific tests can be very time-consuming to execute, so you
+might want to exclude them during most runs of `cargo test`. Rather than
+listing as arguments all tests you do want to run, you can instead annotate the
+time-consuming tests using the `ignore` attribute to exclude them, as shown
+here:
+
+Filename: src/lib.rs
+
+```
+#[test]
+fn it_works() {
+ assert_eq!(2 + 2, 4);
+}
+
+#[test]
+#[ignore]
+fn expensive_test() {
+ // code that takes an hour to run
+}
+```
+
+After `#[test]` we add the `#[ignore]` line to the test we want to exclude. Now
+when we run our tests, `it_works` runs, but `expensive_test` doesn’t:
+
+```
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.60s
+ Running unittests (target/debug/deps/adder-92948b65e88960b4)
+
+running 2 tests
+test expensive_test ... ignored
+test it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+The `expensive_test` function is listed as `ignored`. If we want to run only
+the ignored tests, we can use `cargo test -- --ignored`:
+
+```
+$ cargo test -- --ignored
+ Finished test [unoptimized + debuginfo] target(s) in 0.61s
+ Running unittests (target/debug/deps/adder-92948b65e88960b4)
+
+running 1 test
+test expensive_test ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.00s
+```
+
+By controlling which tests run, you can make sure your `cargo test` results
+will be fast. When you’re at a point where it makes sense to check the results
+of the `ignored` tests and you have time to wait for the results, you can run
+`cargo test -- --ignored` instead. If you want to run all tests whether they’re
+ignored or not, you can run `cargo test -- --include-ignored`.
+
+## Test Organization
+
+As mentioned at the start of the chapter, testing is a complex discipline, and
+different people use different terminology and organization. The Rust community
+thinks about tests in terms of two main categories: unit tests and integration
+tests. *Unit tests* are small and more focused, testing one module in isolation
+at a time, and can test private interfaces. *Integration tests* are entirely
+external to your library and use your code in the same way any other external
+code would, using only the public interface and potentially exercising multiple
+modules per test.
+
+Writing both kinds of tests is important to ensure that the pieces of your
+library are doing what you expect them to, separately and together.
+
+### Unit Tests
+
+The purpose of unit tests is to test each unit of code in isolation from the
+rest of the code to quickly pinpoint where code is and isn’t working as
+expected. You’ll put unit tests in the *src* directory in each file with the
+code that they’re testing. The convention is to create a module named `tests`
+in each file to contain the test functions and to annotate the module with
+`cfg(test)`.
+
+#### The Tests Module and `#[cfg(test)]`
+
+The `#[cfg(test)]` annotation on the tests module tells Rust to compile and run
+the test code only when you run `cargo test`, not when you run `cargo build`.
+This saves compile time when you only want to build the library and saves space
+in the resulting compiled artifact because the tests are not included. You’ll
+see that because integration tests go in a different directory, they don’t need
+the `#[cfg(test)]` annotation. However, because unit tests go in the same files
+as the code, you’ll use `#[cfg(test)]` to specify that they shouldn’t be
+included in the compiled result.
+
+Recall that when we generated the new `adder` project in the first section of
+this chapter, Cargo generated this code for us:
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() {
+ assert_eq!(2 + 2, 4);
+ }
+}
+```
+
+This code is the automatically generated test module. The attribute `cfg`
+stands for *configuration* and tells Rust that the following item should only
+be included given a certain configuration option. In this case, the
+configuration option is `test`, which is provided by Rust for compiling and
+running tests. By using the `cfg` attribute, Cargo compiles our test code only
+if we actively run the tests with `cargo test`. This includes any helper
+functions that might be within this module, in addition to the functions
+annotated with `#[test]`.
+
+#### Testing Private Functions
+
+There’s debate within the testing community about whether or not private
+functions should be tested directly, and other languages make it difficult or
+impossible to test private functions. Regardless of which testing ideology you
+adhere to, Rust’s privacy rules do allow you to test private functions.
+Consider the code in Listing 11-12 with the private function `internal_adder`.
+
+Filename: src/lib.rs
+
+```
+pub fn add_two(a: i32) -> i32 {
+ internal_adder(a, 2)
+}
+
+fn internal_adder(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn internal() {
+ assert_eq!(4, internal_adder(2, 2));
+ }
+}
+```
+
+Listing 11-12: Testing a private function
+
+Note that the `internal_adder` function is not marked as `pub`. Tests are just
+Rust code, and the `tests` module is just another module. As we discussed in
+the “Paths for Referring to an Item in the Module Tree” section, items in child
+modules can use the items in their ancestor modules. In this test, we bring all
+of the `test` module’s parent’s items into scope with `use super::*`, and then
+the test can call `internal_adder`. If you don’t think private functions should
+be tested, there’s nothing in Rust that will compel you to do so.
+
+### Integration Tests
+
+In Rust, integration tests are entirely external to your library. They use your
+library in the same way any other code would, which means they can only call
+functions that are part of your library’s public API. Their purpose is to test
+whether many parts of your library work together correctly. Units of code that
+work correctly on their own could have problems when integrated, so test
+coverage of the integrated code is important as well. To create integration
+tests, you first need a *tests* directory.
+
+#### The *tests* Directory
+
+We create a *tests* directory at the top level of our project directory, next
+to *src*. Cargo knows to look for integration test files in this directory. We
+can then make as many test files as we want, and Cargo will compile each of the
+files as an individual crate.
+
+Let’s create an integration test. With the code in Listing 11-12 still in the
+*src/lib.rs* file, make a *tests* directory, and create a new file named
+*tests/integration_test.rs*. Your directory structure should look like this:
+
+```
+adder
+├── Cargo.lock
+├── Cargo.toml
+├── src
+│   └── lib.rs
+└── tests
+ └── integration_test.rs
+```
+
+Enter the code in Listing 11-13 into the *tests/integration_test.rs* file:
+
+Filename: tests/integration_test.rs
+
+```
+use adder;
+
+#[test]
+fn it_adds_two() {
+ assert_eq!(4, adder::add_two(2));
+}
+```
+
+Listing 11-13: An integration test of a function in the `adder` crate
+
+Each file in the `tests` directory is a separate crate, so we need to bring our
+library into each test crate’s scope. For that reason we add `use adder` at the
+top of the code, which we didn’t need in the unit tests.
+
+We don’t need to annotate any code in *tests/integration_test.rs* with
+`#[cfg(test)]`. Cargo treats the `tests` directory specially and compiles files
+in this directory only when we run `cargo test`. Run `cargo test` now:
+
+```
+$ cargo test
+ Compiling adder v0.1.0 (file:///projects/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 1.31s
+ Running unittests (target/debug/deps/adder-1082c4b063a8fbe6)
+
+[1] running 1 test
+test tests::internal ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ [2] Running tests/integration_test.rs (target/debug/deps/integration_test-1082c4b063a8fbe6)
+
+running 1 test
+[3] test it_adds_two ... ok
+
+[4] test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+The three sections of output include the unit tests, the integration test, and
+the doc tests. Note that if any test in a section fails, the following sections
+will not be run. For example, if a unit test fails, there won’t be any output
+for integration and doc tests because those tests will only be run if all unit
+tests are passing.
+
+The first section for the unit tests [1] is the same as we’ve been seeing: one
+line for each unit test (one named `internal` that we added in Listing 11-12)
+and then a summary line for the unit tests.
+
+The integration tests section starts with the line `Running
+tests/integration_test.rs` [2]. Next, there is a line for each test function in
+that integration test [3] and a summary line for the results of the integration
+test [4] just before the `Doc-tests adder` section starts.
+
+Each integration test file has its own section, so if we add more files in the
+*tests* directory, there will be more integration test sections.
+
+We can still run a particular integration test function by specifying the test
+function’s name as an argument to `cargo test`. To run all the tests in a
+particular integration test file, use the `--test` argument of `cargo test`
+followed by the name of the file:
+
+```
+$ cargo test --test integration_test
+ Finished test [unoptimized + debuginfo] target(s) in 0.64s
+ Running tests/integration_test.rs (target/debug/deps/integration_test-82e7799c1bc62298)
+
+running 1 test
+test it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+This command runs only the tests in the *tests/integration_test.rs* file.
+
+#### Submodules in Integration Tests
+
+As you add more integration tests, you might want to make more files in the
+*tests* directory to help organize them; for example, you can group the test
+functions by the functionality they’re testing. As mentioned earlier, each file
+in the *tests* directory is compiled as its own separate crate, which is useful
+for creating separate scopes to more closely imitate the way end users will be
+using your crate. However, this means files in the *tests* directory don’t
+share the same behavior as files in *src* do, as you learned in Chapter 7
+regarding how to separate code into modules and files.
+
+The different behavior of *tests* directory files is most noticeable when you
+have a set of helper functions to use in multiple integration test files and
+you try to follow the steps in the “Separating Modules into Different Files”
+section of Chapter 7 to extract them into a common module. For example, if we
+create *tests/common.rs* and place a function named `setup` in it, we can add
+some code to `setup` that we want to call from multiple test functions in
+multiple test files:
+
+Filename: tests/common.rs
+
+```
+pub fn setup() {
+ // setup code specific to your library's tests would go here
+}
+```
+
+When we run the tests again, we’ll see a new section in the test output for the
+*common.rs* file, even though this file doesn’t contain any test functions nor
+did we call the `setup` function from anywhere:
+
+```
+running 1 test
+test tests::internal ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running tests/common.rs (target/debug/deps/common-92948b65e88960b4)
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running tests/integration_test.rs (target/debug/deps/integration_test-92948b65e88960b4)
+
+running 1 test
+test it_adds_two ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Having `common` appear in the test results with `running 0 tests` displayed for
+it is not what we wanted. We just wanted to share some code with the other
+integration test files.
+To avoid having `common` appear in the test output, instead of creating
+*tests/common.rs*, we’ll create *tests/common/mod.rs*. The project directory
+now looks like this:
+
+```
+├── Cargo.lock
+├── Cargo.toml
+├── src
+│   └── lib.rs
+└── tests
+ ├── common
+ │   └── mod.rs
+ └── integration_test.rs
+```
+
+This is the older naming convention that Rust also understands that we
+mentioned in the “Alternate File Paths” section of Chapter 7. Naming the file
+this way tells Rust not to treat the `common` module as an integration test
+file. When we move the `setup` function code into *tests/common/mod.rs* and
+delete the *tests/common.rs* file, the section in the test output will no
+longer appear. Files in subdirectories of the *tests* directory don’t get
+compiled as separate crates or have sections in the test output.
+
+After we’ve created *tests/common/mod.rs*, we can use it from any of the
+integration test files as a module. Here’s an example of calling the `setup`
+function from the `it_adds_two` test in *tests/integration_test.rs*:
+
+Filename: tests/integration_test.rs
+
+```
+use adder;
+
+mod common;
+
+#[test]
+fn it_adds_two() {
+ common::setup();
+ assert_eq!(4, adder::add_two(2));
+}
+```
+
+Note that the `mod common;` declaration is the same as the module declaration
+we demonstrated in Listing 7-21. Then in the test function, we can call the
+`common::setup()` function.
+
+#### Integration Tests for Binary Crates
+
+If our project is a binary crate that only contains a *src/main.rs* file and
+doesn’t have a *src/lib.rs* file, we can’t create integration tests in the
+*tests* directory and bring functions defined in the *src/main.rs* file into
+scope with a `use` statement. Only library crates expose functions that other
+crates can use; binary crates are meant to be run on their own.
+
+This is one of the reasons Rust projects that provide a binary have a
+straightforward *src/main.rs* file that calls logic that lives in the
+*src/lib.rs* file. Using that structure, integration tests *can* test the
+library crate with `use` to make the important functionality available.
+If the important functionality works, the small amount of code in the
+*src/main.rs* file will work as well, and that small amount of code doesn’t
+need to be tested.
+
+## Summary
+
+Rust’s testing features provide a way to specify how code should function to
+ensure it continues to work as you expect, even as you make changes. Unit tests
+exercise different parts of a library separately and can test private
+implementation details. Integration tests check that many parts of the library
+work together correctly, and they use the library’s public API to test the code
+in the same way external code will use it. Even though Rust’s type system and
+ownership rules help prevent some kinds of bugs, tests are still important to
+reduce logic bugs having to do with how your code is expected to behave.
+
+Let’s combine the knowledge you learned in this chapter and in previous
+chapters to work on a project!
+
+<!---
+We hint at doc tests but don't cover them. Should we have a section in this
+chapter about that? They're pretty handy.
+/JT --->
+<!-- We cover that in chapter 14, and there's a forward reference to that in
+"The Anatomy of a Test Function" section. I don't actually think most Rust
+developers will write doc tests; they're the most useful when writing open
+source libraries, which I think only a minority of developers do. /Carol -->
diff --git a/src/doc/book/nostarch/chapter12.md b/src/doc/book/nostarch/chapter12.md
new file mode 100644
index 000000000..950b2e999
--- /dev/null
+++ b/src/doc/book/nostarch/chapter12.md
@@ -0,0 +1,1686 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# An I/O Project: Building a Command Line Program
+
+This chapter is a recap of the many skills you’ve learned so far and an
+exploration of a few more standard library features. We’ll build a command line
+tool that interacts with file and command line input/output to practice some of
+the Rust concepts you now have under your belt.
+
+Rust’s speed, safety, single binary output, and cross-platform support make it
+an ideal language for creating command line tools, so for our project, we’ll
+make our own version of the classic command line search tool `grep`
+(**g**lobally search a **r**egular **e**xpression and **p**rint). In the
+simplest use case, `grep` searches a specified file for a specified string. To
+do so, `grep` takes as its arguments a file path and a string. Then it reads
+the file, finds lines in that file that contain the string argument, and prints
+those lines.
+
+Along the way, we’ll show how to make our command line tool use the terminal
+features that many other command line tools use. We’ll read the value of an
+environment variable to allow the user to configure the behavior of our tool.
+We’ll also print error messages to the standard error console stream (`stderr`)
+instead of standard output (`stdout`), so, for example, the user can redirect
+successful output to a file while still seeing error messages onscreen.
+
+One Rust community member, Andrew Gallant, has already created a fully
+featured, very fast version of `grep`, called `ripgrep`. By comparison, our
+version will be fairly simple, but this chapter will give you some of the
+background knowledge you need to understand a real-world project such as
+`ripgrep`.
+
+Our `grep` project will combine a number of concepts you’ve learned so far:
+
+* Organizing code (using what you learned about modules in Chapter 7)
+* Using vectors and strings (collections, Chapter 8)
+* Handling errors (Chapter 9)
+* Using traits and lifetimes where appropriate (Chapter 10)
+* Writing tests (Chapter 11)
+
+We’ll also briefly introduce closures, iterators, and trait objects, which
+Chapters 13 and 17 will cover in detail.
+
+## Accepting Command Line Arguments
+
+Let’s create a new project with, as always, `cargo new`. We’ll call our project
+`minigrep` to distinguish it from the `grep` tool that you might already have
+on your system.
+
+```
+$ cargo new minigrep
+ Created binary (application) `minigrep` project
+$ cd minigrep
+```
+
+The first task is to make `minigrep` accept its two command line arguments: the
+file path and a string to search for. That is, we want to be able to run our
+program with `cargo run`, two hyphens to indicate the following arguments are
+for our program rather than for `cargo`, a string to search for, and a path to
+a file to search in, like so:
+
+```
+$ cargo run -- searchstring example-filename.txt
+```
+
+Right now, the program generated by `cargo new` cannot process arguments we
+give it. Some existing libraries on *https://crates.io/* can help with writing
+a program that accepts command line arguments, but because you’re just learning
+this concept, let’s implement this capability ourselves.
+
+### Reading the Argument Values
+
+To enable `minigrep` to read the values of command line arguments we pass to
+it, we’ll need the `std::env::args` function provided in Rust’s standard
+library. This function returns an iterator of the command line arguments passed
+to `minigrep`. We’ll cover iterators fully in Chapter 13. For now, you only
+need to know two details about iterators: iterators produce a series of values,
+and we can call the `collect` method on an iterator to turn it into a
+collection, such as a vector, that contains all the elements the iterator
+produces.
+
+The code in Listing 12-1 allows your `minigrep` program to read any command
+line arguments passed to it and then collect the values into a vector.
+
+Filename: src/main.rs
+
+```
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ dbg!(args);
+}
+```
+
+Listing 12-1: Collecting the command line arguments into a vector and printing
+them
+
+First, we bring the `std::env` module into scope with a `use` statement so we
+can use its `args` function. Notice that the `std::env::args` function is
+nested in two levels of modules. As we discussed in Chapter 7, in cases where
+the desired function is nested in more than one module, we’ve chosen to bring
+the parent module into scope rather than the function. By doing so, we can
+easily use other functions from `std::env`. It’s also less ambiguous than
+adding `use std::env::args` and then calling the function with just `args`,
+because `args` might easily be mistaken for a function that’s defined in the
+current module.
+
+> ### The `args` Function and Invalid Unicode
+>
+> Note that `std::env::args` will panic if any argument contains invalid
+> Unicode. If your program needs to accept arguments containing invalid
+> Unicode, use `std::env::args_os` instead. That function returns an iterator
+> that produces `OsString` values instead of `String` values. We’ve chosen to
+> use `std::env::args` here for simplicity, because `OsString` values differ
+> per platform and are more complex to work with than `String` values.
+
+On the first line of `main`, we call `env::args`, and we immediately use
+`collect` to turn the iterator into a vector containing all the values produced
+by the iterator. We can use the `collect` function to create many kinds of
+collections, so we explicitly annotate the type of `args` to specify that we
+want a vector of strings. Although we very rarely need to annotate types in
+Rust, `collect` is one function you do often need to annotate because Rust
+isn’t able to infer the kind of collection you want.
+
+Finally, we print the vector using the debug macro. Let’s try running the code
+first with no arguments and then with two arguments:
+
+```
+$ cargo run
+--snip--
+[src/main.rs:5] args = [
+ "target/debug/minigrep",
+]
+```
+
+```
+$ cargo run -- needle haystack
+--snip--
+[src/main.rs:5] args = [
+ "target/debug/minigrep",
+ "needle",
+ "haystack",
+]
+```
+
+Notice that the first value in the vector is `"target/debug/minigrep"`, which
+is the name of our binary. This matches the behavior of the arguments list in
+C, letting programs use the name by which they were invoked in their execution.
+It’s often convenient to have access to the program name in case you want to
+print it in messages or change behavior of the program based on what command
+line alias was used to invoke the program. But for the purposes of this
+chapter, we’ll ignore it and save only the two arguments we need.
+
+### Saving the Argument Values in Variables
+
+The program is currently able to access the values specified as command line
+arguments. Now we need to save the values of the two arguments in variables so
+we can use the values throughout the rest of the program. We do that in Listing
+12-2.
+
+Filename: src/main.rs
+
+```
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let query = &args[1];
+ let file_path = &args[2];
+
+ println!("Searching for {}", query);
+ println!("In file {}", file_path);
+}
+```
+
+Listing 12-2: Creating variables to hold the query argument and file path
+argument
+
+As we saw when we printed the vector, the program’s name takes up the first
+value in the vector at `args[0]`, so we’re starting arguments at index `1`. The
+first argument `minigrep` takes is the string we’re searching for, so we put a
+reference to the first argument in the variable `query`. The second argument
+will be the file path, so we put a reference to the second argument in the
+variable `file_path`.
+
+We temporarily print the values of these variables to prove that the code is
+working as we intend. Let’s run this program again with the arguments `test`
+and `sample.txt`:
+
+```
+$ cargo run -- test sample.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep test sample.txt`
+Searching for test
+In file sample.txt
+```
+
+Great, the program is working! The values of the arguments we need are being
+saved into the right variables. Later we’ll add some error handling to deal
+with certain potential erroneous situations, such as when the user provides no
+arguments; for now, we’ll ignore that situation and work on adding file-reading
+capabilities instead.
+
+## Reading a File
+
+Now we’ll add functionality to read the file specified in the `file_path`
+argument. First, we need a sample file to test it with: we’ll use a file with a
+small amount of text over multiple lines with some repeated words. Listing 12-3
+has an Emily Dickinson poem that will work well! Create a file called
+*poem.txt* at the root level of your project, and enter the poem “I’m Nobody!
+Who are you?”
+
+Filename: poem.txt
+
+```
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
+```
+
+Listing 12-3: A poem by Emily Dickinson makes a good test case
+
+With the text in place, edit *src/main.rs* and add code to read the file, as
+shown in Listing 12-4.
+
+Filename: src/main.rs
+
+```
+use std::env;
+[1] use std::fs;
+
+fn main() {
+ // --snip--
+ println!("In file {}", file_path);
+
+ [2] let contents = fs::read_to_string(file_path)
+ .expect("Should have been able to read the file");
+
+ [3] println!("With text:\n{contents}");
+}
+```
+
+Listing 12-4: Reading the contents of the file specified by the second argument
+
+First, we bring in a relevant part of the standard library with a `use`
+statement: we need `std::fs` to handle files [1].
+
+In `main`, the new statement `fs::read_to_string` takes the `file_path`, opens
+that file, and returns a `std::io::Result<String>` of the file’s contents [2].
+
+After that, we again add a temporary `println!` statement that prints the value
+of `contents` after the file is read, so we can check that the program is
+working so far [3].
+
+Let’s run this code with any string as the first command line argument (because
+we haven’t implemented the searching part yet) and the *poem.txt* file as the
+second argument:
+
+```
+$ cargo run -- the poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep the poem.txt`
+Searching for the
+In file poem.txt
+With text:
+I'm nobody! Who are you?
+Are you nobody, too?
+Then there's a pair of us - don't tell!
+They'd banish us, you know.
+
+How dreary to be somebody!
+How public, like a frog
+To tell your name the livelong day
+To an admiring bog!
+```
+
+Great! The code read and then printed the contents of the file. But the code
+has a few flaws. At the moment, the `main` function has multiple
+responsibilities: generally, functions are clearer and easier to maintain if
+each function is responsible for only one idea. The other problem is that we’re
+not handling errors as well as we could. The program is still small, so these
+flaws aren’t a big problem, but as the program grows, it will be harder to fix
+them cleanly. It’s good practice to begin refactoring early on when developing
+a program, because it’s much easier to refactor smaller amounts of code. We’ll
+do that next.
+
+## Refactoring to Improve Modularity and Error Handling
+
+To improve our program, we’ll fix four problems that have to do with the
+program’s structure and how it’s handling potential errors. First, our `main`
+function now performs two tasks: it parses arguments and reads files. As our
+program grows, the number of separate tasks the `main` function handles will
+increase. As a function gains responsibilities, it becomes more difficult to
+reason about, harder to test, and harder to change without breaking one of its
+parts. It’s best to separate functionality so each function is responsible for
+one task.
+
+This issue also ties into the second problem: although `query` and `file_path`
+are configuration variables to our program, variables like `contents` are used
+to perform the program’s logic. The longer `main` becomes, the more variables
+we’ll need to bring into scope; the more variables we have in scope, the harder
+it will be to keep track of the purpose of each. It’s best to group the
+configuration variables into one structure to make their purpose clear.
+
+The third problem is that we’ve used `expect` to print an error message when
+reading the file fails, but the error message just prints `Should have been
+able to read the file`. Reading a file can fail in a number of ways: for
+example, the file could be missing, or we might not have permission to open it.
+Right now, regardless of the situation, we’d print the same error message for
+everything, which wouldn’t give the user any information!
+
+Fourth, we use `expect` repeatedly to handle different errors, and if the user
+runs our program without specifying enough arguments, they’ll get an `index out
+of bounds` error from Rust that doesn’t clearly explain the problem. It would
+be best if all the error-handling code were in one place so future maintainers
+had only one place to consult the code if the error-handling logic needed to
+change. Having all the error-handling code in one place will also ensure that
+we’re printing messages that will be meaningful to our end users.
+
+Let’s address these four problems by refactoring our project.
+
+### Separation of Concerns for Binary Projects
+
+The organizational problem of allocating responsibility for multiple tasks to
+the `main` function is common to many binary projects. As a result, the Rust
+community has developed guidelines for splitting the separate concerns of a
+binary program when `main` starts getting large. This process has the following
+steps:
+
+* Split your program into a *main.rs* and a *lib.rs* and move your program’s
+ logic to *lib.rs*.
+* As long as your command line parsing logic is small, it can remain in
+ *main.rs*.
+* When the command line parsing logic starts getting complicated, extract it
+ from *main.rs* and move it to *lib.rs*.
+
+The responsibilities that remain in the `main` function after this process
+should be limited to the following:
+
+* Calling the command line parsing logic with the argument values
+* Setting up any other configuration
+* Calling a `run` function in *lib.rs*
+* Handling the error if `run` returns an error
+
+This pattern is about separating concerns: *main.rs* handles running the
+program, and *lib.rs* handles all the logic of the task at hand. Because you
+can’t test the `main` function directly, this structure lets you test all of
+your program’s logic by moving it into functions in *lib.rs*. The code that
+remains in *main.rs* will be small enough to verify its correctness by reading
+it. Let’s rework our program by following this process.
+
+#### Extracting the Argument Parser
+
+We’ll extract the functionality for parsing arguments into a function that
+`main` will call to prepare for moving the command line parsing logic to
+*src/lib.rs*. Listing 12-5 shows the new start of `main` that calls a new
+function `parse_config`, which we’ll define in *src/main.rs* for the moment.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let (query, file_path) = parse_config(&args);
+
+ // --snip--
+}
+
+fn parse_config(args: &[String]) -> (&str, &str) {
+ let query = &args[1];
+ let file_path = &args[2];
+
+ (query, file_path)
+}
+```
+
+Listing 12-5: Extracting a `parse_config` function from `main`
+
+We’re still collecting the command line arguments into a vector, but instead of
+assigning the argument value at index 1 to the variable `query` and the
+argument value at index 2 to the variable `file_path` within the `main`
+function, we pass the whole vector to the `parse_config` function. The
+`parse_config` function then holds the logic that determines which argument
+goes in which variable and passes the values back to `main`. We still create
+the `query` and `file_path` variables in `main`, but `main` no longer has the
+responsibility of determining how the command line arguments and variables
+correspond.
+
+This rework may seem like overkill for our small program, but we’re refactoring
+in small, incremental steps. After making this change, run the program again to
+verify that the argument parsing still works. It’s good to check your progress
+often, to help identify the cause of problems when they occur.
+
+#### Grouping Configuration Values
+
+We can take another small step to improve the `parse_config` function further.
+At the moment, we’re returning a tuple, but then we immediately break that
+tuple into individual parts again. This is a sign that perhaps we don’t have
+the right abstraction yet.
+
+Another indicator that shows there’s room for improvement is the `config` part
+of `parse_config`, which implies that the two values we return are related and
+are both part of one configuration value. We’re not currently conveying this
+meaning in the structure of the data other than by grouping the two values into
+a tuple; we’ll instead put the two values into one struct and give each of the
+struct fields a meaningful name. Doing so will make it easier for future
+maintainers of this code to understand how the different values relate to each
+other and what their purpose is.
+
+Listing 12-6 shows the improvements to the `parse_config` function.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ [1] let config = parse_config(&args);
+
+ println!("Searching for {}", config.query[2]);
+ println!("In file {}", config.file_path[3]);
+
+ let contents = fs::read_to_string(config.file_path[4])
+ .expect("Should have been able to read the file");
+
+ // --snip--
+}
+
+[5] struct Config {
+ query: String,
+ file_path: String,
+}
+
+[6] fn parse_config(args: &[String]) -> Config {
+ [7] let query = args[1].clone();
+ [8] let file_path = args[2].clone();
+
+ Config { query, file_path }
+}
+```
+
+Listing 12-6: Refactoring `parse_config` to return an instance of a `Config`
+struct
+
+We’ve added a struct named `Config` defined to have fields named `query` and
+`file_path` [5]. The signature of `parse_config` now indicates that it returns a
+`Config` value [6]. In the body of `parse_config`, where we used to return
+string slices that reference `String` values in `args`, we now define `Config`
+to contain owned `String` values. The `args` variable in `main` is the owner of
+the argument values and is only letting the `parse_config` function borrow
+them, which means we’d violate Rust’s borrowing rules if `Config` tried to take
+ownership of the values in `args`.
+
+There are a number of ways we could manage the `String` data; the easiest,
+though somewhat inefficient, route is to call the `clone` method on the values
+[7][8]. This will make a full copy of the data for the `Config` instance to
+own, which takes more time and memory than storing a reference to the string
+data. However, cloning the data also makes our code very straightforward
+because we don’t have to manage the lifetimes of the references; in this
+circumstance, giving up a little performance to gain simplicity is a worthwhile
+trade-off.
+
+> ### The Trade-Offs of Using `clone`
+>
+> There’s a tendency among many Rustaceans to avoid using `clone` to fix
+> ownership problems because of its runtime cost. In
+> Chapter 13, you’ll learn how to use more efficient
+> methods in this type of situation. But for now, it’s okay to copy a few
+> strings to continue making progress because you’ll make these copies only
+> once and your file path and query string are very small. It’s better to have
+> a working program that’s a bit inefficient than to try to hyperoptimize code
+> on your first pass. As you become more experienced with Rust, it’ll be
+> easier to start with the most efficient solution, but for now, it’s
+> perfectly acceptable to call `clone`.
+
+We’ve updated `main` so it places the instance of `Config` returned by
+`parse_config` into a variable named `config` [1], and we updated the code that
+previously used the separate `query` and `file_path` variables so it now uses
+the fields on the `Config` struct instead [2][3][4].
+
+Now our code more clearly conveys that `query` and `file_path` are related and
+that their purpose is to configure how the program will work. Any code that
+uses these values knows to find them in the `config` instance in the fields
+named for their purpose.
+
+#### Creating a Constructor for `Config`
+
+So far, we’ve extracted the logic responsible for parsing the command line
+arguments from `main` and placed it in the `parse_config` function. Doing so
+helped us to see that the `query` and `file_path` values were related and that
+relationship should be conveyed in our code. We then added a `Config` struct to
+name the related purpose of `query` and `file_path` and to be able to return the
+values’ names as struct field names from the `parse_config` function.
+
+So now that the purpose of the `parse_config` function is to create a `Config`
+instance, we can change `parse_config` from a plain function to a function
+named `new` that is associated with the `Config` struct. Making this change
+will make the code more idiomatic. We can create instances of types in the
+standard library, such as `String`, by calling `String::new`. Similarly, by
+changing `parse_config` into a `new` function associated with `Config`, we’ll
+be able to create instances of `Config` by calling `Config::new`. Listing 12-7
+shows the changes we need to make.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ [1] let config = Config::new(&args);
+
+ // --snip--
+}
+
+// --snip--
+
+[2] impl Config {
+ [3] fn new(args: &[String]) -> Config {
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Config { query, file_path }
+ }
+}
+```
+
+Listing 12-7: Changing `parse_config` into `Config::new`
+
+We’ve updated `main` where we were calling `parse_config` to instead call
+`Config::new` [1]. We’ve changed the name of `parse_config` to `new` [3] and
+moved it within an `impl` block [2], which associates the `new` function with
+`Config`. Try compiling this code again to make sure it works.
+
+### Fixing the Error Handling
+
+Now we’ll work on fixing our error handling. Recall that attempting to access
+the values in the `args` vector at index 1 or index 2 will cause the program to
+panic if the vector contains fewer than three items. Try running the program
+without any arguments; it will look like this:
+
+```
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep`
+thread 'main' panicked at 'index out of bounds: the len is 1 but the index is 1', src/main.rs:27:21
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+The line `index out of bounds: the len is 1 but the index is 1` is an error
+message intended for programmers. It won’t help our end users understand what
+they should do instead. Let’s fix that now.
+
+#### Improving the Error Message
+
+In Listing 12-8, we add a check in the `new` function that will verify that the
+slice is long enough before accessing index 1 and 2. If the slice isn’t long
+enough, the program panics and displays a better error message.
+
+Filename: src/main.rs
+
+```
+// --snip--
+fn new(args: &[String]) -> Config {
+ if args.len() < 3 {
+ panic!("not enough arguments");
+ }
+ // --snip--
+```
+
+Listing 12-8: Adding a check for the number of arguments
+
+This code is similar to the `Guess::new` function we wrote in Listing 9-13,
+where we called `panic!` when the `value` argument was out of the range of
+valid values. Instead of checking for a range of values here, we’re checking
+that the length of `args` is at least 3 and the rest of the function can
+operate under the assumption that this condition has been met. If `args` has
+fewer than three items, this condition will be true, and we call the `panic!`
+macro to end the program immediately.
+
+With these extra few lines of code in `new`, let’s run the program without any
+arguments again to see what the error looks like now:
+
+```
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep`
+thread 'main' panicked at 'not enough arguments', src/main.rs:26:13
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+This output is better: we now have a reasonable error message. However, we also
+have extraneous information we don’t want to give to our users. Perhaps using
+the technique we used in Listing 9-13 isn’t the best to use here: a call to
+`panic!` is more appropriate for a programming problem than a usage problem, as
+discussed in Chapter 9. Instead, we’ll use the other technique you learned
+about in Chapter 9—returning a `Result` that indicates either success or an
+error.
+
+#### Returning a `Result` Instead of Calling `panic!`
+
+We can instead return a `Result` value that will contain a `Config` instance in
+the successful case and will describe the problem in the error case. We’re also
+going to change the function name from `new` to `build` because many
+programmers expect `new` functions to never fail. When `Config::build` is
+communicating to `main`, we can use the `Result` type to signal there was a
+problem. Then we can change `main` to convert an `Err` variant into a more
+practical error for our users without the surrounding text about `thread
+'main'` and `RUST_BACKTRACE` that a call to `panic!` causes.
+
+Listing 12-9 shows the changes we need to make to the return value of the
+function we’re now calling `Config::build` and the body of the function needed
+to return a `Result`. Note that this won’t compile until we update `main` as
+well, which we’ll do in the next listing.
+
+Filename: src/main.rs
+
+```
+impl Config {
+ fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ Ok(Config { query, file_path })
+ }
+}
+```
+
+Listing 12-9: Returning a `Result` from `Config::build`
+
+Our `build` function returns a `Result` with a `Config` instance in the success
+case and a `&'static str` in the error case. Our error values will always be
+string literals that have the `'static` lifetime.
+
+We’ve made two changes in the body of the function: instead of calling `panic!`
+when the user doesn’t pass enough arguments, we now return an `Err` value, and
+we’ve wrapped the `Config` return value in an `Ok`. These changes make the
+function conform to its new type signature.
+
+Returning an `Err` value from `Config::build` allows the `main` function to
+handle the `Result` value returned from the `build` function and exit the
+process more cleanly in the error case.
+
+#### Calling `Config::build` and Handling Errors
+
+To handle the error case and print a user-friendly message, we need to update
+`main` to handle the `Result` being returned by `Config::build`, as shown in
+Listing 12-10. We’ll also take the responsibility of exiting the command line
+tool with a nonzero error code away from `panic!` and instead implement it by
+hand. A nonzero exit status is a convention to signal to the process that
+called our program that the program exited with an error state.
+
+Filename: src/main.rs
+
+```
+[1] use std::process;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ [2] let config = Config::build(&args).unwrap_or_else([3]|err[4]| {
+ [5] println!("Problem parsing arguments: {err}");
+ [6] process::exit(1);
+ });
+
+ // --snip--
+```
+
+Listing 12-10: Exiting with an error code if building a `Config` fails
+
+In this listing, we’ve used a method we haven’t covered in detail yet:
+`unwrap_or_else`, which is defined on `Result<T, E>` by the standard library
+[2]. Using `unwrap_or_else` allows us to define some custom, non-`panic!` error
+handling. If the `Result` is an `Ok` value, this method’s behavior is similar
+to `unwrap`: it returns the inner value `Ok` is wrapping. However, if the value
+is an `Err` value, this method calls the code in the *closure*, which is an
+anonymous function we define and pass as an argument to `unwrap_or_else` [3].
+We’ll cover closures in more detail in Chapter 13. For now, you just need to
+know that `unwrap_or_else` will pass the inner value of the `Err`, which in
+this case is the static string `"not enough arguments"` that we added in
+Listing 12-9, to our closure in the argument `err` that appears between the
+vertical pipes [4]. The code in the closure can then use the `err` value when
+it runs.
+
+We’ve added a new `use` line to bring `process` from the standard library into
+scope [1]. The code in the closure that will be run in the error case is only
+two lines: we print the `err` value [5] and then call `process::exit` [6]. The
+`process::exit` function will stop the program immediately and return the
+number that was passed as the exit status code. This is similar to the
+`panic!`-based handling we used in Listing 12-8, but we no longer get all the
+extra output. Let’s try it:
+
+```
+$ cargo run
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.48s
+ Running `target/debug/minigrep`
+Problem parsing arguments: not enough arguments
+```
+
+Great! This output is much friendlier for our users.
+
+### Extracting Logic from `main`
+
+Now that we’ve finished refactoring the configuration parsing, let’s turn to
+the program’s logic. As we stated in “Separation of Concerns for Binary
+Projects”, we’ll extract a function named `run` that will hold all the logic
+currently in the `main` function that isn’t involved with setting up
+configuration or handling errors. When we’re done, `main` will be concise and
+easy to verify by inspection, and we’ll be able to write tests for all the
+other logic.
+
+Listing 12-11 shows the extracted `run` function. For now, we’re just making
+the small, incremental improvement of extracting the function. We’re still
+defining the function in *src/main.rs*.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ // --snip--
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ run(config);
+}
+
+fn run(config: Config) {
+ let contents = fs::read_to_string(config.file_path)
+ .expect("Should have been able to read the file");
+
+ println!("With text:\n{contents}");
+}
+
+// --snip--
+```
+
+Listing 12-11: Extracting a `run` function containing the rest of the program
+logic
+
+The `run` function now contains all the remaining logic from `main`, starting
+from reading the file. The `run` function takes the `Config` instance as an
+argument.
+
+#### Returning Errors from the `run` Function
+
+With the remaining program logic separated into the `run` function, we can
+improve the error handling, as we did with `Config::build` in Listing 12-9.
+Instead of allowing the program to panic by calling `expect`, the `run`
+function will return a `Result<T, E>` when something goes wrong. This will let
+us further consolidate the logic around handling errors into `main` in a
+user-friendly way. Listing 12-12 shows the changes we need to make to the
+signature and body of `run`.
+
+Filename: src/main.rs
+
+```
+[1] use std::error::Error;
+
+// --snip--
+
+[2] fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?[3];
+
+ println!("With text:\n{contents}");
+
+ [4] Ok(())
+}
+```
+
+Listing 12-12: Changing the `run` function to return `Result`
+
+We’ve made three significant changes here. First, we changed the return type of
+the `run` function to `Result<(), Box<dyn Error>>` [2]. This function previously
+returned the unit type, `()`, and we keep that as the value returned in the
+`Ok` case.
+
+For the error type, we used the *trait object* `Box<dyn Error>` (and we’ve
+brought `std::error::Error` into scope with a `use` statement at the top [1]).
+We’ll cover trait objects in Chapter 17. For now, just know that `Box<dyn
+Error>` means the function will return a type that implements the `Error`
+trait, but we don’t have to specify what particular type the return value will
+be. This gives us flexibility to return error values that may be of different
+types in different error cases. The `dyn` keyword is short for “dynamic.”
+
+Second, we’ve removed the call to `expect` in favor of the `?` operator [3], as
+we talked about in Chapter 9. Rather than `panic!` on an error, `?` will return
+the error value from the current function for the caller to handle.
+
+Third, the `run` function now returns an `Ok` value in the success case [4].
+We’ve declared the `run` function’s success type as `()` in the signature,
+which means we need to wrap the unit type value in the `Ok` value. This
+`Ok(())` syntax might look a bit strange at first, but using `()` like this is
+the idiomatic way to indicate that we’re calling `run` for its side effects
+only; it doesn’t return a value we need.
+
+When you run this code, it will compile but will display a warning:
+
+```
+warning: unused `Result` that must be used
+ --> src/main.rs:19:5
+ |
+19 | run(config);
+ | ^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_must_use)]` on by default
+ = note: this `Result` may be an `Err` variant, which should be handled
+```
+
+Rust tells us that our code ignored the `Result` value and the `Result` value
+might indicate that an error occurred. But we’re not checking to see whether or
+not there was an error, and the compiler reminds us that we probably meant to
+have some error-handling code here! Let’s rectify that problem now.
+
+#### Handling Errors Returned from `run` in `main`
+
+We’ll check for errors and handle them using a technique similar to one we used
+with `Config::build` in Listing 12-10, but with a slight difference:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ // --snip--
+
+ println!("Searching for {}", config.query);
+ println!("In file {}", config.file_path);
+
+ if let Err(e) = run(config) {
+ println!("Application error: {e}");
+ process::exit(1);
+ }
+}
+```
+
+We use `if let` rather than `unwrap_or_else` to check whether `run` returns an
+`Err` value and call `process::exit(1)` if it does. The `run` function doesn’t
+return a value that we want to `unwrap` in the same way that `Config::build`
+returns the `Config` instance. Because `run` returns `()` in the success case,
+we only care about detecting an error, so we don’t need `unwrap_or_else` to
+return the unwrapped value, which would only be `()`.
+
+The bodies of the `if let` and the `unwrap_or_else` functions are the same in
+both cases: we print the error and exit.
+
+### Splitting Code into a Library Crate
+
+Our `minigrep` project is looking good so far! Now we’ll split the
+*src/main.rs* file and put some code into the *src/lib.rs* file. That way we
+can test the code and have a *src/main.rs* file with fewer responsibilities.
+
+Let’s move all the code that isn’t the `main` function from *src/main.rs* to
+*src/lib.rs*:
+
+* The `run` function definition
+* The relevant `use` statements
+* The definition of `Config`
+* The `Config::build` function definition
+
+The contents of *src/lib.rs* should have the signatures shown in Listing 12-13
+(we’ve omitted the bodies of the functions for brevity). Note that this won’t
+compile until we modify *src/main.rs* in Listing 12-14.
+
+Filename: src/lib.rs
+
+```
+use std::error::Error;
+use std::fs;
+
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+}
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ // --snip--
+ }
+}
+
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ // --snip--
+}
+```
+
+Listing 12-13: Moving `Config` and `run` into *src/lib.rs*
+
+We’ve made liberal use of the `pub` keyword: on `Config`, on its fields and its
+`build` method, and on the `run` function. We now have a library crate that has
+a public API we can test!
+
+Now we need to bring the code we moved to *src/lib.rs* into the scope of the
+binary crate in *src/main.rs*, as shown in Listing 12-14.
+
+Filename: src/main.rs
+
+```
+use std::env;
+use std::process;
+
+use minigrep::Config;
+
+fn main() {
+ // --snip--
+ if let Err(e) = minigrep::run(config) {
+ // --snip--
+ }
+}
+```
+
+Listing 12-14: Using the `minigrep` library crate in *src/main.rs*
+
+We add a `use minigrep::Config` line to bring the `Config` type from the
+library crate into the binary crate’s scope, and we prefix the `run` function
+with our crate name. Now all the functionality should be connected and should
+work. Run the program with `cargo run` and make sure everything works
+correctly.
+
+Whew! That was a lot of work, but we’ve set ourselves up for success in the
+future. Now it’s much easier to handle errors, and we’ve made the code more
+modular. Almost all of our work will be done in *src/lib.rs* from here on out.
+
+Let’s take advantage of this newfound modularity by doing something that would
+have been difficult with the old code but is easy with the new code: we’ll
+write some tests!
+
+## Developing the Library’s Functionality with Test-Driven Development
+
+Now that we’ve extracted the logic into *src/lib.rs* and left the argument
+collecting and error handling in *src/main.rs*, it’s much easier to write tests
+for the core functionality of our code. We can call functions directly with
+various arguments and check return values without having to call our binary
+from the command line.
+
+In this section, we’ll add the searching logic to the `minigrep` program
+using the test-driven development (TDD) process with the following steps:
+
+1. Write a test that fails and run it to make sure it fails for the reason you
+ expect.
+2. Write or modify just enough code to make the new test pass.
+3. Refactor the code you just added or changed and make sure the tests
+ continue to pass.
+4. Repeat from step 1!
+
+Though it’s just one of many ways to write software, TDD can help drive code
+design. Writing the test before you write the code that makes the test pass
+helps to maintain high test coverage throughout the process.
+
+We’ll test drive the implementation of the functionality that will actually do
+the searching for the query string in the file contents and produce a list of
+lines that match the query. We’ll add this functionality in a function called
+`search`.
+
+### Writing a Failing Test
+
+Because we don’t need them anymore, let’s remove the `println!` statements from
+*src/lib.rs* and *src/main.rs* that we used to check the program’s behavior.
+Then, in *src/lib.rs*, add a `tests` module with a test function, as we did in
+Chapter 11. The test function specifies the behavior we want the `search`
+function to have: it will take a query and the text to search, and it will
+return only the lines from the text that contain the query. Listing 12-15 shows
+this test, which won’t compile yet.
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn one_result() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+}
+```
+
+Listing 12-15: Creating a failing test for the `search` function we wish we had
+
+This test searches for the string `"duct"`. The text we’re searching is three
+lines, only one of which contains `"duct"` (Note that the backslash after the
+opening double quote tells Rust not to put a newline character at the beginning
+of the contents of this string literal). We assert that the value returned from
+the `search` function contains only the line we expect.
+
+We aren’t yet able to run this test and watch it fail because the test doesn’t
+even compile: the `search` function doesn’t exist yet! In accordance with TDD
+principles, we’ll add just enough code to get the test to compile and run by
+adding a definition of the `search` function that always returns an empty
+vector, as shown in Listing 12-16. Then the test should compile and fail
+because an empty vector doesn’t match a vector containing the line `"safe,
+fast, productive."`
+
+Filename: src/lib.rs
+
+```
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ vec![]
+}
+```
+
+Listing 12-16: Defining just enough of the `search` function so our test will
+compile
+
+Notice that we need to define an explicit lifetime `'a` in the signature of
+`search` and use that lifetime with the `contents` argument and the return
+value. Recall in Chapter 10 that the lifetime parameters specify which argument
+lifetime is connected to the lifetime of the return value. In this case, we
+indicate that the returned vector should contain string slices that reference
+slices of the argument `contents` (rather than the argument `query`).
+
+In other words, we tell Rust that the data returned by the `search` function
+will live as long as the data passed into the `search` function in the
+`contents` argument. This is important! The data referenced *by* a slice needs
+to be valid for the reference to be valid; if the compiler assumes we’re making
+string slices of `query` rather than `contents`, it will do its safety checking
+incorrectly.
+
+If we forget the lifetime annotations and try to compile this function, we’ll
+get this error:
+
+```
+error[E0106]: missing lifetime specifier
+ --> src/lib.rs:28:51
+ |
+28 | pub fn search(query: &str, contents: &str) -> Vec<&str> {
+ | ---- ---- ^ expected named lifetime parameter
+ |
+ = help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `query` or `contents`
+help: consider introducing a named lifetime parameter
+ |
+28 | pub fn search<'a>(query: &'a str, contents: &'a str) -> Vec<&'a str> {
+ | ++++ ++ ++ ++
+```
+
+Rust can’t possibly know which of the two arguments we need, so we need to tell
+it explicitly. Because `contents` is the argument that contains all of our text
+and we want to return the parts of that text that match, we know `contents` is
+the argument that should be connected to the return value using the lifetime
+syntax.
+
+Other programming languages don’t require you to connect arguments to return
+values in the signature, but this practice will get easier over time. You might
+want to compare this example with the “Validating References with Lifetimes”
+section in Chapter 10.
+
+Now let’s run the test:
+
+```
+$ cargo test
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished test [unoptimized + debuginfo] target(s) in 0.97s
+ Running unittests src/lib.rs (target/debug/deps/minigrep-9cd200e5fac0fc94)
+
+running 1 test
+test tests::one_result ... FAILED
+
+failures:
+
+---- tests::one_result stdout ----
+thread 'main' panicked at 'assertion failed: `(left == right)`
+ left: `["safe, fast, productive."]`,
+ right: `[]`', src/lib.rs:44:9
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+
+
+failures:
+ tests::one_result
+
+test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+error: test failed, to rerun pass '--lib'
+```
+
+Great, the test fails, exactly as we expected. Let’s get the test to pass!
+
+### Writing Code to Pass the Test
+
+Currently, our test is failing because we always return an empty vector. To fix
+that and implement `search`, our program needs to follow these steps:
+
+* Iterate through each line of the contents.
+* Check whether the line contains our query string.
+* If it does, add it to the list of values we’re returning.
+* If it doesn’t, do nothing.
+* Return the list of results that match.
+
+Let’s work through each step, starting with iterating through lines.
+
+#### Iterating Through Lines with the `lines` Method
+
+Rust has a helpful method to handle line-by-line iteration of strings,
+conveniently named `lines`, that works as shown in Listing 12-17. Note this
+won’t compile yet.
+
+Filename: src/lib.rs
+
+```
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ for line in contents.lines() {
+ // do something with line
+ }
+}
+```
+
+Listing 12-17: Iterating through each line in `contents`
+
+The `lines` method returns an iterator. We’ll talk about iterators in depth in
+Chapter 13, but recall that you saw this way of using an iterator in Listing
+3-5, where we used a `for` loop with an iterator to run some code on each item
+in a collection.
+
+#### Searching Each Line for the Query
+
+Next, we’ll check whether the current line contains our query string.
+Fortunately, strings have a helpful method named `contains` that does this for
+us! Add a call to the `contains` method in the `search` function, as shown in
+Listing 12-18. Note this still won’t compile yet.
+
+Filename: src/lib.rs
+
+```
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ for line in contents.lines() {
+ if line.contains(query) {
+ // do something with line
+ }
+ }
+}
+```
+
+Listing 12-18: Adding functionality to see whether the line contains the string
+in `query`
+
+At the moment, we’re building up functionality. To get it to compile, we need
+to return a value from the body as we indicated we would in the function
+signature.
+
+#### Storing Matching Lines
+
+To finish this function, we need a way to store the matching lines that we want
+to return. For that, we can make a mutable vector before the `for` loop and
+call the `push` method to store a `line` in the vector. After the `for` loop,
+we return the vector, as shown in Listing 12-19.
+
+Filename: src/lib.rs
+
+```
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+```
+
+Listing 12-19: Storing the lines that match so we can return them
+
+Now the `search` function should return only the lines that contain `query`,
+and our test should pass. Let’s run the test:
+
+```
+$ cargo test
+--snip--
+running 1 test
+test tests::one_result ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Our test passed, so we know it works!
+
+At this point, we could consider opportunities for refactoring the
+implementation of the search function while keeping the tests passing to
+maintain the same functionality. The code in the search function isn’t too bad,
+but it doesn’t take advantage of some useful features of iterators. We’ll
+return to this example in Chapter 13, where we’ll explore iterators in detail,
+and look at how to improve it.
+
+#### Using the `search` Function in the `run` Function
+
+Now that the `search` function is working and tested, we need to call `search`
+from our `run` function. We need to pass the `config.query` value and the
+`contents` that `run` reads from the file to the `search` function. Then `run`
+will print each line returned from `search`:
+
+Filename: src/lib.rs
+
+```
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ for line in search(&config.query, &contents) {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+```
+
+We’re still using a `for` loop to return each line from `search` and print it.
+
+Now the entire program should work! Let’s try it out, first with a word that
+should return exactly one line from the Emily Dickinson poem, “frog”:
+
+```
+$ cargo run -- frog poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.38s
+ Running `target/debug/minigrep frog poem.txt`
+How public, like a frog
+```
+
+Cool! Now let’s try a word that will match multiple lines, like “body”:
+
+```
+$ cargo run -- body poem.txt
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep body poem.txt`
+I'm nobody! Who are you?
+Are you nobody, too?
+How dreary to be somebody!
+```
+
+And finally, let’s make sure that we don’t get any lines when we search for a
+word that isn’t anywhere in the poem, such as “monomorphization”:
+
+```
+$ cargo run -- monomorphization poem.txt
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep monomorphization poem.txt`
+```
+
+Excellent! We’ve built our own mini version of a classic tool and learned a lot
+about how to structure applications. We’ve also learned a bit about file input
+and output, lifetimes, testing, and command line parsing.
+
+To round out this project, we’ll briefly demonstrate how to work with
+environment variables and how to print to standard error, both of which are
+useful when you’re writing command line programs.
+
+## Working with Environment Variables
+
+We’ll improve `minigrep` by adding an extra feature: an option for
+case-insensitive searching that the user can turn on via an environment
+variable. We could make this feature a command line option and require that
+users enter it each time they want it to apply, but by instead making it an
+environment variable, we allow our users to set the environment variable once
+and have all their searches be case insensitive in that terminal session.
+
+### Writing a Failing Test for the Case-Insensitive `search` Function
+
+We first add a new `search_case_insensitive` function that will be called when
+the environment variable has a value. We’ll continue to follow the TDD process,
+so the first step is again to write a failing test. We’ll add a new test for
+the new `search_case_insensitive` function and rename our old test from
+`one_result` to `case_sensitive` to clarify the differences between the two
+tests, as shown in Listing 12-20.
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn case_sensitive() {
+ let query = "duct";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Duct tape.";
+
+ assert_eq!(vec!["safe, fast, productive."], search(query, contents));
+ }
+
+ #[test]
+ fn case_insensitive() {
+ let query = "rUsT";
+ let contents = "\
+Rust:
+safe, fast, productive.
+Pick three.
+Trust me.";
+
+ assert_eq!(
+ vec!["Rust:", "Trust me."],
+ search_case_insensitive(query, contents)
+ );
+ }
+}
+```
+
+Listing 12-20: Adding a new failing test for the case-insensitive function
+we’re about to add
+
+Note that we’ve edited the old test’s `contents` too. We’ve added a new line
+with the text `"Duct tape."` using a capital D that shouldn’t match the query
+`"duct"` when we’re searching in a case-sensitive manner. Changing the old test
+in this way helps ensure that we don’t accidentally break the case-sensitive
+search functionality that we’ve already implemented. This test should pass now
+and should continue to pass as we work on the case-insensitive search.
+
+The new test for the case-*insensitive* search uses `"rUsT"` as its query. In
+the `search_case_insensitive` function we’re about to add, the query `"rUsT"`
+should match the line containing `"Rust:"` with a capital R and match the line
+`"Trust me."` even though both have different casing from the query. This is
+our failing test, and it will fail to compile because we haven’t yet defined
+the `search_case_insensitive` function. Feel free to add a skeleton
+implementation that always returns an empty vector, similar to the way we did
+for the `search` function in Listing 12-16 to see the test compile and fail.
+
+### Implementing the `search_case_insensitive` Function
+
+The `search_case_insensitive` function, shown in Listing 12-21, will be almost
+the same as the `search` function. The only difference is that we’ll lowercase
+the `query` and each `line` so whatever the case of the input arguments,
+they’ll be the same case when we check whether the line contains the query.
+
+Filename: src/lib.rs
+
+```
+pub fn search_case_insensitive<'a>(
+ query: &str,
+ contents: &'a str,
+) -> Vec<&'a str> {
+ [1] let query = query.to_lowercase();
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.to_lowercase()[2].contains(&query[3]) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+```
+
+Listing 12-21: Defining the `search_case_insensitive` function to lowercase the
+query and the line before comparing them
+
+First, we lowercase the `query` string and store it in a shadowed variable with
+the same name [1]. Calling `to_lowercase` on the query is necessary so no
+matter whether the user’s query is `"rust"`, `"RUST"`, `"Rust"`, or `"rUsT"`,
+we’ll treat the query as if it were `"rust"` and be insensitive to the case.
+While `to_lowercase` will handle basic Unicode, it won’t be 100% accurate. If
+we were writing a real application, we’d want to do a bit more work here, but
+this section is about environment variables, not Unicode, so we’ll leave it at
+that here.
+
+Note that `query` is now a `String` rather than a string slice, because calling
+`to_lowercase` creates new data rather than referencing existing data. Say the
+query is `"rUsT"`, as an example: that string slice doesn’t contain a lowercase
+`u` or `t` for us to use, so we have to allocate a new `String` containing
+`"rust"`. When we pass `query` as an argument to the `contains` method now, we
+need to add an ampersand [3] because the signature of `contains` is defined to
+take a string slice.
+
+Next, we add a call to `to_lowercase` on each `line` to lowercase all
+characters [2]. Now that we’ve converted `line` and `query` to lowercase, we’ll
+find matches no matter what the case of the query is.
+
+Let’s see if this implementation passes the tests:
+
+```
+running 2 tests
+test tests::case_insensitive ... ok
+test tests::case_sensitive ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+Great! They passed. Now, let’s call the new `search_case_insensitive` function
+from the `run` function. First, we’ll add a configuration option to the
+`Config` struct to switch between case-sensitive and case-insensitive search.
+Adding this field will cause compiler errors because we aren’t initializing
+this field anywhere yet:
+
+Filename: src/lib.rs
+
+```
+pub struct Config {
+ pub query: String,
+ pub file_path: String,
+ pub ignore_case: bool,
+}
+```
+
+We added the `ignore_case` field that holds a Boolean. Next, we need the `run`
+function to check the `ignore_case` field’s value and use that to decide
+whether to call the `search` function or the `search_case_insensitive`
+function, as shown in Listing 12-22. This still won’t compile yet.
+
+Filename: src/lib.rs
+
+```
+pub fn run(config: Config) -> Result<(), Box<dyn Error>> {
+ let contents = fs::read_to_string(config.file_path)?;
+
+ let results = if config.ignore_case {
+ search_case_insensitive(&config.query, &contents)
+ } else {
+ search(&config.query, &contents)
+ };
+
+ for line in results {
+ println!("{line}");
+ }
+
+ Ok(())
+}
+```
+
+Listing 12-22: Calling either `search` or `search_case_insensitive` based on
+the value in `config.ignore_case`
+
+Finally, we need to check for the environment variable. The functions for
+working with environment variables are in the `env` module in the standard
+library, so we bring that module into scope at the top of *src/lib.rs*. Then
+we’ll use the `var` function from the `env` module to check to see if any value
+has been set for an environment variable named `IGNORE_CASE`, as shown in
+Listing 12-23.
+
+Filename: src/lib.rs
+
+```
+use std::env;
+// --snip--
+
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+```
+
+Listing 12-23: Checking for any value in an environment variable named
+`IGNORE_CASE`
+
+Here, we create a new variable `ignore_case`. To set its value, we call the
+`env::var` function and pass it the name of the `IGNORE_CASE` environment
+variable. The `env::var` function returns a `Result` that will be the
+successful `Ok` variant that contains the value of the environment variable if
+the environment variable is set to any value. It will return the `Err` variant
+if the environment variable is not set.
+
+We’re using the `is_ok` method on the `Result` to check whether the environment
+variable is set, which means the program should do a case-insensitive search.
+If the `IGNORE_CASE` environment variable isn’t set to anything, `is_ok` will
+return false and the program will perform a case-sensitive search. We don’t
+care about the *value* of the environment variable, just whether it’s set or
+unset, so we’re checking `is_ok` rather than using `unwrap`, `expect`, or any
+of the other methods we’ve seen on `Result`.
+
+We pass the value in the `ignore_case` variable to the `Config` instance so the
+`run` function can read that value and decide whether to call
+`search_case_insensitive` or `search`, as we implemented in Listing 12-22.
+
+Let’s give it a try! First, we’ll run our program without the environment
+variable set and with the query `to`, which should match any line that contains
+the word “to” in all lowercase:
+
+```
+$ cargo run -- to poem.txt
+ Compiling minigrep v0.1.0 (file:///projects/minigrep)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/minigrep to poem.txt`
+Are you nobody, too?
+How dreary to be somebody!
+```
+
+Looks like that still works! Now, let’s run the program with `IGNORE_CASE`
+set to `1` but with the same query `to`.
+
+```
+$ IGNORE_CASE=1 cargo run -- to poem.txt
+```
+
+If you’re using PowerShell, you will need to set the environment variable and
+run the program as separate commands:
+
+```
+PS> $Env:IGNORE_CASE=1; cargo run -- to poem.txt
+```
+
+This will make `IGNORE_CASE` persist for the remainder of your shell
+session. It can be unset with the `Remove-Item` cmdlet:
+
+```
+PS> Remove-Item Env:IGNORE_CASE
+```
+
+We should get lines that contain “to” that might have uppercase letters:
+
+```
+Are you nobody, too?
+How dreary to be somebody!
+To tell your name the livelong day
+To an admiring bog!
+```
+
+Excellent, we also got lines containing “To”! Our `minigrep` program can now do
+case-insensitive searching controlled by an environment variable. Now you know
+how to manage options set using either command line arguments or environment
+variables.
+
+Some programs allow arguments *and* environment variables for the same
+configuration. In those cases, the programs decide that one or the other takes
+precedence. For another exercise on your own, try controlling case sensitivity
+through either a command line argument or an environment variable. Decide
+whether the command line argument or the environment variable should take
+precedence if the program is run with one set to case sensitive and one set to
+ignore case.
+
+The `std::env` module contains many more useful features for dealing with
+environment variables: check out its documentation to see what is available.
+
+## Writing Error Messages to Standard Error Instead of Standard Output
+
+At the moment, we’re writing all of our output to the terminal using the
+`println!` macro. In most terminals, there are two kinds of output: *standard
+output* (`stdout`) for general information and *standard error* (`stderr`) for
+error messages. This distinction enables users to choose to direct the
+successful output of a program to a file but still print error messages to the
+screen.
+
+The `println!` macro is only capable of printing to standard output, so we
+have to use something else to print to standard error.
+
+### Checking Where Errors Are Written
+
+First, let’s observe how the content printed by `minigrep` is currently being
+written to standard output, including any error messages we want to write to
+standard error instead. We’ll do that by redirecting the standard output stream
+to a file while intentionally causing an error. We won’t redirect the standard
+error stream, so any content sent to standard error will continue to display on
+the screen.
+
+Command line programs are expected to send error messages to the standard error
+stream so we can still see error messages on the screen even if we redirect the
+standard output stream to a file. Our program is not currently well-behaved:
+we’re about to see that it saves the error message output to a file instead!
+
+To demonstrate this behavior, we’ll run the program with `>` and the file path,
+*output.txt*, that we want to redirect the standard output stream to. We won’t
+pass any arguments, which should cause an error:
+
+```
+$ cargo run > output.txt
+```
+
+The `>` syntax tells the shell to write the contents of standard output to
+*output.txt* instead of the screen. We didn’t see the error message we were
+expecting printed to the screen, so that means it must have ended up in the
+file. This is what *output.txt* contains:
+
+```
+Problem parsing arguments: not enough arguments
+```
+
+Yup, our error message is being printed to standard output. It’s much more
+useful for error messages like this to be printed to standard error so only
+data from a successful run ends up in the file. We’ll change that.
+
+### Printing Errors to Standard Error
+
+We’ll use the code in Listing 12-24 to change how error messages are printed.
+Because of the refactoring we did earlier in this chapter, all the code that
+prints error messages is in one function, `main`. The standard library provides
+the `eprintln!` macro that prints to the standard error stream, so let’s change
+the two places we were calling `println!` to print errors to use `eprintln!`
+instead.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ if let Err(e) = minigrep::run(config) {
+ eprintln!("Application error: {e}");
+ process::exit(1);
+ }
+}
+```
+
+Listing 12-24: Writing error messages to standard error instead of standard
+output using `eprintln!`
+
+Let’s now run the program again in the same way, without any arguments and
+redirecting standard output with `>`:
+
+```
+$ cargo run > output.txt
+Problem parsing arguments: not enough arguments
+```
+
+Now we see the error onscreen and *output.txt* contains nothing, which is the
+behavior we expect of command line programs.
+
+Let’s run the program again with arguments that don’t cause an error but still
+redirect standard output to a file, like so:
+
+```
+$ cargo run -- to poem.txt > output.txt
+```
+
+We won’t see any output to the terminal, and *output.txt* will contain our
+results:
+
+Filename: output.txt
+
+```
+Are you nobody, too?
+How dreary to be somebody!
+```
+
+This demonstrates that we’re now using standard output for successful output
+and standard error for error output as appropriate.
+
+## Summary
+
+This chapter recapped some of the major concepts you’ve learned so far and
+covered how to perform common I/O operations in Rust. By using command line
+arguments, files, environment variables, and the `eprintln!` macro for printing
+errors, you’re now prepared to write command line applications. Combined with
+the concepts in previous chapters, your code will be well organized, store data
+effectively in the appropriate data structures, handle errors nicely, and be
+well tested.
+
+Next, we’ll explore some Rust features that were influenced by functional
+languages: closures and iterators.
diff --git a/src/doc/book/nostarch/chapter13.md b/src/doc/book/nostarch/chapter13.md
new file mode 100644
index 000000000..8f7717ccb
--- /dev/null
+++ b/src/doc/book/nostarch/chapter13.md
@@ -0,0 +1,1271 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Functional Language Features: Iterators and Closures
+
+Rust’s design has taken inspiration from many existing languages and
+techniques, and one significant influence is *functional programming*.
+Programming in a functional style often includes using functions as values by
+passing them in arguments, returning them from other functions, assigning them
+to variables for later execution, and so forth.
+
+In this chapter, we won’t debate the issue of what functional programming is or
+isn’t but will instead discuss some features of Rust that are similar to
+features in many languages often referred to as functional.
+
+More specifically, we’ll cover:
+
+* *Closures*, a function-like construct you can store in a variable
+* *Iterators*, a way of processing a series of elements
+* How to use closures and iterators to improve the I/O project in Chapter 12
+* The performance of closures and iterators (Spoiler alert: they’re faster than
+ you might think!)
+
+We’ve already covered some other Rust features, such as pattern matching and
+enums, that are also influenced by the functional style. Because mastering
+closures and iterators is an important part of writing idiomatic, fast Rust
+code, we’ll devote this entire chapter to them.
+
+## Closures: Anonymous Functions that Capture Their Environment
+
+Rust’s closures are anonymous functions you can save in a variable or pass as
+arguments to other functions. You can create the closure in one place and then
+call the closure elsewhere to evaluate it in a different context. Unlike
+functions, closures can capture values from the scope in which they’re defined.
+We’ll demonstrate how these closure features allow for code reuse and behavior
+customization.
+
+### Capturing the Environment with Closures
+
+We’ll first examine how we can use closures to capture values from the
+environment they’re defined in for later use. Here’s the scenario: Every so
+often, our t-shirt company gives away an exclusive, limited-edition shirt to
+someone on our mailing list as a promotion. People on the mailing list can
+optionally add their favorite color to their profile. If the person chosen for
+a free shirt has their favorite color set, they get that color shirt. If the
+person hasn’t specified a favorite color, they get whatever color the company
+currently has the most of.
+
+There are many ways to implement this. For this example, we’re going to use an
+enum called `ShirtColor` that has the variants `Red` and `Blue` (limiting the
+number of colors available for simplicity). We represent the company’s
+inventory with an `Inventory` struct that has a field named `shirts` that
+contains a `Vec<ShirtColor>` representing the shirt colors currently in stock.
+The method `giveaway` defined on `Inventory` gets the optional shirt
+color preference of the free shirt winner, and returns the shirt color the
+person will get. This setup is shown in Listing 13-1:
+
+Filename: src/main.rs
+
+```
+#[derive(Debug, PartialEq, Copy, Clone)]
+enum ShirtColor {
+ Red,
+ Blue,
+}
+
+struct Inventory {
+ shirts: Vec<ShirtColor>,
+}
+
+impl Inventory {
+ fn giveaway(&self, user_preference: Option<ShirtColor>) -> ShirtColor {
+ user_preference.unwrap_or_else(|| self.most_stocked()) [1]
+ }
+
+ fn most_stocked(&self) -> ShirtColor {
+ let mut num_red = 0;
+ let mut num_blue = 0;
+
+ for color in &self.shirts {
+ match color {
+ ShirtColor::Red => num_red += 1,
+ ShirtColor::Blue => num_blue += 1,
+ }
+ }
+ if num_red > num_blue {
+ ShirtColor::Red
+ } else {
+ ShirtColor::Blue
+ }
+ }
+}
+
+fn main() {
+ let store = Inventory {
+ shirts: vec![ShirtColor::Blue, ShirtColor::Red, ShirtColor::Blue], [2]
+ };
+
+ let user_pref1 = Some(ShirtColor::Red);
+ let giveaway1 = store.giveaway(user_pref1); [3]
+ println!(
+ "The user with preference {:?} gets {:?}",
+ user_pref1, giveaway1
+ );
+
+ let user_pref2 = None;
+ let giveaway2 = store.giveaway(user_pref2); [4]
+ println!(
+ "The user with preference {:?} gets {:?}",
+ user_pref2, giveaway2
+ );
+}
+```
+
+Listing 13-1: Shirt company giveaway situation
+
+The `store` defined in `main` has two blue shirts and one red shirt remaining
+to distribute for this limited-edition promotion [2]. We call the `giveaway`
+method for a user with a preference for a red shirt [3] and a user without any
+preference [4].
+
+Again, this code could be implemented in many ways, and here, to focus on
+closures, we’ve stuck to concepts you’ve already learned except for the body of
+the `giveaway` method that uses a closure. In the `giveaway` method, we get the
+user preference as a parameter of type `Option<ShirtColor>` and call the
+`unwrap_or_else` method on `user_preference` [1]. The `unwrap_or_else` method on
+`Option<T>` is defined by the standard library. It takes one argument: a
+closure without any arguments that returns a value `T` (the same type stored in
+the `Some` variant of the `Option<T>`, in this case `ShirtColor`). If the
+`Option<T>` is the `Some` variant, `unwrap_or_else` returns the value from
+within the `Some`. If the `Option<T>` is the `None` variant, `unwrap_or_else`
+calls the closure and returns the value returned by the closure.
+
+We specify the closure expression `|| self.most_stocked()` as the argument to
+`unwrap_or_else`. This is a closure that takes no parameters itself (if the
+closure had parameters, they would appear between the two vertical bars). The
+body of the closure calls `self.most_stocked()`. We’re defining the closure
+here, and the implementation of `unwrap_or_else` will evaluate the closure
+later if the result is needed.
+
+Running this code prints:
+
+```
+$ cargo run
+ Compiling shirt-company v0.1.0 (file:///projects/shirt-company)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.27s
+ Running `target/debug/shirt-company`
+The user with preference Some(Red) gets Red
+The user with preference None gets Blue
+```
+
+One interesting aspect here is that we’ve passed a closure that calls
+`self.most_stocked()` on the current `Inventory` instance. The standard library
+didn’t need to know anything about the `Inventory` or `ShirtColor` types we
+defined, or the logic we want to use in this scenario. The closure captures an
+immutable reference to the `self` `Inventory` instance and passes it with the
+code we specify to the `unwrap_or_else` method. Functions, on the other hand,
+are not able to capture their environment in this way.
+
+### Closure Type Inference and Annotation
+
+There are more differences between functions and closures. Closures don’t
+usually require you to annotate the types of the parameters or the return value
+like `fn` functions do. Type annotations are required on functions because the
+types are part of an explicit interface exposed to your users. Defining this
+interface rigidly is important for ensuring that everyone agrees on what types
+of values a function uses and returns. Closures, on the other hand, aren’t used
+in an exposed interface like this: they’re stored in variables and used without
+naming them and exposing them to users of our library.
+
+Closures are typically short and relevant only within a narrow context rather
+than in any arbitrary scenario. Within these limited contexts, the compiler can
+infer the types of the parameters and the return type, similar to how it’s able
+to infer the types of most variables (there are rare cases where the compiler
+needs closure type annotations too).
+
+As with variables, we can add type annotations if we want to increase
+explicitness and clarity at the cost of being more verbose than is strictly
+necessary. Annotating the types for a closure would look like the definition
+shown in Listing 13-2. In this example, we’re defining a closure and storing it
+in a variable rather than defining the closure in the spot we pass it as an
+argument as we did in Listing 13-1.
+
+Filename: src/main.rs
+
+```
+let expensive_closure = |num: u32| -> u32 {
+ println!("calculating slowly...");
+ thread::sleep(Duration::from_secs(2));
+ num
+};
+```
+
+Listing 13-2: Adding optional type annotations of the parameter and return
+value types in the closure
+
+With type annotations added, the syntax of closures looks more similar to the
+syntax of functions. Here we define a function that adds 1 to its parameter and
+a closure that has the same behavior, for comparison. We’ve added some spaces
+to line up the relevant parts. This illustrates how closure syntax is similar
+to function syntax except for the use of pipes and the amount of syntax that is
+optional:
+
+```
+fn add_one_v1 (x: u32) -> u32 { x + 1 }
+let add_one_v2 = |x: u32| -> u32 { x + 1 };
+let add_one_v3 = |x| { x + 1 };
+let add_one_v4 = |x| x + 1 ;
+```
+
+The first line shows a function definition, and the second line shows a fully
+annotated closure definition. In the third line, we remove the type annotations
+from the closure definition. In the fourth line, we remove the brackets, which
+are optional because the closure body has only one expression. These are all
+valid definitions that will produce the same behavior when they’re called. The
+`add_one_v3` and `add_one_v4` lines require the closures to be evaluated to be
+able to compile because the types will be inferred from their usage. This is
+similar to `let v = Vec::new();` needing either type annotations or values of
+some type to be inserted into the `Vec` for Rust to be able to infer the type.
+
+For closure definitions, the compiler will infer one concrete type for each of
+their parameters and for their return value. For instance, Listing 13-3 shows
+the definition of a short closure that just returns the value it receives as a
+parameter. This closure isn’t very useful except for the purposes of this
+example. Note that we haven’t added any type annotations to the definition.
+Because there are no type annotations, we can call the closure with any type,
+which we’ve done here with `String` the first time. If we then try to call
+`example_closure` with an integer, we’ll get an error.
+
+Filename: src/main.rs
+
+```
+let example_closure = |x| x;
+
+let s = example_closure(String::from("hello"));
+let n = example_closure(5);
+```
+
+Listing 13-3: Attempting to call a closure whose types are inferred with two
+different types
+
+The compiler gives us this error:
+
+```
+error[E0308]: mismatched types
+ --> src/main.rs:5:29
+ |
+5 | let n = example_closure(5);
+ | ^- help: try using a conversion method: `.to_string()`
+ | |
+ | expected struct `String`, found integer
+```
+
+The first time we call `example_closure` with the `String` value, the compiler
+infers the type of `x` and the return type of the closure to be `String`. Those
+types are then locked into the closure in `example_closure`, and we get a type
+error when we next try to use a different type with the same closure.
+
+### Capturing References or Moving Ownership
+
+Closures can capture values from their environment in three ways, which
+directly map to the three ways a function can take a parameter: borrowing
+immutably, borrowing mutably, and taking ownership. The closure will decide
+which of these to use based on what the body of the function does with the
+captured values.
+
+In Listing 13-4, we define a closure that captures an immutable reference to
+the vector named `list` because it only needs an immutable reference to print
+the value:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let list = vec![1, 2, 3];
+ println!("Before defining closure: {:?}", list);
+
+ [1] let only_borrows = || println!("From closure: {:?}", list);
+
+ println!("Before calling closure: {:?}", list);
+ only_borrows(); [2]
+ println!("After calling closure: {:?}", list);
+}
+```
+
+Listing 13-4: Defining and calling a closure that captures an immutable
+reference
+
+This example also illustrates that a variable can bind to a closure definition
+[1], and we can later call the closure by using the variable name and
+parentheses as if the variable name were a function name [2].
+
+Because we can have multiple immutable references to `list` at the same time,
+`list` is still accessible from the code before the closure definition, after
+the closure definition but before the closure is called, and after the closure
+is called. This code compiles, runs, and prints:
+
+```
+Before defining closure: [1, 2, 3]
+Before calling closure: [1, 2, 3]
+From closure: [1, 2, 3]
+After calling closure: [1, 2, 3]
+```
+
+Next, in Listing 13-5, we change the closure body so that it adds an element to
+the `list` vector. The closure now captures a mutable reference:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut list = vec![1, 2, 3];
+ println!("Before defining closure: {:?}", list);
+
+ let mut borrows_mutably = || list.push(7);
+
+ borrows_mutably();
+ println!("After calling closure: {:?}", list);
+}
+```
+
+Listing 13-5: Defining and calling a closure that captures a mutable reference
+
+This code compiles, runs, and prints:
+
+```
+Before defining closure: [1, 2, 3]
+After calling closure: [1, 2, 3, 7]
+```
+
+Note that there’s no longer a `println!` between the definition and the call of
+the `borrows_mutably` closure: when `borrows_mutably` is defined, it captures a
+mutable reference to `list`. We don’t use the closure again after the closure
+is called, so the mutable borrow ends. Between the closure definition and the
+closure call, an immutable borrow to print isn’t allowed because no other
+borrows are allowed when there’s a mutable borrow. Try adding a `println!`
+there to see what error message you get!
+
+If you want to force the closure to take ownership of the values it uses in the
+environment even though the body of the closure doesn’t strictly need
+ownership, you can use the `move` keyword before the parameter list.
+
+This technique is mostly useful when passing a closure to a new thread to move
+the data so that it’s owned by the new thread. We’ll discuss threads and why
+you would want to use them in detail in Chapter 16 when we talk about
+concurrency, but for now, let’s briefly explore spawning a new thread using a
+closure that needs the `move` keyword. Listing 13-6 shows Listing 13-4 modified
+to print the vector in a new thread rather than in the main thread:
+
+Filename: src/main.rs
+
+```
+use std::thread;
+
+fn main() {
+ let list = vec![1, 2, 3];
+ println!("Before defining closure: {:?}", list);
+
+ [1] thread::spawn(move || {
+ [2] println!("From thread: {:?}", list)
+ }).join().unwrap();
+}
+```
+
+Listing 13-6: Using `move` to force the closure for the thread to take
+ownership of `list`
+
+We spawn a new thread, giving the thread a closure to run as an argument. The
+closure body prints out the list. In Listing 13-4, the closure only captured
+`list` using an immutable reference because that's the least amount of access
+to `list` needed to print it. In this example, even though the closure body
+still only needs an immutable reference, we need to specify that `list` should
+be moved into the closure by putting the `move` keyword at the beginning of the
+closure definition. The new thread might finish before the rest of the main
+thread finishes, or the main thread might finish first. If the main thread
+maintained ownership of `list` but ended before the new thread did and dropped
+`list`, the immutable reference in the thread would be invalid. Therefore, the
+compiler requires that `list` be moved into the closure given to the new thread
+so the reference will be valid. Try removing the `move` keyword or using `list`
+in the main thread after the closure is defined to see what compiler errors you
+get!
+
+### Moving Captured Values Out of Closures and the `Fn` Traits
+
+Once a closure has captured a reference or captured ownership of a value from
+the environment where the closure is defined (thus affecting what, if anything,
+is moved *into* the closure), the code in the body of the closure defines what
+happens to the references or values when the closure is evaluated later (thus
+affecting what, if anything, is moved *out of* the closure). A closure body can
+do any of the following: move a captured value out of the closure, mutate the
+captured value, neither move nor mutate the value, or capture nothing from the
+environment to begin with.
+
+The way a closure captures and handles values from the environment affects
+which traits the closure implements, and traits are how functions and structs
+can specify what kinds of closures they can use. Closures will automatically
+implement one, two, or all three of these `Fn` traits, in an additive fashion,
+depending on how the closure’s body handles the values:
+
+1. `FnOnce` applies to closures that can be called once. All closures implement
+ at least this trait, because all closures can be called. A closure that
+ moves captured values out of its body will only implement `FnOnce` and none
+ of the other `Fn` traits, because it can only be called once.
+2. `FnMut` applies to closures that don’t move captured values out of their
+ body, but that might mutate the captured values. These closures can be
+ called more than once.
+3. `Fn` applies to closures that don’t move captured values out of their body
+ and that don’t mutate captured values, as well as closures that capture
+ nothing from their environment. These closures can be called more than once
+ without mutating their environment, which is important in cases such as
+ calling a closure multiple times concurrently.
+
+Let’s look at the definition of the `unwrap_or_else` method on `Option<T>` that
+we used in Listing 13-1:
+
+```
+impl<T> Option<T> {
+ pub fn unwrap_or_else<F>(self, f: F) -> T
+ where
+ F: FnOnce() -> T
+ {
+ match self {
+ Some(x) => x,
+ None => f(),
+ }
+ }
+}
+```
+
+Recall that `T` is the generic type representing the type of the value in the
+`Some` variant of an `Option`. That type `T` is also the return type of the
+`unwrap_or_else` function: code that calls `unwrap_or_else` on an
+`Option<String>`, for example, will get a `String`.
+
+Next, notice that the `unwrap_or_else` function has the additional generic type
+parameter `F`. The `F` type is the type of the parameter named `f`, which is
+the closure we provide when calling `unwrap_or_else`.
+
+The trait bound specified on the generic type `F` is `FnOnce() -> T`, which
+means `F` must be able to be called once, take no arguments, and return a `T`.
+Using `FnOnce` in the trait bound expresses the constraint that
+`unwrap_or_else` is only going to call `f` at most one time. In the body of
+`unwrap_or_else`, we can see that if the `Option` is `Some`, `f` won’t be
+called. If the `Option` is `None`, `f` will be called once. Because all
+closures implement `FnOnce`, `unwrap_or_else` accepts the most different kinds
+of closures and is as flexible as it can be.
+
+> Note: Functions can implement all three of the `Fn` traits too. If what we
+> want to do doesn’t require capturing a value from the environment, we can use
+> the name of a function rather than a closure where we need something that
+> implements one of the `Fn` traits. For example, on an `Option<Vec<T>>` value,
+> we could call `unwrap_or_else(Vec::new)` to get a new, empty vector if the
+> value is `None`.
+
+Now let’s look at the standard library method `sort_by_key` defined on slices,
+to see how that differs from `unwrap_or_else` and why `sort_by_key` uses
+`FnMut` instead of `FnOnce` for the trait bound. The closure gets one argument
+in the form of a reference to the current item in the slice being considered,
+and returns a value of type `K` that can be ordered. This function is useful
+when you want to sort a slice by a particular attribute of each item. In
+Listing 13-7, we have a list of `Rectangle` instances and we use `sort_by_key`
+to order them by their `width` attribute from low to high:
+
+Filename: src/main.rs
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let mut list = [
+ Rectangle { width: 10, height: 1 },
+ Rectangle { width: 3, height: 5 },
+ Rectangle { width: 7, height: 12 },
+ ];
+
+ list.sort_by_key(|r| r.width);
+ println!("{:#?}", list);
+}
+```
+
+Listing 13-7: Using `sort_by_key` to order rectangles by width
+
+This code prints:
+
+```
+[
+ Rectangle {
+ width: 3,
+ height: 5,
+ },
+ Rectangle {
+ width: 7,
+ height: 12,
+ },
+ Rectangle {
+ width: 10,
+ height: 1,
+ },
+]
+```
+
+The reason `sort_by_key` is defined to take an `FnMut` closure is that it calls
+the closure multiple times: once for each item in the slice. The closure `|r|
+r.width` doesn’t capture, mutate, or move out anything from its environment, so
+it meets the trait bound requirements.
+
+In contrast, Listing 13-8 shows an example of a closure that implements just
+the `FnOnce` trait, because it moves a value out of the environment. The
+compiler won’t let us use this closure with `sort_by_key`:
+
+Filename: src/main.rs
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let mut list = [
+ Rectangle { width: 10, height: 1 },
+ Rectangle { width: 3, height: 5 },
+ Rectangle { width: 7, height: 12 },
+ ];
+
+ let mut sort_operations = vec![];
+ let value = String::from("by key called");
+
+ list.sort_by_key(|r| {
+ sort_operations.push(value);
+ r.width
+ });
+ println!("{:#?}", list);
+}
+```
+
+Listing 13-8: Attempting to use an `FnOnce` closure with `sort_by_key`
+
+This is a contrived, convoluted way (that doesn’t work) to try and count the
+number of times `sort_by_key` gets called when sorting `list`. This code
+attempts to do this counting by pushing `value`—a `String` from the closure’s
+environment—into the `sort_operations` vector. The closure captures `value`
+then moves `value` out of the closure by transferring ownership of `value` to
+the `sort_operations` vector. This closure can be called once; trying to call
+it a second time wouldn’t work because `value` would no longer be in the
+environment to be pushed into `sort_operations` again! Therefore, this closure
+only implements `FnOnce`. When we try to compile this code, we get this error
+that `value` can’t be moved out of the closure because the closure must
+implement `FnMut`:
+
+```
+error[E0507]: cannot move out of `value`, a captured variable in an `FnMut` closure
+ --> src/main.rs:18:30
+ |
+15 | let value = String::from("by key called");
+ | ----- captured outer variable
+16 |
+17 | list.sort_by_key(|r| {
+ | ______________________-
+18 | | sort_operations.push(value);
+ | | ^^^^^ move occurs because `value` has type `String`, which does not implement the `Copy` trait
+19 | | r.width
+20 | | });
+ | |_____- captured by this `FnMut` closure
+```
+
+The error points to the line in the closure body that moves `value` out of the
+environment. To fix this, we need to change the closure body so that it doesn’t
+move values out of the environment. To count the number of times `sort_by_key`
+is called, keeping a counter in the environment and incrementing its value in
+the closure body is a more straightforward way to calculate that. The closure
+in Listing 13-9 works with `sort_by_key` because it is only capturing a mutable
+reference to the `num_sort_operations` counter and can therefore be called more
+than once:
+
+Filename: src/main.rs
+
+```
+#[derive(Debug)]
+struct Rectangle {
+ width: u32,
+ height: u32,
+}
+
+fn main() {
+ let mut list = [
+ Rectangle { width: 10, height: 1 },
+ Rectangle { width: 3, height: 5 },
+ Rectangle { width: 7, height: 12 },
+ ];
+
+ let mut num_sort_operations = 0;
+ list.sort_by_key(|r| {
+ num_sort_operations += 1;
+ r.width
+ });
+ println!("{:#?}, sorted in {num_sort_operations} operations", list);
+}
+```
+
+Listing 13-9: Using an `FnMut` closure with `sort_by_key` is allowed
+
+The `Fn` traits are important when defining or using functions or types that
+make use of closures. In the next section, we’ll discuss iterators. Many
+iterator methods take closure arguments, so keep these closure details in mind
+as we continue!
+
+## Processing a Series of Items with Iterators
+
+The iterator pattern allows you to perform some task on a sequence of items in
+turn. An iterator is responsible for the logic of iterating over each item and
+determining when the sequence has finished. When you use iterators, you don’t
+have to reimplement that logic yourself.
+
+In Rust, iterators are *lazy*, meaning they have no effect until you call
+methods that consume the iterator to use it up. For example, the code in
+Listing 13-10 creates an iterator over the items in the vector `v1` by calling
+the `iter` method defined on `Vec<T>`. This code by itself doesn’t do anything
+useful.
+
+```
+let v1 = vec![1, 2, 3];
+
+let v1_iter = v1.iter();
+```
+
+Listing 13-10: Creating an iterator
+
+The iterator is stored in the `v1_iter` variable. Once we’ve created an
+iterator, we can use it in a variety of ways. In Listing 3-5 in Chapter 3, we
+iterated over an array using a `for` loop to execute some code on each of its
+items. Under the hood this implicitly created and then consumed an iterator,
+but we glossed over how exactly that works until now.
+
+In the example in Listing 13-11, we separate the creation of the iterator from
+the use of the iterator in the `for` loop. When the `for` loop is called using
+the iterator in `v1_iter`, each element in the iterator is used in one
+iteration of the loop, which prints out each value.
+
+```
+let v1 = vec![1, 2, 3];
+
+let v1_iter = v1.iter();
+
+for val in v1_iter {
+ println!("Got: {}", val);
+}
+```
+
+Listing 13-11: Using an iterator in a `for` loop
+
+In languages that don’t have iterators provided by their standard libraries,
+you would likely write this same functionality by starting a variable at index
+0, using that variable to index into the vector to get a value, and
+incrementing the variable value in a loop until it reached the total number of
+items in the vector.
+
+Iterators handle all that logic for you, cutting down on repetitive code you
+could potentially mess up. Iterators give you more flexibility to use the same
+logic with many different kinds of sequences, not just data structures you can
+index into, like vectors. Let’s examine how iterators do that.
+
+### The `Iterator` Trait and the `next` Method
+
+All iterators implement a trait named `Iterator` that is defined in the
+standard library. The definition of the trait looks like this:
+
+```
+pub trait Iterator {
+ type Item;
+
+ fn next(&mut self) -> Option<Self::Item>;
+
+ // methods with default implementations elided
+}
+```
+
+Notice this definition uses some new syntax: `type Item` and `Self::Item`,
+which are defining an *associated type* with this trait. We’ll talk about
+associated types in depth in Chapter 19. For now, all you need to know is that
+this code says implementing the `Iterator` trait requires that you also define
+an `Item` type, and this `Item` type is used in the return type of the `next`
+method. In other words, the `Item` type will be the type returned from the
+iterator.
+
+The `Iterator` trait only requires implementors to define one method: the
+`next` method, which returns one item of the iterator at a time wrapped in
+`Some` and, when iteration is over, returns `None`.
+
+We can call the `next` method on iterators directly; Listing 13-12 demonstrates
+what values are returned from repeated calls to `next` on the iterator created
+from the vector.
+
+Filename: src/lib.rs
+
+```
+#[test]
+fn iterator_demonstration() {
+ let v1 = vec![1, 2, 3];
+
+ let mut v1_iter = v1.iter();
+
+ assert_eq!(v1_iter.next(), Some(&1));
+ assert_eq!(v1_iter.next(), Some(&2));
+ assert_eq!(v1_iter.next(), Some(&3));
+ assert_eq!(v1_iter.next(), None);
+}
+```
+
+Listing 13-12: Calling the `next` method on an iterator
+
+Note that we needed to make `v1_iter` mutable: calling the `next` method on an
+iterator changes internal state that the iterator uses to keep track of where
+it is in the sequence. In other words, this code *consumes*, or uses up, the
+iterator. Each call to `next` eats up an item from the iterator. We didn’t need
+to make `v1_iter` mutable when we used a `for` loop because the loop took
+ownership of `v1_iter` and made it mutable behind the scenes.
+
+Also note that the values we get from the calls to `next` are immutable
+references to the values in the vector. The `iter` method produces an iterator
+over immutable references. If we want to create an iterator that takes
+ownership of `v1` and returns owned values, we can call `into_iter` instead of
+`iter`. Similarly, if we want to iterate over mutable references, we can call
+`iter_mut` instead of `iter`.
+
+### Methods that Consume the Iterator
+
+The `Iterator` trait has a number of different methods with default
+implementations provided by the standard library; you can find out about these
+methods by looking in the standard library API documentation for the `Iterator`
+trait. Some of these methods call the `next` method in their definition, which
+is why you’re required to implement the `next` method when implementing the
+`Iterator` trait.
+
+Methods that call `next` are called *consuming adaptors*, because calling them
+uses up the iterator. One example is the `sum` method, which takes ownership of
+the iterator and iterates through the items by repeatedly calling `next`, thus
+consuming the iterator. As it iterates through, it adds each item to a running
+total and returns the total when iteration is complete. Listing 13-13 has a
+test illustrating a use of the `sum` method:
+
+Filename: src/lib.rs
+
+```
+#[test]
+fn iterator_sum() {
+ let v1 = vec![1, 2, 3];
+
+ let v1_iter = v1.iter();
+
+ let total: i32 = v1_iter.sum();
+
+ assert_eq!(total, 6);
+}
+```
+
+Listing 13-13: Calling the `sum` method to get the total of all items in the
+iterator
+
+We aren’t allowed to use `v1_iter` after the call to `sum` because `sum` takes
+ownership of the iterator we call it on.
+
+### Methods that Produce Other Iterators
+
+*Iterator adaptors* are methods defined on the `Iterator` trait that don’t
+consume the iterator. Instead, they produce different iterators by changing
+some aspect of the original iterator.
+
+Listing 13-17 shows an example of calling the iterator adaptor method `map`,
+which takes a closure to call on each item as the items are iterated through.
+The `map` method returns a new iterator that produces the modified items. The
+closure here creates a new iterator in which each item from the vector will be
+incremented by 1:
+
+Filename: src/main.rs
+
+```
+let v1: Vec<i32> = vec![1, 2, 3];
+
+v1.iter().map(|x| x + 1);
+```
+
+Listing 13-14: Calling the iterator adaptor `map` to create a new iterator
+
+However, this code produces a warning:
+
+```
+warning: unused `Map` that must be used
+ --> src/main.rs:4:5
+ |
+4 | v1.iter().map(|x| x + 1);
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(unused_must_use)]` on by default
+ = note: iterators are lazy and do nothing unless consumed
+```
+
+The code in Listing 13-14 doesn’t do anything; the closure we’ve specified
+never gets called. The warning reminds us why: iterator adaptors are lazy, and
+we need to consume the iterator here.
+
+To fix this warning and consume the iterator, we’ll use the `collect` method,
+which we used in Chapter 12 with `env::args` in Listing 12-1. This method
+consumes the iterator and collects the resulting values into a collection data
+type.
+
+In Listing 13-15, we collect the results of iterating over the iterator that’s
+returned from the call to `map` into a vector. This vector will end up
+containing each item from the original vector incremented by 1.
+
+Filename: src/main.rs
+
+```
+let v1: Vec<i32> = vec![1, 2, 3];
+
+let v2: Vec<_> = v1.iter().map(|x| x + 1).collect();
+
+assert_eq!(v2, vec![2, 3, 4]);
+```
+
+Listing 13-15: Calling the `map` method to create a new iterator and then
+calling the `collect` method to consume the new iterator and create a vector
+
+Because `map` takes a closure, we can specify any operation we want to perform
+on each item. This is a great example of how closures let you customize some
+behavior while reusing the iteration behavior that the `Iterator` trait
+provides.
+
+You can chain multiple calls to iterator adaptors to perform complex actions in
+a readable way. But because all iterators are lazy, you have to call one of the
+consuming adaptor methods to get results from calls to iterator adaptors.
+
+### Using Closures that Capture Their Environment
+
+Many iterator adapters take closures as arguments, and commonly the closures
+we’ll specify as arguments to iterator adapters will be closures that capture
+their environment.
+
+For this example, we’ll use the `filter` method that takes a closure. The
+closure gets an item from the iterator and returns a `bool`. If the closure
+returns `true`, the value will be included in the iteration produced by
+`filter`. If the closure returns `false`, the value won’t be included.
+
+In Listing 13-16, we use `filter` with a closure that captures the `shoe_size`
+variable from its environment to iterate over a collection of `Shoe` struct
+instances. It will return only shoes that are the specified size.
+
+Filename: src/lib.rs
+
+```
+#[derive(PartialEq, Debug)]
+struct Shoe {
+ size: u32,
+ style: String,
+}
+
+fn shoes_in_size(shoes: Vec<Shoe>, shoe_size: u32) -> Vec<Shoe> {
+ shoes.into_iter().filter(|s| s.size == shoe_size).collect()
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn filters_by_size() {
+ let shoes = vec![
+ Shoe {
+ size: 10,
+ style: String::from("sneaker"),
+ },
+ Shoe {
+ size: 13,
+ style: String::from("sandal"),
+ },
+ Shoe {
+ size: 10,
+ style: String::from("boot"),
+ },
+ ];
+
+ let in_my_size = shoes_in_size(shoes, 10);
+
+ assert_eq!(
+ in_my_size,
+ vec![
+ Shoe {
+ size: 10,
+ style: String::from("sneaker")
+ },
+ Shoe {
+ size: 10,
+ style: String::from("boot")
+ },
+ ]
+ );
+ }
+}
+```
+
+Listing 13-16: Using the `filter` method with a closure that captures
+`shoe_size`
+
+The `shoes_in_size` function takes ownership of a vector of shoes and a shoe
+size as parameters. It returns a vector containing only shoes of the specified
+size.
+
+In the body of `shoes_in_size`, we call `into_iter` to create an iterator
+that takes ownership of the vector. Then we call `filter` to adapt that
+iterator into a new iterator that only contains elements for which the closure
+returns `true`.
+
+The closure captures the `shoe_size` parameter from the environment and
+compares the value with each shoe’s size, keeping only shoes of the size
+specified. Finally, calling `collect` gathers the values returned by the
+adapted iterator into a vector that’s returned by the function.
+
+The test shows that when we call `shoes_in_size`, we get back only shoes
+that have the same size as the value we specified.
+
+## Improving Our I/O Project
+
+With this new knowledge about iterators, we can improve the I/O project in
+Chapter 12 by using iterators to make places in the code clearer and more
+concise. Let’s look at how iterators can improve our implementation of the
+`Config::build` function and the `search` function.
+
+### Removing a `clone` Using an Iterator
+
+In Listing 12-6, we added code that took a slice of `String` values and created
+an instance of the `Config` struct by indexing into the slice and cloning the
+values, allowing the `Config` struct to own those values. In Listing 13-17,
+we’ve reproduced the implementation of the `Config::build` function as it was
+in Listing 12-23:
+
+Filename: src/lib.rs
+
+```
+impl Config {
+ pub fn build(args: &[String]) -> Result<Config, &'static str> {
+ if args.len() < 3 {
+ return Err("not enough arguments");
+ }
+
+ let query = args[1].clone();
+ let file_path = args[2].clone();
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+```
+
+Listing 13-17: Reproduction of the `Config::build` function from Listing 12-23
+
+At the time, we said not to worry about the inefficient `clone` calls because
+we would remove them in the future. Well, that time is now!
+
+We needed `clone` here because we have a slice with `String` elements in the
+parameter `args`, but the `build` function doesn’t own `args`. To return
+ownership of a `Config` instance, we had to clone the values from the `query`
+and `filename` fields of `Config` so the `Config` instance can own its values.
+
+With our new knowledge about iterators, we can change the `build` function to
+take ownership of an iterator as its argument instead of borrowing a slice.
+We’ll use the iterator functionality instead of the code that checks the length
+of the slice and indexes into specific locations. This will clarify what the
+`Config::build` function is doing because the iterator will access the values.
+
+Once `Config::build` takes ownership of the iterator and stops using indexing
+operations that borrow, we can move the `String` values from the iterator into
+`Config` rather than calling `clone` and making a new allocation.
+
+#### Using the Returned Iterator Directly
+
+Open your I/O project’s *src/main.rs* file, which should look like this:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ let config = Config::build(&args).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // --snip--
+}
+```
+
+We’ll first change the start of the `main` function that we had in Listing
+12-24 to the code in Listing 13-18, which this time uses an iterator. This
+won’t compile until we update `Config::build` as well.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let config = Config::build(env::args()).unwrap_or_else(|err| {
+ eprintln!("Problem parsing arguments: {err}");
+ process::exit(1);
+ });
+
+ // --snip--
+}
+```
+
+Listing 13-18: Passing the return value of `env::args` to `Config::build`
+
+The `env::args` function returns an iterator! Rather than collecting the
+iterator values into a vector and then passing a slice to `Config::build`, now
+we’re passing ownership of the iterator returned from `env::args` to
+`Config::build` directly.
+
+Next, we need to update the definition of `Config::build`. In your I/O
+project’s *src/lib.rs* file, let’s change the signature of `Config::build` to
+look like Listing 13-19. This still won’t compile because we need to update the
+function body.
+
+Filename: src/lib.rs
+
+```
+impl Config {
+ pub fn build(
+ mut args: impl Iterator<Item = String>,
+ ) -> Result<Config, &'static str> {
+ // --snip--
+```
+
+Listing 13-19: Updating the signature of `Config::build` to expect an iterator
+
+The standard library documentation for the `env::args` function shows that the
+type of the iterator it returns is `std::env::Args`, and that type implements
+the `Iterator` trait and returns `String` values.
+
+We’ve updated the signature of the `Config::build` function so the parameter
+`args` has a generic type with the trait bounds `impl Iterator<Item = String>`
+instead of `&[String]`. This usage of the `impl Trait` syntax we discussed in
+the “Traits as Parameters” section of Chapter 10 means that `args` can be any
+type that implements the `Iterator` type and returns `String` items.
+
+Because we’re taking ownership of `args` and we’ll be mutating `args` by
+iterating over it, we can add the `mut` keyword into the specification of the
+`args` parameter to make it mutable.
+
+#### Using `Iterator` Trait Methods Instead of Indexing
+
+Next, we’ll fix the body of `Config::build`. Because `args` implements the
+`Iterator` trait, we know we can call the `next` method on it! Listing 13-20
+updates the code from Listing 12-23 to use the `next` method:
+
+Filename: src/lib.rs
+
+```
+impl Config {
+ pub fn build(
+ mut args: impl Iterator<Item = String>,
+ ) -> Result<Config, &'static str> {
+ args.next();
+
+ let query = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Didn't get a query string"),
+ };
+
+ let file_path = match args.next() {
+ Some(arg) => arg,
+ None => return Err("Didn't get a file path"),
+ };
+
+ let ignore_case = env::var("IGNORE_CASE").is_ok();
+
+ Ok(Config {
+ query,
+ file_path,
+ ignore_case,
+ })
+ }
+}
+```
+
+Listing 13-20: Changing the body of `Config::build` to use iterator methods
+
+Remember that the first value in the return value of `env::args` is the name of
+the program. We want to ignore that and get to the next value, so first we call
+`next` and do nothing with the return value. Second, we call `next` to get the
+value we want to put in the `query` field of `Config`. If `next` returns a
+`Some`, we use a `match` to extract the value. If it returns `None`, it means
+not enough arguments were given and we return early with an `Err` value. We do
+the same thing for the `filename` value.
+
+### Making Code Clearer with Iterator Adaptors
+
+We can also take advantage of iterators in the `search` function in our I/O
+project, which is reproduced here in Listing 13-21 as it was in Listing 12-19:
+
+Filename: src/lib.rs
+
+```
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ let mut results = Vec::new();
+
+ for line in contents.lines() {
+ if line.contains(query) {
+ results.push(line);
+ }
+ }
+
+ results
+}
+```
+
+Listing 13-21: The implementation of the `search` function from Listing 12-19
+
+We can write this code in a more concise way using iterator adaptor methods.
+Doing so also lets us avoid having a mutable intermediate `results` vector. The
+functional programming style prefers to minimize the amount of mutable state to
+make code clearer. Removing the mutable state might enable a future enhancement
+to make searching happen in parallel, because we wouldn’t have to manage
+concurrent access to the `results` vector. Listing 13-22 shows this change:
+
+Filename: src/lib.rs
+
+```
+pub fn search<'a>(query: &str, contents: &'a str) -> Vec<&'a str> {
+ contents
+ .lines()
+ .filter(|line| line.contains(query))
+ .collect()
+}
+```
+
+Listing 13-22: Using iterator adaptor methods in the implementation of the
+`search` function
+
+Recall that the purpose of the `search` function is to return all lines in
+`contents` that contain the `query`. Similar to the `filter` example in Listing
+13-16, this code uses the `filter` adaptor to keep only the lines that
+`line.contains(query)` returns `true` for. We then collect the matching lines
+into another vector with `collect`. Much simpler! Feel free to make the same
+change to use iterator methods in the `search_case_insensitive` function as
+well.
+
+### Choosing Between Loops or Iterators
+
+The next logical question is which style you should choose in your own code and
+why: the original implementation in Listing 13-21 or the version using
+iterators in Listing 13-22. Most Rust programmers prefer to use the iterator
+style. It’s a bit tougher to get the hang of at first, but once you get a feel
+for the various iterator adaptors and what they do, iterators can be easier to
+understand. Instead of fiddling with the various bits of looping and building
+new vectors, the code focuses on the high-level objective of the loop. This
+abstracts away some of the commonplace code so it’s easier to see the concepts
+that are unique to this code, such as the filtering condition each element in
+the iterator must pass.
+
+But are the two implementations truly equivalent? The intuitive assumption
+might be that the more low-level loop will be faster. Let’s talk about
+performance.
+
+## Comparing Performance: Loops vs. Iterators
+
+To determine whether to use loops or iterators, you need to know which
+implementation is faster: the version of the `search` function with an explicit
+`for` loop or the version with iterators.
+
+We ran a benchmark by loading the entire contents of *The Adventures of
+Sherlock Holmes* by Sir Arthur Conan Doyle into a `String` and looking for the
+word *the* in the contents. Here are the results of the benchmark on the
+version of `search` using the `for` loop and the version using iterators:
+
+```
+test bench_search_for ... bench: 19,620,300 ns/iter (+/- 915,700)
+test bench_search_iter ... bench: 19,234,900 ns/iter (+/- 657,200)
+```
+
+The iterator version was slightly faster! We won’t explain the benchmark code
+here, because the point is not to prove that the two versions are equivalent
+but to get a general sense of how these two implementations compare
+performance-wise.
+
+For a more comprehensive benchmark, you should check using various texts of
+various sizes as the `contents`, different words and words of different lengths
+as the `query`, and all kinds of other variations. The point is this:
+iterators, although a high-level abstraction, get compiled down to roughly the
+same code as if you’d written the lower-level code yourself. Iterators are one
+of Rust’s *zero-cost abstractions*, by which we mean using the abstraction
+imposes no additional runtime overhead. This is analogous to how Bjarne
+Stroustrup, the original designer and implementor of C++, defines
+*zero-overhead* in “Foundations of C++” (2012):
+
+> In general, C++ implementations obey the zero-overhead principle: What you
+> don’t use, you don’t pay for. And further: What you do use, you couldn’t hand
+> code any better.
+
+As another example, the following code is taken from an audio decoder. The
+decoding algorithm uses the linear prediction mathematical operation to
+estimate future values based on a linear function of the previous samples. This
+code uses an iterator chain to do some math on three variables in scope: a
+`buffer` slice of data, an array of 12 `coefficients`, and an amount by which
+to shift data in `qlp_shift`. We’ve declared the variables within this example
+but not given them any values; although this code doesn’t have much meaning
+outside of its context, it’s still a concise, real-world example of how Rust
+translates high-level ideas to low-level code.
+
+```
+let buffer: &mut [i32];
+let coefficients: [i64; 12];
+let qlp_shift: i16;
+
+for i in 12..buffer.len() {
+ let prediction = coefficients.iter()
+ .zip(&buffer[i - 12..i])
+ .map(|(&c, &s)| c * s as i64)
+ .sum::<i64>() >> qlp_shift;
+ let delta = buffer[i];
+ buffer[i] = prediction as i32 + delta;
+}
+```
+
+To calculate the value of `prediction`, this code iterates through each of the
+12 values in `coefficients` and uses the `zip` method to pair the coefficient
+values with the previous 12 values in `buffer`. Then, for each pair, we
+multiply the values together, sum all the results, and shift the bits in the
+sum `qlp_shift` bits to the right.
+
+Calculations in applications like audio decoders often prioritize performance
+most highly. Here, we’re creating an iterator, using two adaptors, and then
+consuming the value. What assembly code would this Rust code compile to? Well,
+as of this writing, it compiles down to the same assembly you’d write by hand.
+There’s no loop at all corresponding to the iteration over the values in
+`coefficients`: Rust knows that there are 12 iterations, so it “unrolls” the
+loop. *Unrolling* is an optimization that removes the overhead of the loop
+controlling code and instead generates repetitive code for each iteration of
+the loop.
+
+All of the coefficients get stored in registers, which means accessing the
+values is very fast. There are no bounds checks on the array access at runtime.
+All these optimizations that Rust is able to apply make the resulting code
+extremely efficient. Now that you know this, you can use iterators and closures
+without fear! They make code seem like it’s higher level but don’t impose a
+runtime performance penalty for doing so.
+
+## Summary
+
+Closures and iterators are Rust features inspired by functional programming
+language ideas. They contribute to Rust’s capability to clearly express
+high-level ideas at low-level performance. The implementations of closures and
+iterators are such that runtime performance is not affected. This is part of
+Rust’s goal to strive to provide zero-cost abstractions.
+
+Now that we’ve improved the expressiveness of our I/O project, let’s look at
+some more features of `cargo` that will help us share the project with the
+world.
diff --git a/src/doc/book/nostarch/chapter14.md b/src/doc/book/nostarch/chapter14.md
new file mode 100644
index 000000000..076410232
--- /dev/null
+++ b/src/doc/book/nostarch/chapter14.md
@@ -0,0 +1,1044 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# More About Cargo and Crates.io
+
+So far we’ve used only the most basic features of Cargo to build, run, and test
+our code, but it can do a lot more. In this chapter, we’ll discuss some of its
+other, more advanced features to show you how to do the following:
+
+* Customize your build through release profiles
+* Publish libraries on *https://crates.io/*
+* Organize large projects with workspaces
+* Install binaries from *https://crates.io/*
+* Extend Cargo using custom commands
+
+Cargo can do even more than the functionality we cover in this chapter, so for
+a full explanation of all its features, see its documentation at
+*https://doc.rust-lang.org/cargo/*.
+
+## Customizing Builds with Release Profiles
+
+In Rust, *release profiles* are predefined and customizable profiles with
+different configurations that allow a programmer to have more control over
+various options for compiling code. Each profile is configured independently of
+the others.
+
+Cargo has two main profiles: the `dev` profile Cargo uses when you run `cargo
+build` and the `release` profile Cargo uses when you run `cargo build
+--release`. The `dev` profile is defined with good defaults for development,
+and the `release` profile has good defaults for release builds.
+
+These profile names might be familiar from the output of your builds:
+
+```
+$ cargo build
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+$ cargo build --release
+ Finished release [optimized] target(s) in 0.0s
+```
+
+The `dev` and `release` are these different profiles used by the compiler.
+
+Cargo has default settings for each of the profiles that apply when you haven't
+explicitly added any `[profile.*]` sections in the project’s *Cargo.toml* file.
+By adding `[profile.*]` sections for any profile you want to customize, you
+override any subset of the default settings. For example, here are the default
+values for the `opt-level` setting for the `dev` and `release` profiles:
+
+Filename: Cargo.toml
+
+```
+[profile.dev]
+opt-level = 0
+
+[profile.release]
+opt-level = 3
+```
+
+The `opt-level` setting controls the number of optimizations Rust will apply to
+your code, with a range of 0 to 3. Applying more optimizations extends
+compiling time, so if you’re in development and compiling your code often,
+you’ll want fewer optimizations to compile faster even if the resulting code
+runs slower. The default `opt-level` for `dev` is therefore `0`. When you’re
+ready to release your code, it’s best to spend more time compiling. You’ll only
+compile in release mode once, but you’ll run the compiled program many times,
+so release mode trades longer compile time for code that runs faster. That is
+why the default `opt-level` for the `release` profile is `3`.
+
+You can override a default setting by adding a different value for it in
+*Cargo.toml*. For example, if we want to use optimization level 1 in the
+development profile, we can add these two lines to our project’s *Cargo.toml*
+file:
+
+Filename: Cargo.toml
+
+```
+[profile.dev]
+opt-level = 1
+```
+
+This code overrides the default setting of `0`. Now when we run `cargo build`,
+Cargo will use the defaults for the `dev` profile plus our customization to
+`opt-level`. Because we set `opt-level` to `1`, Cargo will apply more
+optimizations than the default, but not as many as in a release build.
+
+For the full list of configuration options and defaults for each profile, see
+Cargo’s documentation at *https://doc.rust-lang.org/cargo/reference/profiles.html*.
+
+## Publishing a Crate to Crates.io
+
+We’ve used packages from *https://crates.io/* as dependencies of our project,
+but you can also share your code with other people by publishing your own
+packages. The crate registry at *https://crates.io* distributes the source code
+of your packages, so it primarily hosts code that is open source.
+
+Rust and Cargo have features that make your published package easier for people
+to find and use. We’ll talk about some of these features next and then explain
+how to publish a package.
+
+### Making Useful Documentation Comments
+
+Accurately documenting your packages will help other users know how and when to
+use them, so it’s worth investing the time to write documentation. In Chapter
+3, we discussed how to comment Rust code using two slashes, `//`. Rust also has
+a particular kind of comment for documentation, known conveniently as a
+*documentation comment*, that will generate HTML documentation. The HTML
+displays the contents of documentation comments for public API items intended
+for programmers interested in knowing how to *use* your crate as opposed to how
+your crate is *implemented*.
+
+Documentation comments use three slashes, `///`, instead of two and support
+Markdown notation for formatting the text. Place documentation comments just
+before the item they’re documenting. Listing 14-1 shows documentation comments
+for an `add_one` function in a crate named `my_crate`.
+
+Filename: src/lib.rs
+
+````
+/// Adds one to the number given.
+///
+/// # Examples
+///
+/// ```
+/// let arg = 5;
+/// let answer = my_crate::add_one(arg);
+///
+/// assert_eq!(6, answer);
+/// ```
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
+````
+
+Listing 14-1: A documentation comment for a function
+
+<!-- I removed two sets of ``` here because it was inverting the text and code
+formatting, but you may want to check that I have't changed meaning in the
+code! /LC -->
+<!-- Yeah, those need to be in there. It's definitely weird that it's a code
+block inside of a code block-- I think I've fixed it by adding more ` around
+the outer block, but I'll check it again when we're in Word. /Carol -->
+
+Here, we give a description of what the `add_one` function does, start a
+section with the heading `Examples`, and then provide code that demonstrates
+how to use the `add_one` function. We can generate the HTML documentation from
+this documentation comment by running `cargo doc`. This command runs the
+`rustdoc` tool distributed with Rust and puts the generated HTML documentation
+in the *target/doc* directory.
+
+For convenience, running `cargo doc --open` will build the HTML for your
+current crate’s documentation (as well as the documentation for all of your
+crate’s dependencies) and open the result in a web browser. Navigate to the
+`add_one` function and you’ll see how the text in the documentation comments is
+rendered, as shown in Figure 14-1:
+
+<img alt="Rendered HTML documentation for the `add_one` function of `my_crate`" src="img/trpl14-01.png" class="center" />
+
+Figure 14-1: HTML documentation for the `add_one` function
+
+#### Commonly Used Sections
+
+We used the `# Examples` Markdown heading in Listing 14-1 to create a section
+in the HTML with the title “Examples.” Here are some other sections that crate
+authors commonly use in their documentation:
+
+* **Panics**: The scenarios in which the function being documented could
+ panic. Callers of the function who don’t want their programs to panic should
+ make sure they don’t call the function in these situations.
+* **Errors**: If the function returns a `Result`, describing the kinds of
+ errors that might occur and what conditions might cause those errors to be
+ returned can be helpful to callers so they can write code to handle the
+ different kinds of errors in different ways.
+* **Safety**: If the function is `unsafe` to call (we discuss unsafety in
+ Chapter 19), there should be a section explaining why the function is unsafe
+ and covering the invariants that the function expects callers to uphold.
+
+Most documentation comments don’t need all of these sections, but this is a
+good checklist to remind you of the aspects of your code users will be
+interested in knowing about.
+
+#### Documentation Comments as Tests
+
+Adding example code blocks in your documentation comments can help demonstrate
+how to use your library, and doing so has an additional bonus: running `cargo
+test` will run the code examples in your documentation as tests! Nothing is
+better than documentation with examples. But nothing is worse than examples
+that don’t work because the code has changed since the documentation was
+written. If we run `cargo test` with the documentation for the `add_one`
+function from Listing 14-1, we will see a section in the test results like this:
+
+```
+ Doc-tests my_crate
+
+running 1 test
+test src/lib.rs - add_one (line 5) ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.27s
+```
+
+Now if we change either the function or the example so the `assert_eq!` in the
+example panics and run `cargo test` again, we’ll see that the doc tests catch
+that the example and the code are out of sync with each other!
+
+#### Commenting Contained Items
+
+The style of doc comment `//!` adds documentation to the item that contains the
+comments rather than to the items following the comments. We typically use
+these doc comments inside the crate root file (*src/lib.rs* by convention) or
+inside a module to document the crate or the module as a whole.
+
+For example, to add documentation that describes the purpose of the `my_crate`
+crate that contains the `add_one` function, we add documentation comments that
+start with `//!` to the beginning of the *src/lib.rs* file, as shown in Listing
+14-2:
+
+Filename: src/lib.rs
+
+```
+//! # My Crate
+//!
+//! `my_crate` is a collection of utilities to make performing certain
+//! calculations more convenient.
+
+/// Adds one to the number given.
+// --snip--
+```
+
+Listing 14-2: Documentation for the `my_crate` crate as a whole
+
+Notice there isn’t any code after the last line that begins with `//!`. Because
+we started the comments with `//!` instead of `///`, we’re documenting the item
+that contains this comment rather than an item that follows this comment. In
+this case, that item is the *src/lib.rs* file, which is the crate root. These
+comments describe the entire crate.
+
+When we run `cargo doc --open`, these comments will display on the front
+page of the documentation for `my_crate` above the list of public items in the
+crate, as shown in Figure 14-2:
+
+<img alt="Rendered HTML documentation with a comment for the crate as a whole" src="img/trpl14-02.png" class="center" />
+
+Figure 14-2: Rendered documentation for `my_crate`, including the comment
+describing the crate as a whole
+
+Documentation comments within items are useful for describing crates and
+modules especially. Use them to explain the overall purpose of the container to
+help your users understand the crate’s organization.
+
+### Exporting a Convenient Public API with `pub use`
+
+The structure of your public API is a major consideration when publishing a
+crate. People who use your crate are less familiar with the structure than you
+are and might have difficulty finding the pieces they want to use if your crate
+has a large module hierarchy.
+
+In Chapter 7, we covered how to make items public using the `pub` keyword, and
+bring items into a scope with the `use` keyword. However, the structure that
+makes sense to you while you’re developing a crate might not be very convenient
+for your users. You might want to organize your structs in a hierarchy
+containing multiple levels, but then people who want to use a type you’ve
+defined deep in the hierarchy might have trouble finding out that type exists.
+They might also be annoyed at having to enter `use`
+`my_crate::some_module::another_module::UsefulType;` rather than `use`
+`my_crate::UsefulType;`.
+
+The good news is that if the structure *isn’t* convenient for others to use
+from another library, you don’t have to rearrange your internal organization:
+instead, you can re-export items to make a public structure that’s different
+from your private structure by using `pub use`. Re-exporting takes a public
+item in one location and makes it public in another location, as if it were
+defined in the other location instead.
+
+For example, say we made a library named `art` for modeling artistic concepts.
+Within this library are two modules: a `kinds` module containing two enums
+named `PrimaryColor` and `SecondaryColor` and a `utils` module containing a
+function named `mix`, as shown in Listing 14-3:
+
+Filename: src/lib.rs
+
+```
+//! # Art
+//!
+//! A library for modeling artistic concepts.
+
+pub mod kinds {
+ /// The primary colors according to the RYB color model.
+ pub enum PrimaryColor {
+ Red,
+ Yellow,
+ Blue,
+ }
+
+ /// The secondary colors according to the RYB color model.
+ pub enum SecondaryColor {
+ Orange,
+ Green,
+ Purple,
+ }
+}
+
+pub mod utils {
+ use crate::kinds::*;
+
+ /// Combines two primary colors in equal amounts to create
+ /// a secondary color.
+ pub fn mix(c1: PrimaryColor, c2: PrimaryColor) -> SecondaryColor {
+ // --snip--
+ }
+}
+```
+
+Listing 14-3: An `art` library with items organized into `kinds` and `utils`
+modules
+
+Figure 14-3 shows what the front page of the documentation for this crate
+generated by `cargo doc` would look like:
+
+<img alt="Rendered documentation for the `art` crate that lists the `kinds` and `utils` modules" src="img/trpl14-03.png" class="center" />
+
+Figure 14-3: Front page of the documentation for `art` that lists the `kinds`
+and `utils` modules
+
+Note that the `PrimaryColor` and `SecondaryColor` types aren’t listed on the
+front page, nor is the `mix` function. We have to click `kinds` and `utils` to
+see them.
+
+Another crate that depends on this library would need `use` statements that
+bring the items from `art` into scope, specifying the module structure that’s
+currently defined. Listing 14-4 shows an example of a crate that uses the
+`PrimaryColor` and `mix` items from the `art` crate:
+
+Filename: src/main.rs
+
+```
+use art::kinds::PrimaryColor;
+use art::utils::mix;
+
+fn main() {
+ let red = PrimaryColor::Red;
+ let yellow = PrimaryColor::Yellow;
+ mix(red, yellow);
+}
+```
+
+Listing 14-4: A crate using the `art` crate’s items with its internal structure
+exported
+
+The author of the code in Listing 14-4, which uses the `art` crate, had to
+figure out that `PrimaryColor` is in the `kinds` module and `mix` is in the
+`utils` module. The module structure of the `art` crate is more relevant to
+developers working on the `art` crate than to those using it. The internal
+structure doesn’t contain any useful information for someone trying to
+understand how to use the `art` crate, but rather causes confusion because
+developers who use it have to figure out where to look, and must specify the
+module names in the `use` statements.
+
+To remove the internal organization from the public API, we can modify the
+`art` crate code in Listing 14-3 to add `pub use` statements to re-export the
+items at the top level, as shown in Listing 14-5:
+
+Filename: src/lib.rs
+
+```
+//! # Art
+//!
+//! A library for modeling artistic concepts.
+
+pub use self::kinds::PrimaryColor;
+pub use self::kinds::SecondaryColor;
+pub use self::utils::mix;
+
+pub mod kinds {
+ // --snip--
+}
+
+pub mod utils {
+ // --snip--
+}
+```
+
+<!-- The example feels a tiny bit awkward. If you're
+going to use `pub use`, in my experience it's probably going
+to happen when you're pulling in definitions from sub-crates.
+In this one, we create modules that we export and also
+re-export symbols from those same modules. In practice,
+you'd probably use sub-crates or move the definitions around. /JT -->
+<!-- I don't want to get into sub-crates here, but I've added a sentence about
+this common usage in the second-to-last paragraph of this section. /Carol -->
+
+Listing 14-5: Adding `pub use` statements to re-export items
+
+The API documentation that `cargo doc` generates for this crate will now list
+and link re-exports on the front page, as shown in Figure 14-4, making the
+`PrimaryColor` and `SecondaryColor` types and the `mix` function easier to find.
+
+<img alt="Rendered documentation for the `art` crate with the re-exports on the front page" src="img/trpl14-04.png" class="center" />
+
+Figure 14-4: The front page of the documentation for `art`
+that lists the re-exports
+
+The `art` crate users can still see and use the internal structure from Listing
+14-3 as demonstrated in Listing 14-4, or they can use the more convenient
+structure in Listing 14-5, as shown in Listing 14-6:
+
+Filename: src/main.rs
+
+```
+use art::mix;
+use art::PrimaryColor;
+
+fn main() {
+ // --snip--
+}
+```
+
+Listing 14-6: A program using the re-exported items from the `art` crate
+
+In cases where there are many nested modules, re-exporting the types at the top
+level with `pub use` can make a significant difference in the experience of
+people who use the crate. Another common use of `pub use` is to re-export
+definitions of a dependency in the current crate to make that crate's
+definitions part of your crate’s public API.
+
+Creating a useful public API structure is more of an art than a science, and
+you can iterate to find the API that works best for your users. Choosing `pub
+use` gives you flexibility in how you structure your crate internally and
+decouples that internal structure from what you present to your users. Look at
+some of the code of crates you’ve installed to see if their internal structure
+differs from their public API.
+
+### Setting Up a Crates.io Account
+
+Before you can publish any crates, you need to create an account on
+*https://crates.io/* and get an API token. To do so, visit the home page at
+*https://crates.io/* and log in via a GitHub account. (The GitHub account is
+currently a requirement, but the site might support other ways of creating an
+account in the future.) Once you’re logged in, visit your account settings at
+*https://crates.io/me/* and retrieve your API key. Then run the `cargo login`
+command with your API key, like this:
+
+```
+$ cargo login abcdefghijklmnopqrstuvwxyz012345
+```
+
+This command will inform Cargo of your API token and store it locally in
+*~/.cargo/credentials*. Note that this token is a *secret*: do not share it
+with anyone else. If you do share it with anyone for any reason, you should
+revoke it and generate a new token on *https://crates.io/*.
+
+### Adding Metadata to a New Crate
+
+Let’s say you have a crate you want to publish. Before publishing, you’ll need
+to add some metadata in the `[package]` section of the crate’s *Cargo.toml*
+file.
+
+Your crate will need a unique name. While you’re working on a crate locally,
+you can name a crate whatever you’d like. However, crate names on
+*https://crates.io/* are allocated on a first-come, first-served basis. Once a
+crate name is taken, no one else can publish a crate with that name. Before
+attempting to publish a crate, search for the name you want to use. If the name
+has been used, you will need to find another name and edit the `name` field in
+the *Cargo.toml* file under the `[package]` section to use the new name for
+publishing, like so:
+
+Filename: Cargo.toml
+
+```
+[package]
+name = "guessing_game"
+```
+
+Even if you’ve chosen a unique name, when you run `cargo publish` to publish
+the crate at this point, you’ll get a warning and then an error:
+
+```
+$ cargo publish
+ Updating crates.io index
+warning: manifest has no description, license, license-file, documentation, homepage or repository.
+See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info.
+--snip--
+error: failed to publish to registry at https://crates.io
+
+Caused by:
+ the remote server responded with an error: missing or empty metadata fields: description, license. Please see https://doc.rust-lang.org/cargo/reference/manifest.html for how to upload metadata
+```
+
+This errors because you’re missing some crucial information: a description and
+license are required so people will know what your crate does and under what
+terms they can use it. In *Cargo.toml*, add a description that's just a
+sentence or two, because it will appear with your crate in search results. For
+the `license` field, you need to give a *license identifier value*. The Linux
+Foundation’s Software Package Data Exchange (SPDX) at
+*http://spdx.org/licenses/* lists the identifiers you can use for this value.
+For example, to specify that you’ve licensed your crate using the MIT License,
+add the `MIT` identifier:
+
+Filename: Cargo.toml
+
+```
+[package]
+name = "guessing_game"
+license = "MIT"
+```
+
+If you want to use a license that doesn’t appear in the SPDX, you need to place
+the text of that license in a file, include the file in your project, and then
+use `license-file` to specify the name of that file instead of using the
+`license` key.
+
+Guidance on which license is appropriate for your project is beyond the scope
+of this book. Many people in the Rust community license their projects in the
+same way as Rust by using a dual license of `MIT OR Apache-2.0`. This practice
+demonstrates that you can also specify multiple license identifiers separated
+by `OR` to have multiple licenses for your project.
+
+With a unique name, the version, your description, and a license added, the
+*Cargo.toml* file for a project that is ready to publish might look like this:
+
+Filename: Cargo.toml
+
+```
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+description = "A fun game where you guess what number the computer has chosen."
+license = "MIT OR Apache-2.0"
+
+[dependencies]
+```
+
+Cargo’s documentation at *https://doc.rust-lang.org/cargo/* describes other
+metadata you can specify to ensure others can discover and use your crate more
+easily.
+
+### Publishing to Crates.io
+
+Now that you’ve created an account, saved your API token, chosen a name for
+your crate, and specified the required metadata, you’re ready to publish!
+Publishing a crate uploads a specific version to *https://crates.io/* for
+others to use.
+
+Be careful, because a publish is *permanent*. The version can never be
+overwritten, and the code cannot be deleted. One major goal of crates.io is to
+act as a permanent archive of code so that builds of all projects that depend
+on crates from *https://crates.io/* will continue to work. Allowing version
+deletions would make fulfilling that goal impossible. However, there is no
+limit to the number of crate versions you can publish.
+
+Run the `cargo publish` command again. It should succeed now:
+
+```
+$ cargo publish
+ Updating crates.io index
+ Packaging guessing_game v0.1.0 (file:///projects/guessing_game)
+ Verifying guessing_game v0.1.0 (file:///projects/guessing_game)
+ Compiling guessing_game v0.1.0
+(file:///projects/guessing_game/target/package/guessing_game-0.1.0)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.19s
+ Uploading guessing_game v0.1.0 (file:///projects/guessing_game)
+```
+
+Congratulations! You’ve now shared your code with the Rust community, and
+anyone can easily add your crate as a dependency of their project.
+
+### Publishing a New Version of an Existing Crate
+
+When you’ve made changes to your crate and are ready to release a new version,
+you change the `version` value specified in your *Cargo.toml* file and
+republish. Use the Semantic Versioning rules at *http://semver.org/* to decide
+what an appropriate next version number is based on the kinds of changes you’ve
+made. Then run `cargo publish` to upload the new version.
+
+### Deprecating Versions from Crates.io with `cargo yank`
+
+Although you can’t remove previous versions of a crate, you can prevent any
+future projects from adding them as a new dependency. This is useful when a
+crate version is broken for one reason or another. In such situations, Cargo
+supports *yanking* a crate version.
+
+Yanking a version prevents new projects from depending on that version while
+allowing all existing projects that depend on it to continue. Essentially, a
+yank means that all projects with a *Cargo.lock* will not break, and any future
+*Cargo.lock* files generated will not use the yanked version.
+
+To yank a version of a crate, in the directory of the crate that you’ve
+previously published, run `cargo yank` and specify which version you want to
+yank. For example, if we've published a crate named `guessing_game` version
+1.0.1 and we want to yank it, in the project directory for `guessing_game` we'd
+run:
+
+```
+$ cargo yank --vers 1.0.1
+ Updating crates.io index
+ Yank guessing_game:1.0.1
+```
+
+<!-- so we run this on a crate, then load that crate onto crates.io? Or does
+this go in a file that's part of the new crate version? /LC -->
+<!-- No, this is a command to run in the directory of a crate that has already
+been published to crates.io. Do you have suggestions on how to make this
+clearer? I've tried a bit above /Carol -->
+<!-- Ah, I see! I think this is clear. JT, does this read okay to you? /LC -->
+<!-- I think this makes sense. Maybe you could make it clear in the example
+that you're in the project directory?
+
+```
+my_project> cargo yank --vers 1.0.1
+```
+and then show the message that cargo returns when the version is yanked to
+help key them in.
+/JT -->
+<!-- We haven't used that notation anywhere else in the book, of showing the
+current directory in the prompt. I think showing the output is a good idea
+though, so I've added that above and made the introduction to the scenario more
+concrete. /Carol-->
+
+By adding `--undo` to the command, you can also undo a yank and allow projects
+to start depending on a version again:
+
+```
+$ cargo yank --vers 1.0.1 --undo
+ Updating crates.io index
+ Unyank guessing_game_:1.0.1
+```
+
+A yank *does not* delete any code. It cannot, for example, delete accidentally
+uploaded secrets. If that happens, you must reset those secrets immediately.
+
+## Cargo Workspaces
+
+In Chapter 12, we built a package that included a binary crate and a library
+crate. As your project develops, you might find that the library crate
+continues to get bigger and you want to split your package further into
+multiple library crates. Cargo offers a feature called *workspaces* that can
+help manage multiple related packages that are developed in tandem.
+
+### Creating a Workspace
+
+A *workspace* is a set of packages that share the same *Cargo.lock* and output
+directory. Let’s make a project using a workspace—we’ll use trivial code so we
+can concentrate on the structure of the workspace. There are multiple ways to
+structure a workspace, so we'll just show one common way. We’ll have a
+workspace containing a binary and two libraries. The binary, which will provide
+the main functionality, will depend on the two libraries. One library will
+provide an `add_one` function, and a second library an `add_two` function.
+These three crates will be part of the same workspace. We’ll start by creating
+a new directory for the workspace:
+
+```
+$ mkdir add
+$ cd add
+```
+
+Next, in the *add* directory, we create the *Cargo.toml* file that will
+configure the entire workspace. This file won’t have a `[package]` section.
+Instead, it will start with a `[workspace]` section that will allow us to add
+members to the workspace by specifying the path to the package with our binary
+crate; in this case, that path is *adder*:
+
+<!-- You can have metadata in the top-level Cargo.toml along with the
+`[workspace]` section. We use this in Nushell, for example:
+
+https://github.com/nushell/nushell/blob/main/Cargo.toml
+
+ /JT -->
+<!-- Fixed! /Carol -->
+
+Filename: Cargo.toml
+
+```
+[workspace]
+
+members = [
+ "adder",
+]
+```
+
+Next, we’ll create the `adder` binary crate by running `cargo new` within the
+*add* directory:
+
+```
+$ cargo new adder
+ Created binary (application) `adder` package
+```
+
+At this point, we can build the workspace by running `cargo build`. The files
+in your *add* directory should look like this:
+
+```
+├── Cargo.lock
+├── Cargo.toml
+├── adder
+│ ├── Cargo.toml
+│ └── src
+│ └── main.rs
+└── target
+```
+
+The workspace has one *target* directory at the top level that the compiled
+artifacts will be placed into; the `adder` package doesn’t have its own
+*target* directory. Even if we were to run `cargo build` from inside the
+*adder* directory, the compiled artifacts would still end up in *add/target*
+rather than *add/adder/target*. Cargo structures the *target* directory in a
+workspace like this because the crates in a workspace are meant to depend on
+each other. If each crate had its own *target* directory, each crate would have
+to recompile each of the other crates in the workspace to place the artifacts
+in its own *target* directory. By sharing one *target* directory, the crates
+can avoid unnecessary rebuilding.
+
+### Creating the Second Package in the Workspace
+
+Next, let’s create another member package in the workspace and call it
+`add_one`. Change the top-level *Cargo.toml* to specify the *add_one* path in
+the `members` list:
+
+Filename: Cargo.toml
+
+```
+[workspace]
+
+members = [
+ "adder",
+ "add_one",
+]
+```
+
+Then generate a new library crate named `add_one`:
+
+```
+$ cargo new add_one --lib
+ Created library `add_one` package
+```
+
+Your *add* directory should now have these directories and files:
+
+```
+├── Cargo.lock
+├── Cargo.toml
+├── add_one
+│ ├── Cargo.toml
+│ └── src
+│ └── lib.rs
+├── adder
+│ ├── Cargo.toml
+│ └── src
+│ └── main.rs
+└── target
+```
+
+In the *add_one/src/lib.rs* file, let’s add an `add_one` function:
+
+Filename: add_one/src/lib.rs
+
+```
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
+```
+
+Now we can have the `adder` package with our binary depend on the `add_one`
+package that has our library. First, we’ll need to add a path dependency on
+`add_one` to *adder/Cargo.toml*.
+
+Filename: adder/Cargo.toml
+
+```
+[dependencies]
+add_one = { path = "../add_one" }
+```
+
+Cargo doesn’t assume that crates in a workspace will depend on each other, so
+we need to be explicit about the dependency relationships.
+
+Next, let’s use the `add_one` function (from the `add_one` crate) in the
+`adder` crate. Open the *adder/src/main.rs* file and add a `use` line at the
+top to bring the new `add_one` library crate into scope. Then change the `main`
+function to call the `add_one` function, as in Listing 14-7.
+
+Filename: adder/src/main.rs
+
+```
+use add_one;
+
+fn main() {
+ let num = 10;
+ println!(
+ "Hello, world! {num} plus one is {}!",
+ add_one::add_one(num)
+ );
+}
+```
+
+Listing 14-7: Using the `add_one` library crate from the `adder` crate
+
+Let’s build the workspace by running `cargo build` in the top-level *add*
+directory!
+
+```
+$ cargo build
+ Compiling add_one v0.1.0 (file:///projects/add/add_one)
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.68s
+```
+
+To run the binary crate from the *add* directory, we can specify which
+package in the workspace we want to run by using the `-p` argument and the
+package name with `cargo run`:
+
+```
+$ cargo run -p adder
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/adder`
+Hello, world! 10 plus one is 11!
+```
+
+This runs the code in *adder/src/main.rs*, which depends on the `add_one` crate.
+
+#### Depending on an External Package in a Workspace
+
+Notice that the workspace has only one *Cargo.lock* file at the top level,
+rather than having a *Cargo.lock* in each crate’s directory. This ensures that
+all crates are using the same version of all dependencies. If we add the `rand`
+package to the *adder/Cargo.toml* and *add_one/Cargo.toml* files, Cargo will
+resolve both of those to one version of `rand` and record that in the one
+*Cargo.lock*. Making all crates in the workspace use the same dependencies
+means the crates will always be compatible with each other. Let’s add the
+`rand` crate to the `[dependencies]` section in the *add_one/Cargo.toml* file
+so we can use the `rand` crate in the `add_one` crate:
+
+Filename: add_one/Cargo.toml
+
+```
+[dependencies]
+rand = "0.8.3"
+```
+
+We can now add `use rand;` to the *add_one/src/lib.rs* file, and building the
+whole workspace by running `cargo build` in the *add* directory will bring in
+and compile the `rand` crate. We will get one warning because we aren’t
+referring to the `rand` we brought into scope:
+
+```
+$ cargo build
+ Updating crates.io index
+ Downloaded rand v0.8.3
+ --snip--
+ Compiling rand v0.8.3
+ Compiling add_one v0.1.0 (file:///projects/add/add_one)
+warning: unused import: `rand`
+ --> add_one/src/lib.rs:1:5
+ |
+1 | use rand;
+ | ^^^^
+ |
+ = note: `#[warn(unused_imports)]` on by default
+
+warning: 1 warning emitted
+
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+ Finished dev [unoptimized + debuginfo] target(s) in 10.18s
+```
+
+The top-level *Cargo.lock* now contains information about the dependency of
+`add_one` on `rand`. However, even though `rand` is used somewhere in the
+workspace, we can’t use it in other crates in the workspace unless we add
+`rand` to their *Cargo.toml* files as well. For example, if we add `use rand;`
+to the *adder/src/main.rs* file for the `adder` package, we’ll get an error:
+
+```
+$ cargo build
+ --snip--
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+error[E0432]: unresolved import `rand`
+ --> adder/src/main.rs:2:5
+ |
+2 | use rand;
+ | ^^^^ no external crate `rand`
+```
+
+To fix this, edit the *Cargo.toml* file for the `adder` package and indicate
+that `rand` is a dependency for it as well. Building the `adder` package will
+add `rand` to the list of dependencies for `adder` in *Cargo.lock*, but no
+additional copies of `rand` will be downloaded. Cargo has ensured that every
+crate in every package in the workspace using the `rand` package will be using
+the same version, saving us space and ensuring that the crates in the workspace
+will be compatible with each other.
+
+#### Adding a Test to a Workspace
+
+For another enhancement, let’s add a test of the `add_one::add_one` function
+within the `add_one` crate:
+
+Filename: add_one/src/lib.rs
+
+```
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn it_works() {
+ assert_eq!(3, add_one(2));
+ }
+}
+```
+
+Now run `cargo test` in the top-level *add* directory. Running `cargo test` in
+a workspace structured like this one will run the tests for all the crates in
+the workspace:
+
+```
+$ cargo test
+ Compiling add_one v0.1.0 (file:///projects/add/add_one)
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.27s
+ Running target/debug/deps/add_one-f0253159197f7841
+
+running 1 test
+test tests::it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running target/debug/deps/adder-49979ff40686fa8e
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests add_one
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+The first section of the output shows that the `it_works` test in the `add_one`
+crate passed. The next section shows that zero tests were found in the `adder`
+crate, and then the last section shows zero documentation tests were found in
+the `add_one` crate.
+
+We can also run tests for one particular crate in a workspace from the
+top-level directory by using the `-p` flag and specifying the name of the crate
+we want to test:
+
+```
+$ cargo test -p add_one
+ Finished test [unoptimized + debuginfo] target(s) in 0.00s
+ Running target/debug/deps/add_one-b3235fea9a156f74
+
+running 1 test
+test tests::it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests add_one
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+This output shows `cargo test` only ran the tests for the `add_one` crate and
+didn’t run the `adder` crate tests.
+
+If you publish the crates in the workspace to *https://crates.io/*, each crate
+in the workspace will need to be published separately. Like `cargo test`, we
+can publish a particular crate in our workspace by using the `-p` flag and
+specifying the name of the crate we want to publish.
+
+For additional practice, add an `add_two` crate to this workspace in a similar
+way as the `add_one` crate!
+
+As your project grows, consider using a workspace: it’s easier to understand
+smaller, individual components than one big blob of code. Furthermore, keeping
+the crates in a workspace can make coordination between crates easier if they
+are often changed at the same time.
+
+## Installing Binaries with `cargo install`
+
+The `cargo install` command allows you to install and use binary crates
+locally. This isn’t intended to replace system packages; it’s meant to be a
+convenient way for Rust developers to install tools that others have shared on
+*https://crates.io/*. Note that you can only install packages that have binary
+targets. A *binary target* is the runnable program that is created if the crate
+has a *src/main.rs* file or another file specified as a binary, as opposed to a
+library target that isn’t runnable on its own but is suitable for including
+within other programs. Usually, crates have information in the *README* file
+about whether a crate is a library, has a binary target, or both.
+
+All binaries installed with `cargo install` are stored in the installation
+root’s *bin* folder. If you installed Rust using *rustup.rs* and don’t have any
+custom configurations, this directory will be *$HOME/.cargo/bin*. Ensure that
+directory is in your `$PATH` to be able to run programs you’ve installed with
+`cargo install`.
+
+For example, in Chapter 12 we mentioned that there’s a Rust implementation of
+the `grep` tool called `ripgrep` for searching files. To install `ripgrep`, we
+can run the following:
+
+```
+$ cargo install ripgrep
+ Updating crates.io index
+ Downloaded ripgrep v11.0.2
+ Downloaded 1 crate (243.3 KB) in 0.88s
+ Installing ripgrep v11.0.2
+--snip--
+ Compiling ripgrep v11.0.2
+ Finished release [optimized + debuginfo] target(s) in 3m 10s
+ Installing ~/.cargo/bin/rg
+ Installed package `ripgrep v11.0.2` (executable `rg`)
+```
+
+The second-to-last line of the output shows the location and the name of the
+installed binary, which in the case of `ripgrep` is `rg`. As long as the
+installation directory is in your `$PATH`, as mentioned previously, you can
+then run `rg --help` and start using a faster, rustier tool for searching files!
+
+## Extending Cargo with Custom Commands
+
+Cargo is designed so you can extend it with new subcommands without having to
+modify Cargo. If a binary in your `$PATH` is named `cargo-something`, you can
+run it as if it was a Cargo subcommand by running `cargo something`. Custom
+commands like this are also listed when you run `cargo --list`. Being able to
+use `cargo install` to install extensions and then run them just like the
+built-in Cargo tools is a super convenient benefit of Cargo’s design!
+
+## Summary
+
+Sharing code with Cargo and *https://crates.io/* is part of what makes the Rust
+ecosystem useful for many different tasks. Rust’s standard library is small and
+stable, but crates are easy to share, use, and improve on a timeline different
+from that of the language. Don’t be shy about sharing code that’s useful to you
+on *https://crates.io/*; it’s likely that it will be useful to someone else as
+well!
diff --git a/src/doc/book/nostarch/chapter15.md b/src/doc/book/nostarch/chapter15.md
new file mode 100644
index 000000000..166277fab
--- /dev/null
+++ b/src/doc/book/nostarch/chapter15.md
@@ -0,0 +1,2011 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Smart Pointers
+
+A *pointer* is a general concept for a variable that contains an address in
+memory. This address refers to, or “points at,” some other data. The most
+common kind of pointer in Rust is a reference, which you learned about in
+Chapter 4. References are indicated by the `&` symbol and borrow the value they
+point to. They don’t have any special capabilities other than referring to
+data, and have no overhead.
+
+*Smart pointers*, on the other hand, are data structures that act like a
+pointer but also have additional metadata and capabilities. The concept of
+smart pointers isn’t unique to Rust: smart pointers originated in C++ and exist
+in other languages as well. Rust has a variety of smart pointers defined in the
+standard library that provide functionality beyond that provided by references.
+To explore the general concept, we'll look at a couple of different examples of
+smart pointers, including a *reference counting* smart pointer type. This
+pointer enables you to allow data to have multiple owners by keeping track of
+the number of owners and, when no owners remain, cleaning up the data.
+
+Rust, with its concept of ownership and borrowing, has an additional difference
+between references and smart pointers: while references only borrow data, in
+many cases, smart pointers *own* the data they point to.
+
+Though we didn't call them as such at the time, we’ve already encountered a few
+smart pointers in this book, including `String` and `Vec<T>` in Chapter 8. Both
+these types count as smart pointers because they own some memory and allow you
+to manipulate it. They also have metadata and extra capabilities or guarantees.
+`String`, for example, stores its capacity as metadata and has the extra
+ability to ensure its data will always be valid UTF-8.
+
+Smart pointers are usually implemented using structs. Unlike an ordinary
+struct, smart pointers implement the `Deref` and `Drop` traits. The `Deref`
+trait allows an instance of the smart pointer struct to behave like a reference
+so you can write your code to work with either references or smart pointers.
+The `Drop` trait allows you to customize the code that's run when an instance
+of the smart pointer goes out of scope. In this chapter, we’ll discuss both
+traits and demonstrate why they’re important to smart pointers.
+
+Given that the smart pointer pattern is a general design pattern used
+frequently in Rust, this chapter won’t cover every existing smart pointer. Many
+libraries have their own smart pointers, and you can even write your own. We’ll
+cover the most common smart pointers in the standard library:
+
+* `Box<T>` for allocating values on the heap
+* `Rc<T>`, a reference counting type that enables multiple ownership
+* `Ref<T>` and `RefMut<T>`, accessed through `RefCell<T>`, a type that enforces
+ the borrowing rules at runtime instead of compile time
+
+In addition, we’ll cover the *interior mutability* pattern where an immutable
+type exposes an API for mutating an interior value. We’ll also discuss
+*reference cycles*: how they can leak memory and how to prevent them.
+
+Let’s dive in!
+
+## Using `Box<T>` to Point to Data on the Heap
+
+The most straightforward smart pointer is a *box*, whose type is written
+`Box<T>`. Boxes allow you to store data on the heap rather than the stack. What
+remains on the stack is the pointer to the heap data. Refer to Chapter 4 to
+review the difference between the stack and the heap.
+
+Boxes don’t have performance overhead, other than storing their data on the
+heap instead of on the stack. But they don’t have many extra capabilities
+either. You’ll use them most often in these situations:
+
+* When you have a type whose size can’t be known at compile time and you want
+ to use a value of that type in a context that requires an exact size
+* When you have a large amount of data and you want to transfer ownership but
+ ensure the data won’t be copied when you do so
+* When you want to own a value and you care only that it’s a type that
+ implements a particular trait rather than being of a specific type
+
+We’ll demonstrate the first situation in the “Enabling Recursive Types with
+Boxes” section. In the second case, transferring ownership of a large amount of
+data can take a long time because the data is copied around on the stack. To
+improve performance in this situation, we can store the large amount of data on
+the heap in a box. Then, only the small amount of pointer data is copied around
+on the stack, while the data it references stays in one place on the heap. The
+third case is known as a *trait object*, and Chapter 17 devotes an entire
+section, “Using Trait Objects That Allow for Values of Different Types,” just
+to that topic. So what you learn here you’ll apply again in Chapter 17!
+
+### Using a `Box<T>` to Store Data on the Heap
+
+Before we discuss the heap storage use case for `Box<T>`, we’ll cover the
+syntax and how to interact with values stored within a `Box<T>`.
+
+Listing 15-1 shows how to use a box to store an `i32` value on the heap:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let b = Box::new(5);
+ println!("b = {}", b);
+}
+```
+
+Listing 15-1: Storing an `i32` value on the heap using a box
+
+We define the variable `b` to have the value of a `Box` that points to the
+value `5`, which is allocated on the heap. This program will print `b = 5`; in
+this case, we can access the data in the box similar to how we would if this
+data were on the stack. Just like any owned value, when a box goes out of
+scope, as `b` does at the end of `main`, it will be deallocated. The
+deallocation happens both for the box (stored on the stack) and the data it
+points to (stored on the heap).
+
+Putting a single value on the heap isn’t very useful, so you won’t use boxes by
+themselves in this way very often. Having values like a single `i32` on the
+stack, where they’re stored by default, is more appropriate in the majority of
+situations. Let’s look at a case where boxes allow us to define types that we
+wouldn’t be allowed to if we didn’t have boxes.
+
+### Enabling Recursive Types with Boxes
+
+A value of *recursive type* can have another value of the same type as part of
+itself. Recursive types pose an issue because at compile time Rust needs to
+know how much space a type takes up. However, the nesting of values of
+recursive types could theoretically continue infinitely, so Rust can’t know how
+much space the value needs. Because boxes have a known size, we can enable
+recursive types by inserting a box in the recursive type definition.
+
+As an example of a recursive type, let’s explore the *cons list*. This is a data
+type commonly found in functional programming languages. The cons list type
+we’ll define is straightforward except for the recursion; therefore, the
+concepts in the example we’ll work with will be useful any time you get into
+more complex situations involving recursive types.
+
+#### More Information About the Cons List
+
+A *cons list* is a data structure that comes from the Lisp programming language
+and its dialects and is made up of nested pairs, and is the Lisp version of a
+linked list. Its name comes from the `cons` function (short for “construct
+function”) in Lisp that constructs a new pair from its two arguments. By
+calling `cons` on a pair consisting of a value and another pair, we can
+construct cons lists made up of recursive pairs.
+
+For example, here's a pseudocode representation of a cons list containing the
+list 1, 2, 3 with each pair in parentheses:
+
+```
+(1, (2, (3, Nil)))
+```
+
+Each item in a cons list contains two elements: the value of the current item
+and the next item. The last item in the list contains only a value called `Nil`
+without a next item. A cons list is produced by recursively calling the `cons`
+function. The canonical name to denote the base case of the recursion is `Nil`.
+Note that this is not the same as the “null” or “nil” concept in Chapter 6,
+which is an invalid or absent value.
+
+The cons list isn’t a commonly used data structure in Rust. Most of the time
+when you have a list of items in Rust, `Vec<T>` is a better choice to use.
+Other, more complex recursive data types *are* useful in various situations,
+but by starting with the cons list in this chapter, we can explore how boxes
+let us define a recursive data type without much distraction.
+
+Listing 15-2 contains an enum definition for a cons list. Note that this code
+won’t compile yet because the `List` type doesn’t have a known size, which
+we’ll demonstrate.
+
+Filename: src/main.rs
+
+```
+enum List {
+ Cons(i32, List),
+ Nil,
+}
+```
+
+Listing 15-2: The first attempt at defining an enum to represent a cons list
+data structure of `i32` values
+
+> Note: We’re implementing a cons list that holds only `i32` values for the
+> purposes of this example. We could have implemented it using generics, as we
+> discussed in Chapter 10, to define a cons list type that could store values of
+> any type.
+
+Using the `List` type to store the list `1, 2, 3` would look like the code in
+Listing 15-3:
+
+Filename: src/main.rs
+
+```
+use crate::List::{Cons, Nil};
+
+fn main() {
+ let list = Cons(1, Cons(2, Cons(3, Nil)));
+}
+```
+
+Listing 15-3: Using the `List` enum to store the list `1, 2, 3`
+
+The first `Cons` value holds `1` and another `List` value. This `List` value is
+another `Cons` value that holds `2` and another `List` value. This `List` value
+is one more `Cons` value that holds `3` and a `List` value, which is finally
+`Nil`, the non-recursive variant that signals the end of the list.
+
+If we try to compile the code in Listing 15-3, we get the error shown in
+Listing 15-4:
+
+```
+error[E0072]: recursive type `List` has infinite size
+ --> src/main.rs:1:1
+ |
+1 | enum List {
+ | ^^^^^^^^^ recursive type has infinite size
+2 | Cons(i32, List),
+ | ---- recursive without indirection
+ |
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `List` representable
+```
+
+Listing 15-4: The error we get when attempting to define a recursive enum
+
+The error shows this type “has infinite size.” The reason is that we’ve defined
+`List` with a variant that is recursive: it holds another value of itself
+directly. As a result, Rust can’t figure out how much space it needs to store a
+`List` value. Let’s break down why we get this error. First, we'll look at how
+Rust decides how much space it needs to store a value of a non-recursive type.
+
+#### Computing the Size of a Non-Recursive Type
+
+Recall the `Message` enum we defined in Listing 6-2 when we discussed enum
+definitions in Chapter 6:
+
+```
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+```
+
+To determine how much space to allocate for a `Message` value, Rust goes
+through each of the variants to see which variant needs the most space. Rust
+sees that `Message::Quit` doesn’t need any space, `Message::Move` needs enough
+space to store two `i32` values, and so forth. Because only one variant will be
+used, the most space a `Message` value will need is the space it would take to
+store the largest of its variants.
+
+Contrast this with what happens when Rust tries to determine how much space a
+recursive type like the `List` enum in Listing 15-2 needs. The compiler starts
+by looking at the `Cons` variant, which holds a value of type `i32` and a value
+of type `List`. Therefore, `Cons` needs an amount of space equal to the size of
+an `i32` plus the size of a `List`. To figure out how much memory the `List`
+type needs, the compiler looks at the variants, starting with the `Cons`
+variant. The `Cons` variant holds a value of type `i32` and a value of type
+`List`, and this process continues infinitely, as shown in Figure 15-1.
+
+<img alt="An infinite Cons list" src="img/trpl15-01.svg" class="center" style="width: 50%;" />
+
+Figure 15-1: An infinite `List` consisting of infinite `Cons` variants
+
+#### Using `Box<T>` to Get a Recursive Type with a Known Size
+
+Because Rust can’t figure out how much space to allocate for recursively
+defined types, the compiler gives an error with this helpful suggestion:
+
+```
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `List` representable
+ |
+2 | Cons(i32, Box<List>),
+ | ^^^^ ^
+```
+
+In this suggestion, “indirection” means that instead of storing a value
+directly, we should change the data structure to store the value indirectly by
+storing a pointer to the value instead.
+
+Because a `Box<T>` is a pointer, Rust always knows how much space a `Box<T>`
+needs: a pointer’s size doesn’t change based on the amount of data it’s
+pointing to. This means we can put a `Box<T>` inside the `Cons` variant instead
+of another `List` value directly. The `Box<T>` will point to the next `List`
+value that will be on the heap rather than inside the `Cons` variant.
+Conceptually, we still have a list, created with lists holding other lists, but
+this implementation is now more like placing the items next to one another
+rather than inside one another.
+
+We can change the definition of the `List` enum in Listing 15-2 and the usage
+of the `List` in Listing 15-3 to the code in Listing 15-5, which will compile:
+
+Filename: src/main.rs
+
+```
+enum List {
+ Cons(i32, Box<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+
+fn main() {
+ let list = Cons(1, Box::new(Cons(2, Box::new(Cons(3, Box::new(Nil))))));
+}
+```
+
+Listing 15-5: Definition of `List` that uses `Box<T>` in order to have a known
+size
+
+The `Cons` variant needs the size of an `i32` plus the space to store the
+box’s pointer data. The `Nil` variant stores no values, so it needs less space
+than the `Cons` variant. We now know that any `List` value will take up the
+size of an `i32` plus the size of a box’s pointer data. By using a box, we’ve
+broken the infinite, recursive chain, so the compiler can figure out the size
+it needs to store a `List` value. Figure 15-2 shows what the `Cons` variant
+looks like now.
+
+<img alt="A finite Cons list" src="img/trpl15-02.svg" class="center" />
+
+Figure 15-2: A `List` that is not infinitely sized because `Cons` holds a `Box`
+
+Boxes provide only the indirection and heap allocation; they don’t have any
+other special capabilities, like those we’ll see with the other smart pointer
+types. They also don’t have the performance overhead that these special
+capabilities incur, so they can be useful in cases like the cons list where the
+indirection is the only feature we need. We’ll look at more use cases for boxes
+in Chapter 17, too.
+
+The `Box<T>` type is a smart pointer because it implements the `Deref` trait,
+which allows `Box<T>` values to be treated like references. When a `Box<T>`
+value goes out of scope, the heap data that the box is pointing to is cleaned
+up as well because of the `Drop` trait implementation. These two traits will be
+even more important to the functionality provided by the other smart pointer
+types we’ll discuss in the rest of this chapter. Let’s explore these two traits
+in more detail.
+
+## Treating Smart Pointers Like Regular References with the `Deref` Trait
+
+Implementing the `Deref` trait allows you to customize the behavior of the
+*dereference operator* `*` (not to be confused with the multiplication or glob
+operator). By implementing `Deref` in such a way that a smart pointer can be
+treated like a regular reference, you can write code that operates on
+references and use that code with smart pointers too.
+
+Let’s first look at how the dereference operator works with regular references.
+Then we’ll try to define a custom type that behaves like `Box<T>`, and see why
+the dereference operator doesn’t work like a reference on our newly defined
+type. We’ll explore how implementing the `Deref` trait makes it possible for
+smart pointers to work in ways similar to references. Then we’ll look at
+Rust’s *deref coercion* feature and how it lets us work with either references
+or smart pointers.
+
+> Note: there’s one big difference between the `MyBox<T>` type we’re about to
+> build and the real `Box<T>`: our version will not store its data on the heap.
+> We are focusing this example on `Deref`, so where the data is actually stored
+> is less important than the pointer-like behavior.
+
+### Following the Pointer to the Value
+
+A regular reference is a type of pointer, and one way to think of a pointer is
+as an arrow to a value stored somewhere else. In Listing 15-6, we create a
+reference to an `i32` value and then use the dereference operator to follow the
+reference to the value:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ [1] let x = 5;
+ [2] let y = &x;
+
+ [3] assert_eq!(5, x);
+ [4] assert_eq!(5, *y);
+}
+```
+
+Listing 15-6: Using the dereference operator to follow a reference to an `i32`
+value
+
+The variable `x` holds an `i32` value `5` [1]. We set `y` equal to a reference
+to `x` [2]. We can assert that `x` is equal to `5` [3]. However, if we want to
+make an assertion about the value in `y`, we have to use `*y` to follow the
+reference to the value it’s pointing to (hence *dereference*) so the compiler
+can compare the actual value [4]. Once we dereference `y`, we have access to
+the integer value `y` is pointing to that we can compare with `5`.
+
+If we tried to write `assert_eq!(5, y);` instead, we would get this compilation
+error:
+
+```
+error[E0277]: can't compare `{integer}` with `&{integer}`
+ --> src/main.rs:6:5
+ |
+6 | assert_eq!(5, y);
+ | ^^^^^^^^^^^^^^^^ no implementation for `{integer} == &{integer}`
+ |
+ = help: the trait `PartialEq<&{integer}>` is not implemented for `{integer}`
+```
+
+Comparing a number and a reference to a number isn’t allowed because they’re
+different types. We must use the dereference operator to follow the reference
+to the value it’s pointing to.
+
+### Using `Box<T>` Like a Reference
+
+We can rewrite the code in Listing 15-6 to use a `Box<T>` instead of a
+reference; the dereference operator used on the `Box<T>` in Listing 15-7
+functions in the same way as the dereference operator used on the reference in
+Listing 15-6:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = 5;
+ [1] let y = Box::new(x);
+
+ assert_eq!(5, x);
+ [2] assert_eq!(5, *y);
+}
+```
+
+Listing 15-7: Using the dereference operator on a `Box<i32>`
+
+The main difference between Listing 15-7 and Listing 15-6 is that here we set
+`y` to be an instance of a box pointing to a copied value of `x` rather than a
+reference pointing to the value of `x` [1]. In the last assertion [2], we can
+use the dereference operator to follow the box’s pointer in the same way that
+we did when `y` was a reference. Next, we’ll explore what is special about
+`Box<T>` that enables us to use the dereference operator by defining our own
+box type.
+
+### Defining Our Own Smart Pointer
+
+Let’s build a smart pointer similar to the `Box<T>` type provided by the
+standard library to experience how smart pointers behave differently from
+references by default. Then we’ll look at how to add the ability to use the
+dereference operator.
+
+The `Box<T>` type is ultimately defined as a tuple struct with one element, so
+Listing 15-8 defines a `MyBox<T>` type in the same way. We’ll also define a
+`new` function to match the `new` function defined on `Box<T>`.
+
+Filename: src/main.rs
+
+```
+[1] struct MyBox<T>(T);
+
+impl<T> MyBox<T> {
+ [2] fn new(x: T) -> MyBox<T> {
+ [3] MyBox(x)
+ }
+}
+```
+
+Listing 15-8: Defining a `MyBox<T>` type
+
+We define a struct named `MyBox` and declare a generic parameter `T` [1],
+because we want our type to hold values of any type. The `MyBox` type is a
+tuple struct with one element of type `T`. The `MyBox::new` function takes one
+parameter of type `T` [2] and returns a `MyBox` instance that holds the value
+passed in [3].
+
+Let’s try adding the `main` function in Listing 15-7 to Listing 15-8 and
+changing it to use the `MyBox<T>` type we’ve defined instead of `Box<T>`. The
+code in Listing 15-9 won’t compile because Rust doesn’t know how to dereference
+`MyBox`.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = 5;
+ let y = MyBox::new(x);
+
+ assert_eq!(5, x);
+ assert_eq!(5, *y);
+}
+```
+
+Listing 15-9: Attempting to use `MyBox<T>` in the same way we used references
+and `Box<T>`
+
+Here’s the resulting compilation error:
+
+```
+error[E0614]: type `MyBox<{integer}>` cannot be dereferenced
+ --> src/main.rs:14:19
+ |
+14 | assert_eq!(5, *y);
+ | ^^
+```
+
+Our `MyBox<T>` type can’t be dereferenced because we haven’t implemented that
+ability on our type. To enable dereferencing with the `*` operator, we
+implement the `Deref` trait.
+
+### Treating a Type Like a Reference by Implementing the `Deref` Trait
+
+As discussed in the “Implementing a Trait on a Type” section of Chapter 10, to
+implement a trait, we need to provide implementations for the trait’s required
+methods. The `Deref` trait, provided by the standard library, requires us to
+implement one method named `deref` that borrows `self` and returns a reference
+to the inner data. Listing 15-10 contains an implementation of `Deref` to add
+to the definition of `MyBox`:
+
+Filename: src/main.rs
+
+```
+use std::ops::Deref;
+
+impl<T> Deref for MyBox<T> {
+ [1] type Target = T;
+
+ fn deref(&self) -> &Self::Target {
+ [2] &self.0
+ }
+}
+```
+
+Listing 15-10: Implementing `Deref` on `MyBox<T>`
+
+The `type Target = T;` syntax [1] defines an associated type for the `Deref`
+trait to use. Associated types are a slightly different way of declaring a
+generic parameter, but you don’t need to worry about them for now; we’ll cover
+them in more detail in Chapter 19.
+
+We fill in the body of the `deref` method with `&self.0` so `deref` returns a
+reference to the value we want to access with the `*` operator [2]; recall from
+the “Using Tuple Structs without Named Fields to Create Different Types”
+section of Chapter 5 that `.0` accesses the first value in a tuple struct. The
+`main` function in Listing 15-9 that calls `*` on the `MyBox<T>` value now
+compiles, and the assertions pass!
+
+Without the `Deref` trait, the compiler can only dereference `&` references.
+The `deref` method gives the compiler the ability to take a value of any type
+that implements `Deref` and call the `deref` method to get a `&` reference that
+it knows how to dereference.
+
+When we entered `*y` in Listing 15-9, behind the scenes Rust actually ran this
+code:
+
+```
+*(y.deref())
+```
+
+Rust substitutes the `*` operator with a call to the `deref` method and then a
+plain dereference so we don’t have to think about whether or not we need to
+call the `deref` method. This Rust feature lets us write code that functions
+identically whether we have a regular reference or a type that implements
+`Deref`.
+
+The reason the `deref` method returns a reference to a value, and that the
+plain dereference outside the parentheses in `*(y.deref())` is still necessary,
+is to do with the ownership system. If the `deref` method returned the value
+directly instead of a reference to the value, the value would be moved out of
+`self`. We don’t want to take ownership of the inner value inside `MyBox<T>` in
+this case or in most cases where we use the dereference operator.
+
+Note that the `*` operator is replaced with a call to the `deref` method and
+then a call to the `*` operator just once, each time we use a `*` in our code.
+Because the substitution of the `*` operator does not recurse infinitely, we
+end up with data of type `i32`, which matches the `5` in `assert_eq!` in
+Listing 15-9.
+
+### Implicit Deref Coercions with Functions and Methods
+
+*Deref coercion* converts a reference to a type that implements the `Deref`
+trait into a reference to another type. For example, deref coercion can convert
+`&String` to `&str` because `String` implements the `Deref` trait such that it
+returns `&str`. Deref coercion is a convenience Rust performs on arguments to
+functions and methods, and works only on types that implement the `Deref`
+trait. It happens automatically when we pass a reference to a particular type’s
+value as an argument to a function or method that doesn’t match the parameter
+type in the function or method definition. A sequence of calls to the `deref`
+method converts the type we provided into the type the parameter needs.
+
+Deref coercion was added to Rust so that programmers writing function and
+method calls don’t need to add as many explicit references and dereferences
+with `&` and `*`. The deref coercion feature also lets us write more code that
+can work for either references or smart pointers.
+
+To see deref coercion in action, let’s use the `MyBox<T>` type we defined in
+Listing 15-8 as well as the implementation of `Deref` that we added in Listing
+15-10. Listing 15-11 shows the definition of a function that has a string slice
+parameter:
+
+Filename: src/main.rs
+
+```
+fn hello(name: &str) {
+ println!("Hello, {name}!");
+}
+```
+
+Listing 15-11: A `hello` function that has the parameter `name` of type `&str`
+
+We can call the `hello` function with a string slice as an argument, such as
+`hello("Rust");` for example. Deref coercion makes it possible to call `hello`
+with a reference to a value of type `MyBox<String>`, as shown in Listing 15-12:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let m = MyBox::new(String::from("Rust"));
+ hello(&m);
+}
+```
+
+Listing 15-12: Calling `hello` with a reference to a `MyBox<String>` value,
+which works because of deref coercion
+
+Here we’re calling the `hello` function with the argument `&m`, which is a
+reference to a `MyBox<String>` value. Because we implemented the `Deref` trait
+on `MyBox<T>` in Listing 15-10, Rust can turn `&MyBox<String>` into `&String`
+by calling `deref`. The standard library provides an implementation of `Deref`
+on `String` that returns a string slice, and this is in the API documentation
+for `Deref`. Rust calls `deref` again to turn the `&String` into `&str`, which
+matches the `hello` function’s definition.
+
+If Rust didn’t implement deref coercion, we would have to write the code in
+Listing 15-13 instead of the code in Listing 15-12 to call `hello` with a value
+of type `&MyBox<String>`.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let m = MyBox::new(String::from("Rust"));
+ hello(&(*m)[..]);
+}
+```
+
+Listing 15-13: The code we would have to write if Rust didn’t have deref
+coercion
+
+The `(*m)` dereferences the `MyBox<String>` into a `String`. Then the `&` and
+`[..]` take a string slice of the `String` that is equal to the whole string to
+match the signature of `hello`. This code without deref coercions is harder to
+read, write, and understand with all of these symbols involved. Deref coercion
+allows Rust to handle these conversions for us automatically.
+
+When the `Deref` trait is defined for the types involved, Rust will analyze the
+types and use `Deref::deref` as many times as necessary to get a reference to
+match the parameter’s type. The number of times that `Deref::deref` needs to be
+inserted is resolved at compile time, so there is no runtime penalty for taking
+advantage of deref coercion!
+
+### How Deref Coercion Interacts with Mutability
+
+Similar to how you use the `Deref` trait to override the `*` operator on
+immutable references, you can use the `DerefMut` trait to override the `*`
+operator on mutable references.
+
+Rust does deref coercion when it finds types and trait implementations in three
+cases:
+
+* From `&T` to `&U` when `T: Deref<Target=U>`
+* From `&mut T` to `&mut U` when `T: DerefMut<Target=U>`
+* From `&mut T` to `&U` when `T: Deref<Target=U>`
+
+The first two cases are the same as each other except that the second
+implements mutability. The first case states that if you have a `&T`, and `T`
+implements `Deref` to some type `U`, you can get a `&U` transparently. The
+second case states that the same deref coercion happens for mutable references.
+
+The third case is trickier: Rust will also coerce a mutable reference to an
+immutable one. But the reverse is *not* possible: immutable references will
+never coerce to mutable references. Because of the borrowing rules, if you have
+a mutable reference, that mutable reference must be the only reference to that
+data (otherwise, the program wouldn’t compile). Converting one mutable
+reference to one immutable reference will never break the borrowing rules.
+Converting an immutable reference to a mutable reference would require that the
+initial immutable reference is the only immutable reference to that data, but
+the borrowing rules don’t guarantee that. Therefore, Rust can’t make the
+assumption that converting an immutable reference to a mutable reference is
+possible.
+
+## Running Code on Cleanup with the `Drop` Trait
+
+The second trait important to the smart pointer pattern is `Drop`, which lets
+you customize what happens when a value is about to go out of scope. You can
+provide an implementation for the `Drop` trait on any type, and that code
+can be used to release resources like files or network connections.
+
+We’re introducing `Drop` in the context of smart pointers because the
+functionality of the `Drop` trait is almost always used when implementing a
+smart pointer. For example, when a `Box<T>` is dropped it will deallocate the
+space on the heap that the box points to.
+
+In some languages, for some types, the programmer must call code to free memory
+or resources every time they finish using an instance of those types. Examples
+include file handles, sockets, or locks. If they forget, the system might
+become overloaded and crash. In Rust, you can specify that a particular bit of
+code be run whenever a value goes out of scope, and the compiler will insert
+this code automatically. As a result, you don’t need to be careful about
+placing cleanup code everywhere in a program that an instance of a particular
+type is finished with—you still won’t leak resources!
+
+You specify the code to run when a value goes out of scope by implementing the
+`Drop` trait. The `Drop` trait requires you to implement one method named
+`drop` that takes a mutable reference to `self`. To see when Rust calls `drop`,
+let’s implement `drop` with `println!` statements for now.
+
+Listing 15-14 shows a `CustomSmartPointer` struct whose only custom
+functionality is that it will print `Dropping CustomSmartPointer!` when the
+instance goes out of scope, to show when Rust runs the `drop` function.
+
+Filename: src/main.rs
+
+```
+struct CustomSmartPointer {
+ data: String,
+}
+
+[1] impl Drop for CustomSmartPointer {
+ fn drop(&mut self) {
+ [2] println!("Dropping CustomSmartPointer with data `{}`!", self.data);
+ }
+}
+
+fn main() {
+ [3] let c = CustomSmartPointer {
+ data: String::from("my stuff"),
+ };
+ [4] let d = CustomSmartPointer {
+ data: String::from("other stuff"),
+ };
+ [5] println!("CustomSmartPointers created.");
+[6] }
+```
+
+Listing 15-14: A `CustomSmartPointer` struct that implements the `Drop` trait
+where we would put our cleanup code
+
+The `Drop` trait is included in the prelude, so we don’t need to bring it into
+scope. We implement the `Drop` trait on `CustomSmartPointer` [1] and provide an
+implementation for the `drop` method that calls `println!` [2]. The body of the
+`drop` function is where you would place any logic that you wanted to run when
+an instance of your type goes out of scope. We’re printing some text here to
+demonstrate visually when Rust will call `drop`.
+
+In `main`, we create two instances of `CustomSmartPointer` [3][4] and then
+print `CustomSmartPointers created` [5]. At the end of `main` [6], our
+instances of `CustomSmartPointer` will go out of scope, and Rust will call the
+code we put in the `drop` method [2], printing our final message. Note that we
+didn’t need to call the `drop` method explicitly.
+
+When we run this program, we’ll see the following output:
+
+```
+CustomSmartPointers created.
+Dropping CustomSmartPointer with data `other stuff`!
+Dropping CustomSmartPointer with data `my stuff`!
+```
+
+Rust automatically called `drop` for us when our instances went out of scope,
+calling the code we specified. Variables are dropped in the reverse order of
+their creation, so `d` was dropped before `c`. This example's purpose is to
+give you a visual guide to how the `drop` method works; usually you would
+specify the cleanup code that your type needs to run rather than a print
+message.
+
+### Dropping a Value Early with `std::mem::drop`
+
+Unfortunately, it’s not straightforward to disable the automatic `drop`
+functionality. Disabling `drop` isn’t usually necessary; the whole point of the
+`Drop` trait is that it’s taken care of automatically. Occasionally, however,
+you might want to clean up a value early. One example is when using smart
+pointers that manage locks: you might want to force the `drop` method that
+releases the lock so that other code in the same scope can acquire the lock.
+Rust doesn’t let you call the `Drop` trait’s `drop` method manually; instead
+you have to call the `std::mem::drop` function provided by the standard library
+if you want to force a value to be dropped before the end of its scope.
+
+If we try to call the `Drop` trait’s `drop` method manually by modifying the
+`main` function from Listing 15-14, as shown in Listing 15-15, we’ll get a
+compiler error:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let c = CustomSmartPointer {
+ data: String::from("some data"),
+ };
+ println!("CustomSmartPointer created.");
+ c.drop();
+ println!("CustomSmartPointer dropped before the end of main.");
+}
+```
+
+Listing 15-15: Attempting to call the `drop` method from the `Drop` trait
+manually to clean up early
+
+When we try to compile this code, we’ll get this error:
+
+```
+error[E0040]: explicit use of destructor method
+ --> src/main.rs:16:7
+ |
+16 | c.drop();
+ | --^^^^--
+ | | |
+ | | explicit destructor calls not allowed
+```
+
+This error message states that we’re not allowed to explicitly call `drop`. The
+error message uses the term *destructor*, which is the general programming term
+for a function that cleans up an instance. A *destructor* is analogous to a
+*constructor*, which creates an instance. The `drop` function in Rust is one
+particular destructor.
+
+Rust doesn’t let us call `drop` explicitly because Rust would still
+automatically call `drop` on the value at the end of `main`. This would cause a
+*double free* error because Rust would be trying to clean up the same value
+twice.
+
+We can’t disable the automatic insertion of `drop` when a value goes out of
+scope, and we can’t call the `drop` method explicitly. So, if we need to force
+a value to be cleaned up early, we use the `std::mem::drop` function.
+
+The `std::mem::drop` function is different from the `drop` method in the `Drop`
+trait. We call it by passing as an argument the value we want to force drop.
+The function is in the prelude, so we can modify `main` in Listing 15-15 to
+call the `drop` function, as shown in Listing 15-16:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let c = CustomSmartPointer {
+ data: String::from("some data"),
+ };
+ println!("CustomSmartPointer created.");
+ drop(c);
+ println!("CustomSmartPointer dropped before the end of main.");
+}
+```
+
+Listing 15-16: Calling `std::mem::drop` to explicitly drop a value before it
+goes out of scope
+
+Running this code will print the following:
+
+```
+CustomSmartPointer created.
+Dropping CustomSmartPointer with data `some data`!
+CustomSmartPointer dropped before the end of main.
+```
+
+The text ```Dropping CustomSmartPointer with data `some data`!``` is printed
+between the `CustomSmartPointer created.` and `CustomSmartPointer dropped
+before the end of main.` text, showing that the `drop` method code is called to
+drop `c` at that point.
+
+You can use code specified in a `Drop` trait implementation in many ways to
+make cleanup convenient and safe: for instance, you could use it to create your
+own memory allocator! With the `Drop` trait and Rust’s ownership system, you
+don’t have to remember to clean up because Rust does it automatically.
+
+You also don’t have to worry about problems resulting from accidentally
+cleaning up values still in use: the ownership system that makes sure
+references are always valid also ensures that `drop` gets called only once when
+the value is no longer being used.
+
+Now that we’ve examined `Box<T>` and some of the characteristics of smart
+pointers, let’s look at a few other smart pointers defined in the standard
+library.
+
+## `Rc<T>`, the Reference Counted Smart Pointer
+
+In the majority of cases, ownership is clear: you know exactly which variable
+owns a given value. However, there are cases when a single value might have
+multiple owners. For example, in graph data structures, multiple edges might
+point to the same node, and that node is conceptually owned by all of the edges
+that point to it. A node shouldn’t be cleaned up unless it doesn’t have any
+edges pointing to it and so has no owners.
+
+You have to enable multiple ownership explicitly by using the Rust type
+`Rc<T>`, which is an abbreviation for *reference counting*. The `Rc<T>` type
+keeps track of the number of references to a value to determine whether or not
+the value is still in use. If there are zero references to a value, the value
+can be cleaned up without any references becoming invalid.
+
+Imagine `Rc<T>` as a TV in a family room. When one person enters to watch TV,
+they turn it on. Others can come into the room and watch the TV. When the last
+person leaves the room, they turn off the TV because it’s no longer being used.
+If someone turns off the TV while others are still watching it, there would be
+uproar from the remaining TV watchers!
+
+We use the `Rc<T>` type when we want to allocate some data on the heap for
+multiple parts of our program to read and we can’t determine at compile time
+which part will finish using the data last. If we knew which part would finish
+last, we could just make that part the data’s owner, and the normal ownership
+rules enforced at compile time would take effect.
+
+Note that `Rc<T>` is only for use in single-threaded scenarios. When we discuss
+concurrency in Chapter 16, we’ll cover how to do reference counting in
+multithreaded programs.
+
+### Using `Rc<T>` to Share Data
+
+Let’s return to our cons list example in Listing 15-5. Recall that we defined
+it using `Box<T>`. This time, we’ll create two lists that both share ownership
+of a third list. Conceptually, this looks similar to Figure 15-3:
+
+<img alt="Two lists that share ownership of a third list" src="img/trpl15-03.svg" class="center" />
+
+Figure 15-3: Two lists, `b` and `c`, sharing ownership of a third list, `a`
+
+We’ll create list `a` that contains 5 and then 10. Then we’ll make two more
+lists: `b` that starts with 3 and `c` that starts with 4. Both `b` and `c`
+lists will then continue on to the first `a` list containing 5 and 10. In other
+words, both lists will share the first list containing 5 and 10.
+
+Trying to implement this scenario using our definition of `List` with `Box<T>`
+won’t work, as shown in Listing 15-17:
+
+Filename: src/main.rs
+
+```
+enum List {
+ Cons(i32, Box<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+
+fn main() {
+ let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));
+[1] let b = Cons(3, Box::new(a));
+[2] let c = Cons(4, Box::new(a));
+}
+```
+
+Listing 15-17: Demonstrating we’re not allowed to have two lists using `Box<T>`
+that try to share ownership of a third list
+
+When we compile this code, we get this error:
+
+```
+error[E0382]: use of moved value: `a`
+ --> src/main.rs:11:30
+ |
+9 | let a = Cons(5, Box::new(Cons(10, Box::new(Nil))));
+ | - move occurs because `a` has type `List`, which does not implement the `Copy` trait
+10 | let b = Cons(3, Box::new(a));
+ | - value moved here
+11 | let c = Cons(4, Box::new(a));
+ | ^ value used here after move
+```
+
+The `Cons` variants own the data they hold, so when we create the `b` list [1],
+`a` is moved into `b` and `b` owns `a`. Then, when we try to use `a` again when
+creating `c` [2], we’re not allowed to because `a` has been moved.
+
+We could change the definition of `Cons` to hold references instead, but then
+we would have to specify lifetime parameters. By specifying lifetime
+parameters, we would be specifying that every element in the list will live at
+least as long as the entire list. This is the case for the elements and lists
+in Listing 15-17, but not in every scenario.
+
+Instead, we’ll change our definition of `List` to use `Rc<T>` in place of
+`Box<T>`, as shown in Listing 15-18. Each `Cons` variant will now hold a value
+and an `Rc<T>` pointing to a `List`. When we create `b`, instead of taking
+ownership of `a`, we’ll clone the `Rc<List>` that `a` is holding, thereby
+increasing the number of references from one to two and letting `a` and `b`
+share ownership of the data in that `Rc<List>`. We’ll also clone `a` when
+creating `c`, increasing the number of references from two to three. Every time
+we call `Rc::clone`, the reference count to the data within the `Rc<List>` will
+increase, and the data won’t be cleaned up unless there are zero references to
+it.
+
+Filename: src/main.rs
+
+```
+enum List {
+ Cons(i32, Rc<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+[1] use std::rc::Rc;
+
+fn main() {
+[2] let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
+[3] let b = Cons(3, Rc::clone(&a));
+[4] let c = Cons(4, Rc::clone(&a));
+}
+```
+
+Listing 15-18: A definition of `List` that uses `Rc<T>`
+
+We need to add a `use` statement to bring `Rc<T>` into scope [1] because it’s
+not in the prelude. In `main`, we create the list holding 5 and 10 and store it
+in a new `Rc<List>` in `a` [2]. Then when we create `b` [3] and `c` [4], we
+call the `Rc::clone` function and pass a reference to the `Rc<List>` in `a` as
+an argument.
+
+We could have called `a.clone()` rather than `Rc::clone(&a)`, but Rust’s
+convention is to use `Rc::clone` in this case. The implementation of
+`Rc::clone` doesn’t make a deep copy of all the data like most types’
+implementations of `clone` do. The call to `Rc::clone` only increments the
+reference count, which doesn’t take much time. Deep copies of data can take a
+lot of time. By using `Rc::clone` for reference counting, we can visually
+distinguish between the deep-copy kinds of clones and the kinds of clones that
+increase the reference count. When looking for performance problems in the
+code, we only need to consider the deep-copy clones and can disregard calls to
+`Rc::clone`.
+
+### Cloning an `Rc<T>` Increases the Reference Count
+
+Let’s change our working example in Listing 15-18 so we can see the reference
+counts changing as we create and drop references to the `Rc<List>` in `a`.
+
+In Listing 15-19, we’ll change `main` so it has an inner scope around list `c`;
+then we can see how the reference count changes when `c` goes out of scope.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let a = Rc::new(Cons(5, Rc::new(Cons(10, Rc::new(Nil)))));
+ println!("count after creating a = {}", Rc::strong_count(&a));
+ let b = Cons(3, Rc::clone(&a));
+ println!("count after creating b = {}", Rc::strong_count(&a));
+ {
+ let c = Cons(4, Rc::clone(&a));
+ println!("count after creating c = {}", Rc::strong_count(&a));
+ }
+ println!("count after c goes out of scope = {}", Rc::strong_count(&a));
+}
+```
+
+Listing 15-19: Printing the reference count
+
+At each point in the program where the reference count changes, we print the
+reference count, which we get by calling the `Rc::strong_count` function. This
+function is named `strong_count` rather than `count` because the `Rc<T>` type
+also has a `weak_count`; we’ll see what `weak_count` is used for in the
+“Preventing Reference Cycles: Turning an `Rc<T>` into a `Weak<T>`” section.
+
+This code prints the following:
+
+```
+count after creating a = 1
+count after creating b = 2
+count after creating c = 3
+count after c goes out of scope = 2
+```
+
+We can see that the `Rc<List>` in `a` has an initial reference count of 1; then
+each time we call `clone`, the count goes up by 1. When `c` goes out of scope,
+the count goes down by 1. We don’t have to call a function to decrease the
+reference count like we have to call `Rc::clone` to increase the reference
+count: the implementation of the `Drop` trait decreases the reference count
+automatically when an `Rc<T>` value goes out of scope.
+
+What we can’t see in this example is that when `b` and then `a` go out of scope
+at the end of `main`, the count is then 0, and the `Rc<List>` is cleaned up
+completely. Using `Rc<T>` allows a single value to have multiple owners, and
+the count ensures that the value remains valid as long as any of the owners
+still exist.
+
+Via immutable references, `Rc<T>` allows you to share data between multiple
+parts of your program for reading only. If `Rc<T>` allowed you to have multiple
+mutable references too, you might violate one of the borrowing rules discussed
+in Chapter 4: multiple mutable borrows to the same place can cause data races
+and inconsistencies. But being able to mutate data is very useful! In the next
+section, we’ll discuss the interior mutability pattern and the `RefCell<T>`
+type that you can use in conjunction with an `Rc<T>` to work with this
+immutability restriction.
+
+## `RefCell<T>` and the Interior Mutability Pattern
+
+*Interior mutability* is a design pattern in Rust that allows you to mutate
+data even when there are immutable references to that data; normally, this
+action is disallowed by the borrowing rules. To mutate data, the pattern uses
+`unsafe` code inside a data structure to bend Rust’s usual rules that govern
+mutation and borrowing. Unsafe code indicates to the compiler that we’re
+checking the rules manually instead of relying on the compiler to check them
+for us; we will discuss unsafe code more in Chapter 19.
+
+We can use types that use the interior mutability pattern only when we can
+ensure that the borrowing rules will be followed at runtime, even though the
+compiler can’t guarantee that. The `unsafe` code involved is then wrapped in a
+safe API, and the outer type is still immutable.
+
+Let’s explore this concept by looking at the `RefCell<T>` type that follows the
+interior mutability pattern.
+
+### Enforcing Borrowing Rules at Runtime with `RefCell<T>`
+
+Unlike `Rc<T>`, the `RefCell<T>` type represents single ownership over the data
+it holds. So, what makes `RefCell<T>` different from a type like `Box<T>`?
+Recall the borrowing rules you learned in Chapter 4:
+
+* At any given time, you can have *either* (but not both) one mutable reference
+ or any number of immutable references.
+* References must always be valid.
+
+With references and `Box<T>`, the borrowing rules’ invariants are enforced at
+compile time. With `RefCell<T>`, these invariants are enforced *at runtime*.
+With references, if you break these rules, you’ll get a compiler error. With
+`RefCell<T>`, if you break these rules, your program will panic and exit.
+
+The advantages of checking the borrowing rules at compile time are that errors
+will be caught sooner in the development process, and there is no impact on
+runtime performance because all the analysis is completed beforehand. For those
+reasons, checking the borrowing rules at compile time is the best choice in the
+majority of cases, which is why this is Rust’s default.
+
+The advantage of checking the borrowing rules at runtime instead is that
+certain memory-safe scenarios are then allowed, where they would’ve been
+disallowed by the compile-time checks. Static analysis, like the Rust compiler,
+is inherently conservative. Some properties of code are impossible to detect by
+analyzing the code: the most famous example is the Halting Problem, which is
+beyond the scope of this book but is an interesting topic to research.
+
+Because some analysis is impossible, if the Rust compiler can’t be sure the
+code complies with the ownership rules, it might reject a correct program; in
+this way, it’s conservative. If Rust accepted an incorrect program, users
+wouldn’t be able to trust in the guarantees Rust makes. However, if Rust
+rejects a correct program, the programmer will be inconvenienced, but nothing
+catastrophic can occur. The `RefCell<T>` type is useful when you’re sure your
+code follows the borrowing rules but the compiler is unable to understand and
+guarantee that.
+
+Similar to `Rc<T>`, `RefCell<T>` is only for use in single-threaded scenarios
+and will give you a compile-time error if you try using it in a multithreaded
+context. We’ll talk about how to get the functionality of `RefCell<T>` in a
+multithreaded program in Chapter 16.
+
+Here is a recap of the reasons to choose `Box<T>`, `Rc<T>`, or `RefCell<T>`:
+
+* `Rc<T>` enables multiple owners of the same data; `Box<T>` and `RefCell<T>`
+ have single owners.
+* `Box<T>` allows immutable or mutable borrows checked at compile time; `Rc<T>`
+ allows only immutable borrows checked at compile time; `RefCell<T>` allows
+ immutable or mutable borrows checked at runtime.
+* Because `RefCell<T>` allows mutable borrows checked at runtime, you can
+ mutate the value inside the `RefCell<T>` even when the `RefCell<T>` is
+ immutable.
+
+Mutating the value inside an immutable value is the *interior mutability*
+pattern. Let’s look at a situation in which interior mutability is useful and
+examine how it’s possible.
+
+### Interior Mutability: A Mutable Borrow to an Immutable Value
+
+A consequence of the borrowing rules is that when you have an immutable value,
+you can’t borrow it mutably. For example, this code won’t compile:
+
+```
+fn main() {
+ let x = 5;
+ let y = &mut x;
+}
+```
+
+If you tried to compile this code, you’d get the following error:
+
+```
+error[E0596]: cannot borrow `x` as mutable, as it is not declared as mutable
+ --> src/main.rs:3:13
+ |
+2 | let x = 5;
+ | - help: consider changing this to be mutable: `mut x`
+3 | let y = &mut x;
+ | ^^^^^^ cannot borrow as mutable
+```
+
+However, there are situations in which it would be useful for a value to mutate
+itself in its methods but appear immutable to other code. Code outside the
+value’s methods would not be able to mutate the value. Using `RefCell<T>` is
+one way to get the ability to have interior mutability, but `RefCell<T>`
+doesn’t get around the borrowing rules completely: the borrow checker in the
+compiler allows this interior mutability, and the borrowing rules are checked
+at runtime instead. If you violate the rules, you’ll get a `panic!` instead of
+a compiler error.
+
+Let’s work through a practical example where we can use `RefCell<T>` to mutate
+an immutable value and see why that is useful.
+
+#### A Use Case for Interior Mutability: Mock Objects
+
+Sometimes during testing a programmer will use a type in place of another type,
+in order to observe particular behavior and assert it's implemented correctly.
+This placeholder type is called a *test double*. Think of it in the sense of a
+"stunt double" in filmmaking, where a person steps in and substitutes for an
+actor to do a particular tricky scene. Test doubles stand in for other types
+when we're running tests. *Mock objects* are specific types of test doubles
+that record what happens during a test so you can assert that the correct
+actions took place.
+
+Rust doesn’t have objects in the same sense as other languages have objects,
+and Rust doesn’t have mock object functionality built into the standard library
+as some other languages do. However, you can definitely create a struct that
+will serve the same purposes as a mock object.
+
+Here’s the scenario we’ll test: we’ll create a library that tracks a value
+against a maximum value and sends messages based on how close to the maximum
+value the current value is. This library could be used to keep track of a
+user’s quota for the number of API calls they’re allowed to make, for example.
+
+Our library will only provide the functionality of tracking how close to the
+maximum a value is and what the messages should be at what times. Applications
+that use our library will be expected to provide the mechanism for sending the
+messages: the application could put a message in the application, send an
+email, send a text message, or something else. The library doesn’t need to know
+that detail. All it needs is something that implements a trait we’ll provide
+called `Messenger`. Listing 15-20 shows the library code:
+
+Filename: src/lib.rs
+
+```
+pub trait Messenger {
+[1] fn send(&self, msg: &str);
+}
+
+pub struct LimitTracker<'a, T: Messenger> {
+ messenger: &'a T,
+ value: usize,
+ max: usize,
+}
+
+impl<'a, T> LimitTracker<'a, T>
+where
+ T: Messenger,
+{
+ pub fn new(messenger: &'a T, max: usize) -> LimitTracker<'a, T> {
+ LimitTracker {
+ messenger,
+ value: 0,
+ max,
+ }
+ }
+
+[2] pub fn set_value(&mut self, value: usize) {
+ self.value = value;
+
+ let percentage_of_max = self.value as f64 / self.max as f64;
+
+ if percentage_of_max >= 1.0 {
+ self.messenger.send("Error: You are over your quota!");
+ } else if percentage_of_max >= 0.9 {
+ self.messenger
+ .send("Urgent warning: You've used up over 90% of your quota!");
+ } else if percentage_of_max >= 0.75 {
+ self.messenger
+ .send("Warning: You've used up over 75% of your quota!");
+ }
+ }
+}
+```
+
+Listing 15-20: A library to keep track of how close a value is to a maximum
+value and warn when the value is at certain levels
+
+One important part of this code is that the `Messenger` trait has one method
+called `send` that takes an immutable reference to `self` and the text of the
+message [1]. This trait is the interface our mock object needs to implement so
+that the mock can be used in the same way a real object is. The other important
+part is that we want to test the behavior of the `set_value` method on the
+`LimitTracker` [2]. We can change what we pass in for the `value` parameter,
+but `set_value` doesn’t return anything for us to make assertions on. We want
+to be able to say that if we create a `LimitTracker` with something that
+implements the `Messenger` trait and a particular value for `max`, when we pass
+different numbers for `value`, the messenger is told to send the appropriate
+messages.
+
+We need a mock object that, instead of sending an email or text message when we
+call `send`, will only keep track of the messages it’s told to send. We can
+create a new instance of the mock object, create a `LimitTracker` that uses the
+mock object, call the `set_value` method on `LimitTracker`, and then check that
+the mock object has the messages we expect. Listing 15-21 shows an attempt to
+implement a mock object to do just that, but the borrow checker won’t allow it:
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ [1] struct MockMessenger {
+ [2] sent_messages: Vec<String>,
+ }
+
+ impl MockMessenger {
+ [3] fn new() -> MockMessenger {
+ MockMessenger {
+ sent_messages: vec![],
+ }
+ }
+ }
+
+ [4] impl Messenger for MockMessenger {
+ fn send(&self, message: &str) {
+ [5] self.sent_messages.push(String::from(message));
+ }
+ }
+
+ #[test]
+ [6] fn it_sends_an_over_75_percent_warning_message() {
+ let mock_messenger = MockMessenger::new();
+ let mut limit_tracker = LimitTracker::new(&mock_messenger, 100);
+
+ limit_tracker.set_value(80);
+
+ assert_eq!(mock_messenger.sent_messages.len(), 1);
+ }
+}
+```
+
+Listing 15-21: An attempt to implement a `MockMessenger` that isn’t allowed by
+the borrow checker
+
+This test code defines a `MockMessenger` struct [1] that has a `sent_messages`
+field with a `Vec` of `String` values [2] to keep track of the messages it’s
+told to send. We also define an associated function `new` [3] to make it
+convenient to create new `MockMessenger` values that start with an empty list
+of messages. We then implement the `Messenger` trait for `MockMessenger` [4] so
+we can give a `MockMessenger` to a `LimitTracker`. In the definition of the
+`send` method [5], we take the message passed in as a parameter and store it in
+the `MockMessenger` list of `sent_messages`.
+
+In the test, we’re testing what happens when the `LimitTracker` is told to set
+`value` to something that is more than 75 percent of the `max` value [6].
+First, we create a new `MockMessenger`, which will start with an empty list of
+messages. Then we create a new `LimitTracker` and give it a reference to the
+new `MockMessenger` and a `max` value of 100. We call the `set_value` method on
+the `LimitTracker` with a value of 80, which is more than 75 percent of 100.
+Then we assert that the list of messages that the `MockMessenger` is keeping
+track of should now have one message in it.
+
+However, there’s one problem with this test, as shown here:
+
+```
+error[E0596]: cannot borrow `self.sent_messages` as mutable, as it is behind a `&` reference
+ --> src/lib.rs:58:13
+ |
+2 | fn send(&self, msg: &str);
+ | ----- help: consider changing that to be a mutable reference: `&mut self`
+...
+58 | self.sent_messages.push(String::from(message));
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `self` is a `&` reference, so the data it refers to cannot be borrowed as mutable
+```
+
+We can’t modify the `MockMessenger` to keep track of the messages, because the
+`send` method takes an immutable reference to `self`. We also can’t take the
+suggestion from the error text to use `&mut self` instead, because then the
+signature of `send` wouldn’t match the signature in the `Messenger` trait
+definition (feel free to try and see what error message you get).
+
+This is a situation in which interior mutability can help! We’ll store the
+`sent_messages` within a `RefCell<T>`, and then the `send` method will be
+able to modify `sent_messages` to store the messages we’ve seen. Listing 15-22
+shows what that looks like:
+
+Filename: src/lib.rs
+
+```
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use std::cell::RefCell;
+
+ struct MockMessenger {
+ [1] sent_messages: RefCell<Vec<String>>,
+ }
+
+ impl MockMessenger {
+ fn new() -> MockMessenger {
+ MockMessenger {
+ sent_messages: RefCell::new(vec![]) [2],
+ }
+ }
+ }
+
+ impl Messenger for MockMessenger {
+ fn send(&self, message: &str) {
+ [3] self.sent_messages.borrow_mut().push(String::from(message));
+ }
+ }
+
+ #[test]
+ fn it_sends_an_over_75_percent_warning_message() {
+ // --snip--
+
+ [4] assert_eq!(mock_messenger.sent_messages.borrow().len(), 1);
+ }
+}
+```
+
+Listing 15-22: Using `RefCell<T>` to mutate an inner value while the outer
+value is considered immutable
+
+The `sent_messages` field is now of type `RefCell<Vec<String>>` [1] instead of
+`Vec<String>`. In the `new` function, we create a new `RefCell<Vec<String>>`
+instance around the empty vector [2].
+
+For the implementation of the `send` method, the first parameter is still an
+immutable borrow of `self`, which matches the trait definition. We call
+`borrow_mut` on the `RefCell<Vec<String>>` in `self.sent_messages` [3] to get a
+mutable reference to the value inside the `RefCell<Vec<String>>`, which is
+the vector. Then we can call `push` on the mutable reference to the vector to
+keep track of the messages sent during the test.
+
+The last change we have to make is in the assertion: to see how many items are
+in the inner vector, we call `borrow` on the `RefCell<Vec<String>>` to get an
+immutable reference to the vector [4].
+
+Now that you’ve seen how to use `RefCell<T>`, let’s dig into how it works!
+
+#### Keeping Track of Borrows at Runtime with `RefCell<T>`
+
+When creating immutable and mutable references, we use the `&` and `&mut`
+syntax, respectively. With `RefCell<T>`, we use the `borrow` and `borrow_mut`
+methods, which are part of the safe API that belongs to `RefCell<T>`. The
+`borrow` method returns the smart pointer type `Ref<T>`, and `borrow_mut`
+returns the smart pointer type `RefMut<T>`. Both types implement `Deref`, so we
+can treat them like regular references.
+
+The `RefCell<T>` keeps track of how many `Ref<T>` and `RefMut<T>` smart
+pointers are currently active. Every time we call `borrow`, the `RefCell<T>`
+increases its count of how many immutable borrows are active. When a `Ref<T>`
+value goes out of scope, the count of immutable borrows goes down by one. Just
+like the compile-time borrowing rules, `RefCell<T>` lets us have many immutable
+borrows or one mutable borrow at any point in time.
+
+If we try to violate these rules, rather than getting a compiler error as we
+would with references, the implementation of `RefCell<T>` will panic at
+runtime. Listing 15-23 shows a modification of the implementation of `send` in
+Listing 15-22. We’re deliberately trying to create two mutable borrows active
+for the same scope to illustrate that `RefCell<T>` prevents us from doing this
+at runtime.
+
+Filename: src/lib.rs
+
+```
+ impl Messenger for MockMessenger {
+ fn send(&self, message: &str) {
+ let mut one_borrow = self.sent_messages.borrow_mut();
+ let mut two_borrow = self.sent_messages.borrow_mut();
+
+ one_borrow.push(String::from(message));
+ two_borrow.push(String::from(message));
+ }
+ }
+```
+
+Listing 15-23: Creating two mutable references in the same scope to see that
+`RefCell<T>` will panic
+
+We create a variable `one_borrow` for the `RefMut<T>` smart pointer returned
+from `borrow_mut`. Then we create another mutable borrow in the same way in the
+variable `two_borrow`. This makes two mutable references in the same scope,
+which isn’t allowed. When we run the tests for our library, the code in Listing
+15-23 will compile without any errors, but the test will fail:
+
+```
+---- tests::it_sends_an_over_75_percent_warning_message stdout ----
+thread 'main' panicked at 'already borrowed: BorrowMutError', src/lib.rs:60:53
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+Notice that the code panicked with the message `already borrowed:
+BorrowMutError`. This is how `RefCell<T>` handles violations of the borrowing
+rules at runtime.
+
+Choosing to catch borrowing errors at runtime rather than compile time, as
+we've done here, means you'd potentially be finding mistakes in your code later
+in the development process: possibly not until your code was deployed to
+production. Also, your code would incur a small runtime performance penalty as
+a result of keeping track of the borrows at runtime rather than compile time.
+However, using `RefCell<T>` makes it possible to write a mock object that can
+modify itself to keep track of the messages it has seen while you’re using it
+in a context where only immutable values are allowed. You can use `RefCell<T>`
+despite its trade-offs to get more functionality than regular references
+provide.
+
+### Having Multiple Owners of Mutable Data by Combining `Rc<T>` and `RefCell<T>`
+
+A common way to use `RefCell<T>` is in combination with `Rc<T>`. Recall that
+`Rc<T>` lets you have multiple owners of some data, but it only gives immutable
+access to that data. If you have an `Rc<T>` that holds a `RefCell<T>`, you can
+get a value that can have multiple owners *and* that you can mutate!
+
+For example, recall the cons list example in Listing 15-18 where we used
+`Rc<T>` to allow multiple lists to share ownership of another list. Because
+`Rc<T>` holds only immutable values, we can’t change any of the values in the
+list once we’ve created them. Let’s add in `RefCell<T>` to gain the ability to
+change the values in the lists. Listing 15-24 shows that by using a
+`RefCell<T>` in the `Cons` definition, we can modify the value stored in all
+the lists:
+
+Filename: src/main.rs
+
+```
+#[derive(Debug)]
+enum List {
+ Cons(Rc<RefCell<i32>>, Rc<List>),
+ Nil,
+}
+
+use crate::List::{Cons, Nil};
+use std::cell::RefCell;
+use std::rc::Rc;
+
+fn main() {
+ [1] let value = Rc::new(RefCell::new(5));
+
+ [2] let a = Rc::new(Cons(Rc::clone(&value), Rc::new(Nil)));
+
+ let b = Cons(Rc::new(RefCell::new(3)), Rc::clone(&a));
+ let c = Cons(Rc::new(RefCell::new(4)), Rc::clone(&a));
+
+ [3] *value.borrow_mut() += 10;
+
+ println!("a after = {:?}", a);
+ println!("b after = {:?}", b);
+ println!("c after = {:?}", c);
+}
+```
+
+Listing 15-24: Using `Rc<RefCell<i32>>` to create a `List` that we can mutate
+
+We create a value that is an instance of `Rc<RefCell<i32>>` and store it in a
+variable named `value` [1] so we can access it directly later. Then we create a
+`List` in `a` with a `Cons` variant that holds `value` [2]. We need to clone
+`value` so both `a` and `value` have ownership of the inner `5` value rather
+than transferring ownership from `value` to `a` or having `a` borrow from
+`value`.
+
+We wrap the list `a` in an `Rc<T>` so when we create lists `b` and `c`, they
+can both refer to `a`, which is what we did in Listing 15-18.
+
+After we’ve created the lists in `a`, `b`, and `c`, we want to add 10 to the
+value in `value` [3]. We do this by calling `borrow_mut` on `value`, which uses
+the automatic dereferencing feature we discussed in Chapter 5 (see the section
+“Where’s the `->` Operator?”) to dereference the `Rc<T>` to the inner
+`RefCell<T>` value. The `borrow_mut` method returns a `RefMut<T>` smart
+pointer, and we use the dereference operator on it and change the inner value.
+
+When we print `a`, `b`, and `c`, we can see that they all have the modified
+value of 15 rather than 5:
+
+```
+a after = Cons(RefCell { value: 15 }, Nil)
+b after = Cons(RefCell { value: 3 }, Cons(RefCell { value: 15 }, Nil))
+c after = Cons(RefCell { value: 4 }, Cons(RefCell { value: 15 }, Nil))
+```
+
+This technique is pretty neat! By using `RefCell<T>`, we have an outwardly
+immutable `List` value. But we can use the methods on `RefCell<T>` that provide
+access to its interior mutability so we can modify our data when we need to.
+The runtime checks of the borrowing rules protect us from data races, and it’s
+sometimes worth trading a bit of speed for this flexibility in our data
+structures. Note that `RefCell<T>` does not work for multithreaded code!
+`Mutex<T>` is the thread-safe version of `RefCell<T>` and we’ll discuss
+`Mutex<T>` in Chapter 16.
+
+## Reference Cycles Can Leak Memory
+
+Rust’s memory safety guarantees make it difficult, but not impossible, to
+accidentally create memory that is never cleaned up (known as a *memory leak*).
+Preventing memory leaks entirely is not one of Rust’s guarantees, meaning
+memory leaks are memory safe in Rust. We can see that Rust allows memory leaks
+by using `Rc<T>` and `RefCell<T>`: it’s possible to create references where
+items refer to each other in a cycle. This creates memory leaks because the
+reference count of each item in the cycle will never reach 0, and the values
+will never be dropped.
+
+### Creating a Reference Cycle
+
+Let’s look at how a reference cycle might happen and how to prevent it,
+starting with the definition of the `List` enum and a `tail` method in Listing
+15-25:
+
+Filename: src/main.rs
+
+```
+use crate::List::{Cons, Nil};
+use std::cell::RefCell;
+use std::rc::Rc;
+
+#[derive(Debug)]
+enum List {
+ [1] Cons(i32, RefCell<Rc<List>>),
+ Nil,
+}
+
+impl List {
+ [2] fn tail(&self) -> Option<&RefCell<Rc<List>>> {
+ match self {
+ Cons(_, item) => Some(item),
+ Nil => None,
+ }
+ }
+}
+```
+
+Listing 15-25: A cons list definition that holds a `RefCell<T>` so we can
+modify what a `Cons` variant is referring to
+
+We’re using another variation of the `List` definition from Listing 15-5. The
+second element in the `Cons` variant is now `RefCell<Rc<List>>` [1], meaning
+that instead of having the ability to modify the `i32` value as we did in
+Listing 15-24, we want to modify the `List` value a `Cons` variant is
+pointing to. We’re also adding a `tail` method [2] to make it convenient for us
+to access the second item if we have a `Cons` variant.
+
+In Listing 15-26, we’re adding a `main` function that uses the definitions in
+Listing 15-25. This code creates a list in `a` and a list in `b` that points to
+the list in `a`. Then it modifies the list in `a` to point to `b`, creating a
+reference cycle. There are `println!` statements along the way to show what the
+reference counts are at various points in this process.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ [1] let a = Rc::new(Cons(5, RefCell::new(Rc::new(Nil))));
+
+ println!("a initial rc count = {}", Rc::strong_count(&a));
+ println!("a next item = {:?}", a.tail());
+
+ [2] let b = Rc::new(Cons(10, RefCell::new(Rc::clone(&a))));
+
+ println!("a rc count after b creation = {}", Rc::strong_count(&a));
+ println!("b initial rc count = {}", Rc::strong_count(&b));
+ println!("b next item = {:?}", b.tail());
+
+ [3] if let Some(link) = a.tail() {
+ [4] *link.borrow_mut() = Rc::clone(&b);
+ }
+
+ println!("b rc count after changing a = {}", Rc::strong_count(&b));
+ println!("a rc count after changing a = {}", Rc::strong_count(&a));
+
+ // Uncomment the next line to see that we have a cycle;
+ // it will overflow the stack
+ // println!("a next item = {:?}", a.tail());
+}
+```
+
+Listing 15-26: Creating a reference cycle of two `List` values pointing to each
+other
+
+We create an `Rc<List>` instance holding a `List` value in the variable `a`
+with an initial list of `5, Nil` [1]. We then create an `Rc<List>` instance
+holding another `List` value in the variable `b` that contains the value 10 and
+points to the list in `a` [2].
+
+We modify `a` so it points to `b` instead of `Nil`, creating a cycle. We do
+that by using the `tail` method to get a reference to the `RefCell<Rc<List>>`
+in `a`, which we put in the variable `link` [3]. Then we use the `borrow_mut`
+method on the `RefCell<Rc<List>>` to change the value inside from an `Rc<List>`
+that holds a `Nil` value to the `Rc<List>` in `b` [4].
+
+When we run this code, keeping the last `println!` commented out for the
+moment, we’ll get this output:
+
+```
+a initial rc count = 1
+a next item = Some(RefCell { value: Nil })
+a rc count after b creation = 2
+b initial rc count = 1
+b next item = Some(RefCell { value: Cons(5, RefCell { value: Nil }) })
+b rc count after changing a = 2
+a rc count after changing a = 2
+```
+
+The reference count of the `Rc<List>` instances in both `a` and `b` are 2 after
+we change the list in `a` to point to `b`. At the end of `main`, Rust drops the
+variable `b`, which decreases the reference count of the `b` `Rc<List>` instance
+from 2 to 1. The memory that `Rc<List>` has on the heap won’t be dropped at
+this point, because its reference count is 1, not 0. Then Rust drops `a`, which
+decreases the reference count of the `a` `Rc<List>` instance from 2 to 1 as
+well. This instance’s memory can’t be dropped either, because the other
+`Rc<List>` instance still refers to it. The memory allocated to the list will
+remain uncollected forever. To visualize this reference cycle, we’ve created a
+diagram in Figure 15-4.
+
+<img alt="Reference cycle of lists" src="img/trpl15-04.svg" class="center" />
+
+Figure 15-4: A reference cycle of lists `a` and `b` pointing to each other
+
+If you uncomment the last `println!` and run the program, Rust will try to
+print this cycle with `a` pointing to `b` pointing to `a` and so forth until it
+overflows the stack.
+
+Compared to a real-world program, the consequences creating a reference cycle
+in this example aren’t very dire: right after we create the reference cycle,
+the program ends. However, if a more complex program allocated lots of memory
+in a cycle and held onto it for a long time, the program would use more memory
+than it needed and might overwhelm the system, causing it to run out of
+available memory.
+
+Creating reference cycles is not easily done, but it’s not impossible either.
+If you have `RefCell<T>` values that contain `Rc<T>` values or similar nested
+combinations of types with interior mutability and reference counting, you must
+ensure that you don’t create cycles; you can’t rely on Rust to catch them.
+Creating a reference cycle would be a logic bug in your program that you should
+use automated tests, code reviews, and other software development practices to
+minimize.
+
+Another solution for avoiding reference cycles is reorganizing your data
+structures so that some references express ownership and some references don’t.
+As a result, you can have cycles made up of some ownership relationships and
+some non-ownership relationships, and only the ownership relationships affect
+whether or not a value can be dropped. In Listing 15-25, we always want `Cons`
+variants to own their list, so reorganizing the data structure isn’t possible.
+Let’s look at an example using graphs made up of parent nodes and child nodes
+to see when non-ownership relationships are an appropriate way to prevent
+reference cycles.
+
+### Preventing Reference Cycles: Turning an `Rc<T>` into a `Weak<T>`
+
+So far, we’ve demonstrated that calling `Rc::clone` increases the
+`strong_count` of an `Rc<T>` instance, and an `Rc<T>` instance is only cleaned
+up if its `strong_count` is 0. You can also create a *weak reference* to the
+value within an `Rc<T>` instance by calling `Rc::downgrade` and passing a
+reference to the `Rc<T>`. Strong references are how you can share ownership of
+an `Rc<T>` instance. Weak references don’t express an ownership relationship,
+and their count doesn't affect when an `Rc<T>` instance is cleaned up. They
+won’t cause a reference cycle because any cycle involving some weak references
+will be broken once the strong reference count of values involved is 0.
+
+When you call `Rc::downgrade`, you get a smart pointer of type `Weak<T>`.
+Instead of increasing the `strong_count` in the `Rc<T>` instance by 1, calling
+`Rc::downgrade` increases the `weak_count` by 1. The `Rc<T>` type uses
+`weak_count` to keep track of how many `Weak<T>` references exist, similar to
+`strong_count`. The difference is the `weak_count` doesn’t need to be 0 for the
+`Rc<T>` instance to be cleaned up.
+
+Because the value that `Weak<T>` references might have been dropped, to do
+anything with the value that a `Weak<T>` is pointing to, you must make sure the
+value still exists. Do this by calling the `upgrade` method on a `Weak<T>`
+instance, which will return an `Option<Rc<T>>`. You’ll get a result of `Some`
+if the `Rc<T>` value has not been dropped yet and a result of `None` if the
+`Rc<T>` value has been dropped. Because `upgrade` returns an `Option<Rc<T>>`,
+Rust will ensure that the `Some` case and the `None` case are handled, and
+there won’t be an invalid pointer.
+
+As an example, rather than using a list whose items know only about the next
+item, we’ll create a tree whose items know about their children items *and*
+their parent items.
+
+#### Creating a Tree Data Structure: a `Node` with Child Nodes
+
+To start, we’ll build a tree with nodes that know about their child nodes.
+We’ll create a struct named `Node` that holds its own `i32` value as well as
+references to its children `Node` values:
+
+Filename: src/main.rs
+
+```
+use std::cell::RefCell;
+use std::rc::Rc;
+
+#[derive(Debug)]
+struct Node {
+ value: i32,
+ children: RefCell<Vec<Rc<Node>>>,
+}
+```
+
+We want a `Node` to own its children, and we want to share that ownership with
+variables so we can access each `Node` in the tree directly. To do this, we
+define the `Vec<T>` items to be values of type `Rc<Node>`. We also want to
+modify which nodes are children of another node, so we have a `RefCell<T>` in
+`children` around the `Vec<Rc<Node>>`.
+
+Next, we’ll use our struct definition and create one `Node` instance named
+`leaf` with the value 3 and no children, and another instance named `branch`
+with the value 5 and `leaf` as one of its children, as shown in Listing 15-27:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let leaf = Rc::new(Node {
+ value: 3,
+ children: RefCell::new(vec![]),
+ });
+
+ let branch = Rc::new(Node {
+ value: 5,
+ children: RefCell::new(vec![Rc::clone(&leaf)]),
+ });
+}
+```
+
+Listing 15-27: Creating a `leaf` node with no children and a `branch` node with
+`leaf` as one of its children
+
+We clone the `Rc<Node>` in `leaf` and store that in `branch`, meaning the
+`Node` in `leaf` now has two owners: `leaf` and `branch`. We can get from
+`branch` to `leaf` through `branch.children`, but there’s no way to get from
+`leaf` to `branch`. The reason is that `leaf` has no reference to `branch` and
+doesn’t know they’re related. We want `leaf` to know that `branch` is its
+parent. We’ll do that next.
+
+#### Adding a Reference from a Child to Its Parent
+
+To make the child node aware of its parent, we need to add a `parent` field to
+our `Node` struct definition. The trouble is in deciding what the type of
+`parent` should be. We know it can’t contain an `Rc<T>`, because that would
+create a reference cycle with `leaf.parent` pointing to `branch` and
+`branch.children` pointing to `leaf`, which would cause their `strong_count`
+values to never be 0.
+
+Thinking about the relationships another way, a parent node should own its
+children: if a parent node is dropped, its child nodes should be dropped as
+well. However, a child should not own its parent: if we drop a child node, the
+parent should still exist. This is a case for weak references!
+
+So instead of `Rc<T>`, we’ll make the type of `parent` use `Weak<T>`,
+specifically a `RefCell<Weak<Node>>`. Now our `Node` struct definition looks
+like this:
+
+Filename: src/main.rs
+
+```
+use std::cell::RefCell;
+use std::rc::{Rc, Weak};
+
+#[derive(Debug)]
+struct Node {
+ value: i32,
+ parent: RefCell<Weak<Node>>,
+ children: RefCell<Vec<Rc<Node>>>,
+}
+```
+
+A node will be able to refer to its parent node but doesn’t own its parent.
+In Listing 15-28, we update `main` to use this new definition so the `leaf`
+node will have a way to refer to its parent, `branch`:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let leaf = Rc::new(Node {
+ value: 3,
+ [1] parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![]),
+ });
+
+ [2] println!("leaf parent = {:?}", leaf.parent.borrow().upgrade());
+
+ let branch = Rc::new(Node {
+ value: 5,
+ [3] parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![Rc::clone(&leaf)]),
+ });
+
+ [4] *leaf.parent.borrow_mut() = Rc::downgrade(&branch);
+
+ [5] println!("leaf parent = {:?}", leaf.parent.borrow().upgrade());
+}
+```
+
+Listing 15-28: A `leaf` node with a weak reference to its parent node `branch`
+
+Creating the `leaf` node looks similar to Listing 15-27 with the exception of
+the `parent` field: `leaf` starts out without a parent, so we create a new,
+empty `Weak<Node>` reference instance [1].
+
+At this point, when we try to get a reference to the parent of `leaf` by using
+the `upgrade` method, we get a `None` value. We see this in the output from the
+first `println!` statement [2]:
+
+```
+leaf parent = None
+```
+
+When we create the `branch` node, it will also have a new `Weak<Node>`
+reference in the `parent` field [3], because `branch` doesn’t have a parent
+node. We still have `leaf` as one of the children of `branch`. Once we have the
+`Node` instance in `branch`, we can modify `leaf` to give it a `Weak<Node>`
+reference to its parent [4]. We use the `borrow_mut` method on the
+`RefCell<Weak<Node>>` in the `parent` field of `leaf`, and then we use the
+`Rc::downgrade` function to create a `Weak<Node>` reference to `branch` from
+the `Rc<Node>` in `branch.`
+
+When we print the parent of `leaf` again [5], this time we’ll get a `Some`
+variant holding `branch`: now `leaf` can access its parent! When we print
+`leaf`, we also avoid the cycle that eventually ended in a stack overflow like
+we had in Listing 15-26; the `Weak<Node>` references are printed as `(Weak)`:
+
+```
+leaf parent = Some(Node { value: 5, parent: RefCell { value: (Weak) },
+children: RefCell { value: [Node { value: 3, parent: RefCell { value: (Weak) },
+children: RefCell { value: [] } }] } })
+```
+
+The lack of infinite output indicates that this code didn’t create a reference
+cycle. We can also tell this by looking at the values we get from calling
+`Rc::strong_count` and `Rc::weak_count`.
+
+#### Visualizing Changes to `strong_count` and `weak_count`
+
+Let’s look at how the `strong_count` and `weak_count` values of the `Rc<Node>`
+instances change by creating a new inner scope and moving the creation of
+`branch` into that scope. By doing so, we can see what happens when `branch` is
+created and then dropped when it goes out of scope. The modifications are shown
+in Listing 15-29:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let leaf = Rc::new(Node {
+ value: 3,
+ parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![]),
+ });
+
+ [1] println!(
+ "leaf strong = {}, weak = {}",
+ Rc::strong_count(&leaf),
+ Rc::weak_count(&leaf),
+ );
+
+ [2] {
+ let branch = Rc::new(Node {
+ value: 5,
+ parent: RefCell::new(Weak::new()),
+ children: RefCell::new(vec![Rc::clone(&leaf)]),
+ });
+
+ *leaf.parent.borrow_mut() = Rc::downgrade(&branch);
+
+ [3] println!(
+ "branch strong = {}, weak = {}",
+ Rc::strong_count(&branch),
+ Rc::weak_count(&branch),
+ );
+
+ [4] println!(
+ "leaf strong = {}, weak = {}",
+ Rc::strong_count(&leaf),
+ Rc::weak_count(&leaf),
+ );
+ [5] }
+
+ [6] println!("leaf parent = {:?}", leaf.parent.borrow().upgrade());
+ [7] println!(
+ "leaf strong = {}, weak = {}",
+ Rc::strong_count(&leaf),
+ Rc::weak_count(&leaf),
+ );
+}
+```
+
+Listing 15-29: Creating `branch` in an inner scope and examining strong and
+weak reference counts
+
+After `leaf` is created, its `Rc<Node>` has a strong count of 1 and a weak
+count of 0 [1]. In the inner scope [2], we create `branch` and associate it
+with `leaf`, at which point when we print the counts [3], the `Rc<Node>` in
+`branch` will have a strong count of 1 and a weak count of 1 (for `leaf.parent`
+pointing to `branch` with a `Weak<Node>`). When we print the counts in `leaf`
+[4], we’ll see it will have a strong count of 2, because `branch` now has a
+clone of the `Rc<Node>` of `leaf` stored in `branch.children`, but will still
+have a weak count of 0.
+
+When the inner scope ends [5], `branch` goes out of scope and the strong count
+of the `Rc<Node>` decreases to 0, so its `Node` is dropped. The weak count of 1
+from `leaf.parent` has no bearing on whether or not `Node` is dropped, so we
+don’t get any memory leaks!
+
+If we try to access the parent of `leaf` after the end of the scope, we’ll get
+`None` again [6]. At the end of the program [7], the `Rc<Node>` in `leaf` has a
+strong count of 1 and a weak count of 0, because the variable `leaf` is now the
+only reference to the `Rc<Node>` again.
+
+All of the logic that manages the counts and value dropping is built into
+`Rc<T>` and `Weak<T>` and their implementations of the `Drop` trait. By
+specifying that the relationship from a child to its parent should be a
+`Weak<T>` reference in the definition of `Node`, you’re able to have parent
+nodes point to child nodes and vice versa without creating a reference cycle
+and memory leaks.
+
+## Summary
+
+This chapter covered how to use smart pointers to make different guarantees and
+trade-offs from those Rust makes by default with regular references. The
+`Box<T>` type has a known size and points to data allocated on the heap. The
+`Rc<T>` type keeps track of the number of references to data on the heap so
+that data can have multiple owners. The `RefCell<T>` type with its interior
+mutability gives us a type that we can use when we need an immutable type but
+need to change an inner value of that type; it also enforces the borrowing
+rules at runtime instead of at compile time.
+
+Also discussed were the `Deref` and `Drop` traits, which enable a lot of the
+functionality of smart pointers. We explored reference cycles that can cause
+memory leaks and how to prevent them using `Weak<T>`.
+
+If this chapter has piqued your interest and you want to implement your own
+smart pointers, check out “The Rustonomicon” at
+*https://doc.rust-lang.org/stable/nomicon/* for more useful information.
+
+Next, we’ll talk about concurrency in Rust. You’ll even learn about a few new
+smart pointers.
diff --git a/src/doc/book/nostarch/chapter16.md b/src/doc/book/nostarch/chapter16.md
new file mode 100644
index 000000000..1f404f84d
--- /dev/null
+++ b/src/doc/book/nostarch/chapter16.md
@@ -0,0 +1,1268 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Fearless Concurrency
+
+Handling concurrent programming safely and efficiently is another of Rust’s
+major goals. *Concurrent programming*, where different parts of a program
+execute independently, and *parallel programming*, where different parts of a
+program execute at the same time, are becoming increasingly important as more
+computers take advantage of their multiple processors. Historically,
+programming in these contexts has been difficult and error prone: Rust hopes to
+change that.
+
+<!-- Concurrent programming isn't necessarily helped by having multiple
+processors. How I've been teaching it is to distinguish the two by their
+workload: concurrent programming serves the needs of I/O-bound workloads and
+parallel programming serves the needs of CPU-bound workloads. If you give
+CPU bound workloads more CPUs, you have the opportunity to possibly go faster
+(assuming sufficient parallelism in the code). For I/O-bound workloads,
+rather than the need to have multiple processors, you need to be able to
+get as many I/O requests in flight and being processed as you can. This
+allows more I/O requests, and as a result better throughput/response time
+on those I/O requests.
+
+We could introduce these concepts and then simplify like we do in a bit to
+say that the design considerations of Rust allow both concurrency and
+parallelism to be done safely (...and for the remainder of the chapter talk
+about those design considerations rather than the specifics for either
+concurrency or parallelism) /JT -->
+<!-- I really don't want to get in the weeds on this because there are many
+other books and resources about concurrency and parallelism because these
+concepts aren't Rust specific. I want this to feel accessible to programmers
+who have never even considered whether their programs are I/O or CPU bound,
+because those are the types of programmers we want to empower (and make them
+feel empowered to create concurrent and/or parallel code) through Rust. So I'm
+deliberately choosing not to change anything here. /Carol -->
+
+Initially, the Rust team thought that ensuring memory safety and preventing
+concurrency problems were two separate challenges to be solved with different
+methods. Over time, the team discovered that the ownership and type systems are
+a powerful set of tools to help manage memory safety *and* concurrency
+problems! By leveraging ownership and type checking, many concurrency errors
+are compile-time errors in Rust rather than runtime errors. Therefore, rather
+than making you spend lots of time trying to reproduce the exact circumstances
+under which a runtime concurrency bug occurs, incorrect code will refuse to
+compile and present an error explaining the problem. As a result, you can fix
+your code while you’re working on it rather than potentially after it has been
+shipped to production. We’ve nicknamed this aspect of Rust *fearless*
+*concurrency*. Fearless concurrency allows you to write code that is free of
+subtle bugs and is easy to refactor without introducing new bugs.
+
+> Note: For simplicity’s sake, we’ll refer to many of the problems as
+> *concurrent* rather than being more precise by saying *concurrent and/or
+> parallel*. If this book were about concurrency and/or parallelism, we’d be
+> more specific. For this chapter, please mentally substitute *concurrent
+> and/or parallel* whenever we use *concurrent*.
+
+Many languages are dogmatic about the solutions they offer for handling
+concurrent problems. For example, Erlang has elegant functionality for
+message-passing concurrency but has only obscure ways to share state between
+threads. Supporting only a subset of possible solutions is a reasonable
+strategy for higher-level languages, because a higher-level language promises
+benefits from giving up some control to gain abstractions. However, lower-level
+languages are expected to provide the solution with the best performance in any
+given situation and have fewer abstractions over the hardware. Therefore, Rust
+offers a variety of tools for modeling problems in whatever way is appropriate
+for your situation and requirements.
+
+Here are the topics we’ll cover in this chapter:
+
+* How to create threads to run multiple pieces of code at the same time
+* *Message-passing* concurrency, where channels send messages between threads
+* *Shared-state* concurrency, where multiple threads have access to some piece
+ of data
+* The `Sync` and `Send` traits, which extend Rust’s concurrency guarantees to
+ user-defined types as well as types provided by the standard library
+
+## Using Threads to Run Code Simultaneously
+
+In most current operating systems, an executed program’s code is run in a
+*process*, and the operating system will manage multiple processes at once.
+Within a program, you can also have independent parts that run simultaneously.
+The features that run these independent parts are called *threads*. For
+example, a web server could have multiple threads so that it could respond to
+more than one request at the same time.
+
+Splitting the computation in your program into multiple threads to run multiple
+tasks at the same time can improve performance, but it also adds complexity.
+Because threads can run simultaneously, there’s no inherent guarantee about the
+order in which parts of your code on different threads will run. This can lead
+to problems, such as:
+
+* Race conditions, where threads are accessing data or resources in an
+ inconsistent order
+* Deadlocks, where two threads are waiting for each other, preventing both
+ threads from continuing
+* Bugs that happen only in certain situations and are hard to reproduce and fix
+ reliably
+
+Rust attempts to mitigate the negative effects of using threads, but
+programming in a multithreaded context still takes careful thought and requires
+a code structure that is different from that in programs running in a single
+thread.
+
+Programming languages implement threads in a few different ways, and many
+operating systems provide an API the language can call for creating new
+threads. The Rust standard library uses a *1:1* model of thread implementation,
+whereby a program uses one operating system thread per one language thread.
+There are crates that implement other models of threading that make different
+tradeoffs to the 1:1 model.
+
+### Creating a New Thread with `spawn`
+
+To create a new thread, we call the `thread::spawn` function and pass it a
+closure (we talked about closures in Chapter 13) containing the code we want to
+run in the new thread. The example in Listing 16-1 prints some text from a main
+thread and other text from a new thread:
+
+Filename: src/main.rs
+
+```
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ thread::spawn(|| {
+ for i in 1..10 {
+ println!("hi number {} from the spawned thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+ });
+
+ for i in 1..5 {
+ println!("hi number {} from the main thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+}
+```
+
+Listing 16-1: Creating a new thread to print one thing while the main thread
+prints something else
+
+Note that when the main thread of a Rust program completes, all spawned threads
+are shut down, whether or not they have finished running. The output from this
+program might be a little different every time, but it will look similar to the
+following:
+
+```
+hi number 1 from the main thread!
+hi number 1 from the spawned thread!
+hi number 2 from the main thread!
+hi number 2 from the spawned thread!
+hi number 3 from the main thread!
+hi number 3 from the spawned thread!
+hi number 4 from the main thread!
+hi number 4 from the spawned thread!
+hi number 5 from the spawned thread!
+```
+
+The calls to `thread::sleep` force a thread to stop its execution for a short
+duration, allowing a different thread to run. The threads will probably take
+turns, but that isn’t guaranteed: it depends on how your operating system
+schedules the threads. In this run, the main thread printed first, even though
+the print statement from the spawned thread appears first in the code. And even
+though we told the spawned thread to print until `i` is 9, it only got to 5
+before the main thread shut down.
+
+If you run this code and only see output from the main thread, or don’t see any
+overlap, try increasing the numbers in the ranges to create more opportunities
+for the operating system to switch between the threads.
+
+### Waiting for All Threads to Finish Using `join` Handles
+
+The code in Listing 16-1 not only stops the spawned thread prematurely most of
+the time due to the main thread ending, but because there is no guarantee on
+the order in which threads run, we also can’t guarantee that the spawned thread
+will get to run at all!
+
+We can fix the problem of the spawned thread not running or ending prematurely
+by saving the return value of `thread::spawn` in a variable. The return type of
+`thread::spawn` is `JoinHandle`. A `JoinHandle` is an owned value that, when we
+call the `join` method on it, will wait for its thread to finish. Listing 16-2
+shows how to use the `JoinHandle` of the thread we created in Listing 16-1 and
+call `join` to make sure the spawned thread finishes before `main` exits:
+
+Filename: src/main.rs
+
+```
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let handle = thread::spawn(|| {
+ for i in 1..10 {
+ println!("hi number {} from the spawned thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+ });
+
+ for i in 1..5 {
+ println!("hi number {} from the main thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+
+ handle.join().unwrap();
+}
+```
+
+Listing 16-2: Saving a `JoinHandle` from `thread::spawn` to guarantee the
+thread is run to completion
+
+Calling `join` on the handle blocks the thread currently running until the
+thread represented by the handle terminates. *Blocking* a thread means that
+thread is prevented from performing work or exiting. Because we’ve put the call
+to `join` after the main thread’s `for` loop, running Listing 16-2 should
+produce output similar to this:
+
+```
+hi number 1 from the main thread!
+hi number 2 from the main thread!
+hi number 1 from the spawned thread!
+hi number 3 from the main thread!
+hi number 2 from the spawned thread!
+hi number 4 from the main thread!
+hi number 3 from the spawned thread!
+hi number 4 from the spawned thread!
+hi number 5 from the spawned thread!
+hi number 6 from the spawned thread!
+hi number 7 from the spawned thread!
+hi number 8 from the spawned thread!
+hi number 9 from the spawned thread!
+```
+
+The two threads continue alternating, but the main thread waits because of the
+call to `handle.join()` and does not end until the spawned thread is finished.
+
+But let’s see what happens when we instead move `handle.join()` before the
+`for` loop in `main`, like this:
+
+Filename: src/main.rs
+
+```
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let handle = thread::spawn(|| {
+ for i in 1..10 {
+ println!("hi number {} from the spawned thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+ });
+
+ handle.join().unwrap();
+
+ for i in 1..5 {
+ println!("hi number {} from the main thread!", i);
+ thread::sleep(Duration::from_millis(1));
+ }
+}
+```
+
+The main thread will wait for the spawned thread to finish and then run its
+`for` loop, so the output won’t be interleaved anymore, as shown here:
+
+```
+hi number 1 from the spawned thread!
+hi number 2 from the spawned thread!
+hi number 3 from the spawned thread!
+hi number 4 from the spawned thread!
+hi number 5 from the spawned thread!
+hi number 6 from the spawned thread!
+hi number 7 from the spawned thread!
+hi number 8 from the spawned thread!
+hi number 9 from the spawned thread!
+hi number 1 from the main thread!
+hi number 2 from the main thread!
+hi number 3 from the main thread!
+hi number 4 from the main thread!
+```
+
+Small details, such as where `join` is called, can affect whether or not your
+threads run at the same time.
+
+### Using `move` Closures with Threads
+
+We'll often use the `move` keyword with closures passed to `thread::spawn`
+because the closure will then take ownership of the values it uses from the
+environment, thus transferring ownership of those values from one thread to
+another. In the “Capturing the Environment with Closures” section of Chapter
+13, we discussed `move` in the context of closures. Now, we’ll concentrate more
+on the interaction between `move` and `thread::spawn`.
+
+Notice in Listing 16-1 that the closure we pass to `thread::spawn` takes no
+arguments: we’re not using any data from the main thread in the spawned
+thread’s code. To use data from the main thread in the spawned thread, the
+spawned thread’s closure must capture the values it needs. Listing 16-3 shows
+an attempt to create a vector in the main thread and use it in the spawned
+thread. However, this won’t yet work, as you’ll see in a moment.
+
+Filename: src/main.rs
+
+```
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(|| {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ handle.join().unwrap();
+}
+```
+
+Listing 16-3: Attempting to use a vector created by the main thread in another
+thread
+
+The closure uses `v`, so it will capture `v` and make it part of the closure’s
+environment. Because `thread::spawn` runs this closure in a new thread, we
+should be able to access `v` inside that new thread. But when we compile this
+example, we get the following error:
+
+```
+error[E0373]: closure may outlive the current function, but it borrows `v`, which is owned by the current function
+ --> src/main.rs:6:32
+ |
+6 | let handle = thread::spawn(|| {
+ | ^^ may outlive borrowed value `v`
+7 | println!("Here's a vector: {:?}", v);
+ | - `v` is borrowed here
+ |
+note: function requires argument type to outlive `'static`
+ --> src/main.rs:6:18
+ |
+6 | let handle = thread::spawn(|| {
+ | __________________^
+7 | | println!("Here's a vector: {:?}", v);
+8 | | });
+ | |______^
+help: to force the closure to take ownership of `v` (and any other referenced variables), use the `move` keyword
+ |
+6 | let handle = thread::spawn(move || {
+ | ++++
+```
+
+Rust *infers* how to capture `v`, and because `println!` only needs a reference
+to `v`, the closure tries to borrow `v`. However, there’s a problem: Rust can’t
+tell how long the spawned thread will run, so it doesn’t know if the reference
+to `v` will always be valid.
+
+Listing 16-4 provides a scenario that’s more likely to have a reference to `v`
+that won’t be valid:
+
+Filename: src/main.rs
+
+```
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(|| {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ drop(v); // oh no!
+
+ handle.join().unwrap();
+}
+```
+
+Listing 16-4: A thread with a closure that attempts to capture a reference to
+`v` from a main thread that drops `v`
+
+If Rust allowed us to run this code, there’s a possibility the spawned thread
+would be immediately put in the background without running at all. The spawned
+thread has a reference to `v` inside, but the main thread immediately drops
+`v`, using the `drop` function we discussed in Chapter 15. Then, when the
+spawned thread starts to execute, `v` is no longer valid, so a reference to it
+is also invalid. Oh no!
+
+To fix the compiler error in Listing 16-3, we can use the error message’s
+advice:
+
+```
+help: to force the closure to take ownership of `v` (and any other referenced variables), use the `move` keyword
+ |
+6 | let handle = thread::spawn(move || {
+ | ++++
+```
+
+By adding the `move` keyword before the closure, we force the closure to take
+ownership of the values it’s using rather than allowing Rust to infer that it
+should borrow the values. The modification to Listing 16-3 shown in Listing
+16-5 will compile and run as we intend:
+
+Filename: src/main.rs
+
+```
+use std::thread;
+
+fn main() {
+ let v = vec![1, 2, 3];
+
+ let handle = thread::spawn(move || {
+ println!("Here's a vector: {:?}", v);
+ });
+
+ handle.join().unwrap();
+}
+```
+
+Listing 16-5: Using the `move` keyword to force a closure to take ownership of
+the values it uses
+
+We might be tempted to try the same thing to fix the code in Listing 16-4 where
+the main thread called `drop` by using a `move` closure. However, this fix will
+not work because what Listing 16-4 is trying to do is disallowed for a
+different reason. If we added `move` to the closure, we would move `v` into the
+closure’s environment, and we could no longer call `drop` on it in the main
+thread. We would get this compiler error instead:
+
+```
+error[E0382]: use of moved value: `v`
+ --> src/main.rs:10:10
+ |
+4 | let v = vec![1, 2, 3];
+ | - move occurs because `v` has type `Vec<i32>`, which does not implement the `Copy` trait
+5 |
+6 | let handle = thread::spawn(move || {
+ | ------- value moved into closure here
+7 | println!("Here's a vector: {:?}", v);
+ | - variable moved due to use in closure
+...
+10 | drop(v); // oh no!
+ | ^ value used here after move
+```
+
+Rust’s ownership rules have saved us again! We got an error from the code in
+Listing 16-3 because Rust was being conservative and only borrowing `v` for the
+thread, which meant the main thread could theoretically invalidate the spawned
+thread’s reference. By telling Rust to move ownership of `v` to the spawned
+thread, we’re guaranteeing Rust that the main thread won’t use `v` anymore. If
+we change Listing 16-4 in the same way, we’re then violating the ownership
+rules when we try to use `v` in the main thread. The `move` keyword overrides
+Rust’s conservative default of borrowing; it doesn’t let us violate the
+ownership rules.
+
+With a basic understanding of threads and the thread API, let’s look at what we
+can *do* with threads.
+
+## Using Message Passing to Transfer Data Between Threads
+
+One increasingly popular approach to ensuring safe concurrency is *message
+passing*, where threads or actors communicate by sending each other messages
+containing data. Here’s the idea in a slogan from the Go language
+documentation at *https://golang.org/doc/effective_go.html#concurrency*:
+“Do not communicate by sharing memory; instead, share memory by communicating.”
+
+<!-- are they communicating to decide which thread should be running, or by
+"communicate" do we just mean sharing data? /LC -->
+<!-- Just sharing data. Is there something that should be clarified here? I'm
+not sure what to do because this paragraph doesn't mention deciding which
+thread should be running, it only mentions sharing data, so I'm not sure where
+the possible confusion is coming from. /Carol -->
+<!-- JT, if this will be already obvious to a reader, no changes needed. I just
+wanted to ensure there was no potential confusion around what is being
+communicated /LC -->
+<!-- I like that we want to give a shout-out to Go's thinking process when
+we align, though I made a bit of a face reading the quote. "Share memory" is a
+such a loaded concept that I think people might stumble a bit over the play on
+the technical words.
+
+Funnily the next line following that quote in the Go book is:
+
+"This approach can be taken too far." :D
+/JT -->
+<!-- I think this means JT is fine leaving this the way it is! /Carol -->
+
+To accomplish message-sending concurrency, Rust's standard library provides an
+implementation of *channels*. A channel is a general programming concept by
+which data is sent from one thread to another.
+
+You can imagine a channel in programming as being like a directional channel of
+water, such as a stream or a river. If you put something like a rubber duck
+into a river, it will travel downstream to the end of the waterway.
+
+A channel has two halves: a transmitter and a receiver. The transmitter half is
+the upstream location where you put rubber ducks into the river, and the
+receiver half is where the rubber duck ends up downstream. One part of your
+code calls methods on the transmitter with the data you want to send, and
+another part checks the receiving end for arriving messages. A channel is said
+to be *closed* if either the transmitter or receiver half is dropped.
+
+Here, we’ll work up to a program that has one thread to generate values and
+send them down a channel, and another thread that will receive the values and
+print them out. We’ll be sending simple values between threads using a channel
+to illustrate the feature. Once you’re familiar with the technique, you could
+use channels for any threads that needs to communicate between each other, such
+as a chat system or a system where many threads perform parts of a calculation
+and send the parts to one thread that aggregates the results.
+
+First, in Listing 16-6, we’ll create a channel but not do anything with it.
+Note that this won’t compile yet because Rust can’t tell what type of values we
+want to send over the channel.
+
+Filename: src/main.rs
+
+```
+use std::sync::mpsc;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+}
+```
+
+Listing 16-6: Creating a channel and assigning the two halves to `tx` and `rx`
+
+We create a new channel using the `mpsc::channel` function; `mpsc` stands for
+*multiple producer, single consumer*. In short, the way Rust’s standard library
+implements channels means a channel can have multiple *sending* ends that
+produce values but only one *receiving* end that consumes those values. Imagine
+multiple streams flowing together into one big river: everything sent down any
+of the streams will end up in one river at the end. We’ll start with a single
+producer for now, but we’ll add multiple producers when we get this example
+working.
+
+The `mpsc::channel` function returns a tuple, the first element of which is the
+sending end--the transmitter--and the second element is the receiving end--the
+receiver. The abbreviations `tx` and `rx` are traditionally used in many fields
+for *transmitter* and *receiver* respectively, so we name our variables as such
+to indicate each end. We’re using a `let` statement with a pattern that
+destructures the tuples; we’ll discuss the use of patterns in `let` statements
+and destructuring in Chapter 18. For now, know that using a `let` statement
+this way is a convenient approach to extract the pieces of the tuple returned
+by `mpsc::channel`.
+
+Let’s move the transmitting end into a spawned thread and have it send one
+string so the spawned thread is communicating with the main thread, as shown in
+Listing 16-7. This is like putting a rubber duck in the river upstream or
+sending a chat message from one thread to another.
+
+Filename: src/main.rs
+
+```
+use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let val = String::from("hi");
+ tx.send(val).unwrap();
+ });
+}
+```
+
+Listing 16-7: Moving `tx` to a spawned thread and sending “hi”
+
+Again, we’re using `thread::spawn` to create a new thread and then using `move`
+to move `tx` into the closure so the spawned thread owns `tx`. The spawned
+thread needs to own the transmitter to be able to send messages through the
+channel.
+
+The transmitter has a `send` method that takes the value we want to send.
+The `send` method returns a `Result<T, E>` type, so if the receiver has
+already been dropped and there’s nowhere to send a value, the send operation
+will return an error. In this example, we’re calling `unwrap` to panic in case
+of an error. But in a real application, we would handle it properly: return to
+Chapter 9 to review strategies for proper error handling.
+
+In Listing 16-8, we’ll get the value from the receiver in the main thread. This
+is like retrieving the rubber duck from the water at the end of the river or
+receiving a chat message.
+
+Filename: src/main.rs
+
+```
+use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let val = String::from("hi");
+ tx.send(val).unwrap();
+ });
+
+ let received = rx.recv().unwrap();
+ println!("Got: {}", received);
+}
+```
+
+Listing 16-8: Receiving the value “hi” in the main thread and printing it
+
+The receiver has two useful methods: `recv` and `try_recv`. We’re using `recv`,
+short for *receive*, which will block the main thread’s execution and wait
+until a value is sent down the channel. Once a value is sent, `recv` will
+return it in a `Result<T, E>`. When the transmitter closes, `recv` will return
+an error to signal that no more values will be coming.
+
+The `try_recv` method doesn’t block, but will instead return a `Result<T, E>`
+immediately: an `Ok` value holding a message if one is available and an `Err`
+value if there aren’t any messages this time. Using `try_recv` is useful if
+this thread has other work to do while waiting for messages: we could write a
+loop that calls `try_recv` every so often, handles a message if one is
+available, and otherwise does other work for a little while until checking
+again.
+
+We’ve used `recv` in this example for simplicity; we don’t have any other work
+for the main thread to do other than wait for messages, so blocking the main
+thread is appropriate.
+
+When we run the code in Listing 16-8, we’ll see the value printed from the main
+thread:
+
+```
+Got: hi
+```
+
+Perfect!
+
+### Channels and Ownership Transference
+
+The ownership rules play a vital role in message sending because they help you
+write safe, concurrent code. Preventing errors in concurrent programming is the
+advantage of thinking about ownership throughout your Rust programs. Let’s do
+an experiment to show how channels and ownership work together to prevent
+problems: we’ll try to use a `val` value in the spawned thread *after* we’ve
+sent it down the channel. Try compiling the code in Listing 16-9 to see why
+this code isn’t allowed:
+
+Filename: src/main.rs
+
+```
+use std::sync::mpsc;
+use std::thread;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let val = String::from("hi");
+ tx.send(val).unwrap();
+ println!("val is {}", val);
+ });
+
+ let received = rx.recv().unwrap();
+ println!("Got: {}", received);
+}
+```
+
+Listing 16-9: Attempting to use `val` after we’ve sent it down the channel
+
+Here, we try to print `val` after we’ve sent it down the channel via `tx.send`.
+Allowing this would be a bad idea: once the value has been sent to another
+thread, that thread could modify or drop it before we try to use the value
+again. Potentially, the other thread’s modifications could cause errors or
+unexpected results due to inconsistent or nonexistent data. However, Rust gives
+us an error if we try to compile the code in Listing 16-9:
+
+```
+error[E0382]: borrow of moved value: `val`
+ --> src/main.rs:10:31
+ |
+8 | let val = String::from("hi");
+ | --- move occurs because `val` has type `String`, which does not implement the `Copy` trait
+9 | tx.send(val).unwrap();
+ | --- value moved here
+10 | println!("val is {}", val);
+ | ^^^ value borrowed here after move
+```
+
+Our concurrency mistake has caused a compile time error. The `send` function
+takes ownership of its parameter, and when the value is moved, the receiver
+takes ownership of it. This stops us from accidentally using the value again
+after sending it; the ownership system checks that everything is okay.
+
+### Sending Multiple Values and Seeing the Receiver Waiting
+
+The code in Listing 16-8 compiled and ran, but it didn’t clearly show us that
+two separate threads were talking to each other over the channel. In Listing
+16-10 we’ve made some modifications that will prove the code in Listing 16-8 is
+running concurrently: the spawned thread will now send multiple messages and
+pause for a second between each message.
+
+Filename: src/main.rs
+
+```
+use std::sync::mpsc;
+use std::thread;
+use std::time::Duration;
+
+fn main() {
+ let (tx, rx) = mpsc::channel();
+
+ thread::spawn(move || {
+ let vals = vec![
+ String::from("hi"),
+ String::from("from"),
+ String::from("the"),
+ String::from("thread"),
+ ];
+
+ for val in vals {
+ tx.send(val).unwrap();
+ thread::sleep(Duration::from_secs(1));
+ }
+ });
+
+ for received in rx {
+ println!("Got: {}", received);
+ }
+}
+```
+
+Listing 16-10: Sending multiple messages and pausing between each
+
+This time, the spawned thread has a vector of strings that we want to send to
+the main thread. We iterate over them, sending each individually, and pause
+between each by calling the `thread::sleep` function with a `Duration` value of
+1 second.
+
+In the main thread, we’re not calling the `recv` function explicitly anymore:
+instead, we’re treating `rx` as an iterator. For each value received, we’re
+printing it. When the channel is closed, iteration will end.
+
+When running the code in Listing 16-10, you should see the following output
+with a 1-second pause in between each line:
+
+```
+Got: hi
+Got: from
+Got: the
+Got: thread
+```
+
+Because we don’t have any code that pauses or delays in the `for` loop in the
+main thread, we can tell that the main thread is waiting to receive values from
+the spawned thread.
+
+### Creating Multiple Producers by Cloning the Transmitter
+
+Earlier we mentioned that `mpsc` was an acronym for *multiple producer,
+single consumer*. Let’s put `mpsc` to use and expand the code in Listing 16-10
+to create multiple threads that all send values to the same receiver. We can do
+so by cloning the transmitter, as shown in Listing 16-11:
+
+Filename: src/main.rs
+
+```
+ // --snip--
+
+ let (tx, rx) = mpsc::channel();
+
+ let tx1 = tx.clone();
+ thread::spawn(move || {
+ let vals = vec![
+ String::from("hi"),
+ String::from("from"),
+ String::from("the"),
+ String::from("thread"),
+ ];
+
+ for val in vals {
+ tx1.send(val).unwrap();
+ thread::sleep(Duration::from_secs(1));
+ }
+ });
+
+ thread::spawn(move || {
+ let vals = vec![
+ String::from("more"),
+ String::from("messages"),
+ String::from("for"),
+ String::from("you"),
+ ];
+
+ for val in vals {
+ tx.send(val).unwrap();
+ thread::sleep(Duration::from_secs(1));
+ }
+ });
+
+ for received in rx {
+ println!("Got: {}", received);
+ }
+
+ // --snip--
+```
+
+Listing 16-11: Sending multiple messages from multiple producers
+
+This time, before we create the first spawned thread, we call `clone` on the
+transmitter. This will give us a new transmitter we can pass to the first
+spawned thread. We pass the original transmitter to a second spawned thread.
+This gives us two threads, each sending different messages to the one receiver.
+
+When you run the code, your output should look something like this:
+
+```
+Got: hi
+Got: more
+Got: from
+Got: messages
+Got: for
+Got: the
+Got: thread
+Got: you
+```
+
+You might see the values in another order, depending on your system. This is
+what makes concurrency interesting as well as difficult. If you experiment with
+`thread::sleep`, giving it various values in the different threads, each run
+will be more nondeterministic and create different output each time.
+
+Now that we’ve looked at how channels work, let’s look at a different method of
+concurrency.
+
+## Shared-State Concurrency
+
+Message passing is a fine way of handling concurrency, but it’s not the only
+one. Another method would be for multiple threads to access the same shared
+data. Consider this part of the slogan from the Go language documentation
+again: “do not communicate by sharing memory.”
+
+<!-- NB: if we decide to do anything with the Go quote above, we also
+reference it here.
+/JT -->
+<!-- Also not changing anything here. /Carol -->
+
+What would communicating by sharing memory look like? In addition, why would
+message-passing enthusiasts caution not to use memory sharing?
+
+In a way, channels in any programming language are similar to single ownership,
+because once you transfer a value down a channel, you should no longer use that
+value. Shared memory concurrency is like multiple ownership: multiple threads
+can access the same memory location at the same time. As you saw in Chapter 15,
+where smart pointers made multiple ownership possible, multiple ownership can
+add complexity because these different owners need managing. Rust’s type system
+and ownership rules greatly assist in getting this management correct. For an
+example, let’s look at mutexes, one of the more common concurrency primitives
+for shared memory.
+
+### Using Mutexes to Allow Access to Data from One Thread at a Time
+
+*Mutex* is an abbreviation for *mutual exclusion*, as in, a mutex allows only
+one thread to access some data at any given time. To access the data in a
+mutex, a thread must first signal that it wants access by asking to acquire the
+mutex’s *lock*. The lock is a data structure that is part of the mutex that
+keeps track of who currently has exclusive access to the data. Therefore, the
+mutex is described as *guarding* the data it holds via the locking system.
+
+Mutexes have a reputation for being difficult to use because you have to
+remember two rules:
+
+* You must attempt to acquire the lock before using the data.
+* When you’re done with the data that the mutex guards, you must unlock the
+ data so other threads can acquire the lock.
+
+For a real-world metaphor for a mutex, imagine a panel discussion at a
+conference with only one microphone. Before a panelist can speak, they have to
+ask or signal that they want to use the microphone. When they get the
+microphone, they can talk for as long as they want to and then hand the
+microphone to the next panelist who requests to speak. If a panelist forgets to
+hand the microphone off when they’re finished with it, no one else is able to
+speak. If management of the shared microphone goes wrong, the panel won’t work
+as planned!
+
+Management of mutexes can be incredibly tricky to get right, which is why so
+many people are enthusiastic about channels. However, thanks to Rust’s type
+system and ownership rules, you can’t get locking and unlocking wrong.
+
+#### The API of `Mutex<T>`
+
+As an example of how to use a mutex, let’s start by using a mutex in a
+single-threaded context, as shown in Listing 16-12:
+
+Filename: src/main.rs
+
+```
+use std::sync::Mutex;
+
+fn main() {
+ [1] let m = Mutex::new(5);
+
+ {
+ [2] let mut num = m.lock().unwrap();
+ [3] *num = 6;
+ [4] }
+
+ [5] println!("m = {:?}", m);
+}
+```
+
+Listing 16-12: Exploring the API of `Mutex<T>` in a single-threaded context for
+simplicity
+
+As with many types, we create a `Mutex<T>` using the associated function `new`
+[1]. To access the data inside the mutex, we use the `lock` method to acquire
+the lock [2]. This call will block the current thread so it can’t do any work
+until it’s our turn to have the lock.
+
+The call to `lock` would fail if another thread holding the lock panicked. In
+that case, no one would ever be able to get the lock, so we’ve chosen to
+`unwrap` and have this thread panic if we’re in that situation.
+
+After we’ve acquired the lock, we can treat the return value, named `num` in
+this case, as a mutable reference to the data inside. The type system ensures
+that we acquire a lock before using the value in `m`. The type of `m` is
+`Mutex<i32>`, not `i32`, so we *must* call `lock` to be able to use the `i32`
+value. We can’t forget; the type system won’t let us access the inner `i32`
+otherwise.
+
+As you might suspect, `Mutex<T>` is a smart pointer. More accurately, the call
+to `lock` *returns* a smart pointer called `MutexGuard`, wrapped in a
+`LockResult` that we handled with the call to `unwrap`. The `MutexGuard` smart
+pointer implements `Deref` to point at our inner data; the smart pointer also
+has a `Drop` implementation that releases the lock automatically when a
+`MutexGuard` goes out of scope, which happens at the end of the inner scope
+[4]. As a result, we don’t risk forgetting to release the lock and blocking the
+mutex from being used by other threads, because the lock release happens
+automatically.
+
+After dropping the lock, we can print the mutex value and see that we were able
+to change the inner `i32` to 6 [5].
+
+#### Sharing a `Mutex<T>` Between Multiple Threads
+
+Now, let’s try to share a value between multiple threads using `Mutex<T>`.
+We’ll spin up 10 threads and have them each increment a counter value by 1, so
+the counter goes from 0 to 10. The next example in Listing 16-13 will have
+a compiler error, and we’ll use that error to learn more about using
+`Mutex<T>` and how Rust helps us use it correctly.
+
+Filename: src/main.rs
+
+```
+use std::sync::Mutex;
+use std::thread;
+
+fn main() {
+ [1] let counter = Mutex::new(0);
+ let mut handles = vec![];
+
+ [2] for _ in 0..10 {
+ [3] let handle = thread::spawn(move || {
+ [4] let mut num = counter.lock().unwrap();
+
+ [5] *num += 1;
+ });
+ [6] handles.push(handle);
+ }
+
+ for handle in handles {
+ [7] handle.join().unwrap();
+ }
+
+ [8] println!("Result: {}", *counter.lock().unwrap());
+}
+```
+
+Listing 16-13: Ten threads each increment a counter guarded by a `Mutex<T>`
+
+We create a `counter` variable to hold an `i32` inside a `Mutex<T>` [1], as we
+did in Listing 16-12. Next, we create 10 threads by iterating over a range of
+numbers [2]. We use `thread::spawn` and give all the threads the same closure:
+one that moves the counter into the thread [3], acquires a lock on the
+`Mutex<T>` by calling the `lock` method [4], and then adds 1 to the value in
+the mutex [5]. When a thread finishes running its closure, `num` will go out of
+scope and release the lock so another thread can acquire it.
+
+In the main thread, we collect all the join handles [6]. Then, as we did in
+Listing 16-2, we call `join` on each handle to make sure all the threads finish
+[7]. At that point, the main thread will acquire the lock and print the result
+of this program [8].
+
+We hinted that this example wouldn’t compile. Now let’s find out why!
+
+```
+error[E0382]: use of moved value: `counter`
+ --> src/main.rs:9:36
+ |
+5 | let counter = Mutex::new(0);
+ | ------- move occurs because `counter` has type `Mutex<i32>`, which does not implement the `Copy` trait
+...
+9 | let handle = thread::spawn(move || {
+ | ^^^^^^^ value moved into closure here, in previous iteration of loop
+10 | let mut num = counter.lock().unwrap();
+ | ------- use occurs due to use in closure
+```
+
+The error message states that the `counter` value was moved in the previous
+iteration of the loop. Rust is telling us that we can’t move the ownership
+of lock `counter` into multiple threads. Let’s fix the compiler error with a
+multiple-ownership method we discussed in Chapter 15.
+
+#### Multiple Ownership with Multiple Threads
+
+In Chapter 15, we gave a value multiple owners by using the smart pointer
+`Rc<T>` to create a reference counted value. Let’s do the same here and see
+what happens. We’ll wrap the `Mutex<T>` in `Rc<T>` in Listing 16-14 and clone
+the `Rc<T>` before moving ownership to the thread.
+
+Filename: src/main.rs
+
+```
+use std::rc::Rc;
+use std::sync::Mutex;
+use std::thread;
+
+fn main() {
+ let counter = Rc::new(Mutex::new(0));
+ let mut handles = vec![];
+
+ for _ in 0..10 {
+ let counter = Rc::clone(&counter);
+ let handle = thread::spawn(move || {
+ let mut num = counter.lock().unwrap();
+
+ *num += 1;
+ });
+ handles.push(handle);
+ }
+
+ for handle in handles {
+ handle.join().unwrap();
+ }
+
+ println!("Result: {}", *counter.lock().unwrap());
+}
+```
+
+Listing 16-14: Attempting to use `Rc<T>` to allow multiple threads to own the
+`Mutex<T>`
+
+Once again, we compile and get... different errors! The compiler is teaching us
+a lot.
+
+```
+[1] error[E0277]: `Rc<Mutex<i32>>` cannot be sent between threads safely
+ --> src/main.rs:11:22
+ |
+11 | let handle = thread::spawn(move || {
+ | ______________________^^^^^^^^^^^^^_-
+ | | |
+ | | `Rc<Mutex<i32>>` cannot be sent between threads safely
+12 | | let mut num = counter.lock().unwrap();
+13 | |
+14 | | *num += 1;
+15 | | });
+ | |_________- within this `[closure@src/main.rs:11:36: 15:10]`
+ |
+[2] = help: within `[closure@src/main.rs:11:36: 15:10]`, the trait `Send` is not implemented for `Rc<Mutex<i32>>`
+ = note: required because it appears within the type `[closure@src/main.rs:11:36: 15:10]`
+note: required by a bound in `spawn`
+```
+
+Wow, that error message is very wordy! Here’s the important part to focus on:
+`` `Rc<Mutex<i32>>` cannot be sent between threads safely `` [1]. The compiler
+is also telling us the reason why: ``the trait `Send` is not implemented for
+`Rc<Mutex<i32>>` `` [2]. We’ll talk about `Send` in the next section: it’s one
+of the traits that ensures the types we use with threads are meant for use in
+concurrent situations.
+
+Unfortunately, `Rc<T>` is not safe to share across threads. When `Rc<T>`
+manages the reference count, it adds to the count for each call to `clone` and
+subtracts from the count when each clone is dropped. But it doesn’t use any
+concurrency primitives to make sure that changes to the count can’t be
+interrupted by another thread. This could lead to wrong counts—subtle bugs that
+could in turn lead to memory leaks or a value being dropped before we’re done
+with it. What we need is a type exactly like `Rc<T>` but one that makes changes
+to the reference count in a thread-safe way.
+
+#### Atomic Reference Counting with `Arc<T>`
+
+Fortunately, `Arc<T>` *is* a type like `Rc<T>` that is safe to use in
+concurrent situations. The *a* stands for *atomic*, meaning it’s an *atomically
+reference counted* type. Atomics are an additional kind of concurrency
+primitive that we won’t cover in detail here: see the standard library
+documentation for `std::sync::atomic` for more details. At this point, you just
+need to know that atomics work like primitive types but are safe to share
+across threads.
+
+You might then wonder why all primitive types aren’t atomic and why standard
+library types aren’t implemented to use `Arc<T>` by default. The reason is that
+thread safety comes with a performance penalty that you only want to pay when
+you really need to. If you’re just performing operations on values within a
+single thread, your code can run faster if it doesn’t have to enforce the
+guarantees atomics provide.
+
+Let’s return to our example: `Arc<T>` and `Rc<T>` have the same API, so we fix
+our program by changing the `use` line, the call to `new`, and the call to
+`clone`. The code in Listing 16-15 will finally compile and run:
+
+Filename: src/main.rs
+
+```
+use std::sync::{Arc, Mutex};
+use std::thread;
+
+fn main() {
+ let counter = Arc::new(Mutex::new(0));
+ let mut handles = vec![];
+
+ for _ in 0..10 {
+ let counter = Arc::clone(&counter);
+ let handle = thread::spawn(move || {
+ let mut num = counter.lock().unwrap();
+
+ *num += 1;
+ });
+ handles.push(handle);
+ }
+
+ for handle in handles {
+ handle.join().unwrap();
+ }
+
+ println!("Result: {}", *counter.lock().unwrap());
+}
+```
+
+Listing 16-15: Using an `Arc<T>` to wrap the `Mutex<T>` to be able to share
+ownership across multiple threads
+
+This code will print the following:
+
+```
+Result: 10
+```
+
+We did it! We counted from 0 to 10, which may not seem very impressive, but it
+did teach us a lot about `Mutex<T>` and thread safety. You could also use this
+program’s structure to do more complicated operations than just incrementing a
+counter. Using this strategy, you can divide a calculation into independent
+parts, split those parts across threads, and then use a `Mutex<T>` to have each
+thread update the final result with its part.
+
+Note that if you are doing simple numerical operations, there are types simpler
+than `Mutex<T>` types provided by the `std::sync::atomic` module of the
+standard library. These types provide safe, concurrent, atomic access to
+primitive types. We chose to use `Mutex<T>` with a primitive type for this
+example so we could concentrate on how `Mutex<T>` works.
+
+<!-- Do we want to mention that for simple counters we have simpler types in
+the standard library? (eg, AtomicI64 for the above)
+/JT -->
+<!-- Done! /Carol-->
+
+### Similarities Between `RefCell<T>`/`Rc<T>` and `Mutex<T>`/`Arc<T>`
+
+You might have noticed that `counter` is immutable but we could get a mutable
+reference to the value inside it; this means `Mutex<T>` provides interior
+mutability, as the `Cell` family does. In the same way we used `RefCell<T>` in
+Chapter 15 to allow us to mutate contents inside an `Rc<T>`, we use `Mutex<T>`
+to mutate contents inside an `Arc<T>`.
+
+Another detail to note is that Rust can’t protect you from all kinds of logic
+errors when you use `Mutex<T>`. Recall in Chapter 15 that using `Rc<T>` came
+with the risk of creating reference cycles, where two `Rc<T>` values refer to
+each other, causing memory leaks. Similarly, `Mutex<T>` comes with the risk of
+creating *deadlocks*. These occur when an operation needs to lock two resources
+and two threads have each acquired one of the locks, causing them to wait for
+each other forever. If you’re interested in deadlocks, try creating a Rust
+program that has a deadlock; then research deadlock mitigation strategies for
+mutexes in any language and have a go at implementing them in Rust. The
+standard library API documentation for `Mutex<T>` and `MutexGuard` offers
+useful information.
+
+We’ll round out this chapter by talking about the `Send` and `Sync` traits and
+how we can use them with custom types.
+
+## Extensible Concurrency with the `Sync` and `Send` Traits
+
+Interestingly, the Rust language has *very* few concurrency features. Almost
+every concurrency feature we’ve talked about so far in this chapter has been
+part of the standard library, not the language. Your options for handling
+concurrency are not limited to the language or the standard library; you can
+write your own concurrency features or use those written by others.
+
+However, two concurrency concepts are embedded in the language: the
+`std::marker` traits `Sync` and `Send`.
+
+### Allowing Transference of Ownership Between Threads with `Send`
+
+The `Send` marker trait indicates that ownership of values of the type
+implementing `Send` can be transferred between threads. Almost every Rust type
+is `Send`, but there are some exceptions, including `Rc<T>`: this cannot be
+`Send` because if you cloned an `Rc<T>` value and tried to transfer ownership
+of the clone to another thread, both threads might update the reference count
+at the same time. For this reason, `Rc<T>` is implemented for use in
+single-threaded situations where you don’t want to pay the thread-safe
+performance penalty.
+
+Therefore, Rust’s type system and trait bounds ensure that you can never
+accidentally send an `Rc<T>` value across threads unsafely. When we tried to do
+this in Listing 16-14, we got the error `the trait Send is not implemented for
+Rc<Mutex<i32>>`. When we switched to `Arc<T>`, which is `Send`, the code
+compiled.
+
+Any type composed entirely of `Send` types is automatically marked as `Send` as
+well. Almost all primitive types are `Send`, aside from raw pointers, which
+we’ll discuss in Chapter 19.
+
+### Allowing Access from Multiple Threads with `Sync`
+
+The `Sync` marker trait indicates that it is safe for the type implementing
+`Sync` to be referenced from multiple threads. In other words, any type `T` is
+`Sync` if `&T` (an immutable reference to `T`) is `Send`, meaning the reference
+can be sent safely to another thread. Similar to `Send`, primitive types are
+`Sync`, and types composed entirely of types that are `Sync` are also `Sync`.
+
+The smart pointer `Rc<T>` is also not `Sync` for the same reasons that it’s not
+`Send`. The `RefCell<T>` type (which we talked about in Chapter 15) and the
+family of related `Cell<T>` types are not `Sync`. The implementation of borrow
+checking that `RefCell<T>` does at runtime is not thread-safe. The smart
+pointer `Mutex<T>` is `Sync` and can be used to share access with multiple
+threads as you saw in the “Sharing a `Mutex<T>` Between Multiple
+Threads” section.
+
+### Implementing `Send` and `Sync` Manually Is Unsafe
+
+Because types that are made up of `Send` and `Sync` traits are automatically
+also `Send` and `Sync`, we don’t have to implement those traits manually. As
+marker traits, they don’t even have any methods to implement. They’re just
+useful for enforcing invariants related to concurrency.
+
+Manually implementing these traits involves implementing unsafe Rust code.
+We’ll talk about using unsafe Rust code in Chapter 19; for now, the important
+information is that building new concurrent types not made up of `Send` and
+`Sync` parts requires careful thought to uphold the safety guarantees. “The
+Rustonomicon” at *https://doc.rust-lang.org/stable/nomicon/* has more
+information about these guarantees and how to uphold them.
+
+## Summary
+
+This isn’t the last you’ll see of concurrency in this book: the project in
+Chapter 20 will use the concepts in this chapter in a more realistic situation
+than the smaller examples discussed here.
+
+As mentioned earlier, because very little of how Rust handles concurrency is
+part of the language, many concurrency solutions are implemented as crates.
+These evolve more quickly than the standard library, so be sure to search
+online for the current, state-of-the-art crates to use in multithreaded
+situations.
+
+The Rust standard library provides channels for message passing and smart
+pointer types, such as `Mutex<T>` and `Arc<T>`, that are safe to use in
+concurrent contexts. The type system and the borrow checker ensure that the
+code using these solutions won’t end up with data races or invalid references.
+Once you get your code to compile, you can rest assured that it will happily
+run on multiple threads without the kinds of hard-to-track-down bugs common in
+other languages. Concurrent programming is no longer a concept to be afraid of:
+go forth and make your programs concurrent, fearlessly!
+
+Next, we’ll talk about idiomatic ways to model problems and structure solutions
+as your Rust programs get bigger. In addition, we’ll discuss how Rust’s idioms
+relate to those you might be familiar with from object-oriented programming.
diff --git a/src/doc/book/nostarch/chapter17.md b/src/doc/book/nostarch/chapter17.md
new file mode 100644
index 000000000..f13b1484a
--- /dev/null
+++ b/src/doc/book/nostarch/chapter17.md
@@ -0,0 +1,1302 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Object-Oriented Programming Features of Rust
+
+Object-oriented programming (OOP) is a way of modeling programs. Objects as a
+programmatic concept were introduced in the programming language Simula in the
+1960s. Those objects influenced Alan Kay’s programming architecture in which
+objects pass messages to each other. To describe this architecture, he coined
+the term *object-oriented programming* in 1967. Many competing definitions
+describe what OOP is, and by some of these definitions Rust is object-oriented,
+but by others it is not. In this chapter, we’ll explore certain characteristics
+that are commonly considered object-oriented and how those characteristics
+translate to idiomatic Rust. We’ll then show you how to implement an
+object-oriented design pattern in Rust and discuss the trade-offs of doing so
+versus implementing a solution using some of Rust’s strengths instead.
+
+<!-- Nit: we should probably use "object-oriented" throughout, rather using both
+"object-oriented" and "object oriented"
+/JT -->
+<!-- Done! /Carol -->
+
+## Characteristics of Object-Oriented Languages
+
+There is no consensus in the programming community about what features a
+language must have to be considered object-oriented. Rust is influenced by many
+programming paradigms, including OOP; for example, we explored the features
+that came from functional programming in Chapter 13. Arguably, OOP languages
+share certain common characteristics, namely objects, encapsulation, and
+inheritance. Let’s look at what each of those characteristics means and whether
+Rust supports it.
+
+### Objects Contain Data and Behavior
+
+The book *Design Patterns: Elements of Reusable Object-Oriented Software* by
+Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Addison-Wesley
+Professional, 1994), colloquially referred to as *The Gang of Four* book, is a
+catalog of object-oriented design patterns. It defines OOP this way:
+
+> Object-oriented programs are made up of objects. An *object* packages both
+> data and the procedures that operate on that data. The procedures are
+> typically called *methods* or *operations*.
+
+Using this definition, Rust is object-oriented: structs and enums have data,
+and `impl` blocks provide methods on structs and enums. Even though structs and
+enums with methods aren’t *called* objects, they provide the same
+functionality, according to the Gang of Four’s definition of objects.
+
+### Encapsulation that Hides Implementation Details
+
+Another aspect commonly associated with OOP is the idea of *encapsulation*,
+which means that the implementation details of an object aren’t accessible to
+code using that object. Therefore, the only way to interact with an object is
+through its public API; code using the object shouldn’t be able to reach into
+the object’s internals and change data or behavior directly. This enables the
+programmer to change and refactor an object’s internals without needing to
+change the code that uses the object.
+
+We discussed how to control encapsulation in Chapter 7: we can use the `pub`
+keyword to decide which modules, types, functions, and methods in our code
+should be public, and by default everything else is private. For example, we
+can define a struct `AveragedCollection` that has a field containing a vector
+of `i32` values. The struct can also have a field that contains the average of
+the values in the vector, meaning the average doesn’t have to be computed
+on demand whenever anyone needs it. In other words, `AveragedCollection` will
+cache the calculated average for us. Listing 17-1 has the definition of the
+`AveragedCollection` struct:
+
+Filename: src/lib.rs
+
+```
+pub struct AveragedCollection {
+ list: Vec<i32>,
+ average: f64,
+}
+```
+
+Listing 17-1: An `AveragedCollection` struct that maintains a list of integers
+and the average of the items in the collection
+
+The struct is marked `pub` so that other code can use it, but the fields within
+the struct remain private. This is important in this case because we want to
+ensure that whenever a value is added or removed from the list, the average is
+also updated. We do this by implementing `add`, `remove`, and `average` methods
+on the struct, as shown in Listing 17-2:
+
+Filename: src/lib.rs
+
+```
+impl AveragedCollection {
+ pub fn add(&mut self, value: i32) {
+ self.list.push(value);
+ self.update_average();
+ }
+
+ pub fn remove(&mut self) -> Option<i32> {
+ let result = self.list.pop();
+ match result {
+ Some(value) => {
+ self.update_average();
+ Some(value)
+ }
+ None => None,
+ }
+ }
+
+ pub fn average(&self) -> f64 {
+ self.average
+ }
+
+ fn update_average(&mut self) {
+ let total: i32 = self.list.iter().sum();
+ self.average = total as f64 / self.list.len() as f64;
+ }
+}
+```
+
+<!-- The above example will crash with a division by zero if you call it at
+any time when it's empty. Not sure if we want to fix, but thought I'd point
+it out.
+/JT -->
+<!-- It actually won't because f64 / 0 is NaN, not a panic /Carol -->
+
+Listing 17-2: Implementations of the public methods `add`, `remove`, and
+`average` on `AveragedCollection`
+
+The public methods `add`, `remove`, and `average` are the only ways to access
+or modify data in an instance of `AveragedCollection`. When an item is added
+to `list` using the `add` method or removed using the `remove` method, the
+implementations of each call the private `update_average` method that handles
+updating the `average` field as well.
+
+We leave the `list` and `average` fields private so there is no way for
+external code to add or remove items to or from the `list` field directly;
+otherwise, the `average` field might become out of sync when the `list`
+changes. The `average` method returns the value in the `average` field,
+allowing external code to read the `average` but not modify it.
+
+Because we’ve encapsulated the implementation details of the struct
+`AveragedCollection`, we can easily change aspects, such as the data structure,
+in the future. For instance, we could use a `HashSet<i32>` instead of a
+`Vec<i32>` for the `list` field. As long as the signatures of the `add`,
+`remove`, and `average` public methods stay the same, code using
+`AveragedCollection` wouldn’t need to change. If we made `list` public instead,
+this wouldn’t necessarily be the case: `HashSet<i32>` and `Vec<i32>` have
+different methods for adding and removing items, so the external code would
+likely have to change if it were modifying `list` directly.
+
+If encapsulation is a required aspect for a language to be considered
+object-oriented, then Rust meets that requirement. The option to use `pub` or
+not for different parts of code enables encapsulation of implementation details.
+
+### Inheritance as a Type System and as Code Sharing
+
+*Inheritance* is a mechanism whereby an object can inherit elements from
+another object’s definition, thus gaining the parent object’s data and behavior
+without you having to define them again.
+
+If a language must have inheritance to be an object-oriented language, then
+Rust is not one. There is no way to define a struct that inherits the parent
+struct’s fields and method implementations without using a macro.
+
+However, if you’re used to having inheritance in your programming toolbox, you
+can use other solutions in Rust, depending on your reason for reaching for
+inheritance in the first place.
+
+You would choose inheritance for two main reasons. One is for reuse of code:
+you can implement particular behavior for one type, and inheritance enables you
+to reuse that implementation for a different type. You can do this in a limited
+way in Rust code using default trait method implementations, which you saw in
+Listing 10-14 when we added a default implementation of the `summarize` method
+on the `Summary` trait. Any type implementing the `Summary` trait would have
+the `summarize` method available on it without any further code. This is
+similar to a parent class having an implementation of a method and an
+inheriting child class also having the implementation of the method. We can
+also override the default implementation of the `summarize` method when we
+implement the `Summary` trait, which is similar to a child class overriding the
+implementation of a method inherited from a parent class.
+
+<!-- I'm a bit uncomfortable with the above. I think it's more honest to say
+that Rust doesn't support inheritance unless you use a macro. Saying to use
+the trait system to an OO programmer is going to leave them pretty confused, as
+traits lack of the basics of inheritance: you can't use and modify state, you
+have to use a surrogate type to hold the trait implementation, you can't
+instantiate, and so on.
+
+The example that came to mind: trying to teach OO programmers who want to
+build a UI library with traditional OO techniques using the trait system.
+It's unfortunately not going to work very well, if at all.
+
+A trait's main focus is polymorphism and not inheritance. It's probably
+better for folks coming from OO backgrounds if we just come out and say it, tbh.
+/JT -->
+<!-- I agree, and I've made some edits to the paragraphs above /Carol -->
+
+The other reason to use inheritance relates to the type system: to enable a
+child type to be used in the same places as the parent type. This is also
+called *polymorphism*, which means that you can substitute multiple objects for
+each other at runtime if they share certain characteristics.
+
+> ### Polymorphism
+>
+> To many people, polymorphism is synonymous with inheritance. But it’s
+> actually a more general concept that refers to code that can work with data
+> of multiple types. For inheritance, those types are generally subclasses.
+>
+> Rust instead uses generics to abstract over different possible types and
+> trait bounds to impose constraints on what those types must provide. This is
+> sometimes called *bounded parametric polymorphism*.
+
+Inheritance has recently fallen out of favor as a programming design solution
+in many programming languages because it’s often at risk of sharing more code
+than necessary. Subclasses shouldn’t always share all characteristics of their
+parent class but will do so with inheritance. This can make a program’s design
+less flexible. It also introduces the possibility of calling methods on
+subclasses that don’t make sense or that cause errors because the methods don’t
+apply to the subclass. In addition, some languages will only allow single
+inheritance (meaning a subclass can only inherit from one class), further
+restricting the flexibility of a program’s design.
+
+<!-- Nit - "inherit from one class" and "single-inheritance" read a bit
+differently to me. Saying you inherit from only one class almost makes it sound
+like that the class you inherit from can't have a parent. Probably minor, just
+made me read that sentence a couple times.
+/JT -->
+<!-- I've included the term "single inheritance" above (it appears that usually
+it's not hyphenated) but kept what was there as an explanation in case the
+reader isn't familiar. /Carol -->
+
+For these reasons, Rust takes the different approach of using trait objects
+instead of inheritance. Let’s look at how trait objects enable polymorphism in
+Rust.
+
+## Using Trait Objects That Allow for Values of Different Types
+
+In Chapter 8, we mentioned that one limitation of vectors is that they can
+store elements of only one type. We created a workaround in Listing 8-10 where
+we defined a `SpreadsheetCell` enum that had variants to hold integers, floats,
+and text. This meant we could store different types of data in each cell and
+still have a vector that represented a row of cells. This is a perfectly good
+solution when our interchangeable items are a fixed set of types that we know
+when our code is compiled.
+
+However, sometimes we want our library user to be able to extend the set of
+types that are valid in a particular situation. To show how we might achieve
+this, we’ll create an example graphical user interface (GUI) tool that iterates
+through a list of items, calling a `draw` method on each one to draw it to the
+screen—a common technique for GUI tools. We’ll create a library crate called
+`gui` that contains the structure of a GUI library. This crate might include
+some types for people to use, such as `Button` or `TextField`. In addition,
+`gui` users will want to create their own types that can be drawn: for
+instance, one programmer might add an `Image` and another might add a
+`SelectBox`.
+
+We won’t implement a fully fledged GUI library for this example but will show
+how the pieces would fit together. At the time of writing the library, we can’t
+know and define all the types other programmers might want to create. But we do
+know that `gui` needs to keep track of many values of different types, and it
+needs to call a `draw` method on each of these differently typed values. It
+doesn’t need to know exactly what will happen when we call the `draw` method,
+just that the value will have that method available for us to call.
+
+To do this in a language with inheritance, we might define a class named
+`Component` that has a method named `draw` on it. The other classes, such as
+`Button`, `Image`, and `SelectBox`, would inherit from `Component` and thus
+inherit the `draw` method. They could each override the `draw` method to define
+their custom behavior, but the framework could treat all of the types as if
+they were `Component` instances and call `draw` on them. But because Rust
+doesn’t have inheritance, we need another way to structure the `gui` library to
+allow users to extend it with new types.
+
+### Defining a Trait for Common Behavior
+
+To implement the behavior we want `gui` to have, we’ll define a trait named
+`Draw` that will have one method named `draw`. Then we can define a vector that
+takes a *trait object*. A trait object points to both an instance of a type
+implementing our specified trait and a table used to look up trait methods on
+that type at runtime. We create a trait object by specifying some sort of
+pointer, such as a `&` reference or a `Box<T>` smart pointer, then the `dyn`
+keyword, and then specifying the relevant trait. (We’ll talk about the reason
+trait objects must use a pointer in Chapter 19 in the section “Dynamically
+Sized Types and the `Sized` Trait.”) We can use trait objects in place of a
+generic or concrete type. Wherever we use a trait object, Rust’s type system
+will ensure at compile time that any value used in that context will implement
+the trait object’s trait. Consequently, we don’t need to know all the possible
+types at compile time.
+
+We’ve mentioned that, in Rust, we refrain from calling structs and enums
+“objects” to distinguish them from other languages’ objects. In a struct or
+enum, the data in the struct fields and the behavior in `impl` blocks are
+separated, whereas in other languages, the data and behavior combined into one
+concept is often labeled an object. However, trait objects *are* more like
+objects in other languages in the sense that they combine data and behavior.
+But trait objects differ from traditional objects in that we can’t add data to
+a trait object. Trait objects aren’t as generally useful as objects in other
+languages: their specific purpose is to allow abstraction across common
+behavior.
+
+Listing 17-3 shows how to define a trait named `Draw` with one method named
+`draw`:
+
+Filename: src/lib.rs
+
+```
+pub trait Draw {
+ fn draw(&self);
+}
+```
+
+Listing 17-3: Definition of the `Draw` trait
+
+This syntax should look familiar from our discussions on how to define traits
+in Chapter 10. Next comes some new syntax: Listing 17-4 defines a struct named
+`Screen` that holds a vector named `components`. This vector is of type
+`Box<dyn Draw>`, which is a trait object; it’s a stand-in for any type inside
+a `Box` that implements the `Draw` trait.
+
+Filename: src/lib.rs
+
+```
+pub struct Screen {
+ pub components: Vec<Box<dyn Draw>>,
+}
+```
+
+Listing 17-4: Definition of the `Screen` struct with a `components` field
+holding a vector of trait objects that implement the `Draw` trait
+
+On the `Screen` struct, we’ll define a method named `run` that will call the
+`draw` method on each of its `components`, as shown in Listing 17-5:
+
+Filename: src/lib.rs
+
+```
+impl Screen {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+```
+
+Listing 17-5: A `run` method on `Screen` that calls the `draw` method on each
+component
+
+This works differently from defining a struct that uses a generic type
+parameter with trait bounds. A generic type parameter can only be substituted
+with one concrete type at a time, whereas trait objects allow for multiple
+concrete types to fill in for the trait object at runtime. For example, we
+could have defined the `Screen` struct using a generic type and a trait bound
+as in Listing 17-6:
+
+Filename: src/lib.rs
+
+```
+pub struct Screen<T: Draw> {
+ pub components: Vec<T>,
+}
+
+impl<T> Screen<T>
+where
+ T: Draw,
+{
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+```
+
+Listing 17-6: An alternate implementation of the `Screen` struct and its `run`
+method using generics and trait bounds
+
+This restricts us to a `Screen` instance that has a list of components all of
+type `Button` or all of type `TextField`. If you’ll only ever have homogeneous
+collections, using generics and trait bounds is preferable because the
+definitions will be monomorphized at compile time to use the concrete types.
+
+On the other hand, with the method using trait objects, one `Screen` instance
+can hold a `Vec<T>` that contains a `Box<Button>` as well as a
+`Box<TextField>`. Let’s look at how this works, and then we’ll talk about the
+runtime performance implications.
+
+### Implementing the Trait
+
+Now we’ll add some types that implement the `Draw` trait. We’ll provide the
+`Button` type. Again, actually implementing a GUI library is beyond the scope
+of this book, so the `draw` method won’t have any useful implementation in its
+body. To imagine what the implementation might look like, a `Button` struct
+might have fields for `width`, `height`, and `label`, as shown in Listing 17-7:
+
+Filename: src/lib.rs
+
+```
+pub struct Button {
+ pub width: u32,
+ pub height: u32,
+ pub label: String,
+}
+
+impl Draw for Button {
+ fn draw(&self) {
+ // code to actually draw a button
+ }
+}
+```
+
+Listing 17-7: A `Button` struct that implements the `Draw` trait
+
+The `width`, `height`, and `label` fields on `Button` will differ from the
+fields on other components; for example, a `TextField` type might have those
+same fields plus a `placeholder` field. Each of the types we want to draw on
+the screen will implement the `Draw` trait but will use different code in the
+`draw` method to define how to draw that particular type, as `Button` has here
+(without the actual GUI code, as mentioned). The `Button` type, for instance,
+might have an additional `impl` block containing methods related to what
+happens when a user clicks the button. These kinds of methods won’t apply to
+types like `TextField`.
+
+If someone using our library decides to implement a `SelectBox` struct that has
+`width`, `height`, and `options` fields, they implement the `Draw` trait on the
+`SelectBox` type as well, as shown in Listing 17-8:
+
+Filename: src/main.rs
+
+```
+use gui::Draw;
+
+struct SelectBox {
+ width: u32,
+ height: u32,
+ options: Vec<String>,
+}
+
+impl Draw for SelectBox {
+ fn draw(&self) {
+ // code to actually draw a select box
+ }
+}
+```
+
+Listing 17-8: Another crate using `gui` and implementing the `Draw` trait on a
+`SelectBox` struct
+
+Our library’s user can now write their `main` function to create a `Screen`
+instance. To the `Screen` instance, they can add a `SelectBox` and a `Button`
+by putting each in a `Box<T>` to become a trait object. They can then call the
+`run` method on the `Screen` instance, which will call `draw` on each of the
+components. Listing 17-9 shows this implementation:
+
+Filename: src/main.rs
+
+```
+use gui::{Button, Screen};
+
+fn main() {
+ let screen = Screen {
+ components: vec![
+ Box::new(SelectBox {
+ width: 75,
+ height: 10,
+ options: vec![
+ String::from("Yes"),
+ String::from("Maybe"),
+ String::from("No"),
+ ],
+ }),
+ Box::new(Button {
+ width: 50,
+ height: 10,
+ label: String::from("OK"),
+ }),
+ ],
+ };
+
+ screen.run();
+}
+```
+
+<!-- I'd forgotten the UI components were in this chapter. To close on the
+thought from earlier: we don't use any inheritance in our example, only
+polymorphism. This probably is a vote for my earlier suggestion.
+/JT -->
+<!-- I indeed took the earlier suggestion. /Carol -->
+
+Listing 17-9: Using trait objects to store values of different types that
+implement the same trait
+
+When we wrote the library, we didn’t know that someone might add the
+`SelectBox` type, but our `Screen` implementation was able to operate on the
+new type and draw it because `SelectBox` implements the `Draw` trait, which
+means it implements the `draw` method.
+
+This concept—of being concerned only with the messages a value responds to
+rather than the value’s concrete type—is similar to the concept of *duck
+typing* in dynamically typed languages: if it walks like a duck and quacks
+like a duck, then it must be a duck! In the implementation of `run` on `Screen`
+in Listing 17-5, `run` doesn’t need to know what the concrete type of each
+component is. It doesn’t check whether a component is an instance of a `Button`
+or a `SelectBox`, it just calls the `draw` method on the component. By
+specifying `Box<dyn Draw>` as the type of the values in the `components`
+vector, we’ve defined `Screen` to need values that we can call the `draw`
+method on.
+
+The advantage of using trait objects and Rust’s type system to write code
+similar to code using duck typing is that we never have to check whether a
+value implements a particular method at runtime or worry about getting errors
+if a value doesn’t implement a method but we call it anyway. Rust won’t compile
+our code if the values don’t implement the traits that the trait objects need.
+
+For example, Listing 17-10 shows what happens if we try to create a `Screen`
+with a `String` as a component:
+
+Filename: src/main.rs
+
+```
+use gui::Screen;
+
+fn main() {
+ let screen = Screen {
+ components: vec![Box::new(String::from("Hi"))],
+ };
+
+ screen.run();
+}
+```
+
+Listing 17-10: Attempting to use a type that doesn’t
+implement the trait object’s trait
+
+We’ll get this error because `String` doesn’t implement the `Draw` trait:
+
+```
+error[E0277]: the trait bound `String: Draw` is not satisfied
+ --> src/main.rs:5:26
+ |
+5 | components: vec![Box::new(String::from("Hi"))],
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Draw` is not implemented for `String`
+ |
+ = note: required for the cast to the object type `dyn Draw`
+```
+
+This error lets us know that either we’re passing something to `Screen` we
+didn’t mean to pass and so should pass a different type or we should implement
+`Draw` on `String` so that `Screen` is able to call `draw` on it.
+
+### Trait Objects Perform Dynamic Dispatch
+
+Recall in the “Performance of Code Using Generics” section in Chapter 10 our
+discussion on the monomorphization process performed by the compiler when we
+use trait bounds on generics: the compiler generates nongeneric implementations
+of functions and methods for each concrete type that we use in place of a
+generic type parameter. The code that results from monomorphization is doing
+*static dispatch*, which is when the compiler knows what method you’re calling
+at compile time. This is opposed to *dynamic dispatch*, which is when the
+compiler can’t tell at compile time which method you’re calling. In dynamic
+dispatch cases, the compiler emits code that at runtime will figure out which
+method to call.
+
+When we use trait objects, Rust must use dynamic dispatch. The compiler doesn’t
+know all the types that might be used with the code that’s using trait objects,
+so it doesn’t know which method implemented on which type to call. Instead, at
+runtime, Rust uses the pointers inside the trait object to know which method to
+call. This lookup incurs a runtime cost that doesn’t occur with static
+dispatch. Dynamic dispatch also prevents the compiler from choosing to inline a
+method’s code, which in turn prevents some optimizations. However, we did get
+extra flexibility in the code that we wrote in Listing 17-5 and were able to
+support in Listing 17-9, so it’s a trade-off to consider.
+
+## Implementing an Object-Oriented Design Pattern
+
+The *state pattern* is an object-oriented design pattern. The crux of the
+pattern is that we define a set of states a value can have internally. The
+states are represented by a set of *state objects*, and the value’s behavior
+changes based on its state. We’re going to work through an example of a blog
+post struct that has a field to hold its state, which will be a state object
+from the set "draft", "review", or "published".
+<!-- can you give a quick example here, something we could visualize? are we
+saying "we define a set of states a value can have as state objects...."? /LC
+-->
+<!-- What do you think about this, hinting at the coming example quickly? It
+felt weird to introduce something different only to switch gears in a few
+paragraphs, so is moving the example's introduction here ok? /Carol -->
+<!-- JT, what do you think? /LC -->
+<!-- Seems okay. My one thought coming to the end of the paragraph was "is
+this better than using an enum?" Not sure if we want to sidebar a bit on
+why we chose traits over enums, but some readers might be curious.
+/JT -->
+<!-- I've added a box later titled "Why Not An Enum?" to address this -- I
+think that makes a nice exercise for the reader :) /Carol -->
+
+The state objects share functionality: in Rust, of course, we use
+structs and traits rather than objects and inheritance. Each state object is
+responsible for its own behavior and for governing when it should change into
+another state. The value that holds a state object knows nothing about the
+different behavior of the states or when to transition between states.
+
+The advantage of using the state pattern is that, when the business
+requirements of the program change, we won’t need to change the code of the
+value holding the state or the code that uses the value. We’ll only need to
+update the code inside one of the state objects to change its rules or perhaps
+add more state objects.
+
+First, we’re going to implement the state pattern in a more traditional
+object-oriented way, then we’ll use an approach that’s a bit more natural in
+Rust. Let’s dig in to incrementally implementing a blog post workflow using the
+state pattern.
+
+The final functionality will look like this:
+
+1. A blog post starts as an empty draft.
+2. When the draft is done, a review of the post is requested.
+3. When the post is approved, it gets published.
+4. Only published blog posts return content to print, so unapproved posts can’t
+ accidentally be published.
+
+Any other changes attempted on a post should have no effect. For example, if we
+try to approve a draft blog post before we’ve requested a review, the post
+should remain an unpublished draft.
+
+Listing 17-11 shows this workflow in code form: this is an example usage of the
+API we’ll implement in a library crate named `blog`. This won’t compile yet
+because we haven’t implemented the `blog` crate.
+
+Filename: src/main.rs
+
+```
+use blog::Post;
+
+fn main() {
+ [1] let mut post = Post::new();
+
+ [2] post.add_text("I ate a salad for lunch today");
+ [3] assert_eq!("", post.content());
+
+ [4] post.request_review();
+ [5] assert_eq!("", post.content());
+
+ [6] post.approve();
+ [7] assert_eq!("I ate a salad for lunch today", post.content());
+}
+```
+
+Listing 17-11: Code that demonstrates the desired behavior we want our `blog`
+crate to have
+
+We want to allow the user to create a new draft blog post with `Post::new` [1].
+We want to allow text to be added to the blog post [2]. If we try to get the
+post’s content immediately, before approval, we shouldn’t get any text because
+the post is still a draft. We’ve added `assert_eq!` in the code for
+demonstration purposes [3]. An excellent unit test for this would be to assert
+that a draft blog post returns an empty string from the `content` method, but
+we’re not going to write tests for this example.
+
+Next, we want to enable a request for a review of the post [4], and we want
+`content` to return an empty string while waiting for the review [5]. When the
+post receives approval [6], it should get published, meaning the text of the
+post will be returned when `content` is called [7].
+
+Notice that the only type we’re interacting with from the crate is the `Post`
+type. This type will use the state pattern and will hold a value that will be
+one of three state objects representing the various states a post can be
+in—draft, waiting for review, or published. Changing from one state to another
+will be managed internally within the `Post` type. The states change in
+response to the methods called by our library’s users on the `Post` instance,
+but they don’t have to manage the state changes directly. Also, users can’t
+make a mistake with the states, like publishing a post before it’s reviewed.
+
+### Defining `Post` and Creating a New Instance in the Draft State
+
+Let’s get started on the implementation of the library! We know we need a
+public `Post` struct that holds some content, so we’ll start with the
+definition of the struct and an associated public `new` function to create an
+instance of `Post`, as shown in Listing 17-12. We’ll also make a private
+`State` trait that will define the behavior that all state objects for a `Post`
+must have.
+<!-- JT, I had a few questions here about what the state objects and state
+traits are doing. I'd appreciate your view on whether this all reads well with
+nothing missing! /LC -->
+<!-- Seems okay. If you're going to try to use a traditional OO approach in
+Rust, it'll have a bit of this style. I'm glad we include something that's a
+bit more Rust-y at the end of the chapter.
+
+What I might suggest is that we give the reader a bit of a roadmap here to say
+that we're going to explore two solutions to this problem. The first, a more
+traditional approach encoded into Rust, and the second, an approach that's more
+natural to Rust.
+/JT -->
+<!-- Great idea! I've added a bit in the introduction of this section above --
+"First, we’re going to implement the state pattern in a more traditional
+object-oriented way, then we’ll use an approach that’s a bit more natural in
+Rust." /Carol -->
+
+Then `Post` will hold a trait object of `Box<dyn State>` inside an `Option<T>`
+in a private field named `state` to hold the state object. You’ll see why the
+`Option<T>` is necessary in a bit.
+
+Filename: src/lib.rs
+
+```
+pub struct Post {
+ state: Option<Box<dyn State>>,
+ content: String,
+}
+
+impl Post {
+ pub fn new() -> Post {
+ Post {
+ [1] state: Some(Box::new(Draft {})),
+ [2] content: String::new(),
+ }
+ }
+}
+
+trait State {}
+
+struct Draft {}
+
+impl State for Draft {}
+```
+
+Listing 17-12: Definition of a `Post` struct and a `new` function that creates
+a new `Post` instance, a `State` trait, and a `Draft` struct
+
+The `State` trait defines the behavior shared by different post states. The
+state objects are `Draft`, `PendingReview`, and `Published`, and they will all
+implement the `State` trait. For now, the trait doesn’t have any methods, and
+we’ll start by defining just the `Draft` state because that is the state we
+want a post to start in.
+
+When we create a new `Post`, we set its `state` field to a `Some` value that
+holds a `Box` [1]. This `Box` points to a new instance of the `Draft` struct.
+This ensures whenever we create a new instance of `Post`, it will start out as
+a draft. Because the `state` field of `Post` is private, there is no way to
+create a `Post` in any other state! In the `Post::new` function, we set the
+`content` field to a new, empty `String` [2].
+
+### Storing the Text of the Post Content
+
+We saw in Listing 17-11 that we want to be able to call a method named
+`add_text` and pass it a `&str` that is then added as the text content of the
+blog post. We implement this as a method, rather than exposing the `content`
+field as `pub`, so that later we can implement a method that will control how
+the `content` field’s data is read. The `add_text` method is pretty
+straightforward, so let’s add the implementation in Listing 17-13 to the `impl
+Post` block:
+
+Filename: src/lib.rs
+
+```
+impl Post {
+ // --snip--
+ pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+}
+```
+
+Listing 17-13: Implementing the `add_text` method to add text to a post’s
+`content`
+
+The `add_text` method takes a mutable reference to `self`, because we’re
+changing the `Post` instance that we’re calling `add_text` on. We then call
+`push_str` on the `String` in `content` and pass the `text` argument to add to
+the saved `content`. This behavior doesn’t depend on the state the post is in,
+so it’s not part of the state pattern. The `add_text` method doesn’t interact
+with the `state` field at all, but it is part of the behavior we want to
+support.
+
+### Ensuring the Content of a Draft Post Is Empty
+
+Even after we’ve called `add_text` and added some content to our post, we still
+want the `content` method to return an empty string slice because the post is
+still in the draft state, as shown at [3] in Listing 17-11. For now, let’s
+implement the `content` method with the simplest thing that will fulfill this
+requirement: always returning an empty string slice. We’ll change this later
+once we implement the ability to change a post’s state so it can be published.
+So far, posts can only be in the draft state, so the post content should always
+be empty. Listing 17-14 shows this placeholder implementation:
+
+Filename: src/lib.rs
+
+```
+impl Post {
+ // --snip--
+ pub fn content(&self) -> &str {
+ ""
+ }
+}
+```
+
+Listing 17-14: Adding a placeholder implementation for the `content` method on
+`Post` that always returns an empty string slice
+
+With this added `content` method, everything in Listing 17-11 up to the line at
+[3] works as intended.
+
+### Requesting a Review of the Post Changes Its State
+
+Next, we need to add functionality to request a review of a post, which should
+change its state from `Draft` to `PendingReview`. Listing 17-15 shows this code:
+
+Filename: src/lib.rs
+
+```
+impl Post {
+ // --snip--
+ [1] pub fn request_review(&mut self) {
+ [2] if let Some(s) = self.state.take() {
+ [3] self.state = Some(s.request_review())
+ }
+ }
+}
+
+trait State {
+ [4] fn request_review(self: Box<Self>) -> Box<dyn State>;
+}
+
+struct Draft {}
+
+impl State for Draft {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ [5] Box::new(PendingReview {})
+ }
+}
+
+struct PendingReview {}
+
+impl State for PendingReview {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ [6] self
+ }
+}
+```
+
+Listing 17-15: Implementing `request_review` methods on `Post` and the `State`
+trait
+
+We give `Post` a public method named `request_review` that will take a mutable
+reference to `self` [1]. Then we call an internal `request_review` method on
+the current state of `Post` [3], and this second `request_review` method
+consumes the current state and returns a new state.
+
+We add the `request_review` method to the `State` trait [4]; all types that
+implement the trait will now need to implement the `request_review` method.
+Note that rather than having `self`, `&self`, or `&mut self` as the first
+parameter of the method, we have `self: Box<Self>`. This syntax means the
+method is only valid when called on a `Box` holding the type. This syntax takes
+ownership of `Box<Self>`, invalidating the old state so the state value of the
+`Post` can transform into a new state.
+
+To consume the old state, the `request_review` method needs to take ownership
+of the state value. This is where the `Option` in the `state` field of `Post`
+comes in: we call the `take` method to take the `Some` value out of the `state`
+field and leave a `None` in its place, because Rust doesn’t let us have
+unpopulated fields in structs [2]. This lets us move the `state` value out of
+`Post` rather than borrowing it. Then we’ll set the post’s `state` value to the
+result of this operation.
+
+We need to set `state` to `None` temporarily rather than setting it directly
+with code like `self.state = self.state.request_review();` to get ownership of
+the `state` value. This ensures `Post` can’t use the old `state` value after
+we’ve transformed it into a new state.
+
+The `request_review` method on `Draft` returns a new, boxed instance of a new
+`PendingReview` struct [5], which represents the state when a post is waiting
+for a review. The `PendingReview` struct also implements the `request_review`
+method but doesn’t do any transformations. Rather, it returns itself [6],
+because when we request a review on a post already in the `PendingReview`
+state, it should stay in the `PendingReview` state.
+
+Now we can start seeing the advantages of the state pattern: the
+`request_review` method on `Post` is the same no matter its `state` value. Each
+state is responsible for its own rules.
+
+We’ll leave the `content` method on `Post` as is, returning an empty string
+slice. We can now have a `Post` in the `PendingReview` state as well as in the
+`Draft` state, but we want the same behavior in the `PendingReview` state.
+Listing 17-11 now works up to the line at [5]!
+
+### Adding `approve` to Change the Behavior of `content`
+
+The `approve` method will be similar to the `request_review` method: it will
+set `state` to the value that the current state says it should have when that
+state is approved, as shown in Listing 17-16:
+
+Filename: src/lib.rs
+
+```
+impl Post {
+ // --snip--
+ pub fn approve(&mut self) {
+ if let Some(s) = self.state.take() {
+ self.state = Some(s.approve())
+ }
+ }
+}
+
+trait State {
+ fn request_review(self: Box<Self>) -> Box<dyn State>;
+ fn approve(self: Box<Self>) -> Box<dyn State>;
+}
+
+struct Draft {}
+
+impl State for Draft {
+ // --snip--
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ [1] self
+ }
+}
+
+struct PendingReview {}
+
+impl State for PendingReview {
+ // --snip--
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ [2] Box::new(Published {})
+ }
+}
+
+struct Published {}
+
+impl State for Published {
+ fn request_review(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+
+ fn approve(self: Box<Self>) -> Box<dyn State> {
+ self
+ }
+}
+```
+
+Listing 17-16: Implementing the `approve` method on `Post` and the `State` trait
+
+We add the `approve` method to the `State` trait and add a new struct that
+implements `State`, the `Published` state.
+
+Similar to the way `request_review` on `PendingReview` works, if we call the
+`approve` method on a `Draft`, it will have no effect because `approve` will
+return `self` [1]. When we call `approve` on `PendingReview`, it returns a new,
+boxed instance of the `Published` struct [2]. The `Published` struct implements
+the `State` trait, and for both the `request_review` method and the `approve`
+method, it returns itself, because the post should stay in the `Published`
+state in those cases.
+
+Now we need to update the `content` method on `Post`. We want the value
+returned from `content` to depend on the current state of the `Post`, so we’re
+going to have the `Post` delegate to a `content` method defined on its `state`,
+as shown in Listing 17-17:
+
+Filename: src/lib.rs
+
+```
+impl Post {
+ // --snip--
+ pub fn content(&self) -> &str {
+ self.state.as_ref().unwrap().content(self)
+ }
+ // --snip--
+}
+```
+
+Listing 17-17: Updating the `content` method on `Post` to delegate to a
+`content` method on `State`
+
+Because the goal is to keep all these rules inside the structs that implement
+`State`, we call a `content` method on the value in `state` and pass the post
+instance (that is, `self`) as an argument. Then we return the value that’s
+returned from using the `content` method on the `state` value.
+
+We call the `as_ref` method on the `Option` because we want a reference to the
+value inside the `Option` rather than ownership of the value. Because `state`
+is an `Option<Box<dyn State>>`, when we call `as_ref`, an `Option<&Box<dyn
+State>>` is returned. If we didn’t call `as_ref`, we would get an error because
+we can’t move `state` out of the borrowed `&self` of the function parameter.
+
+We then call the `unwrap` method, which we know will never panic, because we
+know the methods on `Post` ensure that `state` will always contain a `Some`
+value when those methods are done. This is one of the cases we talked about in
+the “Cases In Which You Have More Information Than the Compiler” section of
+Chapter 9 when we know that a `None` value is never possible, even though the
+compiler isn’t able to understand that.
+
+At this point, when we call `content` on the `&Box<dyn State>`, deref coercion
+will take effect on the `&` and the `Box` so the `content` method will
+ultimately be called on the type that implements the `State` trait. That means
+we need to add `content` to the `State` trait definition, and that is where
+we’ll put the logic for what content to return depending on which state we
+have, as shown in Listing 17-18:
+
+Filename: src/lib.rs
+
+```
+trait State {
+ // --snip--
+ fn content<'a>(&self, post: &'a Post) -> &'a str {
+ [1] ""
+ }
+}
+
+// --snip--
+struct Published {}
+
+impl State for Published {
+ // --snip--
+ fn content<'a>(&self, post: &'a Post) -> &'a str {
+ [2] &post.content
+ }
+}
+```
+
+Listing 17-18: Adding the `content` method to the `State` trait
+
+We add a default implementation for the `content` method that returns an empty
+string slice [1]. That means we don’t need to implement `content` on the `Draft`
+and `PendingReview` structs. The `Published` struct will override the `content`
+method and return the value in `post.content` [2].
+
+Note that we need lifetime annotations on this method, as we discussed in
+Chapter 10. We’re taking a reference to a `post` as an argument and returning a
+reference to part of that `post`, so the lifetime of the returned reference is
+related to the lifetime of the `post` argument.
+
+And we’re done—all of Listing 17-11 now works! We’ve implemented the state
+pattern with the rules of the blog post workflow. The logic related to the
+rules lives in the state objects rather than being scattered throughout `Post`.
+
+> #### Why Not An Enum?
+>
+> You may have been wondering why we didn’t use an `enum` with the different
+> possible post states as variants. That’s certainly a possible solution, try
+> it and compare the end results to see which you prefer! One disadvantage of
+> using an enum is every place that checks the value of the enum will need a
+> `match` expression or similar to handle every possible variant. This could
+> get more repetitive than this trait object solution.
+
+### Trade-offs of the State Pattern
+
+We’ve shown that Rust is capable of implementing the object-oriented state
+pattern to encapsulate the different kinds of behavior a post should have in
+each state. The methods on `Post` know nothing about the various behaviors. The
+way we organized the code, we have to look in only one place to know the
+different ways a published post can behave: the implementation of the `State`
+trait on the `Published` struct.
+
+If we were to create an alternative implementation that didn’t use the state
+pattern, we might instead use `match` expressions in the methods on `Post` or
+even in the `main` code that checks the state of the post and changes behavior
+in those places. That would mean we would have to look in several places to
+understand all the implications of a post being in the published state! This
+would only increase the more states we added: each of those `match` expressions
+would need another arm.
+
+With the state pattern, the `Post` methods and the places we use `Post` don’t
+need `match` expressions, and to add a new state, we would only need to add a
+new struct and implement the trait methods on that one struct.
+
+The implementation using the state pattern is easy to extend to add more
+functionality. To see the simplicity of maintaining code that uses the state
+pattern, try a few of these suggestions:
+
+* Add a `reject` method that changes the post’s state from `PendingReview` back
+ to `Draft`.
+* Require two calls to `approve` before the state can be changed to `Published`.
+* Allow users to add text content only when a post is in the `Draft` state.
+ Hint: have the state object responsible for what might change about the
+ content but not responsible for modifying the `Post`.
+
+One downside of the state pattern is that, because the states implement the
+transitions between states, some of the states are coupled to each other. If we
+add another state between `PendingReview` and `Published`, such as `Scheduled`,
+we would have to change the code in `PendingReview` to transition to
+`Scheduled` instead. It would be less work if `PendingReview` didn’t need to
+change with the addition of a new state, but that would mean switching to
+another design pattern.
+
+Another downside is that we’ve duplicated some logic. To eliminate some of the
+duplication, we might try to make default implementations for the
+`request_review` and `approve` methods on the `State` trait that return `self`;
+however, this would violate object safety, because the trait doesn’t know what
+the concrete `self` will be exactly. We want to be able to use `State` as a
+trait object, so we need its methods to be object safe.
+
+Other duplication includes the similar implementations of the `request_review`
+and `approve` methods on `Post`. Both methods delegate to the implementation of
+the same method on the value in the `state` field of `Option` and set the new
+value of the `state` field to the result. If we had a lot of methods on `Post`
+that followed this pattern, we might consider defining a macro to eliminate the
+repetition (see the “Macros” section in Chapter 19).
+
+By implementing the state pattern exactly as it’s defined for object-oriented
+languages, we’re not taking as full advantage of Rust’s strengths as we could.
+Let’s look at some changes we can make to the `blog` crate that can make
+invalid states and transitions into compile time errors.
+
+#### Encoding States and Behavior as Types
+
+We’ll show you how to rethink the state pattern to get a different set of
+trade-offs. Rather than encapsulating the states and transitions completely so
+outside code has no knowledge of them, we’ll encode the states into different
+types. Consequently, Rust’s type checking system will prevent attempts to use
+draft posts where only published posts are allowed by issuing a compiler error.
+
+Let’s consider the first part of `main` in Listing 17-11:
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+ assert_eq!("", post.content());
+}
+```
+
+We still enable the creation of new posts in the draft state using `Post::new`
+and the ability to add text to the post’s content. But instead of having a
+`content` method on a draft post that returns an empty string, we’ll make it so
+draft posts don’t have the `content` method at all. That way, if we try to get
+a draft post’s content, we’ll get a compiler error telling us the method
+doesn’t exist. As a result, it will be impossible for us to accidentally
+display draft post content in production, because that code won’t even compile.
+Listing 17-19 shows the definition of a `Post` struct and a `DraftPost` struct,
+as well as methods on each:
+
+Filename: src/lib.rs
+
+```
+pub struct Post {
+ content: String,
+}
+
+pub struct DraftPost {
+ content: String,
+}
+
+impl Post {
+ [1] pub fn new() -> DraftPost {
+ DraftPost {
+ content: String::new(),
+ }
+ }
+
+ [2] pub fn content(&self) -> &str {
+ &self.content
+ }
+}
+
+impl DraftPost {
+ [3] pub fn add_text(&mut self, text: &str) {
+ self.content.push_str(text);
+ }
+}
+```
+
+Listing 17-19: A `Post` with a `content` method and a `DraftPost` without a
+`content` method
+
+Both the `Post` and `DraftPost` structs have a private `content` field that
+stores the blog post text. The structs no longer have the `state` field because
+we’re moving the encoding of the state to the types of the structs. The `Post`
+struct will represent a published post, and it has a `content` method that
+returns the `content` [2].
+
+We still have a `Post::new` function, but instead of returning an instance of
+`Post`, it returns an instance of `DraftPost` [1]. Because `content` is private
+and there aren’t any functions that return `Post`, it’s not possible to create
+an instance of `Post` right now.
+
+The `DraftPost` struct has an `add_text` method, so we can add text to
+`content` as before [3], but note that `DraftPost` does not have a `content`
+method defined! So now the program ensures all posts start as draft posts, and
+draft posts don’t have their content available for display. Any attempt to get
+around these constraints will result in a compiler error.
+
+#### Implementing Transitions as Transformations into Different Types
+
+So how do we get a published post? We want to enforce the rule that a draft
+post has to be reviewed and approved before it can be published. A post in the
+pending review state should still not display any content. Let’s implement
+these constraints by adding another struct, `PendingReviewPost`, defining the
+`request_review` method on `DraftPost` to return a `PendingReviewPost`, and
+defining an `approve` method on `PendingReviewPost` to return a `Post`, as
+shown in Listing 17-20:
+
+Filename: src/lib.rs
+
+```
+impl DraftPost {
+ // --snip--
+ pub fn request_review(self) -> PendingReviewPost {
+ PendingReviewPost {
+ content: self.content,
+ }
+ }
+}
+
+pub struct PendingReviewPost {
+ content: String,
+}
+
+impl PendingReviewPost {
+ pub fn approve(self) -> Post {
+ Post {
+ content: self.content,
+ }
+ }
+}
+```
+
+Listing 17-20: A `PendingReviewPost` that gets created by calling
+`request_review` on `DraftPost` and an `approve` method that turns a
+`PendingReviewPost` into a published `Post`
+
+The `request_review` and `approve` methods take ownership of `self`, thus
+consuming the `DraftPost` and `PendingReviewPost` instances and transforming
+them into a `PendingReviewPost` and a published `Post`, respectively. This way,
+we won’t have any lingering `DraftPost` instances after we’ve called
+`request_review` on them, and so forth. The `PendingReviewPost` struct doesn’t
+have a `content` method defined on it, so attempting to read its content
+results in a compiler error, as with `DraftPost`. Because the only way to get a
+published `Post` instance that does have a `content` method defined is to call
+the `approve` method on a `PendingReviewPost`, and the only way to get a
+`PendingReviewPost` is to call the `request_review` method on a `DraftPost`,
+we’ve now encoded the blog post workflow into the type system.
+
+But we also have to make some small changes to `main`. The `request_review` and
+`approve` methods return new instances rather than modifying the struct they’re
+called on, so we need to add more `let post =` shadowing assignments to save
+the returned instances. We also can’t have the assertions about the draft and
+pending review posts’ contents be empty strings, nor do we need them: we can’t
+compile code that tries to use the content of posts in those states any longer.
+The updated code in `main` is shown in Listing 17-21:
+
+Filename: src/main.rs
+
+```
+use blog::Post;
+
+fn main() {
+ let mut post = Post::new();
+
+ post.add_text("I ate a salad for lunch today");
+
+ let post = post.request_review();
+
+ let post = post.approve();
+
+ assert_eq!("I ate a salad for lunch today", post.content());
+}
+```
+
+Listing 17-21: Modifications to `main` to use the new implementation of the
+blog post workflow
+
+The changes we needed to make to `main` to reassign `post` mean that this
+implementation doesn’t quite follow the object-oriented state pattern anymore:
+the transformations between the states are no longer encapsulated entirely
+within the `Post` implementation. However, our gain is that invalid states are
+now impossible because of the type system and the type checking that happens at
+compile time! This ensures that certain bugs, such as display of the content of
+an unpublished post, will be discovered before they make it to production.
+
+Try the tasks suggested at the start of this section on the `blog` crate as it
+is after Listing 17-21 to see what you think about the design of this version
+of the code. Note that some of the tasks might be completed already in this
+design.
+
+We’ve seen that even though Rust is capable of implementing object-oriented
+design patterns, other patterns, such as encoding state into the type system,
+are also available in Rust. These patterns have different trade-offs. Although
+you might be very familiar with object-oriented patterns, rethinking the
+problem to take advantage of Rust’s features can provide benefits, such as
+preventing some bugs at compile time. Object-oriented patterns won’t always be
+the best solution in Rust due to certain features, like ownership, that
+object-oriented languages don’t have.
+
+## Summary
+
+No matter whether or not you think Rust is an object-oriented language after
+reading this chapter, you now know that you can use trait objects to get some
+object-oriented features in Rust. Dynamic dispatch can give your code some
+flexibility in exchange for a bit of runtime performance. You can use this
+flexibility to implement object-oriented patterns that can help your code’s
+maintainability. Rust also has other features, like ownership, that
+object-oriented languages don’t have. An object-oriented pattern won’t always
+be the best way to take advantage of Rust’s strengths, but is an available
+option.
+
+Next, we’ll look at patterns, which are another of Rust’s features that enable
+lots of flexibility. We’ve looked at them briefly throughout the book but
+haven’t seen their full capability yet. Let’s go!
diff --git a/src/doc/book/nostarch/chapter18.md b/src/doc/book/nostarch/chapter18.md
new file mode 100644
index 000000000..0b104dcf6
--- /dev/null
+++ b/src/doc/book/nostarch/chapter18.md
@@ -0,0 +1,1282 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Patterns and Matching
+
+*Patterns* are a special syntax in Rust for matching against the structure of
+types, both complex and simple. Using patterns in conjunction with `match`
+expressions and other constructs gives you more control over a program’s
+control flow. A pattern consists of some combination of the following:
+
+* Literals
+* Destructured arrays, enums, structs, or tuples
+* Variables
+* Wildcards
+* Placeholders
+
+Some example patterns include `x`, `(a, 3)`, and `Some(Color::Red)`. In the
+contexts in which patterns are valid, these components describe the shape of
+data. Our program then matches values against the patterns to determine whether
+it has the correct shape of data to continue running a particular piece of code.
+<!-- is there some generic pattern we can show as an example, early on, or
+is it too dependent on where the pattern is used? /LC -->
+<!-- Yeah, if a pattern is out of context, it doesn't look special. Like `3`
+can be a pattern. /Carol -->
+<!-- We could mention something like, "If you've written a little Rust, you've
+already used patterns without knowing it. For example `let x = 3`, the `x` is
+a pattern." Though looks like we use this later.
+
+Or, we could say, "Some example patterns include: `x`, `(a, b)`, and `Color::Red`
+/JT -->
+<!-- Ok, I've tried rewording this paragraph to include some examples, I do
+think it's important to emphasize that these are only patterns in the contexts
+patterns may exist, because without the context, there's no way to distinguish
+patterns from regular values /Carol -->
+
+To use a pattern, we compare it to some value. If the pattern matches the
+value, we use the value parts in our code. Recall the `match` expressions in
+Chapter 6 that used patterns, such as the coin-sorting machine example. If the
+value fits the shape of the pattern, we can use the named pieces. If it
+doesn’t, the code associated with the pattern won’t run.
+
+This chapter is a reference on all things related to patterns. We’ll cover the
+valid places to use patterns, the difference between refutable and irrefutable
+patterns, and the different kinds of pattern syntax that you might see. By the
+end of the chapter, you’ll know how to use patterns to express many concepts in
+a clear way.
+
+## All the Places Patterns Can Be Used
+
+Patterns pop up in a number of places in Rust, and you’ve been using them a lot
+without realizing it! This section discusses all the places where patterns are
+valid.
+
+### `match` Arms
+
+As discussed in Chapter 6, we use patterns in the arms of `match` expressions.
+Formally, `match` expressions are defined as the keyword `match`, a value to
+match on, and one or more match arms that consist of a pattern and an
+expression to run if the value matches that arm’s pattern, like this:
+
+```
+match VALUE {
+ PATTERN => EXPRESSION,
+ PATTERN => EXPRESSION,
+ PATTERN => EXPRESSION,
+}
+```
+
+For example, here's the `match` expression from Listing 6-5 that matches on an
+`Option<i32>` value in the variable `x`:
+
+```
+match x {
+ None => None,
+ Some(i) => Some(i + 1),
+}
+```
+
+The patterns in this `match` expression are the `None` and `Some(i)` on the
+left of each arrow.
+
+One requirement for `match` expressions is that they need to be *exhaustive* in
+the sense that all possibilities for the value in the `match` expression must
+be accounted for. One way to ensure you’ve covered every possibility is to have
+a catchall pattern for the last arm: for example, a variable name matching any
+value can never fail and thus covers every remaining case.
+
+The particular pattern `_` will match anything, but it never binds to a
+variable, so it’s often used in the last match arm. The `_` pattern can be
+useful when you want to ignore any value not specified, for example. We’ll
+cover the `_` pattern in more detail in the “Ignoring Values in a Pattern”
+section later in this chapter.
+
+### Conditional `if let` Expressions
+
+In Chapter 6 we discussed how to use `if let` expressions mainly as a shorter
+way to write the equivalent of a `match` that only matches one case.
+Optionally, `if let` can have a corresponding `else` containing code to run if
+the pattern in the `if let` doesn’t match.
+
+Listing 18-1 shows that it’s also possible to mix and match `if let`, `else
+if`, and `else if let` expressions. Doing so gives us more flexibility than a
+`match` expression in which we can express only one value to compare with the
+patterns. Also, Rust doesn't require that the conditions in a series of `if
+let`, `else if`, `else if let` arms relate to each other.
+
+The code in Listing 18-1 determines what color to make your background based on
+a series of checks for several conditions. For this example, we’ve created
+variables with hardcoded values that a real program might receive from user
+input.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let favorite_color: Option<&str> = None;
+ let is_tuesday = false;
+ let age: Result<u8, _> = "34".parse();
+
+ [1] if let Some(color) = favorite_color {
+ [2] println!("Using your favorite color, {color}, as the background");
+ [3] } else if is_tuesday {
+ [4] println!("Tuesday is green day!");
+ [5]} else if let Ok(age) = age {
+ [6] if age > 30 {
+ [7] println!("Using purple as the background color");
+ } else {
+ [8] println!("Using orange as the background color");
+ }
+ [9] } else {
+ [10] println!("Using blue as the background color");
+ }
+}
+```
+
+Listing 18-1: Mixing `if let`, `else if`, `else if let`, and `else`
+
+If the user specifies a favorite color [1], that color is used as the
+background [2]. If no favorite color is specified and today is Tuesday [3], the
+background color is green [4]. Otherwise, if the user specifies their age as a
+string and we can parse it as a number successfully [5], the color is either
+purple [7] or orange [8] depending on the value of the number [6]. If none of
+these conditions apply [9], the background color is blue.
+
+This conditional structure lets us support complex requirements. With the
+hardcoded values we have here, this example will print `Using purple as the
+background color`.
+
+You can see that `if let` can also introduce shadowed variables in the same way
+that `match` arms can: the line `if let Ok(age) = age` [5] introduces a new
+shadowed `age` variable that contains the value inside the `Ok` variant. This
+means we need to place the `if age > 30` condition [6] within that block: we
+can’t combine these two conditions into `if let Ok(age) = age && age > 30`. The
+shadowed `age` we want to compare to 30 isn’t valid until the new scope starts
+with the curly bracket.
+
+<!-- Have we given them an intuition yet for why this is? I may be forgetting
+something from the earlier chapters, but I wonder if we should reiterate that
+when a pattern matches, the variable that gets bound is only valid for the
+expression or block that follows the match. /JT -->
+<!-- I don't really see a difference between saying "The shadowed `age` we want
+to compare to 30 isn't valid until the new scope starts with the curly bracket"
+and "when a pattern matches, the variable that gets bound is only valid for the
+expression or block that follows the match"? To me, it sounds like this would
+be saying the same thing twice, so I'm not going to change anything here.
+/Carol -->
+
+The downside of using `if let` expressions is that the compiler doesn’t check
+for exhaustiveness, whereas with `match` expressions it does. If we omitted the
+last `else` block [9] and therefore missed handling some cases, the compiler
+would not alert us to the possible logic bug.
+
+### `while let` Conditional Loops
+
+Similar in construction to `if let`, the `while let` conditional loop allows a
+`while` loop to run for as long as a pattern continues to match. In Listing
+18-2 we code a `while let` loop that uses a vector as a stack and prints the
+values in the vector in the opposite order in which they were pushed.
+
+```
+let mut stack = Vec::new();
+
+stack.push(1);
+stack.push(2);
+stack.push(3);
+
+while let Some(top) = stack.pop() {
+ println!("{}", top);
+}
+```
+
+Listing 18-2: Using a `while let` loop to print values for as long as
+`stack.pop()` returns `Some`
+
+This example prints 3, 2, and then 1. The `pop` method takes the last element
+out of the vector and returns `Some(value)`. If the vector is empty, `pop`
+returns `None`. The `while` loop continues running the code in its block as
+long as `pop` returns `Some`. When `pop` returns `None`, the loop stops. We can
+use `while let` to pop every element off our stack.
+
+### `for` Loops
+
+In a `for` loop, the value that directly follows the keyword `for` is a
+pattern. For example, in `for x in y` the `x` is the pattern. Listing 18-3
+demonstrates how to use a pattern in a `for` loop to destructure, or break
+apart, a tuple as part of the `for` loop.
+
+```
+let v = vec!['a', 'b', 'c'];
+
+for (index, value) in v.iter().enumerate() {
+ println!("{} is at index {}", value, index);
+}
+```
+
+Listing 18-3: Using a pattern in a `for` loop to destructure a tuple
+
+The code in Listing 18-3 will print the following:
+
+```
+a is at index 0
+b is at index 1
+c is at index 2
+```
+
+We adapt an iterator using the `enumerate` method so it produces a value and
+the index for that value, placed into a tuple. The first value produced is the
+tuple `(0, 'a')`. When this value is matched to the pattern `(index, value)`,
+`index` will be `0` and `value` will be `'a'`, printing the first line of the
+output.
+
+### `let` Statements
+
+Prior to this chapter, we had only explicitly discussed using patterns with
+`match` and `if let`, but in fact, we’ve used patterns in other places as well,
+including in `let` statements. For example, consider this straightforward
+variable assignment with `let`:
+
+```
+let x = 5;
+```
+
+Every time you've used a `let` statement like this you've been using patterns,
+although you might not have realized it! More formally, a `let` statement looks
+like this:
+
+```
+let PATTERN = EXPRESSION;
+```
+
+In statements like `let x = 5;` with a variable name in the `PATTERN` slot, the
+variable name is just a particularly simple form of a pattern. Rust compares
+the expression against the pattern and assigns any names it finds. So in the
+`let x = 5;` example, `x` is a pattern that means “bind what matches here to
+the variable `x`.” Because the name `x` is the whole pattern, this pattern
+effectively means “bind everything to the variable `x`, whatever the value is.”
+
+To see the pattern matching aspect of `let` more clearly, consider Listing
+18-4, which uses a pattern with `let` to destructure a tuple.
+
+```
+let (x, y, z) = (1, 2, 3);
+```
+
+Listing 18-4: Using a pattern to destructure a tuple and create three variables
+at once
+
+Here, we match a tuple against a pattern. Rust compares the value `(1, 2, 3)`
+to the pattern `(x, y, z)` and sees that the value matches the pattern, in that
+it sees that the number of elements is the same in both, so Rust
+binds `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple
+pattern as nesting three individual variable patterns inside it.
+
+If the number of elements in the pattern doesn’t match the number of elements
+in the tuple, the overall type won’t match and we’ll get a compiler error. For
+example, Listing 18-5 shows an attempt to destructure a tuple with three
+elements into two variables, which won’t work.
+
+```
+let (x, y) = (1, 2, 3);
+```
+
+Listing 18-5: Incorrectly constructing a pattern whose variables don’t match
+the number of elements in the tuple
+
+Attempting to compile this code results in this type error:
+
+```
+error[E0308]: mismatched types
+ --> src/main.rs:2:9
+ |
+2 | let (x, y) = (1, 2, 3);
+ | ^^^^^^ --------- this expression has type `({integer}, {integer}, {integer})`
+ | |
+ | expected a tuple with 3 elements, found one with 2 elements
+ |
+ = note: expected tuple `({integer}, {integer}, {integer})`
+ found tuple `(_, _)`
+```
+
+To fix the error, we could ignore one or more of the values in the tuple using
+`_` or `..`, as you’ll see in the “Ignoring Values in a Pattern” section. If
+the problem is that we have too many variables in the pattern, the solution is
+to make the types match by removing variables so the number of variables equals
+the number of elements in the tuple.
+
+### Function Parameters
+
+Function parameters can also be patterns. The code in Listing 18-6, which
+declares a function named `foo` that takes one parameter named `x` of type
+`i32`, should by now look familiar.
+
+```
+fn foo(x: i32) {
+ // code goes here
+}
+```
+
+Listing 18-6: A function signature uses patterns in the parameters
+
+The `x` part is a pattern! As we did with `let`, we could match a tuple in a
+function’s arguments to the pattern. Listing 18-7 splits the values in a tuple
+as we pass it to a function.
+
+Filename: src/main.rs
+
+```
+fn print_coordinates(&(x, y): &(i32, i32)) {
+ println!("Current location: ({}, {})", x, y);
+}
+
+fn main() {
+ let point = (3, 5);
+ print_coordinates(&point);
+}
+```
+
+Listing 18-7: A function with parameters that destructure a tuple
+
+This code prints `Current location: (3, 5)`. The values `&(3, 5)` match the
+pattern `&(x, y)`, so `x` is the value `3` and `y` is the value `5`.
+
+We can also use patterns in closure parameter lists in the same way as in
+function parameter lists, because closures are similar to functions, as
+discussed in Chapter 13.
+
+At this point, you’ve seen several ways of using patterns, but patterns don’t
+work the same in every place we can use them. In some places, the patterns must
+be irrefutable; in other circumstances, they can be refutable. We’ll discuss
+these two concepts next.
+
+## Refutability: Whether a Pattern Might Fail to Match
+
+Patterns come in two forms: refutable and irrefutable. Patterns that will match
+for any possible value passed are *irrefutable*. An example would be `x` in the
+statement `let x = 5;` because `x` matches anything and therefore cannot fail
+to match. Patterns that can fail to match for some possible value are
+*refutable*. An example would be `Some(x)` in the expression `if let Some(x) =
+a_value` because if the value in the `a_value` variable is `None` rather than
+`Some`, the `Some(x)` pattern will not match.
+
+Function parameters, `let` statements, and `for` loops can only accept
+irrefutable patterns, because the program cannot do anything meaningful when
+values don’t match. The `if let` and `while let` expressions accept
+refutable and irrefutable patterns, but the compiler warns against
+irrefutable patterns because by definition they’re intended to handle possible
+failure: the functionality of a conditional is in its ability to perform
+differently depending on success or failure.
+
+In general, you shouldn’t have to worry about the distinction between refutable
+and irrefutable patterns; however, you do need to be familiar with the concept
+of refutability so you can respond when you see it in an error message. In
+those cases, you’ll need to change either the pattern or the construct you’re
+using the pattern with, depending on the intended behavior of the code.
+
+Let’s look at an example of what happens when we try to use a refutable pattern
+where Rust requires an irrefutable pattern and vice versa. Listing 18-8 shows a
+`let` statement, but for the pattern we’ve specified `Some(x)`, a refutable
+pattern. As you might expect, this code will not compile.
+
+```
+let Some(x) = some_option_value;
+```
+
+Listing 18-8: Attempting to use a refutable pattern with `let`
+
+If `some_option_value` was a `None` value, it would fail to match the pattern
+`Some(x)`, meaning the pattern is refutable. However, the `let` statement can
+only accept an irrefutable pattern because there is nothing valid the code can
+do with a `None` value. At compile time, Rust will complain that we’ve tried to
+use a refutable pattern where an irrefutable pattern is required:
+
+```
+error[E0005]: refutable pattern in local binding: `None` not covered
+ --> src/main.rs:3:9
+ |
+3 | let Some(x) = some_option_value;
+ | ^^^^^^^ pattern `None` not covered
+ |
+ = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
+ = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
+ = note: the matched value is of type `Option<i32>`
+help: you might want to use `if let` to ignore the variant that isn't matched
+ |
+3 | if let Some(x) = some_option_value { /* */ }
+ |
+```
+
+Because we didn’t cover (and couldn’t cover!) every valid value with the
+pattern `Some(x)`, Rust rightfully produces a compiler error.
+
+If we have a refutable pattern where an irrefutable pattern is needed, we can
+fix it by changing the code that uses the pattern: instead of using `let`, we
+can use `if let`. Then if the pattern doesn’t match, the code will just skip
+the code in the curly brackets, giving it a way to continue validly. Listing
+18-9 shows how to fix the code in Listing 18-8.
+
+```
+if let Some(x) = some_option_value {
+ println!("{}", x);
+}
+```
+
+Listing 18-9: Using `if let` and a block with refutable patterns instead of
+`let`
+
+We’ve given the code an out! This code is perfectly valid, although it means we
+cannot use an irrefutable pattern without receiving an error. If we give `if
+let` a pattern that will always match, such as `x`, as shown in Listing 18-10,
+the compiler will give a warning.
+
+```
+if let x = 5 {
+ println!("{}", x);
+};
+```
+
+Listing 18-10: Attempting to use an irrefutable pattern with `if let`
+
+Rust complains that it doesn’t make sense to use `if let` with an irrefutable
+pattern:
+
+```
+warning: irrefutable `if let` pattern
+ --> src/main.rs:2:8
+ |
+2 | if let x = 5 {
+ | ^^^^^^^^^
+ |
+ = note: `#[warn(irrefutable_let_patterns)]` on by default
+ = note: this pattern will always match, so the `if let` is useless
+ = help: consider replacing the `if let` with a `let`
+```
+
+For this reason, match arms must use refutable patterns, except for the last
+arm, which should match any remaining values with an irrefutable pattern. Rust
+allows us to use an irrefutable pattern in a `match` with only one arm, but
+this syntax isn’t particularly useful and could be replaced with a simpler
+`let` statement.
+
+Now that you know where to use patterns and the difference between refutable
+and irrefutable patterns, let’s cover all the syntax we can use to create
+patterns.
+
+## Pattern Syntax
+
+In this section, we gather all the syntax valid in patterns and discuss why and
+when you might want to use each one.
+
+### Matching Literals
+
+As you saw in Chapter 6, you can match patterns against literals directly. The
+following code gives some examples:
+
+```
+let x = 1;
+
+match x {
+ 1 => println!("one"),
+ 2 => println!("two"),
+ 3 => println!("three"),
+ _ => println!("anything"),
+}
+```
+
+This code prints `one` because the value in `x` is 1. This syntax is useful
+when you want your code to take an action if it gets a particular concrete
+value.
+
+### Matching Named Variables
+
+Named variables are irrefutable patterns that match any value, and we’ve used
+them many times in the book. However, there is a complication when you use
+named variables in `match` expressions. Because `match` starts a new scope,
+variables declared as part of a pattern inside the `match` expression will
+shadow those with the same name outside the `match` construct, as is the case
+with all variables. In Listing 18-11, we declare a variable named `x` with the
+value `Some(5)` and a variable `y` with the value `10`. We then create a
+`match` expression on the value `x`. Look at the patterns in the match arms and
+`println!` at the end, and try to figure out what the code will print before
+running this code or reading further.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ [1] let x = Some(5);
+ [2] let y = 10;
+
+ match x {
+ [3] Some(50) => println!("Got 50"),
+ [4] Some(y) => println!("Matched, y = {y}"),
+ [5] _ => println!("Default case, x = {:?}", x),
+ }
+
+ [6] println!("at the end: x = {:?}, y = {y}", x);
+}
+```
+
+Listing 18-11: A `match` expression with an arm that introduces a shadowed
+variable `y`
+
+Let’s walk through what happens when the `match` expression runs. The pattern
+in the first match arm [3] doesn’t match the defined value of `x` [1], so the
+code continues.
+
+The pattern in the second match arm [4] introduces a new variable named `y`
+that will match any value inside a `Some` value. Because we’re in a new scope
+inside the `match` expression, this is a new `y` variable, not the `y` we
+declared at the beginning with the value 10 [2]. This new `y` binding will
+match any value inside a `Some`, which is what we have in `x`. Therefore, this
+new `y` binds to the inner value of the `Some` in `x`. That value is `5`, so
+the expression for that arm executes and prints `Matched, y = 5`.
+
+If `x` had been a `None` value instead of `Some(5)`, the patterns in the first
+two arms wouldn’t have matched, so the value would have matched to the
+underscore [5]. We didn’t introduce the `x` variable in the pattern of the
+underscore arm, so the `x` in the expression is still the outer `x` that hasn’t
+been shadowed. In this hypothetical case, the `match` would print `Default
+case, x = None`.
+
+When the `match` expression is done, its scope ends, and so does the scope of
+the inner `y`. The last `println!` [6] produces `at the end: x = Some(5), y =
+10`.
+
+To create a `match` expression that compares the values of the outer `x` and
+`y`, rather than introducing a shadowed variable, we would need to use a match
+guard conditional instead. We’ll talk about match guards later in the “Extra
+Conditionals with Match Guards” section.
+
+### Multiple Patterns
+
+In `match` expressions, you can match multiple patterns using the `|` syntax,
+which is the pattern *or* operator. For example, in the following code we match
+the value of `x` against the match arms, the first of which has an *or* option,
+meaning if the value of `x` matches either of the values in that arm, that
+arm’s code will run:
+
+```
+let x = 1;
+
+match x {
+ 1 | 2 => println!("one or two"),
+ 3 => println!("three"),
+ _ => println!("anything"),
+}
+```
+
+This code prints `one or two`.
+
+### Matching Ranges of Values with `..=`
+
+The `..=` syntax allows us to match to an inclusive range of values. In the
+following code, when a pattern matches any of the values within the given
+range, that arm will execute:
+
+```
+let x = 5;
+
+match x {
+ 1..=5 => println!("one through five"),
+ _ => println!("something else"),
+}
+```
+
+If `x` is 1, 2, 3, 4, or 5, the first arm will match. This syntax is more
+convenient for multiple match values than using the `|` operator to express the
+same idea; if we were to use `|` we would have to specify `1 | 2 | 3 | 4 | 5`.
+Specifying a range is much shorter, especially if we want to match, say, any
+number between 1 and 1,000!
+
+The compiler checks that the range isn’t empty at compile time, and because the
+only types for which Rust can tell if a range is empty or not are `char` and
+numeric values, ranges are only allowed with numeric or `char` values.
+
+Here is an example using ranges of `char` values:
+
+```
+let x = 'c';
+
+match x {
+ 'a'..='j' => println!("early ASCII letter"),
+ 'k'..='z' => println!("late ASCII letter"),
+ _ => println!("something else"),
+}
+```
+
+Rust can tell that `'c'` is within the first pattern’s range and prints `early
+ASCII letter`.
+
+### Destructuring to Break Apart Values
+
+We can also use patterns to destructure structs, enums, and tuples to use
+different parts of these values. Let’s walk through each value.
+
+#### Destructuring Structs
+
+Listing 18-12 shows a `Point` struct with two fields, `x` and `y`, that we can
+break apart using a pattern with a `let` statement.
+
+Filename: src/main.rs
+
+```
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ let Point { x: a, y: b } = p;
+ assert_eq!(0, a);
+ assert_eq!(7, b);
+}
+```
+
+Listing 18-12: Destructuring a struct’s fields into separate variables
+
+This code creates the variables `a` and `b` that match the values of the `x`
+and `y` fields of the `p` struct. This example shows that the names of the
+variables in the pattern don’t have to match the field names of the struct.
+However, it’s common to match the variable names to the field names to make it
+easier to remember which variables came from which fields. Because of this
+common usage, and because writing `let Point { x: x, y: y } = p;` contains a
+lot of duplication, Rust has a shorthand for patterns that match struct fields:
+you only need to list the name of the struct field, and the variables created
+from the pattern will have the same names. Listing 18-13 behaves in the same
+way as the code in Listing 18-12, but the variables created in the `let`
+pattern are `x` and `y` instead of `a` and `b`.
+
+Filename: src/main.rs
+
+```
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ let Point { x, y } = p;
+ assert_eq!(0, x);
+ assert_eq!(7, y);
+}
+```
+
+Listing 18-13: Destructuring struct fields using struct field shorthand
+
+This code creates the variables `x` and `y` that match the `x` and `y` fields
+of the `p` variable. The outcome is that the variables `x` and `y` contain the
+values from the `p` struct.
+
+We can also destructure with literal values as part of the struct pattern
+rather than creating variables for all the fields. Doing so allows us to test
+some of the fields for particular values while creating variables to
+destructure the other fields.
+
+In Listing 18-14, we have a `match` expression that separates `Point` values
+into three cases: points that lie directly on the `x` axis (which is true when
+`y = 0`), on the `y` axis (`x = 0`), or neither.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let p = Point { x: 0, y: 7 };
+
+ match p {
+ Point { x, y: 0 } => println!("On the x axis at {}", x),
+ Point { x: 0, y } => println!("On the y axis at {}", y),
+ Point { x, y } => println!("On neither axis: ({}, {})", x, y),
+ }
+}
+```
+
+Listing 18-14: Destructuring and matching literal values in one pattern
+
+The first arm will match any point that lies on the `x` axis by specifying that
+the `y` field matches if its value matches the literal `0`. The pattern still
+creates an `x` variable that we can use in the code for this arm.
+
+Similarly, the second arm matches any point on the `y` axis by specifying that
+the `x` field matches if its value is `0` and creates a variable `y` for the
+value of the `y` field. The third arm doesn’t specify any literals, so it
+matches any other `Point` and creates variables for both the `x` and `y` fields.
+
+In this example, the value `p` matches the second arm by virtue of `x`
+containing a 0, so this code will print `On the y axis at 7`.
+
+Remember that a `match` expression stops checking arms once it has found the
+first matching pattern, so even though `Point { x: 0, y: 0}` is on the `x` axis
+and the `y` axis, this code would only print `On the x axis at 0`.
+
+<!-- We should remind them that we stop at the first pattern, so even though
+0,0 is on both x- and y-axis in a sense, you'll only ever see the "on x-axis
+message" /JT -->
+<!-- Done! /Carol -->
+
+#### Destructuring Enums
+
+We've destructured enums in this book (for example, Listing 6-5 in Chapter 6),
+but haven’t yet explicitly discussed that the pattern to destructure an enum
+corresponds to the way the data stored within the enum is defined. As an
+example, in Listing 18-15 we use the `Message` enum from Listing 6-2 and write
+a `match` with patterns that will destructure each inner value.
+
+Filename: src/main.rs
+
+```
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(i32, i32, i32),
+}
+
+fn main() {
+ [1] let msg = Message::ChangeColor(0, 160, 255);
+
+ match msg {
+ [2] Message::Quit => {
+ println!("The Quit variant has no data to destructure.")
+ }
+ [3] Message::Move { x, y } => {
+ println!(
+ "Move in the x direction {} and in the y direction {}",
+ x, y
+ );
+ }
+ [4] Message::Write(text) => println!("Text message: {}", text),
+ [5] Message::ChangeColor(r, g, b) => println!(
+ "Change the color to red {}, green {}, and blue {}",
+ r, g, b
+ ),
+ }
+}
+```
+
+Listing 18-15: Destructuring enum variants that hold different kinds of values
+
+This code will print `Change the color to red 0, green 160, and blue 255`. Try
+changing the value of `msg` [1] to see the code from the other arms run.
+
+For enum variants without any data, like `Message::Quit` [2], we can’t
+destructure the value any further. We can only match on the literal
+`Message::Quit` value, and no variables are in that pattern.
+
+For struct-like enum variants, such as `Message::Move` [3], we can use a
+pattern similar to the pattern we specify to match structs. After the variant
+name, we place curly brackets and then list the fields with variables so we
+break apart the pieces to use in the code for this arm. Here we use the
+shorthand form as we did in Listing 18-13.
+
+For tuple-like enum variants, like `Message::Write` that holds a tuple with one
+element [4] and `Message::ChangeColor` that holds a tuple with three elements
+[5], the pattern is similar to the pattern we specify to match tuples. The
+number of variables in the pattern must match the number of elements in the
+variant we’re matching.
+
+#### Destructuring Nested Structs and Enums
+
+So far, our examples have all been matching structs or enums one level deep,
+but matching can work on nested items too! For example, we can refactor the
+code in Listing 18-15 to support RGB and HSV colors in the `ChangeColor`
+message, as shown in Listing 18-16.
+
+```
+enum Color {
+ Rgb(i32, i32, i32),
+ Hsv(i32, i32, i32),
+}
+
+enum Message {
+ Quit,
+ Move { x: i32, y: i32 },
+ Write(String),
+ ChangeColor(Color),
+}
+
+fn main() {
+ let msg = Message::ChangeColor(Color::Hsv(0, 160, 255));
+
+ match msg {
+ Message::ChangeColor(Color::Rgb(r, g, b)) => println!(
+ "Change the color to red {}, green {}, and blue {}",
+ r, g, b
+ ),
+ Message::ChangeColor(Color::Hsv(h, s, v)) => println!(
+ "Change the color to hue {}, saturation {}, and value {}",
+ h, s, v
+ ),
+ _ => (),
+ }
+}
+```
+
+Listing 18-16: Matching on nested enums
+
+The pattern of the first arm in the `match` expression matches a
+`Message::ChangeColor` enum variant that contains a `Color::Rgb` variant; then
+the pattern binds to the three inner `i32` values. The pattern of the second
+arm also matches a `Message::ChangeColor` enum variant, but the inner enum
+matches `Color::Hsv` instead. We can specify these complex conditions in one
+`match` expression, even though two enums are involved.
+
+#### Destructuring Structs and Tuples
+
+We can mix, match, and nest destructuring patterns in even more complex ways.
+The following example shows a complicated destructure where we nest structs and
+tuples inside a tuple and destructure all the primitive values out:
+
+```
+let ((feet, inches), Point { x, y }) = ((3, 10), Point { x: 3, y: -10 });
+```
+
+This code lets us break complex types into their component parts so we can use
+the values we’re interested in separately.
+
+Destructuring with patterns is a convenient way to use pieces of values, such
+as the value from each field in a struct, separately from each other.
+
+### Ignoring Values in a Pattern
+
+You’ve seen that it’s sometimes useful to ignore values in a pattern, such as
+in the last arm of a `match`, to get a catchall that doesn’t actually do
+anything but does account for all remaining possible values. There are a few
+ways to ignore entire values or parts of values in a pattern: using the `_`
+pattern (which you’ve seen), using the `_` pattern within another pattern,
+using a name that starts with an underscore, or using `..` to ignore remaining
+parts of a value. Let’s explore how and why to use each of these patterns.
+
+#### Ignoring an Entire Value with `_`
+
+We’ve used the underscore as a wildcard pattern that will match any value but
+not bind to the value. This is especially useful as the last arm in a `match`
+expression, but we can also use it in any pattern, including function
+parameters, as shown in Listing 18-17.
+
+Filename: src/main.rs
+
+```
+fn foo(_: i32, y: i32) {
+ println!("This code only uses the y parameter: {}", y);
+}
+
+fn main() {
+ foo(3, 4);
+}
+```
+
+Listing 18-17: Using `_` in a function signature
+
+This code will completely ignore the value `3` passed as the first argument,
+and will print `This code only uses the y parameter: 4`.
+
+In most cases when you no longer need a particular function parameter, you
+would change the signature so it doesn’t include the unused parameter. Ignoring
+a function parameter can be especially useful in cases when, for example,
+you're implementing a trait when you need a certain type signature but the
+function body in your implementation doesn’t need one of the parameters. You
+then avoid getting a compiler warning about unused function parameters, as you
+would if you used a name instead.
+
+#### Ignoring Parts of a Value with a Nested `_`
+
+We can also use `_` inside another pattern to ignore just part of a value, for
+example, when we want to test for only part of a value but have no use for the
+other parts in the corresponding code we want to run. Listing 18-18 shows code
+responsible for managing a setting’s value. The business requirements are that
+the user should not be allowed to overwrite an existing customization of a
+setting but can unset the setting and give it a value if it is currently unset.
+
+```
+let mut setting_value = Some(5);
+let new_setting_value = Some(10);
+
+match (setting_value, new_setting_value) {
+ (Some(_), Some(_)) => {
+ println!("Can't overwrite an existing customized value");
+ }
+ _ => {
+ setting_value = new_setting_value;
+ }
+}
+
+println!("setting is {:?}", setting_value);
+```
+
+Listing 18-18: Using an underscore within patterns that match `Some` variants
+when we don’t need to use the value inside the `Some`
+
+This code will print `Can't overwrite an existing customized value` and then
+`setting is Some(5)`. In the first match arm, we don’t need to match on or use
+the values inside either `Some` variant, but we do need to test for the case
+when `setting_value` and `new_setting_value` are the `Some` variant. In that
+case, we print the reason for not changing `setting_value`, and it doesn’t get
+changed.
+
+In all other cases (if either `setting_value` or `new_setting_value` are
+`None`) expressed by the `_` pattern in the second arm, we want to allow
+`new_setting_value` to become `setting_value`.
+
+We can also use underscores in multiple places within one pattern to ignore
+particular values. Listing 18-19 shows an example of ignoring the second and
+fourth values in a tuple of five items.
+
+```
+let numbers = (2, 4, 8, 16, 32);
+
+match numbers {
+ (first, _, third, _, fifth) => {
+ println!("Some numbers: {first}, {third}, {fifth}")
+ }
+}
+```
+
+Listing 18-19: Ignoring multiple parts of a tuple
+
+This code will print `Some numbers: 2, 8, 32`, and the values 4 and 16 will be
+ignored.
+
+#### Ignoring an Unused Variable by Starting Its Name with `_`
+
+If you create a variable but don’t use it anywhere, Rust will usually issue a
+warning because an unused variable could be a bug. However, sometimes it’s
+useful to be able to create a variable you won’t use yet, such as when you’re
+prototyping or just starting a project. In this situation, you can tell Rust
+not to warn you about the unused variable by starting the name of the variable
+with an underscore. In Listing 18-20, we create two unused variables, but when
+we compile this code, we should only get a warning about one of them.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let _x = 5;
+ let y = 10;
+}
+```
+
+Listing 18-20: Starting a variable name with an
+underscore to avoid getting unused variable warnings
+
+Here we get a warning about not using the variable `y`, but we don’t get a
+warning about not using `_x`.
+
+Note that there is a subtle difference between using only `_` and using a name
+that starts with an underscore. The syntax `_x` still binds the value to the
+variable, whereas `_` doesn’t bind at all. To show a case where this
+distinction matters, Listing 18-21 will provide us with an error.
+
+```
+let s = Some(String::from("Hello!"));
+
+if let Some(_s) = s {
+ println!("found a string");
+}
+
+println!("{:?}", s);
+```
+
+Listing 18-21: An unused variable starting with an underscore still binds the
+value, which might take ownership of the value
+
+We’ll receive an error because the `s` value will still be moved into `_s`,
+which prevents us from using `s` again. However, using the underscore by itself
+doesn’t ever bind to the value. Listing 18-22 will compile without any errors
+because `s` doesn’t get moved into `_`.
+
+```
+let s = Some(String::from("Hello!"));
+
+if let Some(_) = s {
+ println!("found a string");
+}
+
+println!("{:?}", s);
+```
+
+Listing 18-22: Using an underscore does not bind the value
+
+This code works just fine because we never bind `s` to anything; it isn’t moved.
+
+#### Ignoring Remaining Parts of a Value with `..`
+
+With values that have many parts, we can use the `..` syntax to use specific
+parts and ignore the rest, avoiding the need to list underscores for each
+ignored value. The `..` pattern ignores any parts of a value that we haven’t
+explicitly matched in the rest of the pattern. In Listing 18-23, we have a
+`Point` struct that holds a coordinate in three-dimensional space. In the
+`match` expression, we want to operate only on the `x` coordinate and ignore
+the values in the `y` and `z` fields.
+
+```
+struct Point {
+ x: i32,
+ y: i32,
+ z: i32,
+}
+
+let origin = Point { x: 0, y: 0, z: 0 };
+
+match origin {
+ Point { x, .. } => println!("x is {}", x),
+}
+```
+
+Listing 18-23: Ignoring all fields of a `Point` except for `x` by using `..`
+
+We list the `x` value and then just include the `..` pattern. This is quicker
+than having to list `y: _` and `z: _`, particularly when we’re working with
+structs that have lots of fields in situations where only one or two fields are
+relevant.
+
+The syntax `..` will expand to as many values as it needs to be. Listing 18-24
+shows how to use `..` with a tuple.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (first, .., last) => {
+ println!("Some numbers: {first}, {last}");
+ }
+ }
+}
+```
+
+Listing 18-24: Matching only the first and last values in a tuple and ignoring
+all other values
+
+In this code, the first and last value are matched with `first` and `last`. The
+`..` will match and ignore everything in the middle.
+
+However, using `..` must be unambiguous. If it is unclear which values are
+intended for matching and which should be ignored, Rust will give us an error.
+Listing 18-25 shows an example of using `..` ambiguously, so it will not
+compile.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let numbers = (2, 4, 8, 16, 32);
+
+ match numbers {
+ (.., second, ..) => {
+ println!("Some numbers: {}", second)
+ },
+ }
+}
+```
+
+Listing 18-25: An attempt to use `..` in an ambiguous way
+
+When we compile this example, we get this error:
+
+```
+error: `..` can only be used once per tuple pattern
+ --> src/main.rs:5:22
+ |
+5 | (.., second, ..) => {
+ | -- ^^ can only be used once per tuple pattern
+ | |
+ | previously used here
+```
+
+It’s impossible for Rust to determine how many values in the tuple to ignore
+before matching a value with `second` and then how many further values to
+ignore thereafter. This code could mean that we want to ignore `2`, bind
+`second` to `4`, and then ignore `8`, `16`, and `32`; or that we want to ignore
+`2` and `4`, bind `second` to `8`, and then ignore `16` and `32`; and so forth.
+The variable name `second` doesn’t mean anything special to Rust, so we get a
+compiler error because using `..` in two places like this is ambiguous.
+
+### Extra Conditionals with Match Guards
+
+A *match guard* is an additional `if` condition, specified after the pattern in
+a `match` arm, that must also match for that arm to be chosen. Match guards are
+useful for expressing more complex ideas than a pattern alone allows.
+
+The condition can use variables created in the pattern. Listing 18-26 shows a
+`match` where the first arm has the pattern `Some(x)` and also has a match
+guard of `if x % 2 == 0` (which will be true if the number is even).
+
+```
+let num = Some(4);
+
+match num {
+ Some(x) if x % 2 == 0 => println!("The number {} is even", x),
+ Some(x) => println!("The number {} is odd", x),
+ None => (),
+}
+```
+
+Listing 18-26: Adding a match guard to a pattern
+
+This example will print `The number 4 is even`. When `num` is compared to the
+pattern in the first arm, it matches, because `Some(4)` matches `Some(x)`. Then
+the match guard checks whether the remainder of dividing `x` by 2 is equal to
+0, and because it is, the first arm is selected.
+
+If `num` had been `Some(5)` instead, the match guard in the first arm would
+have been false because the remainder of 5 divided by 2 is 1, which is not
+equal to 0. Rust would then go to the second arm, which would match because the
+second arm doesn’t have a match guard and therefore matches any `Some` variant.
+
+There is no way to express the `if x % 2 == 0` condition within a pattern, so
+the match guard gives us the ability to express this logic. The downside of
+this additional expressiveness is that the compiler doesn't try to check for
+exhaustiveness when match guard expressions are involved.
+
+In Listing 18-11, we mentioned that we could use match guards to solve our
+pattern-shadowing problem. Recall that we created a new variable inside the
+pattern in the `match` expression instead of using the variable outside the
+`match`. That new variable meant we couldn’t test against the value of the
+outer variable. Listing 18-27 shows how we can use a match guard to fix this
+problem.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let x = Some(5);
+ let y = 10;
+
+ match x {
+ Some(50) => println!("Got 50"),
+ Some(n) if n == y => println!("Matched, n = {n}"),
+ _ => println!("Default case, x = {:?}", x),
+ }
+
+ println!("at the end: x = {:?}, y = {y}", x);
+}
+```
+
+Listing 18-27: Using a match guard to test for equality with an outer variable
+
+This code will now print `Default case, x = Some(5)`. The pattern in the second
+match arm doesn’t introduce a new variable `y` that would shadow the outer `y`,
+meaning we can use the outer `y` in the match guard. Instead of specifying the
+pattern as `Some(y)`, which would have shadowed the outer `y`, we specify
+`Some(n)`. This creates a new variable `n` that doesn’t shadow anything because
+there is no `n` variable outside the `match`.
+
+The match guard `if n == y` is not a pattern and therefore doesn’t introduce
+new variables. This `y` *is* the outer `y` rather than a new shadowed `y`, and
+we can look for a value that has the same value as the outer `y` by comparing
+`n` to `y`.
+
+You can also use the *or* operator `|` in a match guard to specify multiple
+patterns; the match guard condition will apply to all the patterns. Listing
+18-28 shows the precedence when combining a pattern that uses `|` with a match
+guard. The important part of this example is that the `if y` match guard
+applies to `4`, `5`, *and* `6`, even though it might look like `if y` only
+applies to `6`.
+
+```
+let x = 4;
+let y = false;
+
+match x {
+ 4 | 5 | 6 if y => println!("yes"),
+ _ => println!("no"),
+}
+```
+
+Listing 18-28: Combining multiple patterns with a match guard
+
+The match condition states that the arm only matches if the value of `x` is
+equal to `4`, `5`, or `6` *and* if `y` is `true`. When this code runs, the
+pattern of the first arm matches because `x` is `4`, but the match guard `if y`
+is false, so the first arm is not chosen. The code moves on to the second arm,
+which does match, and this program prints `no`. The reason is that the `if`
+condition applies to the whole pattern `4 | 5 | 6`, not only to the last value
+`6`. In other words, the precedence of a match guard in relation to a pattern
+behaves like this:
+
+```
+(4 | 5 | 6) if y => ...
+```
+
+rather than this:
+
+```
+4 | 5 | (6 if y) => ...
+```
+
+After running the code, the precedence behavior is evident: if the match guard
+were applied only to the final value in the list of values specified using the
+`|` operator, the arm would have matched and the program would have printed
+`yes`.
+
+### `@` Bindings
+
+The *at* operator `@` lets us create a variable that holds a value at the same
+time as we’re testing that value for a pattern match. In Listing 18-29, we want
+to test that a `Message::Hello` `id` field is within the range `3..=7`. We also
+want to bind the value to the variable `id_variable` so we can use it in the
+code associated with the arm. We could name this variable `id`, the same as the
+field, but for this example we’ll use a different name.
+
+```
+enum Message {
+ Hello { id: i32 },
+}
+
+let msg = Message::Hello { id: 5 };
+
+match msg {
+ Message::Hello {
+ id: id_variable @ 3..=7,
+ } => println!("Found an id in range: {}", id_variable),
+ Message::Hello { id: 10..=12 } => {
+ println!("Found an id in another range")
+ }
+ Message::Hello { id } => println!("Found some other id: {}", id),
+}
+```
+
+Listing 18-29: Using `@` to bind to a value in a pattern while also testing it
+
+This example will print `Found an id in range: 5`. By specifying `id_variable
+@` before the range `3..=7`, we’re capturing whatever value matched the range
+while also testing that the value matched the range pattern.
+
+In the second arm, where we only have a range specified in the pattern, the code
+associated with the arm doesn’t have a variable that contains the actual value
+of the `id` field. The `id` field’s value could have been 10, 11, or 12, but
+the code that goes with that pattern doesn’t know which it is. The pattern code
+isn’t able to use the value from the `id` field, because we haven’t saved the
+`id` value in a variable.
+
+In the last arm, where we’ve specified a variable without a range, we do have
+the value available to use in the arm’s code in a variable named `id`. The
+reason is that we’ve used the struct field shorthand syntax. But we haven’t
+applied any test to the value in the `id` field in this arm, as we did with the
+first two arms: any value would match this pattern.
+
+Using `@` lets us test a value and save it in a variable within one pattern.
+
+## Summary
+
+Rust’s patterns are very useful in distinguishing between different kinds of
+data. When used in `match` expressions, Rust ensures your patterns cover every
+possible value, or your program won’t compile. Patterns in `let` statements and
+function parameters make those constructs more useful, enabling the
+destructuring of values into smaller parts at the same time as assigning to
+variables. We can create simple or complex patterns to suit our needs.
+
+Next, for the penultimate chapter of the book, we’ll look at some advanced
+aspects of a variety of Rust’s features.
diff --git a/src/doc/book/nostarch/chapter19.md b/src/doc/book/nostarch/chapter19.md
new file mode 100644
index 000000000..5ef3fd7a2
--- /dev/null
+++ b/src/doc/book/nostarch/chapter19.md
@@ -0,0 +1,2308 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Advanced Features
+
+By now, you’ve learned the most commonly used parts of the Rust programming
+language. Before we do one more project in Chapter 20, we’ll look at a few
+aspects of the language you might run into every once in a while, but may not
+use every day. You can use this chapter as a reference for when you encounter
+any unknowns. The features covered here are useful in very specific situations.
+Although you might not reach for them often, we want to make sure you have a
+grasp of all the features Rust has to offer.
+
+In this chapter, we’ll cover:
+
+* Unsafe Rust: how to opt out of some of Rust’s guarantees and take
+ responsibility for manually upholding those guarantees
+* Advanced traits: associated types, default type parameters, fully qualified
+ syntax, supertraits, and the newtype pattern in relation to traits
+* Advanced types: more about the newtype pattern, type aliases, the never type,
+ and dynamically sized types
+* Advanced functions and closures: function pointers and returning closures
+* Macros: ways to define code that defines more code at compile time
+
+It’s a panoply of Rust features with something for everyone! Let’s dive in!
+
+## Unsafe Rust
+
+All the code we’ve discussed so far has had Rust’s memory safety guarantees
+enforced at compile time. However, Rust has a second language hidden inside it
+that doesn’t enforce these memory safety guarantees: it’s called *unsafe Rust*
+and works just like regular Rust, but gives us extra superpowers.
+
+Unsafe Rust exists because, by nature, static analysis is conservative. When
+the compiler tries to determine whether or not code upholds the guarantees,
+it’s better for it to reject some valid programs than to accept some invalid
+programs. Although the code *might* be okay, if the Rust compiler doesn’t have
+enough information to be confident, it will reject the code. In these cases,
+you can use unsafe code to tell the compiler, “Trust me, I know what I’m
+doing.” Be warned, however, that you use unsafe Rust at your own risk: if you
+use unsafe code incorrectly, problems can occur due to memory unsafety, such as
+null pointer dereferencing.
+
+Another reason Rust has an unsafe alter ego is that the underlying computer
+hardware is inherently unsafe. If Rust didn’t let you do unsafe operations, you
+couldn’t do certain tasks. Rust needs to allow you to do low-level systems
+programming, such as directly interacting with the operating system or even
+writing your own operating system. Working with low-level systems programming
+is one of the goals of the language. Let’s explore what we can do with unsafe
+Rust and how to do it.
+
+### Unsafe Superpowers
+
+To switch to unsafe Rust, use the `unsafe` keyword and then start a new block
+that holds the unsafe code. You can take five actions in unsafe Rust that you
+can’t in safe Rust, which we call *unsafe superpowers*. Those superpowers
+include the ability to:
+
+* Dereference a raw pointer
+* Call an unsafe function or method
+* Access or modify a mutable static variable
+* Implement an unsafe trait
+* Access fields of `union`s
+
+It’s important to understand that `unsafe` doesn’t turn off the borrow checker
+or disable any other of Rust’s safety checks: if you use a reference in unsafe
+code, it will still be checked. The `unsafe` keyword only gives you access to
+these five features that are then not checked by the compiler for memory
+safety. You’ll still get some degree of safety inside of an unsafe block.
+
+In addition, `unsafe` does not mean the code inside the block is necessarily
+dangerous or that it will definitely have memory safety problems: the intent is
+that as the programmer, you’ll ensure the code inside an `unsafe` block will
+access memory in a valid way.
+
+People are fallible, and mistakes will happen, but by requiring these five
+unsafe operations to be inside blocks annotated with `unsafe` you’ll know that
+any errors related to memory safety must be within an `unsafe` block. Keep
+`unsafe` blocks small; you’ll be thankful later when you investigate memory
+bugs.
+
+To isolate unsafe code as much as possible, it’s best to enclose unsafe code
+within a safe abstraction and provide a safe API, which we’ll discuss later in
+the chapter when we examine unsafe functions and methods. Parts of the standard
+library are implemented as safe abstractions over unsafe code that has been
+audited. Wrapping unsafe code in a safe abstraction prevents uses of `unsafe`
+from leaking out into all the places that you or your users might want to use
+the functionality implemented with `unsafe` code, because using a safe
+abstraction is safe.
+
+Let’s look at each of the five unsafe superpowers in turn. We’ll also look at
+some abstractions that provide a safe interface to unsafe code.
+
+### Dereferencing a Raw Pointer
+
+In Chapter 4, in the “Dangling References” section, we mentioned that the
+compiler ensures references are always valid. Unsafe Rust has two new types
+called *raw pointers* that are similar to references. As with references, raw
+pointers can be immutable or mutable and are written as `*const T` and `*mut
+T`, respectively. The asterisk isn’t the dereference operator; it’s part of the
+type name. In the context of raw pointers, *immutable* means that the pointer
+can’t be directly assigned to after being dereferenced.
+
+Different from references and smart pointers, raw pointers:
+
+* Are allowed to ignore the borrowing rules by having both immutable and
+ mutable pointers or multiple mutable pointers to the same location
+* Aren’t guaranteed to point to valid memory
+* Are allowed to be null
+* Don’t implement any automatic cleanup
+
+By opting out of having Rust enforce these guarantees, you can give up
+guaranteed safety in exchange for greater performance or the ability to
+interface with another language or hardware where Rust’s guarantees don’t apply.
+
+Listing 19-1 shows how to create an immutable and a mutable raw pointer from
+references.
+
+```
+let mut num = 5;
+
+let r1 = &num as *const i32;
+let r2 = &mut num as *mut i32;
+```
+
+Listing 19-1: Creating raw pointers from references
+
+Notice that we don’t include the `unsafe` keyword in this code. We can create
+raw pointers in safe code; we just can’t dereference raw pointers outside an
+unsafe block, as you’ll see in a bit.
+
+We’ve created raw pointers by using `as` to cast an immutable and a mutable
+reference into their corresponding raw pointer types. Because we created them
+directly from references guaranteed to be valid, we know these particular raw
+pointers are valid, but we can’t make that assumption about just any raw
+pointer.
+
+To demonstrate this, next we’ll create a raw pointer whose validity we can’t be
+so certain of. Listing 19-2 shows how to create a raw pointer to an arbitrary
+location in memory. Trying to use arbitrary memory is undefined: there might be
+data at that address or there might not, the compiler might optimize the code
+so there is no memory access, or the program might error with a segmentation
+fault. Usually, there is no good reason to write code like this, but it is
+possible.
+
+```
+let address = 0x012345usize;
+let r = address as *const i32;
+```
+
+Listing 19-2: Creating a raw pointer to an arbitrary memory address
+
+Recall that we can create raw pointers in safe code, but we can’t *dereference*
+raw pointers and read the data being pointed to. In Listing 19-3, we use the
+dereference operator `*` on a raw pointer that requires an `unsafe` block.
+
+```
+let mut num = 5;
+
+let r1 = &num as *const i32;
+let r2 = &mut num as *mut i32;
+
+unsafe {
+ println!("r1 is: {}", *r1);
+ println!("r2 is: {}", *r2);
+}
+```
+
+Listing 19-3: Dereferencing raw pointers within an `unsafe` block
+
+Creating a pointer does no harm; it’s only when we try to access the value that
+it points at that we might end up dealing with an invalid value.
+
+Note also that in Listing 19-1 and 19-3, we created `*const i32` and `*mut i32`
+raw pointers that both pointed to the same memory location, where `num` is
+stored. If we instead tried to create an immutable and a mutable reference to
+`num`, the code would not have compiled because Rust’s ownership rules don’t
+allow a mutable reference at the same time as any immutable references. With
+raw pointers, we can create a mutable pointer and an immutable pointer to the
+same location and change data through the mutable pointer, potentially creating
+a data race. Be careful!
+
+With all of these dangers, why would you ever use raw pointers? One major use
+case is when interfacing with C code, as you’ll see in the next section,
+“Calling an Unsafe Function or Method.” Another case is when building up safe
+abstractions that the borrow checker doesn’t understand. We’ll introduce unsafe
+functions and then look at an example of a safe abstraction that uses unsafe
+code.
+
+### Calling an Unsafe Function or Method
+
+The second type of operation you can perform in an unsafe block is calling
+unsafe functions. Unsafe functions and methods look exactly like regular
+functions and methods, but they have an extra `unsafe` before the rest of the
+definition. The `unsafe` keyword in this context indicates the function has
+requirements we need to uphold when we call this function, because Rust can’t
+guarantee we’ve met these requirements. By calling an unsafe function within an
+`unsafe` block, we’re saying that we’ve read this function’s documentation and
+take responsibility for upholding the function’s contracts.
+
+Here is an unsafe function named `dangerous` that doesn’t do anything in its
+body:
+
+```
+unsafe fn dangerous() {}
+
+unsafe {
+ dangerous();
+}
+```
+
+We must call the `dangerous` function within a separate `unsafe` block. If we
+try to call `dangerous` without the `unsafe` block, we’ll get an error:
+
+```
+error[E0133]: call to unsafe function is unsafe and requires unsafe function or block
+ --> src/main.rs:4:5
+ |
+4 | dangerous();
+ | ^^^^^^^^^^^ call to unsafe function
+ |
+ = note: consult the function's documentation for information on how to avoid undefined behavior
+```
+
+With the `unsafe` block, we’re asserting to Rust that we’ve read the function’s
+documentation, we understand how to use it properly, and we’ve verified that
+we’re fulfilling the contract of the function.
+
+Bodies of unsafe functions are effectively `unsafe` blocks, so to perform other
+unsafe operations within an unsafe function, we don’t need to add another
+`unsafe` block.
+
+#### Creating a Safe Abstraction over Unsafe Code
+
+Just because a function contains unsafe code doesn’t mean we need to mark the
+entire function as unsafe. In fact, wrapping unsafe code in a safe function is
+a common abstraction. As an example, let’s study the `split_at_mut` function
+from the standard library, which requires some unsafe code. We’ll explore how
+we might implement it. This safe method is defined on mutable slices: it takes
+one slice and makes it two by splitting the slice at the index given as an
+argument. Listing 19-4 shows how to use `split_at_mut`.
+
+```
+let mut v = vec![1, 2, 3, 4, 5, 6];
+
+let r = &mut v[..];
+
+let (a, b) = r.split_at_mut(3);
+
+assert_eq!(a, &mut [1, 2, 3]);
+assert_eq!(b, &mut [4, 5, 6]);
+```
+
+Listing 19-4: Using the safe `split_at_mut` function
+
+We can’t implement this function using only safe Rust. An attempt might look
+something like Listing 19-5, which won’t compile. For simplicity, we’ll
+implement `split_at_mut` as a function rather than a method and only for slices
+of `i32` values rather than for a generic type `T`.
+
+```
+fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
+ let len = values.len();
+
+ assert!(mid <= len);
+
+ (&mut values[..mid], &mut values[mid..])
+}
+```
+
+Listing 19-5: An attempted implementation of `split_at_mut` using only safe Rust
+
+This function first gets the total length of the slice. Then it asserts that
+the index given as a parameter is within the slice by checking whether it’s
+less than or equal to the length. The assertion means that if we pass an index
+that is greater than the length to split the slice at, the function will panic
+before it attempts to use that index.
+
+Then we return two mutable slices in a tuple: one from the start of the
+original slice to the `mid` index and another from `mid` to the end of the
+slice.
+
+When we try to compile the code in Listing 19-5, we’ll get an error:
+
+```
+error[E0499]: cannot borrow `*values` as mutable more than once at a time
+ --> src/main.rs:6:31
+ |
+1 | fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
+ | - let's call the lifetime of this reference `'1`
+...
+6 | (&mut values[..mid], &mut values[mid..])
+ | --------------------------^^^^^^--------
+ | | | |
+ | | | second mutable borrow occurs here
+ | | first mutable borrow occurs here
+ | returning this value requires that `*values` is borrowed for `'1`
+```
+
+Rust’s borrow checker can’t understand that we’re borrowing different parts of
+the slice; it only knows that we’re borrowing from the same slice twice.
+Borrowing different parts of a slice is fundamentally okay because the two
+slices aren’t overlapping, but Rust isn’t smart enough to know this. When we
+know code is okay, but Rust doesn’t, it’s time to reach for unsafe code.
+
+Listing 19-6 shows how to use an `unsafe` block, a raw pointer, and some calls
+to unsafe functions to make the implementation of `split_at_mut` work.
+
+```
+use std::slice;
+
+fn split_at_mut(values: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) {
+ [1] let len = values.len();
+ [2] let ptr = values.as_mut_ptr();
+
+ [3] assert!(mid <= len);
+
+ [4] unsafe {
+ (
+ [5] slice::from_raw_parts_mut(ptr, mid),
+ [6] slice::from_raw_parts_mut(ptr.add(mid), len - mid),
+ )
+ }
+}
+```
+
+Listing 19-6: Using unsafe code in the implementation of the `split_at_mut`
+function
+
+
+Recall from “The Slice Type” section in Chapter 4 that a slice is a pointer to
+some data and the length of the slice. We use the `len` method to get the
+length of a slice [1] and the `as_mut_ptr` method to access the raw pointer of
+a slice [2]. In this case, because we have a mutable slice to `i32` values,
+`as_mut_ptr` returns a raw pointer with the type `*mut i32`, which we’ve stored
+in the variable `ptr`.
+
+We keep the assertion that the `mid` index is within the slice [3]. Then we get
+to the unsafe code [4]: the `slice::from_raw_parts_mut` function takes a raw
+pointer and a length, and it creates a slice. We use it to create a slice that
+starts from `ptr` and is `mid` items long [5]. Then we call the `add` method on
+`ptr` with `mid` as an argument to get a raw pointer that starts at `mid`, and
+we create a slice using that pointer and the remaining number of items after
+`mid` as the length [6].
+
+The function `slice::from_raw_parts_mut` is unsafe because it takes a raw
+pointer and must trust that this pointer is valid. The `add` method on raw
+pointers is also unsafe, because it must trust that the offset location is also
+a valid pointer. Therefore, we had to put an `unsafe` block around our calls to
+`slice::from_raw_parts_mut` and `add` so we could call them. By looking at
+the code and by adding the assertion that `mid` must be less than or equal to
+`len`, we can tell that all the raw pointers used within the `unsafe` block
+will be valid pointers to data within the slice. This is an acceptable and
+appropriate use of `unsafe`.
+
+Note that we don’t need to mark the resulting `split_at_mut` function as
+`unsafe`, and we can call this function from safe Rust. We’ve created a safe
+abstraction to the unsafe code with an implementation of the function that uses
+`unsafe` code in a safe way, because it creates only valid pointers from the
+data this function has access to.
+
+In contrast, the use of `slice::from_raw_parts_mut` in Listing 19-7 would
+likely crash when the slice is used. This code takes an arbitrary memory
+location and creates a slice 10,000 items long.
+
+```
+use std::slice;
+
+let address = 0x01234usize;
+let r = address as *mut i32;
+
+let values: &[i32] = unsafe { slice::from_raw_parts_mut(r, 10000) };
+```
+
+Listing 19-7: Creating a slice from an arbitrary memory location
+
+We don’t own the memory at this arbitrary location, and there is no guarantee
+that the slice this code creates contains valid `i32` values. Attempting to use
+`values` as though it’s a valid slice results in undefined behavior.
+
+#### Using `extern` Functions to Call External Code
+
+Sometimes, your Rust code might need to interact with code written in another
+language. For this, Rust has the keyword `extern` that facilitates the creation
+and use of a *Foreign Function Interface (FFI)*. An FFI is a way for a
+programming language to define functions and enable a different (foreign)
+programming language to call those functions.
+
+Listing 19-8 demonstrates how to set up an integration with the `abs` function
+from the C standard library. Functions declared within `extern` blocks are
+always unsafe to call from Rust code. The reason is that other languages don’t
+enforce Rust’s rules and guarantees, and Rust can’t check them, so
+responsibility falls on the programmer to ensure safety.
+
+Filename: src/main.rs
+
+```
+extern "C" {
+ fn abs(input: i32) -> i32;
+}
+
+fn main() {
+ unsafe {
+ println!("Absolute value of -3 according to C: {}", abs(-3));
+ }
+}
+```
+
+Listing 19-8: Declaring and calling an `extern` function defined in another
+language
+
+Within the `extern "C"` block, we list the names and signatures of external
+functions from another language we want to call. The `"C"` part defines which
+*application binary interface (ABI)* the external function uses: the ABI
+defines how to call the function at the assembly level. The `"C"` ABI is the
+most common and follows the C programming language’s ABI.
+
+<!-- Totally optional - but do we want to mention the other external types
+that Rust supports here? Also, do we want to mention there are helper
+crates for connecting to other languages, include C++?
+/JT -->
+<!-- I don't really want to get into the other external types or other
+languages; there are other resources that cover these topics better than I
+could here. /Carol -->
+
+> #### Calling Rust Functions from Other Languages
+>
+> We can also use `extern` to create an interface that allows other languages
+> to call Rust functions. Instead of an creating a whole `extern` block, we add
+> the `extern` keyword and specify the ABI to use just before the `fn` keyword
+> for the relevant function. We also need to add a `#[no_mangle]` annotation to
+> tell the Rust compiler not to mangle the name of this function. *Mangling* is
+> when a compiler changes the name we’ve given a function to a different name
+> that contains more information for other parts of the compilation process to
+> consume but is less human readable. Every programming language compiler
+> mangles names slightly differently, so for a Rust function to be nameable by
+> other languages, we must disable the Rust compiler’s name mangling.
+>
+> In the following example, we make the `call_from_c` function accessible from
+> C code, after it’s compiled to a shared library and linked from C:
+>
+> ```
+> #[no_mangle]
+> pub extern "C" fn call_from_c() {
+> println!("Just called a Rust function from C!");
+> }
+> ```
+>
+> This usage of `extern` does not require `unsafe`.
+
+### Accessing or Modifying a Mutable Static Variable
+
+In this book, we’ve not yet talked about *global variables*, which Rust does
+support but can be problematic with Rust’s ownership rules. If two threads are
+accessing the same mutable global variable, it can cause a data race.
+
+In Rust, global variables are called *static* variables. Listing 19-9 shows an
+example declaration and use of a static variable with a string slice as a
+value.
+
+Filename: src/main.rs
+
+```
+static HELLO_WORLD: &str = "Hello, world!";
+
+fn main() {
+ println!("name is: {}", HELLO_WORLD);
+}
+```
+
+Listing 19-9: Defining and using an immutable static variable
+
+Static variables are similar to constants, which we discussed in the
+“Differences Between Variables and Constants” section in Chapter 3. The names
+of static variables are in `SCREAMING_SNAKE_CASE` by convention. Static
+variables can only store references with the `'static` lifetime, which means
+the Rust compiler can figure out the lifetime and we aren’t required to
+annotate it explicitly. Accessing an immutable static variable is safe.
+
+A subtle difference between constants and immutable static variables is that
+values in a static variable have a fixed address in memory. Using the value
+will always access the same data. Constants, on the other hand, are allowed to
+duplicate their data whenever they’re used. Another difference is that static
+variables can be mutable. Accessing and modifying mutable static variables is
+*unsafe*. Listing 19-10 shows how to declare, access, and modify a mutable
+static variable named `COUNTER`.
+
+Filename: src/main.rs
+
+```
+static mut COUNTER: u32 = 0;
+
+fn add_to_count(inc: u32) {
+ unsafe {
+ COUNTER += inc;
+ }
+}
+
+fn main() {
+ add_to_count(3);
+
+ unsafe {
+ println!("COUNTER: {}", COUNTER);
+ }
+}
+```
+
+Listing 19-10: Reading from or writing to a mutable static variable is unsafe
+
+As with regular variables, we specify mutability using the `mut` keyword. Any
+code that reads or writes from `COUNTER` must be within an `unsafe` block. This
+code compiles and prints `COUNTER: 3` as we would expect because it’s single
+threaded. Having multiple threads access `COUNTER` would likely result in data
+races.
+
+With mutable data that is globally accessible, it’s difficult to ensure there
+are no data races, which is why Rust considers mutable static variables to be
+unsafe. Where possible, it’s preferable to use the concurrency techniques and
+thread-safe smart pointers we discussed in Chapter 16 so the compiler checks
+that data accessed from different threads is done safely.
+
+### Implementing an Unsafe Trait
+
+We can use `unsafe` to implement an unsafe trait. A trait is unsafe when at
+least one of its methods has some invariant that the compiler can’t verify. We
+declare that a trait is `unsafe` by adding the `unsafe` keyword before `trait`
+and marking the implementation of the trait as `unsafe` too, as shown in
+Listing 19-11.
+
+```
+unsafe trait Foo {
+ // methods go here
+}
+
+unsafe impl Foo for i32 {
+ // method implementations go here
+}
+
+fn main() {}
+```
+
+Listing 19-11: Defining and implementing an unsafe trait
+
+By using `unsafe impl`, we’re promising that we’ll uphold the invariants that
+the compiler can’t verify.
+
+As an example, recall the `Sync` and `Send` marker traits we discussed in the
+“Extensible Concurrency with the `Sync` and `Send` Traits” section in Chapter
+16: the compiler implements these traits automatically if our types are
+composed entirely of `Send` and `Sync` types. If we implement a type that
+contains a type that is not `Send` or `Sync`, such as raw pointers, and we want
+to mark that type as `Send` or `Sync`, we must use `unsafe`. Rust can’t verify
+that our type upholds the guarantees that it can be safely sent across threads
+or accessed from multiple threads; therefore, we need to do those checks
+manually and indicate as such with `unsafe`.
+
+### Accessing Fields of a Union
+
+The final action that works only with `unsafe` is accessing fields of a
+*union*. A `union` is similar to a `struct`, but only one declared field is
+used in a particular instance at one time. Unions are primarily used to
+interface with unions in C code. Accessing union fields is unsafe because Rust
+can’t guarantee the type of the data currently being stored in the union
+instance. You can learn more about unions in the Rust Reference at
+*https://doc.rust-lang.org/reference/items/unions.html*.
+
+### When to Use Unsafe Code
+
+Using `unsafe` to use one of the five superpowers just discussed isn’t wrong or
+even frowned upon, but it is trickier to get `unsafe` code correct because the
+compiler can’t help uphold memory safety. When you have a reason to use
+`unsafe` code, you can do so, and having the explicit `unsafe` annotation makes
+it easier to track down the source of problems when they occur.
+
+## Advanced Traits
+
+We first covered traits in the “Traits: Defining Shared Behavior” section of
+Chapter 10, but we didn’t discuss the more advanced details. Now that you know
+more about Rust, we can get into the nitty-gritty.
+
+### Specifying Placeholder Types in Trait Definitions with Associated Types
+
+*Associated types* connect a type placeholder with a trait such that the trait
+method definitions can use these placeholder types in their signatures. The
+implementor of a trait will specify the concrete type to be used instead of the
+placeholder type for the particular implementation. That way, we can define a
+trait that uses some types without needing to know exactly what those types are
+until the trait is implemented.
+
+We’ve described most of the advanced features in this chapter as being rarely
+needed. Associated types are somewhere in the middle: they’re used more rarely
+than features explained in the rest of the book but more commonly than many of
+the other features discussed in this chapter.
+
+One example of a trait with an associated type is the `Iterator` trait that the
+standard library provides. The associated type is named `Item` and stands in
+for the type of the values the type implementing the `Iterator` trait is
+iterating over. The definition of the `Iterator` trait is as shown in Listing
+19-12.
+
+```
+pub trait Iterator {
+ type Item;
+
+ fn next(&mut self) -> Option<Self::Item>;
+}
+```
+
+Listing 19-12: The definition of the `Iterator` trait that has an associated
+type `Item`
+
+The type `Item` is a placeholder, and the `next` method’s definition shows that
+it will return values of type `Option<Self::Item>`. Implementors of the
+`Iterator` trait will specify the concrete type for `Item`, and the `next`
+method will return an `Option` containing a value of that concrete type.
+
+Associated types might seem like a similar concept to generics, in that the
+latter allow us to define a function without specifying what types it can
+handle. To examine the difference between the two concepts, we’ll look at an
+implementation of the `Iterator` trait on a type named `Counter` that specifies
+the `Item` type is `u32`:
+
+Filename: src/lib.rs
+
+```
+impl Iterator for Counter {
+ type Item = u32;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ // --snip--
+```
+
+This syntax seems comparable to that of generics. So why not just define the
+`Iterator` trait with generics, as shown in Listing 19-13?
+
+```
+pub trait Iterator<T> {
+ fn next(&mut self) -> Option<T>;
+}
+```
+
+Listing 19-13: A hypothetical definition of the `Iterator` trait using generics
+
+The difference is that when using generics, as in Listing 19-13, we must
+annotate the types in each implementation; because we can also implement
+`Iterator<String> for Counter` or any other type, we could have multiple
+implementations of `Iterator` for `Counter`. In other words, when a trait has a
+generic parameter, it can be implemented for a type multiple times, changing
+the concrete types of the generic type parameters each time. When we use the
+`next` method on `Counter`, we would have to provide type annotations to
+indicate which implementation of `Iterator` we want to use.
+
+With associated types, we don’t need to annotate types because we can’t
+implement a trait on a type multiple times. In Listing 19-12 with the
+definition that uses associated types, we can only choose what the type of
+`Item` will be once, because there can only be one `impl Iterator for Counter`.
+We don’t have to specify that we want an iterator of `u32` values everywhere
+that we call `next` on `Counter`.
+
+Associated types also become part of the trait’s contract: implementors of the
+trait must provide a type to stand in for the associated type placeholder.
+Associated types often have a name that describes how the type will be used,
+and documenting the associated type in the API documentation is good practice.
+
+<!-- It also makes the type a part of the trait's contract. Not sure if
+too subtle of a point, but the associated type of a trait is part of the
+require things that the implementor must provide. They often also have a name
+that may clue you in as to how that required type will be used.
+/JT -->
+<!-- Great points, I've added a small paragraph here! /Carol -->
+
+### Default Generic Type Parameters and Operator Overloading
+
+When we use generic type parameters, we can specify a default concrete type for
+the generic type. This eliminates the need for implementors of the trait to
+specify a concrete type if the default type works. You specify a default type
+when declaring a generic type with the `<PlaceholderType=ConcreteType>` syntax.
+
+A great example of a situation where this technique is useful is with *operator
+overloading*, in which you customize the behavior of an operator (such as `+`)
+in particular situations.
+
+Rust doesn’t allow you to create your own operators or overload arbitrary
+operators. But you can overload the operations and corresponding traits listed
+in `std::ops` by implementing the traits associated with the operator. For
+example, in Listing 19-14 we overload the `+` operator to add two `Point`
+instances together. We do this by implementing the `Add` trait on a `Point`
+struct:
+
+Filename: src/main.rs
+
+```
+use std::ops::Add;
+
+#[derive(Debug, Copy, Clone, PartialEq)]
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+impl Add for Point {
+ type Output = Point;
+
+ fn add(self, other: Point) -> Point {
+ Point {
+ x: self.x + other.x,
+ y: self.y + other.y,
+ }
+ }
+}
+
+fn main() {
+ assert_eq!(
+ Point { x: 1, y: 0 } + Point { x: 2, y: 3 },
+ Point { x: 3, y: 3 }
+ );
+}
+```
+
+Listing 19-14: Implementing the `Add` trait to overload the `+` operator for
+`Point` instances
+
+The `add` method adds the `x` values of two `Point` instances and the `y`
+values of two `Point` instances to create a new `Point`. The `Add` trait has an
+associated type named `Output` that determines the type returned from the `add`
+method.
+
+The default generic type in this code is within the `Add` trait. Here is its
+definition:
+
+```
+trait Add<Rhs=Self> {
+ type Output;
+
+ fn add(self, rhs: Rhs) -> Self::Output;
+}
+```
+
+This code should look generally familiar: a trait with one method and an
+associated type. The new part is `Rhs=Self`: this syntax is called *default
+type parameters*. The `Rhs` generic type parameter (short for “right hand
+side”) defines the type of the `rhs` parameter in the `add` method. If we don’t
+specify a concrete type for `Rhs` when we implement the `Add` trait, the type
+of `Rhs` will default to `Self`, which will be the type we’re implementing
+`Add` on.
+
+When we implemented `Add` for `Point`, we used the default for `Rhs` because we
+wanted to add two `Point` instances. Let’s look at an example of implementing
+the `Add` trait where we want to customize the `Rhs` type rather than using the
+default.
+
+We have two structs, `Millimeters` and `Meters`, holding values in different
+units. This thin wrapping of an existing type in another struct is known as the
+*newtype pattern*, which we describe in more detail in the “Using the Newtype
+Pattern to Implement External Traits on External Types” section. We want to add
+values in millimeters to values in meters and have the implementation of `Add`
+do the conversion correctly. We can implement `Add` for `Millimeters` with
+`Meters` as the `Rhs`, as shown in Listing 19-15.
+
+Filename: src/lib.rs
+
+```
+use std::ops::Add;
+
+struct Millimeters(u32);
+struct Meters(u32);
+
+impl Add<Meters> for Millimeters {
+ type Output = Millimeters;
+
+ fn add(self, other: Meters) -> Millimeters {
+ Millimeters(self.0 + (other.0 * 1000))
+ }
+}
+```
+
+Listing 19-15: Implementing the `Add` trait on `Millimeters` to add
+`Millimeters` to `Meters`
+
+To add `Millimeters` and `Meters`, we specify `impl Add<Meters>` to set the
+value of the `Rhs` type parameter instead of using the default of `Self`.
+
+You’ll use default type parameters in two main ways:
+
+* To extend a type without breaking existing code
+* To allow customization in specific cases most users won’t need
+
+The standard library’s `Add` trait is an example of the second purpose:
+usually, you’ll add two like types, but the `Add` trait provides the ability to
+customize beyond that. Using a default type parameter in the `Add` trait
+definition means you don’t have to specify the extra parameter most of the
+time. In other words, a bit of implementation boilerplate isn’t needed, making
+it easier to use the trait.
+
+The first purpose is similar to the second but in reverse: if you want to add a
+type parameter to an existing trait, you can give it a default to allow
+extension of the functionality of the trait without breaking the existing
+implementation code.
+
+### Fully Qualified Syntax for Disambiguation: Calling Methods with the Same Name
+
+Nothing in Rust prevents a trait from having a method with the same name as
+another trait’s method, nor does Rust prevent you from implementing both traits
+on one type. It’s also possible to implement a method directly on the type with
+the same name as methods from traits.
+
+When calling methods with the same name, you’ll need to tell Rust which one you
+want to use. Consider the code in Listing 19-16 where we’ve defined two traits,
+`Pilot` and `Wizard`, that both have a method called `fly`. We then implement
+both traits on a type `Human` that already has a method named `fly` implemented
+on it. Each `fly` method does something different.
+
+Filename: src/main.rs
+
+```
+trait Pilot {
+ fn fly(&self);
+}
+
+trait Wizard {
+ fn fly(&self);
+}
+
+struct Human;
+
+impl Pilot for Human {
+ fn fly(&self) {
+ println!("This is your captain speaking.");
+ }
+}
+
+impl Wizard for Human {
+ fn fly(&self) {
+ println!("Up!");
+ }
+}
+
+impl Human {
+ fn fly(&self) {
+ println!("*waving arms furiously*");
+ }
+}
+```
+
+Listing 19-16: Two traits are defined to have a `fly` method and are
+implemented on the `Human` type, and a `fly` method is implemented on `Human`
+directly
+
+When we call `fly` on an instance of `Human`, the compiler defaults to calling
+the method that is directly implemented on the type, as shown in Listing 19-17.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let person = Human;
+ person.fly();
+}
+```
+
+Listing 19-17: Calling `fly` on an instance of `Human`
+
+Running this code will print `*waving arms furiously*`, showing that Rust
+called the `fly` method implemented on `Human` directly.
+
+To call the `fly` methods from either the `Pilot` trait or the `Wizard` trait,
+we need to use more explicit syntax to specify which `fly` method we mean.
+Listing 19-18 demonstrates this syntax.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let person = Human;
+ Pilot::fly(&person);
+ Wizard::fly(&person);
+ person.fly();
+}
+```
+
+Listing 19-18: Specifying which trait’s `fly` method we want to call
+
+Specifying the trait name before the method name clarifies to Rust which
+implementation of `fly` we want to call. We could also write
+`Human::fly(&person)`, which is equivalent to the `person.fly()` that we used
+in Listing 19-18, but this is a bit longer to write if we don’t need to
+disambiguate.
+
+Running this code prints the following:
+
+```
+$ cargo run
+ Compiling traits-example v0.1.0 (file:///projects/traits-example)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.46s
+ Running `target/debug/traits-example`
+This is your captain speaking.
+Up!
+*waving arms furiously*
+```
+
+Because the `fly` method takes a `self` parameter, if we had two *types* that
+both implement one *trait*, Rust could figure out which implementation of a
+trait to use based on the type of `self`.
+
+However, associated functions that are not methods don’t have a `self`
+parameter. When there are multiple types or traits that define non-method
+functions with the same function name, Rust doesn't always know which type you
+mean unless you use *fully qualified syntax*. For example, in Listing 19-19 we
+create a trait for an animal shelter that wants to name all baby dogs *Spot*.
+We make an `Animal` trait with an associated non-method function `baby_name`.
+The `Animal` trait is implemented for the struct `Dog`, on which we also
+provide an associated non-method function `baby_name` directly.
+
+Filename: src/main.rs
+
+```
+trait Animal {
+ fn baby_name() -> String;
+}
+
+struct Dog;
+
+impl Dog {
+ fn baby_name() -> String {
+ String::from("Spot")
+ }
+}
+
+impl Animal for Dog {
+ fn baby_name() -> String {
+ String::from("puppy")
+ }
+}
+
+fn main() {
+ println!("A baby dog is called a {}", Dog::baby_name());
+}
+```
+
+Listing 19-19: A trait with an associated function and a type with an
+associated function of the same name that also implements the trait
+
+We implement the code for naming all puppies Spot in the `baby_name` associated
+function that is defined on `Dog`. The `Dog` type also implements the trait
+`Animal`, which describes characteristics that all animals have. Baby dogs are
+called puppies, and that is expressed in the implementation of the `Animal`
+trait on `Dog` in the `baby_name` function associated with the `Animal` trait.
+
+In `main`, we call the `Dog::baby_name` function, which calls the associated
+function defined on `Dog` directly. This code prints the following:
+
+```
+A baby dog is called a Spot
+```
+
+This output isn’t what we wanted. We want to call the `baby_name` function that
+is part of the `Animal` trait that we implemented on `Dog` so the code prints
+`A baby dog is called a puppy`. The technique of specifying the trait name that
+we used in Listing 19-18 doesn’t help here; if we change `main` to the code in
+Listing 19-20, we’ll get a compilation error.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ println!("A baby dog is called a {}", Animal::baby_name());
+}
+```
+
+Listing 19-20: Attempting to call the `baby_name` function from the `Animal`
+trait, but Rust doesn’t know which implementation to use
+
+Because `Animal::baby_name` doesn’t have a `self` parameter, and there could be
+other types that implement the `Animal` trait, Rust can’t figure out which
+implementation of `Animal::baby_name` we want. We’ll get this compiler error:
+
+```
+error[E0283]: type annotations needed
+ --> src/main.rs:20:43
+ |
+20 | println!("A baby dog is called a {}", Animal::baby_name());
+ | ^^^^^^^^^^^^^^^^^ cannot infer type
+ |
+ = note: cannot satisfy `_: Animal`
+```
+
+To disambiguate and tell Rust that we want to use the implementation of
+`Animal` for `Dog` as opposed to the implementation of `Animal` for some other
+type, we need to use fully qualified syntax. Listing 19-21 demonstrates how to
+use fully qualified syntax.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ println!("A baby dog is called a {}", <Dog as Animal>::baby_name());
+}
+```
+
+Listing 19-21: Using fully qualified syntax to specify that we want to call the
+`baby_name` function from the `Animal` trait as implemented on `Dog`
+
+We’re providing Rust with a type annotation within the angle brackets, which
+indicates we want to call the `baby_name` method from the `Animal` trait as
+implemented on `Dog` by saying that we want to treat the `Dog` type as an
+`Animal` for this function call. This code will now print what we want:
+
+```
+A baby dog is called a puppy
+```
+
+In general, fully qualified syntax is defined as follows:
+
+```
+<Type as Trait>::function(receiver_if_method, next_arg, ...);
+```
+
+For associated functions that aren’t methods, there would not be a `receiver`:
+there would only be the list of other arguments. You could use fully qualified
+syntax everywhere that you call functions or methods. However, you’re allowed
+to omit any part of this syntax that Rust can figure out from other information
+in the program. You only need to use this more verbose syntax in cases where
+there are multiple implementations that use the same name and Rust needs help
+to identify which implementation you want to call.
+
+### Using Supertraits to Require One Trait’s Functionality Within Another Trait
+
+Sometimes, you might write a trait definition that depends on another trait:
+for a type to implement the first trait, you want to require that type to also
+implement the second trait. You would do this so that your trait definition can
+make use of the associated items of the second trait. The trait your trait
+definition is relying on is called a *supertrait* of your trait.
+
+For example, let’s say we want to make an `OutlinePrint` trait with an
+`outline_print` method that will print a given value formatted so that it's
+framed in asterisks. That is, given a `Point` struct that implements the
+standard library trait `Display` to result in `(x, y)`, when we
+call `outline_print` on a `Point` instance that has `1` for `x` and `3` for
+`y`, it should print the following:
+
+```
+**********
+* *
+* (1, 3) *
+* *
+**********
+```
+
+In the implementation of the `outline_print` method, we want to use the
+`Display` trait’s functionality. Therefore, we need to specify that the
+`OutlinePrint` trait will work only for types that also implement `Display` and
+provide the functionality that `OutlinePrint` needs. We can do that in the
+trait definition by specifying `OutlinePrint: Display`. This technique is
+similar to adding a trait bound to the trait. Listing 19-22 shows an
+implementation of the `OutlinePrint` trait.
+
+Filename: src/main.rs
+
+```
+use std::fmt;
+
+trait OutlinePrint: fmt::Display {
+ fn outline_print(&self) {
+ let output = self.to_string();
+ let len = output.len();
+ println!("{}", "*".repeat(len + 4));
+ println!("*{}*", " ".repeat(len + 2));
+ println!("* {} *", output);
+ println!("*{}*", " ".repeat(len + 2));
+ println!("{}", "*".repeat(len + 4));
+ }
+}
+```
+
+Listing 19-22: Implementing the `OutlinePrint` trait that requires the
+functionality from `Display`
+
+Because we’ve specified that `OutlinePrint` requires the `Display` trait, we
+can use the `to_string` function that is automatically implemented for any type
+that implements `Display`. If we tried to use `to_string` without adding a
+colon and specifying the `Display` trait after the trait name, we’d get an
+error saying that no method named `to_string` was found for the type `&Self` in
+the current scope.
+
+Let’s see what happens when we try to implement `OutlinePrint` on a type that
+doesn’t implement `Display`, such as the `Point` struct:
+
+Filename: src/main.rs
+
+```
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+impl OutlinePrint for Point {}
+```
+
+We get an error saying that `Display` is required but not implemented:
+
+```
+error[E0277]: `Point` doesn't implement `std::fmt::Display`
+ --> src/main.rs:20:6
+ |
+20 | impl OutlinePrint for Point {}
+ | ^^^^^^^^^^^^ `Point` cannot be formatted with the default formatter
+ |
+ = help: the trait `std::fmt::Display` is not implemented for `Point`
+ = note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead
+note: required by a bound in `OutlinePrint`
+ --> src/main.rs:3:21
+ |
+3 | trait OutlinePrint: fmt::Display {
+ | ^^^^^^^^^^^^ required by this bound in `OutlinePrint`
+```
+
+To fix this, we implement `Display` on `Point` and satisfy the constraint that
+`OutlinePrint` requires, like so:
+
+Filename: src/main.rs
+
+```
+use std::fmt;
+
+impl fmt::Display for Point {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "({}, {})", self.x, self.y)
+ }
+}
+```
+
+Then implementing the `OutlinePrint` trait on `Point` will compile
+successfully, and we can call `outline_print` on a `Point` instance to display
+it within an outline of asterisks.
+
+### Using the Newtype Pattern to Implement External Traits on External Types
+
+In Chapter 10 in the “Implementing a Trait on a Type” section, we mentioned the
+orphan rule that states we’re only allowed to implement a trait on a type if
+either the trait or the type are local to our crate.
+It’s possible to get
+around this restriction using the *newtype pattern*, which involves creating a
+new type in a tuple struct. (We covered tuple structs in the “Using Tuple
+Structs without Named Fields to Create Different Types” section of Chapter 5.)
+The tuple struct will have one field and be a thin wrapper around the type we
+want to implement a trait for. Then the wrapper type is local to our crate, and
+we can implement the trait on the wrapper. *Newtype* is a term that originates
+from the Haskell programming language. There is no runtime performance penalty
+for using this pattern, and the wrapper type is elided at compile time.
+
+As an example, let’s say we want to implement `Display` on `Vec<T>`, which the
+orphan rule prevents us from doing directly because the `Display` trait and the
+`Vec<T>` type are defined outside our crate. We can make a `Wrapper` struct
+that holds an instance of `Vec<T>`; then we can implement `Display` on
+`Wrapper` and use the `Vec<T>` value, as shown in Listing 19-23.
+
+Filename: src/main.rs
+
+```
+use std::fmt;
+
+struct Wrapper(Vec<String>);
+
+impl fmt::Display for Wrapper {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "[{}]", self.0.join(", "))
+ }
+}
+
+fn main() {
+ let w = Wrapper(vec![String::from("hello"), String::from("world")]);
+ println!("w = {}", w);
+}
+```
+
+Listing 19-23: Creating a `Wrapper` type around `Vec<String>` to implement
+`Display`
+
+The implementation of `Display` uses `self.0` to access the inner `Vec<T>`,
+because `Wrapper` is a tuple struct and `Vec<T>` is the item at index 0 in the
+tuple. Then we can use the functionality of the `Display` type on `Wrapper`.
+
+The downside of using this technique is that `Wrapper` is a new type, so it
+doesn’t have the methods of the value it’s holding. We would have to implement
+all the methods of `Vec<T>` directly on `Wrapper` such that the methods
+delegate to `self.0`, which would allow us to treat `Wrapper` exactly like a
+`Vec<T>`. If we wanted the new type to have every method the inner type has,
+implementing the `Deref` trait (discussed in Chapter 15 in the “Treating Smart
+Pointers Like Regular References with the `Deref` Trait” section) on the
+`Wrapper` to return the inner type would be a solution. If we don’t want the
+`Wrapper` type to have all the methods of the inner type—for example, to
+restrict the `Wrapper` type’s behavior—we would have to implement just the
+methods we do want manually.
+
+This newtype pattern is also useful even when traits are not involved. Let’s
+switch focus and look at some advanced ways to interact with Rust’s type system.
+
+## Advanced Types
+
+The Rust type system has some features that we’ve so far mentioned but haven’t
+yet discussed. We’ll start by discussing newtypes in general as we examine why
+newtypes are useful as types. Then we’ll move on to type aliases, a feature
+similar to newtypes but with slightly different semantics. We’ll also discuss
+the `!` type and dynamically sized types.
+
+### Using the Newtype Pattern for Type Safety and Abstraction
+
+> Note: This section assumes you’ve read the earlier section “Using the
+> Newtype Pattern to Implement External Traits on External
+> Types.”
+
+The newtype pattern is also useful for tasks beyond those we’ve discussed so
+far, including statically enforcing that values are never confused and
+indicating the units of a value. You saw an example of using newtypes to
+indicate units in Listing 19-15: recall that the `Millimeters` and `Meters`
+structs wrapped `u32` values in a newtype. If we wrote a function with a
+parameter of type `Millimeters`, we couldn’t compile a program that
+accidentally tried to call that function with a value of type `Meters` or a
+plain `u32`.
+
+We can also use the newtype pattern to abstract away some implementation
+details of a type: the new type can expose a public API that is different from
+the API of the private inner type.
+
+Newtypes can also hide internal implementation. For example, we could provide a
+`People` type to wrap a `HashMap<i32, String>` that stores a person’s ID
+associated with their name. Code using `People` would only interact with the
+public API we provide, such as a method to add a name string to the `People`
+collection; that code wouldn’t need to know that we assign an `i32` ID to names
+internally. The newtype pattern is a lightweight way to achieve encapsulation
+to hide implementation details, which we discussed in the “Encapsulation that
+Hides Implementation Details” section of Chapter 17.
+
+### Creating Type Synonyms with Type Aliases
+
+Rust provides the ability to declare a *type alias* to give an existing type
+another name. For this we use the `type` keyword. For example, we can create
+the alias `Kilometers` to `i32` like so:
+
+```
+type Kilometers = i32;
+```
+
+Now, the alias `Kilometers` is a *synonym* for `i32`; unlike the `Millimeters`
+and `Meters` types we created in Listing 19-15, `Kilometers` is not a separate,
+new type. Values that have the type `Kilometers` will be treated the same as
+values of type `i32`:
+
+```
+type Kilometers = i32;
+
+let x: i32 = 5;
+let y: Kilometers = 5;
+
+println!("x + y = {}", x + y);
+```
+
+Because `Kilometers` and `i32` are the same type, we can add values of both
+types and we can pass `Kilometers` values to functions that take `i32`
+parameters. However, using this method, we don’t get the type checking benefits
+that we get from the newtype pattern discussed earlier. In other words, if we
+mix up `Kilometers` and `i32` values somewhere, the compiler will not give us
+an error.
+
+<!-- Having a few battle wounds trying to debug using this pattern, it's
+definitely good to warn people that if they use type aliases to the same base
+type in their program (like multiple aliases to `usize`), they're asking for
+trouble as the typechecker will not help them if they mix up their types.
+/JT -->
+<!-- I'm not sure if JT was saying this paragraph was good or it could use more
+emphasis? I've added a sentence to the end of the paragraph above in case it
+was the latter /Carol -->
+
+The main use case for type synonyms is to reduce repetition. For example, we
+might have a lengthy type like this:
+
+```
+Box<dyn Fn() + Send + 'static>
+```
+
+Writing this lengthy type in function signatures and as type annotations all
+over the code can be tiresome and error prone. Imagine having a project full of
+code like that in Listing 19-24.
+
+```
+let f: Box<dyn Fn() + Send + 'static> = Box::new(|| println!("hi"));
+
+fn takes_long_type(f: Box<dyn Fn() + Send + 'static>) {
+ // --snip--
+}
+
+fn returns_long_type() -> Box<dyn Fn() + Send + 'static> {
+ // --snip--
+}
+```
+
+Listing 19-24: Using a long type in many places
+
+A type alias makes this code more manageable by reducing the repetition. In
+Listing 19-25, we’ve introduced an alias named `Thunk` for the verbose type and
+can replace all uses of the type with the shorter alias `Thunk`.
+
+```
+type Thunk = Box<dyn Fn() + Send + 'static>;
+
+let f: Thunk = Box::new(|| println!("hi"));
+
+fn takes_long_type(f: Thunk) {
+ // --snip--
+}
+
+fn returns_long_type() -> Thunk {
+ // --snip--
+}
+```
+
+Listing 19-25: Introducing a type alias `Thunk` to reduce repetition
+
+This code is much easier to read and write! Choosing a meaningful name for a
+type alias can help communicate your intent as well (*thunk* is a word for code
+to be evaluated at a later time, so it’s an appropriate name for a closure that
+gets stored).
+
+Type aliases are also commonly used with the `Result<T, E>` type for reducing
+repetition. Consider the `std::io` module in the standard library. I/O
+operations often return a `Result<T, E>` to handle situations when operations
+fail to work. This library has a `std::io::Error` struct that represents all
+possible I/O errors. Many of the functions in `std::io` will be returning
+`Result<T, E>` where the `E` is `std::io::Error`, such as these functions in
+the `Write` trait:
+
+```
+use std::fmt;
+use std::io::Error;
+
+pub trait Write {
+ fn write(&mut self, buf: &[u8]) -> Result<usize, Error>;
+ fn flush(&mut self) -> Result<(), Error>;
+
+ fn write_all(&mut self, buf: &[u8]) -> Result<(), Error>;
+ fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<(), Error>;
+}
+```
+
+The `Result<..., Error>` is repeated a lot. As such, `std::io` has this type
+alias declaration:
+
+```
+type Result<T> = std::result::Result<T, std::io::Error>;
+```
+
+Because this declaration is in the `std::io` module, we can use the fully
+qualified alias `std::io::Result<T>`; that is, a `Result<T, E>` with the `E`
+filled in as `std::io::Error`. The `Write` trait function signatures end up
+looking like this:
+
+```
+pub trait Write {
+ fn write(&mut self, buf: &[u8]) -> Result<usize>;
+ fn flush(&mut self) -> Result<()>;
+
+ fn write_all(&mut self, buf: &[u8]) -> Result<()>;
+ fn write_fmt(&mut self, fmt: fmt::Arguments) -> Result<()>;
+}
+```
+
+The type alias helps in two ways: it makes code easier to write *and* it gives
+us a consistent interface across all of `std::io`. Because it’s an alias, it’s
+just another `Result<T, E>`, which means we can use any methods that work on
+`Result<T, E>` with it, as well as special syntax like the `?` operator.
+
+### The Never Type that Never Returns
+
+Rust has a special type named `!` that’s known in type theory lingo as the
+*empty type* because it has no values. We prefer to call it the *never type*
+because it stands in the place of the return type when a function will never
+return. Here is an example:
+
+```
+fn bar() -> ! {
+ // --snip--
+}
+```
+
+This code is read as “the function `bar` returns never.” Functions that return
+never are called *diverging functions*. We can’t create values of the type `!`
+so `bar` can never possibly return.
+
+But what use is a type you can never create values for? Recall the code from
+Listing 2-5, part of the number guessing game; we’ve reproduced a bit of it
+here in Listing 19-26.
+
+```
+let guess: u32 = match guess.trim().parse() {
+ Ok(num) => num,
+ Err(_) => continue,
+};
+```
+
+Listing 19-26: A `match` with an arm that ends in `continue`
+
+At the time, we skipped over some details in this code. In Chapter 6 in “The
+`match` Control Flow Operator” section, we discussed that `match` arms must all
+return the same type. So, for example, the following code doesn’t work:
+
+```
+let guess = match guess.trim().parse() {
+ Ok(_) => 5,
+ Err(_) => "hello",
+};
+```
+
+The type of `guess` in this code would have to be an integer *and* a string,
+and Rust requires that `guess` have only one type. So what does `continue`
+return? How were we allowed to return a `u32` from one arm and have another arm
+that ends with `continue` in Listing 19-26?
+
+As you might have guessed, `continue` has a `!` value. That is, when Rust
+computes the type of `guess`, it looks at both match arms, the former with a
+value of `u32` and the latter with a `!` value. Because `!` can never have a
+value, Rust decides that the type of `guess` is `u32`.
+
+The formal way of describing this behavior is that expressions of type `!` can
+be coerced into any other type. We’re allowed to end this `match` arm with
+`continue` because `continue` doesn’t return a value; instead, it moves control
+back to the top of the loop, so in the `Err` case, we never assign a value to
+`guess`.
+
+The never type is useful with the `panic!` macro as well. Recall the `unwrap`
+function that we call on `Option<T>` values to produce a value or panic with
+this definition:
+
+```
+impl<T> Option<T> {
+ pub fn unwrap(self) -> T {
+ match self {
+ Some(val) => val,
+ None => panic!("called `Option::unwrap()` on a `None` value"),
+ }
+ }
+}
+```
+
+In this code, the same thing happens as in the `match` in Listing 19-26: Rust
+sees that `val` has the type `T` and `panic!` has the type `!`, so the result
+of the overall `match` expression is `T`. This code works because `panic!`
+doesn’t produce a value; it ends the program. In the `None` case, we won’t be
+returning a value from `unwrap`, so this code is valid.
+
+One final expression that has the type `!` is a `loop`:
+
+```
+print!("forever ");
+
+loop {
+ print!("and ever ");
+}
+```
+
+Here, the loop never ends, so `!` is the value of the expression. However, this
+wouldn’t be true if we included a `break`, because the loop would terminate
+when it got to the `break`.
+
+### Dynamically Sized Types and the `Sized` Trait
+
+Rust needs to know certain details about its types, such as how much space to
+allocate for a value of a particular type. This leaves one corner of its type
+system a little confusing at first: the concept of *dynamically sized types*.
+Sometimes referred to as *DSTs* or *unsized types*, these types let us write
+code using values whose size we can know only at runtime.
+
+Let’s dig into the details of a dynamically sized type called `str`, which
+we’ve been using throughout the book. That’s right, not `&str`, but `str` on
+its own, is a DST. We can’t know how long the string is until runtime, meaning
+we can’t create a variable of type `str`, nor can we take an argument of type
+`str`. Consider the following code, which does not work:
+
+```
+let s1: str = "Hello there!";
+let s2: str = "How's it going?";
+```
+
+Rust needs to know how much memory to allocate for any value of a particular
+type, and all values of a type must use the same amount of memory. If Rust
+allowed us to write this code, these two `str` values would need to take up the
+same amount of space. But they have different lengths: `s1` needs 12 bytes of
+storage and `s2` needs 15. This is why it’s not possible to create a variable
+holding a dynamically sized type.
+
+So what do we do? In this case, you already know the answer: we make the types
+of `s1` and `s2` a `&str` rather than a `str`. Recall from the “String Slices”
+section of Chapter 4 that the slice data structure just stores the starting
+position and the length of the slice. So although a `&T` is a single value that
+stores the memory address of where the `T` is located, a `&str` is *two*
+values: the address of the `str` and its length. As such, we can know the size
+of a `&str` value at compile time: it’s twice the length of a `usize`. That is,
+we always know the size of a `&str`, no matter how long the string it refers to
+is. In general, this is the way in which dynamically sized types are used in
+Rust: they have an extra bit of metadata that stores the size of the dynamic
+information. The golden rule of dynamically sized types is that we must always
+put values of dynamically sized types behind a pointer of some kind.
+
+We can combine `str` with all kinds of pointers: for example, `Box<str>` or
+`Rc<str>`. In fact, you’ve seen this before but with a different dynamically
+sized type: traits. Every trait is a dynamically sized type we can refer to by
+using the name of the trait. In Chapter 17 in the “Using Trait Objects That
+Allow for Values of Different Types” section, we mentioned that to use traits
+as trait objects, we must put them behind a pointer, such as `&dyn Trait` or
+`Box<dyn Trait>` (`Rc<dyn Trait>` would work too).
+
+To work with DSTs, Rust provides the `Sized` trait to determine whether or not
+a type’s size is known at compile time. This trait is automatically implemented
+for everything whose size is known at compile time. In addition, Rust
+implicitly adds a bound on `Sized` to every generic function. That is, a
+generic function definition like this:
+
+```
+fn generic<T>(t: T) {
+ // --snip--
+}
+```
+
+is actually treated as though we had written this:
+
+```
+fn generic<T: Sized>(t: T) {
+ // --snip--
+}
+```
+
+By default, generic functions will work only on types that have a known size at
+compile time. However, you can use the following special syntax to relax this
+restriction:
+
+```
+fn generic<T: ?Sized>(t: &T) {
+ // --snip--
+}
+```
+
+A trait bound on `?Sized` means “`T` may or may not be `Sized`” and this
+notation overrides the default that generic types must have a known size at
+compile time. The `?Trait` syntax with this meaning is only available for
+`Sized`, not any other traits.
+
+Also note that we switched the type of the `t` parameter from `T` to `&T`.
+Because the type might not be `Sized`, we need to use it behind some kind of
+pointer. In this case, we’ve chosen a reference.
+
+Next, we’ll talk about functions and closures!
+
+## Advanced Functions and Closures
+
+This section explores some advanced features related to functions and closures,
+including function pointers and returning closures.
+
+### Function Pointers
+
+We’ve talked about how to pass closures to functions; you can also pass regular
+functions to functions! This technique is useful when you want to pass a
+function you’ve already defined rather than defining a new closure. Functions
+coerce to the type `fn` (with a lowercase f), not to be confused with the `Fn`
+closure trait. The `fn` type is called a *function pointer*. Passing functions
+with function pointers will allow you to use functions as arguments to other
+functions.
+
+The syntax for specifying that a parameter is a function pointer is similar to
+that of closures, as shown in Listing 19-27, where we’ve defined a function
+`add_one` that adds one to its parameter. The function `do_twice` takes two
+parameters: a function pointer to any function that takes an `i32` parameter
+and returns an `i32`, and one `i32 value`. The `do_twice` function calls the
+function `f` twice, passing it the `arg` value, then adds the two function call
+results together. The `main` function calls `do_twice` with the arguments
+`add_one` and `5`.
+
+Filename: src/main.rs
+
+```
+fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
+ f(arg) + f(arg)
+}
+
+fn main() {
+ let answer = do_twice(add_one, 5);
+
+ println!("The answer is: {}", answer);
+}
+```
+
+Listing 19-27: Using the `fn` type to accept a function pointer as an argument
+
+This code prints `The answer is: 12`. We specify that the parameter `f` in
+`do_twice` is an `fn` that takes one parameter of type `i32` and returns an
+`i32`. We can then call `f` in the body of `do_twice`. In `main`, we can pass
+the function name `add_one` as the first argument to `do_twice`.
+
+Unlike closures, `fn` is a type rather than a trait, so we specify `fn` as the
+parameter type directly rather than declaring a generic type parameter with one
+of the `Fn` traits as a trait bound.
+
+Function pointers implement all three of the closure traits (`Fn`, `FnMut`, and
+`FnOnce`), meaning you can always pass a function pointer as an argument for a
+function that expects a closure. It’s best to write functions using a generic
+type and one of the closure traits so your functions can accept either
+functions or closures.
+
+That said, one example of where you would want to only accept `fn` and not
+closures is when interfacing with external code that doesn’t have closures: C
+functions can accept functions as arguments, but C doesn’t have closures.
+
+As an example of where you could use either a closure defined inline or a named
+function, let’s look at a use of the `map` method provided by the `Iterator`
+trait in the standard library. To use the `map` function to turn a
+vector of numbers into a vector of strings, we could use a closure, like this:
+
+```
+let list_of_numbers = vec![1, 2, 3];
+let list_of_strings: Vec<String> =
+ list_of_numbers.iter().map(|i| i.to_string()).collect();
+```
+
+Or we could name a function as the argument to `map` instead of the closure,
+like this:
+
+```
+let list_of_numbers = vec![1, 2, 3];
+let list_of_strings: Vec<String> =
+ list_of_numbers.iter().map(ToString::to_string).collect();
+```
+
+Note that we must use the fully qualified syntax that we talked about earlier
+in the “Advanced Traits” section because there are multiple functions available
+named `to_string`.
+
+Here, we’re using the `to_string` function defined in the
+`ToString` trait, which the standard library has implemented for any type that
+implements `Display`.
+
+Recall from the “Enum values” section of Chapter 6 that the name of each enum
+variant that we define also becomes an initializer function. We can use these
+initializer functions as function pointers that implement the closure traits,
+which means we can specify the initializer functions as arguments for methods
+that take closures, like so:
+
+```
+enum Status {
+ Value(u32),
+ Stop,
+}
+
+let list_of_statuses: Vec<Status> = (0u32..20).map(Status::Value).collect();
+```
+
+Here we create `Status::Value` instances using each `u32` value in the range
+that `map` is called on by using the initializer function of `Status::Value`.
+Some people prefer this style, and some people prefer to use closures. They
+compile to the same code, so use whichever style is clearer to you.
+
+### Returning Closures
+
+Closures are represented by traits, which means you can’t return closures
+directly. In most cases where you might want to return a trait, you can instead
+use the concrete type that implements the trait as the return value of the
+function. However, you can’t do that with closures because they don’t have a
+concrete type that is returnable; you’re not allowed to use the function
+pointer `fn` as a return type, for example.
+
+The following code tries to return a closure directly, but it won’t compile:
+
+```
+fn returns_closure() -> dyn Fn(i32) -> i32 {
+ |x| x + 1
+}
+```
+
+The compiler error is as follows:
+
+```
+error[E0746]: return type cannot have an unboxed trait object
+ --> src/lib.rs:1:25
+ |
+1 | fn returns_closure() -> dyn Fn(i32) -> i32 {
+ | ^^^^^^^^^^^^^^^^^^ doesn't have a size known at compile-time
+ |
+ = note: for information on `impl Trait`, see <https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits>
+help: use `impl Fn(i32) -> i32` as the return type, as all return paths are of type `[closure@src/lib.rs:2:5: 2:14]`, which implements `Fn(i32) -> i32`
+ |
+1 | fn returns_closure() -> impl Fn(i32) -> i32 {
+ | ~~~~~~~~~~~~~~~~~~~
+```
+
+The error references the `Sized` trait again! Rust doesn’t know how much space
+it will need to store the closure. We saw a solution to this problem earlier.
+We can use a trait object:
+
+```
+fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
+ Box::new(|x| x + 1)
+}
+```
+
+This code will compile just fine. For more about trait objects, refer to the
+section “Using Trait Objects That Allow for Values of Different Types” in
+Chapter 17.
+
+Next, let’s look at macros!
+
+## Macros
+
+We’ve used macros like `println!` throughout this book, but we haven’t fully
+explored what a macro is and how it works. The term *macro* refers to a family
+of features in Rust: *declarative* macros with `macro_rules!` and three kinds
+of *procedural* macros:
+
+* Custom `#[derive]` macros that specify code added with the `derive` attribute
+ used on structs and enums
+* Attribute-like macros that define custom attributes usable on any item
+* Function-like macros that look like function calls but operate on the tokens
+ specified as their argument
+
+We’ll talk about each of these in turn, but first, let’s look at why we even
+need macros when we already have functions.
+
+### The Difference Between Macros and Functions
+
+Fundamentally, macros are a way of writing code that writes other code, which
+is known as *metaprogramming*. In Appendix C, we discuss the `derive`
+attribute, which generates an implementation of various traits for you. We’ve
+also used the `println!` and `vec!` macros throughout the book. All of these
+macros *expand* to produce more code than the code you’ve written manually.
+
+Metaprogramming is useful for reducing the amount of code you have to write and
+maintain, which is also one of the roles of functions. However, macros have
+some additional powers that functions don’t.
+
+A function signature must declare the number and type of parameters the
+function has. Macros, on the other hand, can take a variable number of
+parameters: we can call `println!("hello")` with one argument or
+`println!("hello {}", name)` with two arguments. Also, macros are expanded
+before the compiler interprets the meaning of the code, so a macro can, for
+example, implement a trait on a given type. A function can’t, because it gets
+called at runtime and a trait needs to be implemented at compile time.
+
+The downside to implementing a macro instead of a function is that macro
+definitions are more complex than function definitions because you’re writing
+Rust code that writes Rust code. Due to this indirection, macro definitions are
+generally more difficult to read, understand, and maintain than function
+definitions.
+
+Another important difference between macros and functions is that you must
+define macros or bring them into scope *before* you call them in a file, as
+opposed to functions you can define anywhere and call anywhere.
+
+### Declarative Macros with `macro_rules!` for General Metaprogramming
+
+The most widely used form of macros in Rust is the *declarative macro*. These
+are also sometimes referred to as “macros by example,” “`macro_rules!` macros,”
+or just plain “macros.” At their core, declarative macros allow you to write
+something similar to a Rust `match` expression. As discussed in Chapter 6,
+`match` expressions are control structures that take an expression, compare the
+resulting value of the expression to patterns, and then run the code associated
+with the matching pattern. Macros also compare a value to patterns that are
+associated with particular code: in this situation, the value is the literal
+Rust source code passed to the macro; the patterns are compared with the
+structure of that source code; and the code associated with each pattern, when
+matched, replaces the code passed to the macro. This all happens during
+compilation.
+
+To define a macro, you use the `macro_rules!` construct. Let’s explore how to
+use `macro_rules!` by looking at how the `vec!` macro is defined. Chapter 8
+covered how we can use the `vec!` macro to create a new vector with particular
+values. For example, the following macro creates a new vector containing three
+integers:
+
+```
+let v: Vec<u32> = vec![1, 2, 3];
+```
+
+We could also use the `vec!` macro to make a vector of two integers or a vector
+of five string slices. We wouldn’t be able to use a function to do the same
+because we wouldn’t know the number or type of values up front.
+
+Listing 19-28 shows a slightly simplified definition of the `vec!` macro.
+
+Filename: src/lib.rs
+
+```
+[1] #[macro_export]
+[2] macro_rules! vec {
+ [3] ( $( $x:expr ),* ) => {
+ {
+ let mut temp_vec = Vec::new();
+ [4] $(
+ [5] temp_vec.push($x [6]);
+ )*
+ [7] temp_vec
+ }
+ };
+}
+```
+
+Listing 19-28: A simplified version of the `vec!` macro definition
+
+> Note: The actual definition of the `vec!` macro in the standard library
+> includes code to preallocate the correct amount of memory up front. That code
+> is an optimization that we don’t include here to make the example simpler.
+
+The `#[macro_export]` annotation [1] indicates that this macro should be made
+available whenever the crate in which the macro is defined is brought into
+scope. Without this annotation, the macro can’t be brought into scope.
+
+We then start the macro definition with `macro_rules!` and the name of the
+macro we’re defining *without* the exclamation mark [2]. The name, in this case
+`vec`, is followed by curly brackets denoting the body of the macro definition.
+
+The structure in the `vec!` body is similar to the structure of a `match`
+expression. Here we have one arm with the pattern `( $( $x:expr ),* )`,
+followed by `=>` and the block of code associated with this pattern [3]. If the
+pattern matches, the associated block of code will be emitted. Given that this
+is the only pattern in this macro, there is only one valid way to match; any
+other pattern will result in an error. More complex macros will have more than
+one arm.
+
+Valid pattern syntax in macro definitions is different than the pattern syntax
+covered in Chapter 18 because macro patterns are matched against Rust code
+structure rather than values. Let’s walk through what the pattern pieces in
+Listing 19-28 mean; for the full macro pattern syntax, see the Rust Reference
+at *https://doc.rust-lang.org/reference/macros-by-example.html*.
+
+First, we use a set of parentheses to encompass the whole pattern. We use a
+dollar sign (`$`) to declare a variable in the macro system that will contain
+the Rust code matching the pattern. The dollar sign makes it clear this is a
+macro variable as opposed to a regular Rust variable.
+Next comes a set of parentheses that captures values that match the
+pattern within the parentheses for use in the replacement code. Within `$()` is
+`$x:expr`, which matches any Rust expression and gives the expression the name
+`$x`.
+
+The comma following `$()` indicates that a literal comma separator character
+could optionally appear after the code that matches the code in `$()`. The `*`
+specifies that the pattern matches zero or more of whatever precedes the `*`.
+
+When we call this macro with `vec![1, 2, 3];`, the `$x` pattern matches three
+times with the three expressions `1`, `2`, and `3`.
+
+Now let’s look at the pattern in the body of the code associated with this arm:
+`temp_vec.push()` [5] within `$()*` [4][7] is generated for each part that
+matches `$()` in the pattern zero or more times depending on how many times the
+pattern matches. The `$x` [6] is replaced with each expression matched. When we
+call this macro with `vec![1, 2, 3];`, the code generated that replaces this
+macro call will be the following:
+
+```
+{
+ let mut temp_vec = Vec::new();
+ temp_vec.push(1);
+ temp_vec.push(2);
+ temp_vec.push(3);
+ temp_vec
+}
+```
+
+We’ve defined a macro that can take any number of arguments of any type and can
+generate code to create a vector containing the specified elements.
+
+To learn more about how to write macros, consult the online documentation or
+other resources, such as “The Little Book of Rust Macros” at
+*https://veykril.github.io/tlborm/* started by Daniel Keep and continued by
+Lukas Wirth.
+
+<!-- Not sure what "In the future, Rust will have a second kind of declarative
+macro" means here. I suspect we're "stuck" with the two kinds of macros we
+already have today, at least I don't see much energy in pushing to add a third
+just yet.
+/JT -->
+<!-- Yeah, great catch, I think that part was back when we had more dreams that
+have now been postponed/abandoned. I've removed. /Carol -->
+
+### Procedural Macros for Generating Code from Attributes
+
+The second form of macros is the *procedural macro*, which acts more like a
+function (and is a type of procedure). Procedural macros accept some code as an
+input, operate on that code, and produce some code as an output rather than
+matching against patterns and replacing the code with other code as declarative
+macros do. The three kinds of procedural macros are custom derive,
+attribute-like, and function-like, and all work in a similar fashion.
+
+When creating procedural macros, the definitions must reside in their own crate
+with a special crate type. This is for complex technical reasons that we hope
+to eliminate in the future. In Listing 19-29, we show how to define a
+procedural macro, where `some_attribute` is a placeholder for using a specific
+macro variety.
+
+Filename: src/lib.rs
+
+```
+use proc_macro;
+
+#[some_attribute]
+pub fn some_name(input: TokenStream) -> TokenStream {
+}
+```
+
+Listing 19-29: An example of defining a procedural macro
+
+The function that defines a procedural macro takes a `TokenStream` as an input
+and produces a `TokenStream` as an output. The `TokenStream` type is defined by
+the `proc_macro` crate that is included with Rust and represents a sequence of
+tokens. This is the core of the macro: the source code that the macro is
+operating on makes up the input `TokenStream`, and the code the macro produces
+is the output `TokenStream`. The function also has an attribute attached to it
+that specifies which kind of procedural macro we’re creating. We can have
+multiple kinds of procedural macros in the same crate.
+
+Let’s look at the different kinds of procedural macros. We’ll start with a
+custom derive macro and then explain the small dissimilarities that make the
+other forms different.
+
+### How to Write a Custom `derive` Macro
+
+Let’s create a crate named `hello_macro` that defines a trait named
+`HelloMacro` with one associated function named `hello_macro`. Rather than
+making our users implement the `HelloMacro` trait for each of their types,
+we’ll provide a procedural macro so users can annotate their type with
+`#[derive(HelloMacro)]` to get a default implementation of the `hello_macro`
+function. The default implementation will print `Hello, Macro! My name is
+TypeName!` where `TypeName` is the name of the type on which this trait has
+been defined. In other words, we’ll write a crate that enables another
+programmer to write code like Listing 19-30 using our crate.
+
+Filename: src/main.rs
+
+```
+use hello_macro::HelloMacro;
+use hello_macro_derive::HelloMacro;
+
+#[derive(HelloMacro)]
+struct Pancakes;
+
+fn main() {
+ Pancakes::hello_macro();
+}
+```
+
+Listing 19-30: The code a user of our crate will be able to write when using
+our procedural macro
+
+This code will print `Hello, Macro! My name is Pancakes!` when we’re done. The
+first step is to make a new library crate, like this:
+
+```
+$ cargo new hello_macro --lib
+```
+
+Next, we’ll define the `HelloMacro` trait and its associated function:
+
+Filename: src/lib.rs
+
+```
+pub trait HelloMacro {
+ fn hello_macro();
+}
+```
+
+We have a trait and its function. At this point, our crate user could implement
+the trait to achieve the desired functionality, like so:
+
+```
+use hello_macro::HelloMacro;
+
+struct Pancakes;
+
+impl HelloMacro for Pancakes {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is Pancakes!");
+ }
+}
+
+fn main() {
+ Pancakes::hello_macro();
+}
+```
+
+However, they would need to write the implementation block for each type they
+wanted to use with `hello_macro`; we want to spare them from having to do this
+work.
+
+Additionally, we can’t yet provide the `hello_macro` function with default
+implementation that will print the name of the type the trait is implemented
+on: Rust doesn’t have reflection capabilities, so it can’t look up the type’s
+name at runtime. We need a macro to generate code at compile time.
+
+The next step is to define the procedural macro. At the time of this writing,
+procedural macros need to be in their own crate. Eventually, this restriction
+might be lifted. The convention for structuring crates and macro crates is as
+follows: for a crate named `foo`, a custom derive procedural macro crate is
+called `foo_derive`. Let’s start a new crate called `hello_macro_derive` inside
+our `hello_macro` project:
+
+```
+$ cargo new hello_macro_derive --lib
+```
+
+Our two crates are tightly related, so we create the procedural macro crate
+within the directory of our `hello_macro` crate. If we change the trait
+definition in `hello_macro`, we’ll have to change the implementation of the
+procedural macro in `hello_macro_derive` as well. The two crates will need to
+be published separately, and programmers using these crates will need to add
+both as dependencies and bring them both into scope. We could instead have the
+`hello_macro` crate use `hello_macro_derive` as a dependency and re-export the
+procedural macro code. However, the way we’ve structured the project makes it
+possible for programmers to use `hello_macro` even if they don’t want the
+`derive` functionality.
+
+We need to declare the `hello_macro_derive` crate as a procedural macro crate.
+We’ll also need functionality from the `syn` and `quote` crates, as you’ll see
+in a moment, so we need to add them as dependencies. Add the following to the
+*Cargo.toml* file for `hello_macro_derive`:
+
+Filename: hello_macro_derive/Cargo.toml
+
+```
+[lib]
+proc-macro = true
+
+[dependencies]
+syn = "1.0"
+quote = "1.0"
+```
+
+To start defining the procedural macro, place the code in Listing 19-31 into
+your *src/lib.rs* file for the `hello_macro_derive` crate. Note that this code
+won’t compile until we add a definition for the `impl_hello_macro` function.
+
+Filename: hello_macro_derive/src/lib.rs
+
+```
+use proc_macro::TokenStream;
+use quote::quote;
+use syn;
+
+#[proc_macro_derive(HelloMacro)]
+pub fn hello_macro_derive(input: TokenStream) -> TokenStream {
+ // Construct a representation of Rust code as a syntax tree
+ // that we can manipulate
+ let ast = syn::parse(input).unwrap();
+
+ // Build the trait implementation
+ impl_hello_macro(&ast)
+}
+```
+
+Listing 19-31: Code that most procedural macro crates will require in order to
+process Rust code
+
+Notice that we’ve split the code into the `hello_macro_derive` function, which
+is responsible for parsing the `TokenStream`, and the `impl_hello_macro`
+function, which is responsible for transforming the syntax tree: this makes
+writing a procedural macro more convenient. The code in the outer function
+(`hello_macro_derive` in this case) will be the same for almost every
+procedural macro crate you see or create. The code you specify in the body of
+the inner function (`impl_hello_macro` in this case) will be different
+depending on your procedural macro’s purpose.
+
+We’ve introduced three new crates: `proc_macro`, `syn` (available from
+*https://crates.io/crates/syn*), and `quote` (available from
+*https://crates.io/crates/quote*). The `proc_macro` crate comes with Rust, so
+we didn’t need to add that to the dependencies in *Cargo.toml*. The
+`proc_macro` crate is the compiler’s API that allows us to read and manipulate
+Rust code from our code.
+
+The `syn` crate parses Rust code from a string into a data structure that we
+can perform operations on. The `quote` crate turns `syn` data structures back
+into Rust code. These crates make it much simpler to parse any sort of Rust
+code we might want to handle: writing a full parser for Rust code is no simple
+task.
+
+The `hello_macro_derive` function will be called when a user of our library
+specifies `#[derive(HelloMacro)]` on a type. This is possible because we’ve
+annotated the `hello_macro_derive` function here with `proc_macro_derive` and
+specified the name `HelloMacro`, which matches our trait name; this is the
+convention most procedural macros follow.
+
+The `hello_macro_derive` function first converts the `input` from a
+`TokenStream` to a data structure that we can then interpret and perform
+operations on. This is where `syn` comes into play. The `parse` function in
+`syn` takes a `TokenStream` and returns a `DeriveInput` struct representing the
+parsed Rust code. Listing 19-32 shows the relevant parts of the `DeriveInput`
+struct we get from parsing the `struct Pancakes;` string:
+
+```
+DeriveInput {
+ // --snip--
+
+ ident: Ident {
+ ident: "Pancakes",
+ span: #0 bytes(95..103)
+ },
+ data: Struct(
+ DataStruct {
+ struct_token: Struct,
+ fields: Unit,
+ semi_token: Some(
+ Semi
+ )
+ }
+ )
+}
+```
+
+Listing 19-32: The `DeriveInput` instance we get when parsing the code that has
+the macro’s attribute in Listing 19-30
+
+The fields of this struct show that the Rust code we’ve parsed is a unit struct
+with the `ident` (identifier, meaning the name) of `Pancakes`. There are more
+fields on this struct for describing all sorts of Rust code; check the `syn`
+documentation for `DeriveInput` at
+*https://docs.rs/syn/1.0/syn/struct.DeriveInput.html* for more information.
+
+Soon we’ll define the `impl_hello_macro` function, which is where we’ll build
+the new Rust code we want to include. But before we do, note that the output
+for our derive macro is also a `TokenStream`. The returned `TokenStream` is
+added to the code that our crate users write, so when they compile their crate,
+they’ll get the extra functionality that we provide in the modified
+`TokenStream`.
+
+You might have noticed that we’re calling `unwrap` to cause the
+`hello_macro_derive` function to panic if the call to the `syn::parse` function
+fails here. It’s necessary for our procedural macro to panic on errors because
+`proc_macro_derive` functions must return `TokenStream` rather than `Result` to
+conform to the procedural macro API. We’ve simplified this example by using
+`unwrap`; in production code, you should provide more specific error messages
+about what went wrong by using `panic!` or `expect`.
+
+Now that we have the code to turn the annotated Rust code from a `TokenStream`
+into a `DeriveInput` instance, let’s generate the code that implements the
+`HelloMacro` trait on the annotated type, as shown in Listing 19-33.
+
+Filename: hello_macro_derive/src/lib.rs
+
+```
+fn impl_hello_macro(ast: &syn::DeriveInput) -> TokenStream {
+ let name = &ast.ident;
+ let gen = quote! {
+ impl HelloMacro for #name {
+ fn hello_macro() {
+ println!("Hello, Macro! My name is {}!", stringify!(#name));
+ }
+ }
+ };
+ gen.into()
+}
+```
+
+Listing 19-33: Implementing the `HelloMacro` trait using the parsed Rust code
+
+We get an `Ident` struct instance containing the name (identifier) of the
+annotated type using `ast.ident`. The struct in Listing 19-32 shows that when
+we run the `impl_hello_macro` function on the code in Listing 19-30, the
+`ident` we get will have the `ident` field with a value of `"Pancakes"`. Thus,
+the `name` variable in Listing 19-33 will contain an `Ident` struct instance
+that, when printed, will be the string `"Pancakes"`, the name of the struct in
+Listing 19-30.
+
+The `quote!` macro lets us define the Rust code that we want to return. The
+compiler expects something different to the direct result of the `quote!`
+macro’s execution, so we need to convert it to a `TokenStream`. We do this by
+calling the `into` method, which consumes this intermediate representation and
+returns a value of the required `TokenStream` type.
+
+The `quote!` macro also provides some very cool templating mechanics: we can
+enter `#name`, and `quote!` will replace it with the value in the variable
+`name`. You can even do some repetition similar to the way regular macros work.
+Check out the `quote` crate’s docs at *https://docs.rs/quote* for a thorough
+introduction.
+
+We want our procedural macro to generate an implementation of our `HelloMacro`
+trait for the type the user annotated, which we can get by using `#name`. The
+trait implementation has the one function `hello_macro`, whose body contains the
+functionality we want to provide: printing `Hello, Macro! My name is` and then
+the name of the annotated type.
+
+The `stringify!` macro used here is built into Rust. It takes a Rust
+expression, such as `1 + 2`, and at compile time turns the expression into a
+string literal, such as `"1 + 2"`. This is different than `format!` or
+`println!`, macros which evaluate the expression and then turn the result into
+a `String`. There is a possibility that the `#name` input might be an
+expression to print literally, so we use `stringify!`. Using `stringify!` also
+saves an allocation by converting `#name` to a string literal at compile time.
+
+At this point, `cargo build` should complete successfully in both `hello_macro`
+and `hello_macro_derive`. Let’s hook up these crates to the code in Listing
+19-30 to see the procedural macro in action! Create a new binary project in
+your *projects* directory using `cargo new pancakes`. We need to add
+`hello_macro` and `hello_macro_derive` as dependencies in the `pancakes`
+crate’s *Cargo.toml*. If you’re publishing your versions of `hello_macro` and
+`hello_macro_derive` to *https://crates.io/*, they would be regular
+dependencies; if not, you can specify them as `path` dependencies as follows:
+
+```
+[dependencies]
+hello_macro = { path = "../hello_macro" }
+hello_macro_derive = { path = "../hello_macro/hello_macro_derive" }
+```
+
+Put the code in Listing 19-30 into *src/main.rs*, and run `cargo run`: it
+should print `Hello, Macro! My name is Pancakes!` The implementation of the
+`HelloMacro` trait from the procedural macro was included without the
+`pancakes` crate needing to implement it; the `#[derive(HelloMacro)]` added the
+trait implementation.
+
+Next, let’s explore how the other kinds of procedural macros differ from custom
+derive macros.
+
+### Attribute-like macros
+
+Attribute-like macros are similar to custom derive macros, but instead of
+generating code for the `derive` attribute, they allow you to create new
+attributes. They’re also more flexible: `derive` only works for structs and
+enums; attributes can be applied to other items as well, such as functions.
+Here’s an example of using an attribute-like macro: say you have an attribute
+named `route` that annotates functions when using a web application framework:
+
+```
+#[route(GET, "/")]
+fn index() {
+```
+
+This `#[route]` attribute would be defined by the framework as a procedural
+macro. The signature of the macro definition function would look like this:
+
+```
+#[proc_macro_attribute]
+pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream {
+```
+
+Here, we have two parameters of type `TokenStream`. The first is for the
+contents of the attribute: the `GET, "/"` part. The second is the body of the
+item the attribute is attached to: in this case, `fn index() {}` and the rest
+of the function’s body.
+
+Other than that, attribute-like macros work the same way as custom derive
+macros: you create a crate with the `proc-macro` crate type and implement a
+function that generates the code you want!
+
+### Function-like macros
+
+Function-like macros define macros that look like function calls. Similarly to
+`macro_rules!` macros, they’re more flexible than functions; for example, they
+can take an unknown number of arguments. However, `macro_rules!` macros can be
+defined only using the match-like syntax we discussed in the section
+“Declarative Macros with `macro_rules!` for General Metaprogramming” earlier.
+Function-like macros take a `TokenStream` parameter and their definition
+manipulates that `TokenStream` using Rust code as the other two types of
+procedural macros do. An example of a function-like macro is an `sql!` macro
+that might be called like so:
+
+```
+let sql = sql!(SELECT * FROM posts WHERE id=1);
+```
+
+This macro would parse the SQL statement inside it and check that it’s
+syntactically correct, which is much more complex processing than a
+`macro_rules!` macro can do. The `sql!` macro would be defined like this:
+
+```
+#[proc_macro]
+pub fn sql(input: TokenStream) -> TokenStream {
+```
+
+This definition is similar to the custom derive macro’s signature: we receive
+the tokens that are inside the parentheses and return the code we wanted to
+generate.
+
+<!-- I may get a few looks for this, but I wonder if we should trim the
+procedural macros section above a bit. There's a lot of information in there,
+but it feels like something we could intro and then point people off to other
+materials for. Reason being (and I know I may be in the minority here),
+procedural macros are something we should use only rarely in our Rust projects.
+They are a burden on the compiler, have the potential to hurt readability and
+maintainability, and... you know the saying with great power comes great
+responsibilty and all that. /JT -->
+<!-- I think we felt obligated to have this section when procedural macros were
+introduced because there wasn't any documentation for them. I feel like the
+custom derive is the most common kind people want to make... While I'd love to
+not have to maintain this section, I asked around and people seemed generally
+in favor of keeping it, so I think I will, for now. /Carol -->
+
+## Summary
+
+Whew! Now you have some Rust features in your toolbox that you likely won’t use
+often, but you’ll know they’re available in very particular circumstances.
+We’ve introduced several complex topics so that when you encounter them in
+error message suggestions or in other peoples’ code, you’ll be able to
+recognize these concepts and syntax. Use this chapter as a reference to guide
+you to solutions.
+
+Next, we’ll put everything we’ve discussed throughout the book into practice
+and do one more project!
diff --git a/src/doc/book/nostarch/chapter20.md b/src/doc/book/nostarch/chapter20.md
new file mode 100644
index 000000000..e692e2f1d
--- /dev/null
+++ b/src/doc/book/nostarch/chapter20.md
@@ -0,0 +1,1947 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Final Project: Building a Multithreaded Web Server
+
+It’s been a long journey, but we’ve reached the end of the book. In this
+chapter, we’ll build one more project together to demonstrate some of the
+concepts we covered in the final chapters, as well as recap some earlier
+lessons.
+
+For our final project, we’ll make a web server that says “hello” and looks like
+Figure 20-1 in a web browser.
+
+!hello from rust at *img/trpl20-01.png*
+
+Figure 20-1: Our final shared project
+
+Here is our plan for building the web server:
+
+1. Learn a bit about TCP and HTTP.
+2. Listen for TCP connections on a socket.
+3. Parse a small number of HTTP requests.
+4. Create a proper HTTP response.
+5. Improve the throughput of our server with a thread pool.
+
+Before we get started, we should mention one detail: the method we’ll use won’t
+be the best way to build a web server with Rust. Community members have
+published a number of production-ready crates available at *https://crates.io/*
+that provide more complete web server and thread pool implementations than
+we’ll build. However, our intention in this chapter is to help you learn, not
+to take the easy route. Because Rust is a systems programming language, we can
+choose the level of abstraction we want to work with and can go to a lower
+level than is possible or practical in other languages. We’ll therefore write
+the basic HTTP server and thread pool manually so you can learn the general
+ideas and techniques behind the crates you might use in the future.
+
+## Building a Single-Threaded Web Server
+
+We’ll start by getting a single-threaded web server working. Before we begin,
+let’s look at a quick overview of the protocols involved in building web
+servers. The details of these protocols are beyond the scope of this book, but
+a brief overview will give you the information you need.
+
+The two main protocols involved in web servers are *Hypertext Transfer
+Protocol* *(HTTP)* and *Transmission Control Protocol* *(TCP)*. Both protocols
+are *request-response* protocols, meaning a *client* initiates requests and a
+*server* listens to the requests and provides a response to the client. The
+contents of those requests and responses are defined by the protocols.
+
+TCP is the lower-level protocol that describes the details of how information
+gets from one server to another but doesn’t specify what that information is.
+HTTP builds on top of TCP by defining the contents of the requests and
+responses. It’s technically possible to use HTTP with other protocols, but in
+the vast majority of cases, HTTP sends its data over TCP. We’ll work with the
+raw bytes of TCP and HTTP requests and responses.
+
+### Listening to the TCP Connection
+
+Our web server needs to listen to a TCP connection, so that’s the first part
+we’ll work on. The standard library offers a `std::net` module that lets us do
+this. Let’s make a new project in the usual fashion:
+
+```
+$ cargo new hello
+ Created binary (application) `hello` project
+$ cd hello
+```
+
+Now enter the code in Listing 20-1 in *src/main.rs* to start. This code will
+listen at the local address `127.0.0.1:7878` for incoming TCP streams. When it
+gets an incoming stream, it will print `Connection established!`.
+
+Filename: src/main.rs
+
+```
+use std::net::TcpListener;
+
+fn main() {
+ [1] let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ [2] for stream in listener.incoming() {
+ [3] let stream = stream.unwrap();
+
+ [4] println!("Connection established!");
+ }
+}
+```
+
+Listing 20-1: Listening for incoming streams and printing a message when we
+receive a stream
+
+Using `TcpListener`, we can listen for TCP connections at the address
+`127.0.0.1:7878` [1]. In the address, the section before the colon is an IP
+address representing your computer (this is the same on every computer and
+doesn’t represent the authors’ computer specifically), and `7878` is the port.
+We’ve chosen this port for two reasons: HTTP isn’t normally accepted on this
+port so our server is unlikely to conflict with any other web server you might
+have running on your machine, and 7878 is *rust* typed on a telephone.
+
+The `bind` function in this scenario works like the `new` function in that it
+will return a new `TcpListener` instance. The function is called `bind`
+because, in networking, connecting to a port to listen to is known as “binding
+to a port.”
+
+The `bind` function returns a `Result<T, E>`, which indicates that it’s
+possible for binding to fail. For example, connecting to port 80 requires
+administrator privileges (nonadministrators can listen only on ports higher
+than 1023), so if we tried to connect to port 80 without being an
+administrator, binding wouldn’t work. Binding also wouldn’t work, for example,
+if we ran two instances of our program and so had two programs listening to the
+same port. Because we’re writing a basic server just for learning purposes, we
+won’t worry about handling these kinds of errors; instead, we use `unwrap` to
+stop the program if errors happen.
+
+The `incoming` method on `TcpListener` returns an iterator that gives us a
+sequence of streams [2] (more specifically, streams of type `TcpStream`). A
+single *stream* represents an open connection between the client and the
+server. A *connection* is the name for the full request and response process in
+which a client connects to the server, the server generates a response, and the
+server closes the connection. As such, we will read from the `TcpStream` to see
+what the client sent and then write our response to the stream to send data
+back to the client. Overall, this `for` loop will process each connection in
+turn and produce a series of streams for us to handle.
+
+For now, our handling of the stream consists of calling `unwrap` to terminate
+our program if the stream has any errors [3]; if there aren’t any errors, the
+program prints a message [4]. We’ll add more functionality for the success case
+in the next listing. The reason we might receive errors from the `incoming`
+method when a client connects to the server is that we’re not actually
+iterating over connections. Instead, we’re iterating over *connection
+attempts*. The connection might not be successful for a number of reasons, many
+of them operating system specific. For example, many operating systems have a
+limit to the number of simultaneous open connections they can support; new
+connection attempts beyond that number will produce an error until some of the
+open connections are closed.
+
+Let’s try running this code! Invoke `cargo run` in the terminal and then load
+*127.0.0.1:7878* in a web browser. The browser should show an error message
+like “Connection reset,” because the server isn’t currently sending back any
+data. But when you look at your terminal, you should see several messages that
+were printed when the browser connected to the server!
+
+```
+ Running `target/debug/hello`
+Connection established!
+Connection established!
+Connection established!
+```
+
+Sometimes, you’ll see multiple messages printed for one browser request; the
+reason might be that the browser is making a request for the page as well as a
+request for other resources, like the *favicon.ico* icon that appears in the
+browser tab.
+
+It could also be that the browser is trying to connect to the server multiple
+times because the server isn’t responding with any data. When `stream` goes out
+of scope and is dropped at the end of the loop, the connection is closed as
+part of the `drop` implementation. Browsers sometimes deal with closed
+connections by retrying, because the problem might be temporary. The important
+factor is that we’ve successfully gotten a handle to a TCP connection!
+
+Remember to stop the program by pressing <span class="keystroke">ctrl-c
+when you’re done running a particular version of the code. Then restart the
+program by invoking the `cargo run` command after you’ve made each set of code
+changes to make sure you’re running the newest code.
+
+### Reading the Request
+
+Let’s implement the functionality to read the request from the browser! To
+separate the concerns of first getting a connection and then taking some action
+with the connection, we’ll start a new function for processing connections. In
+this new `handle_connection` function, we’ll read data from the TCP stream and
+print it so we can see the data being sent from the browser. Change the code to
+look like Listing 20-2.
+
+Filename: src/main.rs
+
+```
+[1] use std::{
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ [2] handle_connection(stream);
+ }
+}
+
+fn handle_connection(mut stream: TcpStream) {
+ [3] let buf_reader = BufReader::new(&mut stream);
+ [4] let http_request: Vec<_> = buf_reader
+ [5] .lines()
+ [6] .map(|result| result.unwrap())
+ [7] .take_while(|line| !line.is_empty())
+ .collect();
+
+ [8] println!("Request: {:#?}", http_request);
+}
+```
+
+Listing 20-2: Reading from the `TcpStream` and printing the data
+
+We bring `std::io::prelude` and `std::io::BufReader` into scope to get access
+to traits and types that let us read from and write to the stream [1]. In the
+`for` loop in the `main` function, instead of printing a message that says we
+made a connection, we now call the new `handle_connection` function and pass
+the `stream` to it [2].
+
+In the `handle_connection` function, we create a new `BufReader` instance that
+wraps a mutable reference to the `stream` [3]. `BufReader` adds buffering by
+managing calls to the `std::io::Read` trait methods for us.
+
+We create a variable named `http_request` to collect the lines of the request
+the browser sends to our server. We indicate that we want to collect these
+lines in a vector by adding the `Vec<_>` type annotation [4].
+
+`BufReader` implements the `std::io::BufRead` trait, which provides the `lines`
+method [5]. The `lines` method returns an iterator of `Result<String,
+std::io::Error>` by splitting the stream of data whenever it sees a newline
+byte. To get each `String`, we map and `unwrap` each `Result` [6]. The `Result`
+might be an error if the data isn’t valid UTF-8 or if there was a problem
+reading from the stream. Again, a production program should handle these errors
+more gracefully, but we’re choosing to stop the program in the error case for
+simplicity.
+
+The browser signals the end of an HTTP request by sending two newline
+characters in a row, so to get one request from the stream, we take lines until
+we get a line that is the empty string [7]. Once we’ve collected the lines into
+the vector, we’re printing them out using pretty debug formatting [8] so we can
+take a look at the instructions the web browser is sending to our server.
+
+Let’s try this code! Start the program and make a request in a web browser
+again. Note that we’ll still get an error page in the browser, but our
+program’s output in the terminal will now look similar to this:
+
+```
+$ cargo run
+ Compiling hello v0.1.0 (file:///projects/hello)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.42s
+ Running `target/debug/hello`
+Request: [
+ "GET / HTTP/1.1",
+ "Host: 127.0.0.1:7878",
+ "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0",
+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
+ "Accept-Language: en-US,en;q=0.5",
+ "Accept-Encoding: gzip, deflate, br",
+ "DNT: 1",
+ "Connection: keep-alive",
+ "Upgrade-Insecure-Requests: 1",
+ "Sec-Fetch-Dest: document",
+ "Sec-Fetch-Mode: navigate",
+ "Sec-Fetch-Site: none",
+ "Sec-Fetch-User: ?1",
+ "Cache-Control: max-age=0",
+]
+```
+
+Depending on your browser, you might get slightly different output. Now that
+we’re printing the request data, we can see why we get multiple connections
+from one browser request by looking at the path after `GET` in the first line
+of the request. If the repeated connections are all requesting */*, we know the
+browser is trying to fetch */* repeatedly because it’s not getting a response
+from our program.
+
+Let’s break down this request data to understand what the browser is asking of
+our program.
+
+### A Closer Look at an HTTP Request
+
+HTTP is a text-based protocol, and a request takes this format:
+
+```
+Method Request-URI HTTP-Version CRLF
+headers CRLF
+message-body
+```
+
+The first line is the *request line* that holds information about what the
+client is requesting. The first part of the request line indicates the *method*
+being used, such as `GET` or `POST`, which describes how the client is making
+this request. Our client used a `GET` request, which means it is asking for
+information.
+
+The next part of the request line is */*, which indicates the *Uniform Resource
+Identifier* *(URI)* the client is requesting: a URI is almost, but not quite,
+the same as a *Uniform Resource Locator* *(URL)*. The difference between URIs
+and URLs isn’t important for our purposes in this chapter, but the HTTP spec
+uses the term URI, so we can just mentally substitute URL for URI here.
+
+The last part is the HTTP version the client uses, and then the request line
+ends in a *CRLF sequence*. (CRLF stands for *carriage return* and *line feed*,
+which are terms from the typewriter days!) The CRLF sequence can also be
+written as `\r\n`, where `\r` is a carriage return and `\n` is a line feed. The
+CRLF sequence separates the request line from the rest of the request data.
+Note that when the CRLF is printed, we see a new line start rather than `\r\n`.
+
+Looking at the request line data we received from running our program so far,
+we see that `GET` is the method, */* is the request URI, and `HTTP/1.1` is the
+version.
+
+After the request line, the remaining lines starting from `Host:` onward are
+headers. `GET` requests have no body.
+
+Try making a request from a different browser or asking for a different
+address, such as *127.0.0.1:7878/test*, to see how the request data changes.
+
+Now that we know what the browser is asking for, let’s send back some data!
+
+### Writing a Response
+
+We’re going to implement sending data in response to a client request.
+Responses have the following format:
+
+```
+HTTP-Version Status-Code Reason-Phrase CRLF
+headers CRLF
+message-body
+```
+
+The first line is a *status line* that contains the HTTP version used in the
+response, a numeric status code that summarizes the result of the request, and
+a reason phrase that provides a text description of the status code. After the
+CRLF sequence are any headers, another CRLF sequence, and the body of the
+response.
+
+Here is an example response that uses HTTP version 1.1, has a status code of
+200, an OK reason phrase, no headers, and no body:
+
+```
+HTTP/1.1 200 OK\r\n\r\n
+```
+
+The status code 200 is the standard success response. The text is a tiny
+successful HTTP response. Let’s write this to the stream as our response to a
+successful request! From the `handle_connection` function, remove the
+`println!` that was printing the request data and replace it with the code in
+Listing 20-3.
+
+Filename: src/main.rs
+
+```
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let http_request: Vec<_> = buf_reader
+ .lines()
+ .map(|result| result.unwrap())
+ .take_while(|line| !line.is_empty())
+ .collect();
+
+ [1] let response = "HTTP/1.1 200 OK\r\n\r\n";
+
+ [2] stream.write_all(response.as_bytes()[3]).unwrap();
+}
+```
+
+Listing 20-3: Writing a tiny successful HTTP response to the stream
+
+The first new line defines the `response` variable that holds the success
+message’s data [1]. Then we call `as_bytes` on our `response` to convert the
+string data to bytes [3]. The `write_all` method on `stream` takes a `&[u8]`
+and sends those bytes directly down the connection [2]. Because the `write_all`
+operation could fail, we use `unwrap` on any error result as before. Again, in
+a real application you would add error handling here.
+
+With these changes, let’s run our code and make a request. We’re no longer
+printing any data to the terminal, so we won’t see any output other than the
+output from Cargo. When you load *127.0.0.1:7878* in a web browser, you should
+get a blank page instead of an error. You’ve just hand-coded receiving an HTTP
+request and sending a response!
+
+### Returning Real HTML
+
+Let’s implement the functionality for returning more than a blank page. Create
+the new file *hello.html* in the root of your project directory, not in the
+*src* directory. You can input any HTML you want; Listing 20-4 shows one
+possibility.
+
+Filename: hello.html
+
+```
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Hello!</h1>
+ <p>Hi from Rust</p>
+ </body>
+</html>
+```
+
+Listing 20-4: A sample HTML file to return in a response
+
+This is a minimal HTML5 document with a heading and some text. To return this
+from the server when a request is received, we’ll modify `handle_connection` as
+shown in Listing 20-5 to read the HTML file, add it to the response as a body,
+and send it.
+
+Filename: src/main.rs
+
+```
+use std::{
+ [1] fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+};
+// --snip--
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ let http_request: Vec<_> = buf_reader
+ .lines()
+ .map(|result| result.unwrap())
+ .take_while(|line| !line.is_empty())
+ .collect();
+
+ let status_line = "HTTP/1.1 200 OK";
+ let contents = fs::read_to_string("hello.html").unwrap();
+ let length = contents.len();
+
+ [2] let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
+```
+
+Listing 20-5: Sending the contents of *hello.html* as the body of the response
+
+We’ve added `fs` to the `use` statement to bring the standard library’s
+filesystem module into scope [1]. The code for reading the contents of a file
+to a string should look familiar; we used it in Chapter 12 when we read the
+contents of a file for our I/O project in Listing 12-4.
+
+Next, we use `format!` to add the file’s contents as the body of the success
+response [2]. To ensure a valid HTTP response, we add the `Content-Length`
+header which is set to the size of our response body, in this case the size of
+`hello.html`.
+
+Run this code with `cargo run` and load *127.0.0.1:7878* in your browser; you
+should see your HTML rendered!
+
+Currently, we’re ignoring the request data in `http_request` and just sending
+back the contents of the HTML file unconditionally. That means if you try
+requesting *127.0.0.1:7878/something-else* in your browser, you’ll still get
+back this same HTML response. At the moment, our server is very limited and
+does not do what most web servers do. We want to customize our responses
+depending on the request and only send back the HTML file for a well-formed
+request to */*.
+
+### Validating the Request and Selectively Responding
+
+Right now, our web server will return the HTML in the file no matter what the
+client requested. Let’s add functionality to check that the browser is
+requesting */* before returning the HTML file and return an error if the
+browser requests anything else. For this we need to modify `handle_connection`,
+as shown in Listing 20-6. This new code checks the content of the request
+received against what we know a request for */* looks like and adds `if` and
+`else` blocks to treat requests differently.
+
+Filename: src/main.rs
+
+```
+// --snip--
+
+fn handle_connection(mut stream: TcpStream) {
+ let buf_reader = BufReader::new(&mut stream);
+ [1] let request_line = buf_reader.lines().next().unwrap().unwrap();
+
+ [2] if request_line == "GET / HTTP/1.1" {
+ let status_line = "HTTP/1.1 200 OK";
+ let contents = fs::read_to_string("hello.html").unwrap();
+ let length = contents.len();
+
+ let response = format!(
+ "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ [3] } else {
+ // some other request
+ }
+}
+```
+
+Listing 20-6: Handling requests to */* differently from other requests
+
+We’re only going to be looking at the first line of the HTTP request, so rather
+than reading the entire request into a vector, we’re calling `next` to get the
+first item from the iterator [1]. The first `unwrap` takes care of the `Option`
+and stops the program if the iterator has no items. The second `unwrap` handles
+the `Result` and has the same effect as the `unwrap` that was in the `map`
+added in Listing 20-2.
+
+Next, we check the `request_line` to see if it equals the request line of a GET
+request to the */* path [2]. If it does, the `if` block returns the contents of
+our HTML file.
+
+If the `request_line` does *not* equal the GET request to the */* path, it
+means we’ve received some other request. We’ll add code to the `else` block [3]
+in a moment to respond to all other requests.
+
+Run this code now and request *127.0.0.1:7878*; you should get the HTML in
+*hello.html*. If you make any other request, such as
+*127.0.0.1:7878/something-else*, you’ll get a connection error like those you
+saw when running the code in Listing 20-1 and Listing 20-2.
+
+Now let’s add the code in Listing 20-7 to the `else` block to return a response
+with the status code 404, which signals that the content for the request was
+not found. We’ll also return some HTML for a page to render in the browser
+indicating the response to the end user.
+
+Filename: src/main.rs
+
+```
+ // --snip--
+ } else {
+ [1] let status_line = "HTTP/1.1 404 NOT FOUND";
+ [2] let contents = fs::read_to_string("404.html").unwrap();
+ let length = contents.len();
+
+ let response = format!(
+ "{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}"
+ );
+
+ stream.write_all(response.as_bytes()).unwrap();
+ }
+```
+
+Listing 20-7: Responding with status code 404 and an error page if anything
+other than */* was requested
+
+Here, our response has a status line with status code 404 and the reason phrase
+`NOT FOUND` [1]. The body of the response will be the HTML in the file
+*404.html* [1]. You’ll need to create a *404.html* file next to *hello.html*
+for the error page; again feel free to use any HTML you want or use the example
+HTML in Listing 20-8.
+
+Filename: 404.html
+
+```
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <title>Hello!</title>
+ </head>
+ <body>
+ <h1>Oops!</h1>
+ <p>Sorry, I don't know what you're asking for.</p>
+ </body>
+</html>
+```
+
+Listing 20-8: Sample content for the page to send back with any 404 response
+
+With these changes, run your server again. Requesting *127.0.0.1:7878* should
+return the contents of *hello.html*, and any other request, like
+*127.0.0.1:7878/foo*, should return the error HTML from *404.html*.
+
+### A Touch of Refactoring
+
+At the moment the `if` and `else` blocks have a lot of repetition: they’re both
+reading files and writing the contents of the files to the stream. The only
+differences are the status line and the filename. Let’s make the code more
+concise by pulling out those differences into separate `if` and `else` lines
+that will assign the values of the status line and the filename to variables;
+we can then use those variables unconditionally in the code to read the file
+and write the response. Listing 20-9 shows the resulting code after replacing
+the large `if` and `else` blocks.
+
+Filename: src/main.rs
+
+```
+// --snip--
+
+fn handle_connection(mut stream: TcpStream) {
+ // --snip--
+
+ let (status_line, filename) = if request_line == "GET / HTTP/1.1" {
+ ("HTTP/1.1 200 OK", "hello.html")
+ } else {
+ ("HTTP/1.1 404 NOT FOUND", "404.html")
+ };
+
+ let contents = fs::read_to_string(filename).unwrap();
+ let length = contents.len();
+
+ let response =
+ format!("{status_line}\r\nContent-Length: {length}\r\n\r\n{contents}");
+
+ stream.write_all(response.as_bytes()).unwrap();
+}
+```
+
+Listing 20-9: Refactoring the `if` and `else` blocks to contain only the code
+that differs between the two cases
+
+Now the `if` and `else` blocks only return the appropriate values for the
+status line and filename in a tuple; we then use destructuring to assign these
+two values to `status_line` and `filename` using a pattern in the `let`
+statement, as discussed in Chapter 18.
+
+The previously duplicated code is now outside the `if` and `else` blocks and
+uses the `status_line` and `filename` variables. This makes it easier to see
+the difference between the two cases, and it means we have only one place to
+update the code if we want to change how the file reading and response writing
+work. The behavior of the code in Listing 20-9 will be the same as that in
+Listing 20-8.
+
+Awesome! We now have a simple web server in approximately 40 lines of Rust code
+that responds to one request with a page of content and responds to all other
+requests with a 404 response.
+
+Currently, our server runs in a single thread, meaning it can only serve one
+request at a time. Let’s examine how that can be a problem by simulating some
+slow requests. Then we’ll fix it so our server can handle multiple requests at
+once.
+
+## Turning Our Single-Threaded Server into a Multithreaded Server
+
+Right now, the server will process each request in turn, meaning it won’t
+process a second connection until the first is finished processing. If the
+server received more and more requests, this serial execution would be less and
+less optimal. If the server receives a request that takes a long time to
+process, subsequent requests will have to wait until the long request is
+finished, even if the new requests can be processed quickly. We’ll need to fix
+this, but first, we’ll look at the problem in action.
+
+### Simulating a Slow Request in the Current Server Implementation
+
+We’ll look at how a slow-processing request can affect other requests made to
+our current server implementation. Listing 20-10 implements handling a request
+to */sleep* with a simulated slow response that will cause the server to sleep
+for 5 seconds before responding.
+
+Filename: src/main.rs
+
+```
+use std::{
+ fs,
+ io::{prelude::*, BufReader},
+ net::{TcpListener, TcpStream},
+ thread,
+ time::Duration,
+};
+// --snip--
+
+fn handle_connection(mut stream: TcpStream) {
+ // --snip--
+
+ let (status_line, filename) = [1] match &request_line[..] {
+ [2] "GET / HTTP/1.1" => ("HTTP/1.1 200 OK", "hello.html"),
+ [3] "GET /sleep HTTP/1.1" => {
+ thread::sleep(Duration::from_secs(5));
+ ("HTTP/1.1 200 OK", "hello.html")
+ }
+ [4] _ => ("HTTP/1.1 404 NOT FOUND", "404.html"),
+ };
+
+ // --snip--
+}
+```
+
+Listing 20-10: Simulating a slow request by sleeping for 5 seconds
+
+We switched from `if` to `match` now that we have three cases [1]. We need to
+explicitly match on a slice of `request_line` to pattern match against the
+string literal values; `match` doesn’t do automatic referencing and
+dereferencing like the equality method does.
+
+The first arm [2] is the same as the `if` block from Listing 20-9. The second
+arm [3] matches a request to */sleep*. When that request is received, the
+server will sleep for 5 seconds before rendering the successful HTML page. The
+third arm [4] is the same as the `else` block from Listing 20-9.
+
+You can see how primitive our server is: real libraries would handle the
+recognition of multiple requests in a much less verbose way!
+
+Start the server using `cargo run`. Then open two browser windows: one for
+*http://127.0.0.1:7878/* and the other for *http://127.0.0.1:7878/sleep*. If
+you enter the */* URI a few times, as before, you’ll see it respond quickly.
+But if you enter */sleep* and then load */*, you’ll see that */* waits until
+`sleep` has slept for its full 5 seconds before loading.
+
+There are multiple techniques we could use to avoid requests backing up behind
+a slow request; the one we’ll implement is a thread pool.
+
+### Improving Throughput with a Thread Pool
+
+A *thread pool* is a group of spawned threads that are waiting and ready to
+handle a task. When the program receives a new task, it assigns one of the
+threads in the pool to the task, and that thread will process the task. The
+remaining threads in the pool are available to handle any other tasks that come
+in while the first thread is processing. When the first thread is done
+processing its task, it’s returned to the pool of idle threads, ready to handle
+a new task. A thread pool allows you to process connections concurrently,
+increasing the throughput of your server.
+
+We’ll limit the number of threads in the pool to a small number to protect us
+from Denial of Service (DoS) attacks; if we had our program create a new thread
+for each request as it came in, someone making 10 million requests to our
+server could create havoc by using up all our server’s resources and grinding
+the processing of requests to a halt.
+
+Rather than spawning unlimited threads, then, we’ll have a fixed number of
+threads waiting in the pool. Requests that come in are sent to the pool for
+processing. The pool will maintain a queue of incoming requests. Each of the
+threads in the pool will pop off a request from this queue, handle the request,
+and then ask the queue for another request. With this design, we can process up
+to `N` requests concurrently, where `N` is the number of threads. If each
+thread is responding to a long-running request, subsequent requests can still
+back up in the queue, but we’ve increased the number of long-running requests
+we can handle before reaching that point.
+
+This technique is just one of many ways to improve the throughput of a web
+server. Other options you might explore are the *fork/join model*, the
+*single-threaded async I/O model*, or the *multi-threaded async I/O model*. If
+you’re interested in this topic, you can read more about other solutions and
+try to implement them; with a low-level language like Rust, all of these
+options are possible.
+
+<!-- A more modern approach would probably use tokio, which could be a
+multi-threaded async I/O model. /JT -->
+<!-- I've added "multi-theraded async I/O model", I don't want to get into
+particular async crates though /Carol -->
+
+Before we begin implementing a thread pool, let’s talk about what using the
+pool should look like. When you’re trying to design code, writing the client
+interface first can help guide your design. Write the API of the code so it’s
+structured in the way you want to call it; then implement the functionality
+within that structure rather than implementing the functionality and then
+designing the public API.
+
+Similar to how we used test-driven development in the project in Chapter 12,
+we’ll use compiler-driven development here. We’ll write the code that calls the
+functions we want, and then we’ll look at errors from the compiler to determine
+what we should change next to get the code to work. Before we do that, however,
+we’ll explore the technique we’re not going to use as a starting point.
+
+#### Spawning a Thread for Each Request
+
+First, let’s explore how our code might look if it did create a new thread for
+every connection. As mentioned earlier, this isn’t our final plan due to the
+problems with potentially spawning an unlimited number of threads, but it is a
+starting point to get a working multithreaded server first. Then we’ll add the
+thread pool as an improvement, and contrasting the two solutions will be
+easier.
+
+Listing 20-11 shows the changes to make to `main` to spawn a new thread to
+handle each stream within the `for` loop.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ thread::spawn(|| {
+ handle_connection(stream);
+ });
+ }
+}
+```
+
+Listing 20-11: Spawning a new thread for each stream
+
+As you learned in Chapter 16, `thread::spawn` will create a new thread and then
+run the code in the closure in the new thread. If you run this code and load
+*/sleep* in your browser, then */* in two more browser tabs, you’ll indeed see
+that the requests to */* don’t have to wait for */sleep* to finish. However, as
+we mentioned, this will eventually overwhelm the system because you’d be making
+new threads without any limit.
+
+#### Creating a Finite Number of Threads
+
+We want our thread pool to work in a similar, familiar way so switching from
+threads to a thread pool doesn’t require large changes to the code that uses
+our API. Listing 20-12 shows the hypothetical interface for a `ThreadPool`
+struct we want to use instead of `thread::spawn`.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ [1] let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming() {
+ let stream = stream.unwrap();
+
+ [2] pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+}
+```
+
+Listing 20-12: Our ideal `ThreadPool` interface
+
+We use `ThreadPool::new` to create a new thread pool with a configurable number
+of threads, in this case four [1]. Then, in the `for` loop, `pool.execute` has
+a similar interface as `thread::spawn` in that it takes a closure the pool
+should run for each stream [2]. We need to implement `pool.execute` so it takes
+the closure and gives it to a thread in the pool to run. This code won’t yet
+compile, but we’ll try so the compiler can guide us in how to fix it.
+
+#### Building `ThreadPool` Using Compiler Driven Development
+
+Make the changes in Listing 20-12 to *src/main.rs*, and then let’s use the
+compiler errors from `cargo check` to drive our development. Here is the first
+error we get:
+
+```
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0433]: failed to resolve: use of undeclared type `ThreadPool`
+ --> src/main.rs:10:16
+ |
+10 | let pool = ThreadPool::new(4);
+ | ^^^^^^^^^^ use of undeclared type `ThreadPool`
+```
+
+Great! This error tells us we need a `ThreadPool` type or module, so we’ll
+build one now. Our `ThreadPool` implementation will be independent of the kind
+of work our web server is doing. So, let’s switch the `hello` crate from a
+binary crate to a library crate to hold our `ThreadPool` implementation. After
+we change to a library crate, we could also use the separate thread pool
+library for any work we want to do using a thread pool, not just for serving
+web requests.
+
+Create a *src/lib.rs* that contains the following, which is the simplest
+definition of a `ThreadPool` struct that we can have for now:
+
+Filename: src/lib.rs
+
+```
+pub struct ThreadPool;
+```
+
+Then edit *main.rs* file to bring `ThreadPool` into scope from the library
+crate by adding the following code to the top of *src/main.rs*:
+
+Filename: src/main.rs
+
+```
+use hello::ThreadPool;
+```
+
+This code still won’t work, but let’s check it again to get the next error that
+we need to address:
+
+```
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0599]: no function or associated item named `new` found for struct `ThreadPool` in the current scope
+ --> src/bin/main.rs:11:28
+ |
+11 | let pool = ThreadPool::new(4);
+ | ^^^ function or associated item not found in `ThreadPool`
+```
+
+This error indicates that next we need to create an associated function named
+`new` for `ThreadPool`. We also know that `new` needs to have one parameter
+that can accept `4` as an argument and should return a `ThreadPool` instance.
+Let’s implement the simplest `new` function that will have those
+characteristics:
+
+Filename: src/lib.rs
+
+```
+pub struct ThreadPool;
+
+impl ThreadPool {
+ pub fn new(size: usize) -> ThreadPool {
+ ThreadPool
+ }
+}
+```
+
+We chose `usize` as the type of the `size` parameter, because we know that a
+negative number of threads doesn’t make any sense. We also know we’ll use this
+4 as the number of elements in a collection of threads, which is what the
+`usize` type is for, as discussed in the “Integer Types” section of Chapter 3.
+
+Let’s check the code again:
+
+```
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0599]: no method named `execute` found for struct `ThreadPool` in the current scope
+ --> src/bin/main.rs:16:14
+ |
+16 | pool.execute(|| {
+ | ^^^^^^^ method not found in `ThreadPool`
+```
+
+Now the error occurs because we don’t have an `execute` method on `ThreadPool`.
+Recall from the “Creating a Finite Number of Threads” section that we decided
+our thread pool should have an interface similar to `thread::spawn`. In
+addition, we’ll implement the `execute` function so it takes the closure it’s
+given and gives it to an idle thread in the pool to run.
+
+We’ll define the `execute` method on `ThreadPool` to take a closure as a
+parameter. Recall from the “Moving Captured Values Out of the Closure and the
+`Fn` Traits” section in Chapter 13 that we can take closures as parameters with
+three different traits: `Fn`, `FnMut`, and `FnOnce`. We need to decide which
+kind of closure to use here. We know we’ll end up doing something similar to
+the standard library `thread::spawn` implementation, so we can look at what
+bounds the signature of `thread::spawn` has on its parameter. The documentation
+shows us the following:
+
+```
+pub fn spawn<F, T>(f: F) -> JoinHandle<T>
+ where
+ F: FnOnce() -> T,
+ F: Send + 'static,
+ T: Send + 'static,
+```
+
+The `F` type parameter is the one we’re concerned with here; the `T` type
+parameter is related to the return value, and we’re not concerned with that. We
+can see that `spawn` uses `FnOnce` as the trait bound on `F`. This is probably
+what we want as well, because we’ll eventually pass the argument we get in
+`execute` to `spawn`. We can be further confident that `FnOnce` is the trait we
+want to use because the thread for running a request will only execute that
+request’s closure one time, which matches the `Once` in `FnOnce`.
+
+The `F` type parameter also has the trait bound `Send` and the lifetime bound
+`'static`, which are useful in our situation: we need `Send` to transfer the
+closure from one thread to another and `'static` because we don’t know how long
+the thread will take to execute. Let’s create an `execute` method on
+`ThreadPool` that will take a generic parameter of type `F` with these bounds:
+
+Filename: src/lib.rs
+
+```
+impl ThreadPool {
+ // --snip--
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() [1] + Send + 'static,
+ {
+ }
+}
+```
+
+We still use the `()` after `FnOnce` [1] because this `FnOnce` represents a
+closure that takes no parameters and returns the unit type `()`. Just like
+function definitions, the return type can be omitted from the signature, but
+even if we have no parameters, we still need the parentheses.
+
+Again, this is the simplest implementation of the `execute` method: it does
+nothing, but we’re trying only to make our code compile. Let’s check it again:
+
+```
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.24s
+```
+
+It compiles! But note that if you try `cargo run` and make a request in the
+browser, you’ll see the errors in the browser that we saw at the beginning of
+the chapter. Our library isn’t actually calling the closure passed to `execute`
+yet!
+
+> Note: A saying you might hear about languages with strict compilers, such as
+> Haskell and Rust, is “if the code compiles, it works.” But this saying is not
+> universally true. Our project compiles, but it does absolutely nothing! If we
+> were building a real, complete project, this would be a good time to start
+> writing unit tests to check that the code compiles *and* has the behavior we
+> want.
+
+#### Validating the Number of Threads in `new`
+
+We aren’t doing anything with the parameters to `new` and `execute`. Let’s
+implement the bodies of these functions with the behavior we want. To start,
+let’s think about `new`. Earlier we chose an unsigned type for the `size`
+parameter, because a pool with a negative number of threads makes no sense.
+However, a pool with zero threads also makes no sense, yet zero is a perfectly
+valid `usize`. We’ll add code to check that `size` is greater than zero before
+we return a `ThreadPool` instance and have the program panic if it receives a
+zero by using the `assert!` macro, as shown in Listing 20-13.
+
+Filename: src/lib.rs
+
+```
+impl ThreadPool {
+ /// Create a new ThreadPool.
+ ///
+ /// The size is the number of threads in the pool.
+ ///
+ [1] /// # Panics
+ ///
+ /// The `new` function will panic if the size is zero.
+ pub fn new(size: usize) -> ThreadPool {
+ [2] assert!(size > 0);
+
+ ThreadPool
+ }
+
+ // --snip--
+}
+```
+
+Listing 20-13: Implementing `ThreadPool::new` to panic if `size` is zero
+
+We’ve also added some documentation for our `ThreadPool` with doc comments.
+Note that we followed good documentation practices by adding a section that
+calls out the situations in which our function can panic [1], as discussed in
+Chapter 14. Try running `cargo doc --open` and clicking the `ThreadPool` struct
+to see what the generated docs for `new` look like!
+
+Instead of adding the `assert!` macro as we’ve done here [2], we could change
+`new` into `build` and return a `Result` like we did with `Config::build` in
+the I/O project in Listing 12-9. But we’ve decided in this case that trying to
+create a thread pool without any threads should be an unrecoverable error. If
+you’re feeling ambitious, try to write a function named `build` with the
+following signature to compare with the `new` function:
+
+```
+pub fn build(size: usize) -> Result<ThreadPool, PoolCreationError> {
+```
+<!-- Similar nit here to a comment I made a few chapters ago: fallible
+constructors are awkward to use. We may want to discourage their use. A modern
+approach might use a builder pattern to set the number of threads, and use a
+default number of threads that's non-zero. /JT -->
+<!-- I've changed the function name to be `build` which nicely matches the
+changes JT suggested for chapter 12. /Carol -->
+
+#### Creating Space to Store the Threads
+
+Now that we have a way to know we have a valid number of threads to store in
+the pool, we can create those threads and store them in the `ThreadPool` struct
+before returning the struct. But how do we “store” a thread? Let’s take another
+look at the `thread::spawn` signature:
+
+```
+pub fn spawn<F, T>(f: F) -> JoinHandle<T>
+ where
+ F: FnOnce() -> T,
+ F: Send + 'static,
+ T: Send + 'static,
+```
+
+The `spawn` function returns a `JoinHandle<T>`, where `T` is the type that the
+closure returns. Let’s try using `JoinHandle` too and see what happens. In our
+case, the closures we’re passing to the thread pool will handle the connection
+and not return anything, so `T` will be the unit type `()`.
+
+The code in Listing 20-14 will compile but doesn’t create any threads yet.
+We’ve changed the definition of `ThreadPool` to hold a vector of
+`thread::JoinHandle<()>` instances, initialized the vector with a capacity of
+`size`, set up a `for` loop that will run some code to create the threads, and
+returned a `ThreadPool` instance containing them.
+
+Filename: src/lib.rs
+
+```
+[1] use std::thread;
+
+pub struct ThreadPool {
+ [2] threads: Vec<thread::JoinHandle<()>>,
+}
+
+impl ThreadPool {
+ // --snip--
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ [3] let mut threads = Vec::with_capacity(size);
+
+ for _ in 0..size {
+ // create some threads and store them in the vector
+ }
+
+ ThreadPool { threads }
+ }
+ // --snip--
+}
+```
+
+Listing 20-14: Creating a vector for `ThreadPool` to hold the threads
+
+We’ve brought `std::thread` into scope in the library crate [1], because we’re
+using `thread::JoinHandle` as the type of the items in the vector in
+`ThreadPool` [2].
+
+Once a valid size is received, our `ThreadPool` creates a new vector that can
+hold `size` items [3]. The `with_capacity` function performs the same task as
+`Vec::new` but with an important difference: it preallocates space in the
+vector. Because we know we need to store `size` elements in the vector, doing
+this allocation up front is slightly more efficient than using `Vec::new`,
+which resizes itself as elements are inserted.
+
+When you run `cargo check` again, it should succeed.
+
+#### A `Worker` Struct Responsible for Sending Code from the `ThreadPool` to a Thread
+
+We left a comment in the `for` loop in Listing 20-14 regarding the creation of
+threads. Here, we’ll look at how we actually create threads. The standard
+library provides `thread::spawn` as a way to create threads, and
+`thread::spawn` expects to get some code the thread should run as soon as the
+thread is created. However, in our case, we want to create the threads and have
+them *wait* for code that we’ll send later. The standard library’s
+implementation of threads doesn’t include any way to do that; we have to
+implement it manually.
+
+We’ll implement this behavior by introducing a new data structure between the
+`ThreadPool` and the threads that will manage this new behavior. We’ll call
+this data structure *Worker*, which is a common term in pooling
+implementations. The Worker picks up code that needs to be run and runs the
+code in the Worker’s thread.
+
+Think of people working in the kitchen at a restaurant: the
+workers wait until orders come in from customers, and then they’re responsible
+for taking those orders and filling them.
+
+Instead of storing a vector of `JoinHandle<()>` instances in the thread pool,
+we’ll store instances of the `Worker` struct. Each `Worker` will store a single
+`JoinHandle<()>` instance. Then we’ll implement a method on `Worker` that will
+take a closure of code to run and send it to the already running thread for
+execution. We’ll also give each worker an `id` so we can distinguish between
+the different workers in the pool when logging or debugging.
+
+Here is the new process that will happen when we create a `ThreadPool`. We’ll
+implement the code that sends the closure to the thread after we have `Worker`
+set up in this way:
+
+1. Define a `Worker` struct that holds an `id` and a `JoinHandle<()>`.
+2. Change `ThreadPool` to hold a vector of `Worker` instances.
+3. Define a `Worker::new` function that takes an `id` number and returns a
+ `Worker` instance that holds the `id` and a thread spawned with an empty
+ closure.
+4. In `ThreadPool::new`, use the `for` loop counter to generate an `id`, create
+ a new `Worker` with that `id`, and store the worker in the vector.
+
+If you’re up for a challenge, try implementing these changes on your own before
+looking at the code in Listing 20-15.
+
+Ready? Here is Listing 20-15 with one way to make the preceding modifications.
+
+Filename: src/lib.rs
+
+```
+use std::thread;
+
+pub struct ThreadPool {
+ [1] workers: Vec<Worker>,
+}
+
+impl ThreadPool {
+ // --snip--
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let mut workers = Vec::with_capacity(size);
+
+ [2] for id in 0..size {
+ [3] workers.push(Worker::new(id));
+ }
+
+ ThreadPool { workers }
+ }
+ // --snip--
+}
+
+[4] struct Worker {
+ id: usize,
+ thread: thread::JoinHandle<()>,
+}
+
+impl Worker {
+ [5] fn new(id: usize) -> Worker {
+ [6] let thread = thread::spawn(|| {});
+
+ Worker { [7] id, [8] thread }
+ }
+}
+```
+
+<!-- Spawning a thread in the constructor isn't safe to do as the spawn
+of the thread may fail. You can use
+https://doc.rust-lang.org/std/thread/struct.Builder.html#method.spawn
+to be better protected against running out of resources. This should
+probably not live in the constructor, but instead in some helper function
+that can return a Result. /JT -->
+<!-- I've added a note in a few paragraphs. I think this behavior is perfectly
+fine for this example so I'm not going to change the code, but it is something
+readers should know. /Carol -->
+
+Listing 20-15: Modifying `ThreadPool` to hold `Worker` instances instead of
+holding threads directly
+
+We’ve changed the name of the field on `ThreadPool` from `threads` to `workers`
+because it’s now holding `Worker` instances instead of `JoinHandle<()>`
+instances [1]. We use the counter in the `for` loop [2] as an argument to
+`Worker::new`, and we store each new `Worker` in the vector named `workers` [3].
+
+External code (like our server in *src/main.rs*) doesn’t need to know the
+implementation details regarding using a `Worker` struct within `ThreadPool`,
+so we make the `Worker` struct [4] and its `new` function [5] private. The
+`Worker::new` function uses the `id` we give it [7] and stores a
+`JoinHandle<()>` instance [8] that is created by spawning a new thread using an
+empty closure [6].
+
+> Note: If the operating system can’t create a thread because there aren’t
+> enough system resources, `thread::spawn` will panic. That will cause our
+> whole server to panic, even though the creation of some threads might
+> succeed. For simplicity’s sake, this behavior is fine, but in a production
+> thread pool implementation, you’d likely want to use `std::thread::Builder`
+> and its `spawn` method that returns `Result` instead.
+
+This code will compile and will store the number of `Worker` instances we
+specified as an argument to `ThreadPool::new`. But we’re *still* not processing
+the closure that we get in `execute`. Let’s look at how to do that next.
+
+#### Sending Requests to Threads via Channels
+
+The next problem we’ll tackle is that the closures given to `thread::spawn` do
+absolutely nothing. Currently, we get the closure we want to execute in the
+`execute` method. But we need to give `thread::spawn` a closure to run when we
+create each `Worker` during the creation of the `ThreadPool`.
+
+We want the `Worker` structs that we just created to fetch the code to run from
+a queue held in the `ThreadPool` and send that code to its thread to run.
+
+The channels we learned about in Chapter 16—a simple way to communicate between
+two threads—would be perfect for this use case. We’ll use a channel to function
+as the queue of jobs, and `execute` will send a job from the `ThreadPool` to
+the `Worker` instances, which will send the job to its thread. Here is the plan:
+
+1. The `ThreadPool` will create a channel and hold on to the sender.
+2. Each `Worker` will hold on to the receiver.
+3. We’ll create a new `Job` struct that will hold the closures we want to send
+ down the channel.
+4. The `execute` method will send the job it wants to execute through the
+ sender.
+5. In its thread, the `Worker` will loop over its receiver and execute the
+ closures of any jobs it receives.
+
+Let’s start by creating a channel in `ThreadPool::new` and holding the sender
+in the `ThreadPool` instance, as shown in Listing 20-16. The `Job` struct
+doesn’t hold anything for now but will be the type of item we’re sending down
+the channel.
+
+Filename: src/lib.rs
+
+```
+use std::{sync::mpsc, thread};
+
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: mpsc::Sender<Job>,
+}
+
+struct Job;
+
+impl ThreadPool {
+ // --snip--
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ [1] let (sender, receiver) = mpsc::channel();
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id));
+ }
+
+ ThreadPool { workers, [2] sender }
+ }
+ // --snip--
+}
+```
+
+Listing 20-16: Modifying `ThreadPool` to store the sender of a channel that
+transmits `Job` instances
+
+In `ThreadPool::new`, we create our new channel [1] and have the pool hold the
+sender [2]. This will successfully compile.
+
+Let’s try passing a receiver of the channel into each worker as the thread pool
+creates the channel. We know we want to use the receiver in the thread that the
+workers spawn, so we’ll reference the `receiver` parameter in the closure. The
+code in Listing 20-17 won’t quite compile yet.
+
+Filename: src/lib.rs
+
+```
+impl ThreadPool {
+ // --snip--
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ [1] workers.push(Worker::new(id, receiver));
+ }
+
+ ThreadPool { workers, sender }
+ }
+ // --snip--
+}
+
+// --snip--
+
+impl Worker {
+ fn new(id: usize, receiver: mpsc::Receiver<Job>) -> Worker {
+ let thread = thread::spawn(|| {
+ [2] receiver;
+ });
+
+ Worker { id, thread }
+ }
+}
+```
+
+Listing 20-17: Passing the receiver to the workers
+
+We’ve made some small and straightforward changes: we pass the receiver into
+`Worker::new` [1], and then we use it inside the closure [2].
+
+When we try to check this code, we get this error:
+
+```
+$ cargo check
+ Checking hello v0.1.0 (file:///projects/hello)
+error[E0382]: use of moved value: `receiver`
+ --> src/lib.rs:27:42
+ |
+22 | let (sender, receiver) = mpsc::channel();
+ | -------- move occurs because `receiver` has type `std::sync::mpsc::Receiver<Job>`, which does not implement the `Copy` trait
+...
+27 | workers.push(Worker::new(id, receiver));
+ | ^^^^^^^^ value moved here, in previous iteration of loop
+```
+
+The code is trying to pass `receiver` to multiple `Worker` instances. This
+won’t work, as you’ll recall from Chapter 16: the channel implementation that
+Rust provides is multiple *producer*, single *consumer*. This means we can’t
+just clone the consuming end of the channel to fix this code. We also don’t
+want to send a message multiple times to multiple consumers; we want one list
+of messages with multiple workers such that each message gets processed once.
+
+Additionally, taking a job off the channel queue involves mutating the
+`receiver`, so the threads need a safe way to share and modify `receiver`;
+otherwise, we might get race conditions (as covered in Chapter 16).
+
+Recall the thread-safe smart pointers discussed in Chapter 16: to share
+ownership across multiple threads and allow the threads to mutate the value, we
+need to use `Arc<Mutex<T>>`. The `Arc` type will let multiple workers own the
+receiver, and `Mutex` will ensure that only one worker gets a job from the
+receiver at a time. Listing 20-18 shows the changes we need to make.
+
+Filename: src/lib.rs
+
+```
+use std::{
+ sync::{mpsc, Arc, Mutex},
+ thread,
+};
+// --snip--
+
+impl ThreadPool {
+ // --snip--
+ pub fn new(size: usize) -> ThreadPool {
+ assert!(size > 0);
+
+ let (sender, receiver) = mpsc::channel();
+
+ [1] let receiver = Arc::new(Mutex::new(receiver));
+
+ let mut workers = Vec::with_capacity(size);
+
+ for id in 0..size {
+ workers.push(Worker::new(id, Arc::clone(&receiver)[2]));
+ }
+
+ ThreadPool { workers, sender }
+ }
+
+ // --snip--
+}
+
+// --snip--
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ // --snip--
+ }
+}
+```
+
+Listing 20-18: Sharing the receiver among the workers using `Arc` and `Mutex`
+
+In `ThreadPool::new`, we put the receiver in an `Arc` and a `Mutex` [1]. For
+each new worker, we clone the `Arc` to bump the reference count so the workers
+can share ownership of the receiver [2].
+
+With these changes, the code compiles! We’re getting there!
+
+#### Implementing the `execute` Method
+
+Let’s finally implement the `execute` method on `ThreadPool`. We’ll also change
+`Job` from a struct to a type alias for a trait object that holds the type of
+closure that `execute` receives. As discussed in the “Creating Type Synonyms
+with Type Aliases” section of Chapter 19, type aliases allow us to make long
+types shorter for ease of use. Look at Listing 20-19.
+
+Filename: src/lib.rs
+
+```
+// --snip--
+
+type Job = Box<dyn FnOnce() + Send + 'static>;
+
+impl ThreadPool {
+ // --snip--
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ [1] let job = Box::new(f);
+
+ [2] self.sender.send(job).unwrap();
+ }
+}
+
+// --snip--
+```
+
+Listing 20-19: Creating a `Job` type alias for a `Box` that holds each closure
+and then sending the job down the channel
+
+After creating a new `Job` instance using the closure we get in `execute` [1],
+we send that job down the sending end of the channel [2]. We’re calling
+`unwrap` on `send` for the case that sending fails. This might happen if, for
+example, we stop all our threads from executing, meaning the receiving end has
+stopped receiving new messages. At the moment, we can’t stop our threads from
+executing: our threads continue executing as long as the pool exists. The
+reason we use `unwrap` is that we know the failure case won’t happen, but the
+compiler doesn’t know that.
+
+But we’re not quite done yet! In the worker, our closure being passed to
+`thread::spawn` still only *references* the receiving end of the channel.
+Instead, we need the closure to loop forever, asking the receiving end of the
+channel for a job and running the job when it gets one. Let’s make the change
+shown in Listing 20-20 to `Worker::new`.
+
+Filename: src/lib.rs
+
+```
+// --snip--
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ let job = receiver.lock()[1].unwrap()[2].recv()[3].unwrap()[4];
+
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ });
+
+ Worker { id, thread }
+ }
+}
+```
+
+Listing 20-20: Receiving and executing the jobs in the worker’s thread
+
+Here, we first call `lock` on the `receiver` to acquire the mutex [1], and then
+we call `unwrap` to panic on any errors [2]. Acquiring a lock might fail if the
+mutex is in a *poisoned* state, which can happen if some other thread panicked
+while holding the lock rather than releasing the lock. In this situation,
+calling `unwrap` to have this thread panic is the correct action to take. Feel
+free to change this `unwrap` to an `expect` with an error message that is
+meaningful to you.
+
+If we get the lock on the mutex, we call `recv` to receive a `Job` from the
+channel [3]. A final `unwrap` moves past any errors here as well [4], which
+might occur if the thread holding the sender has shut down, similar to how the
+`send` method returns `Err` if the receiver shuts down.
+
+The call to `recv` blocks, so if there is no job yet, the current thread will
+wait until a job becomes available. The `Mutex<T>` ensures that only one
+`Worker` thread at a time is trying to request a job.
+
+Our thread pool is now in a working state! Give it a `cargo run` and make some
+requests:
+
+```
+$ cargo run
+ Compiling hello v0.1.0 (file:///projects/hello)
+warning: field is never read: `workers`
+ --> src/lib.rs:7:5
+ |
+7 | workers: Vec<Worker>,
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(dead_code)]` on by default
+
+warning: field is never read: `id`
+ --> src/lib.rs:48:5
+ |
+48 | id: usize,
+ | ^^^^^^^^^
+
+warning: field is never read: `thread`
+ --> src/lib.rs:49:5
+ |
+49 | thread: thread::JoinHandle<()>,
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: `hello` (lib) generated 3 warnings
+ Finished dev [unoptimized + debuginfo] target(s) in 1.40s
+ Running `target/debug/hello`
+Worker 0 got a job; executing.
+Worker 2 got a job; executing.
+Worker 1 got a job; executing.
+Worker 3 got a job; executing.
+Worker 0 got a job; executing.
+Worker 2 got a job; executing.
+Worker 1 got a job; executing.
+Worker 3 got a job; executing.
+Worker 0 got a job; executing.
+Worker 2 got a job; executing.
+```
+
+Success! We now have a thread pool that executes connections asynchronously.
+There are never more than four threads created, so our system won’t get
+overloaded if the server receives a lot of requests. If we make a request to
+*/sleep*, the server will be able to serve other requests by having another
+thread run them.
+
+> Note: if you open */sleep* in multiple browser windows simultaneously, they
+> might load one at a time in 5 second intervals. Some web browsers execute
+> multiple instances of the same request sequentially for caching reasons. This
+> limitation is not caused by our web server.
+
+After learning about the `while let` loop in Chapter 18, you might be wondering
+why we didn’t write the worker thread code as shown in Listing 20-21.
+
+Filename: src/lib.rs
+
+```
+// --snip--
+
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || {
+ while let Ok(job) = receiver.lock().unwrap().recv() {
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ }
+ });
+
+ Worker { id, thread }
+ }
+}
+```
+
+Listing 20-21: An alternative implementation of `Worker::new` using `while let`
+
+This code compiles and runs but doesn’t result in the desired threading
+behavior: a slow request will still cause other requests to wait to be
+processed. The reason is somewhat subtle: the `Mutex` struct has no public
+`unlock` method because the ownership of the lock is based on the lifetime of
+the `MutexGuard<T>` within the `LockResult<MutexGuard<T>>` that the `lock`
+method returns. At compile time, the borrow checker can then enforce the rule
+that a resource guarded by a `Mutex` cannot be accessed unless we hold the
+lock. However, this implementation can also result in the lock being held
+longer than intended if we aren’t mindful of the lifetime of the
+`MutexGuard<T>`.
+
+The code in Listing 20-20 that uses `let job =
+receiver.lock().unwrap().recv().unwrap();` works because with `let`, any
+temporary values used in the expression on the right hand side of the equals
+sign are immediately dropped when the `let` statement ends. However, `while
+let` (and `if let` and `match`) does not drop temporary values until the end of
+the associated block. In Listing 20-21, the lock remains held for the duration
+of the call to `job()`, meaning other workers cannot receive jobs.
+
+## Graceful Shutdown and Cleanup
+
+The code in Listing 20-20 is responding to requests asynchronously through the
+use of a thread pool, as we intended. We get some warnings about the `workers`,
+`id`, and `thread` fields that we’re not using in a direct way that reminds us
+we’re not cleaning up anything. When we use the less elegant <span
+class="keystroke">ctrl-c</span> method to halt the main thread, all other
+threads are stopped immediately as well, even if they’re in the middle of
+serving a request.
+
+Next, then, we’ll implement the `Drop` trait to call `join` on each of the
+threads in the pool so they can finish the requests they’re working on before
+closing. Then we’ll implement a way to tell the threads they should stop
+accepting new requests and shut down. To see this code in action, we’ll modify
+our server to accept only two requests before gracefully shutting down its
+thread pool.
+
+### Implementing the `Drop` Trait on `ThreadPool`
+
+Let’s start with implementing `Drop` on our thread pool. When the pool is
+dropped, our threads should all join to make sure they finish their work.
+Listing 20-22 shows a first attempt at a `Drop` implementation; this code won’t
+quite work yet.
+
+Filename: src/lib.rs
+
+```
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ [1] for worker in &mut self.workers {
+ [2] println!("Shutting down worker {}", worker.id);
+
+ [3] worker.thread.join().unwrap();
+ }
+ }
+}
+```
+
+Listing 20-22: Joining each thread when the thread pool goes out of scope
+
+First, we loop through each of the thread pool `workers` [1]. We use `&mut` for
+this because `self` is a mutable reference, and we also need to be able to
+mutate `worker`. For each worker, we print a message saying that this
+particular worker is shutting down [2], and then we call `join` on that
+worker’s thread [3]. If the call to `join` fails, we use `unwrap` to make Rust
+panic and go into an ungraceful shutdown.
+
+Here is the error we get when we compile this code:
+
+```
+error[E0507]: cannot move out of `worker.thread` which is behind a mutable reference
+ --> src/lib.rs:52:13
+ |
+52 | worker.thread.join().unwrap();
+ | ^^^^^^^^^^^^^ move occurs because `worker.thread` has type `JoinHandle<()>`, which does not implement the `Copy` trait
+```
+
+The error tells us we can’t call `join` because we only have a mutable borrow
+of each `worker` and `join` takes ownership of its argument. To solve this
+issue, we need to move the thread out of the `Worker` instance that owns
+`thread` so `join` can consume the thread. We did this in Listing 17-15: if
+`Worker` holds an `Option<thread::JoinHandle<()>>` instead, we can call the
+`take` method on the `Option` to move the value out of the `Some` variant and
+leave a `None` variant in its place. In other words, a `Worker` that is running
+will have a `Some` variant in `thread`, and when we want to clean up a
+`Worker`, we’ll replace `Some` with `None` so the `Worker` doesn’t have a
+thread to run.
+
+So we know we want to update the definition of `Worker` like this:
+
+Filename: src/lib.rs
+
+```
+struct Worker {
+ id: usize,
+ thread: Option<thread::JoinHandle<()>>,
+}
+```
+
+Now let’s lean on the compiler to find the other places that need to change.
+Checking this code, we get two errors:
+
+```
+error[E0599]: no method named `join` found for enum `Option` in the current scope
+ --> src/lib.rs:52:27
+ |
+52 | worker.thread.join().unwrap();
+ | ^^^^ method not found in `Option<JoinHandle<()>>`
+
+error[E0308]: mismatched types
+ --> src/lib.rs:72:22
+ |
+72 | Worker { id, thread }
+ | ^^^^^^ expected enum `Option`, found struct `JoinHandle`
+ |
+ = note: expected enum `Option<JoinHandle<()>>`
+ found struct `JoinHandle<_>`
+help: try wrapping the expression in `Some`
+ |
+72 | Worker { id, Some(thread) }
+ | +++++ +
+```
+
+Let’s address the second error, which points to the code at the end of
+`Worker::new`; we need to wrap the `thread` value in `Some` when we create a
+new `Worker`. Make the following changes to fix this error:
+
+Filename: src/lib.rs
+
+```
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ // --snip--
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
+```
+
+The first error is in our `Drop` implementation. We mentioned earlier that we
+intended to call `take` on the `Option` value to move `thread` out of `worker`.
+The following changes will do so:
+
+Filename: src/lib.rs
+
+```
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ [1] if let Some(thread) = worker.thread.take() {
+ [2] thread.join().unwrap();
+ }
+ }
+ }
+}
+```
+
+As discussed in Chapter 17, the `take` method on `Option` takes the `Some`
+variant out and leaves `None` in its place. We’re using `if let` to destructure
+the `Some` and get the thread [1]; then we call `join` on the thread [2]. If a
+worker’s thread is already `None`, we know that worker has already had its
+thread cleaned up, so nothing happens in that case.
+
+### Signaling to the Threads to Stop Listening for Jobs
+
+With all the changes we’ve made, our code compiles without any warnings.
+However, the bad news is this code doesn’t function the way we want it to yet.
+The key is the logic in the closures run by the threads of the `Worker`
+instances: at the moment, we call `join`, but that won’t shut down the threads
+because they `loop` forever looking for jobs. If we try to drop our
+`ThreadPool` with our current implementation of `drop`, the main thread will
+block forever waiting for the first thread to finish.
+
+To fix this problem, we’ll need a change in the the `ThreadPool` `drop`
+implementation and then a change in the `Worker` loop.
+
+First, we’ll change the `ThreadPool` `drop` implementation to explicitly drop
+the `sender` before waiting for the threads to finish. Listing 20-23 shows the
+changes to `ThreadPool` to explicitly drop `sender`. We use the same `Option`
+and `take` technique as we did with the thread to be able to move `sender` out
+of `ThreadPool`:
+
+Filename: src/lib.rs
+
+```
+pub struct ThreadPool {
+ workers: Vec<Worker>,
+ sender: Option<mpsc::Sender<Job>>,
+}
+// --snip--
+impl ThreadPool {
+ pub fn new(size: usize) -> ThreadPool {
+ // --snip--
+
+ ThreadPool {
+ workers,
+ sender: Some(sender),
+ }
+ }
+
+ pub fn execute<F>(&self, f: F)
+ where
+ F: FnOnce() + Send + 'static,
+ {
+ let job = Box::new(f);
+
+ self.sender.as_ref().unwrap().send(job).unwrap();
+ }
+}
+
+impl Drop for ThreadPool {
+ fn drop(&mut self) {
+ [1] drop(self.sender.take());
+
+ for worker in &mut self.workers {
+ println!("Shutting down worker {}", worker.id);
+
+ if let Some(thread) = worker.thread.take() {
+ thread.join().unwrap();
+ }
+ }
+ }
+}
+```
+
+Listing 20-23: Explicitly drop `sender` before joining the worker threads
+
+Dropping `sender` [1] closes the channel, which indicates no more messages will
+be sent. When that happens, all the calls to `recv` that the workers do in the
+infinite loop will return an error. In Listing 20-24, we change the `Worker`
+loop to gracefully exit the loop in that case, which means the threads will
+finish when the `ThreadPool` `drop` implementation calls `join` on them.
+
+Filename: src/lib.rs
+
+```
+impl Worker {
+ fn new(id: usize, receiver: Arc<Mutex<mpsc::Receiver<Job>>>) -> Worker {
+ let thread = thread::spawn(move || loop {
+ match receiver.lock().unwrap().recv() {
+ Ok(job) => {
+ println!("Worker {id} got a job; executing.");
+
+ job();
+ }
+ Err(_) => {
+ println!("Worker {id} disconnected; shutting down.");
+ break;
+ }
+ }
+ });
+
+ Worker {
+ id,
+ thread: Some(thread),
+ }
+ }
+}
+```
+
+Listing 20-24: Explicitly break out of the loop when `recv` returns an error
+
+To see this code in action, let’s modify `main` to accept only two requests
+before gracefully shutting down the server, as shown in Listing 20-25.
+
+Filename: src/main.rs
+
+```
+fn main() {
+ let listener = TcpListener::bind("127.0.0.1:7878").unwrap();
+ let pool = ThreadPool::new(4);
+
+ for stream in listener.incoming().take(2) {
+ let stream = stream.unwrap();
+
+ pool.execute(|| {
+ handle_connection(stream);
+ });
+ }
+
+ println!("Shutting down.");
+}
+```
+
+Listing 20-25: Shut down the server after serving two requests by exiting the
+loop
+
+You wouldn’t want a real-world web server to shut down after serving only two
+requests. This code just demonstrates that the graceful shutdown and cleanup is
+in working order.
+
+The `take` method is defined in the `Iterator` trait and limits the iteration
+to the first two items at most. The `ThreadPool` will go out of scope at the
+end of `main`, and the `drop` implementation will run.
+
+Start the server with `cargo run`, and make three requests. The third request
+should error, and in your terminal you should see output similar to this:
+
+```
+$ cargo run
+ Compiling hello v0.1.0 (file:///projects/hello)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.0s
+ Running `target/debug/hello`
+Worker 0 got a job; executing.
+Shutting down.
+Shutting down worker 0
+Worker 3 got a job; executing.
+Worker 1 disconnected; shutting down.
+Worker 2 disconnected; shutting down.
+Worker 3 disconnected; shutting down.
+Worker 0 disconnected; shutting down.
+Shutting down worker 1
+Shutting down worker 2
+Shutting down worker 3
+```
+
+You might see a different ordering of workers and messages printed. We can see
+how this code works from the messages: workers 0 and 3 got the first two
+requests. The server stopped accepting connections after the second connection,
+and the `Drop` implementation on `ThreadPool` starts executing before worker 3
+even starts its job. Dropping the `sender` disconnects all the workers and
+tells them to shut down. The workers each print a message when they disconnect,
+and then the thread pool calls `join` to wait for each worker thread to finish.
+
+Notice one interesting aspect of this particular execution: the `ThreadPool`
+dropped the `sender`, and before any worker received an error, we tried to join
+worker 0. Worker 0 had not yet gotten an error from `recv`, so the main thread
+blocked waiting for worker 0 to finish. In the meantime, worker 3 received a
+job and then all threads received an error. When worker 0 finished, the main
+thread waited for the rest of the workers to finish. At that point, they had
+all exited their loops and stopped.
+
+Congrats! We’ve now completed our project; we have a basic web server that uses
+a thread pool to respond asynchronously. We’re able to perform a graceful
+shutdown of the server, which cleans up all the threads in the pool. See
+*https://www.nostarch.com/Rust2021/* to download the full code for this chapter
+for reference.
+
+We could do more here! If you want to continue enhancing this project, here are
+some ideas:
+
+* Add more documentation to `ThreadPool` and its public methods.
+* Add tests of the library’s functionality.
+* Change calls to `unwrap` to more robust error handling.
+* Use `ThreadPool` to perform some task other than serving web requests.
+* Find a thread pool crate on *https://crates.io/* and implement a similar web
+ server using the crate instead. Then compare its API and robustness to the
+ thread pool we implemented.
+
+## Summary
+
+Well done! You’ve made it to the end of the book! We want to thank you for
+joining us on this tour of Rust. You’re now ready to implement your own Rust
+projects and help with other peoples’ projects. Keep in mind that there is a
+welcoming community of other Rustaceans who would love to help you with any
+challenges you encounter on your Rust journey.
diff --git a/src/doc/book/nostarch/foreword.md b/src/doc/book/nostarch/foreword.md
new file mode 100644
index 000000000..2265e2714
--- /dev/null
+++ b/src/doc/book/nostarch/foreword.md
@@ -0,0 +1,41 @@
+# Foreword
+
+It wasn’t always so clear, but the Rust programming language is fundamentally
+about *empowerment*: no matter what kind of code you are writing now, Rust
+empowers you to reach farther, to program with confidence in a wider variety of
+domains than you did before.
+
+Take, for example, “systems-level” work that deals with low-level details of
+memory management, data representation, and concurrency. Traditionally, this
+realm of programming is seen as arcane, accessible only to a select few who
+have devoted the necessary years learning to avoid its infamous pitfalls. And
+even those who practice it do so with caution, lest their code be open to
+exploits, crashes, or corruption.
+
+Rust breaks down these barriers by eliminating the old pitfalls and providing a
+friendly, polished set of tools to help you along the way. Programmers who need
+to “dip down” into lower-level control can do so with Rust, without taking on
+the customary risk of crashes or security holes, and without having to learn
+the fine points of a fickle toolchain. Better yet, the language is designed to
+guide you naturally towards reliable code that is efficient in terms of speed
+and memory usage.
+
+Programmers who are already working with low-level code can use Rust to raise
+their ambitions. For example, introducing parallelism in Rust is a relatively
+low-risk operation: the compiler will catch the classical mistakes for you. And
+you can tackle more aggressive optimizations in your code with the confidence
+that you won’t accidentally introduce crashes or vulnerabilities.
+
+But Rust isn’t limited to low-level systems programming. It’s expressive and
+ergonomic enough to make CLI apps, web servers, and many other kinds of code
+quite pleasant to write — you’ll find simple examples of both later in the
+book. Working with Rust allows you to build skills that transfer from one
+domain to another; you can learn Rust by writing a web app, then apply those
+same skills to target your Raspberry Pi.
+
+This book fully embraces the potential of Rust to empower its users. It’s a
+friendly and approachable text intended to help you level up not just your
+knowledge of Rust, but also your reach and confidence as a programmer in
+general. So dive in, get ready to learn—and welcome to the Rust community!
+
+— Nicholas Matsakis and Aaron Turon
diff --git a/src/doc/book/nostarch/introduction.md b/src/doc/book/nostarch/introduction.md
new file mode 100644
index 000000000..b3ff9b111
--- /dev/null
+++ b/src/doc/book/nostarch/introduction.md
@@ -0,0 +1,191 @@
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+
+# Introduction
+
+Welcome to *The Rust Programming Language*, an introductory book about Rust.
+The Rust programming language helps you write faster, more reliable software.
+High-level ergonomics and low-level control are often at odds in programming
+language design; Rust challenges that conflict. Through balancing powerful
+technical capacity and a great developer experience, Rust gives you the option
+to control low-level details (such as memory usage) without all the hassle
+traditionally associated with such control.
+
+## Who Rust Is For
+
+Rust is ideal for many people for a variety of reasons. Let’s look at a few of
+the most important groups.
+
+### Teams of Developers
+
+Rust is proving to be a productive tool for collaborating among large teams of
+developers with varying levels of systems programming knowledge. Low-level code
+is prone to various subtle bugs, which in most other languages can be caught
+only through extensive testing and careful code review by experienced
+developers. In Rust, the compiler plays a gatekeeper role by refusing to
+compile code with these elusive bugs, including concurrency bugs. By working
+alongside the compiler, the team can spend their time focusing on the program’s
+logic rather than chasing down bugs.
+
+Rust also brings contemporary developer tools to the systems programming world:
+
+* Cargo, the included dependency manager and build tool, makes adding,
+ compiling, and managing dependencies painless and consistent across the Rust
+ ecosystem.
+* The Rustfmt formatting tool ensures a consistent coding style across
+ developers.
+* The Rust Language Server powers Integrated Development Environment (IDE)
+ integration for code completion and inline error messages.
+
+By using these and other tools in the Rust ecosystem, developers can be
+productive while writing systems-level code.
+
+### Students
+
+Rust is for students and those who are interested in learning about systems
+concepts. Using Rust, many people have learned about topics like operating
+systems development. The community is very welcoming and happy to answer
+student questions. Through efforts such as this book, the Rust teams want to
+make systems concepts more accessible to more people, especially those new to
+programming.
+
+### Companies
+
+Hundreds of companies, large and small, use Rust in production for a variety of
+tasks, including command line tools, web services, DevOps tooling, embedded
+devices, audio and video analysis and transcoding, cryptocurrencies,
+bioinformatics, search engines, Internet of Things applications, machine
+learning, and even major parts of the Firefox web browser.
+
+<!-- with Rust adopted in a lot of really recognizable names, is it worth
+namedropping some companies that use Rust significantly? /LC -->
+<!-- No, I don't want to show favoritism, and there are lots of politics around
+the big companies using Rust that I don't want to get into. I would also worry
+about the list getting dated. /Carol -->
+
+### Open Source Developers
+
+Rust is for people who want to build the Rust programming language, community,
+developer tools, and libraries. We’d love to have you contribute to the Rust
+language.
+
+### People Who Value Speed and Stability
+
+Rust is for people who crave speed and stability in a language. By speed, we
+mean both how quickly Rust code can run and the speed at which Rust lets you
+write programs. The Rust compiler’s checks ensure stability through feature
+additions and refactoring. This is in contrast to the brittle legacy code in
+languages without these checks, which developers are often afraid to modify. By
+striving for zero-cost abstractions, higher-level features that compile to
+lower-level code as fast as code written manually, Rust endeavors to make safe
+code be fast code as well.
+
+The Rust language hopes to support many other users as well; those mentioned
+here are merely some of the biggest stakeholders. Overall, Rust’s greatest
+ambition is to eliminate the trade-offs that programmers have accepted for
+decades by providing safety *and* productivity, speed *and* ergonomics. Give
+Rust a try and see if its choices work for you.
+
+## Who This Book Is For
+
+This book assumes that you’ve written code in another programming language but
+doesn’t make any assumptions about which one. We’ve tried to make the material
+broadly accessible to those from a wide variety of programming backgrounds. We
+don’t spend a lot of time talking about what programming *is* or how to think
+about it. If you’re entirely new to programming, you would be better served by
+reading a book that specifically provides an introduction to programming.
+
+## How to Use This Book
+
+In general, this book assumes that you’re reading it in sequence from front to
+back. Later chapters build on concepts in earlier chapters, and earlier
+chapters might not delve into details on a particular topic but will revisit
+the topic in a later chapter.
+
+You’ll find two kinds of chapters in this book: concept chapters and project
+chapters. In concept chapters, you’ll learn about an aspect of Rust. In project
+chapters, we’ll build small programs together, applying what you’ve learned so
+far. Chapters 2, 12, and 20 are project chapters; the rest are concept chapters.
+
+Chapter 1 explains how to install Rust, how to write a “Hello, world!” program,
+and how to use Cargo, Rust’s package manager and build tool. Chapter 2 is a
+hands-on introduction to writing a program in Rust, having you build up a
+number guessing game. Here we cover concepts at a high level, and later
+chapters will provide additional detail. If you want to get your hands dirty
+right away, Chapter 2 is the place for that. Chapter 3 covers Rust features
+that are similar to those of other programming languages, and in Chapter 4
+you'll learn about Rust’s ownership system. If you’re a particularly meticulous
+learner who prefers to learn every detail before moving on to the next, you
+might want to skip Chapter 2 and go straight to Chapter 3, returning to Chapter
+2 when you’d like to work on a project applying the details you’ve learned.
+
+Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match`
+expressions, and the `if let` control flow construct. You’ll use structs and
+enums to make custom types in Rust.
+
+In Chapter 7, you’ll learn about Rust’s module system and about privacy rules
+for organizing your code and its public Application Programming Interface
+(API). Chapter 8 discusses some common collection data structures that the
+standard library provides, such as vectors, strings, and hash maps. Chapter 9
+explores Rust’s error-handling philosophy and techniques.
+
+Chapter 10 digs into generics, traits, and lifetimes, which give you the power
+to define code that applies to multiple types. Chapter 11 is all about testing,
+which even with Rust’s safety guarantees is necessary to ensure your program’s
+logic is correct. In Chapter 12, we’ll build our own implementation of a subset
+of functionality from the `grep` command line tool that searches for text
+within files. For this, we’ll use many of the concepts we discussed in the
+previous chapters.
+
+Chapter 13 explores closures and iterators: features of Rust that come from
+functional programming languages. In Chapter 14, we’ll examine Cargo in more
+depth and talk about best practices for sharing your libraries with others.
+Chapter 15 discusses smart pointers that the standard library provides and the
+traits that enable their functionality.
+
+In Chapter 16, we’ll walk through different models of concurrent programming
+and talk about how Rust helps you to program in multiple threads fearlessly.
+Chapter 17 looks at how Rust idioms compare to object-oriented programming
+principles you might be familiar with.
+
+Chapter 18 is a reference on patterns and pattern matching, which are powerful
+ways of expressing ideas throughout Rust programs. Chapter 19 contains a
+smorgasbord of advanced topics of interest, including unsafe Rust, macros, and
+more about lifetimes, traits, types, functions, and closures.
+
+In Chapter 20, we’ll complete a project in which we’ll implement a low-level
+multithreaded web server!
+
+Finally, some appendices contain useful information about the language in a
+more reference-like format. Appendix A covers Rust’s keywords, Appendix B
+covers Rust’s operators and symbols, Appendix C covers derivable traits
+provided by the standard library, Appendix D covers some useful development
+tools, and Appendix E explains Rust editions.
+
+There is no wrong way to read this book: if you want to skip ahead, go for it!
+You might have to jump back to earlier chapters if you experience any
+confusion. But do whatever works for you.
+
+An important part of the process of learning Rust is learning how to read the
+error messages the compiler displays: these will guide you toward working code.
+As such, we’ll provide many examples that don’t compile along with the error
+message the compiler will show you in each situation. Know that if you enter
+and run a random example, it may not compile! Make sure you read the
+surrounding text to see whether the example you’re trying to run is meant to
+error. In most situations, we’ll lead you to the correct version of any code
+that doesn’t compile.
+
+## Resources and How to Contribute to This Book
+
+This book is open source. If you find an error, please don't hesitate to file
+an issue or send a pull request on GitHub at
+*https://github.com/rust-lang/book/*. Please see *CONTRIBUTING.md* at
+*https://github.com/rust-lang/book/blob/main/CONTRIBUTING.md* for more details.
+
+The source code for the examples in this book, errata, and other information
+are available at *https://www.nostarch.com/Rust2021/*.
diff --git a/src/doc/book/nostarch/preface.md b/src/doc/book/nostarch/preface.md
new file mode 100644
index 000000000..5ec239151
--- /dev/null
+++ b/src/doc/book/nostarch/preface.md
@@ -0,0 +1,22 @@
+# Preface
+
+This version of the text assumes you’re using Rust 1.62.0 (released 2022-06-30)
+or later with edition="2021" in *Cargo.toml* of all projects to use Rust 2021
+Edition idioms. See “Installation” on page 1 to install or update Rust, and see
+Appendix E for information on editions.
+
+The 2021 Edition of the Rust language includes a small number of improvements
+that make Rust more ergonomic and correct some inconsistencies. This rendition
+of the book has a number of improvements to address feedback:
+
+• Chapter 7 contains a new quick reference section on organizing your code into
+multiple files with modules.
+• Chapter 13 has new and improved closure examples that more clearly illustrate
+captures, the `move` keyword, and the `Fn` traits.
+• We fixed a number of small errors and imprecise wording throughout the book.
+Thank you to the readers who reported them!
+
+Note that any code in earlier renditions of this book that compiled will
+continue to compile with the relevant edition in the project’s *Cargo.toml*,
+even as you update the Rust compiler version you’re using. That’s Rust’s
+backward compatibility guarantees at work!
diff --git a/src/doc/book/redirects/README.md b/src/doc/book/redirects/README.md
new file mode 100644
index 000000000..6540e789f
--- /dev/null
+++ b/src/doc/book/redirects/README.md
@@ -0,0 +1,11 @@
+% The Rust Programming Language
+
+There are two editions of "The Rust Programming Language":
+
+* [First edition](first-edition/index.html)
+* [Second edition](second-edition/index.html)
+
+The second edition is a complete re-write. It is still under construction;
+though it is far enough along to learn most of Rust; we suggest reading the
+second edition and then checking out the first edition later to pick up some of
+the more esoteric parts of the language.
diff --git a/src/doc/book/redirects/SUMMARY.md b/src/doc/book/redirects/SUMMARY.md
new file mode 100644
index 000000000..6540e789f
--- /dev/null
+++ b/src/doc/book/redirects/SUMMARY.md
@@ -0,0 +1,11 @@
+% The Rust Programming Language
+
+There are two editions of "The Rust Programming Language":
+
+* [First edition](first-edition/index.html)
+* [Second edition](second-edition/index.html)
+
+The second edition is a complete re-write. It is still under construction;
+though it is far enough along to learn most of Rust; we suggest reading the
+second edition and then checking out the first edition later to pick up some of
+the more esoteric parts of the language.
diff --git a/src/doc/book/redirects/associated-types.md b/src/doc/book/redirects/associated-types.md
new file mode 100644
index 000000000..b222f3298
--- /dev/null
+++ b/src/doc/book/redirects/associated-types.md
@@ -0,0 +1,17 @@
+% Associated Types
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Associated types are a way of associating a type placeholder with a trait such that the trait method definitions can use these placeholder types in their signatures.
+
+```rust
+pub trait Iterator {
+ type Item;
+ fn next(&mut self) -> Option<Self::Item>;
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-03-advanced-traits.html#specifying-placeholder-types-in-trait-definitions-with-associated-types). \ No newline at end of file
diff --git a/src/doc/book/redirects/attributes.md b/src/doc/book/redirects/attributes.md
new file mode 100644
index 000000000..812cbbcd3
--- /dev/null
+++ b/src/doc/book/redirects/attributes.md
@@ -0,0 +1,24 @@
+% Attributes
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Any item declaration may have an attribute applied to it.
+
+```rust
+// A function marked as a unit test
+#[test]
+fn test_foo() {
+ /* ... */
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[In the Rust Reference: Ch 6.5 — Attributes][2]**
+* <small>[In the first edition: Ch 3.27 — Attributes][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/attributes.html
+[2]: ../reference/attributes.html
diff --git a/src/doc/book/redirects/bibliography.md b/src/doc/book/redirects/bibliography.md
new file mode 100644
index 000000000..aca777e39
--- /dev/null
+++ b/src/doc/book/redirects/bibliography.md
@@ -0,0 +1,14 @@
+% Bibliography
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+This page does not exist in [the second edition][2].
+You might be interested in a similar page in [the Rust Reference][3].
+
+* **[In the Rust Reference: Appendix — Influences][3]**
+* <small>[In the first edition: Section 7 — Bibliography][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/bibliography.html
+[2]: index.html
+[3]: ../reference/influences.html
diff --git a/src/doc/book/redirects/borrow-and-asref.md b/src/doc/book/redirects/borrow-and-asref.md
new file mode 100644
index 000000000..6541e59ba
--- /dev/null
+++ b/src/doc/book/redirects/borrow-and-asref.md
@@ -0,0 +1,25 @@
+% Borrow and AsRef
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> A cheap reference-to-reference conversion.
+> Used to convert a value to a reference value within generic code.
+
+```rust
+fn is_hello<T: AsRef<str>>(s: T) {
+ assert_eq!("hello", s.as_ref());
+}
+```
+
+---
+
+This chapter does not exist in [the second edition][2].
+The best place to learn more about this is [the Rust documentation][3].
+
+* **[In the Rust documentation: `convert::AsRef`][3]**
+* <small>[In the first edition: Ch 4.10 — Borrow and AsRef][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/borrow-and-asref.html
+[2]: index.html
+[3]: ../std/convert/trait.AsRef.html
diff --git a/src/doc/book/redirects/casting-between-types.md b/src/doc/book/redirects/casting-between-types.md
new file mode 100644
index 000000000..7e1eb7744
--- /dev/null
+++ b/src/doc/book/redirects/casting-between-types.md
@@ -0,0 +1,32 @@
+% Casting between types
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> A type cast expression is denoted with the binary operator `as`.
+> Executing an `as` expression casts the value on the left-hand side to the type on the right-hand side.
+
+```rust
+# fn sum(values: &[f64]) -> f64 { 0.0 }
+# fn len(values: &[f64]) -> i32 { 0 }
+
+fn average(values: &[f64]) -> f64 {
+ let sum: f64 = sum(values);
+ let size: f64 = len(values) as f64;
+ sum / size
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Appendix A — Keywords][2]**
+* [In the Rust Reference: Type Cast Expressions][3]
+* [In the Rust documentation: `mem::transmute`][4]
+* <small>[In the first edition: Ch 3.29 — Casting between types][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/casting-between-types.html
+[2]: appendix-01-keywords.html
+[3]: ../reference/expressions/operator-expr.html#type-cast-expressions
+[4]: ../std/mem/fn.transmute.html \ No newline at end of file
diff --git a/src/doc/book/redirects/choosing-your-guarantees.md b/src/doc/book/redirects/choosing-your-guarantees.md
new file mode 100644
index 000000000..3667258c6
--- /dev/null
+++ b/src/doc/book/redirects/choosing-your-guarantees.md
@@ -0,0 +1,22 @@
+% Choosing your Guarantees
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Smart pointers are data structures that act like a pointer, but they also have additional metadata and capabilities.
+> The different smart pointers defined in Rust’s standard library provide extra functionality beyond what references provide.
+
+```rust
+let b = Box::new(5);
+println!("b = {}", b);
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[In the current edition: Ch 15.00 — Smart Pointers][2]**
+* <small>[In the first edition: Ch 4.8 — Choosing your Guarantees][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/choosing-your-guarantees.html
+[2]: ch15-00-smart-pointers.html
diff --git a/src/doc/book/redirects/closures.md b/src/doc/book/redirects/closures.md
new file mode 100644
index 000000000..55b88767f
--- /dev/null
+++ b/src/doc/book/redirects/closures.md
@@ -0,0 +1,28 @@
+% Closures
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Anonymous functions you can save in a variable or pass as arguments to other functions.
+
+```rust
+# use std::thread;
+# use std::time::Duration;
+
+let expensive_closure = |num| {
+ println!("calculating slowly...");
+ thread::sleep(Duration::from_secs(2));
+ num
+};
+# expensive_closure(5);
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 13.01 — Closures][2]**
+* <small>[In the first edition: Ch 3.23 — Closures][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/closures.html
+[2]: ch13-01-closures.html
diff --git a/src/doc/book/redirects/comments.md b/src/doc/book/redirects/comments.md
new file mode 100644
index 000000000..d8e94f7e9
--- /dev/null
+++ b/src/doc/book/redirects/comments.md
@@ -0,0 +1,23 @@
+% Comments
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Comments must start with two slashes and continue until the end of the line.
+> For comments that extend beyond a single line, you’ll need to include // on each line.
+
+```rust
+// So we’re doing something complicated here, long enough that we need
+// multiple lines of comments to do it! Whew! Hopefully, this comment will
+// explain what’s going on.
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 3.04 — Comments][2]**
+* <small>[In the first edition: Ch 3.4 — Comments][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/comments.html
+[2]: ch03-04-comments.html
diff --git a/src/doc/book/redirects/compiler-plugins.md b/src/doc/book/redirects/compiler-plugins.md
new file mode 100644
index 000000000..66061adf5
--- /dev/null
+++ b/src/doc/book/redirects/compiler-plugins.md
@@ -0,0 +1,13 @@
+% Compiler Plugins
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Compiler plugins are user-provided libraries that extend the compiler's behavior with new syntax extensions, lint checks, etc.
+
+---
+
+This particular chapter has moved to [the Unstable Book][2].
+
+* **[In the Unstable Rust Book: `plugin`][2]**
+
+[2]: ../unstable-book/language-features/plugin.html
diff --git a/src/doc/book/redirects/concurrency.md b/src/doc/book/redirects/concurrency.md
new file mode 100644
index 000000000..da7fb2fb0
--- /dev/null
+++ b/src/doc/book/redirects/concurrency.md
@@ -0,0 +1,17 @@
+% Concurrency
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Historically, programming [concurrency] has been difficult and error prone: Rust hopes to change that.
+> Fearless concurrency allows you to write code that’s free of subtle bugs and is easy to refactor without introducing new bugs.
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 16.00 — Fearless Concurrency][2]**
+* <small>[In the first edition: Ch 4.6 — Concurrency][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/concurrency.html
+[2]: ch16-00-concurrency.html
diff --git a/src/doc/book/redirects/conditional-compilation.md b/src/doc/book/redirects/conditional-compilation.md
new file mode 100644
index 000000000..b25c02f74
--- /dev/null
+++ b/src/doc/book/redirects/conditional-compilation.md
@@ -0,0 +1,28 @@
+% Conditional Compilation
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Sometimes one wants to have different compiler outputs from the same code, depending on build target, such as targeted operating system, or to enable release builds.
+> Configuration options are either provided by the compiler or passed in on the command line using.
+> Rust code then checks for their presence using the `#[cfg(...)]` attribute
+
+```rust
+// The function is only included in the build when compiling for macOS
+#[cfg(target_os = "macos")]
+fn macos_only() {
+ // ...
+}
+```
+
+---
+
+This particular chapter does not exist in [the second edition][2].
+The best place to learn about it is [the Rust Reference][3].
+
+* **[In the Rust Reference: Ch 5 — Conditional Compilation][3]**
+* <small>[In the first edition: Ch 4.3 — Conditional Compilation][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/conditional-compilation.html
+[2]: index.html
+[3]: ../reference/conditional-compilation.html
diff --git a/src/doc/book/redirects/const-and-static.md b/src/doc/book/redirects/const-and-static.md
new file mode 100644
index 000000000..b87bdd383
--- /dev/null
+++ b/src/doc/book/redirects/const-and-static.md
@@ -0,0 +1,21 @@
+% `const` and `static`
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Constants are _always_ immutable, and may only be set to a constant expression, not the result of a function call or any other value that could only be computed at runtime.
+>
+> Global variables are called `static` in Rust.
+
+```rust
+const MAX_POINTS: u32 = 100_000;
+static HELLO_WORLD: &str = "Hello, world!";
+```
+
+---
+
+You can find the latest version about constants
+[here](ch03-01-variables-and-mutability.html#constants),
+and about statics
+[here](ch19-01-unsafe-rust.html#accessing-or-modifying-a-mutable-static-variable).
+
+
diff --git a/src/doc/book/redirects/crates-and-modules.md b/src/doc/book/redirects/crates-and-modules.md
new file mode 100644
index 000000000..d526c9564
--- /dev/null
+++ b/src/doc/book/redirects/crates-and-modules.md
@@ -0,0 +1,28 @@
+% Crates and Modules
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust has a module system that enables the reuse of code in an organized fashion.
+> A module is a namespace that contains definitions of functions or types, and you can choose whether those definitions are visible outside their module (public) or not (private).
+>
+> A crate is a project that other people can pull into their projects as a dependency.
+
+```rust
+mod network {
+ fn connect() {
+ }
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 7.01 — `mod` and the Filesystem][2]**
+* [in the current edition: Ch 14.02 — Publishing a Crate to Crates.io][3]
+* <small>[In the first edition: Ch 3.25 — Crates and Modules][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/crates-and-modules.html
+[2]: ch07-00-managing-growing-projects-with-packages-crates-and-modules.html
+[3]: ch14-02-publishing-to-crates-io.html
diff --git a/src/doc/book/redirects/deref-coercions.md b/src/doc/book/redirects/deref-coercions.md
new file mode 100644
index 000000000..61d407e1d
--- /dev/null
+++ b/src/doc/book/redirects/deref-coercions.md
@@ -0,0 +1,30 @@
+% Deref coercions
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Implementing the `Deref` trait allows us to customize the behavior of the _dereference operator_ `*`.
+> By implementing `Deref` in such a way that a smart pointer can be treated like a regular reference, we can write code that operates on references and use that code with smart pointers too.
+
+```rust
+use std::ops::Deref;
+
+# struct MyBox<T>(T);
+impl<T> Deref for MyBox<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ &self.0
+ }
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 15.02 — Treating Smart Pointers like Regular References with the `Deref` Trait][2]**
+* <small>[In the first edition: Ch 3.33 — Deref coercions][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/deref-coercions.html
+[2]: ch15-02-deref.html
diff --git a/src/doc/book/redirects/documentation.md b/src/doc/book/redirects/documentation.md
new file mode 100644
index 000000000..ac7c881de
--- /dev/null
+++ b/src/doc/book/redirects/documentation.md
@@ -0,0 +1,26 @@
+% Documentation
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Documentation comments use `///` instead of `//` and support Markdown notation for formatting the text if you’d like.
+> You place documentation comments just before the item they are documenting.
+
+```rust,no_run
+/// Adds one to the number given.
+///
+/// # Examples
+///
+/// ```
+/// let five = 5;
+///
+/// assert_eq!(6, my_crate::add_one(5));
+/// ```
+pub fn add_one(x: i32) -> i32 {
+ x + 1
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments). \ No newline at end of file
diff --git a/src/doc/book/redirects/drop.md b/src/doc/book/redirects/drop.md
new file mode 100644
index 000000000..164f1d745
--- /dev/null
+++ b/src/doc/book/redirects/drop.md
@@ -0,0 +1,34 @@
+% Drop
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> `Drop` lets us customize what happens when a value is about to go out of scope.
+
+```rust
+struct CustomSmartPointer {
+ data: String,
+}
+
+impl Drop for CustomSmartPointer {
+ fn drop(&mut self) {
+ println!("Dropping CustomSmartPointer with data `{}`!", self.data);
+ }
+}
+
+fn main() {
+ let c = CustomSmartPointer { data: String::from("my stuff") };
+ let d = CustomSmartPointer { data: String::from("other stuff") };
+ println!("CustomSmartPointers created.");
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 15.03 — The `Drop` Trait Runs Code on Cleanup][2]**
+* <small>[In the first edition: Ch 3.20 — Drop][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/drop.html
+[2]: ch15-03-drop.html
diff --git a/src/doc/book/redirects/effective-rust.md b/src/doc/book/redirects/effective-rust.md
new file mode 100644
index 000000000..30312a3dd
--- /dev/null
+++ b/src/doc/book/redirects/effective-rust.md
@@ -0,0 +1,14 @@
+% Effective Rust
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+This section does not exist in [the second edition][2].
+However, the second edition encourages writing effective Rust from the start.
+It is recommended to start there.
+
+* **[The second edition of The Rust Programming Language][2]**
+* <small>[In the first edition: Ch 4 — Effective Rust][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/effective-rust.html
+[2]: index.html
diff --git a/src/doc/book/redirects/enums.md b/src/doc/book/redirects/enums.md
new file mode 100644
index 000000000..c770d6b00
--- /dev/null
+++ b/src/doc/book/redirects/enums.md
@@ -0,0 +1,23 @@
+% Enums
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Enums allow you to define a type by enumerating its possible values.
+
+```rust
+enum IpAddrKind {
+ V4,
+ V6,
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 6.01 — Defining an Enum][2]**
+* <small>[In the first edition: Ch 3.13 — Enums][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/enums.html
+[2]: ch06-01-defining-an-enum.html
diff --git a/src/doc/book/redirects/error-handling.md b/src/doc/book/redirects/error-handling.md
new file mode 100644
index 000000000..7abc9642b
--- /dev/null
+++ b/src/doc/book/redirects/error-handling.md
@@ -0,0 +1,16 @@
+% Error Handling
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust groups errors into two major categories: _recoverable_ errors with `Result<T, E>` and _unrecoverable_ errors with `panic!`.
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 9.00 — Error Handling][2]**
+* <small>[In the first edition: Ch 4.7 — Error Handling][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/error-handling.html
+[2]: ch09-00-error-handling.html
diff --git a/src/doc/book/redirects/ffi.md b/src/doc/book/redirects/ffi.md
new file mode 100644
index 000000000..20ed3963e
--- /dev/null
+++ b/src/doc/book/redirects/ffi.md
@@ -0,0 +1,23 @@
+% FFI
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Sometimes, your Rust code may need to interact with code written in another language.
+> To do this, Rust has a keyword, `extern`, that facilitates creating and using a _Foreign Function Interface_ (FFI).
+
+```rust
+extern "C" {
+ fn abs(input: i32) -> i32;
+}
+
+fn main() {
+ unsafe {
+ println!("Absolute value of -3 according to C: {}", abs(-3));
+ }
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-01-unsafe-rust.html#using-extern-functions-to-call-external-code) \ No newline at end of file
diff --git a/src/doc/book/redirects/functions.md b/src/doc/book/redirects/functions.md
new file mode 100644
index 000000000..eecbfd49c
--- /dev/null
+++ b/src/doc/book/redirects/functions.md
@@ -0,0 +1,30 @@
+% Functions
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Function definitions in Rust start with `fn` and have a set of parentheses after the function name.
+> The curly brackets tell the compiler where the function body begins and ends.
+> We can call any function we’ve defined by entering its name followed by a set of parentheses.
+
+```rust
+fn main() {
+ println!("Hello, world!");
+
+ another_function();
+}
+
+fn another_function() {
+ println!("Another function.");
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[In the first edition: Ch 3.2 — Functions][1]**
+* <small>[in the current edition: Ch 3.03 — Functions][2]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/functions.html
+[2]: ch03-03-how-functions-work.html
diff --git a/src/doc/book/redirects/generics.md b/src/doc/book/redirects/generics.md
new file mode 100644
index 000000000..80700973f
--- /dev/null
+++ b/src/doc/book/redirects/generics.md
@@ -0,0 +1,30 @@
+% Generics
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Generics are abstract stand-ins for concrete types or other properties.
+
+```rust
+struct Point<T, U> {
+ x: T,
+ y: U,
+}
+
+fn main() {
+ let both_integer = Point { x: 5, y: 10 };
+ let both_float = Point { x: 1.0, y: 4.0 };
+ let integer_and_float = Point { x: 5, y: 4.0 };
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 10.00 — Generic Types, Traits, and Lifetimes][2]**
+* <small>[In the first edition: Ch 3.18 — Generics][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/generics.html
+[2]: ch10-00-generics.html
+
diff --git a/src/doc/book/redirects/getting-started.md b/src/doc/book/redirects/getting-started.md
new file mode 100644
index 000000000..1c84cbbaf
--- /dev/null
+++ b/src/doc/book/redirects/getting-started.md
@@ -0,0 +1,13 @@
+% Getting Started
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+You can [continue to the exact older page][1].
+If you're trying to learn Rust, checking out [the second edition][2] might be a better choice.
+
+* **[in the current edition: Getting Started][2]**
+* <small>[In the first edition: Getting Started][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/getting-started.html
+[2]: ch01-00-getting-started.html
diff --git a/src/doc/book/redirects/glossary.md b/src/doc/book/redirects/glossary.md
new file mode 100644
index 000000000..c0f9f8e72
--- /dev/null
+++ b/src/doc/book/redirects/glossary.md
@@ -0,0 +1,14 @@
+% Glossary
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+This section does not exist in [the second edition][2].
+However, the second edition defines the terms it uses inline, rather than using a glossary.
+It is recommended to start there.
+
+* **[The second edition of The Rust Programming Language][2]**
+* <small>[In the first edition: Glossary][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/glossary.html
+[2]: index.html
diff --git a/src/doc/book/redirects/guessing-game.md b/src/doc/book/redirects/guessing-game.md
new file mode 100644
index 000000000..6abf4023b
--- /dev/null
+++ b/src/doc/book/redirects/guessing-game.md
@@ -0,0 +1,12 @@
+% Tutorial: Guessing Game
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+If you're trying to learn Rust, checking out [the second edition][2] might be a better choice.
+
+* **[In the first edition: Tutorial — Guessing Game][1]**
+* <small>[in the current edition: Ch 2.00 — Guessing Game tutorial][2]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/guessing-game.html
+[2]: ch02-00-guessing-game-tutorial.html
diff --git a/src/doc/book/redirects/if-let.md b/src/doc/book/redirects/if-let.md
new file mode 100644
index 000000000..edbe5d88b
--- /dev/null
+++ b/src/doc/book/redirects/if-let.md
@@ -0,0 +1,22 @@
+% if let
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> The `if let` syntax lets you combine `if` and `let` into a less verbose way to handle values that match one pattern and ignore the rest.
+
+```rust
+let some_u8_value = Some(3u8);
+if let Some(3) = some_u8_value {
+ println!("three");
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* [In the current edition: Ch 6.03 — Concise Control Flow with `if let`][2]
+* <small>[In the first edition: Ch 3.21 — if let][1]</small>
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/if-let.html
+[2]: ch06-03-if-let.html
diff --git a/src/doc/book/redirects/if.md b/src/doc/book/redirects/if.md
new file mode 100644
index 000000000..ff97e94f1
--- /dev/null
+++ b/src/doc/book/redirects/if.md
@@ -0,0 +1,22 @@
+% if
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> An `if` expression allows us to branch our code depending on conditions.
+
+```rust
+fn main() {
+ let number = 3;
+
+ if number < 5 {
+ println!("condition was true");
+ } else {
+ println!("condition was false");
+ }
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch03-05-control-flow.html#if-expressions). \ No newline at end of file
diff --git a/src/doc/book/redirects/iterators.md b/src/doc/book/redirects/iterators.md
new file mode 100644
index 000000000..26cb04766
--- /dev/null
+++ b/src/doc/book/redirects/iterators.md
@@ -0,0 +1,27 @@
+% Iterators
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> The iterator pattern allows you to perform some task on a sequence of items in turn.
+> An iterator is responsible for the logic of iterating over each item and determining when the sequence has finished.
+
+```rust
+let v1 = vec![1, 2, 3];
+
+let v1_iter = v1.iter();
+
+for val in v1_iter {
+ println!("Got: {}", val);
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 13.02 — Iterators][2]**
+* <small>[In the first edition: Ch 4.5 — Iterators][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/iterators.html
+[2]: ch13-02-iterators.html
diff --git a/src/doc/book/redirects/lifetimes.md b/src/doc/book/redirects/lifetimes.md
new file mode 100644
index 000000000..21ddb38ce
--- /dev/null
+++ b/src/doc/book/redirects/lifetimes.md
@@ -0,0 +1,28 @@
+% Lifetimes
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Every reference in Rust has a lifetime, which is the scope for which that reference is valid.
+> Most of the time lifetimes are implicit and inferred.
+
+```rust
+{
+ let x = 5; // -----+-- 'b
+ // |
+ let r = &x; // --+--+-- 'a
+ // | |
+ println!("r: {}", r); // | |
+ // --+ |
+} // -----+
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 10.03 — Lifetimes][2]**
+* <small>[In the first edition: Ch 3.10 — Lifetimes][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/lifetimes.html
+[2]: ch10-03-lifetime-syntax.html
diff --git a/src/doc/book/redirects/loops.md b/src/doc/book/redirects/loops.md
new file mode 100644
index 000000000..1686c115e
--- /dev/null
+++ b/src/doc/book/redirects/loops.md
@@ -0,0 +1,30 @@
+% Loops
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust has three kinds of loops: `loop`, `while`, and `for`.
+> The `loop` keyword tells Rust to execute a block of code over and over again forever or until you explicitly tell it to stop.
+> `while` loops evaluate a block of code until a condition ceases to be true.
+> A `for` loop executes some code for each item in a collection.
+
+```rust,no_run
+loop {
+ println!("again!");
+}
+
+let mut number = 3;
+while number != 0 {
+ println!("{}!", number);
+ number = number - 1;
+}
+
+let a = [10, 20, 30, 40, 50];
+for element in a.iter() {
+ println!("the value is: {}", element);
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch03-05-control-flow.html#repetition-with-loops). \ No newline at end of file
diff --git a/src/doc/book/redirects/macros.md b/src/doc/book/redirects/macros.md
new file mode 100644
index 000000000..08217d115
--- /dev/null
+++ b/src/doc/book/redirects/macros.md
@@ -0,0 +1,30 @@
+% Macros
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> While functions and types abstract over code, macros abstract at a syntactic level.
+
+```rust
+macro_rules! five_times {
+ ($x:expr) => (5 * $x);
+}
+
+fn main() {
+ assert_eq!(25, five_times!(2 + 3));
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[In the current edition: Ch 19.06 Macros][2]**
+* [Rust By Example: Macros][3]
+* [In the Rust Reference: Ch 3.1 — Macros by Example][4]
+* <small>[In the first edition: Ch 3.34 — Macros][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/macros.html
+[2]: ch19-06-macros.html
+[3]: https://rustbyexample.com/macros.html
+[4]: ../reference/macros-by-example.html
diff --git a/src/doc/book/redirects/match.md b/src/doc/book/redirects/match.md
new file mode 100644
index 000000000..fd28ba8de
--- /dev/null
+++ b/src/doc/book/redirects/match.md
@@ -0,0 +1,38 @@
+% Match
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> `match` allows us to compare a value against a series of patterns and then execute code based on which pattern matches.
+> Patterns can be made up of literal values, variable names, wildcards, and many other things.
+
+```rust
+enum Coin {
+ Penny,
+ Nickel,
+ Dime,
+ Quarter,
+}
+
+fn value_in_cents(coin: Coin) -> u32 {
+ match coin {
+ Coin::Penny => 1,
+ Coin::Nickel => 5,
+ Coin::Dime => 10,
+ Coin::Quarter => 25,
+ }
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 6.02 — The `match` Control Flow Operator][2]**
+* [in the current edition: Ch 18.00 — Patterns][3]
+* <small>[In the first edition: Ch 3.14 — Match][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/match.html
+[2]: ch06-02-match.html
+[3]: ch18-00-patterns.html
+
diff --git a/src/doc/book/redirects/method-syntax.md b/src/doc/book/redirects/method-syntax.md
new file mode 100644
index 000000000..29cd2cd7c
--- /dev/null
+++ b/src/doc/book/redirects/method-syntax.md
@@ -0,0 +1,29 @@
+% Method Syntax
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Methods are different from functions in that they’re defined within the context of a struct, and their first parameter is always `self`, which represents the instance of the struct the method is being called on.
+
+```rust
+# struct Rectangle {
+# width: u32,
+# height: u32,
+# }
+
+impl Rectangle {
+ fn area(&self) -> u32 {
+ self.width * self.height
+ }
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 5.03 — Method Syntax][2]**
+* <small>[In the first edition: Ch 3.16 — Method Syntax][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/method-syntax.html
+[2]: ch05-03-method-syntax.html
diff --git a/src/doc/book/redirects/mutability.md b/src/doc/book/redirects/mutability.md
new file mode 100644
index 000000000..89fc3b6f5
--- /dev/null
+++ b/src/doc/book/redirects/mutability.md
@@ -0,0 +1,23 @@
+% Mutability
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Variables are immutable only by default; we can make them mutable by adding mut in front of the variable name.
+
+```rust
+let mut x = 5;
+println!("The value of x is: {}", x);
+x = 6;
+println!("The value of x is: {}", x);
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 3.01 — Variables and Mutability][2]**
+* <small>[In the first edition: Ch 3.11 — Mutability][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/mutability.html
+[2]: ch03-01-variables-and-mutability.html
diff --git a/src/doc/book/redirects/operators-and-overloading.md b/src/doc/book/redirects/operators-and-overloading.md
new file mode 100644
index 000000000..ff9a33048
--- /dev/null
+++ b/src/doc/book/redirects/operators-and-overloading.md
@@ -0,0 +1,36 @@
+% Operators and Overloading
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust does not allow you to create your own operators or overload arbitrary operators, but the operations and corresponding traits listed in `std::ops` can be overloaded by implementing the traits associated with the operator.
+
+```rust
+use std::ops::Add;
+
+#[derive(Debug,PartialEq)]
+struct Point {
+ x: i32,
+ y: i32,
+}
+
+impl Add for Point {
+ type Output = Point;
+
+ fn add(self, other: Point) -> Point {
+ Point {
+ x: self.x + other.x,
+ y: self.y + other.y,
+ }
+ }
+}
+
+fn main() {
+ assert_eq!(Point { x: 1, y: 0 } + Point { x: 2, y: 3 },
+ Point { x: 3, y: 3 });
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-03-advanced-traits.html).
diff --git a/src/doc/book/redirects/ownership.md b/src/doc/book/redirects/ownership.md
new file mode 100644
index 000000000..3e7ece3b4
--- /dev/null
+++ b/src/doc/book/redirects/ownership.md
@@ -0,0 +1,20 @@
+% Ownership
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Ownership is Rust’s most unique feature, and it enables Rust to make memory safety guarantees without needing a garbage collector.
+>
+> 1. Each value in Rust has a variable that’s called its _owner_.
+> 2. There can only be one owner at a time.
+> 3. When the owner goes out of scope, the value will be dropped.
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 4.00 — Understanding Ownership][2]**
+* <small>[In the first edition: Ch 3.8 — Ownership][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/ownership.html
+[2]: ch04-00-understanding-ownership.html
diff --git a/src/doc/book/redirects/patterns.md b/src/doc/book/redirects/patterns.md
new file mode 100644
index 000000000..1936368b2
--- /dev/null
+++ b/src/doc/book/redirects/patterns.md
@@ -0,0 +1,23 @@
+% Patterns
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Patterns are a special syntax within Rust for matching against the structure of our types, complex or simple.
+> A pattern is made up of some combination of literals; destructured arrays, enums, structs, or tuples; variables, wildcards, and placeholders.
+> These pieces describe the “shape” of the data we’re working with.
+
+```rust
+let x = Some(5);
+let y = 10;
+
+match x {
+ Some(50) => println!("Got 50"),
+ Some(y) => println!("Matched, y = {:?}", y),
+ _ => println!("Default case, x = {:?}", x),
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch06-02-match.html). \ No newline at end of file
diff --git a/src/doc/book/redirects/primitive-types.md b/src/doc/book/redirects/primitive-types.md
new file mode 100644
index 000000000..aff51f782
--- /dev/null
+++ b/src/doc/book/redirects/primitive-types.md
@@ -0,0 +1,24 @@
+% Primitive Types
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust is a _statically typed_ language, which means that it must know the types of all variables at compile time.
+> The compiler can usually infer what type we want to use based on the value and how we use it.
+> In cases when many types are possible, a _type annotation_ must be added.
+
+```rust
+let x = 2.0; // f64
+
+let y: f32 = 3.0; // f32
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 3.02 — Data Types][2]**
+* <small>[In the first edition: Ch 3.3 — Primitive Types][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/primitive-types.html
+[2]: ch03-02-data-types.html
diff --git a/src/doc/book/redirects/procedural-macros.md b/src/doc/book/redirects/procedural-macros.md
new file mode 100644
index 000000000..bf6665f1a
--- /dev/null
+++ b/src/doc/book/redirects/procedural-macros.md
@@ -0,0 +1,21 @@
+% Procedural Macros (and custom Derive)
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Procedural macros allow for all sorts of advanced metaprogramming in Rust.
+
+---
+
+This chapter does not exist yet in [the second edition][2].
+You can check out other resources that describe macros.
+
+* **[In the current edition: Ch 19.06 Macros][2]**
+* [In the Rust Reference: Ch 3.2 — Procedural Macros][4]
+* [The `proc_macro` crate documentation][3]
+* <small>[In the first edition: Ch 4.13 — Procedural Macros (and custom Derive)][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/procedural-macros.html
+[2]: ch19-06-macros.html
+[3]: ../proc_macro/index.html
+[4]: ../reference/procedural-macros.html
diff --git a/src/doc/book/redirects/raw-pointers.md b/src/doc/book/redirects/raw-pointers.md
new file mode 100644
index 000000000..773f3abc4
--- /dev/null
+++ b/src/doc/book/redirects/raw-pointers.md
@@ -0,0 +1,17 @@
+% Raw Pointers
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Raw pointers are allowed to ignore many of the rules that references have to follow.
+
+```rust
+let mut num = 5;
+
+let r1 = &num as *const i32;
+let r2 = &mut num as *mut i32;
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-01-unsafe-rust.html#dereferencing-a-raw-pointer) \ No newline at end of file
diff --git a/src/doc/book/redirects/references-and-borrowing.md b/src/doc/book/redirects/references-and-borrowing.md
new file mode 100644
index 000000000..7eb8da2bd
--- /dev/null
+++ b/src/doc/book/redirects/references-and-borrowing.md
@@ -0,0 +1,24 @@
+% References and Borrowing
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> A reference _refers_ to a value but does not own it.
+> Because it does not own it, the value it points to will not be dropped when the reference goes out of scope.
+
+```rust
+fn calculate_length(s: &String) -> usize { // s is a reference to a String
+ s.len()
+} // Here, s goes out of scope. But because it does not have ownership of what
+ // it refers to, nothing happens.
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 4.02 — References and Borrowing][2]**
+* <small>[In the first edition: Ch 3.9 — References and Borrowing][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/references-and-borrowing.html
+[2]: ch04-02-references-and-borrowing.html
diff --git a/src/doc/book/redirects/release-channels.md b/src/doc/book/redirects/release-channels.md
new file mode 100644
index 000000000..6e01e227f
--- /dev/null
+++ b/src/doc/book/redirects/release-channels.md
@@ -0,0 +1,28 @@
+% Release Channels
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> The Rust project uses a concept called ‘release channels’ to manage releases.
+> New nightly releases are created once a day.
+> Every six weeks, the latest nightly release is promoted to ‘Beta’.
+> At that point, it will only receive patches to fix serious errors.
+> Six weeks later, the beta is promoted to ‘Stable’.
+
+---
+
+This chapter does not exist yet in [the second edition][2].
+You can check out other resources that describe release channels.
+
+* **[In the Rustup documentation: Keeping Rust Up-to-date][4]**
+* [On the website: Install Rust][5]
+* [In the Rust RFCs: RFC 507 — Release Channels][3]
+* [in the current edition: How Rust is Made and “Nightly Rust”][2]
+* <small>[In the first edition: Ch 4.11 — Release Channels][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/release-channels.html
+[2]: appendix-07-nightly-rust.html
+[3]: https://github.com/rust-lang/rfcs/blob/master/text/0507-release-channels.md
+[4]: https://github.com/rust-lang-nursery/rustup.rs/blob/master/README.md#keeping-rust-up-to-date
+[5]: https://www.rust-lang.org/en-US/tools/install
+
diff --git a/src/doc/book/redirects/strings.md b/src/doc/book/redirects/strings.md
new file mode 100644
index 000000000..3084e8d45
--- /dev/null
+++ b/src/doc/book/redirects/strings.md
@@ -0,0 +1,19 @@
+% Strings
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> A `String` is allocated on the heap and as such is able to store an amount of text that is unknown to us at compile time.
+> You can create a `String` from a string literal using the `from` function.
+> A _string slice_ is a reference to part of a `String`.
+
+```rust
+let s = String::from("hello world");
+
+let hello = &s[0..5];
+let world = &s[6..11];
+```
+
+---
+
+You can find the latest version of this information
+[here](ch08-02-strings.html). \ No newline at end of file
diff --git a/src/doc/book/redirects/structs.md b/src/doc/book/redirects/structs.md
new file mode 100644
index 000000000..5c5427c55
--- /dev/null
+++ b/src/doc/book/redirects/structs.md
@@ -0,0 +1,25 @@
+% Structs
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> A _struct_ is a custom data type that lets us name and package together multiple related values that make up a meaningful group.
+
+```rust
+struct User {
+ username: String,
+ email: String,
+ sign_in_count: u64,
+ active: bool,
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[In second edition: Ch 5.00 — Structs][2]**
+* <small>[In the first edition: Ch 3.12 — Structs][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/structs.html
+[2]: ch05-00-structs.html
diff --git a/src/doc/book/redirects/syntax-and-semantics.md b/src/doc/book/redirects/syntax-and-semantics.md
new file mode 100644
index 000000000..b1f4f8aca
--- /dev/null
+++ b/src/doc/book/redirects/syntax-and-semantics.md
@@ -0,0 +1,18 @@
+% Syntax and Semantics
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+Here are the relevant sections in the new and old books:
+
+
+* **[in the current edition: Ch 3.00 — Common Programming Concepts][2]**
+* [in the current edition: Appendix A — Keywords][3]
+* [in the current edition: Appendix B — Operators][4]
+* <small>[In the first edition: Ch 3 — Syntax and Semantics][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/syntax-and-semantics.html
+[2]: ch03-00-common-programming-concepts.html
+[3]: appendix-01-keywords.html
+[4]: appendix-02-operators.html
+
diff --git a/src/doc/book/redirects/syntax-index.md b/src/doc/book/redirects/syntax-index.md
new file mode 100644
index 000000000..c9513bf0e
--- /dev/null
+++ b/src/doc/book/redirects/syntax-index.md
@@ -0,0 +1,13 @@
+% Syntax Index
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+Here are the relevant sections in the new and old books:
+
+* **[In the current edition: Appendix A — Keywords][2]**
+* **[In the current edition: Appendix B — Operators][3]**
+* <small>[In the first edition: Ch 6 — Syntax Index][1]</small>
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/syntax-index.html
+[2]: appendix-01-keywords.html
+[3]: appendix-02-operators.html
diff --git a/src/doc/book/redirects/testing.md b/src/doc/book/redirects/testing.md
new file mode 100644
index 000000000..f2030654f
--- /dev/null
+++ b/src/doc/book/redirects/testing.md
@@ -0,0 +1,25 @@
+% Testing
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust includes support for writing software tests within the language itself.
+
+```rust
+#[cfg(test)]
+mod tests {
+ #[test]
+ fn it_works() {
+ }
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 11.00 — Testing][2]**
+* <small>[In the first edition: Ch 4.2 — Testing][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/testing.html
+[2]: ch11-00-testing.html
diff --git a/src/doc/book/redirects/the-stack-and-the-heap.md b/src/doc/book/redirects/the-stack-and-the-heap.md
new file mode 100644
index 000000000..e2d4d3ac9
--- /dev/null
+++ b/src/doc/book/redirects/the-stack-and-the-heap.md
@@ -0,0 +1,13 @@
+% The Stack and the Heap
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Both the stack and the heap are parts of memory that is available to your code to use at runtime, but they are structured in different ways.
+> The stack stores values in the order it gets them and removes the values in the opposite order.
+> All data on the stack must take up a known, fixed size.
+> For data with a size unknown to us at compile time or a size that might change, we can store data on the heap instead.
+
+---
+
+You can find the latest version of this information
+[here](ch04-01-what-is-ownership.html#the-stack-and-the-heap). \ No newline at end of file
diff --git a/src/doc/book/redirects/trait-objects.md b/src/doc/book/redirects/trait-objects.md
new file mode 100644
index 000000000..3200e26a1
--- /dev/null
+++ b/src/doc/book/redirects/trait-objects.md
@@ -0,0 +1,68 @@
+% Trait Objects
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Trait objects combine the data made up of the pointer to a concrete object with the behavior of the methods defined in the trait.
+> A trait defines behavior that we need in a given situation.
+> We can then use a trait as a trait object in places where we would use a concrete type or a generic type.
+
+```rust,ignore
+pub struct InputBox {
+ pub label: String,
+}
+
+impl Draw for InputBox {
+ fn draw(&self) {
+ // Code to actually draw an input box
+ }
+}
+
+pub struct Button {
+ pub label: String,
+}
+
+impl Draw for Button {
+ fn draw(&self) {
+ // Code to actually draw a button
+ }
+}
+
+pub struct Screen<T: Draw> {
+ pub components: Vec<T>,
+}
+
+impl<T> Screen<T>
+ where T: Draw {
+ pub fn run(&self) {
+ for component in self.components.iter() {
+ component.draw();
+ }
+ }
+}
+
+fn main() {
+ let screen = Screen {
+ components: vec![
+ Box::new(InputBox {
+ label: String::from("OK"),
+ }),
+ Box::new(Button {
+ label: String::from("OK"),
+ }),
+ ],
+ };
+
+ screen.run();
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 17.02 — Trait Objects][2]**
+* <small>[In the first edition: Ch 3.22 — Trait Objects][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/trait-objects.html
+[2]: ch17-02-trait-objects.html
diff --git a/src/doc/book/redirects/traits.md b/src/doc/book/redirects/traits.md
new file mode 100644
index 000000000..dcb577e97
--- /dev/null
+++ b/src/doc/book/redirects/traits.md
@@ -0,0 +1,24 @@
+% Traits
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Traits abstract over behavior that types can have in common.
+
+```rust
+pub trait Summarizable {
+ fn summary(&self) -> String;
+}
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 10.02 — Traits][2]**
+* [in the current edition: Ch 19.03 — Advanced Traits][3]
+* <small>[In the first edition: Ch 3.19 — Traits][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/traits.html
+[2]: ch10-02-traits.html
+[3]: ch19-03-advanced-traits.html
diff --git a/src/doc/book/redirects/type-aliases.md b/src/doc/book/redirects/type-aliases.md
new file mode 100644
index 000000000..85cd4c9ec
--- /dev/null
+++ b/src/doc/book/redirects/type-aliases.md
@@ -0,0 +1,14 @@
+% `type` aliases
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust provides the ability to declare a _type alias_ with the `type` keyword to give an existing type another name.
+
+```rust
+type Kilometers = i32;
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-04-advanced-types.html#creating-type-synonyms-with-type-aliases). \ No newline at end of file
diff --git a/src/doc/book/redirects/ufcs.md b/src/doc/book/redirects/ufcs.md
new file mode 100644
index 000000000..2959c06bd
--- /dev/null
+++ b/src/doc/book/redirects/ufcs.md
@@ -0,0 +1,48 @@
+% Universal Function Call Syntax
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust cannot prevent a trait from having a method with the same name as another trait’s method, nor can it prevent us from implementing both of these traits on one type.
+> In order to be able to call each of the methods with the same name, then, we need to tell Rust which one we want to use.
+
+```rust
+trait Pilot {
+ fn fly(&self);
+}
+
+trait Wizard {
+ fn fly(&self);
+}
+
+struct Human;
+
+impl Pilot for Human {
+# fn fly(&self) {
+# println!("This is your captain speaking.");
+# }
+}
+
+impl Wizard for Human {
+# fn fly(&self) {
+# println!("Up!");
+# }
+}
+
+impl Human {
+# fn fly(&self) {
+# println!("*waving arms furiously*");
+# }
+}
+
+fn main() {
+ let person = Human;
+ Pilot::fly(&person);
+ Wizard::fly(&person);
+ person.fly();
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name). \ No newline at end of file
diff --git a/src/doc/book/redirects/unsafe.md b/src/doc/book/redirects/unsafe.md
new file mode 100644
index 000000000..8628c7aa9
--- /dev/null
+++ b/src/doc/book/redirects/unsafe.md
@@ -0,0 +1,18 @@
+% `unsafe`
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust has a second language hiding out inside of it, unsafe Rust, which does not enforce memory safety guarantees.
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 19.01 — Unsafe Rust][2]**
+* [The Rustonomicon, The Dark Arts of Advanced and Unsafe Rust Programming][3]
+* <small>[In the first edition: Ch 3.36 — `unsafe`][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/unsafe.html
+[2]: ch19-01-unsafe-rust.html
+[3]: ../nomicon/index.html
diff --git a/src/doc/book/redirects/unsized-types.md b/src/doc/book/redirects/unsized-types.md
new file mode 100644
index 000000000..bd9582cba
--- /dev/null
+++ b/src/doc/book/redirects/unsized-types.md
@@ -0,0 +1,18 @@
+% Unsized Types
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Sometimes referred to as ‘DSTs’ or ‘unsized types’, these types let us talk about types whose size we can only know at runtime.
+> The `Sized` trait is automatically implemented for everything the compiler knows the size of at compile time.
+> A trait bound on `?Sized` is the opposite of a trait bound on `Sized`; that is, we would read this as “`T` may or may not be `Sized`”.
+
+```rust,ignore
+fn generic<T: ?Sized>(t: &T) {
+ // ...snip...
+}
+```
+
+---
+
+You can find the latest version of this information
+[here](ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait). \ No newline at end of file
diff --git a/src/doc/book/redirects/using-rust-without-the-standard-library.md b/src/doc/book/redirects/using-rust-without-the-standard-library.md
new file mode 100644
index 000000000..75145429d
--- /dev/null
+++ b/src/doc/book/redirects/using-rust-without-the-standard-library.md
@@ -0,0 +1,17 @@
+% Using Rust without the Standard Library
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Rust’s standard library provides a lot of useful functionality, but assumes support for various features of its host system: threads, networking, heap allocation, and others.
+> There are systems that do not have these features, however.
+
+---
+
+This particular chapter has moved to [the Unstable Book][2].
+
+* **[In the Unstable Rust Book: `lang_items` — Writing an executable without stdlib][2]**
+* <small>[In the first edition: Ch 4.12 — Using Rust without the Standard Library][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/using-rust-without-the-standard-library.html
+[2]: ../unstable-book/language-features/lang-items.html#writing-an-executable-without-stdlib
diff --git a/src/doc/book/redirects/variable-bindings.md b/src/doc/book/redirects/variable-bindings.md
new file mode 100644
index 000000000..0bd437ec3
--- /dev/null
+++ b/src/doc/book/redirects/variable-bindings.md
@@ -0,0 +1,14 @@
+% Variable Bindings
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Variable bindings bind some value to a name, so it can be used later.
+
+```rust
+let foo = 5;
+```
+
+---
+
+You can find the latest version of this information
+[here](ch02-00-guessing-game-tutorial.html#storing-values-with-variables). \ No newline at end of file
diff --git a/src/doc/book/redirects/vectors.md b/src/doc/book/redirects/vectors.md
new file mode 100644
index 000000000..1359f9da8
--- /dev/null
+++ b/src/doc/book/redirects/vectors.md
@@ -0,0 +1,23 @@
+% Vectors
+
+<small>There is a new edition of the book and this is an old link.</small>
+
+> Vectors store more than one value in a single data structure that puts all the values next to each other in memory.
+> Vectors can only store values of the same type.
+
+```rust
+let v: Vec<i32> = Vec::new();
+let numbers = vec![1, 2, 3];
+```
+
+---
+
+Here are the relevant sections in the new and old books:
+
+* **[in the current edition: Ch 8.01 — Vectors][2]**
+* <small>[In the first edition: Ch 3.7 — Vectors][1]</small>
+
+
+[1]: https://doc.rust-lang.org/1.30.0/book/first-edition/vectors.html
+[2]: ch08-01-vectors.html
+
diff --git a/src/doc/book/rust-toolchain b/src/doc/book/rust-toolchain
new file mode 100644
index 000000000..0a03ace41
--- /dev/null
+++ b/src/doc/book/rust-toolchain
@@ -0,0 +1 @@
+1.62
diff --git a/src/doc/book/rustfmt.toml b/src/doc/book/rustfmt.toml
new file mode 100644
index 000000000..df99c6919
--- /dev/null
+++ b/src/doc/book/rustfmt.toml
@@ -0,0 +1 @@
+max_width = 80
diff --git a/src/doc/book/second-edition/book.toml b/src/doc/book/second-edition/book.toml
new file mode 100644
index 000000000..9789a435c
--- /dev/null
+++ b/src/doc/book/second-edition/book.toml
@@ -0,0 +1,3 @@
+[book]
+title = "The Rust Programming Language"
+author = "Steve Klabnik and Carol Nichols, with Contributions from the Rust Community"
diff --git a/src/doc/book/second-edition/dot/trpl04-01.dot b/src/doc/book/second-edition/dot/trpl04-01.dot
new file mode 100644
index 000000000..331d59133
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl04-01.dot
@@ -0,0 +1,26 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl04-02.dot b/src/doc/book/second-edition/dot/trpl04-02.dot
new file mode 100644
index 000000000..e46d2ed4a
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl04-02.dot
@@ -0,0 +1,35 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl04-03.dot b/src/doc/book/second-edition/dot/trpl04-03.dot
new file mode 100644
index 000000000..16c0b2860
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl04-03.dot
@@ -0,0 +1,44 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table4:pointee;
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl04-04.dot b/src/doc/book/second-edition/dot/trpl04-04.dot
new file mode 100644
index 000000000..1c95c231c
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl04-04.dot
@@ -0,0 +1,35 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="gray">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s2</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table0:pointer:c -> table1:pointee;
+ table3:pointer:c -> table1:pointee;
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl04-05.dot b/src/doc/book/second-edition/dot/trpl04-05.dot
new file mode 100644
index 000000000..ca1f7e06e
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl04-05.dot
@@ -0,0 +1,32 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="borrower"></TD></TR>
+ </TABLE>>];
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s1</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD PORT="borrowee">ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ <TR><TD>capacity</TD><TD>5</TD></TR>
+ </TABLE>>];
+ table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ </TABLE>>];
+
+ edge[tailclip="false"];
+ table1:pointer:c -> table2:pointee;
+ table0:borrower:c -> table1:borrowee;
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl04-06.dot b/src/doc/book/second-edition/dot/trpl04-06.dot
new file mode 100644
index 000000000..a23f179a7
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl04-06.dot
@@ -0,0 +1,41 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">world</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer2"></TD></TR>
+ <TR><TD>len</TD><TD>5</TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">s</TD></TR>
+ <TR><TD>name</TD><TD>value</TD></TR>
+ <TR><TD>ptr</TD><TD PORT="pointer"></TD></TR>
+ <TR><TD>len</TD><TD>11</TD></TR>
+ <TR><TD>capacity</TD><TD>11</TD></TR>
+ </TABLE>>];
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD>index</TD><TD>value</TD></TR>
+ <TR><TD PORT="pointee">0</TD><TD>h</TD></TR>
+ <TR><TD>1</TD><TD>e</TD></TR>
+ <TR><TD>2</TD><TD>l</TD></TR>
+ <TR><TD>3</TD><TD>l</TD></TR>
+ <TR><TD>4</TD><TD>o</TD></TR>
+ <TR><TD>5</TD><TD> </TD></TR>
+ <TR><TD PORT="pointee2">6</TD><TD>w</TD></TR>
+ <TR><TD>7</TD><TD>o</TD></TR>
+ <TR><TD>8</TD><TD>r</TD></TR>
+ <TR><TD>9</TD><TD>l</TD></TR>
+ <TR><TD>10</TD><TD>d</TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:pointer2:c -> table4:pointee2;
+ table3:pointer:c -> table4:pointee;
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl15-01.dot b/src/doc/book/second-edition/dot/trpl15-01.dot
new file mode 100644
index 000000000..e8b95f9a3
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl15-01.dot
@@ -0,0 +1,24 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD><TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD>∞</TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE></TD></TR>
+ </TABLE>>];
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl15-02.dot b/src/doc/book/second-edition/dot/trpl15-02.dot
new file mode 100644
index 000000000..f7dfd22c9
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl15-02.dot
@@ -0,0 +1,18 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table0[label=<
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD COLSPAN="2" SIDES="B">Cons</TD></TR>
+ <TR><TD>i32</TD><TD>
+ <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">Box</TD></TR>
+ <TR><TD>usize</TD></TR>
+ </TABLE>
+ </TD></TR>
+ </TABLE>>];
+}
+
diff --git a/src/doc/book/second-edition/dot/trpl15-03.dot b/src/doc/book/second-edition/dot/trpl15-03.dot
new file mode 100644
index 000000000..16f026814
--- /dev/null
+++ b/src/doc/book/second-edition/dot/trpl15-03.dot
@@ -0,0 +1,51 @@
+digraph {
+ rankdir=LR;
+ overlap=false;
+ dpi=300.0;
+ node [shape="plaintext"];
+
+ table4[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">b</TD><TD SIDES="B" PORT="ptr4"></TD></TR>
+ </TABLE>>];
+
+ table5[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte4">3</TD><TD PORT="ptr5"> </TD></TR>
+ </TABLE>>];
+
+
+ table0[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">a</TD><TD SIDES="B" PORT="ptr0"></TD></TR>
+ </TABLE>>];
+
+ table1[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte0">5</TD><TD PORT="ptr1"> </TD></TR>
+ </TABLE>>];
+
+ table2[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte1">10</TD><TD PORT="ptr2"> </TD></TR>
+ </TABLE>>];
+
+ table3[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte2">Nil</TD></TR>
+ </TABLE>>];
+
+
+ table6[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD SIDES="B">c</TD><TD SIDES="B" PORT="ptr6"></TD></TR>
+ </TABLE>>];
+
+ table7[label=<<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0">
+ <TR><TD PORT="pte6">4</TD><TD PORT="ptr7"> </TD></TR>
+ </TABLE>>];
+
+
+ edge[tailclip="false"];
+ table0:ptr0:c -> table1:pte0;
+ table1:ptr1:c -> table2:pte1;
+ table2:ptr2:c -> table3:pte2;
+ table4:ptr4:c -> table5:pte4;
+ table5:ptr5:c -> table1:pte0;
+ table6:ptr6:c -> table7:pte6;
+ table7:ptr7:c -> table1:pte0;
+}
+
diff --git a/src/doc/book/second-edition/src/SUMMARY.md b/src/doc/book/second-edition/src/SUMMARY.md
new file mode 100644
index 000000000..37d703d8e
--- /dev/null
+++ b/src/doc/book/second-edition/src/SUMMARY.md
@@ -0,0 +1,132 @@
+# The Rust Programming Language
+
+[Foreword](foreword.md)
+[Introduction](ch00-00-introduction.md)
+
+## Getting started
+
+- [Getting Started](ch01-00-getting-started.md)
+ - [Installation](ch01-01-installation.md)
+ - [Hello, World!](ch01-02-hello-world.md)
+ - [Hello, Cargo!](ch01-03-hello-cargo.md)
+
+- [Programming a Guessing Game](ch02-00-guessing-game-tutorial.md)
+
+- [Common Programming Concepts](ch03-00-common-programming-concepts.md)
+ - [Variables and Mutability](ch03-01-variables-and-mutability.md)
+ - [Data Types](ch03-02-data-types.md)
+ - [How Functions Work](ch03-03-how-functions-work.md)
+ - [Comments](ch03-04-comments.md)
+ - [Control Flow](ch03-05-control-flow.md)
+
+- [Understanding Ownership](ch04-00-understanding-ownership.md)
+ - [What is Ownership?](ch04-01-what-is-ownership.md)
+ - [References & Borrowing](ch04-02-references-and-borrowing.md)
+ - [Slices](ch04-03-slices.md)
+
+- [Using Structs to Structure Related Data](ch05-00-structs.md)
+ - [Defining and Instantiating Structs](ch05-01-defining-structs.md)
+ - [An Example Program Using Structs](ch05-02-example-structs.md)
+ - [Method Syntax](ch05-03-method-syntax.md)
+
+- [Enums and Pattern Matching](ch06-00-enums.md)
+ - [Defining an Enum](ch06-01-defining-an-enum.md)
+ - [The `match` Control Flow Operator](ch06-02-match.md)
+ - [Concise Control Flow with `if let`](ch06-03-if-let.md)
+
+## Basic Rust Literacy
+
+- [Modules](ch07-00-modules.md)
+ - [`mod` and the Filesystem](ch07-01-mod-and-the-filesystem.md)
+ - [Controlling Visibility with `pub`](ch07-02-controlling-visibility-with-pub.md)
+ - [Referring to Names in Different Modules](ch07-03-importing-names-with-use.md)
+
+- [Common Collections](ch08-00-common-collections.md)
+ - [Vectors](ch08-01-vectors.md)
+ - [Strings](ch08-02-strings.md)
+ - [Hash Maps](ch08-03-hash-maps.md)
+
+- [Error Handling](ch09-00-error-handling.md)
+ - [Unrecoverable Errors with `panic!`](ch09-01-unrecoverable-errors-with-panic.md)
+ - [Recoverable Errors with `Result`](ch09-02-recoverable-errors-with-result.md)
+ - [To `panic!` or Not to `panic!`](ch09-03-to-panic-or-not-to-panic.md)
+
+- [Generic Types, Traits, and Lifetimes](ch10-00-generics.md)
+ - [Generic Data Types](ch10-01-syntax.md)
+ - [Traits: Defining Shared Behavior](ch10-02-traits.md)
+ - [Validating References with Lifetimes](ch10-03-lifetime-syntax.md)
+
+- [Testing](ch11-00-testing.md)
+ - [Writing tests](ch11-01-writing-tests.md)
+ - [Running tests](ch11-02-running-tests.md)
+ - [Test Organization](ch11-03-test-organization.md)
+
+- [An I/O Project: Building a Command Line Program](ch12-00-an-io-project.md)
+ - [Accepting Command Line Arguments](ch12-01-accepting-command-line-arguments.md)
+ - [Reading a File](ch12-02-reading-a-file.md)
+ - [Refactoring to Improve Modularity and Error Handling](ch12-03-improving-error-handling-and-modularity.md)
+ - [Developing the Library’s Functionality with Test Driven Development](ch12-04-testing-the-librarys-functionality.md)
+ - [Working with Environment Variables](ch12-05-working-with-environment-variables.md)
+ - [Writing Error Messages to Standard Error Instead of Standard Output](ch12-06-writing-to-stderr-instead-of-stdout.md)
+
+## Thinking in Rust
+
+- [Functional Language Features: Iterators and Closures](ch13-00-functional-features.md)
+ - [Closures: Anonymous Functions that Can Capture Their Environment](ch13-01-closures.md)
+ - [Processing a Series of Items with Iterators](ch13-02-iterators.md)
+ - [Improving Our I/O Project](ch13-03-improving-our-io-project.md)
+ - [Comparing Performance: Loops vs. Iterators](ch13-04-performance.md)
+
+- [More about Cargo and Crates.io](ch14-00-more-about-cargo.md)
+ - [Customizing Builds with Release Profiles](ch14-01-release-profiles.md)
+ - [Publishing a Crate to Crates.io](ch14-02-publishing-to-crates-io.md)
+ - [Cargo Workspaces](ch14-03-cargo-workspaces.md)
+ - [Installing Binaries from Crates.io with `cargo install`](ch14-04-installing-binaries.md)
+ - [Extending Cargo with Custom Commands](ch14-05-extending-cargo.md)
+
+- [Smart Pointers](ch15-00-smart-pointers.md)
+ - [`Box<T>` Points to Data on the Heap and Has a Known Size](ch15-01-box.md)
+ - [The `Deref` Trait Allows Access to the Data Through a Reference](ch15-02-deref.md)
+ - [The `Drop` Trait Runs Code on Cleanup](ch15-03-drop.md)
+ - [`Rc<T>`, the Reference Counted Smart Pointer](ch15-04-rc.md)
+ - [`RefCell<T>` and the Interior Mutability Pattern](ch15-05-interior-mutability.md)
+ - [Creating Reference Cycles and Leaking Memory is Safe](ch15-06-reference-cycles.md)
+
+- [Fearless Concurrency](ch16-00-concurrency.md)
+ - [Threads](ch16-01-threads.md)
+ - [Message Passing](ch16-02-message-passing.md)
+ - [Shared State](ch16-03-shared-state.md)
+ - [Extensible Concurrency: `Sync` and `Send`](ch16-04-extensible-concurrency-sync-and-send.md)
+
+- [Object Oriented Programming Features of Rust](ch17-00-oop.md)
+ - [Characteristics of Object-Oriented Languages](ch17-01-what-is-oo.md)
+ - [Using Trait Objects that Allow for Values of Different Types](ch17-02-trait-objects.md)
+ - [Implementing an Object-Oriented Design Pattern](ch17-03-oo-design-patterns.md)
+
+## Advanced Topics
+
+- [Patterns Match the Structure of Values](ch18-00-patterns.md)
+ - [All the Places Patterns May be Used](ch18-01-all-the-places-for-patterns.md)
+ - [Refutability: Whether a Pattern Might Fail to Match](ch18-02-refutability.md)
+ - [All the Pattern Syntax](ch18-03-pattern-syntax.md)
+
+- [Advanced Features](ch19-00-advanced-features.md)
+ - [Unsafe Rust](ch19-01-unsafe-rust.md)
+ - [Advanced Lifetimes](ch19-02-advanced-lifetimes.md)
+ - [Advanced Traits](ch19-03-advanced-traits.md)
+ - [Advanced Types](ch19-04-advanced-types.md)
+ - [Advanced Functions & Closures](ch19-05-advanced-functions-and-closures.md)
+
+- [Final Project: Building a Multithreaded Web Server](ch20-00-final-project-a-web-server.md)
+ - [A Single Threaded Web Server](ch20-01-single-threaded.md)
+ - [Turning our Single Threaded Server into a Multithreaded Server](ch20-02-multithreaded.md)
+ - [Graceful Shutdown and Cleanup](ch20-03-graceful-shutdown-and-cleanup.md)
+
+- [Appendix](appendix-00.md)
+ - [A - Keywords](appendix-01-keywords.md)
+ - [B - Operators and Symbols](appendix-02-operators.md)
+ - [C - Derivable Traits](appendix-03-derivable-traits.md)
+ - [D - Macros](appendix-04-macros.md)
+ - [E - Translations](appendix-05-translation.md)
+ - [F - Newest Features](appendix-06-newest-features.md)
+ - [G - How Rust is Made and “Nightly Rust”](appendix-07-nightly-rust.md)
diff --git a/src/doc/book/second-edition/src/appendix-00.md b/src/doc/book/second-edition/src/appendix-00.md
new file mode 100644
index 000000000..a19a914da
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-00.md
@@ -0,0 +1,10 @@
+# Appendix
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-00.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-00.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-01-keywords.md b/src/doc/book/second-edition/src/appendix-01-keywords.md
new file mode 100644
index 000000000..a2dd67025
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-01-keywords.md
@@ -0,0 +1,10 @@
+## Appendix A: Keywords
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-01-keywords.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-01-keywords.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-02-operators.md b/src/doc/book/second-edition/src/appendix-02-operators.md
new file mode 100644
index 000000000..decfc7305
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-02-operators.md
@@ -0,0 +1,10 @@
+## Appendix B: Operators and Symbols
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-02-operators.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-02-operators.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-03-derivable-traits.md b/src/doc/book/second-edition/src/appendix-03-derivable-traits.md
new file mode 100644
index 000000000..f09dceeed
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-03-derivable-traits.md
@@ -0,0 +1,10 @@
+## Appendix C: Derivable Traits
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-03-derivable-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-03-derivable-traits.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-04-macros.md b/src/doc/book/second-edition/src/appendix-04-macros.md
new file mode 100644
index 000000000..2798b5d50
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-04-macros.md
@@ -0,0 +1,10 @@
+## Appendix D: Macros
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-06-macros.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-04-macros.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-05-translation.md b/src/doc/book/second-edition/src/appendix-05-translation.md
new file mode 100644
index 000000000..69562bc96
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-05-translation.md
@@ -0,0 +1,10 @@
+## Appendix E: Translations of the Book
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-06-translation.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-05-translation.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-06-newest-features.md b/src/doc/book/second-edition/src/appendix-06-newest-features.md
new file mode 100644
index 000000000..c1b2f9152
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-06-newest-features.md
@@ -0,0 +1,10 @@
+# Appendix F - Newest Features
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-06-newest-features.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/appendix-07-nightly-rust.md b/src/doc/book/second-edition/src/appendix-07-nightly-rust.md
new file mode 100644
index 000000000..41f3b3ec7
--- /dev/null
+++ b/src/doc/book/second-edition/src/appendix-07-nightly-rust.md
@@ -0,0 +1,10 @@
+# Appendix G - How Rust is Made and “Nightly Rust”
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../appendix-07-nightly-rust.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/appendix-07-nightly-rust.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch00-00-introduction.md b/src/doc/book/second-edition/src/ch00-00-introduction.md
new file mode 100644
index 000000000..7de0c638a
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch00-00-introduction.md
@@ -0,0 +1,10 @@
+# Introduction
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch00-00-introduction.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch00-00-introduction.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch01-00-getting-started.md b/src/doc/book/second-edition/src/ch01-00-getting-started.md
new file mode 100644
index 000000000..6aa4e1e5b
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch01-00-getting-started.md
@@ -0,0 +1,10 @@
+# Getting Started
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-00-getting-started.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-00-getting-started.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch01-01-installation.md b/src/doc/book/second-edition/src/ch01-01-installation.md
new file mode 100644
index 000000000..478be2f7c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch01-01-installation.md
@@ -0,0 +1,10 @@
+## Installation
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-01-installation.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch01-01-installation.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch01-02-hello-world.md b/src/doc/book/second-edition/src/ch01-02-hello-world.md
new file mode 100644
index 000000000..6d690501c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch01-02-hello-world.md
@@ -0,0 +1,10 @@
+## Hello, World!
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-02-hello-world.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch01-02-hello-world.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch01-03-hello-cargo.md b/src/doc/book/second-edition/src/ch01-03-hello-cargo.md
new file mode 100644
index 000000000..72227bc8e
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch01-03-hello-cargo.md
@@ -0,0 +1,10 @@
+## Hello, Cargo!
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch01-03-hello-cargo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch01-03-hello-cargo.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch02-00-guessing-game-tutorial.md b/src/doc/book/second-edition/src/ch02-00-guessing-game-tutorial.md
new file mode 100644
index 000000000..c670083bc
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch02-00-guessing-game-tutorial.md
@@ -0,0 +1,10 @@
+# Programming a Guessing Game
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch02-00-guessing-game-tutorial.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch02-00-guessing-game-tutorial.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch03-00-common-programming-concepts.md b/src/doc/book/second-edition/src/ch03-00-common-programming-concepts.md
new file mode 100644
index 000000000..b2cb97064
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch03-00-common-programming-concepts.md
@@ -0,0 +1,10 @@
+# Common Programming Concepts
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-00-common-programming-concepts.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch03-00-common-programming-concepts.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch03-01-variables-and-mutability.md b/src/doc/book/second-edition/src/ch03-01-variables-and-mutability.md
new file mode 100644
index 000000000..70a85b269
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch03-01-variables-and-mutability.md
@@ -0,0 +1,10 @@
+## Variables and Mutability
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-01-variables-and-mutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch03-01-variables-and-mutability.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch03-02-data-types.md b/src/doc/book/second-edition/src/ch03-02-data-types.md
new file mode 100644
index 000000000..43b14f4e9
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch03-02-data-types.md
@@ -0,0 +1,10 @@
+## Data Types
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-02-data-types.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch03-02-data-types.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch03-03-how-functions-work.md b/src/doc/book/second-edition/src/ch03-03-how-functions-work.md
new file mode 100644
index 000000000..e37d09eba
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch03-03-how-functions-work.md
@@ -0,0 +1,10 @@
+## Functions
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-03-how-functions-work.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch03-03-how-functions-work.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch03-04-comments.md b/src/doc/book/second-edition/src/ch03-04-comments.md
new file mode 100644
index 000000000..1775b7d06
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch03-04-comments.md
@@ -0,0 +1,10 @@
+## Comments
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-04-comments.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch03-04-comments.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch03-05-control-flow.md b/src/doc/book/second-edition/src/ch03-05-control-flow.md
new file mode 100644
index 000000000..977c19aa0
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch03-05-control-flow.md
@@ -0,0 +1,10 @@
+## Control Flow
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch03-05-control-flow.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch03-05-control-flow.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch04-00-understanding-ownership.md b/src/doc/book/second-edition/src/ch04-00-understanding-ownership.md
new file mode 100644
index 000000000..3764c3c0c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch04-00-understanding-ownership.md
@@ -0,0 +1,10 @@
+# Understanding Ownership
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-00-understanding-ownership.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch04-00-understanding-ownership.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch04-01-what-is-ownership.md b/src/doc/book/second-edition/src/ch04-01-what-is-ownership.md
new file mode 100644
index 000000000..8f857a394
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch04-01-what-is-ownership.md
@@ -0,0 +1,10 @@
+## What Is Ownership?
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-01-what-is-ownership.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch04-01-what-is-ownership.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch04-02-references-and-borrowing.md b/src/doc/book/second-edition/src/ch04-02-references-and-borrowing.md
new file mode 100644
index 000000000..f9ccceaa1
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch04-02-references-and-borrowing.md
@@ -0,0 +1,10 @@
+## References and Borrowing
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-02-references-and-borrowing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch04-02-references-and-borrowing.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch04-03-slices.md b/src/doc/book/second-edition/src/ch04-03-slices.md
new file mode 100644
index 000000000..4b4c3967f
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch04-03-slices.md
@@ -0,0 +1,10 @@
+## The Slice Type
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch04-03-slices.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch04-03-slices.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch05-00-structs.md b/src/doc/book/second-edition/src/ch05-00-structs.md
new file mode 100644
index 000000000..e7b6e512e
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch05-00-structs.md
@@ -0,0 +1,10 @@
+# Using Structs to Structure Related Data
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-00-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch05-00-structs.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch05-01-defining-structs.md b/src/doc/book/second-edition/src/ch05-01-defining-structs.md
new file mode 100644
index 000000000..39bf82831
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch05-01-defining-structs.md
@@ -0,0 +1,10 @@
+## Defining and Instantiating Structs
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-01-defining-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch05-01-defining-structs.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch05-02-example-structs.md b/src/doc/book/second-edition/src/ch05-02-example-structs.md
new file mode 100644
index 000000000..b32a1e301
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch05-02-example-structs.md
@@ -0,0 +1,10 @@
+## An Example Program Using Structs
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-02-example-structs.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch05-02-example-structs.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch05-03-method-syntax.md b/src/doc/book/second-edition/src/ch05-03-method-syntax.md
new file mode 100644
index 000000000..d8338023a
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch05-03-method-syntax.md
@@ -0,0 +1,10 @@
+## Method Syntax
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch05-03-method-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch05-03-method-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch06-00-enums.md b/src/doc/book/second-edition/src/ch06-00-enums.md
new file mode 100644
index 000000000..367060de3
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch06-00-enums.md
@@ -0,0 +1,10 @@
+# Enums and Pattern Matching
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-00-enums.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch06-00-enums.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch06-01-defining-an-enum.md b/src/doc/book/second-edition/src/ch06-01-defining-an-enum.md
new file mode 100644
index 000000000..1963c7bc2
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch06-01-defining-an-enum.md
@@ -0,0 +1,10 @@
+## Defining an Enum
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-01-defining-an-enum.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch06-01-defining-an-enum.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch06-02-match.md b/src/doc/book/second-edition/src/ch06-02-match.md
new file mode 100644
index 000000000..57c7a701b
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch06-02-match.md
@@ -0,0 +1,10 @@
+## The `match` Control Flow Operator
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-02-match.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch06-02-match.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch06-03-if-let.md b/src/doc/book/second-edition/src/ch06-03-if-let.md
new file mode 100644
index 000000000..ba5998340
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch06-03-if-let.md
@@ -0,0 +1,10 @@
+## Concise Control Flow with `if let`
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch06-03-if-let.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch06-03-if-let.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch07-00-modules.md b/src/doc/book/second-edition/src/ch07-00-modules.md
new file mode 100644
index 000000000..43cd6bb20
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch07-00-modules.md
@@ -0,0 +1,10 @@
+# Using Modules to Reuse and Organize Code
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch07-02-defining-modules-to-control-scope-and-privacy.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch07-00-modules.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch07-01-mod-and-the-filesystem.md b/src/doc/book/second-edition/src/ch07-01-mod-and-the-filesystem.md
new file mode 100644
index 000000000..688900113
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch07-01-mod-and-the-filesystem.md
@@ -0,0 +1,10 @@
+## `mod` and the Filesystem
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch07-02-defining-modules-to-control-scope-and-privacy.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch07-01-mod-and-the-filesystem.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch07-02-controlling-visibility-with-pub.md b/src/doc/book/second-edition/src/ch07-02-controlling-visibility-with-pub.md
new file mode 100644
index 000000000..8eb9e5455
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch07-02-controlling-visibility-with-pub.md
@@ -0,0 +1,10 @@
+## Controlling Visibility with `pub`
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch07-02-defining-modules-to-control-scope-and-privacy.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch07-02-controlling-visibility-with-pub.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch07-03-importing-names-with-use.md b/src/doc/book/second-edition/src/ch07-03-importing-names-with-use.md
new file mode 100644
index 000000000..afcdc29d3
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch07-03-importing-names-with-use.md
@@ -0,0 +1,10 @@
+## Referring to Names in Different Modules
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch07-04-bringing-paths-into-scope-with-the-use-keyword.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch07-03-importing-names-with-use.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch08-00-common-collections.md b/src/doc/book/second-edition/src/ch08-00-common-collections.md
new file mode 100644
index 000000000..b1711089c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch08-00-common-collections.md
@@ -0,0 +1,10 @@
+# Common Collections
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-00-common-collections.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch08-00-common-collections.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch08-01-vectors.md b/src/doc/book/second-edition/src/ch08-01-vectors.md
new file mode 100644
index 000000000..37469503e
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch08-01-vectors.md
@@ -0,0 +1,10 @@
+## Storing Lists of Values with Vectors
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-01-vectors.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch08-01-vectors.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch08-02-strings.md b/src/doc/book/second-edition/src/ch08-02-strings.md
new file mode 100644
index 000000000..f5ed14390
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch08-02-strings.md
@@ -0,0 +1,10 @@
+## Storing UTF-8 Encoded Text with Strings
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-02-strings.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch08-02-strings.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch08-03-hash-maps.md b/src/doc/book/second-edition/src/ch08-03-hash-maps.md
new file mode 100644
index 000000000..21d14bccc
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch08-03-hash-maps.md
@@ -0,0 +1,10 @@
+## Storing Keys with Associated Values in Hash Maps
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch08-03-hash-maps.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch08-03-hash-maps.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch09-00-error-handling.md b/src/doc/book/second-edition/src/ch09-00-error-handling.md
new file mode 100644
index 000000000..3a5de11a2
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch09-00-error-handling.md
@@ -0,0 +1,10 @@
+# Error Handling
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-00-error-handling.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch09-00-error-handling.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch09-01-unrecoverable-errors-with-panic.md b/src/doc/book/second-edition/src/ch09-01-unrecoverable-errors-with-panic.md
new file mode 100644
index 000000000..2596c3677
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch09-01-unrecoverable-errors-with-panic.md
@@ -0,0 +1,10 @@
+## Unrecoverable Errors with `panic!`
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-01-unrecoverable-errors-with-panic.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch09-01-unrecoverable-errors-with-panic.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch09-02-recoverable-errors-with-result.md b/src/doc/book/second-edition/src/ch09-02-recoverable-errors-with-result.md
new file mode 100644
index 000000000..ac1bfe151
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch09-02-recoverable-errors-with-result.md
@@ -0,0 +1,10 @@
+## Recoverable Errors with `Result`
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-02-recoverable-errors-with-result.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch09-02-recoverable-errors-with-result.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch09-03-to-panic-or-not-to-panic.md b/src/doc/book/second-edition/src/ch09-03-to-panic-or-not-to-panic.md
new file mode 100644
index 000000000..f2037237f
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch09-03-to-panic-or-not-to-panic.md
@@ -0,0 +1,10 @@
+## To `panic!` or Not to `panic!`
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch09-03-to-panic-or-not-to-panic.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch09-03-to-panic-or-not-to-panic.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch10-00-generics.md b/src/doc/book/second-edition/src/ch10-00-generics.md
new file mode 100644
index 000000000..e8dd4a07a
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch10-00-generics.md
@@ -0,0 +1,10 @@
+# Generic Types, Traits, and Lifetimes
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-00-generics.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-00-generics.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch10-01-syntax.md b/src/doc/book/second-edition/src/ch10-01-syntax.md
new file mode 100644
index 000000000..fcfb3e69b
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch10-01-syntax.md
@@ -0,0 +1,10 @@
+## Generic Data Types
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-01-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-01-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch10-02-traits.md b/src/doc/book/second-edition/src/ch10-02-traits.md
new file mode 100644
index 000000000..9d0d72bd8
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch10-02-traits.md
@@ -0,0 +1,10 @@
+## Traits: Defining Shared Behavior
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-02-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-02-traits.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch10-03-lifetime-syntax.md b/src/doc/book/second-edition/src/ch10-03-lifetime-syntax.md
new file mode 100644
index 000000000..05d6e5dc3
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch10-03-lifetime-syntax.md
@@ -0,0 +1,10 @@
+## Validating References with Lifetimes
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch10-03-lifetime-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch10-03-lifetime-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch11-00-testing.md b/src/doc/book/second-edition/src/ch11-00-testing.md
new file mode 100644
index 000000000..76aa84e75
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch11-00-testing.md
@@ -0,0 +1,10 @@
+# Writing Automated Tests
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-00-testing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch11-00-testing.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch11-01-writing-tests.md b/src/doc/book/second-edition/src/ch11-01-writing-tests.md
new file mode 100644
index 000000000..0b332ef5c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch11-01-writing-tests.md
@@ -0,0 +1,10 @@
+## How to Write Tests
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-01-writing-tests.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch11-01-writing-tests.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch11-02-running-tests.md b/src/doc/book/second-edition/src/ch11-02-running-tests.md
new file mode 100644
index 000000000..b1276b381
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch11-02-running-tests.md
@@ -0,0 +1,10 @@
+## Controlling How Tests Are Run
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-02-running-tests.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch11-02-running-tests.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch11-03-test-organization.md b/src/doc/book/second-edition/src/ch11-03-test-organization.md
new file mode 100644
index 000000000..4edb0c083
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch11-03-test-organization.md
@@ -0,0 +1,10 @@
+## Test Organization
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch11-03-test-organization.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch11-03-test-organization.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-00-an-io-project.md b/src/doc/book/second-edition/src/ch12-00-an-io-project.md
new file mode 100644
index 000000000..a631a15cc
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-00-an-io-project.md
@@ -0,0 +1,10 @@
+# An I/O Project: Building a Command Line Program
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-00-an-io-project.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-00-an-io-project.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-01-accepting-command-line-arguments.md b/src/doc/book/second-edition/src/ch12-01-accepting-command-line-arguments.md
new file mode 100644
index 000000000..a904cad31
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-01-accepting-command-line-arguments.md
@@ -0,0 +1,10 @@
+## Accepting Command Line Arguments
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-01-accepting-command-line-arguments.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-01-accepting-command-line-arguments.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-02-reading-a-file.md b/src/doc/book/second-edition/src/ch12-02-reading-a-file.md
new file mode 100644
index 000000000..d3b74d030
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-02-reading-a-file.md
@@ -0,0 +1,10 @@
+## Reading a File
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-02-reading-a-file.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-02-reading-a-file.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-03-improving-error-handling-and-modularity.md b/src/doc/book/second-edition/src/ch12-03-improving-error-handling-and-modularity.md
new file mode 100644
index 000000000..cd6fd68fc
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-03-improving-error-handling-and-modularity.md
@@ -0,0 +1,10 @@
+## Refactoring to Improve Modularity and Error Handling
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-03-improving-error-handling-and-modularity.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-03-improving-error-handling-and-modularity.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-04-testing-the-librarys-functionality.md b/src/doc/book/second-edition/src/ch12-04-testing-the-librarys-functionality.md
new file mode 100644
index 000000000..c9bfa60c9
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-04-testing-the-librarys-functionality.md
@@ -0,0 +1,10 @@
+## Developing the Library’s Functionality with Test-Driven Development
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-04-testing-the-librarys-functionality.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-04-testing-the-librarys-functionality.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-05-working-with-environment-variables.md b/src/doc/book/second-edition/src/ch12-05-working-with-environment-variables.md
new file mode 100644
index 000000000..58ffd2967
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-05-working-with-environment-variables.md
@@ -0,0 +1,10 @@
+## Working with Environment Variables
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-05-working-with-environment-variables.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-05-working-with-environment-variables.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md b/src/doc/book/second-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md
new file mode 100644
index 000000000..e0dc231cd
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch12-06-writing-to-stderr-instead-of-stdout.md
@@ -0,0 +1,10 @@
+## Writing Error Messages to Standard Error Instead of Standard Output
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch12-06-writing-to-stderr-instead-of-stdout.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch12-06-writing-to-stderr-instead-of-stdout.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch13-00-functional-features.md b/src/doc/book/second-edition/src/ch13-00-functional-features.md
new file mode 100644
index 000000000..169779ffa
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch13-00-functional-features.md
@@ -0,0 +1,10 @@
+# Functional Language Features: Iterators and Closures
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-00-functional-features.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch13-00-functional-features.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch13-01-closures.md b/src/doc/book/second-edition/src/ch13-01-closures.md
new file mode 100644
index 000000000..0a519e3b7
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch13-01-closures.md
@@ -0,0 +1,10 @@
+## Closures: Anonymous Functions that Can Capture Their Environment
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-01-closures.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch13-01-closures.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch13-02-iterators.md b/src/doc/book/second-edition/src/ch13-02-iterators.md
new file mode 100644
index 000000000..7afcb18cd
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch13-02-iterators.md
@@ -0,0 +1,10 @@
+## Processing a Series of Items with Iterators
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-02-iterators.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch13-02-iterators.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch13-03-improving-our-io-project.md b/src/doc/book/second-edition/src/ch13-03-improving-our-io-project.md
new file mode 100644
index 000000000..75a40b1a8
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch13-03-improving-our-io-project.md
@@ -0,0 +1,10 @@
+## Improving Our I/O Project
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-03-improving-our-io-project.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch13-03-improving-our-io-project.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch13-04-performance.md b/src/doc/book/second-edition/src/ch13-04-performance.md
new file mode 100644
index 000000000..b8bd6437b
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch13-04-performance.md
@@ -0,0 +1,10 @@
+## Comparing Performance: Loops vs. Iterators
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch13-04-performance.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch13-04-performance.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch14-00-more-about-cargo.md b/src/doc/book/second-edition/src/ch14-00-more-about-cargo.md
new file mode 100644
index 000000000..ff19c7b55
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch14-00-more-about-cargo.md
@@ -0,0 +1,10 @@
+# More About Cargo and Crates.io
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-00-more-about-cargo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch14-00-more-about-cargo.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch14-01-release-profiles.md b/src/doc/book/second-edition/src/ch14-01-release-profiles.md
new file mode 100644
index 000000000..dcad779bc
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch14-01-release-profiles.md
@@ -0,0 +1,10 @@
+## Customizing Builds with Release Profiles
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-01-release-profiles.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch14-01-release-profiles.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch14-02-publishing-to-crates-io.md b/src/doc/book/second-edition/src/ch14-02-publishing-to-crates-io.md
new file mode 100644
index 000000000..a4e2f79a8
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch14-02-publishing-to-crates-io.md
@@ -0,0 +1,10 @@
+## Publishing a Crate to Crates.io
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-02-publishing-to-crates-io.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch14-02-publishing-to-crates-io.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch14-03-cargo-workspaces.md b/src/doc/book/second-edition/src/ch14-03-cargo-workspaces.md
new file mode 100644
index 000000000..b748600e3
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch14-03-cargo-workspaces.md
@@ -0,0 +1,10 @@
+## Cargo Workspaces
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-03-cargo-workspaces.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch14-03-cargo-workspaces.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch14-04-installing-binaries.md b/src/doc/book/second-edition/src/ch14-04-installing-binaries.md
new file mode 100644
index 000000000..8f435f22c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch14-04-installing-binaries.md
@@ -0,0 +1,10 @@
+## Installing Binaries from Crates.io with `cargo install`
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-04-installing-binaries.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch14-04-installing-binaries.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch14-05-extending-cargo.md b/src/doc/book/second-edition/src/ch14-05-extending-cargo.md
new file mode 100644
index 000000000..66cae5f57
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch14-05-extending-cargo.md
@@ -0,0 +1,10 @@
+## Extending Cargo with Custom Commands
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch14-05-extending-cargo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch14-05-extending-cargo.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-00-smart-pointers.md b/src/doc/book/second-edition/src/ch15-00-smart-pointers.md
new file mode 100644
index 000000000..720732d01
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-00-smart-pointers.md
@@ -0,0 +1,10 @@
+# Smart Pointers
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-00-smart-pointers.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-00-smart-pointers.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-01-box.md b/src/doc/book/second-edition/src/ch15-01-box.md
new file mode 100644
index 000000000..1ea314fc2
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-01-box.md
@@ -0,0 +1,10 @@
+## Using `Box<T>` to Point to Data on the Heap
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-01-box.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-01-box.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-02-deref.md b/src/doc/book/second-edition/src/ch15-02-deref.md
new file mode 100644
index 000000000..654b6befe
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-02-deref.md
@@ -0,0 +1,10 @@
+## Treating Smart Pointers Like Regular References with the `Deref` Trait
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-02-deref.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-02-deref.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-03-drop.md b/src/doc/book/second-edition/src/ch15-03-drop.md
new file mode 100644
index 000000000..96914d355
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-03-drop.md
@@ -0,0 +1,10 @@
+## Running Code on Cleanup with the `Drop` Trait
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-03-drop.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-03-drop.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-04-rc.md b/src/doc/book/second-edition/src/ch15-04-rc.md
new file mode 100644
index 000000000..6179a0e1c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-04-rc.md
@@ -0,0 +1,10 @@
+## `Rc<T>`, the Reference Counted Smart Pointer
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-04-rc.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-04-rc.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-05-interior-mutability.md b/src/doc/book/second-edition/src/ch15-05-interior-mutability.md
new file mode 100644
index 000000000..eeeb93269
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-05-interior-mutability.md
@@ -0,0 +1,10 @@
+## `RefCell<T>` and the Interior Mutability Pattern
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-05-interior-mutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-05-interior-mutability.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch15-06-reference-cycles.md b/src/doc/book/second-edition/src/ch15-06-reference-cycles.md
new file mode 100644
index 000000000..8edae3ed2
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch15-06-reference-cycles.md
@@ -0,0 +1,10 @@
+## Reference Cycles Can Leak Memory
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch15-06-reference-cycles.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch15-06-reference-cycles.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch16-00-concurrency.md b/src/doc/book/second-edition/src/ch16-00-concurrency.md
new file mode 100644
index 000000000..9069bd985
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch16-00-concurrency.md
@@ -0,0 +1,10 @@
+# Fearless Concurrency
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-00-concurrency.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch16-00-concurrency.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch16-01-threads.md b/src/doc/book/second-edition/src/ch16-01-threads.md
new file mode 100644
index 000000000..0d287512d
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch16-01-threads.md
@@ -0,0 +1,10 @@
+## Using Threads to Run Code Simultaneously
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-01-threads.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch16-01-threads.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch16-02-message-passing.md b/src/doc/book/second-edition/src/ch16-02-message-passing.md
new file mode 100644
index 000000000..186ab0b59
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch16-02-message-passing.md
@@ -0,0 +1,10 @@
+## Using Message Passing to Transfer Data Between Threads
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-02-message-passing.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch16-02-message-passing.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch16-03-shared-state.md b/src/doc/book/second-edition/src/ch16-03-shared-state.md
new file mode 100644
index 000000000..dbd58bfba
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch16-03-shared-state.md
@@ -0,0 +1,10 @@
+## Shared-State Concurrency
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-03-shared-state.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch16-03-shared-state.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch16-04-extensible-concurrency-sync-and-send.md b/src/doc/book/second-edition/src/ch16-04-extensible-concurrency-sync-and-send.md
new file mode 100644
index 000000000..81fb6cb8b
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch16-04-extensible-concurrency-sync-and-send.md
@@ -0,0 +1,10 @@
+## Extensible Concurrency with the `Sync` and `Send` Traits
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch16-04-extensible-concurrency-sync-and-send.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch16-04-extensible-concurrency-sync-and-send.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch17-00-oop.md b/src/doc/book/second-edition/src/ch17-00-oop.md
new file mode 100644
index 000000000..752130915
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch17-00-oop.md
@@ -0,0 +1,10 @@
+# Object Oriented Programming Features of Rust
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-00-oop.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch17-00-oop.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch17-01-what-is-oo.md b/src/doc/book/second-edition/src/ch17-01-what-is-oo.md
new file mode 100644
index 000000000..82c1ed8f9
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch17-01-what-is-oo.md
@@ -0,0 +1,10 @@
+## Characteristics of Object-Oriented Languages
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-01-what-is-oo.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch17-01-what-is-oo.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch17-02-trait-objects.md b/src/doc/book/second-edition/src/ch17-02-trait-objects.md
new file mode 100644
index 000000000..35f0c1883
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch17-02-trait-objects.md
@@ -0,0 +1,10 @@
+## Using Trait Objects that Allow for Values of Different Types
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-02-trait-objects.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch17-02-trait-objects.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch17-03-oo-design-patterns.md b/src/doc/book/second-edition/src/ch17-03-oo-design-patterns.md
new file mode 100644
index 000000000..46bec2692
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch17-03-oo-design-patterns.md
@@ -0,0 +1,10 @@
+## Implementing an Object-Oriented Design Pattern
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch17-03-oo-design-patterns.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch17-03-oo-design-patterns.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch18-00-patterns.md b/src/doc/book/second-edition/src/ch18-00-patterns.md
new file mode 100644
index 000000000..6bd221fa3
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch18-00-patterns.md
@@ -0,0 +1,10 @@
+# Patterns and Matching
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-00-patterns.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch18-00-patterns.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch18-01-all-the-places-for-patterns.md b/src/doc/book/second-edition/src/ch18-01-all-the-places-for-patterns.md
new file mode 100644
index 000000000..0374a9a88
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch18-01-all-the-places-for-patterns.md
@@ -0,0 +1,10 @@
+## All the Places Patterns Can Be Used
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-01-all-the-places-for-patterns.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch18-01-all-the-places-for-patterns.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch18-02-refutability.md b/src/doc/book/second-edition/src/ch18-02-refutability.md
new file mode 100644
index 000000000..2ef5206af
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch18-02-refutability.md
@@ -0,0 +1,10 @@
+## Refutability: Whether a Pattern Might Fail to Match
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-02-refutability.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch18-02-refutability.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch18-03-pattern-syntax.md b/src/doc/book/second-edition/src/ch18-03-pattern-syntax.md
new file mode 100644
index 000000000..31c5f7920
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch18-03-pattern-syntax.md
@@ -0,0 +1,10 @@
+## Pattern Syntax
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch18-03-pattern-syntax.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch18-03-pattern-syntax.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch19-00-advanced-features.md b/src/doc/book/second-edition/src/ch19-00-advanced-features.md
new file mode 100644
index 000000000..f6df05f0a
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch19-00-advanced-features.md
@@ -0,0 +1,10 @@
+# Advanced Features
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-00-advanced-features.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-00-advanced-features.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch19-01-unsafe-rust.md b/src/doc/book/second-edition/src/ch19-01-unsafe-rust.md
new file mode 100644
index 000000000..8a9a29c09
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch19-01-unsafe-rust.md
@@ -0,0 +1,10 @@
+## Unsafe Rust
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-01-unsafe-rust.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-01-unsafe-rust.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch19-02-advanced-lifetimes.md b/src/doc/book/second-edition/src/ch19-02-advanced-lifetimes.md
new file mode 100644
index 000000000..374382886
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch19-02-advanced-lifetimes.md
@@ -0,0 +1,10 @@
+## Advanced Lifetimes
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../index.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-02-advanced-lifetimes.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch19-03-advanced-traits.md b/src/doc/book/second-edition/src/ch19-03-advanced-traits.md
new file mode 100644
index 000000000..cc8433fb3
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch19-03-advanced-traits.md
@@ -0,0 +1,10 @@
+## Advanced Traits
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-03-advanced-traits.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-03-advanced-traits.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch19-04-advanced-types.md b/src/doc/book/second-edition/src/ch19-04-advanced-types.md
new file mode 100644
index 000000000..508145729
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch19-04-advanced-types.md
@@ -0,0 +1,10 @@
+## Advanced Types
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-04-advanced-types.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-04-advanced-types.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch19-05-advanced-functions-and-closures.md b/src/doc/book/second-edition/src/ch19-05-advanced-functions-and-closures.md
new file mode 100644
index 000000000..18d369c60
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch19-05-advanced-functions-and-closures.md
@@ -0,0 +1,10 @@
+## Advanced Functions and Closures
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch19-05-advanced-functions-and-closures.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-05-advanced-functions-and-closures.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch20-00-final-project-a-web-server.md b/src/doc/book/second-edition/src/ch20-00-final-project-a-web-server.md
new file mode 100644
index 000000000..059d6824c
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch20-00-final-project-a-web-server.md
@@ -0,0 +1,10 @@
+# Final Project: Building a Multithreaded Web Server
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-00-final-project-a-web-server.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch20-00-final-project-a-web-server.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch20-01-single-threaded.md b/src/doc/book/second-edition/src/ch20-01-single-threaded.md
new file mode 100644
index 000000000..5ff97a2ee
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch20-01-single-threaded.md
@@ -0,0 +1,10 @@
+## Building a Single-Threaded Web Server
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-01-single-threaded.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch20-01-single-threaded.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch20-02-multithreaded.md b/src/doc/book/second-edition/src/ch20-02-multithreaded.md
new file mode 100644
index 000000000..0695d2451
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch20-02-multithreaded.md
@@ -0,0 +1,10 @@
+## Turning Our Single-Threaded Server into a Multithreaded Server
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-02-multithreaded.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch20-02-multithreaded.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/ch20-03-graceful-shutdown-and-cleanup.md b/src/doc/book/second-edition/src/ch20-03-graceful-shutdown-and-cleanup.md
new file mode 100644
index 000000000..eb7ed5987
--- /dev/null
+++ b/src/doc/book/second-edition/src/ch20-03-graceful-shutdown-and-cleanup.md
@@ -0,0 +1,10 @@
+## Graceful Shutdown and Cleanup
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../ch20-03-graceful-shutdown-and-cleanup.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/ch20-03-graceful-shutdown-and-cleanup.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/foreword.md b/src/doc/book/second-edition/src/foreword.md
new file mode 100644
index 000000000..f369abbf6
--- /dev/null
+++ b/src/doc/book/second-edition/src/foreword.md
@@ -0,0 +1,10 @@
+# Foreword
+
+The second edition of the book is no longer distributed with Rust's documentation.
+
+If you came here via a link or web search, you may want to check out [the current
+version of the book](../foreword.html) instead.
+
+If you have an internet connection, you can [find a copy distributed with
+Rust
+1.30](https://doc.rust-lang.org/1.30.0/book/second-edition/foreword.html). \ No newline at end of file
diff --git a/src/doc/book/second-edition/src/img/trpl04-01.svg b/src/doc/book/second-edition/src/img/trpl04-01.svg
new file mode 100644
index 000000000..314f53ba1
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl04-01.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 700.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 152)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-152 233,-152 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 96,-124 "/>
+<text text-anchor="start" x="45.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 60,-124 60,-104 8,-104"/>
+<text text-anchor="start" x="18.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-104 60,-124 96,-124 96,-104 60,-104"/>
+<text text-anchor="start" x="62.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 60,-104 60,-84 8,-84"/>
+<text text-anchor="start" x="26.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-84 60,-104 96,-104 96,-84 60,-84"/>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="25.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="74.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="10.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<text text-anchor="start" x="74.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="151.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="188.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="200" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="163.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-94C78,-94 109.3406,-94 138.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-97.5001 148.5,-94 138.5,-90.5001 138.5,-97.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl04-02.svg b/src/doc/book/second-edition/src/img/trpl04-02.svg
new file mode 100644
index 000000000..70d490f0b
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl04-02.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1000.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 238)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-238 233,-238 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-210 96,-210 "/>
+<text text-anchor="start" x="45.7759" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="18.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="62.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-170 8,-190 60,-190 60,-170 8,-170"/>
+<text text-anchor="start" x="26.2241" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-170 60,-190 96,-190 96,-170 60,-170"/>
+<polygon fill="none" stroke="#000000" points="8,-150 8,-170 60,-170 60,-150 8,-150"/>
+<text text-anchor="start" x="25.4482" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-150 60,-170 96,-170 96,-150 60,-150"/>
+<text text-anchor="start" x="74.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-130 8,-150 60,-150 60,-130 8,-130"/>
+<text text-anchor="start" x="10.6826" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-130 60,-150 96,-150 96,-130 60,-130"/>
+<text text-anchor="start" x="74.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node3" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-127 148.5,-147 185.5,-147 185.5,-127 148.5,-127"/>
+<text text-anchor="start" x="151.4482" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-127 185.5,-147 221.5,-147 221.5,-127 185.5,-127"/>
+<text text-anchor="start" x="188.3413" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-107 148.5,-127 185.5,-127 185.5,-107 148.5,-107"/>
+<text text-anchor="start" x="163.5" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-107 185.5,-127 221.5,-127 221.5,-107 185.5,-107"/>
+<text text-anchor="start" x="200" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-87 148.5,-107 185.5,-107 185.5,-87 148.5,-87"/>
+<text text-anchor="start" x="163.5" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-87 185.5,-107 221.5,-107 221.5,-87 185.5,-87"/>
+<text text-anchor="start" x="200.3931" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-67 148.5,-87 185.5,-87 185.5,-67 148.5,-67"/>
+<text text-anchor="start" x="163.5" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-67 185.5,-87 221.5,-87 221.5,-67 185.5,-67"/>
+<text text-anchor="start" x="201.5552" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-47 148.5,-67 185.5,-67 185.5,-47 148.5,-47"/>
+<text text-anchor="start" x="163.5" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-47 185.5,-67 221.5,-67 221.5,-47 185.5,-47"/>
+<text text-anchor="start" x="201.5552" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-27 148.5,-47 185.5,-47 185.5,-27 148.5,-27"/>
+<text text-anchor="start" x="163.5" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-27 185.5,-47 221.5,-47 221.5,-27 185.5,-27"/>
+<text text-anchor="start" x="200" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-180C78,-180 101.9982,-126.912 138.4405,-118.2023"/>
+<polygon fill="#000000" stroke="#000000" points="138.986,-121.6621 148.5,-117 138.1553,-114.7115 138.986,-121.6621"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-84 96,-84 "/>
+<text text-anchor="start" x="45.7759" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="18.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="62.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="26.2241" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<polygon fill="none" stroke="#000000" points="8,-24 8,-44 60,-44 60,-24 8,-24"/>
+<text text-anchor="start" x="25.4482" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-24 60,-44 96,-44 96,-24 60,-24"/>
+<text text-anchor="start" x="74.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-24 60,-24 60,-4 8,-4"/>
+<text text-anchor="start" x="10.6826" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-4 60,-24 96,-24 96,-4 60,-4"/>
+<text text-anchor="start" x="74.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table3&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-54C78,-54 101.9982,-107.088 138.4405,-115.7977"/>
+<polygon fill="#000000" stroke="#000000" points="138.1553,-119.2885 148.5,-117 138.986,-112.3379 138.1553,-119.2885"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl04-03.svg b/src/doc/book/second-edition/src/img/trpl04-03.svg
new file mode 100644
index 000000000..7c153e23a
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl04-03.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1300.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 298)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-298 233,-298 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 96,-124 "/>
+<text text-anchor="start" x="45.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 60,-124 60,-104 8,-104"/>
+<text text-anchor="start" x="18.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-104 60,-124 96,-124 96,-104 60,-104"/>
+<text text-anchor="start" x="62.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 60,-104 60,-84 8,-84"/>
+<text text-anchor="start" x="26.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-84 60,-104 96,-104 96,-84 60,-84"/>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="25.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="74.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="10.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<text text-anchor="start" x="74.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="151.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="188.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="200" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="163.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-94C78,-94 109.3406,-94 138.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-97.5001 148.5,-94 138.5,-90.5001 138.5,-97.5001"/>
+</g>
+<!-- table3 -->
+<g id="node3" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-270 96,-270 "/>
+<text text-anchor="start" x="45.7759" y="-275.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-250 8,-270 60,-270 60,-250 8,-250"/>
+<text text-anchor="start" x="18.8413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-250 60,-270 96,-270 96,-250 60,-250"/>
+<text text-anchor="start" x="62.8413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-230 8,-250 60,-250 60,-230 8,-230"/>
+<text text-anchor="start" x="26.2241" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-230 60,-250 96,-250 96,-230 60,-230"/>
+<polygon fill="none" stroke="#000000" points="8,-210 8,-230 60,-230 60,-210 8,-210"/>
+<text text-anchor="start" x="25.4482" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-210 60,-230 96,-230 96,-210 60,-210"/>
+<text text-anchor="start" x="74.5" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="10.6826" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="74.5" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table4 -->
+<g id="node4" class="node">
+<title>table4</title>
+<polygon fill="none" stroke="#000000" points="148.5,-250 148.5,-270 185.5,-270 185.5,-250 148.5,-250"/>
+<text text-anchor="start" x="151.4482" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-250 185.5,-270 221.5,-270 221.5,-250 185.5,-250"/>
+<text text-anchor="start" x="188.3413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-230 148.5,-250 185.5,-250 185.5,-230 148.5,-230"/>
+<text text-anchor="start" x="163.5" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-230 185.5,-250 221.5,-250 221.5,-230 185.5,-230"/>
+<text text-anchor="start" x="200" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-210 148.5,-230 185.5,-230 185.5,-210 148.5,-210"/>
+<text text-anchor="start" x="163.5" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-210 185.5,-230 221.5,-230 221.5,-210 185.5,-210"/>
+<text text-anchor="start" x="200.3931" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-190 148.5,-210 185.5,-210 185.5,-190 148.5,-190"/>
+<text text-anchor="start" x="163.5" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-190 185.5,-210 221.5,-210 221.5,-190 185.5,-190"/>
+<text text-anchor="start" x="201.5552" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-170 148.5,-190 185.5,-190 185.5,-170 148.5,-170"/>
+<text text-anchor="start" x="163.5" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-170 185.5,-190 221.5,-190 221.5,-170 185.5,-170"/>
+<text text-anchor="start" x="201.5552" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-150 148.5,-170 185.5,-170 185.5,-150 148.5,-150"/>
+<text text-anchor="start" x="163.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-150 185.5,-170 221.5,-170 221.5,-150 185.5,-150"/>
+<text text-anchor="start" x="200" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table3&#45;&gt;table4 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table4:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-240C78,-240 109.3406,-240 138.3797,-240"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-243.5001 148.5,-240 138.5,-236.5001 138.5,-243.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl04-04.svg b/src/doc/book/second-edition/src/img/trpl04-04.svg
new file mode 100644
index 000000000..a0513abd9
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl04-04.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1000.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 238)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-238 233,-238 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="8,-130 8,-230 96,-230 96,-130 8,-130"/>
+<polyline fill="none" stroke="#000000" points="8,-210 96,-210 "/>
+<text text-anchor="start" x="45.7759" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="18.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="62.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-170 8,-190 60,-190 60,-170 8,-170"/>
+<text text-anchor="start" x="26.2241" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-170 60,-190 96,-190 96,-170 60,-170"/>
+<polygon fill="none" stroke="#000000" points="8,-150 8,-170 60,-170 60,-150 8,-150"/>
+<text text-anchor="start" x="25.4482" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-150 60,-170 96,-170 96,-150 60,-150"/>
+<text text-anchor="start" x="74.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-130 8,-150 60,-150 60,-130 8,-130"/>
+<text text-anchor="start" x="10.6826" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-130 60,-150 96,-150 96,-130 60,-130"/>
+<text text-anchor="start" x="74.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node3" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-127 148.5,-147 185.5,-147 185.5,-127 148.5,-127"/>
+<text text-anchor="start" x="151.4482" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-127 185.5,-147 221.5,-147 221.5,-127 185.5,-127"/>
+<text text-anchor="start" x="188.3413" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-107 148.5,-127 185.5,-127 185.5,-107 148.5,-107"/>
+<text text-anchor="start" x="163.5" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-107 185.5,-127 221.5,-127 221.5,-107 185.5,-107"/>
+<text text-anchor="start" x="200" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-87 148.5,-107 185.5,-107 185.5,-87 148.5,-87"/>
+<text text-anchor="start" x="163.5" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-87 185.5,-107 221.5,-107 221.5,-87 185.5,-87"/>
+<text text-anchor="start" x="200.3931" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-67 148.5,-87 185.5,-87 185.5,-67 148.5,-67"/>
+<text text-anchor="start" x="163.5" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-67 185.5,-87 221.5,-87 221.5,-67 185.5,-67"/>
+<text text-anchor="start" x="201.5552" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-47 148.5,-67 185.5,-67 185.5,-47 148.5,-47"/>
+<text text-anchor="start" x="163.5" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-47 185.5,-67 221.5,-67 221.5,-47 185.5,-47"/>
+<text text-anchor="start" x="201.5552" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-27 148.5,-47 185.5,-47 185.5,-27 148.5,-27"/>
+<text text-anchor="start" x="163.5" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-27 185.5,-47 221.5,-47 221.5,-27 185.5,-27"/>
+<text text-anchor="start" x="200" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-180C78,-180 101.9982,-126.912 138.4405,-118.2023"/>
+<polygon fill="#000000" stroke="#000000" points="138.986,-121.6621 148.5,-117 138.1553,-114.7115 138.986,-121.6621"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-84 96,-84 "/>
+<text text-anchor="start" x="45.7759" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="18.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="62.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="26.2241" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<polygon fill="none" stroke="#000000" points="8,-24 8,-44 60,-44 60,-24 8,-24"/>
+<text text-anchor="start" x="25.4482" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-24 60,-44 96,-44 96,-24 60,-24"/>
+<text text-anchor="start" x="74.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-24 60,-24 60,-4 8,-4"/>
+<text text-anchor="start" x="10.6826" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-4 60,-24 96,-24 96,-4 60,-4"/>
+<text text-anchor="start" x="74.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table3&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-54C78,-54 101.9982,-107.088 138.4405,-115.7977"/>
+<polygon fill="#000000" stroke="#000000" points="138.1553,-119.2885 148.5,-117 138.986,-112.3379 138.1553,-119.2885"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl04-05.svg b/src/doc/book/second-edition/src/img/trpl04-05.svg
new file mode 100644
index 000000000..b4bf2ebee
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl04-05.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1500.00 650.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 152)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-152 357,-152 357,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 80,-124 "/>
+<text text-anchor="start" x="41.2759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 44,-124 44,-104 8,-104"/>
+<text text-anchor="start" x="10.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="44,-104 44,-124 80,-124 80,-104 44,-104"/>
+<text text-anchor="start" x="46.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 44,-104 44,-84 8,-84"/>
+<text text-anchor="start" x="18.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="44,-84 44,-104 80,-104 80,-84 44,-84"/>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polyline fill="none" stroke="#000000" points="132,-124 220,-124 "/>
+<text text-anchor="start" x="169.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="132,-104 132,-124 184,-124 184,-104 132,-104"/>
+<text text-anchor="start" x="142.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="184,-104 184,-124 220,-124 220,-104 184,-104"/>
+<text text-anchor="start" x="186.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="132,-84 132,-104 184,-104 184,-84 132,-84"/>
+<text text-anchor="start" x="150.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="184,-84 184,-104 220,-104 220,-84 184,-84"/>
+<polygon fill="none" stroke="#000000" points="132,-64 132,-84 184,-84 184,-64 132,-64"/>
+<text text-anchor="start" x="149.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="184,-64 184,-84 220,-84 220,-64 184,-64"/>
+<text text-anchor="start" x="198.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="132,-44 132,-64 184,-64 184,-44 132,-44"/>
+<text text-anchor="start" x="134.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="184,-44 184,-64 220,-64 220,-44 184,-44"/>
+<text text-anchor="start" x="198.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table0:c&#45;&gt;table1:borrowee</title>
+<path fill="none" stroke="#000000" d="M62,-94C62,-94 93.1184,-94 121.9514,-94"/>
+<polygon fill="#000000" stroke="#000000" points="122,-97.5001 132,-94 122,-90.5001 122,-97.5001"/>
+</g>
+<!-- table2 -->
+<g id="node3" class="node">
+<title>table2</title>
+<polygon fill="none" stroke="#000000" points="272.5,-104 272.5,-124 309.5,-124 309.5,-104 272.5,-104"/>
+<text text-anchor="start" x="275.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="309.5,-104 309.5,-124 345.5,-124 345.5,-104 309.5,-104"/>
+<text text-anchor="start" x="312.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="272.5,-84 272.5,-104 309.5,-104 309.5,-84 272.5,-84"/>
+<text text-anchor="start" x="287.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="309.5,-84 309.5,-104 345.5,-104 345.5,-84 309.5,-84"/>
+<text text-anchor="start" x="324" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="272.5,-64 272.5,-84 309.5,-84 309.5,-64 272.5,-64"/>
+<text text-anchor="start" x="287.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="309.5,-64 309.5,-84 345.5,-84 345.5,-64 309.5,-64"/>
+<text text-anchor="start" x="324.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="272.5,-44 272.5,-64 309.5,-64 309.5,-44 272.5,-44"/>
+<text text-anchor="start" x="287.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="309.5,-44 309.5,-64 345.5,-64 345.5,-44 309.5,-44"/>
+<text text-anchor="start" x="325.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="272.5,-24 272.5,-44 309.5,-44 309.5,-24 272.5,-24"/>
+<text text-anchor="start" x="287.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="309.5,-24 309.5,-44 345.5,-44 345.5,-24 309.5,-24"/>
+<text text-anchor="start" x="325.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="272.5,-4 272.5,-24 309.5,-24 309.5,-4 272.5,-4"/>
+<text text-anchor="start" x="287.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="309.5,-4 309.5,-24 345.5,-24 345.5,-4 309.5,-4"/>
+<text text-anchor="start" x="324" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge1" class="edge">
+<title>table1:c&#45;&gt;table2:pointee</title>
+<path fill="none" stroke="#000000" d="M202,-94C202,-94 233.3406,-94 262.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="262.5,-97.5001 272.5,-94 262.5,-90.5001 262.5,-97.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl04-06.svg b/src/doc/book/second-edition/src/img/trpl04-06.svg
new file mode 100644
index 000000000..e64415fe4
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl04-06.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1279.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 275)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-275 233,-275 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="16,-121 88,-121 "/>
+<text text-anchor="start" x="35.6689" y="-126.8" font-family="Times,serif" font-size="14.00" fill="#000000">world</text>
+<polygon fill="none" stroke="#000000" points="16,-101 16,-121 52,-121 52,-101 16,-101"/>
+<text text-anchor="start" x="18.8413" y="-106.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="52,-101 52,-121 88,-121 88,-101 52,-101"/>
+<text text-anchor="start" x="54.8413" y="-106.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="16,-81 16,-101 52,-101 52,-81 16,-81"/>
+<text text-anchor="start" x="26.2241" y="-86.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="52,-81 52,-101 88,-101 88,-81 52,-81"/>
+<polygon fill="none" stroke="#000000" points="16,-61 16,-81 52,-81 52,-61 16,-61"/>
+<text text-anchor="start" x="25.4482" y="-66.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="52,-61 52,-81 88,-81 88,-61 52,-61"/>
+<text text-anchor="start" x="66.5" y="-66.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table4 -->
+<g id="node3" class="node">
+<title>table4</title>
+<polygon fill="none" stroke="#000000" points="148.5,-224 148.5,-244 185.5,-244 185.5,-224 148.5,-224"/>
+<text text-anchor="start" x="151.4482" y="-229.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-224 185.5,-244 221.5,-244 221.5,-224 185.5,-224"/>
+<text text-anchor="start" x="188.3413" y="-229.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-204 148.5,-224 185.5,-224 185.5,-204 148.5,-204"/>
+<text text-anchor="start" x="163.5" y="-209.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-204 185.5,-224 221.5,-224 221.5,-204 185.5,-204"/>
+<text text-anchor="start" x="200" y="-209.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-184 148.5,-204 185.5,-204 185.5,-184 148.5,-184"/>
+<text text-anchor="start" x="163.5" y="-189.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-184 185.5,-204 221.5,-204 221.5,-184 185.5,-184"/>
+<text text-anchor="start" x="200.3931" y="-189.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-164 148.5,-184 185.5,-184 185.5,-164 148.5,-164"/>
+<text text-anchor="start" x="163.5" y="-169.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-164 185.5,-184 221.5,-184 221.5,-164 185.5,-164"/>
+<text text-anchor="start" x="201.5552" y="-169.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-144 148.5,-164 185.5,-164 185.5,-144 148.5,-144"/>
+<text text-anchor="start" x="163.5" y="-149.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-144 185.5,-164 221.5,-164 221.5,-144 185.5,-144"/>
+<text text-anchor="start" x="201.5552" y="-149.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-124 148.5,-144 185.5,-144 185.5,-124 148.5,-124"/>
+<text text-anchor="start" x="163.5" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-124 185.5,-144 221.5,-144 221.5,-124 185.5,-124"/>
+<text text-anchor="start" x="200" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="163.5" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="201.75" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">6</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="198.4448" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">w</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">7</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">8</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.1689" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">r</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">9</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="160" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">10</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">d</text>
+</g>
+<!-- table0&#45;&gt;table4 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table4:pointee2</title>
+<path fill="none" stroke="#000000" d="M70,-91C70,-91 105.7964,-93.4639 138.4948,-93.9258"/>
+<polygon fill="#000000" stroke="#000000" points="138.4743,-97.4257 148.5,-94 138.5263,-90.4259 138.4743,-97.4257"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-247 96,-247 "/>
+<text text-anchor="start" x="49.2759" y="-252.8" font-family="Times,serif" font-size="14.00" fill="#000000">s</text>
+<polygon fill="none" stroke="#000000" points="8,-227 8,-247 60,-247 60,-227 8,-227"/>
+<text text-anchor="start" x="18.8413" y="-232.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-227 60,-247 96,-247 96,-227 60,-227"/>
+<text text-anchor="start" x="62.8413" y="-232.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-207 8,-227 60,-227 60,-207 8,-207"/>
+<text text-anchor="start" x="26.2241" y="-212.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-207 60,-227 96,-227 96,-207 60,-207"/>
+<polygon fill="none" stroke="#000000" points="8,-187 8,-207 60,-207 60,-187 8,-187"/>
+<text text-anchor="start" x="25.4482" y="-192.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-187 60,-207 96,-207 96,-187 60,-187"/>
+<text text-anchor="start" x="71.2563" y="-192.8" font-family="Times,serif" font-size="14.00" fill="#000000">11</text>
+<polygon fill="none" stroke="#000000" points="8,-167 8,-187 60,-187 60,-167 8,-167"/>
+<text text-anchor="start" x="10.6826" y="-172.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-167 60,-187 96,-187 96,-167 60,-167"/>
+<text text-anchor="start" x="71.2563" y="-172.8" font-family="Times,serif" font-size="14.00" fill="#000000">11</text>
+</g>
+<!-- table3&#45;&gt;table4 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table4:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-217C78,-217 109.3179,-214.5994 138.3725,-214.0931"/>
+<polygon fill="#000000" stroke="#000000" points="138.5326,-217.5918 148.5,-214 138.4682,-210.5921 138.5326,-217.5918"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl14-01.png b/src/doc/book/second-edition/src/img/trpl14-01.png
new file mode 100644
index 000000000..5fc59898c
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl14-01.png
Binary files differ
diff --git a/src/doc/book/second-edition/src/img/trpl14-02.png b/src/doc/book/second-edition/src/img/trpl14-02.png
new file mode 100644
index 000000000..78e7e7ba7
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl14-02.png
Binary files differ
diff --git a/src/doc/book/second-edition/src/img/trpl14-03.png b/src/doc/book/second-edition/src/img/trpl14-03.png
new file mode 100644
index 000000000..ef8414507
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl14-03.png
Binary files differ
diff --git a/src/doc/book/second-edition/src/img/trpl14-04.png b/src/doc/book/second-edition/src/img/trpl14-04.png
new file mode 100644
index 000000000..d0ed2ca18
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl14-04.png
Binary files differ
diff --git a/src/doc/book/second-edition/src/img/trpl15-01.svg b/src/doc/book/second-edition/src/img/trpl15-01.svg
new file mode 100644
index 000000000..bbeef968a
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl15-01.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 700.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 156)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-156 174,-156 174,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-128 162,-128 "/>
+<text text-anchor="start" x="70.6069" y="-133.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-128 31,-128 31,-4 8,-4"/>
+<text text-anchor="start" x="10.5552" y="-61.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="31,-4 31,-128 162,-128 162,-4 31,-4"/>
+<polyline fill="none" stroke="#000000" points="34,-105 159,-105 "/>
+<text text-anchor="start" x="82.1069" y="-110.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="34,-7 34,-105 57,-105 57,-7 34,-7"/>
+<text text-anchor="start" x="36.5552" y="-51.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="57,-7 57,-105 159,-105 159,-7 57,-7"/>
+<polyline fill="none" stroke="#000000" points="60,-82 156,-82 "/>
+<text text-anchor="start" x="93.6069" y="-87.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="60,-10 60,-82 83,-82 83,-10 60,-10"/>
+<text text-anchor="start" x="62.5552" y="-41.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="83,-10 83,-82 156,-82 156,-10 83,-10"/>
+<polyline fill="none" stroke="#000000" points="86,-59 153,-59 "/>
+<text text-anchor="start" x="105.1069" y="-64.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="86,-13 86,-59 109,-59 109,-13 86,-13"/>
+<text text-anchor="start" x="88.5552" y="-31.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="109,-13 109,-59 153,-59 153,-13 109,-13"/>
+<polyline fill="none" stroke="#000000" points="112,-36 150,-36 "/>
+<text text-anchor="start" x="116.6069" y="-41.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="112,-16 112,-36 135,-36 135,-16 112,-16"/>
+<text text-anchor="start" x="114.5552" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="135,-16 135,-36 150,-36 150,-16 135,-16"/>
+<text text-anchor="start" x="137.5098" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">∞</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl15-02.svg b/src/doc/book/second-edition/src/img/trpl15-02.svg
new file mode 100644
index 000000000..4454df8c3
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl15-02.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg width="250pt"
+ viewBox="0.00 0.00 363.00 342.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 78)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-78 83,-78 83,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8.5,-50 71.5,-50 "/>
+<text text-anchor="start" x="25.6069" y="-55.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="8.5,-4 8.5,-50 31.5,-50 31.5,-4 8.5,-4"/>
+<text text-anchor="start" x="11.0552" y="-22.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="31.5,-4 31.5,-50 71.5,-50 71.5,-4 31.5,-4"/>
+<polyline fill="none" stroke="#000000" points="34.5,-27 68.5,-27 "/>
+<text text-anchor="start" x="39.8311" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">Box</text>
+<polygon fill="none" stroke="#000000" points="34.5,-7 34.5,-27 68.5,-27 68.5,-7 34.5,-7"/>
+<text text-anchor="start" x="37.1172" y="-12.8" font-family="Times,serif" font-size="14.00" fill="#000000">usize</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl15-03.svg b/src/doc/book/second-edition/src/img/trpl15-03.svg
new file mode 100644
index 000000000..dbc3b5cdb
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl15-03.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+ <svg width="750pt"
+ viewBox="0.00 0.00 2500 700" xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 148)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-148 418,-148 418,4 -4,4"/>
+<!-- table4 -->
+<g id="node1" class="node">
+<title>table4</title>
+<text text-anchor="start" x="21" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">b</text>
+</g>
+<!-- table5 -->
+<g id="node2" class="node">
+<title>table5</title>
+<polygon fill="none" stroke="#000000" points="104,-116 104,-136 117,-136 117,-116 104,-116"/>
+<text text-anchor="start" x="107" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="117,-116 117,-136 130,-136 130,-116 117,-116"/>
+<text text-anchor="start" x="120" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table4&#45;&gt;table5 -->
+<g id="edge4" class="edge">
+<title>table4:c&#45;&gt;table5:pte4</title>
+<path fill="none" stroke="#000000" d="M34,-126C34,-126 65.1184,-126 93.9514,-126"/>
+<polygon fill="#000000" stroke="#000000" points="94,-129.5001 104,-126 94,-122.5001 94,-129.5001"/>
+</g>
+<!-- table1 -->
+<g id="node4" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="194,-62 194,-82 207,-82 207,-62 194,-62"/>
+<text text-anchor="start" x="197" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="207,-62 207,-82 220,-82 220,-62 207,-62"/>
+<text text-anchor="start" x="210" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table5&#45;&gt;table1 -->
+<g id="edge5" class="edge">
+<title>table5:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M124,-126C124,-126 149.4376,-81.2672 183.6334,-73.2293"/>
+<polygon fill="#000000" stroke="#000000" points="184.4818,-76.6533 194,-72 183.6574,-69.702 184.4818,-76.6533"/>
+</g>
+<!-- table0 -->
+<g id="node3" class="node">
+<title>table0</title>
+<text text-anchor="start" x="110.8931" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">a</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M123,-72C123,-72 154.5629,-72 183.8079,-72"/>
+<polygon fill="#000000" stroke="#000000" points="184,-75.5001 194,-72 184,-68.5001 184,-75.5001"/>
+</g>
+<!-- table2 -->
+<g id="node5" class="node">
+<title>table2</title>
+<polygon fill="none" stroke="#000000" points="281,-62 281,-82 301,-82 301,-62 281,-62"/>
+<text text-anchor="start" x="284" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">10</text>
+<polygon fill="none" stroke="#000000" points="301,-62 301,-82 314,-82 314,-62 301,-62"/>
+<text text-anchor="start" x="304" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge2" class="edge">
+<title>table1:c&#45;&gt;table2:pte1</title>
+<path fill="none" stroke="#000000" d="M214,-72C214,-72 243.2667,-72 270.6585,-72"/>
+<polygon fill="#000000" stroke="#000000" points="271,-75.5001 281,-72 271,-68.5001 271,-75.5001"/>
+</g>
+<!-- table3 -->
+<g id="node6" class="node">
+<title>table3</title>
+<polygon fill="none" stroke="#000000" points="376,-62 376,-82 399,-82 399,-62 376,-62"/>
+<text text-anchor="start" x="378.5552" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">Nil</text>
+</g>
+<!-- table2&#45;&gt;table3 -->
+<g id="edge3" class="edge">
+<title>table2:c&#45;&gt;table3:pte2</title>
+<path fill="none" stroke="#000000" d="M308,-72C308,-72 341.8867,-72 365.5509,-72"/>
+<polygon fill="#000000" stroke="#000000" points="365.8498,-75.5001 375.8497,-72 365.8497,-68.5001 365.8498,-75.5001"/>
+</g>
+<!-- table6 -->
+<g id="node7" class="node">
+<title>table6</title>
+<text text-anchor="start" x="20.8931" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">c</text>
+</g>
+<!-- table7 -->
+<g id="node8" class="node">
+<title>table7</title>
+<polygon fill="none" stroke="#000000" points="104,-8 104,-28 117,-28 117,-8 104,-8"/>
+<text text-anchor="start" x="107" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="117,-8 117,-28 130,-28 130,-8 117,-8"/>
+<text text-anchor="start" x="120" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table6&#45;&gt;table7 -->
+<g id="edge6" class="edge">
+<title>table6:c&#45;&gt;table7:pte6</title>
+<path fill="none" stroke="#000000" d="M33,-18C33,-18 64.5629,-18 93.8079,-18"/>
+<polygon fill="#000000" stroke="#000000" points="94,-21.5001 104,-18 94,-14.5001 94,-21.5001"/>
+</g>
+<!-- table7&#45;&gt;table1 -->
+<g id="edge7" class="edge">
+<title>table7:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M124,-18C124,-18 149.4376,-62.7328 183.6334,-70.7707"/>
+<polygon fill="#000000" stroke="#000000" points="183.6574,-74.298 194,-72 184.4818,-67.3467 183.6574,-74.298"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl15-04.svg b/src/doc/book/second-edition/src/img/trpl15-04.svg
new file mode 100644
index 000000000..96ad98ca1
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl15-04.svg
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.36.0 (20140111.2315)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg width="633pt" height="498pt" viewBox="0.00 0.00 633.33 498.19" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.16667 4.16667) rotate(0) translate(4 115.566)">
+<title>%3</title>
+<polygon fill="white" stroke="none" points="-4,4 -4,-115.566 148,-115.566 148,4 -4,4"/>
+<!-- table0 -->
+<g id="node2" class="node"><title>table0</title>
+<polygon fill="none" stroke="black" points="0,-75.5656 0,-111.566 54,-111.566 54,-75.5656 0,-75.5656"/>
+<text text-anchor="middle" x="27" y="-89.8656" font-family="Times,serif" font-size="14.00">a</text>
+</g>
+<!-- table1 -->
+<g id="node4" class="node"><title>table1</title>
+<polygon fill="none" stroke="black" points="90,-75.5656 90,-111.566 144,-111.566 144,-75.5656 90,-75.5656"/>
+<text text-anchor="middle" x="104" y="-89.8656" font-family="Times,serif" font-size="14.00">5</text>
+<polyline fill="none" stroke="black" points="118,-75.5656 118,-111.566 "/>
+<text text-anchor="middle" x="131" y="-89.8656" font-family="Times,serif" font-size="14.00"> </text>
+</g>
+<!-- table2 -->
+<g id="node3" class="node"><title>table2</title>
+<polygon fill="none" stroke="black" points="90,-20.5656 90,-56.5656 144,-56.5656 144,-20.5656 90,-20.5656"/>
+<text text-anchor="middle" x="117" y="-34.8656" font-family="Times,serif" font-size="14.00">b</text>
+</g>
+<!-- table3 -->
+<g id="node1" class="node"><title>table3</title>
+<polygon fill="none" stroke="black" points="0,-20.5656 0,-56.5656 54,-56.5656 54,-20.5656 0,-20.5656"/>
+<text text-anchor="middle" x="16" y="-34.8656" font-family="Times,serif" font-size="14.00">10</text>
+<polyline fill="none" stroke="black" points="32,-20.5656 32,-56.5656 "/>
+<text text-anchor="middle" x="43" y="-34.8656" font-family="Times,serif" font-size="14.00"> </text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge"><title>table0:ref-&gt;table1:data</title>
+<path fill="none" stroke="black" d="M54,-93.5656C66,-93.5656 71.25,-93.5656 78.875,-93.5656"/>
+<polygon fill="black" stroke="black" points="79,-97.0657 89,-93.5656 79,-90.0657 79,-97.0657"/>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge2" class="edge"><title>table1:ref-&gt;table2:data</title>
+<path fill="none" stroke="black" d="M123.1403,-65.1315C127.6523,-67.3402 133,-68.812 133,-75"/>
+<polygon fill="black" stroke="black" points="120.233,-67.0895 117,-57 125.8193,-62.8712 120.233,-67.0895"/>
+</g>
+<!-- table2&#45;&gt;table3 -->
+<g id="edge3" class="edge"><title>table2:ref-&gt;table3:data</title>
+<path fill="none" stroke="black" d="M117,-20.5656C117,2.6957 43.7375,5.56532 21.2401,-10.9567"/>
+<polygon fill="black" stroke="black" points="18.2098,-9.20375 16,-19.5656 24.1892,-12.8434 18.2098,-9.20375"/>
+</g>
+<!-- table3&#45;&gt;table0 -->
+<g id="edge4" class="edge"><title>table3:ref-&gt;table0:data</title>
+<path fill="none" stroke="black" d="M33.1409,-66.8685C37.6523,-64.6598 43,-63.188 43,-57"/>
+<polygon fill="black" stroke="black" points="30.233,-64.9105 27,-75 35.8193,-69.1288 30.233,-64.9105"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/second-edition/src/img/trpl20-01.png b/src/doc/book/second-edition/src/img/trpl20-01.png
new file mode 100644
index 000000000..19e2cbc0a
--- /dev/null
+++ b/src/doc/book/second-edition/src/img/trpl20-01.png
Binary files differ
diff --git a/src/doc/book/src/SUMMARY.md b/src/doc/book/src/SUMMARY.md
new file mode 100644
index 000000000..b4b58afde
--- /dev/null
+++ b/src/doc/book/src/SUMMARY.md
@@ -0,0 +1,135 @@
+# The Rust Programming Language
+
+[The Rust Programming Language](title-page.md)
+[Foreword](foreword.md)
+[Introduction](ch00-00-introduction.md)
+
+## Getting started
+
+- [Getting Started](ch01-00-getting-started.md)
+ - [Installation](ch01-01-installation.md)
+ - [Hello, World!](ch01-02-hello-world.md)
+ - [Hello, Cargo!](ch01-03-hello-cargo.md)
+
+- [Programming a Guessing Game](ch02-00-guessing-game-tutorial.md)
+
+- [Common Programming Concepts](ch03-00-common-programming-concepts.md)
+ - [Variables and Mutability](ch03-01-variables-and-mutability.md)
+ - [Data Types](ch03-02-data-types.md)
+ - [Functions](ch03-03-how-functions-work.md)
+ - [Comments](ch03-04-comments.md)
+ - [Control Flow](ch03-05-control-flow.md)
+
+- [Understanding Ownership](ch04-00-understanding-ownership.md)
+ - [What is Ownership?](ch04-01-what-is-ownership.md)
+ - [References and Borrowing](ch04-02-references-and-borrowing.md)
+ - [The Slice Type](ch04-03-slices.md)
+
+- [Using Structs to Structure Related Data](ch05-00-structs.md)
+ - [Defining and Instantiating Structs](ch05-01-defining-structs.md)
+ - [An Example Program Using Structs](ch05-02-example-structs.md)
+ - [Method Syntax](ch05-03-method-syntax.md)
+
+- [Enums and Pattern Matching](ch06-00-enums.md)
+ - [Defining an Enum](ch06-01-defining-an-enum.md)
+ - [The `match` Control Flow Construct](ch06-02-match.md)
+ - [Concise Control Flow with `if let`](ch06-03-if-let.md)
+
+## Basic Rust Literacy
+
+- [Managing Growing Projects with Packages, Crates, and Modules](ch07-00-managing-growing-projects-with-packages-crates-and-modules.md)
+ - [Packages and Crates](ch07-01-packages-and-crates.md)
+ - [Defining Modules to Control Scope and Privacy](ch07-02-defining-modules-to-control-scope-and-privacy.md)
+ - [Paths for Referring to an Item in the Module Tree](ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md)
+ - [Bringing Paths Into Scope with the `use` Keyword](ch07-04-bringing-paths-into-scope-with-the-use-keyword.md)
+ - [Separating Modules into Different Files](ch07-05-separating-modules-into-different-files.md)
+
+- [Common Collections](ch08-00-common-collections.md)
+ - [Storing Lists of Values with Vectors](ch08-01-vectors.md)
+ - [Storing UTF-8 Encoded Text with Strings](ch08-02-strings.md)
+ - [Storing Keys with Associated Values in Hash Maps](ch08-03-hash-maps.md)
+
+- [Error Handling](ch09-00-error-handling.md)
+ - [Unrecoverable Errors with `panic!`](ch09-01-unrecoverable-errors-with-panic.md)
+ - [Recoverable Errors with `Result`](ch09-02-recoverable-errors-with-result.md)
+ - [To `panic!` or Not to `panic!`](ch09-03-to-panic-or-not-to-panic.md)
+
+- [Generic Types, Traits, and Lifetimes](ch10-00-generics.md)
+ - [Generic Data Types](ch10-01-syntax.md)
+ - [Traits: Defining Shared Behavior](ch10-02-traits.md)
+ - [Validating References with Lifetimes](ch10-03-lifetime-syntax.md)
+
+- [Writing Automated Tests](ch11-00-testing.md)
+ - [How to Write Tests](ch11-01-writing-tests.md)
+ - [Controlling How Tests Are Run](ch11-02-running-tests.md)
+ - [Test Organization](ch11-03-test-organization.md)
+
+- [An I/O Project: Building a Command Line Program](ch12-00-an-io-project.md)
+ - [Accepting Command Line Arguments](ch12-01-accepting-command-line-arguments.md)
+ - [Reading a File](ch12-02-reading-a-file.md)
+ - [Refactoring to Improve Modularity and Error Handling](ch12-03-improving-error-handling-and-modularity.md)
+ - [Developing the Library’s Functionality with Test Driven Development](ch12-04-testing-the-librarys-functionality.md)
+ - [Working with Environment Variables](ch12-05-working-with-environment-variables.md)
+ - [Writing Error Messages to Standard Error Instead of Standard Output](ch12-06-writing-to-stderr-instead-of-stdout.md)
+
+## Thinking in Rust
+
+- [Functional Language Features: Iterators and Closures](ch13-00-functional-features.md)
+ - [Closures: Anonymous Functions that Capture Their Environment](ch13-01-closures.md)
+ - [Processing a Series of Items with Iterators](ch13-02-iterators.md)
+ - [Improving Our I/O Project](ch13-03-improving-our-io-project.md)
+ - [Comparing Performance: Loops vs. Iterators](ch13-04-performance.md)
+
+- [More about Cargo and Crates.io](ch14-00-more-about-cargo.md)
+ - [Customizing Builds with Release Profiles](ch14-01-release-profiles.md)
+ - [Publishing a Crate to Crates.io](ch14-02-publishing-to-crates-io.md)
+ - [Cargo Workspaces](ch14-03-cargo-workspaces.md)
+ - [Installing Binaries from Crates.io with `cargo install`](ch14-04-installing-binaries.md)
+ - [Extending Cargo with Custom Commands](ch14-05-extending-cargo.md)
+
+- [Smart Pointers](ch15-00-smart-pointers.md)
+ - [Using `Box<T>` to Point to Data on the Heap](ch15-01-box.md)
+ - [Treating Smart Pointers Like Regular References with the `Deref` Trait](ch15-02-deref.md)
+ - [Running Code on Cleanup with the `Drop` Trait](ch15-03-drop.md)
+ - [`Rc<T>`, the Reference Counted Smart Pointer](ch15-04-rc.md)
+ - [`RefCell<T>` and the Interior Mutability Pattern](ch15-05-interior-mutability.md)
+ - [Reference Cycles Can Leak Memory](ch15-06-reference-cycles.md)
+
+- [Fearless Concurrency](ch16-00-concurrency.md)
+ - [Using Threads to Run Code Simultaneously](ch16-01-threads.md)
+ - [Using Message Passing to Transfer Data Between Threads](ch16-02-message-passing.md)
+ - [Shared-State Concurrency](ch16-03-shared-state.md)
+ - [Extensible Concurrency with the `Sync` and `Send` Traits](ch16-04-extensible-concurrency-sync-and-send.md)
+
+- [Object Oriented Programming Features of Rust](ch17-00-oop.md)
+ - [Characteristics of Object-Oriented Languages](ch17-01-what-is-oo.md)
+ - [Using Trait Objects That Allow for Values of Different Types](ch17-02-trait-objects.md)
+ - [Implementing an Object-Oriented Design Pattern](ch17-03-oo-design-patterns.md)
+
+## Advanced Topics
+
+- [Patterns and Matching](ch18-00-patterns.md)
+ - [All the Places Patterns Can Be Used](ch18-01-all-the-places-for-patterns.md)
+ - [Refutability: Whether a Pattern Might Fail to Match](ch18-02-refutability.md)
+ - [Pattern Syntax](ch18-03-pattern-syntax.md)
+
+- [Advanced Features](ch19-00-advanced-features.md)
+ - [Unsafe Rust](ch19-01-unsafe-rust.md)
+ - [Advanced Traits](ch19-03-advanced-traits.md)
+ - [Advanced Types](ch19-04-advanced-types.md)
+ - [Advanced Functions and Closures](ch19-05-advanced-functions-and-closures.md)
+ - [Macros](ch19-06-macros.md)
+
+- [Final Project: Building a Multithreaded Web Server](ch20-00-final-project-a-web-server.md)
+ - [Building a Single-Threaded Web Server](ch20-01-single-threaded.md)
+ - [Turning Our Single-Threaded Server into a Multithreaded Server](ch20-02-multithreaded.md)
+ - [Graceful Shutdown and Cleanup](ch20-03-graceful-shutdown-and-cleanup.md)
+
+- [Appendix](appendix-00.md)
+ - [A - Keywords](appendix-01-keywords.md)
+ - [B - Operators and Symbols](appendix-02-operators.md)
+ - [C - Derivable Traits](appendix-03-derivable-traits.md)
+ - [D - Useful Development Tools](appendix-04-useful-development-tools.md)
+ - [E - Editions](appendix-05-editions.md)
+ - [F - Translations of the Book](appendix-06-translation.md)
+ - [G - How Rust is Made and “Nightly Rust”](appendix-07-nightly-rust.md)
diff --git a/src/doc/book/src/appendix-00.md b/src/doc/book/src/appendix-00.md
new file mode 100644
index 000000000..83a7e9132
--- /dev/null
+++ b/src/doc/book/src/appendix-00.md
@@ -0,0 +1,4 @@
+# Appendix
+
+The following sections contain reference material you may find useful in your
+Rust journey.
diff --git a/src/doc/book/src/appendix-01-keywords.md b/src/doc/book/src/appendix-01-keywords.md
new file mode 100644
index 000000000..b84894591
--- /dev/null
+++ b/src/doc/book/src/appendix-01-keywords.md
@@ -0,0 +1,137 @@
+## Appendix A: Keywords
+
+The following list contains keywords that are reserved for current or future
+use by the Rust language. As such, they cannot be used as identifiers (except
+as raw identifiers as we’ll discuss in the “[Raw
+Identifiers][raw-identifiers]<!-- ignore -->” section). Identifiers are names
+of functions, variables, parameters, struct fields, modules, crates, constants,
+macros, static values, attributes, types, traits, or lifetimes.
+
+[raw-identifiers]: #raw-identifiers
+
+### Keywords Currently in Use
+
+The following is a list of keywords currently in use, with their functionality
+described.
+
+* `as` - perform primitive casting, disambiguate the specific trait containing
+ an item, or rename items in `use` statements
+* `async` - return a `Future` instead of blocking the current thread
+* `await` - suspend execution until the result of a `Future` is ready
+* `break` - exit a loop immediately
+* `const` - define constant items or constant raw pointers
+* `continue` - continue to the next loop iteration
+* `crate` - in a module path, refers to the crate root
+* `dyn` - dynamic dispatch to a trait object
+* `else` - fallback for `if` and `if let` control flow constructs
+* `enum` - define an enumeration
+* `extern` - link an external function or variable
+* `false` - Boolean false literal
+* `fn` - define a function or the function pointer type
+* `for` - loop over items from an iterator, implement a trait, or specify a
+ higher-ranked lifetime
+* `if` - branch based on the result of a conditional expression
+* `impl` - implement inherent or trait functionality
+* `in` - part of `for` loop syntax
+* `let` - bind a variable
+* `loop` - loop unconditionally
+* `match` - match a value to patterns
+* `mod` - define a module
+* `move` - make a closure take ownership of all its captures
+* `mut` - denote mutability in references, raw pointers, or pattern bindings
+* `pub` - denote public visibility in struct fields, `impl` blocks, or modules
+* `ref` - bind by reference
+* `return` - return from function
+* `Self` - a type alias for the type we are defining or implementing
+* `self` - method subject or current module
+* `static` - global variable or lifetime lasting the entire program execution
+* `struct` - define a structure
+* `super` - parent module of the current module
+* `trait` - define a trait
+* `true` - Boolean true literal
+* `type` - define a type alias or associated type
+* `union` - define a [union][union]<!-- ignore -->; is only a keyword when used
+ in a union declaration
+* `unsafe` - denote unsafe code, functions, traits, or implementations
+* `use` - bring symbols into scope
+* `where` - denote clauses that constrain a type
+* `while` - loop conditionally based on the result of an expression
+
+[union]: ../reference/items/unions.html
+
+### Keywords Reserved for Future Use
+
+The following keywords do not yet have any functionality but are reserved by
+Rust for potential future use.
+
+* `abstract`
+* `become`
+* `box`
+* `do`
+* `final`
+* `macro`
+* `override`
+* `priv`
+* `try`
+* `typeof`
+* `unsized`
+* `virtual`
+* `yield`
+
+### Raw Identifiers
+
+*Raw identifiers* are the syntax that lets you use keywords where they wouldn’t
+normally be allowed. You use a raw identifier by prefixing a keyword with `r#`.
+
+For example, `match` is a keyword. If you try to compile the following function
+that uses `match` as its name:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+fn match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+```
+
+you’ll get this error:
+
+```text
+error: expected identifier, found keyword `match`
+ --> src/main.rs:4:4
+ |
+4 | fn match(needle: &str, haystack: &str) -> bool {
+ | ^^^^^ expected identifier, found keyword
+```
+
+The error shows that you can’t use the keyword `match` as the function
+identifier. To use `match` as a function name, you need to use the raw
+identifier syntax, like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+fn r#match(needle: &str, haystack: &str) -> bool {
+ haystack.contains(needle)
+}
+
+fn main() {
+ assert!(r#match("foo", "foobar"));
+}
+```
+
+This code will compile without any errors. Note the `r#` prefix on the function
+name in its definition as well as where the function is called in `main`.
+
+Raw identifiers allow you to use any word you choose as an identifier, even if
+that word happens to be a reserved keyword. This gives us more freedom to
+choose identifier names, as well as lets us integrate with programs written in
+a language where these words aren’t keywords. In addition, raw identifiers
+allow you to use libraries written in a different Rust edition than your crate
+uses. For example, `try` isn’t a keyword in the 2015 edition but is in the 2018
+edition. If you depend on a library that’s written using the 2015 edition and
+has a `try` function, you’ll need to use the raw identifier syntax, `r#try` in
+this case, to call that function from your 2018 edition code. See [Appendix
+E][appendix-e]<!-- ignore --> for more information on editions.
+
+[appendix-e]: appendix-05-editions.html
diff --git a/src/doc/book/src/appendix-02-operators.md b/src/doc/book/src/appendix-02-operators.md
new file mode 100644
index 000000000..bc770c703
--- /dev/null
+++ b/src/doc/book/src/appendix-02-operators.md
@@ -0,0 +1,205 @@
+## Appendix B: Operators and Symbols
+
+This appendix contains a glossary of Rust’s syntax, including operators and
+other symbols that appear by themselves or in the context of paths, generics,
+trait bounds, macros, attributes, comments, tuples, and brackets.
+
+### Operators
+
+Table B-1 contains the operators in Rust, an example of how the operator would
+appear in context, a short explanation, and whether that operator is
+overloadable. If an operator is overloadable, the relevant trait to use to
+overload that operator is listed.
+
+<span class="caption">Table B-1: Operators</span>
+
+| Operator | Example | Explanation | Overloadable? |
+|----------|---------|-------------|---------------|
+| `!` | `ident!(...)`, `ident!{...}`, `ident![...]` | Macro expansion | |
+| `!` | `!expr` | Bitwise or logical complement | `Not` |
+| `!=` | `expr != expr` | Nonequality comparison | `PartialEq` |
+| `%` | `expr % expr` | Arithmetic remainder | `Rem` |
+| `%=` | `var %= expr` | Arithmetic remainder and assignment | `RemAssign` |
+| `&` | `&expr`, `&mut expr` | Borrow | |
+| `&` | `&type`, `&mut type`, `&'a type`, `&'a mut type` | Borrowed pointer type | |
+| `&` | `expr & expr` | Bitwise AND | `BitAnd` |
+| `&=` | `var &= expr` | Bitwise AND and assignment | `BitAndAssign` |
+| `&&` | `expr && expr` | Short-circuiting logical AND | |
+| `*` | `expr * expr` | Arithmetic multiplication | `Mul` |
+| `*=` | `var *= expr` | Arithmetic multiplication and assignment | `MulAssign` |
+| `*` | `*expr` | Dereference | `Deref` |
+| `*` | `*const type`, `*mut type` | Raw pointer | |
+| `+` | `trait + trait`, `'a + trait` | Compound type constraint | |
+| `+` | `expr + expr` | Arithmetic addition | `Add` |
+| `+=` | `var += expr` | Arithmetic addition and assignment | `AddAssign` |
+| `,` | `expr, expr` | Argument and element separator | |
+| `-` | `- expr` | Arithmetic negation | `Neg` |
+| `-` | `expr - expr` | Arithmetic subtraction | `Sub` |
+| `-=` | `var -= expr` | Arithmetic subtraction and assignment | `SubAssign` |
+| `->` | `fn(...) -> type`, <code>&vert;...&vert; -> type</code> | Function and closure return type | |
+| `.` | `expr.ident` | Member access | |
+| `..` | `..`, `expr..`, `..expr`, `expr..expr` | Right-exclusive range literal | `PartialOrd` |
+| `..=` | `..=expr`, `expr..=expr` | Right-inclusive range literal | `PartialOrd` |
+| `..` | `..expr` | Struct literal update syntax | |
+| `..` | `variant(x, ..)`, `struct_type { x, .. }` | “And the rest” pattern binding | |
+| `...` | `expr...expr` | (Deprecated, use `..=` instead) In a pattern: inclusive range pattern | |
+| `/` | `expr / expr` | Arithmetic division | `Div` |
+| `/=` | `var /= expr` | Arithmetic division and assignment | `DivAssign` |
+| `:` | `pat: type`, `ident: type` | Constraints | |
+| `:` | `ident: expr` | Struct field initializer | |
+| `:` | `'a: loop {...}` | Loop label | |
+| `;` | `expr;` | Statement and item terminator | |
+| `;` | `[...; len]` | Part of fixed-size array syntax | |
+| `<<` | `expr << expr` | Left-shift | `Shl` |
+| `<<=` | `var <<= expr` | Left-shift and assignment | `ShlAssign` |
+| `<` | `expr < expr` | Less than comparison | `PartialOrd` |
+| `<=` | `expr <= expr` | Less than or equal to comparison | `PartialOrd` |
+| `=` | `var = expr`, `ident = type` | Assignment/equivalence | |
+| `==` | `expr == expr` | Equality comparison | `PartialEq` |
+| `=>` | `pat => expr` | Part of match arm syntax | |
+| `>` | `expr > expr` | Greater than comparison | `PartialOrd` |
+| `>=` | `expr >= expr` | Greater than or equal to comparison | `PartialOrd` |
+| `>>` | `expr >> expr` | Right-shift | `Shr` |
+| `>>=` | `var >>= expr` | Right-shift and assignment | `ShrAssign` |
+| `@` | `ident @ pat` | Pattern binding | |
+| `^` | `expr ^ expr` | Bitwise exclusive OR | `BitXor` |
+| `^=` | `var ^= expr` | Bitwise exclusive OR and assignment | `BitXorAssign` |
+| <code>&vert;</code> | <code>pat &vert; pat</code> | Pattern alternatives | |
+| <code>&vert;</code> | <code>expr &vert; expr</code> | Bitwise OR | `BitOr` |
+| <code>&vert;=</code> | <code>var &vert;= expr</code> | Bitwise OR and assignment | `BitOrAssign` |
+| <code>&vert;&vert;</code> | <code>expr &vert;&vert; expr</code> | Short-circuiting logical OR | |
+| `?` | `expr?` | Error propagation | |
+
+### Non-operator Symbols
+
+The following list contains all symbols that don’t function as operators; that
+is, they don’t behave like a function or method call.
+
+Table B-2 shows symbols that appear on their own and are valid in a variety of
+locations.
+
+<span class="caption">Table B-2: Stand-Alone Syntax</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `'ident` | Named lifetime or loop label |
+| `...u8`, `...i32`, `...f64`, `...usize`, etc. | Numeric literal of specific type |
+| `"..."` | String literal |
+| `r"..."`, `r#"..."#`, `r##"..."##`, etc. | Raw string literal, escape characters not processed |
+| `b"..."` | Byte string literal; constructs an array of bytes instead of a string |
+| `br"..."`, `br#"..."#`, `br##"..."##`, etc. | Raw byte string literal, combination of raw and byte string literal |
+| `'...'` | Character literal |
+| `b'...'` | ASCII byte literal |
+| <code>&vert;...&vert; expr</code> | Closure |
+| `!` | Always empty bottom type for diverging functions |
+| `_` | “Ignored” pattern binding; also used to make integer literals readable |
+
+Table B-3 shows symbols that appear in the context of a path through the module
+hierarchy to an item.
+
+<span class="caption">Table B-3: Path-Related Syntax</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `ident::ident` | Namespace path |
+| `::path` | Path relative to the crate root (i.e., an explicitly absolute path) |
+| `self::path` | Path relative to the current module (i.e., an explicitly relative path).
+| `super::path` | Path relative to the parent of the current module |
+| `type::ident`, `<type as trait>::ident` | Associated constants, functions, and types |
+| `<type>::...` | Associated item for a type that cannot be directly named (e.g., `<&T>::...`, `<[T]>::...`, etc.) |
+| `trait::method(...)` | Disambiguating a method call by naming the trait that defines it |
+| `type::method(...)` | Disambiguating a method call by naming the type for which it’s defined |
+| `<type as trait>::method(...)` | Disambiguating a method call by naming the trait and type |
+
+Table B-4 shows symbols that appear in the context of using generic type
+parameters.
+
+<span class="caption">Table B-4: Generics</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `path<...>` | Specifies parameters to generic type in a type (e.g., `Vec<u8>`) |
+| `path::<...>`, `method::<...>` | Specifies parameters to generic type, function, or method in an expression; often referred to as turbofish (e.g., `"42".parse::<i32>()`) |
+| `fn ident<...> ...` | Define generic function |
+| `struct ident<...> ...` | Define generic structure |
+| `enum ident<...> ...` | Define generic enumeration |
+| `impl<...> ...` | Define generic implementation |
+| `for<...> type` | Higher-ranked lifetime bounds |
+| `type<ident=type>` | A generic type where one or more associated types have specific assignments (e.g., `Iterator<Item=T>`) |
+
+Table B-5 shows symbols that appear in the context of constraining generic type
+parameters with trait bounds.
+
+<span class="caption">Table B-5: Trait Bound Constraints</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `T: U` | Generic parameter `T` constrained to types that implement `U` |
+| `T: 'a` | Generic type `T` must outlive lifetime `'a` (meaning the type cannot transitively contain any references with lifetimes shorter than `'a`) |
+| `T: 'static` | Generic type `T` contains no borrowed references other than `'static` ones |
+| `'b: 'a` | Generic lifetime `'b` must outlive lifetime `'a` |
+| `T: ?Sized` | Allow generic type parameter to be a dynamically sized type |
+| `'a + trait`, `trait + trait` | Compound type constraint |
+
+Table B-6 shows symbols that appear in the context of calling or defining
+macros and specifying attributes on an item.
+
+<span class="caption">Table B-6: Macros and Attributes</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `#[meta]` | Outer attribute |
+| `#![meta]` | Inner attribute |
+| `$ident` | Macro substitution |
+| `$ident:kind` | Macro capture |
+| `$(…)…` | Macro repetition |
+| `ident!(...)`, `ident!{...}`, `ident![...]` | Macro invocation |
+
+Table B-7 shows symbols that create comments.
+
+<span class="caption">Table B-7: Comments</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `//` | Line comment |
+| `//!` | Inner line doc comment |
+| `///` | Outer line doc comment |
+| `/*...*/` | Block comment |
+| `/*!...*/` | Inner block doc comment |
+| `/**...*/` | Outer block doc comment |
+
+Table B-8 shows symbols that appear in the context of using tuples.
+
+<span class="caption">Table B-8: Tuples</span>
+
+| Symbol | Explanation |
+|--------|-------------|
+| `()` | Empty tuple (aka unit), both literal and type |
+| `(expr)` | Parenthesized expression |
+| `(expr,)` | Single-element tuple expression |
+| `(type,)` | Single-element tuple type |
+| `(expr, ...)` | Tuple expression |
+| `(type, ...)` | Tuple type |
+| `expr(expr, ...)` | Function call expression; also used to initialize tuple `struct`s and tuple `enum` variants |
+| `expr.0`, `expr.1`, etc. | Tuple indexing |
+
+Table B-9 shows the contexts in which curly braces are used.
+
+<span class="caption">Table B-9: Curly Brackets</span>
+
+| Context | Explanation |
+|---------|-------------|
+| `{...}` | Block expression |
+| `Type {...}` | `struct` literal |
+
+Table B-10 shows the contexts in which square brackets are used.
+
+<span class="caption">Table B-10: Square Brackets</span>
+
+| Context | Explanation |
+|---------|-------------|
+| `[...]` | Array literal |
+| `[expr; len]` | Array literal containing `len` copies of `expr` |
+| `[type; len]` | Array type containing `len` instances of `type` |
+| `expr[expr]` | Collection indexing. Overloadable (`Index`, `IndexMut`) |
+| `expr[..]`, `expr[a..]`, `expr[..b]`, `expr[a..b]` | Collection indexing pretending to be collection slicing, using `Range`, `RangeFrom`, `RangeTo`, or `RangeFull` as the “index” |
diff --git a/src/doc/book/src/appendix-03-derivable-traits.md b/src/doc/book/src/appendix-03-derivable-traits.md
new file mode 100644
index 000000000..299796dbf
--- /dev/null
+++ b/src/doc/book/src/appendix-03-derivable-traits.md
@@ -0,0 +1,187 @@
+## Appendix C: Derivable Traits
+
+In various places in the book, we’ve discussed the `derive` attribute, which
+you can apply to a struct or enum definition. The `derive` attribute generates
+code that will implement a trait with its own default implementation on the
+type you’ve annotated with the `derive` syntax.
+
+In this appendix, we provide a reference of all the traits in the standard
+library that you can use with `derive`. Each section covers:
+
+* What operators and methods deriving this trait will enable
+* What the implementation of the trait provided by `derive` does
+* What implementing the trait signifies about the type
+* The conditions in which you’re allowed or not allowed to implement the trait
+* Examples of operations that require the trait
+
+If you want different behavior from that provided by the `derive` attribute,
+consult the [standard library documentation](../std/index.html)<!-- ignore -->
+for each trait for details of how to manually implement them.
+
+These traits listed here are the only ones defined by the standard library that
+can be implemented on your types using `derive`. Other traits defined in the
+standard library don’t have sensible default behavior, so it’s up to you to
+implement them in the way that makes sense for what you’re trying to accomplish.
+
+An example of a trait that can’t be derived is `Display`, which handles
+formatting for end users. You should always consider the appropriate way to
+display a type to an end user. What parts of the type should an end user be
+allowed to see? What parts would they find relevant? What format of the data
+would be most relevant to them? The Rust compiler doesn’t have this insight, so
+it can’t provide appropriate default behavior for you.
+
+The list of derivable traits provided in this appendix is not comprehensive:
+libraries can implement `derive` for their own traits, making the list of
+traits you can use `derive` with truly open-ended. Implementing `derive`
+involves using a procedural macro, which is covered in the
+[“Macros”][macros]<!-- ignore --> section of Chapter 19.
+
+### `Debug` for Programmer Output
+
+The `Debug` trait enables debug formatting in format strings, which you
+indicate by adding `:?` within `{}` placeholders.
+
+The `Debug` trait allows you to print instances of a type for debugging
+purposes, so you and other programmers using your type can inspect an instance
+at a particular point in a program’s execution.
+
+The `Debug` trait is required, for example, in use of the `assert_eq!` macro.
+This macro prints the values of instances given as arguments if the equality
+assertion fails so programmers can see why the two instances weren’t equal.
+
+### `PartialEq` and `Eq` for Equality Comparisons
+
+The `PartialEq` trait allows you to compare instances of a type to check for
+equality and enables use of the `==` and `!=` operators.
+
+Deriving `PartialEq` implements the `eq` method. When `PartialEq` is derived on
+structs, two instances are equal only if *all* fields are equal, and the
+instances are not equal if any fields are not equal. When derived on enums,
+each variant is equal to itself and not equal to the other variants.
+
+The `PartialEq` trait is required, for example, with the use of the
+`assert_eq!` macro, which needs to be able to compare two instances of a type
+for equality.
+
+The `Eq` trait has no methods. Its purpose is to signal that for every value of
+the annotated type, the value is equal to itself. The `Eq` trait can only be
+applied to types that also implement `PartialEq`, although not all types that
+implement `PartialEq` can implement `Eq`. One example of this is floating point
+number types: the implementation of floating point numbers states that two
+instances of the not-a-number (`NaN`) value are not equal to each other.
+
+An example of when `Eq` is required is for keys in a `HashMap<K, V>` so the
+`HashMap<K, V>` can tell whether two keys are the same.
+
+### `PartialOrd` and `Ord` for Ordering Comparisons
+
+The `PartialOrd` trait allows you to compare instances of a type for sorting
+purposes. A type that implements `PartialOrd` can be used with the `<`, `>`,
+`<=`, and `>=` operators. You can only apply the `PartialOrd` trait to types
+that also implement `PartialEq`.
+
+Deriving `PartialOrd` implements the `partial_cmp` method, which returns an
+`Option<Ordering>` that will be `None` when the values given don’t produce an
+ordering. An example of a value that doesn’t produce an ordering, even though
+most values of that type can be compared, is the not-a-number (`NaN`) floating
+point value. Calling `partial_cmp` with any floating point number and the `NaN`
+floating point value will return `None`.
+
+When derived on structs, `PartialOrd` compares two instances by comparing the
+value in each field in the order in which the fields appear in the struct
+definition. When derived on enums, variants of the enum declared earlier in the
+enum definition are considered less than the variants listed later.
+
+The `PartialOrd` trait is required, for example, for the `gen_range` method
+from the `rand` crate that generates a random value in the range specified by a
+range expression.
+
+The `Ord` trait allows you to know that for any two values of the annotated
+type, a valid ordering will exist. The `Ord` trait implements the `cmp` method,
+which returns an `Ordering` rather than an `Option<Ordering>` because a valid
+ordering will always be possible. You can only apply the `Ord` trait to types
+that also implement `PartialOrd` and `Eq` (and `Eq` requires `PartialEq`). When
+derived on structs and enums, `cmp` behaves the same way as the derived
+implementation for `partial_cmp` does with `PartialOrd`.
+
+An example of when `Ord` is required is when storing values in a `BTreeSet<T>`,
+a data structure that stores data based on the sort order of the values.
+
+### `Clone` and `Copy` for Duplicating Values
+
+The `Clone` trait allows you to explicitly create a deep copy of a value, and
+the duplication process might involve running arbitrary code and copying heap
+data. See the [“Ways Variables and Data Interact:
+Clone”][ways-variables-and-data-interact-clone]<!-- ignore --> section in
+Chapter 4 for more information on `Clone`.
+
+Deriving `Clone` implements the `clone` method, which when implemented for the
+whole type, calls `clone` on each of the parts of the type. This means all the
+fields or values in the type must also implement `Clone` to derive `Clone`.
+
+An example of when `Clone` is required is when calling the `to_vec` method on a
+slice. The slice doesn’t own the type instances it contains, but the vector
+returned from `to_vec` will need to own its instances, so `to_vec` calls
+`clone` on each item. Thus, the type stored in the slice must implement `Clone`.
+
+The `Copy` trait allows you to duplicate a value by only copying bits stored on
+the stack; no arbitrary code is necessary. See the [“Stack-Only Data:
+Copy”][stack-only-data-copy]<!-- ignore --> section in Chapter 4 for more
+information on `Copy`.
+
+The `Copy` trait doesn’t define any methods to prevent programmers from
+overloading those methods and violating the assumption that no arbitrary code
+is being run. That way, all programmers can assume that copying a value will be
+very fast.
+
+You can derive `Copy` on any type whose parts all implement `Copy`. A type that
+implements `Copy` must also implement `Clone`, because a type that implements
+`Copy` has a trivial implementation of `Clone` that performs the same task as
+`Copy`.
+
+The `Copy` trait is rarely required; types that implement `Copy` have
+optimizations available, meaning you don’t have to call `clone`, which makes
+the code more concise.
+
+Everything possible with `Copy` you can also accomplish with `Clone`, but the
+code might be slower or have to use `clone` in places.
+
+### `Hash` for Mapping a Value to a Value of Fixed Size
+
+The `Hash` trait allows you to take an instance of a type of arbitrary size and
+map that instance to a value of fixed size using a hash function. Deriving
+`Hash` implements the `hash` method. The derived implementation of the `hash`
+method combines the result of calling `hash` on each of the parts of the type,
+meaning all fields or values must also implement `Hash` to derive `Hash`.
+
+An example of when `Hash` is required is in storing keys in a `HashMap<K, V>`
+to store data efficiently.
+
+### `Default` for Default Values
+
+The `Default` trait allows you to create a default value for a type. Deriving
+`Default` implements the `default` function. The derived implementation of the
+`default` function calls the `default` function on each part of the type,
+meaning all fields or values in the type must also implement `Default` to
+derive `Default`.
+
+The `Default::default` function is commonly used in combination with the struct
+update syntax discussed in the [“Creating Instances From Other Instances With
+Struct Update
+Syntax”][creating-instances-from-other-instances-with-struct-update-syntax]<!-- ignore -->
+section in Chapter 5. You can customize a few fields of a struct and then
+set and use a default value for the rest of the fields by using
+`..Default::default()`.
+
+The `Default` trait is required when you use the method `unwrap_or_default` on
+`Option<T>` instances, for example. If the `Option<T>` is `None`, the method
+`unwrap_or_default` will return the result of `Default::default` for the type
+`T` stored in the `Option<T>`.
+
+[creating-instances-from-other-instances-with-struct-update-syntax]:
+ch05-01-defining-structs.html#creating-instances-from-other-instances-with-struct-update-syntax
+[stack-only-data-copy]:
+ch04-01-what-is-ownership.html#stack-only-data-copy
+[ways-variables-and-data-interact-clone]:
+ch04-01-what-is-ownership.html#ways-variables-and-data-interact-clone
+[macros]: ch19-06-macros.html#macros
diff --git a/src/doc/book/src/appendix-04-useful-development-tools.md b/src/doc/book/src/appendix-04-useful-development-tools.md
new file mode 100644
index 000000000..b357f64e2
--- /dev/null
+++ b/src/doc/book/src/appendix-04-useful-development-tools.md
@@ -0,0 +1,179 @@
+## Appendix D - Useful Development Tools
+
+In this appendix, we talk about some useful development tools that the Rust
+project provides. We’ll look at automatic formatting, quick ways to apply
+warning fixes, a linter, and integrating with IDEs.
+
+### Automatic Formatting with `rustfmt`
+
+The `rustfmt` tool reformats your code according to the community code style.
+Many collaborative projects use `rustfmt` to prevent arguments about which
+style to use when writing Rust: everyone formats their code using the tool.
+
+To install `rustfmt`, enter the following:
+
+```console
+$ rustup component add rustfmt
+```
+
+This command gives you `rustfmt` and `cargo-fmt`, similar to how Rust gives you
+both `rustc` and `cargo`. To format any Cargo project, enter the following:
+
+```console
+$ cargo fmt
+```
+
+Running this command reformats all the Rust code in the current crate. This
+should only change the code style, not the code semantics. For more information
+on `rustfmt`, see [its documentation][rustfmt].
+
+[rustfmt]: https://github.com/rust-lang/rustfmt
+
+### Fix Your Code with `rustfix`
+
+The rustfix tool is included with Rust installations and can automatically fix
+compiler warnings that have a clear way to correct the problem that’s likely
+what you want. It’s likely you’ve seen compiler warnings before. For example,
+consider this code:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+fn do_something() {}
+
+fn main() {
+ for i in 0..100 {
+ do_something();
+ }
+}
+```
+
+Here, we’re calling the `do_something` function 100 times, but we never use the
+variable `i` in the body of the `for` loop. Rust warns us about that:
+
+```console
+$ cargo build
+ Compiling myprogram v0.1.0 (file:///projects/myprogram)
+warning: unused variable: `i`
+ --> src/main.rs:4:9
+ |
+4 | for i in 0..100 {
+ | ^ help: consider using `_i` instead
+ |
+ = note: #[warn(unused_variables)] on by default
+
+ Finished dev [unoptimized + debuginfo] target(s) in 0.50s
+```
+
+The warning suggests that we use `_i` as a name instead: the underscore
+indicates that we intend for this variable to be unused. We can automatically
+apply that suggestion using the `rustfix` tool by running the command `cargo
+fix`:
+
+```console
+$ cargo fix
+ Checking myprogram v0.1.0 (file:///projects/myprogram)
+ Fixing src/main.rs (1 fix)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.59s
+```
+
+When we look at *src/main.rs* again, we’ll see that `cargo fix` has changed the
+code:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+fn do_something() {}
+
+fn main() {
+ for _i in 0..100 {
+ do_something();
+ }
+}
+```
+
+The `for` loop variable is now named `_i`, and the warning no longer appears.
+
+You can also use the `cargo fix` command to transition your code between
+different Rust editions. Editions are covered in Appendix E.
+
+### More Lints with Clippy
+
+The Clippy tool is a collection of lints to analyze your code so you can catch
+common mistakes and improve your Rust code.
+
+To install Clippy, enter the following:
+
+```console
+$ rustup component add clippy
+```
+
+To run Clippy’s lints on any Cargo project, enter the following:
+
+```console
+$ cargo clippy
+```
+
+For example, say you write a program that uses an approximation of a
+mathematical constant, such as pi, as this program does:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+fn main() {
+ let x = 3.1415;
+ let r = 8.0;
+ println!("the area of the circle is {}", x * r * r);
+}
+```
+
+Running `cargo clippy` on this project results in this error:
+
+```text
+error: approximate value of `f{32, 64}::consts::PI` found. Consider using it directly
+ --> src/main.rs:2:13
+ |
+2 | let x = 3.1415;
+ | ^^^^^^
+ |
+ = note: #[deny(clippy::approx_constant)] on by default
+ = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/master/index.html#approx_constant
+```
+
+This error lets you know that Rust already has a more precise `PI` constant
+defined, and that your program would be more correct if you used the constant
+instead. You would then change your code to use the `PI` constant. The
+following code doesn’t result in any errors or warnings from Clippy:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+fn main() {
+ let x = std::f64::consts::PI;
+ let r = 8.0;
+ println!("the area of the circle is {}", x * r * r);
+}
+```
+
+For more information on Clippy, see [its documentation][clippy].
+
+[clippy]: https://github.com/rust-lang/rust-clippy
+
+### IDE Integration Using `rust-analyzer`
+
+To help IDE integration, the Rust community recommends using
+[`rust-analyzer`][rust-analyzer]<!-- ignore -->. This tool is a set of
+compiler-centric utilities that speaks the [Language Server Protocol][lsp]<!--
+ignore -->, which is a specification for IDEs and programming languages to
+communicate with each other. Different clients can use `rust-analyzer`, such as
+[the Rust analyzer plug-in for Visual Studio Code][vscode].
+
+[lsp]: http://langserver.org/
+[vscode]: https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer
+
+Visit the `rust-analyzer` project’s [home page][rust-analyzer] for installation
+instructions, then install the language server support in your particular IDE.
+Your IDE will gain abilities such as autocompletion, jump to definition, and
+inline errors.
+
+[rust-analyzer]: https://rust-analyzer.github.io
diff --git a/src/doc/book/src/appendix-05-editions.md b/src/doc/book/src/appendix-05-editions.md
new file mode 100644
index 000000000..90828ebba
--- /dev/null
+++ b/src/doc/book/src/appendix-05-editions.md
@@ -0,0 +1,57 @@
+## Appendix E - Editions
+
+In Chapter 1, you saw that `cargo new` adds a bit of metadata to your
+*Cargo.toml* file about an edition. This appendix talks about what that means!
+
+The Rust language and compiler have a six-week release cycle, meaning users get
+a constant stream of new features. Other programming languages release larger
+changes less often; Rust releases smaller updates more frequently. After a
+while, all of these tiny changes add up. But from release to release, it can be
+difficult to look back and say, “Wow, between Rust 1.10 and Rust 1.31, Rust has
+changed a lot!”
+
+Every two or three years, the Rust team produces a new Rust *edition*. Each
+edition brings together the features that have landed into a clear package with
+fully updated documentation and tooling. New editions ship as part of the usual
+six-week release process.
+
+Editions serve different purposes for different people:
+
+* For active Rust users, a new edition brings together incremental changes into
+ an easy-to-understand package.
+* For non-users, a new edition signals that some major advancements have
+ landed, which might make Rust worth another look.
+* For those developing Rust, a new edition provides a rallying point for the
+ project as a whole.
+
+At the time of this writing, three Rust editions are available: Rust 2015, Rust
+2018, and Rust 2021. This book is written using Rust 2021 edition idioms.
+
+The `edition` key in *Cargo.toml* indicates which edition the compiler should
+use for your code. If the key doesn’t exist, Rust uses `2015` as the edition
+value for backward compatibility reasons.
+
+Each project can opt in to an edition other than the default 2015 edition.
+Editions can contain incompatible changes, such as including a new keyword that
+conflicts with identifiers in code. However, unless you opt in to those
+changes, your code will continue to compile even as you upgrade the Rust
+compiler version you use.
+
+All Rust compiler versions support any edition that existed prior to that
+compiler’s release, and they can link crates of any supported editions
+together. Edition changes only affect the way the compiler initially parses
+code. Therefore, if you’re using Rust 2015 and one of your dependencies uses
+Rust 2018, your project will compile and be able to use that dependency. The
+opposite situation, where your project uses Rust 2018 and a dependency uses
+Rust 2015, works as well.
+
+To be clear: most features will be available on all editions. Developers using
+any Rust edition will continue to see improvements as new stable releases are
+made. However, in some cases, mainly when new keywords are added, some new
+features might only be available in later editions. You will need to switch
+editions if you want to take advantage of such features.
+
+For more details, the [*Edition
+Guide*](https://doc.rust-lang.org/stable/edition-guide/) is a complete book
+about editions that enumerates the differences between editions and explains
+how to automatically upgrade your code to a new edition via `cargo fix`.
diff --git a/src/doc/book/src/appendix-06-translation.md b/src/doc/book/src/appendix-06-translation.md
new file mode 100644
index 000000000..0bc6aabd9
--- /dev/null
+++ b/src/doc/book/src/appendix-06-translation.md
@@ -0,0 +1,30 @@
+## Appendix F: Translations of the Book
+
+For resources in languages other than English. Most are still in progress; see
+[the Translations label][label] to help or let us know about a new translation!
+
+[label]: https://github.com/rust-lang/book/issues?q=is%3Aopen+is%3Aissue+label%3ATranslations
+
+- [Português](https://github.com/rust-br/rust-book-pt-br) (BR)
+- [Português](https://github.com/nunojesus/rust-book-pt-pt) (PT)
+- [简体中文](https://github.com/KaiserY/trpl-zh-cn)
+- [正體中文](https://github.com/rust-tw/book-tw)
+- [Українська](https://github.com/pavloslav/rust-book-uk-ua)
+- [Español](https://github.com/thecodix/book), [alternate](https://github.com/ManRR/rust-book-es)
+- [Italiano](https://github.com/Ciro-Fusco/book_it)
+- [Русский](https://github.com/rust-lang-ru/book)
+- [한국어](https://github.com/rinthel/rust-lang-book-ko)
+- [日本語](https://github.com/rust-lang-ja/book-ja)
+- [Français](https://github.com/Jimskapt/rust-book-fr)
+- [Polski](https://github.com/paytchoo/book-pl)
+- [Cebuano](https://github.com/agentzero1/book)
+- [Tagalog](https://github.com/josephace135/book)
+- [Esperanto](https://github.com/psychoslave/Rust-libro)
+- [ελληνική](https://github.com/TChatzigiannakis/rust-book-greek)
+- [Svenska](https://github.com/sebras/book)
+- [Farsi](https://github.com/pomokhtari/rust-book-fa)
+- [Deutsch](https://github.com/rust-lang-de/rustbook-de)
+- [Turkish](https://github.com/RustDili/dokuman/tree/master/ceviriler), [online](https://rustdili.github.io/)
+- [हिंदी](https://github.com/venkatarun95/rust-book-hindi)
+- [ไทย](https://github.com/rust-lang-th/book-th)
+- [Danske](https://github.com/DanKHansen/book-dk)
diff --git a/src/doc/book/src/appendix-07-nightly-rust.md b/src/doc/book/src/appendix-07-nightly-rust.md
new file mode 100644
index 000000000..46e619c81
--- /dev/null
+++ b/src/doc/book/src/appendix-07-nightly-rust.md
@@ -0,0 +1,201 @@
+## Appendix G - How Rust is Made and “Nightly Rust”
+
+This appendix is about how Rust is made and how that affects you as a Rust
+developer.
+
+### Stability Without Stagnation
+
+As a language, Rust cares a *lot* about the stability of your code. We want
+Rust to be a rock-solid foundation you can build on, and if things were
+constantly changing, that would be impossible. At the same time, if we can’t
+experiment with new features, we may not find out important flaws until after
+their release, when we can no longer change things.
+
+Our solution to this problem is what we call “stability without stagnation”,
+and our guiding principle is this: you should never have to fear upgrading to a
+new version of stable Rust. Each upgrade should be painless, but should also
+bring you new features, fewer bugs, and faster compile times.
+
+### Choo, Choo! Release Channels and Riding the Trains
+
+Rust development operates on a *train schedule*. That is, all development is
+done on the `master` branch of the Rust repository. Releases follow a software
+release train model, which has been used by Cisco IOS and other software
+projects. There are three *release channels* for Rust:
+
+* Nightly
+* Beta
+* Stable
+
+Most Rust developers primarily use the stable channel, but those who want to
+try out experimental new features may use nightly or beta.
+
+Here’s an example of how the development and release process works: let’s
+assume that the Rust team is working on the release of Rust 1.5. That release
+happened in December of 2015, but it will provide us with realistic version
+numbers. A new feature is added to Rust: a new commit lands on the `master`
+branch. Each night, a new nightly version of Rust is produced. Every day is a
+release day, and these releases are created by our release infrastructure
+automatically. So as time passes, our releases look like this, once a night:
+
+```text
+nightly: * - - * - - *
+```
+
+Every six weeks, it’s time to prepare a new release! The `beta` branch of the
+Rust repository branches off from the `master` branch used by nightly. Now,
+there are two releases:
+
+```text
+nightly: * - - * - - *
+ |
+beta: *
+```
+
+Most Rust users do not use beta releases actively, but test against beta in
+their CI system to help Rust discover possible regressions. In the meantime,
+there’s still a nightly release every night:
+
+```text
+nightly: * - - * - - * - - * - - *
+ |
+beta: *
+```
+
+Let’s say a regression is found. Good thing we had some time to test the beta
+release before the regression snuck into a stable release! The fix is applied
+to `master`, so that nightly is fixed, and then the fix is backported to the
+`beta` branch, and a new release of beta is produced:
+
+```text
+nightly: * - - * - - * - - * - - * - - *
+ |
+beta: * - - - - - - - - *
+```
+
+Six weeks after the first beta was created, it’s time for a stable release! The
+`stable` branch is produced from the `beta` branch:
+
+```text
+nightly: * - - * - - * - - * - - * - - * - * - *
+ |
+beta: * - - - - - - - - *
+ |
+stable: *
+```
+
+Hooray! Rust 1.5 is done! However, we’ve forgotten one thing: because the six
+weeks have gone by, we also need a new beta of the *next* version of Rust, 1.6.
+So after `stable` branches off of `beta`, the next version of `beta` branches
+off of `nightly` again:
+
+```text
+nightly: * - - * - - * - - * - - * - - * - * - *
+ | |
+beta: * - - - - - - - - * *
+ |
+stable: *
+```
+
+This is called the “train model” because every six weeks, a release “leaves the
+station”, but still has to take a journey through the beta channel before it
+arrives as a stable release.
+
+Rust releases every six weeks, like clockwork. If you know the date of one Rust
+release, you can know the date of the next one: it’s six weeks later. A nice
+aspect of having releases scheduled every six weeks is that the next train is
+coming soon. If a feature happens to miss a particular release, there’s no need
+to worry: another one is happening in a short time! This helps reduce pressure
+to sneak possibly unpolished features in close to the release deadline.
+
+Thanks to this process, you can always check out the next build of Rust and
+verify for yourself that it’s easy to upgrade to: if a beta release doesn’t
+work as expected, you can report it to the team and get it fixed before the
+next stable release happens! Breakage in a beta release is relatively rare, but
+`rustc` is still a piece of software, and bugs do exist.
+
+### Unstable Features
+
+There’s one more catch with this release model: unstable features. Rust uses a
+technique called “feature flags” to determine what features are enabled in a
+given release. If a new feature is under active development, it lands on
+`master`, and therefore, in nightly, but behind a *feature flag*. If you, as a
+user, wish to try out the work-in-progress feature, you can, but you must be
+using a nightly release of Rust and annotate your source code with the
+appropriate flag to opt in.
+
+If you’re using a beta or stable release of Rust, you can’t use any feature
+flags. This is the key that allows us to get practical use with new features
+before we declare them stable forever. Those who wish to opt into the bleeding
+edge can do so, and those who want a rock-solid experience can stick with
+stable and know that their code won’t break. Stability without stagnation.
+
+This book only contains information about stable features, as in-progress
+features are still changing, and surely they’ll be different between when this
+book was written and when they get enabled in stable builds. You can find
+documentation for nightly-only features online.
+
+### Rustup and the Role of Rust Nightly
+
+Rustup makes it easy to change between different release channels of Rust, on a
+global or per-project basis. By default, you’ll have stable Rust installed. To
+install nightly, for example:
+
+```console
+$ rustup toolchain install nightly
+```
+
+You can see all of the *toolchains* (releases of Rust and associated
+components) you have installed with `rustup` as well. Here’s an example on one
+of your authors’ Windows computer:
+
+```powershell
+> rustup toolchain list
+stable-x86_64-pc-windows-msvc (default)
+beta-x86_64-pc-windows-msvc
+nightly-x86_64-pc-windows-msvc
+```
+
+As you can see, the stable toolchain is the default. Most Rust users use stable
+most of the time. You might want to use stable most of the time, but use
+nightly on a specific project, because you care about a cutting-edge feature.
+To do so, you can use `rustup override` in that project’s directory to set the
+nightly toolchain as the one `rustup` should use when you’re in that directory:
+
+```console
+$ cd ~/projects/needs-nightly
+$ rustup override set nightly
+```
+
+Now, every time you call `rustc` or `cargo` inside of
+*~/projects/needs-nightly*, `rustup` will make sure that you are using nightly
+Rust, rather than your default of stable Rust. This comes in handy when you
+have a lot of Rust projects!
+
+### The RFC Process and Teams
+
+So how do you learn about these new features? Rust’s development model follows
+a *Request For Comments (RFC) process*. If you’d like an improvement in Rust,
+you can write up a proposal, called an RFC.
+
+Anyone can write RFCs to improve Rust, and the proposals are reviewed and
+discussed by the Rust team, which is comprised of many topic subteams. There’s
+a full list of the teams [on Rust’s
+website](https://www.rust-lang.org/governance), which includes teams for
+each area of the project: language design, compiler implementation,
+infrastructure, documentation, and more. The appropriate team reads the
+proposal and the comments, writes some comments of their own, and eventually,
+there’s consensus to accept or reject the feature.
+
+If the feature is accepted, an issue is opened on the Rust repository, and
+someone can implement it. The person who implements it very well may not be the
+person who proposed the feature in the first place! When the implementation is
+ready, it lands on the `master` branch behind a feature gate, as we discussed
+in the [“Unstable Features”](#unstable-features)<!-- ignore --> section.
+
+After some time, once Rust developers who use nightly releases have been able
+to try out the new feature, team members will discuss the feature, how it’s
+worked out on nightly, and decide if it should make it into stable Rust or not.
+If the decision is to move forward, the feature gate is removed, and the
+feature is now considered stable! It rides the trains into a new stable release
+of Rust.
diff --git a/src/doc/book/src/ch00-00-introduction.md b/src/doc/book/src/ch00-00-introduction.md
new file mode 100644
index 000000000..ba7b9ea0e
--- /dev/null
+++ b/src/doc/book/src/ch00-00-introduction.md
@@ -0,0 +1,192 @@
+# Introduction
+
+> Note: This edition of the book is the same as [The Rust Programming
+> Language][nsprust] available in print and ebook format from [No Starch
+> Press][nsp].
+
+[nsprust]: https://nostarch.com/rust
+[nsp]: https://nostarch.com/
+
+Welcome to *The Rust Programming Language*, an introductory book about Rust.
+The Rust programming language helps you write faster, more reliable software.
+High-level ergonomics and low-level control are often at odds in programming
+language design; Rust challenges that conflict. Through balancing powerful
+technical capacity and a great developer experience, Rust gives you the option
+to control low-level details (such as memory usage) without all the hassle
+traditionally associated with such control.
+
+## Who Rust Is For
+
+Rust is ideal for many people for a variety of reasons. Let’s look at a few of
+the most important groups.
+
+### Teams of Developers
+
+Rust is proving to be a productive tool for collaborating among large teams of
+developers with varying levels of systems programming knowledge. Low-level code
+is prone to a variety of subtle bugs, which in most other languages can be
+caught only through extensive testing and careful code review by experienced
+developers. In Rust, the compiler plays a gatekeeper role by refusing to
+compile code with these elusive bugs, including concurrency bugs. By working
+alongside the compiler, the team can spend their time focusing on the program’s
+logic rather than chasing down bugs.
+
+Rust also brings contemporary developer tools to the systems programming world:
+
+* Cargo, the included dependency manager and build tool, makes adding,
+ compiling, and managing dependencies painless and consistent across the Rust
+ ecosystem.
+* Rustfmt ensures a consistent coding style across developers.
+* The Rust Language Server powers Integrated Development Environment (IDE)
+ integration for code completion and inline error messages.
+
+By using these and other tools in the Rust ecosystem, developers can be
+productive while writing systems-level code.
+
+### Students
+
+Rust is for students and those who are interested in learning about systems
+concepts. Using Rust, many people have learned about topics like operating
+systems development. The community is very welcoming and happy to answer
+student questions. Through efforts such as this book, the Rust teams want to
+make systems concepts more accessible to more people, especially those new to
+programming.
+
+### Companies
+
+Hundreds of companies, large and small, use Rust in production for a variety of
+tasks. Those tasks include command line tools, web services, DevOps tooling,
+embedded devices, audio and video analysis and transcoding, cryptocurrencies,
+bioinformatics, search engines, Internet of Things applications, machine
+learning, and even major parts of the Firefox web browser.
+
+### Open Source Developers
+
+Rust is for people who want to build the Rust programming language, community,
+developer tools, and libraries. We’d love to have you contribute to the Rust
+language.
+
+### People Who Value Speed and Stability
+
+Rust is for people who crave speed and stability in a language. By speed, we
+mean the speed of the programs that you can create with Rust and the speed at
+which Rust lets you write them. The Rust compiler’s checks ensure stability
+through feature additions and refactoring. This is in contrast to the brittle
+legacy code in languages without these checks, which developers are often
+afraid to modify. By striving for zero-cost abstractions, higher-level features
+that compile to lower-level code as fast as code written manually, Rust
+endeavors to make safe code be fast code as well.
+
+The Rust language hopes to support many other users as well; those mentioned
+here are merely some of the biggest stakeholders. Overall, Rust’s greatest
+ambition is to eliminate the trade-offs that programmers have accepted for
+decades by providing safety *and* productivity, speed *and* ergonomics. Give
+Rust a try and see if its choices work for you.
+
+## Who This Book Is For
+
+This book assumes that you’ve written code in another programming language but
+doesn’t make any assumptions about which one. We’ve tried to make the material
+broadly accessible to those from a wide variety of programming backgrounds. We
+don’t spend a lot of time talking about what programming *is* or how to think
+about it. If you’re entirely new to programming, you would be better served by
+reading a book that specifically provides an introduction to programming.
+
+## How to Use This Book
+
+In general, this book assumes that you’re reading it in sequence from front to
+back. Later chapters build on concepts in earlier chapters, and earlier
+chapters might not delve into details on a topic; we typically revisit the
+topic in a later chapter.
+
+You’ll find two kinds of chapters in this book: concept chapters and project
+chapters. In concept chapters, you’ll learn about an aspect of Rust. In project
+chapters, we’ll build small programs together, applying what you’ve learned so
+far. Chapters 2, 12, and 20 are project chapters; the rest are concept chapters.
+
+Chapter 1 explains how to install Rust, how to write a “Hello, world!” program,
+and how to use Cargo, Rust’s package manager and build tool. Chapter 2 is a
+hands-on introduction to the Rust language. Here we cover concepts at a high
+level, and later chapters will provide additional detail. If you want to get
+your hands dirty right away, Chapter 2 is the place for that. At first, you
+might even want to skip Chapter 3, which covers Rust features similar to those
+of other programming languages, and head straight to Chapter 4 to learn about
+Rust’s ownership system. However, if you’re a particularly meticulous learner
+who prefers to learn every detail before moving on to the next, you might want
+to skip Chapter 2 and go straight to Chapter 3, returning to Chapter 2 when
+you’d like to work on a project applying the details you’ve learned.
+
+Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match`
+expressions, and the `if let` control flow construct. You’ll use structs and
+enums to make custom types in Rust.
+
+In Chapter 7, you’ll learn about Rust’s module system and about privacy rules
+for organizing your code and its public Application Programming Interface
+(API). Chapter 8 discusses some common collection data structures that the
+standard library provides, such as vectors, strings, and hash maps. Chapter 9
+explores Rust’s error-handling philosophy and techniques.
+
+Chapter 10 digs into generics, traits, and lifetimes, which give you the power
+to define code that applies to multiple types. Chapter 11 is all about testing,
+which even with Rust’s safety guarantees is necessary to ensure your program’s
+logic is correct. In Chapter 12, we’ll build our own implementation of a subset
+of functionality from the `grep` command line tool that searches for text
+within files. For this, we’ll use many of the concepts we discussed in the
+previous chapters.
+
+Chapter 13 explores closures and iterators: features of Rust that come from
+functional programming languages. In Chapter 14, we’ll examine Cargo in more
+depth and talk about best practices for sharing your libraries with others.
+Chapter 15 discusses smart pointers that the standard library provides and the
+traits that enable their functionality.
+
+In Chapter 16, we’ll walk through different models of concurrent programming
+and talk about how Rust helps you to program in multiple threads fearlessly.
+Chapter 17 looks at how Rust idioms compare to object-oriented programming
+principles you might be familiar with.
+
+Chapter 18 is a reference on patterns and pattern matching, which are powerful
+ways of expressing ideas throughout Rust programs. Chapter 19 contains a
+smorgasbord of advanced topics of interest, including unsafe Rust, macros, and
+more about lifetimes, traits, types, functions, and closures.
+
+In Chapter 20, we’ll complete a project in which we’ll implement a low-level
+multithreaded web server!
+
+Finally, some appendices contain useful information about the language in a
+more reference-like format. Appendix A covers Rust’s keywords, Appendix B
+covers Rust’s operators and symbols, Appendix C covers derivable traits
+provided by the standard library, Appendix D covers some useful development
+tools, and Appendix E explains Rust editions. In Appendix F, you can find
+translations of the book, and in Appendix G we’ll cover how Rust is made and
+what nightly Rust is.
+
+There is no wrong way to read this book: if you want to skip ahead, go for it!
+You might have to jump back to earlier chapters if you experience any
+confusion. But do whatever works for you.
+
+<span id="ferris"></span>
+
+An important part of the process of learning Rust is learning how to read the
+error messages the compiler displays: these will guide you toward working code.
+As such, we’ll provide many examples that don’t compile along with the error
+message the compiler will show you in each situation. Know that if you enter
+and run a random example, it may not compile! Make sure you read the
+surrounding text to see whether the example you’re trying to run is meant to
+error. Ferris will also help you distinguish code that isn’t meant to work:
+
+| Ferris | Meaning |
+|------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
+| <img src="img/ferris/does_not_compile.svg" class="ferris-explain" alt="Ferris with a question mark"/> | This code does not compile! |
+| <img src="img/ferris/panics.svg" class="ferris-explain" alt="Ferris throwing up their hands"/> | This code panics! |
+| <img src="img/ferris/not_desired_behavior.svg" class="ferris-explain" alt="Ferris with one claw up, shrugging"/> | This code does not produce the desired behavior. |
+
+In most situations, we’ll lead you to the correct version of any code that
+doesn’t compile.
+
+## Source Code
+
+The source files from which this book is generated can be found on
+[GitHub][book].
+
+[book]: https://github.com/rust-lang/book/tree/main/src
diff --git a/src/doc/book/src/ch01-00-getting-started.md b/src/doc/book/src/ch01-00-getting-started.md
new file mode 100644
index 000000000..ff5e324f7
--- /dev/null
+++ b/src/doc/book/src/ch01-00-getting-started.md
@@ -0,0 +1,8 @@
+# Getting Started
+
+Let’s start your Rust journey! There’s a lot to learn, but every journey starts
+somewhere. In this chapter, we’ll discuss:
+
+* Installing Rust on Linux, macOS, and Windows
+* Writing a program that prints `Hello, world!`
+* Using `cargo`, Rust’s package manager and build system
diff --git a/src/doc/book/src/ch01-01-installation.md b/src/doc/book/src/ch01-01-installation.md
new file mode 100644
index 000000000..47664eb4f
--- /dev/null
+++ b/src/doc/book/src/ch01-01-installation.md
@@ -0,0 +1,151 @@
+## Installation
+
+The first step is to install Rust. We’ll download Rust through `rustup`, a
+command line tool for managing Rust versions and associated tools. You’ll need
+an internet connection for the download.
+
+> Note: If you prefer not to use `rustup` for some reason, please see the
+> [Other Rust Installation Methods page][otherinstall] for more options.
+
+The following steps install the latest stable version of the Rust compiler.
+Rust’s stability guarantees ensure that all the examples in the book that
+compile will continue to compile with newer Rust versions. The output might
+differ slightly between versions, because Rust often improves error messages
+and warnings. In other words, any newer, stable version of Rust you install
+using these steps should work as expected with the content of this book.
+
+> ### Command Line Notation
+>
+> In this chapter and throughout the book, we’ll show some commands used in the
+> terminal. Lines that you should enter in a terminal all start with `$`. You
+> don’t need to type in the `$` character; it’s the command line prompt shown
+> to indicate the start of each command. Lines that don’t start with `$`
+> typically show the output of the previous command. Additionally,
+> PowerShell-specific examples will use `>` rather than `$`.
+
+### Installing `rustup` on Linux or macOS
+
+If you’re using Linux or macOS, open a terminal and enter the following command:
+
+```console
+$ curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh
+```
+
+The command downloads a script and starts the installation of the `rustup`
+tool, which installs the latest stable version of Rust. You might be prompted
+for your password. If the install is successful, the following line will appear:
+
+```text
+Rust is installed now. Great!
+```
+
+You will also need a *linker*, which is a program that Rust uses to join its
+compiled outputs into one file. It is likely you already have one. If you get
+linker errors, you should install a C compiler, which will typically include a
+linker. A C compiler is also useful because some common Rust packages depend on
+C code and will need a C compiler.
+
+On macOS, you can get a C compiler by running:
+
+```console
+$ xcode-select --install
+```
+
+Linux users should generally install GCC or Clang, according to their
+distribution’s documentation. For example, if you use Ubuntu, you can install
+the `build-essential` package.
+
+### Installing `rustup` on Windows
+
+On Windows, go to [https://www.rust-lang.org/tools/install][install] and follow
+the instructions for installing Rust. At some point in the installation, you’ll
+receive a message explaining that you’ll also need the MSVC build tools for
+Visual Studio 2013 or later. To acquire the build tools, you’ll need to install
+[Visual Studio 2022][visualstudio]. When asked which workloads to install,
+include:
+
+- “Desktop Development with C++”
+- The Windows 10 or 11 SDK
+- The English language pack component, along with any other language pack of
+ your choosing
+
+The rest of this book uses commands that work in both *cmd.exe* and PowerShell.
+If there are specific differences, we’ll explain which to use.
+
+### Troubleshooting
+
+To check whether you have Rust installed correctly, open a shell and enter this
+line:
+
+```console
+$ rustc --version
+```
+
+You should see the version number, commit hash, and commit date for the latest
+stable version that has been released in the following format:
+
+```text
+rustc x.y.z (abcabcabc yyyy-mm-dd)
+```
+
+If you see this information, you have installed Rust successfully! If you don’t
+see this information, check that Rust is in your `%PATH%`
+system variable as follows.
+
+In Windows CMD, use:
+
+```console
+> echo %PATH%
+```
+
+In PowerShell, use:
+
+```console
+> echo $env:Path
+```
+
+In Linux and macOS, use:
+
+```console
+echo $PATH
+```
+
+If that’s all correct and Rust still isn’t working, there are a number of
+places you can get help. The easiest is the #beginners channel on [the official
+Rust Discord][discord]. There, you can chat with other Rustaceans (a silly
+nickname we call ourselves) who can help you out. Other great resources include
+[the Users forum][users] and [Stack Overflow][stackoverflow].
+
+### Updating and Uninstalling
+
+Once Rust is installed via `rustup`, when a new version of Rust is released,
+updating to the latest version is easy. From your shell, run the following
+update script:
+
+```console
+$ rustup update
+```
+
+To uninstall Rust and `rustup`, run the following uninstall script from your
+shell:
+
+```console
+$ rustup self uninstall
+```
+
+### Local Documentation
+
+The installation of Rust also includes a local copy of the documentation, so
+you can read it offline. Run `rustup doc` to open the local documentation in
+your browser.
+
+Any time a type or function is provided by the standard library and you’re not
+sure what it does or how to use it, use the application programming interface
+(API) documentation to find out!
+
+[otherinstall]: https://forge.rust-lang.org/infra/other-installation-methods.html
+[install]: https://www.rust-lang.org/tools/install
+[visualstudio]: https://visualstudio.microsoft.com/downloads/
+[discord]: https://discord.gg/rust-lang
+[users]: https://users.rust-lang.org/
+[stackoverflow]: https://stackoverflow.com/questions/tagged/rust
diff --git a/src/doc/book/src/ch01-02-hello-world.md b/src/doc/book/src/ch01-02-hello-world.md
new file mode 100644
index 000000000..ce9b8f55b
--- /dev/null
+++ b/src/doc/book/src/ch01-02-hello-world.md
@@ -0,0 +1,201 @@
+## Hello, World!
+
+Now that you’ve installed Rust, let’s write your first Rust program. It’s
+traditional when learning a new language to write a little program that prints
+the text `Hello, world!` to the screen, so we’ll do the same here!
+
+> Note: This book assumes basic familiarity with the command line. Rust makes
+> no specific demands about your editing or tooling or where your code lives, so
+> if you prefer to use an integrated development environment (IDE) instead of
+> the command line, feel free to use your favorite IDE. Many IDEs now have some
+> degree of Rust support; check the IDE’s documentation for details. The Rust
+> team has been focusing on enabling great IDE support via `rust-analyzer`. See
+> [Appendix D][devtools]<!-- ignore --> for more details!
+
+### Creating a Project Directory
+
+You’ll start by making a directory to store your Rust code. It doesn’t matter
+to Rust where your code lives, but for the exercises and projects in this book,
+we suggest making a *projects* directory in your home directory and keeping all
+your projects there.
+
+Open a terminal and enter the following commands to make a *projects* directory
+and a directory for the “Hello, world!” project within the *projects* directory.
+
+For Linux, macOS, and PowerShell on Windows, enter this:
+
+```console
+$ mkdir ~/projects
+$ cd ~/projects
+$ mkdir hello_world
+$ cd hello_world
+```
+
+For Windows CMD, enter this:
+
+```cmd
+> mkdir "%USERPROFILE%\projects"
+> cd /d "%USERPROFILE%\projects"
+> mkdir hello_world
+> cd hello_world
+```
+
+### Writing and Running a Rust Program
+
+Next, make a new source file and call it *main.rs*. Rust files always end with
+the *.rs* extension. If you’re using more than one word in your filename, the
+convention is to use an underscore to separate them. For example, use
+*hello_world.rs* rather than *helloworld.rs*.
+
+Now open the *main.rs* file you just created and enter the code in Listing 1-1.
+
+<span class="filename">Filename: main.rs</span>
+
+```rust
+fn main() {
+ println!("Hello, world!");
+}
+```
+
+<span class="caption">Listing 1-1: A program that prints `Hello, world!`</span>
+
+Save the file and go back to your terminal window in the
+*~/projects/hello_world* directory. On Linux or macOS, enter the following
+commands to compile and run the file:
+
+```console
+$ rustc main.rs
+$ ./main
+Hello, world!
+```
+
+On Windows, enter the command `.\main.exe` instead of `./main`:
+
+```powershell
+> rustc main.rs
+> .\main.exe
+Hello, world!
+```
+
+Regardless of your operating system, the string `Hello, world!` should print to
+the terminal. If you don’t see this output, refer back to the
+[“Troubleshooting”][troubleshooting]<!-- ignore --> part of the Installation
+section for ways to get help.
+
+If `Hello, world!` did print, congratulations! You’ve officially written a Rust
+program. That makes you a Rust programmer—welcome!
+
+### Anatomy of a Rust Program
+
+Let’s review this “Hello, world!” program in detail. Here’s the first piece of
+the puzzle:
+
+```rust
+fn main() {
+
+}
+```
+
+These lines define a function named `main`. The `main` function is special: it
+is always the first code that runs in every executable Rust program. Here, the
+first line declares a function named `main` that has no parameters and returns
+nothing. If there were parameters, they would go inside the parentheses `()`.
+
+The function body is wrapped in `{}`. Rust requires curly brackets around all
+function bodies. It’s good style to place the opening curly bracket on the same
+line as the function declaration, adding one space in between.
+
+> Note: If you want to stick to a standard style across Rust projects, you can
+> use an automatic formatter tool called `rustfmt` to format your code in a
+> particular style (more on `rustfmt` in
+> [Appendix D][devtools]<!-- ignore -->). The Rust team has included this tool
+> with the standard Rust distribution, like `rustc`, so it should already be
+> installed on your computer!
+
+The body of the `main` function holds the following code:
+
+```rust
+ println!("Hello, world!");
+```
+
+This line does all the work in this little program: it prints text to the
+screen. There are four important details to notice here.
+
+First, Rust style is to indent with four spaces, not a tab.
+
+Second, `println!` calls a Rust macro. If it had called a function instead, it
+would be entered as `println` (without the `!`). We’ll discuss Rust macros in
+more detail in Chapter 19. For now, you just need to know that using a `!`
+means that you’re calling a macro instead of a normal function, and that macros
+don’t always follow the same rules as functions.
+
+Third, you see the `"Hello, world!"` string. We pass this string as an argument
+to `println!`, and the string is printed to the screen.
+
+Fourth, we end the line with a semicolon (`;`), which indicates that this
+expression is over and the next one is ready to begin. Most lines of Rust code
+end with a semicolon.
+
+### Compiling and Running Are Separate Steps
+
+You’ve just run a newly created program, so let’s examine each step in the
+process.
+
+Before running a Rust program, you must compile it using the Rust compiler by
+entering the `rustc` command and passing it the name of your source file, like
+this:
+
+```console
+$ rustc main.rs
+```
+
+If you have a C or C++ background, you’ll notice that this is similar to `gcc`
+or `clang`. After compiling successfully, Rust outputs a binary executable.
+
+On Linux, macOS, and PowerShell on Windows, you can see the executable by
+entering the `ls` command in your shell. On Linux and macOS, you’ll see two
+files. With PowerShell on Windows, you’ll see the same three files that you
+would see using CMD.
+
+```console
+$ ls
+main main.rs
+```
+
+With CMD on Windows, you would enter the following:
+
+```cmd
+> dir /B %= the /B option says to only show the file names =%
+main.exe
+main.pdb
+main.rs
+```
+
+This shows the source code file with the *.rs* extension, the executable file
+(*main.exe* on Windows, but *main* on all other platforms), and, when using
+Windows, a file containing debugging information with the *.pdb* extension.
+From here, you run the *main* or *main.exe* file, like this:
+
+```console
+$ ./main # or .\main.exe on Windows
+```
+
+If your *main.rs* is your “Hello, world!” program, this line prints `Hello,
+world!` to your terminal.
+
+If you’re more familiar with a dynamic language, such as Ruby, Python, or
+JavaScript, you might not be used to compiling and running a program as
+separate steps. Rust is an *ahead-of-time compiled* language, meaning you can
+compile a program and give the executable to someone else, and they can run it
+even without having Rust installed. If you give someone a *.rb*, *.py*, or
+*.js* file, they need to have a Ruby, Python, or JavaScript implementation
+installed (respectively). But in those languages, you only need one command to
+compile and run your program. Everything is a trade-off in language design.
+
+Just compiling with `rustc` is fine for simple programs, but as your project
+grows, you’ll want to manage all the options and make it easy to share your
+code. Next, we’ll introduce you to the Cargo tool, which will help you write
+real-world Rust programs.
+
+[troubleshooting]: ch01-01-installation.html#troubleshooting
+[devtools]: appendix-04-useful-development-tools.md
diff --git a/src/doc/book/src/ch01-03-hello-cargo.md b/src/doc/book/src/ch01-03-hello-cargo.md
new file mode 100644
index 000000000..135eacd2f
--- /dev/null
+++ b/src/doc/book/src/ch01-03-hello-cargo.md
@@ -0,0 +1,258 @@
+## Hello, Cargo!
+
+Cargo is Rust’s build system and package manager. Most Rustaceans use this tool
+to manage their Rust projects because Cargo handles a lot of tasks for you,
+such as building your code, downloading the libraries your code depends on, and
+building those libraries. (We call the libraries that your code needs
+*dependencies*.)
+
+The simplest Rust programs, like the one we’ve written so far, don’t have any
+dependencies. If we had built the “Hello, world!” project with Cargo, it would
+only use the part of Cargo that handles building your code. As you write more
+complex Rust programs, you’ll add dependencies, and if you start a project
+using Cargo, adding dependencies will be much easier to do.
+
+Because the vast majority of Rust projects use Cargo, the rest of this book
+assumes that you’re using Cargo too. Cargo comes installed with Rust if you
+used the official installers discussed in the
+[“Installation”][installation]<!-- ignore --> section. If you installed Rust
+through some other means, check whether Cargo is installed by entering the
+following into your terminal:
+
+```console
+$ cargo --version
+```
+
+If you see a version number, you have it! If you see an error, such as `command
+not found`, look at the documentation for your method of installation to
+determine how to install Cargo separately.
+
+### Creating a Project with Cargo
+
+Let’s create a new project using Cargo and look at how it differs from our
+original “Hello, world!” project. Navigate back to your *projects* directory (or
+wherever you decided to store your code). Then, on any operating system, run
+the following:
+
+```console
+$ cargo new hello_cargo
+$ cd hello_cargo
+```
+
+The first command creates a new directory and project called *hello_cargo*.
+We’ve named our project *hello_cargo*, and Cargo creates its files in a
+directory of the same name.
+
+Go into the *hello_cargo* directory and list the files. You’ll see that Cargo
+has generated two files and one directory for us: a *Cargo.toml* file and a
+*src* directory with a *main.rs* file inside.
+
+It has also initialized a new Git repository along with a *.gitignore* file.
+Git files won’t be generated if you run `cargo new` within an existing Git
+repository; you can override this behavior by using `cargo new --vcs=git`.
+
+> Note: Git is a common version control system. You can change `cargo new` to
+> use a different version control system or no version control system by using
+> the `--vcs` flag. Run `cargo new --help` to see the available options.
+
+Open *Cargo.toml* in your text editor of choice. It should look similar to the
+code in Listing 1-2.
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+[package]
+name = "hello_cargo"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+```
+
+<span class="caption">Listing 1-2: Contents of *Cargo.toml* generated by `cargo
+new`</span>
+
+This file is in the [*TOML*](https://toml.io)<!-- ignore --> (*Tom’s Obvious,
+Minimal Language*) format, which is Cargo’s configuration format.
+
+The first line, `[package]`, is a section heading that indicates that the
+following statements are configuring a package. As we add more information to
+this file, we’ll add other sections.
+
+The next three lines set the configuration information Cargo needs to compile
+your program: the name, the version, and the edition of Rust to use. We’ll talk
+about the `edition` key in [Appendix E][appendix-e]<!-- ignore -->.
+
+The last line, `[dependencies]`, is the start of a section for you to list any
+of your project’s dependencies. In Rust, packages of code are referred to as
+*crates*. We won’t need any other crates for this project, but we will in the
+first project in Chapter 2, so we’ll use this dependencies section then.
+
+Now open *src/main.rs* and take a look:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+fn main() {
+ println!("Hello, world!");
+}
+```
+
+Cargo has generated a “Hello, world!” program for you, just like the one we
+wrote in Listing 1-1! So far, the differences between our project and the
+project Cargo generated are that Cargo placed the code in the *src* directory,
+and we have a *Cargo.toml* configuration file in the top directory.
+
+Cargo expects your source files to live inside the *src* directory. The
+top-level project directory is just for README files, license information,
+configuration files, and anything else not related to your code. Using Cargo
+helps you organize your projects. There’s a place for everything, and
+everything is in its place.
+
+If you started a project that doesn’t use Cargo, as we did with the “Hello,
+world!” project, you can convert it to a project that does use Cargo. Move the
+project code into the *src* directory and create an appropriate *Cargo.toml*
+file.
+
+### Building and Running a Cargo Project
+
+Now let’s look at what’s different when we build and run the “Hello, world!”
+program with Cargo! From your *hello_cargo* directory, build your project by
+entering the following command:
+
+```console
+$ cargo build
+ Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.85 secs
+```
+
+This command creates an executable file in *target/debug/hello_cargo* (or
+*target\debug\hello_cargo.exe* on Windows) rather than in your current
+directory. Because the default build is a debug build, Cargo puts the binary in
+a directory named *debug*. You can run the executable with this command:
+
+```console
+$ ./target/debug/hello_cargo # or .\target\debug\hello_cargo.exe on Windows
+Hello, world!
+```
+
+If all goes well, `Hello, world!` should print to the terminal. Running `cargo
+build` for the first time also causes Cargo to create a new file at the top
+level: *Cargo.lock*. This file keeps track of the exact versions of
+dependencies in your project. This project doesn’t have dependencies, so the
+file is a bit sparse. You won’t ever need to change this file manually; Cargo
+manages its contents for you.
+
+We just built a project with `cargo build` and ran it with
+`./target/debug/hello_cargo`, but we can also use `cargo run` to compile the
+code and then run the resulting executable all in one command:
+
+```console
+$ cargo run
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs
+ Running `target/debug/hello_cargo`
+Hello, world!
+```
+
+Using `cargo run` is more convenient than having to remember to run `cargo
+build` and then use the whole path to the binary, so most developers use `cargo
+run`.
+
+Notice that this time we didn’t see output indicating that Cargo was compiling
+`hello_cargo`. Cargo figured out that the files hadn’t changed, so it didn’t
+rebuild but just ran the binary. If you had modified your source code, Cargo
+would have rebuilt the project before running it, and you would have seen this
+output:
+
+```console
+$ cargo run
+ Compiling hello_cargo v0.1.0 (file:///projects/hello_cargo)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.33 secs
+ Running `target/debug/hello_cargo`
+Hello, world!
+```
+
+Cargo also provides a command called `cargo check`. This command quickly checks
+your code to make sure it compiles but doesn’t produce an executable:
+
+```console
+$ cargo check
+ Checking hello_cargo v0.1.0 (file:///projects/hello_cargo)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.32 secs
+```
+
+Why would you not want an executable? Often, `cargo check` is much faster than
+`cargo build`, because it skips the step of producing an executable. If you’re
+continually checking your work while writing the code, using `cargo check` will
+speed up the process of letting you know if your project is still compiling! As
+such, many Rustaceans run `cargo check` periodically as they write their
+program to make sure it compiles. Then they run `cargo build` when they’re
+ready to use the executable.
+
+Let’s recap what we’ve learned so far about Cargo:
+
+* We can create a project using `cargo new`.
+* We can build a project using `cargo build`.
+* We can build and run a project in one step using `cargo run`.
+* We can build a project without producing a binary to check for errors using
+ `cargo check`.
+* Instead of saving the result of the build in the same directory as our code,
+ Cargo stores it in the *target/debug* directory.
+
+An additional advantage of using Cargo is that the commands are the same no
+matter which operating system you’re working on. So, at this point, we’ll no
+longer provide specific instructions for Linux and macOS versus Windows.
+
+### Building for Release
+
+When your project is finally ready for release, you can use `cargo build
+--release` to compile it with optimizations. This command will create an
+executable in *target/release* instead of *target/debug*. The optimizations
+make your Rust code run faster, but turning them on lengthens the time it takes
+for your program to compile. This is why there are two different profiles: one
+for development, when you want to rebuild quickly and often, and another for
+building the final program you’ll give to a user that won’t be rebuilt
+repeatedly and that will run as fast as possible. If you’re benchmarking your
+code’s running time, be sure to run `cargo build --release` and benchmark with
+the executable in *target/release*.
+
+### Cargo as Convention
+
+With simple projects, Cargo doesn’t provide a lot of value over just using
+`rustc`, but it will prove its worth as your programs become more intricate.
+Once programs grow to multiple files or need a dependency, it’s much easier to
+let Cargo coordinate the build.
+
+Even though the `hello_cargo` project is simple, it now uses much of the real
+tooling you’ll use in the rest of your Rust career. In fact, to work on any
+existing projects, you can use the following commands to check out the code
+using Git, change to that project’s directory, and build:
+
+```console
+$ git clone example.org/someproject
+$ cd someproject
+$ cargo build
+```
+
+For more information about Cargo, check out [its documentation].
+
+[its documentation]: https://doc.rust-lang.org/cargo/
+
+## Summary
+
+You’re already off to a great start on your Rust journey! In this chapter,
+you’ve learned how to:
+
+* Install the latest stable version of Rust using `rustup`
+* Update to a newer Rust version
+* Open locally installed documentation
+* Write and run a “Hello, world!” program using `rustc` directly
+* Create and run a new project using the conventions of Cargo
+
+This is a great time to build a more substantial program to get used to reading
+and writing Rust code. So, in Chapter 2, we’ll build a guessing game program.
+If you would rather start by learning how common programming concepts work in
+Rust, see Chapter 3 and then return to Chapter 2.
+
+[installation]: ch01-01-installation.html#installation
+[appendix-e]: appendix-05-editions.html
diff --git a/src/doc/book/src/ch02-00-guessing-game-tutorial.md b/src/doc/book/src/ch02-00-guessing-game-tutorial.md
new file mode 100644
index 000000000..bffbc0501
--- /dev/null
+++ b/src/doc/book/src/ch02-00-guessing-game-tutorial.md
@@ -0,0 +1,922 @@
+# Programming a Guessing Game
+
+Let’s jump into Rust by working through a hands-on project together! This
+chapter introduces you to a few common Rust concepts by showing you how to use
+them in a real program. You’ll learn about `let`, `match`, methods, associated
+functions, using external crates, and more! In the following chapters, we’ll
+explore these ideas in more detail. In this chapter, you’ll practice the
+fundamentals.
+
+We’ll implement a classic beginner programming problem: a guessing game. Here’s
+how it works: the program will generate a random integer between 1 and 100. It
+will then prompt the player to enter a guess. After a guess is entered, the
+program will indicate whether the guess is too low or too high. If the guess is
+correct, the game will print a congratulatory message and exit.
+
+## Setting Up a New Project
+
+To set up a new project, go to the *projects* directory that you created in
+Chapter 1 and make a new project using Cargo, like so:
+
+```console
+$ cargo new guessing_game
+$ cd guessing_game
+```
+
+The first command, `cargo new`, takes the name of the project (`guessing_game`)
+as the first argument. The second command changes to the new project’s
+directory.
+
+Look at the generated *Cargo.toml* file:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial
+rm -rf no-listing-01-cargo-new
+cargo new no-listing-01-cargo-new --name guessing_game
+cd no-listing-01-cargo-new
+cargo run
+-->
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/Cargo.toml}}
+```
+
+As you saw in Chapter 1, `cargo new` generates a “Hello, world!” program for
+you. Check out the *src/main.rs* file:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/src/main.rs}}
+```
+
+Now let’s compile this “Hello, world!” program and run it in the same step
+using the `cargo run` command:
+
+```console
+{{#include ../listings/ch02-guessing-game-tutorial/no-listing-01-cargo-new/output.txt}}
+```
+
+The `run` command comes in handy when you need to rapidly iterate on a project,
+as we’ll do in this game, quickly testing each iteration before moving on to
+the next one.
+
+Reopen the *src/main.rs* file. You’ll be writing all the code in this file.
+
+## Processing a Guess
+
+The first part of the guessing game program will ask for user input, process
+that input, and check that the input is in the expected form. To start, we’ll
+allow the player to input a guess. Enter the code in Listing 2-1 into
+*src/main.rs*.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:all}}
+```
+
+<span class="caption">Listing 2-1: Code that gets a guess from the user and
+prints it</span>
+
+This code contains a lot of information, so let’s go over it line by line. To
+obtain user input and then print the result as output, we need to bring the
+`io` input/output library into scope. The `io` library comes from the
+standard library, known as `std`:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:io}}
+```
+
+By default, Rust has a set of items defined in the standard library that it brings
+into the scope of every program. This set is called the *prelude*, and you can
+see everything in it [in the standard library documentation][prelude].
+
+If a type you want to use isn’t in the prelude, you have to bring that type
+into scope explicitly with a `use` statement. Using the `std::io` library
+provides you with a number of useful features, including the ability to accept
+user input.
+
+As you saw in Chapter 1, the `main` function is the entry point into the
+program:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:main}}
+```
+
+The `fn` syntax declares a new function, the parentheses, `()`, indicate there
+are no parameters, and the curly bracket, `{`, starts the body of the function.
+
+As you also learned in Chapter 1, `println!` is a macro that prints a string to
+the screen:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:print}}
+```
+
+This code is printing a prompt stating what the game is and requesting input
+from the user.
+
+### Storing Values with Variables
+
+Next, we’ll create a *variable* to store the user input, like this:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:string}}
+```
+
+Now the program is getting interesting! There’s a lot going on in this little
+line. We use the `let` statement to create the variable. Here’s another example:
+
+```rust,ignore
+let apples = 5;
+```
+
+This line creates a new variable named `apples` and binds it to the value 5. In
+Rust, variables are immutable by default, meaning once we give the variable a
+value, the value won't change. We’ll be discussing this concept in detail in
+the [“Variables and Mutability”][variables-and-mutability]<!-- ignore -->
+section in Chapter 3. To make a variable mutable, we add `mut` before the
+variable name:
+
+```rust,ignore
+let apples = 5; // immutable
+let mut bananas = 5; // mutable
+```
+
+> Note: The `//` syntax starts a comment that continues until the end of the
+> line. Rust ignores everything in comments. We’ll discuss comments in more
+> detail in [Chapter 3][comments]<!-- ignore -->.
+
+Returning to the guessing game program, you now know that `let mut guess` will
+introduce a mutable variable named `guess`. The equal sign (`=`) tells Rust we
+want to bind something to the variable now. On the right of the equals sign is
+the value that `guess` is bound to, which is the result of calling
+`String::new`, a function that returns a new instance of a `String`.
+[`String`][string]<!-- ignore --> is a string type provided by the standard
+library that is a growable, UTF-8 encoded bit of text.
+
+The `::` syntax in the `::new` line indicates that `new` is an associated
+function of the `String` type. An *associated function* is a function that’s
+implemented on a type, in this case `String`. This `new` function creates a
+new, empty string. You’ll find a `new` function on many types, because it’s a
+common name for a function that makes a new value of some kind.
+
+In full, the `let mut guess = String::new();` line has created a mutable
+variable that is currently bound to a new, empty instance of a `String`. Whew!
+
+### Receiving User Input
+
+Recall that we included the input/output functionality from the standard
+library with `use std::io;` on the first line of the program. Now we’ll call
+the `stdin` function from the `io` module, which will allow us to handle user
+input:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:read}}
+```
+
+If we hadn’t imported the `io` library with `use std::io` at the beginning of
+the program, we could still use the function by writing this function call as
+`std::io::stdin`. The `stdin` function returns an instance of
+[`std::io::Stdin`][iostdin]<!-- ignore -->, which is a type that represents a
+handle to the standard input for your terminal.
+
+Next, the line `.read_line(&mut guess)` calls the [`read_line`][read_line]<!--
+ignore --> method on the standard input handle to get input from the user.
+We’re also passing `&mut guess` as the argument to `read_line` to tell it what
+string to store the user input in. The full job of `read_line` is to take
+whatever the user types into standard input and append that into a string
+(without overwriting its contents), so we therefore pass that string as an
+argument. The string argument needs to be mutable so the method can change the
+string’s content.
+
+The `&` indicates that this argument is a *reference*, which gives you a way to
+let multiple parts of your code access one piece of data without needing to
+copy that data into memory multiple times. References are a complex feature,
+and one of Rust’s major advantages is how safe and easy it is to use
+references. You don’t need to know a lot of those details to finish this
+program. For now, all you need to know is that like variables, references are
+immutable by default. Hence, you need to write `&mut guess` rather than
+`&guess` to make it mutable. (Chapter 4 will explain references more
+thoroughly.)
+
+### Handling Potential Failure with the `Result` Type
+
+We’re still working on this line of code. We’re now discussing a third line of
+text, but note that it’s still part of a single logical line of code. The next
+part is this method:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:expect}}
+```
+
+We could have written this code as:
+
+```rust,ignore
+io::stdin().read_line(&mut guess).expect("Failed to read line");
+```
+
+However, one long line is difficult to read, so it’s best to divide it. It’s
+often wise to introduce a newline and other whitespace to help break up long
+lines when you call a method with the `.method_name()` syntax. Now let’s
+discuss what this line does.
+
+As mentioned earlier, `read_line` puts whatever the user enters into the string
+we pass to it, but it also returns a `Result` value. [`Result`][result]<!--
+ignore --> is an [*enumeration*][enums]<!-- ignore -->, often called an *enum*,
+which is a type that can be in one of multiple possible states. We call each
+possible state a *variant*.
+
+Chapter 6 will cover enums in more detail. The purpose of these `Result` types
+is to encode error-handling information.
+
+`Result`'s variants are `Ok` and `Err`. The `Ok` variant indicates the
+operation was successful, and inside `Ok` is the successfully generated value.
+The `Err` variant means the operation failed, and `Err` contains information
+about how or why the operation failed.
+
+Values of the `Result` type, like values of any type, have methods defined on
+them. An instance of `Result` has an [`expect` method][expect]<!-- ignore -->
+that you can call. If this instance of `Result` is an `Err` value, `expect`
+will cause the program to crash and display the message that you passed as an
+argument to `expect`. If the `read_line` method returns an `Err`, it would
+likely be the result of an error coming from the underlying operating system.
+If this instance of `Result` is an `Ok` value, `expect` will take the return
+value that `Ok` is holding and return just that value to you so you can use it.
+In this case, that value is the number of bytes in the user’s input.
+
+If you don’t call `expect`, the program will compile, but you’ll get a warning:
+
+```console
+{{#include ../listings/ch02-guessing-game-tutorial/no-listing-02-without-expect/output.txt}}
+```
+
+Rust warns that you haven’t used the `Result` value returned from `read_line`,
+indicating that the program hasn’t handled a possible error.
+
+The right way to suppress the warning is to actually write error handling, but
+in our case we just want to crash this program when a problem occurs, so we can
+use `expect`. You’ll learn about recovering from errors in [Chapter
+9][recover]<!-- ignore -->.
+
+### Printing Values with `println!` Placeholders
+
+Aside from the closing curly bracket, there’s only one more line to discuss in
+the code so far:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-01/src/main.rs:print_guess}}
+```
+
+This line prints the string that now contains the user’s input. The `{}` set of
+curly brackets is a placeholder: think of `{}` as little crab pincers that hold
+a value in place. You can print more than one value using curly brackets: the
+first set of curly brackets holds the first value listed after the format
+string, the second set holds the second value, and so on. Printing multiple
+values in one call to `println!` would look like this:
+
+```rust
+let x = 5;
+let y = 10;
+
+println!("x = {} and y = {}", x, y);
+```
+
+This code would print `x = 5 and y = 10`.
+
+### Testing the First Part
+
+Let’s test the first part of the guessing game. Run it using `cargo run`:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/listing-02-01/
+cargo clean
+cargo run
+input 6 -->
+
+```console
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 6.44s
+ Running `target/debug/guessing_game`
+Guess the number!
+Please input your guess.
+6
+You guessed: 6
+```
+
+At this point, the first part of the game is done: we’re getting input from the
+keyboard and then printing it.
+
+## Generating a Secret Number
+
+Next, we need to generate a secret number that the user will try to guess. The
+secret number should be different every time so the game is fun to play more
+than once. We’ll use a random number between 1 and 100 so the game isn’t too
+difficult. Rust doesn’t yet include random number functionality in its standard
+library. However, the Rust team does provide a [`rand` crate][randcrate] with
+said functionality.
+
+### Using a Crate to Get More Functionality
+
+Remember that a crate is a collection of Rust source code files. The project
+we’ve been building is a *binary crate*, which is an executable. The `rand`
+crate is a *library crate*, which contains code intended to be used in other
+programs and can't be executed on its own.
+
+Cargo’s coordination of external crates is where Cargo really shines. Before we
+can write code that uses `rand`, we need to modify the *Cargo.toml* file to
+include the `rand` crate as a dependency. Open that file now and add the
+following line to the bottom beneath the `[dependencies]` section header that
+Cargo created for you. Be sure to specify `rand` exactly as we have here, with
+this version number, or the code examples in this tutorial may not work.
+
+<!-- When updating the version of `rand` used, also update the version of
+`rand` used in these files so they all match:
+* ch07-04-bringing-paths-into-scope-with-the-use-keyword.md
+* ch14-03-cargo-workspaces.md
+-->
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml:9:}}
+```
+
+In the *Cargo.toml* file, everything that follows a header is part of that
+section that continues until another section starts. In `[dependencies]` you
+tell Cargo which external crates your project depends on and which versions of
+those crates you require. In this case, we specify the `rand` crate with the
+semantic version specifier `0.8.3`. Cargo understands [Semantic
+Versioning][semver]<!-- ignore --> (sometimes called *SemVer*), which is a
+standard for writing version numbers. The number `0.8.3` is actually shorthand
+for `^0.8.3`, which means any version that is at least `0.8.3` but below
+`0.9.0`.
+
+Cargo considers these versions to have public APIs compatible with version
+`0.8.3`, and this specification ensures you’ll get the latest patch release
+that will still compile with the code in this chapter. Any version `0.9.0` or
+greater is not guaranteed to have the same API as what the following examples
+use.
+
+Now, without changing any of the code, let’s build the project, as shown in
+Listing 2-2.
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/listing-02-02/
+cargo clean
+cargo build -->
+
+```console
+$ cargo build
+ Updating crates.io index
+ Downloaded rand v0.8.3
+ Downloaded libc v0.2.86
+ Downloaded getrandom v0.2.2
+ Downloaded cfg-if v1.0.0
+ Downloaded ppv-lite86 v0.2.10
+ Downloaded rand_chacha v0.3.0
+ Downloaded rand_core v0.6.2
+ Compiling rand_core v0.6.2
+ Compiling libc v0.2.86
+ Compiling getrandom v0.2.2
+ Compiling cfg-if v1.0.0
+ Compiling ppv-lite86 v0.2.10
+ Compiling rand_chacha v0.3.0
+ Compiling rand v0.8.3
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.53s
+```
+
+<span class="caption">Listing 2-2: The output from running `cargo build` after
+adding the rand crate as a dependency</span>
+
+You may see different version numbers (but they will all be compatible with the
+code, thanks to SemVer!), different lines (depending on the operating system),
+and the lines may be in a different order.
+
+When we include an external dependency, Cargo fetches the latest versions of
+everything that dependency needs from the *registry*, which is a copy of data
+from [Crates.io][cratesio]. Crates.io is where people in the Rust ecosystem
+post their open source Rust projects for others to use.
+
+After updating the registry, Cargo checks the `[dependencies]` section and
+downloads any crates listed that aren’t already downloaded. In this case,
+although we only listed `rand` as a dependency, Cargo also grabbed other crates
+that `rand` depends on to work. After downloading the crates, Rust compiles
+them and then compiles the project with the dependencies available.
+
+If you immediately run `cargo build` again without making any changes, you
+won’t get any output aside from the `Finished` line. Cargo knows it has already
+downloaded and compiled the dependencies, and you haven’t changed anything
+about them in your *Cargo.toml* file. Cargo also knows that you haven’t changed
+anything about your code, so it doesn’t recompile that either. With nothing to
+do, it simply exits.
+
+If you open up the *src/main.rs* file, make a trivial change, and then save it
+and build again, you’ll only see two lines of output:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/listing-02-02/
+touch src/main.rs
+cargo build -->
+
+```console
+$ cargo build
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.53 secs
+```
+
+These lines show Cargo only updates the build with your tiny change to the
+*src/main.rs* file. Your dependencies haven’t changed, so Cargo knows it can
+reuse what it has already downloaded and compiled for those.
+
+#### Ensuring Reproducible Builds with the *Cargo.lock* File
+
+Cargo has a mechanism that ensures you can rebuild the same artifact every time
+you or anyone else builds your code: Cargo will use only the versions of the
+dependencies you specified until you indicate otherwise. For example, say that
+next week version 0.8.4 of the `rand` crate comes out, and that version
+contains an important bug fix, but it also contains a regression that will
+break your code. To handle this, Rust creates the *Cargo.lock* file the first
+time you run `cargo build`, so we now have this in the *guessing_game*
+directory.
+
+When you build a project for the first time, Cargo figures out all the
+versions of the dependencies that fit the criteria and then writes them to
+the *Cargo.lock* file. When you build your project in the future, Cargo will
+see that the *Cargo.lock* file exists and use the versions specified there
+rather than doing all the work of figuring out versions again. This lets you
+have a reproducible build automatically. In other words, your project will
+remain at `0.8.3` until you explicitly upgrade, thanks to the *Cargo.lock*
+file. Because the *Cargo.lock* file is important for reproducible builds, it's
+often checked into source control with the rest of the code in your project.
+
+#### Updating a Crate to Get a New Version
+
+When you *do* want to update a crate, Cargo provides the command `update`,
+which will ignore the *Cargo.lock* file and figure out all the latest versions
+that fit your specifications in *Cargo.toml*. Cargo will then write those
+versions to the *Cargo.lock* file. Otherwise, by default, Cargo will only look
+for versions greater than `0.8.3` and less than `0.9.0`. If the `rand` crate
+has released the two new versions `0.8.4` and `0.9.0` you would see the
+following if you ran `cargo update`:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/listing-02-02/
+cargo update
+assuming there is a new 0.8.x version of rand; otherwise use another update
+as a guide to creating the hypothetical output shown here -->
+
+```console
+$ cargo update
+ Updating crates.io index
+ Updating rand v0.8.3 -> v0.8.4
+```
+
+Cargo ignores the `0.9.0` release. At this point, you would also notice a
+change in your *Cargo.lock* file noting that the version of the `rand` crate
+you are now using is `0.8.4`. To use `rand` version `0.9.0` or any version in
+the `0.9.x` series, you’d have to update the *Cargo.toml* file to look like
+this instead:
+
+```toml
+[dependencies]
+rand = "0.9.0"
+```
+
+The next time you run `cargo build`, Cargo will update the registry of crates
+available and reevaluate your `rand` requirements according to the new version
+you have specified.
+
+There’s a lot more to say about [Cargo][doccargo]<!-- ignore --> and [its
+ecosystem][doccratesio]<!-- ignore --> which we’ll discuss in Chapter 14, but
+for now, that’s all you need to know. Cargo makes it very easy to reuse
+libraries, so Rustaceans are able to write smaller projects that are assembled
+from a number of packages.
+
+### Generating a Random Number
+
+Let’s start using `rand` to generate a number to guess. The next step is to
+update *src/main.rs*, as shown in Listing 2-3.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs:all}}
+```
+
+<span class="caption">Listing 2-3: Adding code to generate a random
+number</span>
+
+First, we add the line `use rand::Rng`. The `Rng` trait defines methods that
+random number generators implement, and this trait must be in scope for us to
+use those methods. Chapter 10 will cover traits in detail.
+
+Next, we’re adding two lines in the middle. In the first line, we call the
+`rand::thread_rng` function that gives us the particular random number
+generator that we’re going to use: one that is local to the current thread of
+execution and seeded by the operating system. Then we call the `gen_range`
+method on the random number generator. This method is defined by the `Rng`
+trait that we brought into scope with the `use rand::Rng` statement. The
+`gen_range` method takes a range expression as an argument and generates a
+random number in the range. The kind of range expression we’re using here takes
+the form `start..=end` and is inclusive on the lower and upper bounds, so we
+need to specify `1..=100` to request a number between 1 and 100.
+
+> Note: You won’t just know which traits to use and which methods and functions
+> to call from a crate, so each crate has documentation with instructions for
+> using it. Another neat feature of Cargo is that running the `cargo doc
+> --open` command will build documentation provided by all of your dependencies
+> locally and open it in your browser. If you’re interested in other
+> functionality in the `rand` crate, for example, run `cargo doc --open` and
+> click `rand` in the sidebar on the left.
+
+The second new line prints the secret number. This is useful while we’re
+developing the program to be able to test it, but we’ll delete it from the
+final version. It’s not much of a game if the program prints the answer as soon
+as it starts!
+
+Try running the program a few times:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/listing-02-03/
+cargo run
+4
+cargo run
+5
+-->
+
+```console
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 2.53s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 7
+Please input your guess.
+4
+You guessed: 4
+
+$ cargo run
+ Finished dev [unoptimized + debuginfo] target(s) in 0.02s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 83
+Please input your guess.
+5
+You guessed: 5
+```
+
+You should get different random numbers, and they should all be numbers between
+1 and 100. Great job!
+
+## Comparing the Guess to the Secret Number
+
+Now that we have user input and a random number, we can compare them. That step
+is shown in Listing 2-4. Note that this code won’t compile quite yet, as we
+will explain.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 2-4: Handling the possible return values of
+comparing two numbers</span>
+
+First we add another `use` statement, bringing a type called
+`std::cmp::Ordering` into scope from the standard library. The `Ordering` type
+is another enum and has the variants `Less`, `Greater`, and `Equal`. These are
+the three outcomes that are possible when you compare two values.
+
+Then we add five new lines at the bottom that use the `Ordering` type. The
+`cmp` method compares two values and can be called on anything that can be
+compared. It takes a reference to whatever you want to compare with: here it’s
+comparing the `guess` to the `secret_number`. Then it returns a variant of the
+`Ordering` enum we brought into scope with the `use` statement. We use a
+[`match`][match]<!-- ignore --> expression to decide what to do next based on
+which variant of `Ordering` was returned from the call to `cmp` with the values
+in `guess` and `secret_number`.
+
+A `match` expression is made up of *arms*. An arm consists of a *pattern* to
+match against, and the code that should be run if the value given to `match`
+fits that arm’s pattern. Rust takes the value given to `match` and looks
+through each arm’s pattern in turn. Patterns and the `match` construct are
+powerful Rust features that let you express a variety of situations your code
+might encounter and make sure that you handle them all. These features will be
+covered in detail in Chapter 6 and Chapter 18, respectively.
+
+Let’s walk through an example with the `match` expression we use here. Say that
+the user has guessed 50 and the randomly generated secret number this time is
+38. When the code compares 50 to 38, the `cmp` method will return
+`Ordering::Greater`, because 50 is greater than 38. The `match` expression gets
+the `Ordering::Greater` value and starts checking each arm’s pattern. It looks
+at the first arm’s pattern, `Ordering::Less`, and sees that the value
+`Ordering::Greater` does not match `Ordering::Less`, so it ignores the code in
+that arm and moves to the next arm. The next arm’s pattern is
+`Ordering::Greater`, which *does* match `Ordering::Greater`! The associated
+code in that arm will execute and print `Too big!` to the screen. The `match`
+expression ends after the first successful match, so it won’t look at the last
+arm in this scenario.
+
+However, the code in Listing 2-4 won’t compile yet. Let’s try it:
+
+```console
+{{#include ../listings/ch02-guessing-game-tutorial/listing-02-04/output.txt}}
+```
+
+The core of the error states that there are *mismatched types*. Rust has a
+strong, static type system. However, it also has type inference. When we wrote
+`let mut guess = String::new()`, Rust was able to infer that `guess` should be
+a `String` and didn’t make us write the type. The `secret_number`, on the other
+hand, is a number type. A few of Rust’s number types can have a value between 1
+and 100: `i32`, a 32-bit number; `u32`, an unsigned 32-bit number; `i64`, a
+64-bit number; as well as others. Unless otherwise specified, Rust defaults to
+an `i32`, which is the type of `secret_number` unless you add type information
+elsewhere that would cause Rust to infer a different numerical type. The reason
+for the error is that Rust cannot compare a string and a number type.
+
+Ultimately, we want to convert the `String` the program reads as input into a
+real number type so we can compare it numerically to the secret number. We do so
+by adding this line to the `main` function body:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/src/main.rs:here}}
+```
+
+The line is:
+
+```rust,ignore
+let guess: u32 = guess.trim().parse().expect("Please type a number!");
+```
+
+We create a variable named `guess`. But wait, doesn’t the program already have
+a variable named `guess`? It does, but helpfully Rust allows us to *shadow* the
+previous value of `guess` with a new one. Shadowing lets us reuse the `guess`
+variable name rather than forcing us to create two unique variables, such as
+`guess_str` and `guess` for example. We’ll cover this in more detail in Chapter
+3, but for now know that this feature is often used when you want to convert a
+value from one type to another type.
+
+We bind this new variable to the expression `guess.trim().parse()`. The `guess`
+in the expression refers to the original `guess` variable that contained the
+input as a string. The `trim` method on a `String` instance will eliminate any
+whitespace at the beginning and end, which we must do to be able to compare the
+string to the `u32`, which can only contain numerical data. The user must press
+<span class="keystroke">enter</span> to satisfy `read_line` and input their
+guess, which adds a newline character to the string. For example, if the user
+types <span class="keystroke">5</span> and presses <span
+class="keystroke">enter</span>, `guess` looks like this: `5\n`. The `\n`
+represents “newline”. (On Windows, pressing <span
+class="keystroke">enter</span> results in a carriage return and a newline,
+`\r\n`). The `trim` method eliminates `\n` or `\r\n`, resulting in just `5`.
+
+The [`parse` method on strings][parse]<!-- ignore --> converts a string to
+another type. Here, we use it to convert from a string to a number. We need to
+tell Rust the exact number type we want by using `let guess: u32`. The colon
+(`:`) after `guess` tells Rust we’ll annotate the variable’s type. Rust has a
+few built-in number types; the `u32` seen here is an unsigned, 32-bit integer.
+It’s a good default choice for a small positive number. You’ll learn about
+other number types in Chapter 3. Additionally, the `u32` annotation in this
+example program and the comparison with `secret_number` means that Rust will
+infer that `secret_number` should be a `u32` as well. So now the comparison
+will be between two values of the same type!
+
+The `parse` method will only work on characters that can logically be converted
+into numbers and so can easily cause errors. If, for example, the string
+contained `A👍%`, there would be no way to convert that to a number. Because it
+might fail, the `parse` method returns a `Result` type, much as the `read_line`
+method does (discussed earlier in [“Handling Potential Failure with the
+`Result` Type”](#handling-potential-failure-with-the-result-type)<!-- ignore
+-->). We’ll treat this `Result` the same way by using the `expect` method
+again. If `parse` returns an `Err` `Result` variant because it couldn’t create
+a number from the string, the `expect` call will crash the game and print the
+message we give it. If `parse` can successfully convert the string to a number,
+it will return the `Ok` variant of `Result`, and `expect` will return the
+number that we want from the `Ok` value.
+
+Let’s run the program now!
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/no-listing-03-convert-string-to-number/
+cargo run
+ 76
+-->
+
+```console
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.43s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 58
+Please input your guess.
+ 76
+You guessed: 76
+Too big!
+```
+
+Nice! Even though spaces were added before the guess, the program still figured
+out that the user guessed 76. Run the program a few times to verify the
+different behavior with different kinds of input: guess the number correctly,
+guess a number that is too high, and guess a number that is too low.
+
+We have most of the game working now, but the user can make only one guess.
+Let’s change that by adding a loop!
+
+## Allowing Multiple Guesses with Looping
+
+The `loop` keyword creates an infinite loop. We’ll add a loop to give users
+more chances at guessing the number:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/no-listing-04-looping/src/main.rs:here}}
+```
+
+As you can see, we’ve moved everything from the guess input prompt onward into
+a loop. Be sure to indent the lines inside the loop another four spaces each
+and run the program again. The program will now ask for another guess forever,
+which actually introduces a new problem. It doesn’t seem like the user can quit!
+
+The user could always interrupt the program by using the keyboard shortcut
+<span class="keystroke">ctrl-c</span>. But there’s another way to escape this
+insatiable monster, as mentioned in the `parse` discussion in [“Comparing the
+Guess to the Secret Number”](#comparing-the-guess-to-the-secret-number)<!--
+ignore -->: if the user enters a non-number answer, the program will crash. We
+can take advantage of that to allow the user to quit, as shown here:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/no-listing-04-looping/
+cargo run
+(too small guess)
+(too big guess)
+(correct guess)
+quit
+-->
+
+```console
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.50s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 59
+Please input your guess.
+45
+You guessed: 45
+Too small!
+Please input your guess.
+60
+You guessed: 60
+Too big!
+Please input your guess.
+59
+You guessed: 59
+You win!
+Please input your guess.
+quit
+thread 'main' panicked at 'Please type a number!: ParseIntError { kind: InvalidDigit }', src/main.rs:28:47
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+Typing `quit` will quit the game, but as you’ll notice so will entering any
+other non-number input. This is suboptimal to say the least; we want the game
+to also stop when the correct number is guessed.
+
+### Quitting After a Correct Guess
+
+Let’s program the game to quit when the user wins by adding a `break` statement:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/no-listing-05-quitting/src/main.rs:here}}
+```
+
+Adding the `break` line after `You win!` makes the program exit the loop when
+the user guesses the secret number correctly. Exiting the loop also means
+exiting the program, because the loop is the last part of `main`.
+
+### Handling Invalid Input
+
+To further refine the game’s behavior, rather than crashing the program when
+the user inputs a non-number, let’s make the game ignore a non-number so the
+user can continue guessing. We can do that by altering the line where `guess`
+is converted from a `String` to a `u32`, as shown in Listing 2-5.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 2-5: Ignoring a non-number guess and asking for
+another guess instead of crashing the program</span>
+
+We switch from an `expect` call to a `match` expression to move from crashing
+on an error to handling the error. Remember that `parse` returns a `Result`
+type and `Result` is an enum that has the variants `Ok` and `Err`. We’re using
+a `match` expression here, as we did with the `Ordering` result of the `cmp`
+method.
+
+If `parse` is able to successfully turn the string into a number, it will
+return an `Ok` value that contains the resulting number. That `Ok` value will
+match the first arm’s pattern, and the `match` expression will just return the
+`num` value that `parse` produced and put inside the `Ok` value. That number
+will end up right where we want it in the new `guess` variable we’re creating.
+
+If `parse` is *not* able to turn the string into a number, it will return an
+`Err` value that contains more information about the error. The `Err` value
+does not match the `Ok(num)` pattern in the first `match` arm, but it does
+match the `Err(_)` pattern in the second arm. The underscore, `_`, is a
+catchall value; in this example, we’re saying we want to match all `Err`
+values, no matter what information they have inside them. So the program will
+execute the second arm’s code, `continue`, which tells the program to go to the
+next iteration of the `loop` and ask for another guess. So, effectively, the
+program ignores all errors that `parse` might encounter!
+
+Now everything in the program should work as expected. Let’s try it:
+
+<!-- manual-regeneration
+cd listings/ch02-guessing-game-tutorial/listing-02-05/
+cargo run
+(too small guess)
+(too big guess)
+foo
+(correct guess)
+-->
+
+```console
+$ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Finished dev [unoptimized + debuginfo] target(s) in 4.45s
+ Running `target/debug/guessing_game`
+Guess the number!
+The secret number is: 61
+Please input your guess.
+10
+You guessed: 10
+Too small!
+Please input your guess.
+99
+You guessed: 99
+Too big!
+Please input your guess.
+foo
+Please input your guess.
+61
+You guessed: 61
+You win!
+```
+
+Awesome! With one tiny final tweak, we will finish the guessing game. Recall
+that the program is still printing the secret number. That worked well for
+testing, but it ruins the game. Let’s delete the `println!` that outputs the
+secret number. Listing 2-6 shows the final code.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-06/src/main.rs}}
+```
+
+<span class="caption">Listing 2-6: Complete guessing game code</span>
+
+## Summary
+
+At this point, you’ve successfully built the guessing game. Congratulations!
+
+This project was a hands-on way to introduce you to many new Rust concepts:
+`let`, `match`, functions, the use of external crates, and more. In the next
+few chapters, you’ll learn about these concepts in more detail. Chapter 3
+covers concepts that most programming languages have, such as variables, data
+types, and functions, and shows how to use them in Rust. Chapter 4 explores
+ownership, a feature that makes Rust different from other languages. Chapter 5
+discusses structs and method syntax, and Chapter 6 explains how enums work.
+
+[prelude]: ../std/prelude/index.html
+[variables-and-mutability]: ch03-01-variables-and-mutability.html#variables-and-mutability
+[comments]: ch03-04-comments.html
+[string]: ../std/string/struct.String.html
+[iostdin]: ../std/io/struct.Stdin.html
+[read_line]: ../std/io/struct.Stdin.html#method.read_line
+[result]: ../std/result/enum.Result.html
+[enums]: ch06-00-enums.html
+[expect]: ../std/result/enum.Result.html#method.expect
+[recover]: ch09-02-recoverable-errors-with-result.html
+[randcrate]: https://crates.io/crates/rand
+[semver]: http://semver.org
+[cratesio]: https://crates.io/
+[doccargo]: http://doc.crates.io
+[doccratesio]: http://doc.crates.io/crates-io.html
+[match]: ch06-02-match.html
+[parse]: ../std/primitive.str.html#method.parse
diff --git a/src/doc/book/src/ch03-00-common-programming-concepts.md b/src/doc/book/src/ch03-00-common-programming-concepts.md
new file mode 100644
index 000000000..8495543f3
--- /dev/null
+++ b/src/doc/book/src/ch03-00-common-programming-concepts.md
@@ -0,0 +1,23 @@
+# Common Programming Concepts
+
+This chapter covers concepts that appear in almost every programming language
+and how they work in Rust. Many programming languages have much in common at
+their core. None of the concepts presented in this chapter are unique to Rust,
+but we’ll discuss them in the context of Rust and explain the conventions
+around using these concepts.
+
+Specifically, you’ll learn about variables, basic types, functions, comments,
+and control flow. These foundations will be in every Rust program, and learning
+them early will give you a strong core to start from.
+
+> #### Keywords
+>
+> The Rust language has a set of *keywords* that are reserved for use by
+> the language only, much as in other languages. Keep in mind that you cannot
+> use these words as names of variables or functions. Most of the keywords have
+> special meanings, and you’ll be using them to do various tasks in your Rust
+> programs; a few have no current functionality associated with them but have
+> been reserved for functionality that might be added to Rust in the future. You
+> can find a list of the keywords in [Appendix A][appendix_a]<!-- ignore -->.
+
+[appendix_a]: appendix-01-keywords.md
diff --git a/src/doc/book/src/ch03-01-variables-and-mutability.md b/src/doc/book/src/ch03-01-variables-and-mutability.md
new file mode 100644
index 000000000..ac583f1b2
--- /dev/null
+++ b/src/doc/book/src/ch03-01-variables-and-mutability.md
@@ -0,0 +1,192 @@
+## Variables and Mutability
+
+As mentioned in the [“Storing Values with
+Variables”][storing-values-with-variables]<!-- ignore --> section, by default
+variables are immutable. This is one of many nudges Rust gives you to write
+your code in a way that takes advantage of the safety and easy concurrency that
+Rust offers. However, you still have the option to make your variables mutable.
+Let’s explore how and why Rust encourages you to favor immutability and why
+sometimes you might want to opt out.
+
+When a variable is immutable, once a value is bound to a name, you can’t change
+that value. To illustrate this, let’s generate a new project called *variables*
+in your *projects* directory by using `cargo new variables`.
+
+Then, in your new *variables* directory, open *src/main.rs* and replace its
+code with the following code. This code won’t compile just yet, we’ll first
+examine the immutability error.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/src/main.rs}}
+```
+
+Save and run the program using `cargo run`. You should receive an error
+message, as shown in this output:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-01-variables-are-immutable/output.txt}}
+```
+
+This example shows how the compiler helps you find errors in your programs.
+Compiler errors can be frustrating, but really they only mean your program
+isn’t safely doing what you want it to do yet; they do *not* mean that you’re
+not a good programmer! Experienced Rustaceans still get compiler errors.
+
+The error message indicates that the cause of the error is that you `` cannot
+assign twice to immutable variable `x` ``, because you tried to assign a second
+value to the immutable `x` variable.
+
+It’s important that we get compile-time errors when we attempt to change a
+value that’s designated as immutable because this very situation can lead to
+bugs. If one part of our code operates on the assumption that a value will
+never change and another part of our code changes that value, it’s possible
+that the first part of the code won’t do what it was designed to do. The cause
+of this kind of bug can be difficult to track down after the fact, especially
+when the second piece of code changes the value only *sometimes*. The Rust
+compiler guarantees that when you state a value won’t change, it really won’t
+change, so you don’t have to keep track of it yourself. Your code is thus
+easier to reason through.
+
+But mutability can be very useful, and can make code more convenient to write.
+Although variables are immutable by default, you can make them mutable by adding
+`mut` in front of the variable name as you did in Chapter 2. Adding `mut` also
+conveys intent to future readers of the code by indicating that other parts of
+the code will be changing this variable’s value.
+
+For example, let’s change *src/main.rs* to the following:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-02-adding-mut/src/main.rs}}
+```
+
+When we run the program now, we get this:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-02-adding-mut/output.txt}}
+```
+
+We’re allowed to change the value bound to `x` from `5` to `6` when `mut`
+is used. Ultimately, deciding whether to use mutability or not is up to you and
+depends on what you think is clearest in that particular situation.
+
+### Constants
+
+Like immutable variables, *constants* are values that are bound to a name and
+are not allowed to change, but there are a few differences between constants
+and variables.
+
+First, you aren’t allowed to use `mut` with constants. Constants aren’t just
+immutable by default—they’re always immutable. You declare constants using the
+`const` keyword instead of the `let` keyword, and the type of the value *must*
+be annotated. We’re about to cover types and type annotations in the next
+section, [“Data Types,”][data-types]<!-- ignore --> so don’t worry about the
+details right now. Just know that you must always annotate the type.
+
+Constants can be declared in any scope, including the global scope, which makes
+them useful for values that many parts of code need to know about.
+
+The last difference is that constants may be set only to a constant expression,
+not the result of a value that could only be computed at runtime.
+
+Here’s an example of a constant declaration:
+
+```rust
+const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;
+```
+
+The constant’s name is `THREE_HOURS_IN_SECONDS` and its value is set to the
+result of multiplying 60 (the number of seconds in a minute) by 60 (the number
+of minutes in an hour) by 3 (the number of hours we want to count in this
+program). Rust’s naming convention for constants is to use all uppercase with
+underscores between words. The compiler is able to evaluate a limited set of
+operations at compile time, which lets us choose to write out this value in a
+way that’s easier to understand and verify, rather than setting this constant
+to the value 10,800. See the [Rust Reference’s section on constant
+evaluation][const-eval] for more information on what operations can be used
+when declaring constants.
+
+Constants are valid for the entire time a program runs, within the scope they
+were declared in. This property makes constants useful for values in your
+application domain that multiple parts of the program might need to know about,
+such as the maximum number of points any player of a game is allowed to earn or
+the speed of light.
+
+Naming hardcoded values used throughout your program as constants is useful in
+conveying the meaning of that value to future maintainers of the code. It also
+helps to have only one place in your code you would need to change if the
+hardcoded value needed to be updated in the future.
+
+### Shadowing
+
+As you saw in the guessing game tutorial in [Chapter
+2][comparing-the-guess-to-the-secret-number]<!-- ignore -->, you can declare a
+new variable with the same name as a previous variable. Rustaceans say that the
+first variable is *shadowed* by the second, which means that the second
+variable is what the compiler will see when you use the name of the variable.
+In effect, the second variable overshadows the first, taking any uses of the
+variable name to itself until either it itself is shadowed or the scope ends.
+We can shadow a variable by using the same variable’s name and repeating the
+use of the `let` keyword as follows:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-03-shadowing/src/main.rs}}
+```
+
+This program first binds `x` to a value of `5`. Then it creates a new variable
+`x` by repeating `let x =`, taking the original value and adding `1` so the
+value of `x` is then `6`. Then, within an inner scope created with the curly
+brackets, the third `let` statement also shadows `x` and creates a new
+variable, multiplying the previous value by `2` to give `x` a value of `12`.
+When that scope is over, the inner shadowing ends and `x` returns to being `6`.
+When we run this program, it will output the following:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-03-shadowing/output.txt}}
+```
+
+Shadowing is different from marking a variable as `mut`, because we’ll get a
+compile-time error if we accidentally try to reassign to this variable without
+using the `let` keyword. By using `let`, we can perform a few transformations
+on a value but have the variable be immutable after those transformations have
+been completed.
+
+The other difference between `mut` and shadowing is that because we’re
+effectively creating a new variable when we use the `let` keyword again, we can
+change the type of the value but reuse the same name. For example, say our
+program asks a user to show how many spaces they want between some text by
+inputting space characters, and then we want to store that input as a number:
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-04-shadowing-can-change-types/src/main.rs:here}}
+```
+
+The first `spaces` variable is a string type and the second `spaces` variable
+is a number type. Shadowing thus spares us from having to come up with
+different names, such as `spaces_str` and `spaces_num`; instead, we can reuse
+the simpler `spaces` name. However, if we try to use `mut` for this, as shown
+here, we’ll get a compile-time error:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/src/main.rs:here}}
+```
+
+The error says we’re not allowed to mutate a variable’s type:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-05-mut-cant-change-types/output.txt}}
+```
+
+Now that we’ve explored how variables work, let’s look at more data types they
+can have.
+
+[comparing-the-guess-to-the-secret-number]:
+ch02-00-guessing-game-tutorial.html#comparing-the-guess-to-the-secret-number
+[data-types]: ch03-02-data-types.html#data-types
+[storing-values-with-variables]: ch02-00-guessing-game-tutorial.html#storing-values-with-variables
+[const-eval]: ../reference/const_eval.html
diff --git a/src/doc/book/src/ch03-02-data-types.md b/src/doc/book/src/ch03-02-data-types.md
new file mode 100644
index 000000000..47c00adc8
--- /dev/null
+++ b/src/doc/book/src/ch03-02-data-types.md
@@ -0,0 +1,383 @@
+## Data Types
+
+Every value in Rust is of a certain *data type*, which tells Rust what kind of
+data is being specified so it knows how to work with that data. We’ll look at
+two data type subsets: scalar and compound.
+
+Keep in mind that Rust is a *statically typed* language, which means that it
+must know the types of all variables at compile time. The compiler can usually
+infer what type we want to use based on the value and how we use it. In cases
+when many types are possible, such as when we converted a `String` to a numeric
+type using `parse` in the [“Comparing the Guess to the Secret
+Number”][comparing-the-guess-to-the-secret-number]<!-- ignore --> section in
+Chapter 2, we must add a type annotation, like this:
+
+```rust
+let guess: u32 = "42".parse().expect("Not a number!");
+```
+
+If we don’t add the `: u32` type annotation above, Rust will display the
+following error, which means the compiler needs more information from us to
+know which type we want to use:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/output-only-01-no-type-annotations/output.txt}}
+```
+
+You’ll see different type annotations for other data types.
+
+### Scalar Types
+
+A *scalar* type represents a single value. Rust has four primary scalar types:
+integers, floating-point numbers, Booleans, and characters. You may recognize
+these from other programming languages. Let’s jump into how they work in Rust.
+
+#### Integer Types
+
+An *integer* is a number without a fractional component. We used one integer
+type in Chapter 2, the `u32` type. This type declaration indicates that the
+value it’s associated with should be an unsigned integer (signed integer types
+start with `i`, instead of `u`) that takes up 32 bits of space. Table 3-1 shows
+the built-in integer types in Rust. We can use any of these variants to declare
+the type of an integer value.
+
+<span class="caption">Table 3-1: Integer Types in Rust</span>
+
+| Length | Signed | Unsigned |
+|---------|---------|----------|
+| 8-bit | `i8` | `u8` |
+| 16-bit | `i16` | `u16` |
+| 32-bit | `i32` | `u32` |
+| 64-bit | `i64` | `u64` |
+| 128-bit | `i128` | `u128` |
+| arch | `isize` | `usize` |
+
+Each variant can be either signed or unsigned and has an explicit size.
+*Signed* and *unsigned* refer to whether it’s possible for the number to be
+negative—in other words, whether the number needs to have a sign with it
+(signed) or whether it will only ever be positive and can therefore be
+represented without a sign (unsigned). It’s like writing numbers on paper: when
+the sign matters, a number is shown with a plus sign or a minus sign; however,
+when it’s safe to assume the number is positive, it’s shown with no sign.
+Signed numbers are stored using [two’s
+complement](https://en.wikipedia.org/wiki/Two%27s_complement)<!-- ignore -->
+representation.
+
+Each signed variant can store numbers from -(2<sup>n - 1</sup>) to 2<sup>n -
+1</sup> - 1 inclusive, where *n* is the number of bits that variant uses. So an
+`i8` can store numbers from -(2<sup>7</sup>) to 2<sup>7</sup> - 1, which equals
+-128 to 127. Unsigned variants can store numbers from 0 to 2<sup>n</sup> - 1,
+so a `u8` can store numbers from 0 to 2<sup>8</sup> - 1, which equals 0 to 255.
+
+Additionally, the `isize` and `usize` types depend on the architecture of the
+computer your program is running on, which is denoted in the table as “arch”:
+64 bits if you’re on a 64-bit architecture and 32 bits if you’re on a 32-bit
+architecture.
+
+You can write integer literals in any of the forms shown in Table 3-2. Note
+that number literals that can be multiple numeric types allow a type suffix,
+such as `57u8`, to designate the type. Number literals can also use `_` as a
+visual separator to make the number easier to read, such as `1_000`, which will
+have the same value as if you had specified `1000`.
+
+<span class="caption">Table 3-2: Integer Literals in Rust</span>
+
+| Number literals | Example |
+|------------------|---------------|
+| Decimal | `98_222` |
+| Hex | `0xff` |
+| Octal | `0o77` |
+| Binary | `0b1111_0000` |
+| Byte (`u8` only) | `b'A'` |
+
+So how do you know which type of integer to use? If you’re unsure, Rust’s
+defaults are generally good places to start: integer types default to `i32`.
+The primary situation in which you’d use `isize` or `usize` is when indexing
+some sort of collection.
+
+> ##### Integer Overflow
+>
+> Let’s say you have a variable of type `u8` that can hold values between 0 and
+> 255. If you try to change the variable to a value outside of that range, such
+> as 256, *integer overflow* will occur, which can result in one of two
+> behaviors. When you’re compiling in debug mode, Rust includes checks for
+> integer overflow that cause your program to *panic* at runtime if this
+> behavior occurs. Rust uses the term panicking when a program exits with an
+> error; we’ll discuss panics in more depth in the [“Unrecoverable Errors with
+> `panic!`”][unrecoverable-errors-with-panic]<!-- ignore --> section in Chapter
+> 9.
+>
+> When you’re compiling in release mode with the `--release` flag, Rust does
+> *not* include checks for integer overflow that cause panics. Instead, if
+> overflow occurs, Rust performs *two’s complement wrapping*. In short, values
+> greater than the maximum value the type can hold “wrap around” to the minimum
+> of the values the type can hold. In the case of a `u8`, the value 256 becomes
+> 0, the value 257 becomes 1, and so on. The program won’t panic, but the
+> variable will have a value that probably isn’t what you were expecting it to
+> have. Relying on integer overflow’s wrapping behavior is considered an error.
+>
+> To explicitly handle the possibility of overflow, you can use these families
+> of methods provided by the standard library for primitive numeric types:
+>
+> - Wrap in all modes with the `wrapping_*` methods, such as `wrapping_add`
+> - Return the `None` value if there is overflow with the `checked_*` methods
+> - Return the value and a boolean indicating whether there was overflow with
+> the `overflowing_*` methods
+> - Saturate at the value’s minimum or maximum values with `saturating_*`
+> methods
+
+#### Floating-Point Types
+
+Rust also has two primitive types for *floating-point numbers*, which are
+numbers with decimal points. Rust’s floating-point types are `f32` and `f64`,
+which are 32 bits and 64 bits in size, respectively. The default type is `f64`
+because on modern CPUs it’s roughly the same speed as `f32` but is capable of
+more precision. All floating-point types are signed.
+
+Here’s an example that shows floating-point numbers in action:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-06-floating-point/src/main.rs}}
+```
+
+Floating-point numbers are represented according to the IEEE-754 standard. The
+`f32` type is a single-precision float, and `f64` has double precision.
+
+#### Numeric Operations
+
+Rust supports the basic mathematical operations you’d expect for all of the
+number types: addition, subtraction, multiplication, division, and remainder.
+Integer division rounds down to the nearest integer. The following code shows
+how you’d use each numeric operation in a `let` statement:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-07-numeric-operations/src/main.rs}}
+```
+
+Each expression in these statements uses a mathematical operator and evaluates
+to a single value, which is then bound to a variable. [Appendix B][appendix_b]<!-- ignore --> contains a
+list of all operators that Rust provides.
+
+#### The Boolean Type
+
+As in most other programming languages, a Boolean type in Rust has two possible
+values: `true` and `false`. Booleans are one byte in size. The Boolean type in
+Rust is specified using `bool`. For example:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-08-boolean/src/main.rs}}
+```
+
+The main way to use Boolean values is through conditionals, such as an `if`
+expression. We’ll cover how `if` expressions work in Rust in the [“Control
+Flow”][control-flow]<!-- ignore --> section.
+
+#### The Character Type
+
+Rust’s `char` type is the language’s most primitive alphabetic type. Here’s
+some examples of declaring `char` values:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-09-char/src/main.rs}}
+```
+
+Note that we specify `char` literals with single quotes, as opposed to string
+literals, which use double quotes. Rust’s `char` type is four bytes in size and
+represents a Unicode Scalar Value, which means it can represent a lot more than
+just ASCII. Accented letters; Chinese, Japanese, and Korean characters; emoji;
+and zero-width spaces are all valid `char` values in Rust. Unicode Scalar
+Values range from `U+0000` to `U+D7FF` and `U+E000` to `U+10FFFF` inclusive.
+However, a “character” isn’t really a concept in Unicode, so your human
+intuition for what a “character” is may not match up with what a `char` is in
+Rust. We’ll discuss this topic in detail in [“Storing UTF-8 Encoded Text with
+Strings”][strings]<!-- ignore --> in Chapter 8.
+
+### Compound Types
+
+*Compound types* can group multiple values into one type. Rust has two
+primitive compound types: tuples and arrays.
+
+#### The Tuple Type
+
+A tuple is a general way of grouping together a number of values with a variety
+of types into one compound type. Tuples have a fixed length: once declared,
+they cannot grow or shrink in size.
+
+We create a tuple by writing a comma-separated list of values inside
+parentheses. Each position in the tuple has a type, and the types of the
+different values in the tuple don’t have to be the same. We’ve added optional
+type annotations in this example:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-10-tuples/src/main.rs}}
+```
+
+The variable `tup` binds to the entire tuple, because a tuple is considered a
+single compound element. To get the individual values out of a tuple, we can
+use pattern matching to destructure a tuple value, like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-11-destructuring-tuples/src/main.rs}}
+```
+
+This program first creates a tuple and binds it to the variable `tup`. It then
+uses a pattern with `let` to take `tup` and turn it into three separate
+variables, `x`, `y`, and `z`. This is called *destructuring*, because it breaks
+the single tuple into three parts. Finally, the program prints the value of
+`y`, which is `6.4`.
+
+We can also access a tuple element directly by using a period (`.`) followed by
+the index of the value we want to access. For example:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-12-tuple-indexing/src/main.rs}}
+```
+
+This program creates the tuple `x` and then accesses each element of the tuple
+using their respective indices. As with most programming languages, the first
+index in a tuple is 0.
+
+The tuple without any values has a special name, *unit*. This value and its
+corresponding type are both written `()` and represent an empty value or an
+empty return type. Expressions implicitly return the unit value if they don’t
+return any other value.
+
+#### The Array Type
+
+Another way to have a collection of multiple values is with an *array*. Unlike
+a tuple, every element of an array must have the same type. Unlike arrays in
+some other languages, arrays in Rust have a fixed length.
+
+We write the values in an array as a comma-separated list inside square
+brackets:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-13-arrays/src/main.rs}}
+```
+
+Arrays are useful when you want your data allocated on the stack rather than
+the heap (we will discuss the stack and the heap more in [Chapter
+4][stack-and-heap]<!-- ignore -->) or when you want to ensure you always have a
+fixed number of elements. An array isn’t as flexible as the vector type,
+though. A vector is a similar collection type provided by the standard library
+that *is* allowed to grow or shrink in size. If you’re unsure whether to use an
+array or a vector, chances are you should use a vector. [Chapter
+8][vectors]<!-- ignore --> discusses vectors in more detail.
+
+However, arrays are more useful when you know the number of elements will not
+need to change. For example, if you were using the names of the month in a
+program, you would probably use an array rather than a vector because you know
+it will always contain 12 elements:
+
+```rust
+let months = ["January", "February", "March", "April", "May", "June", "July",
+ "August", "September", "October", "November", "December"];
+```
+
+You write an array’s type using square brackets with the type of each element,
+a semicolon, and then the number of elements in the array, like so:
+
+```rust
+let a: [i32; 5] = [1, 2, 3, 4, 5];
+```
+
+Here, `i32` is the type of each element. After the semicolon, the number `5`
+indicates the array contains five elements.
+
+You can also initialize an array to contain the same value for each element by
+specifying the initial value, followed by a semicolon, and then the length of
+the array in square brackets, as shown here:
+
+```rust
+let a = [3; 5];
+```
+
+The array named `a` will contain `5` elements that will all be set to the value
+`3` initially. This is the same as writing `let a = [3, 3, 3, 3, 3];` but in a
+more concise way.
+
+##### Accessing Array Elements
+
+An array is a single chunk of memory of a known, fixed size that can be
+allocated on the stack. You can access elements of an array using indexing,
+like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-14-array-indexing/src/main.rs}}
+```
+
+In this example, the variable named `first` will get the value `1`, because
+that is the value at index `[0]` in the array. The variable named `second` will
+get the value `2` from index `[1]` in the array.
+
+##### Invalid Array Element Access
+
+Let’s see what happens if you try to access an element of an array that is past
+the end of the array. Say you run this code, similar to the guessing game in
+Chapter 2, to get an array index from the user:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,panics
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access/src/main.rs}}
+```
+
+This code compiles successfully. If you run this code using `cargo run` and
+enter 0, 1, 2, 3, or 4, the program will print out the corresponding value at
+that index in the array. If you instead enter a number past the end of the
+array, such as 10, you’ll see output like this:
+
+<!-- manual-regeneration
+cd listings/ch03-common-programming-concepts/no-listing-15-invalid-array-access
+cargo run
+10
+-->
+
+```console
+thread 'main' panicked at 'index out of bounds: the len is 5 but the index is 10', src/main.rs:19:19
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+The program resulted in a *runtime* error at the point of using an invalid
+value in the indexing operation. The program exited with an error message and
+didn’t execute the final `println!` statement. When you attempt to access an
+element using indexing, Rust will check that the index you’ve specified is less
+than the array length. If the index is greater than or equal to the length,
+Rust will panic. This check has to happen at runtime, especially in this case,
+because the compiler can’t possibly know what value a user will enter when they
+run the code later.
+
+This is an example of Rust’s memory safety principles in action. In many
+low-level languages, this kind of check is not done, and when you provide an
+incorrect index, invalid memory can be accessed. Rust protects you against this
+kind of error by immediately exiting instead of allowing the memory access and
+continuing. Chapter 9 discusses more of Rust’s error handling and how you can
+write readable, safe code that neither panics nor allows invalid memory access.
+
+[comparing-the-guess-to-the-secret-number]:
+ch02-00-guessing-game-tutorial.html#comparing-the-guess-to-the-secret-number
+[control-flow]: ch03-05-control-flow.html#control-flow
+[strings]: ch08-02-strings.html#storing-utf-8-encoded-text-with-strings
+[stack-and-heap]: ch04-01-what-is-ownership.html#the-stack-and-the-heap
+[vectors]: ch08-01-vectors.html
+[unrecoverable-errors-with-panic]: ch09-01-unrecoverable-errors-with-panic.html
+[wrapping]: ../std/num/struct.Wrapping.html
+[appendix_b]: appendix-02-operators.md
diff --git a/src/doc/book/src/ch03-03-how-functions-work.md b/src/doc/book/src/ch03-03-how-functions-work.md
new file mode 100644
index 000000000..c698853ce
--- /dev/null
+++ b/src/doc/book/src/ch03-03-how-functions-work.md
@@ -0,0 +1,249 @@
+## Functions
+
+Functions are prevalent in Rust code. You’ve already seen one of the most
+important functions in the language: the `main` function, which is the entry
+point of many programs. You’ve also seen the `fn` keyword, which allows you to
+declare new functions.
+
+Rust code uses *snake case* as the conventional style for function and variable
+names, in which all letters are lowercase and underscores separate words.
+Here’s a program that contains an example function definition:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-16-functions/src/main.rs}}
+```
+
+We define a function in Rust by entering `fn` followed by a function name and a
+set of parentheses. The curly brackets tell the compiler where the function
+body begins and ends.
+
+We can call any function we’ve defined by entering its name followed by a set
+of parentheses. Because `another_function` is defined in the program, it can be
+called from inside the `main` function. Note that we defined `another_function`
+*after* the `main` function in the source code; we could have defined it before
+as well. Rust doesn’t care where you define your functions, only that they’re
+defined somewhere in a scope that can be seen by the caller.
+
+Let’s start a new binary project named *functions* to explore functions
+further. Place the `another_function` example in *src/main.rs* and run it. You
+should see the following output:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-16-functions/output.txt}}
+```
+
+The lines execute in the order in which they appear in the `main` function.
+First, the “Hello, world!” message prints, and then `another_function` is
+called and its message is printed.
+
+### Parameters
+
+We can define functions to have *parameters*, which are special variables that
+are part of a function’s signature. When a function has parameters, you can
+provide it with concrete values for those parameters. Technically, the concrete
+values are called *arguments*, but in casual conversation, people tend to use
+the words *parameter* and *argument* interchangeably for either the variables
+in a function’s definition or the concrete values passed in when you call a
+function.
+
+In this version of `another_function` we add a parameter:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/src/main.rs}}
+```
+
+Try running this program; you should get the following output:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-17-functions-with-parameters/output.txt}}
+```
+
+The declaration of `another_function` has one parameter named `x`. The type of
+`x` is specified as `i32`. When we pass `5` in to `another_function`, the
+`println!` macro puts `5` where the pair of curly brackets containing `x` was
+in the format string.
+
+In function signatures, you *must* declare the type of each parameter. This is
+a deliberate decision in Rust’s design: requiring type annotations in function
+definitions means the compiler almost never needs you to use them elsewhere in
+the code to figure out what type you mean. The compiler is also able to give
+more helpful error messages if it knows what types the function expects.
+
+When defining multiple parameters, separate the parameter declarations with
+commas, like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/src/main.rs}}
+```
+
+This example creates a function named `print_labeled_measurement` with two
+parameters. The first parameter is named `value` and is an `i32`. The second is
+named `unit_label` and is type `char`. The function then prints text containing
+both the `value` and the `unit_label`.
+
+Let’s try running this code. Replace the program currently in your *functions*
+project’s *src/main.rs* file with the preceding example and run it using `cargo
+run`:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-18-functions-with-multiple-parameters/output.txt}}
+```
+
+Because we called the function with `5` as the value for `value` and `'h'` as
+the value for `unit_label`, the program output contains those values.
+
+### Statements and Expressions
+
+Function bodies are made up of a series of statements optionally ending in an
+expression. So far, the functions we’ve covered haven’t included an ending
+expression, but you have seen an expression as part of a statement. Because
+Rust is an expression-based language, this is an important distinction to
+understand. Other languages don’t have the same distinctions, so let’s look at
+what statements and expressions are and how their differences affect the bodies
+of functions.
+
+*Statements* are instructions that perform some action and do not return a
+value. *Expressions* evaluate to a resulting value. Let’s look at some examples.
+
+We’ve actually already used statements and expressions. Creating a variable and
+assigning a value to it with the `let` keyword is a statement. In Listing 3-1,
+`let y = 6;` is a statement.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/listing-03-01/src/main.rs}}
+```
+
+<span class="caption">Listing 3-1: A `main` function declaration containing one statement</span>
+
+Function definitions are also statements; the entire preceding example is a
+statement in itself.
+
+Statements do not return values. Therefore, you can’t assign a `let` statement
+to another variable, as the following code tries to do; you’ll get an error:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/src/main.rs}}
+```
+
+When you run this program, the error you’ll get looks like this:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-19-statements-vs-expressions/output.txt}}
+```
+
+The `let y = 6` statement does not return a value, so there isn’t anything for
+`x` to bind to. This is different from what happens in other languages, such as
+C and Ruby, where the assignment returns the value of the assignment. In those
+languages, you can write `x = y = 6` and have both `x` and `y` have the value
+`6`; that is not the case in Rust.
+
+Expressions evaluate to a value and make up most of the rest of the code that
+you’ll write in Rust. Consider a math operation, such as `5 + 6`, which is an
+expression that evaluates to the value `11`. Expressions can be part of
+statements: in Listing 3-1, the `6` in the statement `let y = 6;` is an
+expression that evaluates to the value `6`. Calling a function is an
+expression. Calling a macro is an expression. A new scope block created with
+curly brackets is an expression, for example:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-20-blocks-are-expressions/src/main.rs}}
+```
+
+This expression:
+
+```rust,ignore
+{
+ let x = 3;
+ x + 1
+}
+```
+
+is a block that, in this case, evaluates to `4`. That value gets bound to `y`
+as part of the `let` statement. Note that the `x + 1` line doesn’t have a
+semicolon at the end, unlike most of the lines you’ve seen so far. Expressions
+do not include ending semicolons. If you add a semicolon to the end of an
+expression, you turn it into a statement, and it will then not return a value.
+Keep this in mind as you explore function return values and expressions next.
+
+### Functions with Return Values
+
+Functions can return values to the code that calls them. We don’t name return
+values, but we must declare their type after an arrow (`->`). In Rust, the
+return value of the function is synonymous with the value of the final
+expression in the block of the body of a function. You can return early from a
+function by using the `return` keyword and specifying a value, but most
+functions return the last expression implicitly. Here’s an example of a
+function that returns a value:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-21-function-return-values/src/main.rs}}
+```
+
+There are no function calls, macros, or even `let` statements in the `five`
+function—just the number `5` by itself. That’s a perfectly valid function in
+Rust. Note that the function’s return type is specified too, as `-> i32`. Try
+running this code; the output should look like this:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-21-function-return-values/output.txt}}
+```
+
+The `5` in `five` is the function’s return value, which is why the return type
+is `i32`. Let’s examine this in more detail. There are two important bits:
+first, the line `let x = five();` shows that we’re using the return value of a
+function to initialize a variable. Because the function `five` returns a `5`,
+that line is the same as the following:
+
+```rust
+let x = 5;
+```
+
+Second, the `five` function has no parameters and defines the type of the
+return value, but the body of the function is a lonely `5` with no semicolon
+because it’s an expression whose value we want to return.
+
+Let’s look at another example:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-22-function-parameter-and-return/src/main.rs}}
+```
+
+Running this code will print `The value of x is: 6`. But if we place a
+semicolon at the end of the line containing `x + 1`, changing it from an
+expression to a statement, we’ll get an error.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/src/main.rs}}
+```
+
+Compiling this code produces an error, as follows:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-23-statements-dont-return-values/output.txt}}
+```
+
+The main error message, “mismatched types,” reveals the core issue with this
+code. The definition of the function `plus_one` says that it will return an
+`i32`, but statements don’t evaluate to a value, which is expressed by `()`,
+the unit type. Therefore, nothing is returned, which contradicts the function
+definition and results in an error. In this output, Rust provides a message to
+possibly help rectify this issue: it suggests removing the semicolon, which
+would fix the error.
diff --git a/src/doc/book/src/ch03-04-comments.md b/src/doc/book/src/ch03-04-comments.md
new file mode 100644
index 000000000..6af0ce175
--- /dev/null
+++ b/src/doc/book/src/ch03-04-comments.md
@@ -0,0 +1,42 @@
+## Comments
+
+All programmers strive to make their code easy to understand, but sometimes
+extra explanation is warranted. In these cases, programmers leave *comments* in
+their source code that the compiler will ignore but people reading the source
+code may find useful.
+
+Here’s a simple comment:
+
+```rust
+// hello, world
+```
+
+In Rust, the idiomatic comment style starts a comment with two slashes, and the
+comment continues until the end of the line. For comments that extend beyond a
+single line, you’ll need to include `//` on each line, like this:
+
+```rust
+// So we’re doing something complicated here, long enough that we need
+// multiple lines of comments to do it! Whew! Hopefully, this comment will
+// explain what’s going on.
+```
+
+Comments can also be placed at the end of lines containing code:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-24-comments-end-of-line/src/main.rs}}
+```
+
+But you’ll more often see them used in this format, with the comment on a
+separate line above the code it’s annotating:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-25-comments-above-line/src/main.rs}}
+```
+
+Rust also has another kind of comment, documentation comments, which we’ll
+discuss in the “Publishing a Crate to Crates.io” section of Chapter 14.
diff --git a/src/doc/book/src/ch03-05-control-flow.md b/src/doc/book/src/ch03-05-control-flow.md
new file mode 100644
index 000000000..100bfb3e3
--- /dev/null
+++ b/src/doc/book/src/ch03-05-control-flow.md
@@ -0,0 +1,391 @@
+## Control Flow
+
+The ability to run some code depending on if a condition is true, or run some
+code repeatedly while a condition is true, are basic building blocks in most
+programming languages. The most common constructs that let you control the flow
+of execution of Rust code are `if` expressions and loops.
+
+### `if` Expressions
+
+An `if` expression allows you to branch your code depending on conditions. You
+provide a condition and then state, “If this condition is met, run this block
+of code. If the condition is not met, do not run this block of code.”
+
+Create a new project called *branches* in your *projects* directory to explore
+the `if` expression. In the *src/main.rs* file, input the following:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-26-if-true/src/main.rs}}
+```
+
+All `if` expressions start with the keyword `if`, followed by a condition. In
+this case, the condition checks whether or not the variable `number` has a
+value less than 5. We place the block of code to execute if the condition is true
+immediately after the condition inside curly brackets. Blocks of code
+associated with the conditions in `if` expressions are sometimes called *arms*,
+just like the arms in `match` expressions that we discussed in the [“Comparing
+the Guess to the Secret Number”][comparing-the-guess-to-the-secret-number]<!--
+ignore --> section of Chapter 2.
+
+Optionally, we can also include an `else` expression, which we chose
+to do here, to give the program an alternative block of code to execute should
+the condition evaluate to false. If you don’t provide an `else` expression and
+the condition is false, the program will just skip the `if` block and move on
+to the next bit of code.
+
+Try running this code; you should see the following output:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-26-if-true/output.txt}}
+```
+
+Let’s try changing the value of `number` to a value that makes the condition
+`false` to see what happens:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-27-if-false/src/main.rs:here}}
+```
+
+Run the program again, and look at the output:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-27-if-false/output.txt}}
+```
+
+It’s also worth noting that the condition in this code *must* be a `bool`. If
+the condition isn’t a `bool`, we’ll get an error. For example, try running the
+following code:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/src/main.rs}}
+```
+
+The `if` condition evaluates to a value of `3` this time, and Rust throws an
+error:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-28-if-condition-must-be-bool/output.txt}}
+```
+
+The error indicates that Rust expected a `bool` but got an integer. Unlike
+languages such as Ruby and JavaScript, Rust will not automatically try to
+convert non-Boolean types to a Boolean. You must be explicit and always provide
+`if` with a Boolean as its condition. If we want the `if` code block to run
+only when a number is not equal to `0`, for example, we can change the `if`
+expression to the following:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-29-if-not-equal-0/src/main.rs}}
+```
+
+Running this code will print `number was something other than zero`.
+
+#### Handling Multiple Conditions with `else if`
+
+You can use multiple conditions by combining `if` and `else` in an `else if`
+expression. For example:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-30-else-if/src/main.rs}}
+```
+
+This program has four possible paths it can take. After running it, you should
+see the following output:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-30-else-if/output.txt}}
+```
+
+When this program executes, it checks each `if` expression in turn and executes
+the first body for which the condition holds true. Note that even though 6 is
+divisible by 2, we don’t see the output `number is divisible by 2`, nor do we
+see the `number is not divisible by 4, 3, or 2` text from the `else` block.
+That’s because Rust only executes the block for the first true condition, and
+once it finds one, it doesn’t even check the rest.
+
+Using too many `else if` expressions can clutter your code, so if you have more
+than one, you might want to refactor your code. Chapter 6 describes a powerful
+Rust branching construct called `match` for these cases.
+
+#### Using `if` in a `let` Statement
+
+Because `if` is an expression, we can use it on the right side of a `let`
+statement to assign the outcome to a variable, as in Listing 3-2.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/listing-03-02/src/main.rs}}
+```
+
+<span class="caption">Listing 3-2: Assigning the result of an `if` expression
+to a variable</span>
+
+The `number` variable will be bound to a value based on the outcome of the `if`
+expression. Run this code to see what happens:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/listing-03-02/output.txt}}
+```
+
+Remember that blocks of code evaluate to the last expression in them, and
+numbers by themselves are also expressions. In this case, the value of the
+whole `if` expression depends on which block of code executes. This means the
+values that have the potential to be results from each arm of the `if` must be
+the same type; in Listing 3-2, the results of both the `if` arm and the `else`
+arm were `i32` integers. If the types are mismatched, as in the following
+example, we’ll get an error:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/src/main.rs}}
+```
+
+When we try to compile this code, we’ll get an error. The `if` and `else` arms
+have value types that are incompatible, and Rust indicates exactly where to
+find the problem in the program:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/no-listing-31-arms-must-return-same-type/output.txt}}
+```
+
+The expression in the `if` block evaluates to an integer, and the expression in
+the `else` block evaluates to a string. This won’t work because variables must
+have a single type, and Rust needs to know at compile time what type the
+`number` variable is, definitively. Knowing the type of `number` lets the
+compiler verify the type is valid everywhere we use `number`. Rust wouldn’t be
+able to do that if the type of `number` was only determined at runtime; the
+compiler would be more complex and would make fewer guarantees about the code
+if it had to keep track of multiple hypothetical types for any variable.
+
+### Repetition with Loops
+
+It’s often useful to execute a block of code more than once. For this task,
+Rust provides several *loops*, which will run through the code inside the loop
+body to the end and then start immediately back at the beginning. To
+experiment with loops, let’s make a new project called *loops*.
+
+Rust has three kinds of loops: `loop`, `while`, and `for`. Let’s try each one.
+
+#### Repeating Code with `loop`
+
+The `loop` keyword tells Rust to execute a block of code over and over again
+forever or until you explicitly tell it to stop.
+
+As an example, change the *src/main.rs* file in your *loops* directory to look
+like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-32-loop/src/main.rs}}
+```
+
+When we run this program, we’ll see `again!` printed over and over continuously
+until we stop the program manually. Most terminals support the keyboard shortcut
+<span class="keystroke">ctrl-c</span> to interrupt a program that is stuck in
+a continual loop. Give it a try:
+
+<!-- manual-regeneration
+cd listings/ch03-common-programming-concepts/no-listing-32-loop
+cargo run
+CTRL-C
+-->
+
+```console
+$ cargo run
+ Compiling loops v0.1.0 (file:///projects/loops)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.29s
+ Running `target/debug/loops`
+again!
+again!
+again!
+again!
+^Cagain!
+```
+
+The symbol `^C` represents where you pressed <span class="keystroke">ctrl-c
+</span>. You may or may not see the word `again!` printed after the `^C`,
+depending on where the code was in the loop when it received the interrupt
+signal.
+
+Fortunately, Rust also provides a way to break out of a loop using code. You
+can place the `break` keyword within the loop to tell the program when to stop
+executing the loop. Recall that we did this in the guessing game in the
+[“Quitting After a Correct Guess”][quitting-after-a-correct-guess]<!-- ignore
+--> section of Chapter 2 to exit the program when the user won the game by
+guessing the correct number.
+
+We also used `continue` in the guessing game, which in a loop tells the program
+to skip over any remaining code in this iteration of the loop and go to the
+next iteration.
+
+#### Returning Values from Loops
+
+One of the uses of a `loop` is to retry an operation you know might fail, such
+as checking whether a thread has completed its job. You might also need to pass
+the result of that operation out of the loop to the rest of your code. To do
+this, you can add the value you want returned after the `break` expression you
+use to stop the loop; that value will be returned out of the loop so you can
+use it, as shown here:
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-33-return-value-from-loop/src/main.rs}}
+```
+
+Before the loop, we declare a variable named `counter` and initialize it to
+`0`. Then we declare a variable named `result` to hold the value returned from
+the loop. On every iteration of the loop, we add `1` to the `counter` variable,
+and then check whether the counter is equal to `10`. When it is, we use the
+`break` keyword with the value `counter * 2`. After the loop, we use a
+semicolon to end the statement that assigns the value to `result`. Finally, we
+print the value in `result`, which in this case is 20.
+
+#### Loop Labels to Disambiguate Between Multiple Loops
+
+If you have loops within loops, `break` and `continue` apply to the innermost
+loop at that point. You can optionally specify a *loop label* on a loop that we
+can then use with `break` or `continue` to specify that those keywords apply to
+the labeled loop instead of the innermost loop. Loop labels must begin with a
+single quote. Here’s an example with two nested loops:
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/src/main.rs}}
+```
+
+The outer loop has the label `'counting_up`, and it will count up from 0 to 2.
+The inner loop without a label counts down from 10 to 9. The first `break` that
+doesn’t specify a label will exit the inner loop only. The `break
+'counting_up;` statement will exit the outer loop. This code prints:
+
+```console
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-32-5-loop-labels/output.txt}}
+```
+
+#### Conditional Loops with `while`
+
+A program will often need to evaluate a condition within a loop. While the
+condition is true, the loop runs. When the condition ceases to be true, the
+program calls `break`, stopping the loop. It’s possible to implement behavior
+like this using a combination of `loop`, `if`, `else`, and `break`; you could
+try that now in a program, if you’d like. However, this pattern is so common
+that Rust has a built-in language construct for it, called a `while` loop. In
+Listing 3-3, we use `while` to loop the program three times, counting down each
+time, and then, after the loop, print a message and exit.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/listing-03-03/src/main.rs}}
+```
+
+<span class="caption">Listing 3-3: Using a `while` loop to run code while a
+condition holds true</span>
+
+This construct eliminates a lot of nesting that would be necessary if you used
+`loop`, `if`, `else`, and `break`, and it’s clearer. While a condition holds
+true, the code runs; otherwise, it exits the loop.
+
+#### Looping Through a Collection with `for`
+
+You can choose to use the `while` construct to loop over the elements of a
+collection, such as an array. For example, the loop in Listing 3-4 prints each
+element in the array `a`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/listing-03-04/src/main.rs}}
+```
+
+<span class="caption">Listing 3-4: Looping through each element of a collection
+using a `while` loop</span>
+
+Here, the code counts up through the elements in the array. It starts at index
+`0`, and then loops until it reaches the final index in the array (that is,
+when `index < 5` is no longer true). Running this code will print every element
+in the array:
+
+```console
+{{#include ../listings/ch03-common-programming-concepts/listing-03-04/output.txt}}
+```
+
+All five array values appear in the terminal, as expected. Even though `index`
+will reach a value of `5` at some point, the loop stops executing before trying
+to fetch a sixth value from the array.
+
+However, this approach is error prone; we could cause the program to panic if
+the index value or test condition are incorrect. For example, if you changed
+the definition of the `a` array to have four elements but forgot to update the
+condition to `while index < 4`, the code would panic. It’s also slow, because
+the compiler adds runtime code to perform the conditional check of whether the
+index is within the bounds of the array on every iteration through the loop.
+
+As a more concise alternative, you can use a `for` loop and execute some code
+for each item in a collection. A `for` loop looks like the code in Listing 3-5.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/listing-03-05/src/main.rs}}
+```
+
+<span class="caption">Listing 3-5: Looping through each element of a collection
+using a `for` loop</span>
+
+When we run this code, we’ll see the same output as in Listing 3-4. More
+importantly, we’ve now increased the safety of the code and eliminated the
+chance of bugs that might result from going beyond the end of the array or not
+going far enough and missing some items.
+
+Using the `for` loop, you wouldn’t need to remember to change any other code if
+you changed the number of values in the array, as you would with the method
+used in Listing 3-4.
+
+The safety and conciseness of `for` loops make them the most commonly used loop
+construct in Rust. Even in situations in which you want to run some code a
+certain number of times, as in the countdown example that used a `while` loop
+in Listing 3-3, most Rustaceans would use a `for` loop. The way to do that
+would be to use a `Range`, provided by the standard library, which generates
+all numbers in sequence starting from one number and ending before another
+number.
+
+Here’s what the countdown would look like using a `for` loop and another method
+we’ve not yet talked about, `rev`, to reverse the range:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch03-common-programming-concepts/no-listing-34-for-range/src/main.rs}}
+```
+
+This code is a bit nicer, isn’t it?
+
+## Summary
+
+You made it! That was a sizable chapter: you learned about variables, scalar
+and compound data types, functions, comments, `if` expressions, and loops!
+To practice with the concepts discussed in this chapter, try building
+programs to do the following:
+
+* Convert temperatures between Fahrenheit and Celsius.
+* Generate the nth Fibonacci number.
+* Print the lyrics to the Christmas carol “The Twelve Days of Christmas,”
+ taking advantage of the repetition in the song.
+
+When you’re ready to move on, we’ll talk about a concept in Rust that *doesn’t*
+commonly exist in other programming languages: ownership.
+
+[comparing-the-guess-to-the-secret-number]:
+ch02-00-guessing-game-tutorial.html#comparing-the-guess-to-the-secret-number
+[quitting-after-a-correct-guess]:
+ch02-00-guessing-game-tutorial.html#quitting-after-a-correct-guess
diff --git a/src/doc/book/src/ch04-00-understanding-ownership.md b/src/doc/book/src/ch04-00-understanding-ownership.md
new file mode 100644
index 000000000..52eda6a12
--- /dev/null
+++ b/src/doc/book/src/ch04-00-understanding-ownership.md
@@ -0,0 +1,7 @@
+# Understanding Ownership
+
+Ownership is Rust’s most unique feature and has deep implications for the rest
+of the language. It enables Rust to make memory safety guarantees without
+needing a garbage collector, so it’s important to understand how ownership
+works. In this chapter, we’ll talk about ownership as well as several related
+features: borrowing, slices, and how Rust lays data out in memory.
diff --git a/src/doc/book/src/ch04-01-what-is-ownership.md b/src/doc/book/src/ch04-01-what-is-ownership.md
new file mode 100644
index 000000000..94842e1b0
--- /dev/null
+++ b/src/doc/book/src/ch04-01-what-is-ownership.md
@@ -0,0 +1,474 @@
+## What Is Ownership?
+
+*Ownership* is a set of rules that governs how a Rust program manages memory.
+All programs have to manage the way they use a computer’s memory while running.
+Some languages have garbage collection that regularly looks for no-longer used
+memory as the program runs; in other languages, the programmer must explicitly
+allocate and free the memory. Rust uses a third approach: memory is managed
+through a system of ownership with a set of rules that the compiler checks. If
+any of the rules are violated, the program won’t compile. None of the features
+of ownership will slow down your program while it’s running.
+
+Because ownership is a new concept for many programmers, it does take some time
+to get used to. The good news is that the more experienced you become with Rust
+and the rules of the ownership system, the easier you’ll find it to naturally
+develop code that is safe and efficient. Keep at it!
+
+When you understand ownership, you’ll have a solid foundation for understanding
+the features that make Rust unique. In this chapter, you’ll learn ownership by
+working through some examples that focus on a very common data structure:
+strings.
+
+> ### The Stack and the Heap
+>
+> Many programming languages don’t require you to think about the stack and the
+> heap very often. But in a systems programming language like Rust, whether a
+> value is on the stack or the heap affects how the language behaves and why
+> you have to make certain decisions. Parts of ownership will be described in
+> relation to the stack and the heap later in this chapter, so here is a brief
+> explanation in preparation.
+>
+> Both the stack and the heap are parts of memory available to your code to use
+> at runtime, but they are structured in different ways. The stack stores
+> values in the order it gets them and removes the values in the opposite
+> order. This is referred to as *last in, first out*. Think of a stack of
+> plates: when you add more plates, you put them on top of the pile, and when
+> you need a plate, you take one off the top. Adding or removing plates from
+> the middle or bottom wouldn’t work as well! Adding data is called *pushing
+> onto the stack*, and removing data is called *popping off the stack*. All
+> data stored on the stack must have a known, fixed size. Data with an unknown
+> size at compile time or a size that might change must be stored on the heap
+> instead.
+>
+> The heap is less organized: when you put data on the heap, you request a
+> certain amount of space. The memory allocator finds an empty spot in the heap
+> that is big enough, marks it as being in use, and returns a *pointer*, which
+> is the address of that location. This process is called *allocating on the
+> heap* and is sometimes abbreviated as just *allocating* (pushing values onto
+> the stack is not considered allocating). Because the pointer to the heap is a
+> known, fixed size, you can store the pointer on the stack, but when you want
+> the actual data, you must follow the pointer. Think of being seated at a
+> restaurant. When you enter, you state the number of people in your group, and
+> the staff finds an empty table that fits everyone and leads you there. If
+> someone in your group comes late, they can ask where you’ve been seated to
+> find you.
+>
+> Pushing to the stack is faster than allocating on the heap because the
+> allocator never has to search for a place to store new data; that location is
+> always at the top of the stack. Comparatively, allocating space on the heap
+> requires more work, because the allocator must first find a big enough space
+> to hold the data and then perform bookkeeping to prepare for the next
+> allocation.
+>
+> Accessing data in the heap is slower than accessing data on the stack because
+> you have to follow a pointer to get there. Contemporary processors are faster
+> if they jump around less in memory. Continuing the analogy, consider a server
+> at a restaurant taking orders from many tables. It’s most efficient to get
+> all the orders at one table before moving on to the next table. Taking an
+> order from table A, then an order from table B, then one from A again, and
+> then one from B again would be a much slower process. By the same token, a
+> processor can do its job better if it works on data that’s close to other
+> data (as it is on the stack) rather than farther away (as it can be on the
+> heap).
+>
+> When your code calls a function, the values passed into the function
+> (including, potentially, pointers to data on the heap) and the function’s
+> local variables get pushed onto the stack. When the function is over, those
+> values get popped off the stack.
+>
+> Keeping track of what parts of code are using what data on the heap,
+> minimizing the amount of duplicate data on the heap, and cleaning up unused
+> data on the heap so you don’t run out of space are all problems that ownership
+> addresses. Once you understand ownership, you won’t need to think about the
+> stack and the heap very often, but knowing that the main purpose of ownership
+> is to manage heap data can help explain why it works the way it does.
+
+### Ownership Rules
+
+First, let’s take a look at the ownership rules. Keep these rules in mind as we
+work through the examples that illustrate them:
+
+* Each value in Rust has an *owner*.
+* There can only be one owner at a time.
+* When the owner goes out of scope, the value will be dropped.
+
+### Variable Scope
+
+Now that we’re past basic Rust syntax, we won’t include all the `fn main() {`
+code in examples, so if you’re following along, make sure to put the following
+examples inside a `main` function manually. As a result, our examples will be a
+bit more concise, letting us focus on the actual details rather than
+boilerplate code.
+
+As a first example of ownership, we’ll look at the *scope* of some variables. A
+scope is the range within a program for which an item is valid. Take the
+following variable:
+
+```rust
+let s = "hello";
+```
+
+The variable `s` refers to a string literal, where the value of the string is
+hardcoded into the text of our program. The variable is valid from the point at
+which it’s declared until the end of the current *scope*. Listing 4-1 shows a
+program with comments annotating where the variable `s` would be valid.
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-01/src/main.rs:here}}
+```
+
+<span class="caption">Listing 4-1: A variable and the scope in which it is
+valid</span>
+
+In other words, there are two important points in time here:
+
+* When `s` comes *into scope*, it is valid.
+* It remains valid until it goes *out of scope*.
+
+At this point, the relationship between scopes and when variables are valid is
+similar to that in other programming languages. Now we’ll build on top of this
+understanding by introducing the `String` type.
+
+### The `String` Type
+
+To illustrate the rules of ownership, we need a data type that is more complex
+than those we covered in the [“Data Types”][data-types]<!-- ignore --> section
+of Chapter 3. The types covered previously are all a known size, can be stored
+on the stack and popped off the stack when their scope is over, and can be
+quickly and trivially copied to make a new, independent instance if another
+part of code needs to use the same value in a different scope. But we want to
+look at data that is stored on the heap and explore how Rust knows when to
+clean up that data, and the `String` type is a great example.
+
+We’ll concentrate on the parts of `String` that relate to ownership. These
+aspects also apply to other complex data types, whether they are provided by
+the standard library or created by you. We’ll discuss `String` in more depth in
+[Chapter 8][ch8]<!-- ignore -->.
+
+We’ve already seen string literals, where a string value is hardcoded into our
+program. String literals are convenient, but they aren’t suitable for every
+situation in which we may want to use text. One reason is that they’re
+immutable. Another is that not every string value can be known when we write
+our code: for example, what if we want to take user input and store it? For
+these situations, Rust has a second string type, `String`. This type manages
+data allocated on the heap and as such is able to store an amount of text that
+is unknown to us at compile time. You can create a `String` from a string
+literal using the `from` function, like so:
+
+```rust
+let s = String::from("hello");
+```
+
+The double colon `::` operator allows us to namespace this particular `from`
+function under the `String` type rather than using some sort of name like
+`string_from`. We’ll discuss this syntax more in the [“Method
+Syntax”][method-syntax]<!-- ignore --> section of Chapter 5 and when we talk
+about namespacing with modules in [“Paths for Referring to an Item in the
+Module Tree”][paths-module-tree]<!-- ignore --> in Chapter 7.
+
+This kind of string *can* be mutated:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-01-can-mutate-string/src/main.rs:here}}
+```
+
+So, what’s the difference here? Why can `String` be mutated but literals
+cannot? The difference is how these two types deal with memory.
+
+### Memory and Allocation
+
+In the case of a string literal, we know the contents at compile time, so the
+text is hardcoded directly into the final executable. This is why string
+literals are fast and efficient. But these properties only come from the string
+literal’s immutability. Unfortunately, we can’t put a blob of memory into the
+binary for each piece of text whose size is unknown at compile time and whose
+size might change while running the program.
+
+With the `String` type, in order to support a mutable, growable piece of text,
+we need to allocate an amount of memory on the heap, unknown at compile time,
+to hold the contents. This means:
+
+* The memory must be requested from the memory allocator at runtime.
+* We need a way of returning this memory to the allocator when we’re
+ done with our `String`.
+
+That first part is done by us: when we call `String::from`, its implementation
+requests the memory it needs. This is pretty much universal in programming
+languages.
+
+However, the second part is different. In languages with a *garbage collector
+(GC)*, the GC keeps track of and cleans up memory that isn’t being used
+anymore, and we don’t need to think about it. In most languages without a GC,
+it’s our responsibility to identify when memory is no longer being used and
+call code to explicitly free it, just as we did to request it. Doing this
+correctly has historically been a difficult programming problem. If we forget,
+we’ll waste memory. If we do it too early, we’ll have an invalid variable. If
+we do it twice, that’s a bug too. We need to pair exactly one `allocate` with
+exactly one `free`.
+
+Rust takes a different path: the memory is automatically returned once the
+variable that owns it goes out of scope. Here’s a version of our scope example
+from Listing 4-1 using a `String` instead of a string literal:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-02-string-scope/src/main.rs:here}}
+```
+
+There is a natural point at which we can return the memory our `String` needs
+to the allocator: when `s` goes out of scope. When a variable goes out of
+scope, Rust calls a special function for us. This function is called
+[`drop`][drop]<!-- ignore -->, and it’s where the author of `String` can put
+the code to return the memory. Rust calls `drop` automatically at the closing
+curly bracket.
+
+> Note: In C++, this pattern of deallocating resources at the end of an item’s
+> lifetime is sometimes called *Resource Acquisition Is Initialization (RAII)*.
+> The `drop` function in Rust will be familiar to you if you’ve used RAII
+> patterns.
+
+This pattern has a profound impact on the way Rust code is written. It may seem
+simple right now, but the behavior of code can be unexpected in more
+complicated situations when we want to have multiple variables use the data
+we’ve allocated on the heap. Let’s explore some of those situations now.
+
+#### Ways Variables and Data Interact: Move
+
+Multiple variables can interact with the same data in different ways in Rust.
+Let’s look at an example using an integer in Listing 4-2.
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 4-2: Assigning the integer value of variable `x`
+to `y`</span>
+
+We can probably guess what this is doing: “bind the value `5` to `x`; then make
+a copy of the value in `x` and bind it to `y`.” We now have two variables, `x`
+and `y`, and both equal `5`. This is indeed what is happening, because integers
+are simple values with a known, fixed size, and these two `5` values are pushed
+onto the stack.
+
+Now let’s look at the `String` version:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-03-string-move/src/main.rs:here}}
+```
+
+This looks very similar, so we might assume that the way it works would be the
+same: that is, the second line would make a copy of the value in `s1` and bind
+it to `s2`. But this isn’t quite what happens.
+
+Take a look at Figure 4-1 to see what is happening to `String` under the
+covers. A `String` is made up of three parts, shown on the left: a pointer to
+the memory that holds the contents of the string, a length, and a capacity.
+This group of data is stored on the stack. On the right is the memory on the
+heap that holds the contents.
+
+<img alt="String in memory" src="img/trpl04-01.svg" class="center" style="width: 50%;" />
+
+<span class="caption">Figure 4-1: Representation in memory of a `String`
+holding the value `"hello"` bound to `s1`</span>
+
+The length is how much memory, in bytes, the contents of the `String` is
+currently using. The capacity is the total amount of memory, in bytes, that the
+`String` has received from the allocator. The difference between length
+and capacity matters, but not in this context, so for now, it’s fine to ignore
+the capacity.
+
+When we assign `s1` to `s2`, the `String` data is copied, meaning we copy the
+pointer, the length, and the capacity that are on the stack. We do not copy the
+data on the heap that the pointer refers to. In other words, the data
+representation in memory looks like Figure 4-2.
+
+<img alt="s1 and s2 pointing to the same value" src="img/trpl04-02.svg" class="center" style="width: 50%;" />
+
+<span class="caption">Figure 4-2: Representation in memory of the variable `s2`
+that has a copy of the pointer, length, and capacity of `s1`</span>
+
+The representation does *not* look like Figure 4-3, which is what memory would
+look like if Rust instead copied the heap data as well. If Rust did this, the
+operation `s2 = s1` could be very expensive in terms of runtime performance if
+the data on the heap were large.
+
+<img alt="s1 and s2 to two places" src="img/trpl04-03.svg" class="center" style="width: 50%;" />
+
+<span class="caption">Figure 4-3: Another possibility for what `s2 = s1` might
+do if Rust copied the heap data as well</span>
+
+Earlier, we said that when a variable goes out of scope, Rust automatically
+calls the `drop` function and cleans up the heap memory for that variable. But
+Figure 4-2 shows both data pointers pointing to the same location. This is a
+problem: when `s2` and `s1` go out of scope, they will both try to free the
+same memory. This is known as a *double free* error and is one of the memory
+safety bugs we mentioned previously. Freeing memory twice can lead to memory
+corruption, which can potentially lead to security vulnerabilities.
+
+To ensure memory safety, after the line `let s2 = s1`, Rust considers `s1` as
+no longer valid. Therefore, Rust doesn’t need to free anything when `s1` goes
+out of scope. Check out what happens when you try to use `s1` after `s2` is
+created; it won’t work:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/src/main.rs:here}}
+```
+
+You’ll get an error like this because Rust prevents you from using the
+invalidated reference:
+
+```console
+{{#include ../listings/ch04-understanding-ownership/no-listing-04-cant-use-after-move/output.txt}}
+```
+
+If you’ve heard the terms *shallow copy* and *deep copy* while working with
+other languages, the concept of copying the pointer, length, and capacity
+without copying the data probably sounds like making a shallow copy. But
+because Rust also invalidates the first variable, instead of calling it a
+shallow copy, it’s known as a *move*. In this example, we would say that
+`s1` was *moved* into `s2`. So what actually happens is shown in Figure 4-4.
+
+<img alt="s1 moved to s2" src="img/trpl04-04.svg" class="center" style="width: 50%;" />
+
+<span class="caption">Figure 4-4: Representation in memory after `s1` has been
+invalidated</span>
+
+That solves our problem! With only `s2` valid, when it goes out of scope, it
+alone will free the memory, and we’re done.
+
+In addition, there’s a design choice that’s implied by this: Rust will never
+automatically create “deep” copies of your data. Therefore, any *automatic*
+copying can be assumed to be inexpensive in terms of runtime performance.
+
+#### Ways Variables and Data Interact: Clone
+
+If we *do* want to deeply copy the heap data of the `String`, not just the
+stack data, we can use a common method called `clone`. We’ll discuss method
+syntax in Chapter 5, but because methods are a common feature in many
+programming languages, you’ve probably seen them before.
+
+Here’s an example of the `clone` method in action:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-05-clone/src/main.rs:here}}
+```
+
+This works just fine and explicitly produces the behavior shown in Figure 4-3,
+where the heap data *does* get copied.
+
+When you see a call to `clone`, you know that some arbitrary code is being
+executed and that code may be expensive. It’s a visual indicator that something
+different is going on.
+
+#### Stack-Only Data: Copy
+
+There’s another wrinkle we haven’t talked about yet. This code using integers –
+part of which was shown in Listing 4-2 – works and is valid:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-06-copy/src/main.rs:here}}
+```
+
+But this code seems to contradict what we just learned: we don’t have a call to
+`clone`, but `x` is still valid and wasn’t moved into `y`.
+
+The reason is that types such as integers that have a known size at compile
+time are stored entirely on the stack, so copies of the actual values are quick
+to make. That means there’s no reason we would want to prevent `x` from being
+valid after we create the variable `y`. In other words, there’s no difference
+between deep and shallow copying here, so calling `clone` wouldn’t do anything
+different from the usual shallow copying and we can leave it out.
+
+Rust has a special annotation called the `Copy` trait that we can place on
+types that are stored on the stack, as integers are (we’ll talk more about
+traits in [Chapter 10][traits]<!-- ignore -->). If a type implements the `Copy`
+trait, variables that use it do not move, but rather are trivially copied,
+making them still valid after assignment to another variable.
+
+Rust won’t let us annotate a type with `Copy` if the type, or any of its parts,
+has implemented the `Drop` trait. If the type needs something special to happen
+when the value goes out of scope and we add the `Copy` annotation to that type,
+we’ll get a compile-time error. To learn about how to add the `Copy` annotation
+to your type to implement the trait, see [“Derivable
+Traits”][derivable-traits]<!-- ignore --> in Appendix C.
+
+So what types implement the `Copy` trait? You can check the documentation for
+the given type to be sure, but as a general rule, any group of simple scalar
+values can implement `Copy`, and nothing that requires allocation or is some
+form of resource can implement `Copy`. Here are some of the types that
+implement `Copy`:
+
+* All the integer types, such as `u32`.
+* The Boolean type, `bool`, with values `true` and `false`.
+* All the floating point types, such as `f64`.
+* The character type, `char`.
+* Tuples, if they only contain types that also implement `Copy`. For example,
+ `(i32, i32)` implements `Copy`, but `(i32, String)` does not.
+
+### Ownership and Functions
+
+The mechanics of passing a value to a function are similar to those when
+assigning a value to a variable. Passing a variable to a function will move or
+copy, just as assignment does. Listing 4-3 has an example with some annotations
+showing where variables go into and out of scope.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-03/src/main.rs}}
+```
+
+<span class="caption">Listing 4-3: Functions with ownership and scope
+annotated</span>
+
+If we tried to use `s` after the call to `takes_ownership`, Rust would throw a
+compile-time error. These static checks protect us from mistakes. Try adding
+code to `main` that uses `s` and `x` to see where you can use them and where
+the ownership rules prevent you from doing so.
+
+### Return Values and Scope
+
+Returning values can also transfer ownership. Listing 4-4 shows an example
+of a function that returns some value, with similar annotations as those in
+Listing 4-3.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-04/src/main.rs}}
+```
+
+<span class="caption">Listing 4-4: Transferring ownership of return
+values</span>
+
+The ownership of a variable follows the same pattern every time: assigning a
+value to another variable moves it. When a variable that includes data on the
+heap goes out of scope, the value will be cleaned up by `drop` unless ownership
+of the data has been moved to another variable.
+
+While this works, taking ownership and then returning ownership with every
+function is a bit tedious. What if we want to let a function use a value but
+not take ownership? It’s quite annoying that anything we pass in also needs to
+be passed back if we want to use it again, in addition to any data resulting
+from the body of the function that we might want to return as well.
+
+Rust does let us return multiple values using a tuple, as shown in Listing 4-5.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-05/src/main.rs}}
+```
+
+<span class="caption">Listing 4-5: Returning ownership of parameters</span>
+
+But this is too much ceremony and a lot of work for a concept that should be
+common. Luckily for us, Rust has a feature for using a value without
+transferring ownership, called *references*.
+
+[data-types]: ch03-02-data-types.html#data-types
+[ch8]: ch08-02-strings.html
+[traits]: ch10-02-traits.html
+[derivable-traits]: appendix-03-derivable-traits.html
+[method-syntax]: ch05-03-method-syntax.html#method-syntax
+[paths-module-tree]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html
+[drop]: ../std/ops/trait.Drop.html#tymethod.drop
diff --git a/src/doc/book/src/ch04-02-references-and-borrowing.md b/src/doc/book/src/ch04-02-references-and-borrowing.md
new file mode 100644
index 000000000..060c344bb
--- /dev/null
+++ b/src/doc/book/src/ch04-02-references-and-borrowing.md
@@ -0,0 +1,255 @@
+## References and Borrowing
+
+The issue with the tuple code in Listing 4-5 is that we have to return the
+`String` to the calling function so we can still use the `String` after the
+call to `calculate_length`, because the `String` was moved into
+`calculate_length`. Instead, we can provide a reference to the `String` value.
+A *reference* is like a pointer in that it’s an address we can follow to access
+the data stored at that address; that data is owned by some other variable.
+Unlike a pointer, a reference is guaranteed to point to a valid value of a
+particular type for the life of that reference.
+
+Here is how you would define and use a `calculate_length` function that
+has a reference to an object as a parameter instead of taking ownership of the
+value:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs:all}}
+```
+
+First, notice that all the tuple code in the variable declaration and the
+function return value is gone. Second, note that we pass `&s1` into
+`calculate_length` and, in its definition, we take `&String` rather than
+`String`. These ampersands represent *references*, and they allow you to refer
+to some value without taking ownership of it. Figure 4-5 depicts this concept.
+
+<img alt="&amp;String s pointing at String s1" src="img/trpl04-05.svg" class="center" />
+
+<span class="caption">Figure 4-5: A diagram of `&String s` pointing at `String
+s1`</span>
+
+> Note: The opposite of referencing by using `&` is *dereferencing*, which is
+> accomplished with the dereference operator, `*`. We’ll see some uses of the
+> dereference operator in Chapter 8 and discuss details of dereferencing in
+> Chapter 15.
+
+Let’s take a closer look at the function call here:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-07-reference/src/main.rs:here}}
+```
+
+The `&s1` syntax lets us create a reference that *refers* to the value of `s1`
+but does not own it. Because it does not own it, the value it points to will
+not be dropped when the reference stops being used.
+
+Likewise, the signature of the function uses `&` to indicate that the type of
+the parameter `s` is a reference. Let’s add some explanatory annotations:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-08-reference-with-annotations/src/main.rs:here}}
+```
+
+The scope in which the variable `s` is valid is the same as any function
+parameter’s scope, but the value pointed to by the reference is not dropped
+when `s` stops being used because `s` doesn’t have ownership. When functions
+have references as parameters instead of the actual values, we won’t need to
+return the values in order to give back ownership, because we never had
+ownership.
+
+We call the action of creating a reference *borrowing*. As in real life, if a
+person owns something, you can borrow it from them. When you’re done, you have
+to give it back. You don’t own it.
+
+So what happens if we try to modify something we’re borrowing? Try the code in
+Listing 4-6. Spoiler alert: it doesn’t work!
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-06/src/main.rs}}
+```
+
+<span class="caption">Listing 4-6: Attempting to modify a borrowed value</span>
+
+Here’s the error:
+
+```console
+{{#include ../listings/ch04-understanding-ownership/listing-04-06/output.txt}}
+```
+
+Just as variables are immutable by default, so are references. We’re not
+allowed to modify something we have a reference to.
+
+### Mutable References
+
+We can fix the code from Listing 4-6 to allow us to modify a borrowed value
+with just a few small tweaks that use, instead, a *mutable reference*:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-09-fixes-listing-04-06/src/main.rs}}
+```
+
+First, we change `s` to be `mut`. Then we create a mutable reference with `&mut
+s` where we call the `change` function, and update the function signature to
+accept a mutable reference with `some_string: &mut String`. This makes it very
+clear that the `change` function will mutate the value it borrows.
+
+Mutable references have one big restriction: if you have a mutable reference to
+a value, you can have no other references to that value. This code that
+attempts to create two mutable references to `s` will fail:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/src/main.rs:here}}
+```
+
+Here’s the error:
+
+```console
+{{#include ../listings/ch04-understanding-ownership/no-listing-10-multiple-mut-not-allowed/output.txt}}
+```
+
+This error says that this code is invalid because we cannot borrow `s` as
+mutable more than once at a time. The first mutable borrow is in `r1` and must
+last until it’s used in the `println!`, but between the creation of that
+mutable reference and its usage, we tried to create another mutable reference
+in `r2` that borrows the same data as `r1`.
+
+The restriction preventing multiple mutable references to the same data at the
+same time allows for mutation but in a very controlled fashion. It’s something
+that new Rustaceans struggle with, because most languages let you mutate
+whenever you’d like. The benefit of having this restriction is that Rust can
+prevent data races at compile time. A *data race* is similar to a race
+condition and happens when these three behaviors occur:
+
+* Two or more pointers access the same data at the same time.
+* At least one of the pointers is being used to write to the data.
+* There’s no mechanism being used to synchronize access to the data.
+
+Data races cause undefined behavior and can be difficult to diagnose and fix
+when you’re trying to track them down at runtime; Rust prevents this problem
+by refusing to compile code with data races!
+
+As always, we can use curly brackets to create a new scope, allowing for
+multiple mutable references, just not *simultaneous* ones:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-11-muts-in-separate-scopes/src/main.rs:here}}
+```
+
+Rust enforces a similar rule for combining mutable and immutable references.
+This code results in an error:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/src/main.rs:here}}
+```
+
+Here’s the error:
+
+```console
+{{#include ../listings/ch04-understanding-ownership/no-listing-12-immutable-and-mutable-not-allowed/output.txt}}
+```
+
+Whew! We *also* cannot have a mutable reference while we have an immutable one
+to the same value.
+
+Users of an immutable reference don’t expect the value to suddenly change out
+from under them! However, multiple immutable references are allowed because no
+one who is just reading the data has the ability to affect anyone else’s
+reading of the data.
+
+Note that a reference’s scope starts from where it is introduced and continues
+through the last time that reference is used. For instance, this code will
+compile because the last usage of the immutable references, the `println!`,
+occurs before the mutable reference is introduced:
+
+```rust,edition2021
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-13-reference-scope-ends/src/main.rs:here}}
+```
+
+The scopes of the immutable references `r1` and `r2` end after the `println!`
+where they are last used, which is before the mutable reference `r3` is
+created. These scopes don’t overlap, so this code is allowed. The ability of
+the compiler to tell that a reference is no longer being used at a point before
+the end of the scope is called *Non-Lexical Lifetimes* (NLL for short), and you
+can read more about it in [The Edition Guide][nll].
+
+Even though borrowing errors may be frustrating at times, remember that it’s
+the Rust compiler pointing out a potential bug early (at compile time rather
+than at runtime) and showing you exactly where the problem is. Then you don’t
+have to track down why your data isn’t what you thought it was.
+
+### Dangling References
+
+In languages with pointers, it’s easy to erroneously create a *dangling
+pointer*--a pointer that references a location in memory that may have been
+given to someone else--by freeing some memory while preserving a pointer to
+that memory. In Rust, by contrast, the compiler guarantees that references will
+never be dangling references: if you have a reference to some data, the
+compiler will ensure that the data will not go out of scope before the
+reference to the data does.
+
+Let’s try to create a dangling reference to see how Rust prevents them with a
+compile-time error:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-14-dangling-reference/src/main.rs}}
+```
+
+Here’s the error:
+
+```console
+{{#include ../listings/ch04-understanding-ownership/no-listing-14-dangling-reference/output.txt}}
+```
+
+This error message refers to a feature we haven’t covered yet: lifetimes. We’ll
+discuss lifetimes in detail in Chapter 10. But, if you disregard the parts
+about lifetimes, the message does contain the key to why this code is a problem:
+
+```text
+this function's return type contains a borrowed value, but there is no value
+for it to be borrowed from
+```
+
+Let’s take a closer look at exactly what’s happening at each stage of our
+`dangle` code:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-15-dangling-reference-annotated/src/main.rs:here}}
+```
+
+Because `s` is created inside `dangle`, when the code of `dangle` is finished,
+`s` will be deallocated. But we tried to return a reference to it. That means
+this reference would be pointing to an invalid `String`. That’s no good! Rust
+won’t let us do this.
+
+The solution here is to return the `String` directly:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-16-no-dangle/src/main.rs:here}}
+```
+
+This works without any problems. Ownership is moved out, and nothing is
+deallocated.
+
+### The Rules of References
+
+Let’s recap what we’ve discussed about references:
+
+* At any given time, you can have *either* one mutable reference *or* any
+ number of immutable references.
+* References must always be valid.
+
+Next, we’ll look at a different kind of reference: slices.
+
+[nll]: https://doc.rust-lang.org/edition-guide/rust-2018/ownership-and-lifetimes/non-lexical-lifetimes.html
diff --git a/src/doc/book/src/ch04-03-slices.md b/src/doc/book/src/ch04-03-slices.md
new file mode 100644
index 000000000..afb6f76b1
--- /dev/null
+++ b/src/doc/book/src/ch04-03-slices.md
@@ -0,0 +1,314 @@
+## The Slice Type
+
+*Slices* let you reference a contiguous sequence of elements in a collection
+rather than the whole collection. A slice is a kind of reference, so it does
+not have ownership.
+
+Here’s a small programming problem: write a function that takes a string of
+words separated by spaces and returns the first word it finds in that string.
+If the function doesn’t find a space in the string, the whole string must be
+one word, so the entire string should be returned.
+
+Let’s work through how we’d write the signature of this function without using
+slices, to understand the problem that slices will solve:
+
+```rust,ignore
+fn first_word(s: &String) -> ?
+```
+
+The `first_word` function has a `&String` as a parameter. We don’t want
+ownership, so this is fine. But what should we return? We don’t really have a
+way to talk about *part* of a string. However, we could return the index of the
+end of the word, indicated by a space. Let’s try that, as shown in Listing 4-7.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 4-7: The `first_word` function that returns a
+byte index value into the `String` parameter</span>
+
+Because we need to go through the `String` element by element and check whether
+a value is a space, we’ll convert our `String` to an array of bytes using the
+`as_bytes` method:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-07/src/main.rs:as_bytes}}
+```
+
+Next, we create an iterator over the array of bytes using the `iter` method:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-07/src/main.rs:iter}}
+```
+
+We’ll discuss iterators in more detail in [Chapter 13][ch13]<!-- ignore -->.
+For now, know that `iter` is a method that returns each element in a collection
+and that `enumerate` wraps the result of `iter` and returns each element as
+part of a tuple instead. The first element of the tuple returned from
+`enumerate` is the index, and the second element is a reference to the element.
+This is a bit more convenient than calculating the index ourselves.
+
+Because the `enumerate` method returns a tuple, we can use patterns to
+destructure that tuple. We’ll be discussing patterns more in [Chapter
+6][ch6]<!-- ignore -->. In the `for` loop, we specify a pattern that has `i`
+for the index in the tuple and `&item` for the single byte in the tuple.
+Because we get a reference to the element from `.iter().enumerate()`, we use
+`&` in the pattern.
+
+Inside the `for` loop, we search for the byte that represents the space by
+using the byte literal syntax. If we find a space, we return the position.
+Otherwise, we return the length of the string by using `s.len()`:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-07/src/main.rs:inside_for}}
+```
+
+We now have a way to find out the index of the end of the first word in the
+string, but there’s a problem. We’re returning a `usize` on its own, but it’s
+only a meaningful number in the context of the `&String`. In other words,
+because it’s a separate value from the `String`, there’s no guarantee that it
+will still be valid in the future. Consider the program in Listing 4-8 that
+uses the `first_word` function from Listing 4-7.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 4-8: Storing the result from calling the
+`first_word` function and then changing the `String` contents</span>
+
+This program compiles without any errors and would also do so if we used `word`
+after calling `s.clear()`. Because `word` isn’t connected to the state of `s`
+at all, `word` still contains the value `5`. We could use that value `5` with
+the variable `s` to try to extract the first word out, but this would be a bug
+because the contents of `s` have changed since we saved `5` in `word`.
+
+Having to worry about the index in `word` getting out of sync with the data in
+`s` is tedious and error prone! Managing these indices is even more brittle if
+we write a `second_word` function. Its signature would have to look like this:
+
+```rust,ignore
+fn second_word(s: &String) -> (usize, usize) {
+```
+
+Now we’re tracking a starting *and* an ending index, and we have even more
+values that were calculated from data in a particular state but aren’t tied to
+that state at all. We have three unrelated variables floating around that
+need to be kept in sync.
+
+Luckily, Rust has a solution to this problem: string slices.
+
+### String Slices
+
+A *string slice* is a reference to part of a `String`, and it looks like this:
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-17-slice/src/main.rs:here}}
+```
+
+Rather than a reference to the entire `String`, `hello` is a reference to a
+portion of the `String`, specified in the extra `[0..5]` bit. We create slices
+using a range within brackets by specifying `[starting_index..ending_index]`,
+where `starting_index` is the first position in the slice and `ending_index` is
+one more than the last position in the slice. Internally, the slice data
+structure stores the starting position and the length of the slice, which
+corresponds to `ending_index` minus `starting_index`. So in the case of `let
+world = &s[6..11];`, `world` would be a slice that contains a pointer to the
+byte at index 6 of `s` with a length value of 5.
+
+Figure 4-6 shows this in a diagram.
+
+<img alt="world containing a pointer to the byte at index 6 of String s and a length 5" src="img/trpl04-06.svg" class="center" style="width: 50%;" />
+
+<span class="caption">Figure 4-6: String slice referring to part of a
+`String`</span>
+
+With Rust’s `..` range syntax, if you want to start at index zero, you can drop
+the value before the two periods. In other words, these are equal:
+
+```rust
+let s = String::from("hello");
+
+let slice = &s[0..2];
+let slice = &s[..2];
+```
+
+By the same token, if your slice includes the last byte of the `String`, you
+can drop the trailing number. That means these are equal:
+
+```rust
+let s = String::from("hello");
+
+let len = s.len();
+
+let slice = &s[3..len];
+let slice = &s[3..];
+```
+
+You can also drop both values to take a slice of the entire string. So these
+are equal:
+
+```rust
+let s = String::from("hello");
+
+let len = s.len();
+
+let slice = &s[0..len];
+let slice = &s[..];
+```
+
+> Note: String slice range indices must occur at valid UTF-8 character
+> boundaries. If you attempt to create a string slice in the middle of a
+> multibyte character, your program will exit with an error. For the purposes
+> of introducing string slices, we are assuming ASCII only in this section; a
+> more thorough discussion of UTF-8 handling is in the [“Storing UTF-8 Encoded
+> Text with Strings”][strings]<!-- ignore --> section of Chapter 8.
+
+With all this information in mind, let’s rewrite `first_word` to return a
+slice. The type that signifies “string slice” is written as `&str`:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-18-first-word-slice/src/main.rs:here}}
+```
+
+We get the index for the end of the word in the same way as we did in Listing
+4-7, by looking for the first occurrence of a space. When we find a space, we
+return a string slice using the start of the string and the index of the space
+as the starting and ending indices.
+
+Now when we call `first_word`, we get back a single value that is tied to the
+underlying data. The value is made up of a reference to the starting point of
+the slice and the number of elements in the slice.
+
+Returning a slice would also work for a `second_word` function:
+
+```rust,ignore
+fn second_word(s: &String) -> &str {
+```
+
+We now have a straightforward API that’s much harder to mess up, because the
+compiler will ensure the references into the `String` remain valid. Remember
+the bug in the program in Listing 4-8, when we got the index to the end of the
+first word but then cleared the string so our index was invalid? That code was
+logically incorrect but didn’t show any immediate errors. The problems would
+show up later if we kept trying to use the first word index with an emptied
+string. Slices make this bug impossible and let us know we have a problem with
+our code much sooner. Using the slice version of `first_word` will throw a
+compile-time error:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch04-understanding-ownership/no-listing-19-slice-error/src/main.rs:here}}
+```
+
+Here’s the compiler error:
+
+```console
+{{#include ../listings/ch04-understanding-ownership/no-listing-19-slice-error/output.txt}}
+```
+
+Recall from the borrowing rules that if we have an immutable reference to
+something, we cannot also take a mutable reference. Because `clear` needs to
+truncate the `String`, it needs to get a mutable reference. The `println!`
+after the call to `clear` uses the reference in `word`, so the immutable
+reference must still be active at that point. Rust disallows the mutable
+reference in `clear` and the immutable reference in `word` from existing at the
+same time, and compilation fails. Not only has Rust made our API easier to use,
+but it has also eliminated an entire class of errors at compile time!
+
+#### String Literals Are Slices
+
+Recall that we talked about string literals being stored inside the binary. Now
+that we know about slices, we can properly understand string literals:
+
+```rust
+let s = "Hello, world!";
+```
+
+The type of `s` here is `&str`: it’s a slice pointing to that specific point of
+the binary. This is also why string literals are immutable; `&str` is an
+immutable reference.
+
+#### String Slices as Parameters
+
+Knowing that you can take slices of literals and `String` values leads us to
+one more improvement on `first_word`, and that’s its signature:
+
+```rust,ignore
+fn first_word(s: &String) -> &str {
+```
+
+A more experienced Rustacean would write the signature shown in Listing 4-9
+instead because it allows us to use the same function on both `&String` values
+and `&str` values.
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 4-9: Improving the `first_word` function by using
+a string slice for the type of the `s` parameter</span>
+
+If we have a string slice, we can pass that directly. If we have a `String`, we
+can pass a slice of the `String` or a reference to the `String`. This
+flexibility takes advantage of *deref coercions*, a feature we will cover in
+the [“Implicit Deref Coercions with Functions and
+Methods”][deref-coercions]<!--ignore--> section of Chapter 15. Defining a
+function to take a string slice instead of a reference to a `String` makes our
+API more general and useful without losing any functionality:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch04-understanding-ownership/listing-04-09/src/main.rs:usage}}
+```
+
+### Other Slices
+
+String slices, as you might imagine, are specific to strings. But there’s a
+more general slice type, too. Consider this array:
+
+```rust
+let a = [1, 2, 3, 4, 5];
+```
+
+Just as we might want to refer to a part of a string, we might want to refer
+to part of an array. We’d do so like this:
+
+```rust
+let a = [1, 2, 3, 4, 5];
+
+let slice = &a[1..3];
+
+assert_eq!(slice, &[2, 3]);
+```
+
+This slice has the type `&[i32]`. It works the same way as string slices do, by
+storing a reference to the first element and a length. You’ll use this kind of
+slice for all sorts of other collections. We’ll discuss these collections in
+detail when we talk about vectors in Chapter 8.
+
+## Summary
+
+The concepts of ownership, borrowing, and slices ensure memory safety in Rust
+programs at compile time. The Rust language gives you control over your memory
+usage in the same way as other systems programming languages, but having the
+owner of data automatically clean up that data when the owner goes out of scope
+means you don’t have to write and debug extra code to get this control.
+
+Ownership affects how lots of other parts of Rust work, so we’ll talk about
+these concepts further throughout the rest of the book. Let’s move on to
+Chapter 5 and look at grouping pieces of data together in a `struct`.
+
+[ch13]: ch13-02-iterators.html
+[ch6]: ch06-02-match.html#patterns-that-bind-to-values
+[strings]: ch08-02-strings.html#storing-utf-8-encoded-text-with-strings
+[deref-coercions]: ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods
diff --git a/src/doc/book/src/ch05-00-structs.md b/src/doc/book/src/ch05-00-structs.md
new file mode 100644
index 000000000..ff540b77d
--- /dev/null
+++ b/src/doc/book/src/ch05-00-structs.md
@@ -0,0 +1,14 @@
+# Using Structs to Structure Related Data
+
+A *struct*, or *structure*, is a custom data type that lets you package
+together and name multiple related values that make up a meaningful group. If
+you’re familiar with an object-oriented language, a *struct* is like an
+object’s data attributes. In this chapter, we’ll compare and contrast tuples
+with structs to build on what you already know and demonstrate when structs are
+a better way to group data.
+
+We’ll demonstrate how to define and instantiate structs. We’ll discuss how to
+define associated functions, especially the kind of associated functions called
+*methods*, to specify behavior associated with a struct type. Structs and enums
+(discussed in Chapter 6) are the building blocks for creating new types in your
+program’s domain to take full advantage of Rust’s compile time type checking.
diff --git a/src/doc/book/src/ch05-01-defining-structs.md b/src/doc/book/src/ch05-01-defining-structs.md
new file mode 100644
index 000000000..7a50f99a5
--- /dev/null
+++ b/src/doc/book/src/ch05-01-defining-structs.md
@@ -0,0 +1,277 @@
+## Defining and Instantiating Structs
+
+Structs are similar to tuples, discussed in [“The Tuple Type”][tuples]<!--
+ignore --> section, in that both hold multiple related values. Like tuples, the
+pieces of a struct can be different types. Unlike with tuples, in a struct
+you’ll name each piece of data so it’s clear what the values mean. Adding these
+names means that structs are more flexible than tuples: you don’t have to rely
+on the order of the data to specify or access the values of an instance.
+
+To define a struct, we enter the keyword `struct` and name the entire struct. A
+struct’s name should describe the significance of the pieces of data being
+grouped together. Then, inside curly brackets, we define the names and types of
+the pieces of data, which we call *fields*. For example, Listing 5-1 shows a
+struct that stores information about a user account.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-01/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-1: A `User` struct definition</span>
+
+To use a struct after we’ve defined it, we create an *instance* of that struct
+by specifying concrete values for each of the fields. We create an instance by
+stating the name of the struct and then add curly brackets containing `key:
+value` pairs, where the keys are the names of the fields and the values are the
+data we want to store in those fields. We don’t have to specify the fields in
+the same order in which we declared them in the struct. In other words, the
+struct definition is like a general template for the type, and instances fill
+in that template with particular data to create values of the type. For
+example, we can declare a particular user as shown in Listing 5-2.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-2: Creating an instance of the `User`
+struct</span>
+
+To get a specific value from a struct, we use dot notation. For example, to
+access this user’s email address, we use `user1.email`. If the instance is
+mutable, we can change a value by using the dot notation and assigning into a
+particular field. Listing 5-3 shows how to change the value in the `email`
+field of a mutable `User` instance.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-3: Changing the value in the `email` field of a
+`User` instance</span>
+
+Note that the entire instance must be mutable; Rust doesn’t allow us to mark
+only certain fields as mutable. As with any expression, we can construct a new
+instance of the struct as the last expression in the function body to
+implicitly return that new instance.
+
+Listing 5-4 shows a `build_user` function that returns a `User` instance with
+the given email and username. The `active` field gets the value of `true`, and
+the `sign_in_count` gets a value of `1`.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-4: A `build_user` function that takes an email
+and username and returns a `User` instance</span>
+
+It makes sense to name the function parameters with the same name as the struct
+fields, but having to repeat the `email` and `username` field names and
+variables is a bit tedious. If the struct had more fields, repeating each name
+would get even more annoying. Luckily, there’s a convenient shorthand!
+
+<a id="using-the-field-init-shorthand-when-variables-and-fields-have-the-same-name"></a>
+### Using the Field Init Shorthand
+
+Because the parameter names and the struct field names are exactly the same in
+Listing 5-4, we can use the *field init shorthand* syntax to rewrite
+`build_user` so that it behaves exactly the same but doesn’t have the
+repetition of `email` and `username`, as shown in Listing 5-5.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-5: A `build_user` function that uses field init
+shorthand because the `email` and `username` parameters have the same name as
+struct fields</span>
+
+Here, we’re creating a new instance of the `User` struct, which has a field
+named `email`. We want to set the `email` field’s value to the value in the
+`email` parameter of the `build_user` function. Because the `email` field and
+the `email` parameter have the same name, we only need to write `email` rather
+than `email: email`.
+
+### Creating Instances From Other Instances With Struct Update Syntax
+
+It’s often useful to create a new instance of a struct that includes most of
+the values from another instance, but changes some. You can do this using
+*struct update syntax*.
+
+First, in Listing 5-6 we show how to create a new `User` instance in `user2`
+regularly, without the update syntax. We set a new value for `email` but
+otherwise use the same values from `user1` that we created in Listing 5-2.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-6: Creating a new `User` instance using one of
+the values from `user1`</span>
+
+Using struct update syntax, we can achieve the same effect with less code, as
+shown in Listing 5-7. The syntax `..` specifies that the remaining fields not
+explicitly set should have the same value as the fields in the given instance.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-7: Using struct update syntax to set a new
+`email` value for a `User` instance but use the rest of the values from
+`user1`</span>
+
+The code in Listing 5-7 also creates an instance in `user2` that has a
+different value for `email` but has the same values for the `username`,
+`active`, and `sign_in_count` fields from `user1`. The `..user1` must come last
+to specify that any remaining fields should get their values from the
+corresponding fields in `user1`, but we can choose to specify values for as
+many fields as we want in any order, regardless of the order of the fields in
+the struct’s definition.
+
+Note that the struct update syntax uses `=` like an assignment; this is
+because it moves the data, just as we saw in the [“Ways Variables and Data
+Interact: Move”][move]<!-- ignore --> section. In this example, we can no
+longer use `user1` after creating `user2` because the `String` in the
+`username` field of `user1` was moved into `user2`. If we had given `user2` new
+`String` values for both `email` and `username`, and thus only used the
+`active` and `sign_in_count` values from `user1`, then `user1` would still be
+valid after creating `user2`. The types of `active` and `sign_in_count` are
+types that implement the `Copy` trait, so the behavior we discussed in the
+[“Stack-Only Data: Copy”][copy]<!-- ignore --> section would apply.
+
+### Using Tuple Structs without Named Fields to Create Different Types
+
+Rust also supports structs that look similar to tuples, called *tuple
+structs*. Tuple structs have the added meaning the struct name provides but
+don’t have names associated with their fields; rather, they just have the types
+of the fields. Tuple structs are useful when you want to give the whole tuple a
+name and make the tuple a different type from other tuples, and when naming each
+field as in a regular struct would be verbose or redundant.
+
+To define a tuple struct, start with the `struct` keyword and the struct name
+followed by the types in the tuple. For example, here we define and use
+two tuple structs named `Color` and `Point`:
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-01-tuple-structs/src/main.rs}}
+```
+
+Note that the `black` and `origin` values are different types, because they’re
+instances of different tuple structs. Each struct you define is its own type,
+even though the fields within the struct might have the same types. For
+example, a function that takes a parameter of type `Color` cannot take a
+`Point` as an argument, even though both types are made up of three `i32`
+values. Otherwise, tuple struct instances are similar to tuples in that you can
+destructure them into their individual pieces, and you can use a `.` followed
+by the index to access an individual value.
+
+### Unit-Like Structs Without Any Fields
+
+You can also define structs that don’t have any fields! These are called
+*unit-like structs* because they behave similarly to `()`, the unit type that
+we mentioned in [“The Tuple Type”][tuples]<!-- ignore --> section. Unit-like
+structs can be useful when you need to implement a trait on some type but don’t
+have any data that you want to store in the type itself. We’ll discuss traits
+in Chapter 10. Here’s an example of declaring and instantiating a unit struct
+named `AlwaysEqual`:
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-04-unit-like-structs/src/main.rs}}
+```
+
+To define `AlwaysEqual`, we use the `struct` keyword, the name we want, then a
+semicolon. No need for curly brackets or parentheses! Then we can get an
+instance of `AlwaysEqual` in the `subject` variable in a similar way: using the
+name we defined, without any curly brackets or parentheses. Imagine that later
+we’ll implement behavior for this type such that every instance of
+`AlwaysEqual` is always equal to every instance of any other type, perhaps to
+have a known result for testing purposes. We wouldn’t need any data to
+implement that behavior! You’ll see in Chapter 10 how to define traits and
+implement them on any type, including unit-like structs.
+
+> ### Ownership of Struct Data
+>
+> In the `User` struct definition in Listing 5-1, we used the owned `String`
+> type rather than the `&str` string slice type. This is a deliberate choice
+> because we want each instance of this struct to own all of its data and for
+> that data to be valid for as long as the entire struct is valid.
+>
+> It’s also possible for structs to store references to data owned by something
+> else, but to do so requires the use of *lifetimes*, a Rust feature that we’ll
+> discuss in Chapter 10. Lifetimes ensure that the data referenced by a struct
+> is valid for as long as the struct is. Let’s say you try to store a reference
+> in a struct without specifying lifetimes, like the following; this won’t work:
+>
+> <span class="filename">Filename: src/main.rs</span>
+>
+> <!-- CAN'T EXTRACT SEE https://github.com/rust-lang/mdBook/issues/1127 -->
+>
+> ```rust,ignore,does_not_compile
+> struct User {
+> active: bool,
+> username: &str,
+> email: &str,
+> sign_in_count: u64,
+> }
+>
+> fn main() {
+> let user1 = User {
+> email: "someone@example.com",
+> username: "someusername123",
+> active: true,
+> sign_in_count: 1,
+> };
+> }
+> ```
+>
+> The compiler will complain that it needs lifetime specifiers:
+>
+> ```console
+> $ cargo run
+> Compiling structs v0.1.0 (file:///projects/structs)
+> error[E0106]: missing lifetime specifier
+> --> src/main.rs:3:15
+> |
+> 3 | username: &str,
+> | ^ expected named lifetime parameter
+> |
+> help: consider introducing a named lifetime parameter
+> |
+> 1 ~ struct User<'a> {
+> 2 | active: bool,
+> 3 ~ username: &'a str,
+> |
+>
+> error[E0106]: missing lifetime specifier
+> --> src/main.rs:4:12
+> |
+> 4 | email: &str,
+> | ^ expected named lifetime parameter
+> |
+> help: consider introducing a named lifetime parameter
+> |
+> 1 ~ struct User<'a> {
+> 2 | active: bool,
+> 3 | username: &str,
+> 4 ~ email: &'a str,
+> |
+>
+> For more information about this error, try `rustc --explain E0106`.
+> error: could not compile `structs` due to 2 previous errors
+> ```
+>
+> In Chapter 10, we’ll discuss how to fix these errors so you can store
+> references in structs, but for now, we’ll fix errors like these using owned
+> types like `String` instead of references like `&str`.
+
+<!-- manual-regeneration
+for the error above
+after running update-rustc.sh:
+pbcopy < listings/ch05-using-structs-to-structure-related-data/no-listing-02-reference-in-struct/output.txt
+paste above
+add `> ` before every line -->
+
+[tuples]: ch03-02-data-types.html#the-tuple-type
+[move]: ch04-01-what-is-ownership.html#ways-variables-and-data-interact-move
+[copy]: ch04-01-what-is-ownership.html#stack-only-data-copy
diff --git a/src/doc/book/src/ch05-02-example-structs.md b/src/doc/book/src/ch05-02-example-structs.md
new file mode 100644
index 000000000..a83fa0564
--- /dev/null
+++ b/src/doc/book/src/ch05-02-example-structs.md
@@ -0,0 +1,248 @@
+## An Example Program Using Structs
+
+To understand when we might want to use structs, let’s write a program that
+calculates the area of a rectangle. We’ll start by using single variables, and
+then refactor the program until we’re using structs instead.
+
+Let’s make a new binary project with Cargo called *rectangles* that will take
+the width and height of a rectangle specified in pixels and calculate the area
+of the rectangle. Listing 5-8 shows a short program with one way of doing
+exactly that in our project’s *src/main.rs*.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs:all}}
+```
+
+<span class="caption">Listing 5-8: Calculating the area of a rectangle
+specified by separate width and height variables</span>
+
+Now, run this program using `cargo run`:
+
+```console
+{{#include ../listings/ch05-using-structs-to-structure-related-data/listing-05-08/output.txt}}
+```
+
+This code succeeds in figuring out the area of the rectangle by calling the
+`area` function with each dimension, but we can do more to make this code clear
+and readable.
+
+The issue with this code is evident in the signature of `area`:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-08/src/main.rs:here}}
+```
+
+The `area` function is supposed to calculate the area of one rectangle, but the
+function we wrote has two parameters, and it’s not clear anywhere in our
+program that the parameters are related. It would be more readable and more
+manageable to group width and height together. We’ve already discussed one way
+we might do that in [“The Tuple Type”][the-tuple-type]<!-- ignore --> section
+of Chapter 3: by using tuples.
+
+### Refactoring with Tuples
+
+Listing 5-9 shows another version of our program that uses tuples.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-09/src/main.rs}}
+```
+
+<span class="caption">Listing 5-9: Specifying the width and height of the
+rectangle with a tuple</span>
+
+In one way, this program is better. Tuples let us add a bit of structure, and
+we’re now passing just one argument. But in another way, this version is less
+clear: tuples don’t name their elements, so we have to index into the parts of
+the tuple, making our calculation less obvious.
+
+Mixing up the width and height wouldn’t matter for the area calculation, but if
+we want to draw the rectangle on the screen, it would matter! We would have to
+keep in mind that `width` is the tuple index `0` and `height` is the tuple
+index `1`. This would be even harder for someone else to figure out and keep in
+mind if they were to use our code. Because we haven’t conveyed the meaning of
+our data in our code, it’s now easier to introduce errors.
+
+### Refactoring with Structs: Adding More Meaning
+
+We use structs to add meaning by labeling the data. We can transform the tuple
+we’re using into a struct with a name for the whole as well as names for the
+parts, as shown in Listing 5-10.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-10/src/main.rs}}
+```
+
+<span class="caption">Listing 5-10: Defining a `Rectangle` struct</span>
+
+Here we’ve defined a struct and named it `Rectangle`. Inside the curly
+brackets, we defined the fields as `width` and `height`, both of which have
+type `u32`. Then in `main`, we created a particular instance of `Rectangle`
+that has a width of 30 and a height of 50.
+
+Our `area` function is now defined with one parameter, which we’ve named
+`rectangle`, whose type is an immutable borrow of a struct `Rectangle`
+instance. As mentioned in Chapter 4, we want to borrow the struct rather than
+take ownership of it. This way, `main` retains its ownership and can continue
+using `rect1`, which is the reason we use the `&` in the function signature and
+where we call the function.
+
+The `area` function accesses the `width` and `height` fields of the `Rectangle`
+instance (note that accessing fields of a borrowed struct instance does not
+move the field values, which is why you often see borrows of structs). Our
+function signature for `area` now says exactly what we mean: calculate the area
+of `Rectangle`, using its `width` and `height` fields. This conveys that the
+width and height are related to each other, and it gives descriptive names to
+the values rather than using the tuple index values of `0` and `1`. This is a
+win for clarity.
+
+### Adding Useful Functionality with Derived Traits
+
+It’d be useful to be able to print an instance of `Rectangle` while we’re
+debugging our program and see the values for all its fields. Listing 5-11 tries
+using the [`println!` macro][println]<!-- ignore --> as we have used in
+previous chapters. This won’t work, however.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-11/src/main.rs}}
+```
+
+<span class="caption">Listing 5-11: Attempting to print a `Rectangle`
+instance</span>
+
+When we compile this code, we get an error with this core message:
+
+```text
+{{#include ../listings/ch05-using-structs-to-structure-related-data/listing-05-11/output.txt:3}}
+```
+
+The `println!` macro can do many kinds of formatting, and by default, the curly
+brackets tell `println!` to use formatting known as `Display`: output intended
+for direct end user consumption. The primitive types we’ve seen so far
+implement `Display` by default, because there’s only one way you’d want to show
+a `1` or any other primitive type to a user. But with structs, the way
+`println!` should format the output is less clear because there are more
+display possibilities: Do you want commas or not? Do you want to print the
+curly brackets? Should all the fields be shown? Due to this ambiguity, Rust
+doesn’t try to guess what we want, and structs don’t have a provided
+implementation of `Display` to use with `println!` and the `{}` placeholder.
+
+If we continue reading the errors, we’ll find this helpful note:
+
+```text
+{{#include ../listings/ch05-using-structs-to-structure-related-data/listing-05-11/output.txt:9:10}}
+```
+
+Let’s try it! The `println!` macro call will now look like `println!("rect1 is
+{:?}", rect1);`. Putting the specifier `:?` inside the curly brackets tells
+`println!` we want to use an output format called `Debug`. The `Debug` trait
+enables us to print our struct in a way that is useful for developers so we can
+see its value while we’re debugging our code.
+
+Compile the code with this change. Drat! We still get an error:
+
+```text
+{{#include ../listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/output.txt:3}}
+```
+
+But again, the compiler gives us a helpful note:
+
+```text
+{{#include ../listings/ch05-using-structs-to-structure-related-data/output-only-01-debug/output.txt:9:10}}
+```
+
+Rust *does* include functionality to print out debugging information, but we
+have to explicitly opt in to make that functionality available for our struct.
+To do that, we add the outer attribute `#[derive(Debug)]` just before the
+struct definition, as shown in Listing 5-12.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-12/src/main.rs}}
+```
+
+<span class="caption">Listing 5-12: Adding the attribute to derive the `Debug`
+trait and printing the `Rectangle` instance using debug formatting</span>
+
+Now when we run the program, we won’t get any errors, and we’ll see the
+following output:
+
+```console
+{{#include ../listings/ch05-using-structs-to-structure-related-data/listing-05-12/output.txt}}
+```
+
+Nice! It’s not the prettiest output, but it shows the values of all the fields
+for this instance, which would definitely help during debugging. When we have
+larger structs, it’s useful to have output that’s a bit easier to read; in
+those cases, we can use `{:#?}` instead of `{:?}` in the `println!` string.
+In this example, using the `{:#?}` style will output:
+
+```console
+{{#include ../listings/ch05-using-structs-to-structure-related-data/output-only-02-pretty-debug/output.txt}}
+```
+
+Another way to print out a value using the `Debug` format is to use the [`dbg!`
+macro][dbg]<!-- ignore -->, which takes ownership of an expression (as opposed
+to `println!` that takes a reference), prints the file and line number of where
+that `dbg!` macro call occurs in your code along with the resulting value of
+that expression, and returns ownership of the value.
+
+> Note: Calling the `dbg!` macro prints to the standard error console stream
+> (`stderr`), as opposed to `println!` which prints to the standard output
+> console stream (`stdout`). We’ll talk more about `stderr` and `stdout` in the
+> “[“Writing Error Messages to Standard Error Instead of Standard
+> Output” section in Chapter 12][err]<!-- ignore -->.
+
+Here’s an example where we’re interested in the value that gets assigned to the
+`width` field, as well as the value of the whole struct in `rect1`:
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/src/main.rs}}
+```
+
+We can put `dbg!` around the expression `30 * scale` and, because `dbg!`
+returns ownership of the expression’s value, the `width` field will get the
+same value as if we didn’t have the `dbg!` call there. We don’t want `dbg!` to
+take ownership of `rect1`, so we use a reference to `rect1` in the next call.
+Here’s what the output of this example looks like:
+
+```console
+{{#include ../listings/ch05-using-structs-to-structure-related-data/no-listing-05-dbg-macro/output.txt}}
+```
+
+We can see the first bit of output came from *src/main.rs* line 10, where we’re
+debugging the expression `30 * scale`, and its resulting value is 60 (the
+`Debug` formatting implemented for integers is to print only their value). The
+`dbg!` call on line 14 of *src/main.rs* outputs the value of `&rect1`, which is
+the `Rectangle` struct. This output uses the pretty `Debug` formatting of the
+`Rectangle` type. The `dbg!` macro can be really helpful when you’re trying to
+figure out what your code is doing!
+
+In addition to the `Debug` trait, Rust has provided a number of traits for us
+to use with the `derive` attribute that can add useful behavior to our custom
+types. Those traits and their behaviors are listed in [Appendix C][app-c]<!--
+ignore -->. We’ll cover how to implement these traits with custom behavior as
+well as how to create your own traits in Chapter 10. There are also many
+attributes other than `derive`; for more information, see [the “Attributes”
+section of the Rust Reference][attributes].
+
+Our `area` function is very specific: it only computes the area of rectangles.
+It would be helpful to tie this behavior more closely to our `Rectangle`
+struct, because it won’t work with any other type. Let’s look at how we can
+continue to refactor this code by turning the `area` function into an `area`
+*method* defined on our `Rectangle` type.
+
+[the-tuple-type]: ch03-02-data-types.html#the-tuple-type
+[app-c]: appendix-03-derivable-traits.md
+[println]: ../std/macro.println.html
+[dbg]: ../std/macro.dbg.html
+[err]: ch12-06-writing-to-stderr-instead-of-stdout.html
+[attributes]: ../reference/attributes.html
diff --git a/src/doc/book/src/ch05-03-method-syntax.md b/src/doc/book/src/ch05-03-method-syntax.md
new file mode 100644
index 000000000..e300d0104
--- /dev/null
+++ b/src/doc/book/src/ch05-03-method-syntax.md
@@ -0,0 +1,245 @@
+## Method Syntax
+
+*Methods* are similar to functions: we declare them with the `fn` keyword and a
+name, they can have parameters and a return value, and they contain some code
+that’s run when the method is called from somewhere else. Unlike functions,
+methods are defined within the context of a struct (or an enum or a trait
+object, which we cover in Chapters 6 and 17, respectively), and their first
+parameter is always `self`, which represents the instance of the struct the
+method is being called on.
+
+### Defining Methods
+
+Let’s change the `area` function that has a `Rectangle` instance as a parameter
+and instead make an `area` method defined on the `Rectangle` struct, as shown
+in Listing 5-13.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-13/src/main.rs}}
+```
+
+<span class="caption">Listing 5-13: Defining an `area` method on the
+`Rectangle` struct</span>
+
+To define the function within the context of `Rectangle`, we start an `impl`
+(implementation) block for `Rectangle`. Everything within this `impl` block
+will be associated with the `Rectangle` type. Then we move the `area` function
+within the `impl` curly brackets and change the first (and in this case, only)
+parameter to be `self` in the signature and everywhere within the body. In
+`main`, where we called the `area` function and passed `rect1` as an argument,
+we can instead use *method syntax* to call the `area` method on our `Rectangle`
+instance. The method syntax goes after an instance: we add a dot followed by
+the method name, parentheses, and any arguments.
+
+In the signature for `area`, we use `&self` instead of `rectangle: &Rectangle`.
+The `&self` is actually short for `self: &Self`. Within an `impl` block, the
+type `Self` is an alias for the type that the `impl` block is for. Methods must
+have a parameter named `self` of type `Self` for their first parameter, so Rust
+lets you abbreviate this with only the name `self` in the first parameter spot.
+Note that we still need to use the `&` in front of the `self` shorthand to
+indicate this method borrows the `Self` instance, just as we did in `rectangle:
+&Rectangle`. Methods can take ownership of `self`, borrow `self` immutably as
+we’ve done here, or borrow `self` mutably, just as they can any other parameter.
+
+We’ve chosen `&self` here for the same reason we used `&Rectangle` in the
+function version: we don’t want to take ownership, and we just want to read the
+data in the struct, not write to it. If we wanted to change the instance that
+we’ve called the method on as part of what the method does, we’d use `&mut
+self` as the first parameter. Having a method that takes ownership of the
+instance by using just `self` as the first parameter is rare; this technique is
+usually used when the method transforms `self` into something else and you want
+to prevent the caller from using the original instance after the transformation.
+
+The main reason for using methods instead of functions, in addition to providing
+method syntax and not having to repeat the type of `self` in every method’s
+signature, is for organization. We’ve put all the things we can do with an
+instance of a type in one `impl` block rather than making future users of our
+code search for capabilities of `Rectangle` in various places in the library we
+provide.
+
+Note that we can choose to give a method the same name as one of the struct’s
+fields. For example, we can define a method on `Rectangle` also named `width`:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-06-method-field-interaction/src/main.rs:here}}
+```
+
+Here, we’re choosing to make the `width` method return `true` if the value in
+the instance’s `width` field is greater than 0, and `false` if the value is 0:
+we can use a field within a method of the same name for any purpose. In `main`,
+when we follow `rect1.width` with parentheses, Rust knows we mean the method
+`width`. When we don’t use parentheses, Rust knows we mean the field `width`.
+
+Often, but not always, when we give methods with the same name as a field we
+want it to only return the value in the field and do nothing else. Methods like
+this are called *getters*, and Rust does not implement them automatically for
+struct fields as some other languages do. Getters are useful because you can
+make the field private but the method public and thus enable read-only access
+to that field as part of the type’s public API. We will be discussing what
+public and private are and how to designate a field or method as public or
+private in Chapter 7.
+
+> ### Where’s the `->` Operator?
+>
+> In C and C++, two different operators are used for calling methods: you use
+> `.` if you’re calling a method on the object directly and `->` if you’re
+> calling the method on a pointer to the object and need to dereference the
+> pointer first. In other words, if `object` is a pointer,
+> `object->something()` is similar to `(*object).something()`.
+>
+> Rust doesn’t have an equivalent to the `->` operator; instead, Rust has a
+> feature called *automatic referencing and dereferencing*. Calling methods is
+> one of the few places in Rust that has this behavior.
+>
+> Here’s how it works: when you call a method with `object.something()`, Rust
+> automatically adds in `&`, `&mut`, or `*` so `object` matches the signature of
+> the method. In other words, the following are the same:
+>
+> <!-- CAN'T EXTRACT SEE BUG https://github.com/rust-lang/mdBook/issues/1127 -->
+> ```rust
+> # #[derive(Debug,Copy,Clone)]
+> # struct Point {
+> # x: f64,
+> # y: f64,
+> # }
+> #
+> # impl Point {
+> # fn distance(&self, other: &Point) -> f64 {
+> # let x_squared = f64::powi(other.x - self.x, 2);
+> # let y_squared = f64::powi(other.y - self.y, 2);
+> #
+> # f64::sqrt(x_squared + y_squared)
+> # }
+> # }
+> # let p1 = Point { x: 0.0, y: 0.0 };
+> # let p2 = Point { x: 5.0, y: 6.5 };
+> p1.distance(&p2);
+> (&p1).distance(&p2);
+> ```
+>
+> The first one looks much cleaner. This automatic referencing behavior works
+> because methods have a clear receiver—the type of `self`. Given the receiver
+> and name of a method, Rust can figure out definitively whether the method is
+> reading (`&self`), mutating (`&mut self`), or consuming (`self`). The fact
+> that Rust makes borrowing implicit for method receivers is a big part of
+> making ownership ergonomic in practice.
+
+### Methods with More Parameters
+
+Let’s practice using methods by implementing a second method on the `Rectangle`
+struct. This time, we want an instance of `Rectangle` to take another instance
+of `Rectangle` and return `true` if the second `Rectangle` can fit completely
+within `self` (the first `Rectangle`); otherwise it should return `false`. That
+is, once we’ve defined the `can_hold` method, we want to be able to write the
+program shown in Listing 5-14.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-14/src/main.rs}}
+```
+
+<span class="caption">Listing 5-14: Using the as-yet-unwritten `can_hold`
+method</span>
+
+And the expected output would look like the following, because both dimensions
+of `rect2` are smaller than the dimensions of `rect1` but `rect3` is wider than
+`rect1`:
+
+```text
+Can rect1 hold rect2? true
+Can rect1 hold rect3? false
+```
+
+We know we want to define a method, so it will be within the `impl Rectangle`
+block. The method name will be `can_hold`, and it will take an immutable borrow
+of another `Rectangle` as a parameter. We can tell what the type of the
+parameter will be by looking at the code that calls the method:
+`rect1.can_hold(&rect2)` passes in `&rect2`, which is an immutable borrow to
+`rect2`, an instance of `Rectangle`. This makes sense because we only need to
+read `rect2` (rather than write, which would mean we’d need a mutable borrow),
+and we want `main` to retain ownership of `rect2` so we can use it again after
+calling the `can_hold` method. The return value of `can_hold` will be a
+Boolean, and the implementation will check whether the width and height of
+`self` are both greater than the width and height of the other `Rectangle`,
+respectively. Let’s add the new `can_hold` method to the `impl` block from
+Listing 5-13, shown in Listing 5-15.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-15/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-15: Implementing the `can_hold` method on
+`Rectangle` that takes another `Rectangle` instance as a parameter</span>
+
+When we run this code with the `main` function in Listing 5-14, we’ll get our
+desired output. Methods can take multiple parameters that we add to the
+signature after the `self` parameter, and those parameters work just like
+parameters in functions.
+
+### Associated Functions
+
+All functions defined within an `impl` block are called *associated functions*
+because they’re associated with the type named after the `impl`. We can define
+associated functions that don’t have `self` as their first parameter (and thus
+are not methods) because they don’t need an instance of the type to work with.
+We’ve already used one function like this: the `String::from` function that’s
+defined on the `String` type.
+
+Associated functions that aren’t methods are often used for constructors that
+will return a new instance of the struct. These are often called `new`, but
+`new` isn’t a special name and isn’t built into the language. For example, we
+could choose to provide an associated function named `square` that would have
+one dimension parameter and use that as both width and height, thus making it
+easier to create a square `Rectangle` rather than having to specify the same
+value twice:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/no-listing-03-associated-functions/src/main.rs:here}}
+```
+
+The `Self` keywords in the return type and in the body of the function are
+aliases for the type that appears after the `impl` keyword, which in this case
+is `Rectangle`.
+
+To call this associated function, we use the `::` syntax with the struct name;
+`let sq = Rectangle::square(3);` is an example. This function is namespaced by
+the struct: the `::` syntax is used for both associated functions and
+namespaces created by modules. We’ll discuss modules in Chapter 7.
+
+### Multiple `impl` Blocks
+
+Each struct is allowed to have multiple `impl` blocks. For example, Listing
+5-15 is equivalent to the code shown in Listing 5-16, which has each method
+in its own `impl` block.
+
+```rust
+{{#rustdoc_include ../listings/ch05-using-structs-to-structure-related-data/listing-05-16/src/main.rs:here}}
+```
+
+<span class="caption">Listing 5-16: Rewriting Listing 5-15 using multiple `impl`
+blocks</span>
+
+There’s no reason to separate these methods into multiple `impl` blocks here,
+but this is valid syntax. We’ll see a case in which multiple `impl` blocks are
+useful in Chapter 10, where we discuss generic types and traits.
+
+## Summary
+
+Structs let you create custom types that are meaningful for your domain. By
+using structs, you can keep associated pieces of data connected to each other
+and name each piece to make your code clear. In `impl` blocks, you can define
+functions that are associated with your type, and methods are a kind of
+associated function that let you specify the behavior that instances of your
+structs have.
+
+But structs aren’t the only way you can create custom types: let’s turn to
+Rust’s enum feature to add another tool to your toolbox.
diff --git a/src/doc/book/src/ch06-00-enums.md b/src/doc/book/src/ch06-00-enums.md
new file mode 100644
index 000000000..e207aa7bd
--- /dev/null
+++ b/src/doc/book/src/ch06-00-enums.md
@@ -0,0 +1,11 @@
+# Enums and Pattern Matching
+
+In this chapter we’ll look at *enumerations*, also referred to as *enums*.
+Enums allow you to define a type by enumerating its possible *variants*. First,
+we’ll define and use an enum to show how an enum can encode meaning along with
+data. Next, we’ll explore a particularly useful enum, called `Option`, which
+expresses that a value can be either something or nothing. Then we’ll look at
+how pattern matching in the `match` expression makes it easy to run different
+code for different values of an enum. Finally, we’ll cover how the `if let`
+construct is another convenient and concise idiom available to handle enums in
+your code.
diff --git a/src/doc/book/src/ch06-01-defining-an-enum.md b/src/doc/book/src/ch06-01-defining-an-enum.md
new file mode 100644
index 000000000..cb5d73097
--- /dev/null
+++ b/src/doc/book/src/ch06-01-defining-an-enum.md
@@ -0,0 +1,324 @@
+## Defining an Enum
+
+Where structs give you a way of grouping together related fields and data, like
+a `Rectangle` with its `width` and `height`, enums give you a way of saying a
+value is one of a possible set of values. For example, we may want to say that
+`Rectangle` is one of a set of possible shapes that also includes `Circle` and
+`Triangle`. To do this, Rust allows us to encode these possibilities as an enum.
+
+Let’s look at a situation we might want to express in code and see why enums
+are useful and more appropriate than structs in this case. Say we need to work
+with IP addresses. Currently, two major standards are used for IP addresses:
+version four and version six. Because these are the only possibilities for an
+IP address that our program will come across, we can *enumerate* all possible
+variants, which is where enumeration gets its name.
+
+Any IP address can be either a version four or a version six address, but not
+both at the same time. That property of IP addresses makes the enum data
+structure appropriate, because an enum value can only be one of its variants.
+Both version four and version six addresses are still fundamentally IP
+addresses, so they should be treated as the same type when the code is handling
+situations that apply to any kind of IP address.
+
+We can express this concept in code by defining an `IpAddrKind` enumeration and
+listing the possible kinds an IP address can be, `V4` and `V6`. These are the
+variants of the enum:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs:def}}
+```
+
+`IpAddrKind` is now a custom data type that we can use elsewhere in our code.
+
+### Enum Values
+
+We can create instances of each of the two variants of `IpAddrKind` like this:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs:instance}}
+```
+
+Note that the variants of the enum are namespaced under its identifier, and we
+use a double colon to separate the two. This is useful because now both values
+`IpAddrKind::V4` and `IpAddrKind::V6` are of the same type: `IpAddrKind`. We
+can then, for instance, define a function that takes any `IpAddrKind`:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs:fn}}
+```
+
+And we can call this function with either variant:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-01-defining-enums/src/main.rs:fn_call}}
+```
+
+Using enums has even more advantages. Thinking more about our IP address type,
+at the moment we don’t have a way to store the actual IP address *data*; we
+only know what *kind* it is. Given that you just learned about structs in
+Chapter 5, you might be tempted to tackle this problem with structs as shown in
+Listing 6-1.
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-01/src/main.rs:here}}
+```
+
+<span class="caption">Listing 6-1: Storing the data and `IpAddrKind` variant of
+an IP address using a `struct`</span>
+
+Here, we’ve defined a struct `IpAddr` that has two fields: a `kind` field that
+is of type `IpAddrKind` (the enum we defined previously) and an `address` field
+of type `String`. We have two instances of this struct. The first is `home`,
+and it has the value `IpAddrKind::V4` as its `kind` with associated address
+data of `127.0.0.1`. The second instance is `loopback`. It has the other
+variant of `IpAddrKind` as its `kind` value, `V6`, and has address `::1`
+associated with it. We’ve used a struct to bundle the `kind` and `address`
+values together, so now the variant is associated with the value.
+
+However, representing the same concept using just an enum is more concise:
+rather than an enum inside a struct, we can put data directly into each enum
+variant. This new definition of the `IpAddr` enum says that both `V4` and `V6`
+variants will have associated `String` values:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-02-enum-with-data/src/main.rs:here}}
+```
+
+We attach data to each variant of the enum directly, so there is no need for an
+extra struct. Here it’s also easier to see another detail of how enums work:
+the name of each enum variant that we define also becomes a function that
+constructs an instance of the enum. That is, `IpAddr::V4()` is a function call
+that takes a `String` argument and returns an instance of the `IpAddr` type. We
+automatically get this constructor function defined as a result of defining the
+enum.
+
+There’s another advantage to using an enum rather than a struct: each variant
+can have different types and amounts of associated data. Version four type IP
+addresses will always have four numeric components that will have values
+between 0 and 255. If we wanted to store `V4` addresses as four `u8` values but
+still express `V6` addresses as one `String` value, we wouldn’t be able to with
+a struct. Enums handle this case with ease:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-03-variants-with-different-data/src/main.rs:here}}
+```
+
+We’ve shown several different ways to define data structures to store version
+four and version six IP addresses. However, as it turns out, wanting to store
+IP addresses and encode which kind they are is so common that [the standard
+library has a definition we can use!][IpAddr]<!-- ignore --> Let’s look at how
+the standard library defines `IpAddr`: it has the exact enum and variants that
+we’ve defined and used, but it embeds the address data inside the variants in
+the form of two different structs, which are defined differently for each
+variant:
+
+```rust
+struct Ipv4Addr {
+ // --snip--
+}
+
+struct Ipv6Addr {
+ // --snip--
+}
+
+enum IpAddr {
+ V4(Ipv4Addr),
+ V6(Ipv6Addr),
+}
+```
+
+This code illustrates that you can put any kind of data inside an enum variant:
+strings, numeric types, or structs, for example. You can even include another
+enum! Also, standard library types are often not much more complicated than
+what you might come up with.
+
+Note that even though the standard library contains a definition for `IpAddr`,
+we can still create and use our own definition without conflict because we
+haven’t brought the standard library’s definition into our scope. We’ll talk
+more about bringing types into scope in Chapter 7.
+
+Let’s look at another example of an enum in Listing 6-2: this one has a wide
+variety of types embedded in its variants.
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 6-2: A `Message` enum whose variants each store
+different amounts and types of values</span>
+
+This enum has four variants with different types:
+
+* `Quit` has no data associated with it at all.
+* `Move` has named fields like a struct does.
+* `Write` includes a single `String`.
+* `ChangeColor` includes three `i32` values.
+
+Defining an enum with variants such as the ones in Listing 6-2 is similar to
+defining different kinds of struct definitions, except the enum doesn’t use the
+`struct` keyword and all the variants are grouped together under the `Message`
+type. The following structs could hold the same data that the preceding enum
+variants hold:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-04-structs-similar-to-message-enum/src/main.rs:here}}
+```
+
+But if we used the different structs, which each have their own type, we
+couldn’t as easily define a function to take any of these kinds of messages as
+we could with the `Message` enum defined in Listing 6-2, which is a single type.
+
+There is one more similarity between enums and structs: just as we’re able to
+define methods on structs using `impl`, we’re also able to define methods on
+enums. Here’s a method named `call` that we could define on our `Message` enum:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-05-methods-on-enums/src/main.rs:here}}
+```
+
+The body of the method would use `self` to get the value that we called the
+method on. In this example, we’ve created a variable `m` that has the value
+`Message::Write(String::from("hello"))`, and that is what `self` will be in the
+body of the `call` method when `m.call()` runs.
+
+Let’s look at another enum in the standard library that is very common and
+useful: `Option`.
+
+### The `Option` Enum and Its Advantages Over Null Values
+
+This section explores a case study of `Option`, which is another enum defined
+by the standard library. The `Option` type encodes the very common scenario in
+which a value could be something or it could be nothing.
+
+For example, if you request the first of a list containing items, you would get
+a value. If you request the first item of an empty list, you would get nothing.
+Expressing this concept in terms of the type system means the compiler can
+check whether you’ve handled all the cases you should be handling; this
+functionality can prevent bugs that are extremely common in other programming
+languages.
+
+Programming language design is often thought of in terms of which features you
+include, but the features you exclude are important too. Rust doesn’t have the
+null feature that many other languages have. *Null* is a value that means there
+is no value there. In languages with null, variables can always be in one of
+two states: null or not-null.
+
+In his 2009 presentation “Null References: The Billion Dollar Mistake,” Tony
+Hoare, the inventor of null, has this to say:
+
+> I call it my billion-dollar mistake. At that time, I was designing the first
+> comprehensive type system for references in an object-oriented language. My
+> goal was to ensure that all use of references should be absolutely safe, with
+> checking performed automatically by the compiler. But I couldn’t resist the
+> temptation to put in a null reference, simply because it was so easy to
+> implement. This has led to innumerable errors, vulnerabilities, and system
+> crashes, which have probably caused a billion dollars of pain and damage in
+> the last forty years.
+
+The problem with null values is that if you try to use a null value as a
+not-null value, you’ll get an error of some kind. Because this null or not-null
+property is pervasive, it’s extremely easy to make this kind of error.
+
+However, the concept that null is trying to express is still a useful one: a
+null is a value that is currently invalid or absent for some reason.
+
+The problem isn’t really with the concept but with the particular
+implementation. As such, Rust does not have nulls, but it does have an enum
+that can encode the concept of a value being present or absent. This enum is
+`Option<T>`, and it is [defined by the standard library][option]<!-- ignore -->
+as follows:
+
+```rust
+enum Option<T> {
+ None,
+ Some(T),
+}
+```
+
+The `Option<T>` enum is so useful that it’s even included in the prelude; you
+don’t need to bring it into scope explicitly. Its variants are also included in
+the prelude: you can use `Some` and `None` directly without the `Option::`
+prefix. The `Option<T>` enum is still just a regular enum, and `Some(T)` and
+`None` are still variants of type `Option<T>`.
+
+The `<T>` syntax is a feature of Rust we haven’t talked about yet. It’s a
+generic type parameter, and we’ll cover generics in more detail in Chapter 10.
+For now, all you need to know is that `<T>` means the `Some` variant of the
+`Option` enum can hold one piece of data of any type, and that each concrete
+type that gets used in place of `T` makes the overall `Option<T>` type a
+different type. Here are some examples of using `Option` values to hold number
+types and string types:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-06-option-examples/src/main.rs:here}}
+```
+
+The type of `some_number` is `Option<i32>`. The type of `some_char` is
+`Option<char>`, which is a different type. Rust can infer these types because
+we’ve specified a value inside the `Some` variant. For `absent_number`, Rust
+requires us to annotate the overall `Option` type: the compiler can’t infer the
+type that the corresponding `Some` variant will hold by looking only at a
+`None` value. Here, we tell Rust that we mean for `absent_number` to be of type
+`Option<i32>`.
+
+When we have a `Some` value, we know that a value is present and the value is
+held within the `Some`. When we have a `None` value, in some sense, it means
+the same thing as null: we don’t have a valid value. So why is having
+`Option<T>` any better than having null?
+
+In short, because `Option<T>` and `T` (where `T` can be any type) are different
+types, the compiler won’t let us use an `Option<T>` value as if it were
+definitely a valid value. For example, this code won’t compile because it’s
+trying to add an `i8` to an `Option<i8>`:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/src/main.rs:here}}
+```
+
+If we run this code, we get an error message like this:
+
+```console
+{{#include ../listings/ch06-enums-and-pattern-matching/no-listing-07-cant-use-option-directly/output.txt}}
+```
+
+Intense! In effect, this error message means that Rust doesn’t understand how
+to add an `i8` and an `Option<i8>`, because they’re different types. When we
+have a value of a type like `i8` in Rust, the compiler will ensure that we
+always have a valid value. We can proceed confidently without having to check
+for null before using that value. Only when we have an `Option<i8>` (or
+whatever type of value we’re working with) do we have to worry about possibly
+not having a value, and the compiler will make sure we handle that case before
+using the value.
+
+In other words, you have to convert an `Option<T>` to a `T` before you can
+perform `T` operations with it. Generally, this helps catch one of the most
+common issues with null: assuming that something isn’t null when it actually
+is.
+
+Eliminating the risk of incorrectly assuming a not-null value helps you to be
+more confident in your code. In order to have a value that can possibly be
+null, you must explicitly opt in by making the type of that value `Option<T>`.
+Then, when you use that value, you are required to explicitly handle the case
+when the value is null. Everywhere that a value has a type that isn’t an
+`Option<T>`, you *can* safely assume that the value isn’t null. This was a
+deliberate design decision for Rust to limit null’s pervasiveness and increase
+the safety of Rust code.
+
+So, how do you get the `T` value out of a `Some` variant when you have a value
+of type `Option<T>` so you can use that value? The `Option<T>` enum has a large
+number of methods that are useful in a variety of situations; you can check
+them out in [its documentation][docs]<!-- ignore -->. Becoming familiar with
+the methods on `Option<T>` will be extremely useful in your journey with Rust.
+
+In general, in order to use an `Option<T>` value, you want to have code that
+will handle each variant. You want some code that will run only when you have a
+`Some(T)` value, and this code is allowed to use the inner `T`. You want some
+other code to run if you have a `None` value, and that code doesn’t have a `T`
+value available. The `match` expression is a control flow construct that does
+just this when used with enums: it will run different code depending on which
+variant of the enum it has, and that code can use the data inside the matching
+value.
+
+[IpAddr]: ../std/net/enum.IpAddr.html
+[option]: ../std/option/enum.Option.html
+[docs]: ../std/option/enum.Option.html
diff --git a/src/doc/book/src/ch06-02-match.md b/src/doc/book/src/ch06-02-match.md
new file mode 100644
index 000000000..a24936829
--- /dev/null
+++ b/src/doc/book/src/ch06-02-match.md
@@ -0,0 +1,252 @@
+<a id="the-match-control-flow-operator"></a>
+## The `match` Control Flow Construct
+
+Rust has an extremely powerful control flow construct called `match` that allows
+you to compare a value against a series of patterns and then execute code based
+on which pattern matches. Patterns can be made up of literal values, variable
+names, wildcards, and many other things; Chapter 18 covers all the different
+kinds of patterns and what they do. The power of `match` comes from the
+expressiveness of the patterns and the fact that the compiler confirms that all
+possible cases are handled.
+
+Think of a `match` expression as being like a coin-sorting machine: coins slide
+down a track with variously sized holes along it, and each coin falls through
+the first hole it encounters that it fits into. In the same way, values go
+through each pattern in a `match`, and at the first pattern the value “fits,”
+the value falls into the associated code block to be used during execution.
+
+Speaking of coins, let’s use them as an example using `match`! We can write a
+function that takes an unknown United States coin and, in a similar way as the
+counting machine, determines which coin it is and return its value in cents, as
+shown here in Listing 6-3.
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 6-3: An enum and a `match` expression that has
+the variants of the enum as its patterns</span>
+
+Let’s break down the `match` in the `value_in_cents` function. First, we list
+the `match` keyword followed by an expression, which in this case is the value
+`coin`. This seems very similar to an expression used with `if`, but there’s a
+big difference: with `if`, the expression needs to return a Boolean value, but
+here, it can return any type. The type of `coin` in this example is the `Coin`
+enum that we defined on the first line.
+
+Next are the `match` arms. An arm has two parts: a pattern and some code. The
+first arm here has a pattern that is the value `Coin::Penny` and then the `=>`
+operator that separates the pattern and the code to run. The code in this case
+is just the value `1`. Each arm is separated from the next with a comma.
+
+When the `match` expression executes, it compares the resulting value against
+the pattern of each arm, in order. If a pattern matches the value, the code
+associated with that pattern is executed. If that pattern doesn’t match the
+value, execution continues to the next arm, much as in a coin-sorting machine.
+We can have as many arms as we need: in Listing 6-3, our `match` has four arms.
+
+The code associated with each arm is an expression, and the resulting value of
+the expression in the matching arm is the value that gets returned for the
+entire `match` expression.
+
+We don’t typically use curly brackets if the match arm code is short, as it is
+in Listing 6-3 where each arm just returns a value. If you want to run multiple
+lines of code in a match arm, you must use curly brackets, and the comma
+following the arm is then optional. For example, the following code prints
+“Lucky penny!” every time the method is called with a `Coin::Penny`, but still
+returns the last value of the block, `1`:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-08-match-arm-multiple-lines/src/main.rs:here}}
+```
+
+### Patterns that Bind to Values
+
+Another useful feature of match arms is that they can bind to the parts of the
+values that match the pattern. This is how we can extract values out of enum
+variants.
+
+As an example, let’s change one of our enum variants to hold data inside it.
+From 1999 through 2008, the United States minted quarters with different
+designs for each of the 50 states on one side. No other coins got state
+designs, so only quarters have this extra value. We can add this information to
+our `enum` by changing the `Quarter` variant to include a `UsState` value stored
+inside it, which we’ve done here in Listing 6-4.
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 6-4: A `Coin` enum in which the `Quarter` variant
+also holds a `UsState` value</span>
+
+Let’s imagine that a friend is trying to collect all 50 state quarters. While
+we sort our loose change by coin type, we’ll also call out the name of the
+state associated with each quarter so if it’s one our friend doesn’t have, they
+can add it to their collection.
+
+In the match expression for this code, we add a variable called `state` to the
+pattern that matches values of the variant `Coin::Quarter`. When a
+`Coin::Quarter` matches, the `state` variable will bind to the value of that
+quarter’s state. Then we can use `state` in the code for that arm, like so:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-09-variable-in-pattern/src/main.rs:here}}
+```
+
+If we were to call `value_in_cents(Coin::Quarter(UsState::Alaska))`, `coin`
+would be `Coin::Quarter(UsState::Alaska)`. When we compare that value with each
+of the match arms, none of them match until we reach `Coin::Quarter(state)`. At
+that point, the binding for `state` will be the value `UsState::Alaska`. We can
+then use that binding in the `println!` expression, thus getting the inner
+state value out of the `Coin` enum variant for `Quarter`.
+
+### Matching with `Option<T>`
+
+In the previous section, we wanted to get the inner `T` value out of the `Some`
+case when using `Option<T>`; we can also handle `Option<T>` using `match` as we
+did with the `Coin` enum! Instead of comparing coins, we’ll compare the
+variants of `Option<T>`, but the way that the `match` expression works remains
+the same.
+
+Let’s say we want to write a function that takes an `Option<i32>` and, if
+there’s a value inside, adds 1 to that value. If there isn’t a value inside,
+the function should return the `None` value and not attempt to perform any
+operations.
+
+This function is very easy to write, thanks to `match`, and will look like
+Listing 6-5.
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 6-5: A function that uses a `match` expression on
+an `Option<i32>`</span>
+
+Let’s examine the first execution of `plus_one` in more detail. When we call
+`plus_one(five)`, the variable `x` in the body of `plus_one` will have the
+value `Some(5)`. We then compare that against each match arm.
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs:first_arm}}
+```
+
+The `Some(5)` value doesn’t match the pattern `None`, so we continue to the
+next arm.
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs:second_arm}}
+```
+
+Does `Some(5)` match `Some(i)`? Why yes it does! We have the same variant. The
+`i` binds to the value contained in `Some`, so `i` takes the value `5`. The
+code in the match arm is then executed, so we add 1 to the value of `i` and
+create a new `Some` value with our total `6` inside.
+
+Now let’s consider the second call of `plus_one` in Listing 6-5, where `x` is
+`None`. We enter the `match` and compare to the first arm.
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-05/src/main.rs:first_arm}}
+```
+
+It matches! There’s no value to add to, so the program stops and returns the
+`None` value on the right side of `=>`. Because the first arm matched, no other
+arms are compared.
+
+Combining `match` and enums is useful in many situations. You’ll see this
+pattern a lot in Rust code: `match` against an enum, bind a variable to the
+data inside, and then execute code based on it. It’s a bit tricky at first, but
+once you get used to it, you’ll wish you had it in all languages. It’s
+consistently a user favorite.
+
+### Matches Are Exhaustive
+
+There’s one other aspect of `match` we need to discuss: the arms’ patterns must
+cover all possibilities. Consider this version of our `plus_one` function,
+which has a bug and won’t compile:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/src/main.rs:here}}
+```
+
+We didn’t handle the `None` case, so this code will cause a bug. Luckily, it’s
+a bug Rust knows how to catch. If we try to compile this code, we’ll get this
+error:
+
+```console
+{{#include ../listings/ch06-enums-and-pattern-matching/no-listing-10-non-exhaustive-match/output.txt}}
+```
+
+Rust knows that we didn’t cover every possible case and even knows which
+pattern we forgot! Matches in Rust are *exhaustive*: we must exhaust every last
+possibility in order for the code to be valid. Especially in the case of
+`Option<T>`, when Rust prevents us from forgetting to explicitly handle the
+`None` case, it protects us from assuming that we have a value when we might
+have null, thus making the billion-dollar mistake discussed earlier impossible.
+
+### Catch-all Patterns and the `_` Placeholder
+
+Using enums, we can also take special actions for a few particular values, but
+for all other values take one default action. Imagine we’re implementing a game
+where, if you roll a 3 on a dice roll, your player doesn’t move, but instead
+gets a new fancy hat. If you roll a 7, your player loses a fancy hat. For all
+other values, your player moves that number of spaces on the game board. Here’s
+a `match` that implements that logic, with the result of the dice roll
+hardcoded rather than a random value, and all other logic represented by
+functions without bodies because actually implementing them is out of scope for
+this example:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-15-binding-catchall/src/main.rs:here}}
+```
+
+For the first two arms, the patterns are the literal values 3 and 7. For the
+last arm that covers every other possible value, the pattern is the variable
+we’ve chosen to name `other`. The code that runs for the `other` arm uses the
+variable by passing it to the `move_player` function.
+
+This code compiles, even though we haven’t listed all the possible values a
+`u8` can have, because the last pattern will match all values not specifically
+listed. This catch-all pattern meets the requirement that `match` must be
+exhaustive. Note that we have to put the catch-all arm last because the
+patterns are evaluated in order. If we put the catch-all arm earlier, the other
+arms would never run, so Rust will warn us if we add arms after a catch-all!
+
+Rust also has a pattern we can use when we want a catch-all but don’t want to
+*use* the value in the catch-all pattern: `_` is a special pattern that matches
+any value and does not bind to that value. This tells Rust we aren’t going to
+use the value, so Rust won’t warn us about an unused variable.
+
+Let’s change the rules of the game: now, if you roll anything other than a 3 or
+a 7, you must roll again. We no longer need to use the catch-all value, so we
+can change our code to use `_` instead of the variable named `other`:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-16-underscore-catchall/src/main.rs:here}}
+```
+
+This example also meets the exhaustiveness requirement because we’re explicitly
+ignoring all other values in the last arm; we haven’t forgotten anything.
+
+Finally, we’ll change the rules of the game one more time, so that nothing else
+happens on your turn if you roll anything other than a 3 or a 7. We can express
+that by using the unit value (the empty tuple type we mentioned in [“The Tuple
+Type”][tuples]<!-- ignore --> section) as the code that goes with the `_` arm:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-17-underscore-unit/src/main.rs:here}}
+```
+
+Here, we’re telling Rust explicitly that we aren’t going to use any other value
+that doesn’t match a pattern in an earlier arm, and we don’t want to run any
+code in this case.
+
+There’s more about patterns and matching that we’ll cover in [Chapter
+18][ch18-00-patterns]<!-- ignore -->. For now, we’re going to move on to the
+`if let` syntax, which can be useful in situations where the `match` expression
+is a bit wordy.
+
+[tuples]: ch03-02-data-types.html#the-tuple-type
+[ch18-00-patterns]: ch18-00-patterns.html
diff --git a/src/doc/book/src/ch06-03-if-let.md b/src/doc/book/src/ch06-03-if-let.md
new file mode 100644
index 000000000..07634e162
--- /dev/null
+++ b/src/doc/book/src/ch06-03-if-let.md
@@ -0,0 +1,81 @@
+## Concise Control Flow with `if let`
+
+The `if let` syntax lets you combine `if` and `let` into a less verbose way to
+handle values that match one pattern while ignoring the rest. Consider the
+program in Listing 6-6 that matches on an `Option<u8>` value in the `config_max`
+variable but only wants to execute code if the value is the `Some` variant.
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 6-6: A `match` that only cares about executing
+code when the value is `Some`</span>
+
+If the value is `Some`, we print out the value in the `Some` variant by binding
+the value to the variable `max` in the pattern. We don’t want to do anything
+with the `None` value. To satisfy the `match` expression, we have to add `_ =>
+()` after processing just one variant, which is annoying boilerplate code to
+add.
+
+Instead, we could write this in a shorter way using `if let`. The following
+code behaves the same as the `match` in Listing 6-6:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-12-if-let/src/main.rs:here}}
+```
+
+The syntax `if let` takes a pattern and an expression separated by an equal
+sign. It works the same way as a `match`, where the expression is given to the
+`match` and the pattern is its first arm. In this case, the pattern is
+`Some(max)`, and the `max` binds to the value inside the `Some`. We can then
+use `max` in the body of the `if let` block in the same way as we used `max` in
+the corresponding `match` arm. The code in the `if let` block isn’t run if the
+value doesn’t match the pattern.
+
+Using `if let` means less typing, less indentation, and less boilerplate code.
+However, you lose the exhaustive checking that `match` enforces. Choosing
+between `match` and `if let` depends on what you’re doing in your particular
+situation and whether gaining conciseness is an appropriate trade-off for
+losing exhaustive checking.
+
+In other words, you can think of `if let` as syntax sugar for a `match` that
+runs code when the value matches one pattern and then ignores all other values.
+
+We can include an `else` with an `if let`. The block of code that goes with the
+`else` is the same as the block of code that would go with the `_` case in the
+`match` expression that is equivalent to the `if let` and `else`. Recall the
+`Coin` enum definition in Listing 6-4, where the `Quarter` variant also held a
+`UsState` value. If we wanted to count all non-quarter coins we see while also
+announcing the state of the quarters, we could do that with a `match`
+expression like this:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-13-count-and-announce-match/src/main.rs:here}}
+```
+
+Or we could use an `if let` and `else` expression like this:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/no-listing-14-count-and-announce-if-let-else/src/main.rs:here}}
+```
+
+If you have a situation in which your program has logic that is too verbose to
+express using a `match`, remember that `if let` is in your Rust toolbox as well.
+
+## Summary
+
+We’ve now covered how to use enums to create custom types that can be one of a
+set of enumerated values. We’ve shown how the standard library’s `Option<T>`
+type helps you use the type system to prevent errors. When enum values have
+data inside them, you can use `match` or `if let` to extract and use those
+values, depending on how many cases you need to handle.
+
+Your Rust programs can now express concepts in your domain using structs and
+enums. Creating custom types to use in your API ensures type safety: the
+compiler will make certain your functions get only values of the type each
+function expects.
+
+In order to provide a well-organized API to your users that is straightforward
+to use and only exposes exactly what your users will need, let’s now turn to
+Rust’s modules.
diff --git a/src/doc/book/src/ch07-00-managing-growing-projects-with-packages-crates-and-modules.md b/src/doc/book/src/ch07-00-managing-growing-projects-with-packages-crates-and-modules.md
new file mode 100644
index 000000000..0f7abf51e
--- /dev/null
+++ b/src/doc/book/src/ch07-00-managing-growing-projects-with-packages-crates-and-modules.md
@@ -0,0 +1,48 @@
+# Managing Growing Projects with Packages, Crates, and Modules
+
+As you write large programs, organizing your code will become increasingly
+important. By grouping related functionality and separating code with distinct
+features, you’ll clarify where to find code that implements a particular
+feature and where to go to change how a feature works.
+
+The programs we’ve written so far have been in one module in one file. As a
+project grows, you should organize code by splitting it into multiple modules
+and then multiple files. A package can contain multiple binary crates and
+optionally one library crate. As a package grows, you can extract parts into
+separate crates that become external dependencies. This chapter covers all
+these techniques. For very large projects comprising a set of interrelated
+packages that evolve together, Cargo provides *workspaces*, which we’ll cover
+in the [“Cargo Workspaces”][workspaces]<!-- ignore --> section in Chapter 14.
+
+We’ll also discuss encapsulating implementation details, which lets you reuse
+code at a higher level: once you’ve implemented an operation, other code can
+call your code via its public interface without having to know how the
+implementation works. The way you write code defines which parts are public for
+other code to use and which parts are private implementation details that you
+reserve the right to change. This is another way to limit the amount of detail
+you have to keep in your head.
+
+A related concept is scope: the nested context in which code is written has a
+set of names that are defined as “in scope.” When reading, writing, and
+compiling code, programmers and compilers need to know whether a particular
+name at a particular spot refers to a variable, function, struct, enum, module,
+constant, or other item and what that item means. You can create scopes and
+change which names are in or out of scope. You can’t have two items with the
+same name in the same scope; tools are available to resolve name conflicts.
+
+Rust has a number of features that allow you to manage your code’s
+organization, including which details are exposed, which details are private,
+and what names are in each scope in your programs. These features, sometimes
+collectively referred to as the *module system*, include:
+
+* **Packages:** A Cargo feature that lets you build, test, and share crates
+* **Crates:** A tree of modules that produces a library or executable
+* **Modules** and **use:** Let you control the organization, scope, and
+ privacy of paths
+* **Paths:** A way of naming an item, such as a struct, function, or module
+
+In this chapter, we’ll cover all these features, discuss how they interact, and
+explain how to use them to manage scope. By the end, you should have a solid
+understanding of the module system and be able to work with scopes like a pro!
+
+[workspaces]: ch14-03-cargo-workspaces.html
diff --git a/src/doc/book/src/ch07-01-packages-and-crates.md b/src/doc/book/src/ch07-01-packages-and-crates.md
new file mode 100644
index 000000000..d9a70f773
--- /dev/null
+++ b/src/doc/book/src/ch07-01-packages-and-crates.md
@@ -0,0 +1,72 @@
+## Packages and Crates
+
+The first parts of the module system we’ll cover are packages and crates.
+
+A *crate* is the smallest amount of code that the Rust compiler considers at a
+time. Even if you run `rustc` rather than `cargo` and pass a single source code
+file (as we did all the way back in the “Writing and Running a Rust Program”
+section of Chapter 1), the compiler considers that file to be a crate. Crates
+can contain modules, and the modules may be defined in other files that get
+compiled with the crate, as we’ll see in the coming sections.
+
+A crate can come in one of two forms: a binary crate or a library crate.
+*Binary crates* are programs you can compile to an executable that you can run,
+such as a command-line program or a server. Each must have a function called
+`main` that defines what happens when the executable runs. All the crates we’ve
+created so far have been binary crates.
+
+*Library crates* don’t have a `main` function, and they don’t compile to an
+executable. Instead, they define functionality intended to be shared with
+multiple projects. For example, the `rand` crate we used in [Chapter
+2][rand]<!-- ignore --> provides functionality that generates random numbers.
+Most of the time when Rustaceans say “crate”, they mean library crate, and they
+use “crate” interchangeably with the general programming concept of a “library".
+
+The *crate root* is a source file that the Rust compiler starts from and makes
+up the root module of your crate (we’ll explain modules in depth in the
+[“Defining Modules to Control Scope and Privacy”][modules]<!-- ignore -->
+section).
+
+A *package* is a bundle of one or more crates that provides a set of
+functionality. A package contains a *Cargo.toml* file that describes how to
+build those crates. Cargo is actually a package that contains the binary crate
+for the command-line tool you’ve been using to build your code. The Cargo
+package also contains a library crate that the binary crate depends on. Other
+projects can depend on the Cargo library crate to use the same logic the Cargo
+command-line tool uses.
+
+A package can contain as many binary crates as you like, but at most only one
+library crate. A package must contain at least one crate, whether that’s a
+library or binary crate.
+
+Let’s walk through what happens when we create a package. First, we enter the
+command `cargo new`:
+
+```console
+$ cargo new my-project
+ Created binary (application) `my-project` package
+$ ls my-project
+Cargo.toml
+src
+$ ls my-project/src
+main.rs
+```
+
+After we run `cargo new`, we use `ls` to see what Cargo creates. In the project
+directory, there’s a *Cargo.toml* file, giving us a package. There’s also a
+*src* directory that contains *main.rs*. Open *Cargo.toml* in your text editor,
+and note there’s no mention of *src/main.rs*. Cargo follows a convention that
+*src/main.rs* is the crate root of a binary crate with the same name as the
+package. Likewise, Cargo knows that if the package directory contains
+*src/lib.rs*, the package contains a library crate with the same name as the
+package, and *src/lib.rs* is its crate root. Cargo passes the crate root files
+to `rustc` to build the library or binary.
+
+Here, we have a package that only contains *src/main.rs*, meaning it only
+contains a binary crate named `my-project`. If a package contains *src/main.rs*
+and *src/lib.rs*, it has two crates: a binary and a library, both with the same
+name as the package. A package can have multiple binary crates by placing files
+in the *src/bin* directory: each file will be a separate binary crate.
+
+[modules]: ch07-02-defining-modules-to-control-scope-and-privacy.html
+[rand]: ch02-00-guessing-game-tutorial.html#generating-a-random-number
diff --git a/src/doc/book/src/ch07-02-defining-modules-to-control-scope-and-privacy.md b/src/doc/book/src/ch07-02-defining-modules-to-control-scope-and-privacy.md
new file mode 100644
index 000000000..90776dbfe
--- /dev/null
+++ b/src/doc/book/src/ch07-02-defining-modules-to-control-scope-and-privacy.md
@@ -0,0 +1,174 @@
+## Defining Modules to Control Scope and Privacy
+
+In this section, we’ll talk about modules and other parts of the module system,
+namely *paths* that allow you to name items; the `use` keyword that brings a
+path into scope; and the `pub` keyword to make items public. We’ll also discuss
+the `as` keyword, external packages, and the glob operator.
+
+First, we’re going to start with a list of rules for easy reference when you’re
+organizing your code in the future. Then we’ll explain each of the rules in
+detail.
+
+### Modules Cheat Sheet
+
+Here we provide a quick reference on how modules, paths, the `use` keyword, and
+the `pub` keyword work in the compiler, and how most developers organize their
+code. We’ll be going through examples of each of these rules throughout this
+chapter, but this is a great place to refer to as a reminder of how modules
+work.
+
+- **Start from the crate root**: When compiling a crate, the compiler first
+ looks in the crate root file (usually *src/lib.rs* for a library crate or
+ *src/main.rs* for a binary crate) for code to compile.
+- **Declaring modules**: In the crate root file, you can declare new modules;
+say, you declare a “garden” module with `mod garden;`. The compiler will look
+for the module’s code in these places:
+ - Inline, within curly brackets that replace the semicolon following `mod
+ garden`
+ - In the file *src/garden.rs*
+ - In the file *src/garden/mod.rs*
+- **Declaring submodules**: In any file other than the crate root, you can
+ declare submodules. For example, you might declare `mod vegetables;` in
+ *src/garden.rs*. The compiler will look for the submodule’s code within the
+ directory named for the parent module in these places:
+ - Inline, directly following `mod vegetables`, within curly brackets instead
+ of the semicolon
+ - In the file *src/garden/vegetables.rs*
+ - In the file *src/garden/vegetables/mod.rs*
+- **Paths to code in modules**: Once a module is part of your crate, you can
+ refer to code in that module from anywhere else in that same crate, as long
+ as the privacy rules allow, using the path to the code. For example, an
+ `Asparagus` type in the garden vegetables module would be found at
+ `crate::garden::vegetables::Asparagus`.
+- **Private vs public**: Code within a module is private from its parent
+ modules by default. To make a module public, declare it with `pub mod`
+ instead of `mod`. To make items within a public module public as well, use
+ `pub` before their declarations.
+- **The `use` keyword**: Within a scope, the `use` keyword creates shortcuts to
+ items to reduce repetition of long paths. In any scope that can refer to
+ `crate::garden::vegetables::Asparagus`, you can create a shortcut with `use
+ crate::garden::vegetables::Asparagus;` and from then on you only need to
+ write `Asparagus` to make use of that type in the scope.
+
+Here we create a binary crate named `backyard` that illustrates these rules. The
+crate’s directory, also named `backyard`, contains these files and directories:
+
+```text
+backyard
+├── Cargo.lock
+├── Cargo.toml
+└── src
+ ├── garden
+ │   └── vegetables.rs
+ ├── garden.rs
+ └── main.rs
+```
+
+The crate root file in this case is *src/main.rs*, and it contains:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,noplayground,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/quick-reference-example/src/main.rs}}
+```
+
+The `pub mod garden;` line tells the compiler to include the code it finds in
+*src/garden.rs*, which is:
+
+<span class="filename">Filename: src/garden.rs</span>
+
+```rust,noplayground,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/quick-reference-example/src/garden.rs}}
+```
+
+Here, `pub mod vegetables;` means the code in *src/garden/vegetables.rs* is
+included too. That code is:
+
+```rust,noplayground,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/quick-reference-example/src/garden/vegetables.rs}}
+```
+
+Now let’s get into the details of these rules and demonstrate them in action!
+
+### Grouping Related Code in Modules
+
+*Modules* let us organize code within a crate for readability and easy reuse.
+Modules also allow us to control the *privacy* of items, because code within a
+module is private by default. Private items are internal implementation details
+not available for outside use. We can choose to make modules and the items
+within them public, which exposes them to allow external code to use and depend
+on them.
+
+As an example, let’s write a library crate that provides the functionality of a
+restaurant. We’ll define the signatures of functions but leave their bodies
+empty to concentrate on the organization of the code, rather than the
+implementation of a restaurant.
+
+In the restaurant industry, some parts of a restaurant are referred to as
+*front of house* and others as *back of house*. Front of house is where
+customers are; this encompasses where the hosts seat customers, servers take
+orders and payment, and bartenders make drinks. Back of house is where the
+chefs and cooks work in the kitchen, dishwashers clean up, and managers do
+administrative work.
+
+To structure our crate in this way, we can organize its functions into nested
+modules. Create a new library named `restaurant` by running `cargo new
+restaurant --lib`; then enter the code in Listing 7-1 into *src/lib.rs* to
+define some modules and function signatures. Here’s the front of house section:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-01/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-1: A `front_of_house` module containing other
+modules that then contain functions</span>
+
+We define a module with the `mod` keyword followed by the name of the module
+(in this case, `front_of_house`). The body of the module then goes inside curly
+brackets. Inside modules, we can place other modules, as in this case with the
+modules `hosting` and `serving`. Modules can also hold definitions for other
+items, such as structs, enums, constants, traits, and—as in Listing
+7-1—functions.
+
+By using modules, we can group related definitions together and name why
+they’re related. Programmers using this code can navigate the code based on the
+groups rather than having to read through all the definitions, making it easier
+to find the definitions relevant to them. Programmers adding new functionality
+to this code would know where to place the code to keep the program organized.
+
+Earlier, we mentioned that *src/main.rs* and *src/lib.rs* are called crate
+roots. The reason for their name is that the contents of either of these two
+files form a module named `crate` at the root of the crate’s module structure,
+known as the *module tree*.
+
+Listing 7-2 shows the module tree for the structure in Listing 7-1.
+
+```text
+crate
+ └── front_of_house
+ ├── hosting
+ │ ├── add_to_waitlist
+ │ └── seat_at_table
+ └── serving
+ ├── take_order
+ ├── serve_order
+ └── take_payment
+```
+
+<span class="caption">Listing 7-2: The module tree for the code in Listing
+7-1</span>
+
+This tree shows how some of the modules nest inside one another; for example,
+`hosting` nests inside `front_of_house`. The tree also shows that some modules
+are *siblings* to each other, meaning they’re defined in the same module;
+`hosting` and `serving` are siblings defined within `front_of_house`. If module
+A is contained inside module B, we say that module A is the *child* of module B
+and that module B is the *parent* of module A. Notice that the entire module
+tree is rooted under the implicit module named `crate`.
+
+The module tree might remind you of the filesystem’s directory tree on your
+computer; this is a very apt comparison! Just like directories in a filesystem,
+you use modules to organize your code. And just like files in a directory, we
+need a way to find our modules.
diff --git a/src/doc/book/src/ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md b/src/doc/book/src/ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md
new file mode 100644
index 000000000..c8fb3247f
--- /dev/null
+++ b/src/doc/book/src/ch07-03-paths-for-referring-to-an-item-in-the-module-tree.md
@@ -0,0 +1,298 @@
+## Paths for Referring to an Item in the Module Tree
+
+To show Rust where to find an item in a module tree, we use a path in the same
+way we use a path when navigating a filesystem. To call a function, we need to
+know its path.
+
+A path can take two forms:
+
+* An *absolute path* is the full path starting from a crate root; for code
+ from an external crate, the absolute path begins with the crate name, and for
+ code from the current crate, it starts with the literal `crate`.
+* A *relative path* starts from the current module and uses `self`, `super`, or
+ an identifier in the current module.
+
+Both absolute and relative paths are followed by one or more identifiers
+separated by double colons (`::`).
+
+Returning to Listing 7-1, say we want to call the `add_to_waitlist` function.
+This is the same as asking: what’s the path of the `add_to_waitlist` function?
+Listing 7-3 contains Listing 7-1 with some of the modules and functions
+removed.
+
+We’ll show two ways to call the `add_to_waitlist` function from a new function
+`eat_at_restaurant` defined in the crate root. These paths are correct, but
+there’s another problem remaining that will prevent this example from compiling
+as-is. We’ll explain why in a bit.
+
+The `eat_at_restaurant` function is part of our library crate’s public API, so
+we mark it with the `pub` keyword. In the [“Exposing Paths with the `pub`
+Keyword”][pub]<!-- ignore --> section, we’ll go into more detail about `pub`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-03/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-3: Calling the `add_to_waitlist` function using
+absolute and relative paths</span>
+
+The first time we call the `add_to_waitlist` function in `eat_at_restaurant`,
+we use an absolute path. The `add_to_waitlist` function is defined in the same
+crate as `eat_at_restaurant`, which means we can use the `crate` keyword to
+start an absolute path. We then include each of the successive modules until we
+make our way to `add_to_waitlist`. You can imagine a filesystem with the same
+structure: we’d specify the path `/front_of_house/hosting/add_to_waitlist` to
+run the `add_to_waitlist` program; using the `crate` name to start from the
+crate root is like using `/` to start from the filesystem root in your shell.
+
+The second time we call `add_to_waitlist` in `eat_at_restaurant`, we use a
+relative path. The path starts with `front_of_house`, the name of the module
+defined at the same level of the module tree as `eat_at_restaurant`. Here the
+filesystem equivalent would be using the path
+`front_of_house/hosting/add_to_waitlist`. Starting with a module name means
+that the path is relative.
+
+Choosing whether to use a relative or absolute path is a decision you’ll make
+based on your project, and depends on whether you’re more likely to move item
+definition code separately from or together with the code that uses the item.
+For example, if we move the `front_of_house` module and the `eat_at_restaurant`
+function into a module named `customer_experience`, we’d need to update the
+absolute path to `add_to_waitlist`, but the relative path would still be valid.
+However, if we moved the `eat_at_restaurant` function separately into a module
+named `dining`, the absolute path to the `add_to_waitlist` call would stay the
+same, but the relative path would need to be updated. Our preference in general
+is to specify absolute paths because it’s more likely we’ll want to move code
+definitions and item calls independently of each other.
+
+Let’s try to compile Listing 7-3 and find out why it won’t compile yet! The
+error we get is shown in Listing 7-4.
+
+```console
+{{#include ../listings/ch07-managing-growing-projects/listing-07-03/output.txt}}
+```
+
+<span class="caption">Listing 7-4: Compiler errors from building the code in
+Listing 7-3</span>
+
+The error messages say that module `hosting` is private. In other words, we
+have the correct paths for the `hosting` module and the `add_to_waitlist`
+function, but Rust won’t let us use them because it doesn’t have access to the
+private sections. In Rust, all items (functions, methods, structs, enums,
+modules, and constants) are private to parent modules by default. If you want
+to make an item like a function or struct private, you put it in a module.
+
+Items in a parent module can’t use the private items inside child modules, but
+items in child modules can use the items in their ancestor modules. This is
+because child modules wrap and hide their implementation details, but the child
+modules can see the context in which they’re defined. To continue with our
+metaphor, think of the privacy rules as being like the back office of a
+restaurant: what goes on in there is private to restaurant customers, but
+office managers can see and do everything in the restaurant they operate.
+
+Rust chose to have the module system function this way so that hiding inner
+implementation details is the default. That way, you know which parts of the
+inner code you can change without breaking outer code. However, Rust does give
+you the option to expose inner parts of child modules’ code to outer ancestor
+modules by using the `pub` keyword to make an item public.
+
+### Exposing Paths with the `pub` Keyword
+
+Let’s return to the error in Listing 7-4 that told us the `hosting` module is
+private. We want the `eat_at_restaurant` function in the parent module to have
+access to the `add_to_waitlist` function in the child module, so we mark the
+`hosting` module with the `pub` keyword, as shown in Listing 7-5.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-05/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-5: Declaring the `hosting` module as `pub` to
+use it from `eat_at_restaurant`</span>
+
+Unfortunately, the code in Listing 7-5 still results in an error, as shown in
+Listing 7-6.
+
+```console
+{{#include ../listings/ch07-managing-growing-projects/listing-07-05/output.txt}}
+```
+
+<span class="caption">Listing 7-6: Compiler errors from building the code in
+Listing 7-5</span>
+
+What happened? Adding the `pub` keyword in front of `mod hosting` makes the
+module public. With this change, if we can access `front_of_house`, we can
+access `hosting`. But the *contents* of `hosting` are still private; making the
+module public doesn’t make its contents public. The `pub` keyword on a module
+only lets code in its ancestor modules refer to it, not access its inner code.
+Because modules are containers, there’s not much we can do by only making the
+module public; we need to go further and choose to make one or more of the
+items within the module public as well.
+
+The errors in Listing 7-6 say that the `add_to_waitlist` function is private.
+The privacy rules apply to structs, enums, functions, and methods as well as
+modules.
+
+Let’s also make the `add_to_waitlist` function public by adding the `pub`
+keyword before its definition, as in Listing 7-7.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-07/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-7: Adding the `pub` keyword to `mod hosting`
+and `fn add_to_waitlist` lets us call the function from
+`eat_at_restaurant`</span>
+
+Now the code will compile! To see why adding the `pub` keyword lets us use
+these paths in `add_to_waitlist` with respect to the privacy rules, let’s look
+at the absolute and the relative paths.
+
+In the absolute path, we start with `crate`, the root of our crate’s module
+tree. The `front_of_house` module is defined in the crate root. While
+`front_of_house` isn’t public, because the `eat_at_restaurant` function is
+defined in the same module as `front_of_house` (that is, `eat_at_restaurant`
+and `front_of_house` are siblings), we can refer to `front_of_house` from
+`eat_at_restaurant`. Next is the `hosting` module marked with `pub`. We can
+access the parent module of `hosting`, so we can access `hosting`. Finally, the
+`add_to_waitlist` function is marked with `pub` and we can access its parent
+module, so this function call works!
+
+In the relative path, the logic is the same as the absolute path except for the
+first step: rather than starting from the crate root, the path starts from
+`front_of_house`. The `front_of_house` module is defined within the same module
+as `eat_at_restaurant`, so the relative path starting from the module in which
+`eat_at_restaurant` is defined works. Then, because `hosting` and
+`add_to_waitlist` are marked with `pub`, the rest of the path works, and this
+function call is valid!
+
+If you plan on sharing your library crate so other projects can use your code,
+your public API is your contract with users of your crate that determines how
+they can interact with your code. There are many considerations around managing
+changes to your public API to make it easier for people to depend on your
+crate. These considerations are out of the scope of this book; if you’re
+interested in this topic, see [The Rust API Guidelines][api-guidelines].
+
+> #### Best Practices for Packages with a Binary and a Library
+>
+> We mentioned a package can contain both a *src/main.rs* binary crate root as
+> well as a *src/lib.rs* library crate root, and both crates will have the
+> package name by default. Typically, packages with this pattern of containing
+> both a library and a binary crate will have just enough code in the binary
+> crate to start an executable that calls code with the library crate. This
+> lets other projects benefit from the most functionality that the package
+> provides, because the library crate’s code can be shared.
+>
+> The module tree should be defined in *src/lib.rs*. Then, any public items can
+> be used in the binary crate by starting paths with the name of the package.
+> The binary crate becomes a user of the library crate just like a completely
+> external crate would use the library crate: it can only use the public API.
+> This helps you design a good API; not only are you the author, you’re also a
+> client!
+>
+> In [Chapter 12][ch12]<!-- ignore -->, we’ll demonstrate this organizational
+> practice with a command-line program that will contain both a binary crate
+> and a library crate.
+
+### Starting Relative Paths with `super`
+
+We can construct relative paths that begin in the parent module, rather than
+the current module or the crate root, by using `super` at the start of the
+path. This is like starting a filesystem path with the `..` syntax. Using
+`super` allows us to reference an item that we know is in the parent module,
+which can make rearranging the module tree easier when the module is closely
+related to the parent, but the parent might be moved elsewhere in the module
+tree someday.
+
+Consider the code in Listing 7-8 that models the situation in which a chef
+fixes an incorrect order and personally brings it out to the customer. The
+function `fix_incorrect_order` defined in the `back_of_house` module calls the
+function `deliver_order` defined in the parent module by specifying the path to
+`deliver_order` starting with `super`:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-08/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-8: Calling a function using a relative path
+starting with `super`</span>
+
+The `fix_incorrect_order` function is in the `back_of_house` module, so we can
+use `super` to go to the parent module of `back_of_house`, which in this case
+is `crate`, the root. From there, we look for `deliver_order` and find it.
+Success! We think the `back_of_house` module and the `deliver_order` function
+are likely to stay in the same relationship to each other and get moved
+together should we decide to reorganize the crate’s module tree. Therefore, we
+used `super` so we’ll have fewer places to update code in the future if this
+code gets moved to a different module.
+
+### Making Structs and Enums Public
+
+We can also use `pub` to designate structs and enums as public, but there are a
+few details extra to the usage of `pub` with structs and enums. If we use `pub`
+before a struct definition, we make the struct public, but the struct’s fields
+will still be private. We can make each field public or not on a case-by-case
+basis. In Listing 7-9, we’ve defined a public `back_of_house::Breakfast` struct
+with a public `toast` field but a private `seasonal_fruit` field. This models
+the case in a restaurant where the customer can pick the type of bread that
+comes with a meal, but the chef decides which fruit accompanies the meal based
+on what’s in season and in stock. The available fruit changes quickly, so
+customers can’t choose the fruit or even see which fruit they’ll get.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-09/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-9: A struct with some public fields and some
+private fields</span>
+
+Because the `toast` field in the `back_of_house::Breakfast` struct is public,
+in `eat_at_restaurant` we can write and read to the `toast` field using dot
+notation. Notice that we can’t use the `seasonal_fruit` field in
+`eat_at_restaurant` because `seasonal_fruit` is private. Try uncommenting the
+line modifying the `seasonal_fruit` field value to see what error you get!
+
+Also, note that because `back_of_house::Breakfast` has a private field, the
+struct needs to provide a public associated function that constructs an
+instance of `Breakfast` (we’ve named it `summer` here). If `Breakfast` didn’t
+have such a function, we couldn’t create an instance of `Breakfast` in
+`eat_at_restaurant` because we couldn’t set the value of the private
+`seasonal_fruit` field in `eat_at_restaurant`.
+
+In contrast, if we make an enum public, all of its variants are then public. We
+only need the `pub` before the `enum` keyword, as shown in Listing 7-10.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-10/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-10: Designating an enum as public makes all its
+variants public</span>
+
+Because we made the `Appetizer` enum public, we can use the `Soup` and `Salad`
+variants in `eat_at_restaurant`.
+
+Enums aren’t very useful unless their variants are public; it would be annoying
+to have to annotate all enum variants with `pub` in every case, so the default
+for enum variants is to be public. Structs are often useful without their
+fields being public, so struct fields follow the general rule of everything
+being private by default unless annotated with `pub`.
+
+There’s one more situation involving `pub` that we haven’t covered, and that is
+our last module system feature: the `use` keyword. We’ll cover `use` by itself
+first, and then we’ll show how to combine `pub` and `use`.
+
+[pub]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html#exposing-paths-with-the-pub-keyword
+[api-guidelines]: https://rust-lang.github.io/api-guidelines/
+[ch12]: ch12-00-an-io-project.html
diff --git a/src/doc/book/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md b/src/doc/book/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md
new file mode 100644
index 000000000..921e5cecc
--- /dev/null
+++ b/src/doc/book/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md
@@ -0,0 +1,309 @@
+## Bringing Paths into Scope with the `use` Keyword
+
+Having to write out the paths to call functions can feel inconvenient and
+repetitive. In Listing 7-7, whether we chose the absolute or relative path to
+the `add_to_waitlist` function, every time we wanted to call `add_to_waitlist`
+we had to specify `front_of_house` and `hosting` too. Fortunately, there’s a
+way to simplify this process: we can create a shortcut to a path with the `use`
+keyword once, and then use the shorter name everywhere else in the scope.
+
+In Listing 7-11, we bring the `crate::front_of_house::hosting` module into the
+scope of the `eat_at_restaurant` function so we only have to specify
+`hosting::add_to_waitlist` to call the `add_to_waitlist` function in
+`eat_at_restaurant`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-11/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-11: Bringing a module into scope with
+`use`</span>
+
+Adding `use` and a path in a scope is similar to creating a symbolic link in
+the filesystem. By adding `use crate::front_of_house::hosting` in the crate
+root, `hosting` is now a valid name in that scope, just as though the `hosting`
+module had been defined in the crate root. Paths brought into scope with `use`
+also check privacy, like any other paths.
+
+Note that `use` only creates the shortcut for the particular scope in which the
+`use` occurs. Listing 7-12 moves the `eat_at_restaurant` function into a new
+child module named `customer`, which is then a different scope than the `use`
+statement, so the function body won’t compile:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness,does_not_compile,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-12/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-12: A `use` statement only applies in the scope
+it’s in</span>
+
+The compiler error shows that the shortcut no longer applies within the
+`customer` module:
+
+```console
+{{#include ../listings/ch07-managing-growing-projects/listing-07-12/output.txt}}
+```
+
+Notice there’s also a warning that the `use` is no longer used in its scope! To
+fix this problem, move the `use` within the `customer` module too, or reference
+the shortcut in the parent module with `super::hosting` within the child
+`customer` module.
+
+### Creating Idiomatic `use` Paths
+
+In Listing 7-11, you might have wondered why we specified `use
+crate::front_of_house::hosting` and then called `hosting::add_to_waitlist` in
+`eat_at_restaurant` rather than specifying the `use` path all the way out to
+the `add_to_waitlist` function to achieve the same result, as in Listing 7-13.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-13/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-13: Bringing the `add_to_waitlist` function
+into scope with `use`, which is unidiomatic</span>
+
+Although both Listing 7-11 and 7-13 accomplish the same task, Listing 7-11 is
+the idiomatic way to bring a function into scope with `use`. Bringing the
+function’s parent module into scope with `use` means we have to specify the
+parent module when calling the function. Specifying the parent module when
+calling the function makes it clear that the function isn’t locally defined
+while still minimizing repetition of the full path. The code in Listing 7-13 is
+unclear as to where `add_to_waitlist` is defined.
+
+On the other hand, when bringing in structs, enums, and other items with `use`,
+it’s idiomatic to specify the full path. Listing 7-14 shows the idiomatic way
+to bring the standard library’s `HashMap` struct into the scope of a binary
+crate.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-14/src/main.rs}}
+```
+
+<span class="caption">Listing 7-14: Bringing `HashMap` into scope in an
+idiomatic way</span>
+
+There’s no strong reason behind this idiom: it’s just the convention that has
+emerged, and folks have gotten used to reading and writing Rust code this way.
+
+The exception to this idiom is if we’re bringing two items with the same name
+into scope with `use` statements, because Rust doesn’t allow that. Listing 7-15
+shows how to bring two `Result` types into scope that have the same name but
+different parent modules and how to refer to them.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-15/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 7-15: Bringing two types with the same name into
+the same scope requires using their parent modules.</span>
+
+As you can see, using the parent modules distinguishes the two `Result` types.
+If instead we specified `use std::fmt::Result` and `use std::io::Result`, we’d
+have two `Result` types in the same scope and Rust wouldn’t know which one we
+meant when we used `Result`.
+
+### Providing New Names with the `as` Keyword
+
+There’s another solution to the problem of bringing two types of the same name
+into the same scope with `use`: after the path, we can specify `as` and a new
+local name, or *alias*, for the type. Listing 7-16 shows another way to write
+the code in Listing 7-15 by renaming one of the two `Result` types using `as`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-16/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 7-16: Renaming a type when it’s brought into
+scope with the `as` keyword</span>
+
+In the second `use` statement, we chose the new name `IoResult` for the
+`std::io::Result` type, which won’t conflict with the `Result` from `std::fmt`
+that we’ve also brought into scope. Listing 7-15 and Listing 7-16 are
+considered idiomatic, so the choice is up to you!
+
+### Re-exporting Names with `pub use`
+
+When we bring a name into scope with the `use` keyword, the name available in
+the new scope is private. To enable the code that calls our code to refer to
+that name as if it had been defined in that code’s scope, we can combine `pub`
+and `use`. This technique is called *re-exporting* because we’re bringing
+an item into scope but also making that item available for others to bring into
+their scope.
+
+Listing 7-17 shows the code in Listing 7-11 with `use` in the root module
+changed to `pub use`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-17/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-17: Making a name available for any code to use
+from a new scope with `pub use`</span>
+
+Before this change, external code would have to call the `add_to_waitlist`
+function by using the path
+`restaurant::front_of_house::hosting::add_to_waitlist()`. Now that this `pub
+use` has re-exported the `hosting` module from the root module, external code
+can now use the path `restaurant::hosting::add_to_waitlist()` instead.
+
+Re-exporting is useful when the internal structure of your code is different
+from how programmers calling your code would think about the domain. For
+example, in this restaurant metaphor, the people running the restaurant think
+about “front of house” and “back of house.” But customers visiting a restaurant
+probably won’t think about the parts of the restaurant in those terms. With
+`pub use`, we can write our code with one structure but expose a different
+structure. Doing so makes our library well organized for programmers working on
+the library and programmers calling the library. We’ll look at another example
+of `pub use` and how it affects your crate’s documentation in the [“Exporting a
+Convenient Public API with `pub use`”][ch14-pub-use]<!-- ignore --> section of
+Chapter 14.
+
+### Using External Packages
+
+In Chapter 2, we programmed a guessing game project that used an external
+package called `rand` to get random numbers. To use `rand` in our project, we
+added this line to *Cargo.toml*:
+
+<!-- When updating the version of `rand` used, also update the version of
+`rand` used in these files so they all match:
+* ch02-00-guessing-game-tutorial.md
+* ch14-03-cargo-workspaces.md
+-->
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch02-guessing-game-tutorial/listing-02-02/Cargo.toml:9:}}
+```
+
+Adding `rand` as a dependency in *Cargo.toml* tells Cargo to download the
+`rand` package and any dependencies from [crates.io](https://crates.io/) and
+make `rand` available to our project.
+
+Then, to bring `rand` definitions into the scope of our package, we added a
+`use` line starting with the name of the crate, `rand`, and listed the items
+we wanted to bring into scope. Recall that in the [“Generating a Random
+Number”][rand]<!-- ignore --> section in Chapter 2, we brought the `Rng` trait
+into scope and called the `rand::thread_rng` function:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-03/src/main.rs:ch07-04}}
+```
+
+Members of the Rust community have made many packages available at
+[crates.io](https://crates.io/), and pulling any of them into your package
+involves these same steps: listing them in your package’s *Cargo.toml* file and
+using `use` to bring items from their crates into scope.
+
+Note that the standard `std` library is also a crate that’s external to our
+package. Because the standard library is shipped with the Rust language, we
+don’t need to change *Cargo.toml* to include `std`. But we do need to refer to
+it with `use` to bring items from there into our package’s scope. For example,
+with `HashMap` we would use this line:
+
+```rust
+use std::collections::HashMap;
+```
+
+This is an absolute path starting with `std`, the name of the standard library
+crate.
+
+### Using Nested Paths to Clean Up Large `use` Lists
+
+If we’re using multiple items defined in the same crate or same module,
+listing each item on its own line can take up a lot of vertical space in our
+files. For example, these two `use` statements we had in the Guessing Game in
+Listing 2-4 bring items from `std` into scope:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/no-listing-01-use-std-unnested/src/main.rs:here}}
+```
+
+Instead, we can use nested paths to bring the same items into scope in one
+line. We do this by specifying the common part of the path, followed by two
+colons, and then curly brackets around a list of the parts of the paths that
+differ, as shown in Listing 7-18.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-18/src/main.rs:here}}
+```
+
+<span class="caption">Listing 7-18: Specifying a nested path to bring multiple
+items with the same prefix into scope</span>
+
+In bigger programs, bringing many items into scope from the same crate or
+module using nested paths can reduce the number of separate `use` statements
+needed by a lot!
+
+We can use a nested path at any level in a path, which is useful when combining
+two `use` statements that share a subpath. For example, Listing 7-19 shows two
+`use` statements: one that brings `std::io` into scope and one that brings
+`std::io::Write` into scope.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-19/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-19: Two `use` statements where one is a subpath
+of the other</span>
+
+The common part of these two paths is `std::io`, and that’s the complete first
+path. To merge these two paths into one `use` statement, we can use `self` in
+the nested path, as shown in Listing 7-20.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-20/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-20: Combining the paths in Listing 7-19 into
+one `use` statement</span>
+
+This line brings `std::io` and `std::io::Write` into scope.
+
+### The Glob Operator
+
+If we want to bring *all* public items defined in a path into scope, we can
+specify that path followed by the `*` glob operator:
+
+```rust
+use std::collections::*;
+```
+
+This `use` statement brings all public items defined in `std::collections` into
+the current scope. Be careful when using the glob operator! Glob can make it
+harder to tell what names are in scope and where a name used in your program
+was defined.
+
+The glob operator is often used when testing to bring everything under test
+into the `tests` module; we’ll talk about that in the [“How to Write
+Tests”][writing-tests]<!-- ignore --> section in Chapter 11. The glob operator
+is also sometimes used as part of the prelude pattern: see [the standard
+library documentation](../std/prelude/index.html#other-preludes)<!-- ignore -->
+for more information on that pattern.
+
+[ch14-pub-use]: ch14-02-publishing-to-crates-io.html#exporting-a-convenient-public-api-with-pub-use
+[rand]: ch02-00-guessing-game-tutorial.html#generating-a-random-number
+[writing-tests]: ch11-01-writing-tests.html#how-to-write-tests
diff --git a/src/doc/book/src/ch07-05-separating-modules-into-different-files.md b/src/doc/book/src/ch07-05-separating-modules-into-different-files.md
new file mode 100644
index 000000000..17e8d7452
--- /dev/null
+++ b/src/doc/book/src/ch07-05-separating-modules-into-different-files.md
@@ -0,0 +1,127 @@
+## Separating Modules into Different Files
+
+So far, all the examples in this chapter defined multiple modules in one file.
+When modules get large, you might want to move their definitions to a separate
+file to make the code easier to navigate.
+
+For example, let’s start from the code in Listing 7-17 that had multiple
+restaurant modules. We’ll extract modules into files instead of having all the
+modules defined in the crate root file. In this case, the crate root file is
+*src/lib.rs*, but this procedure also works with binary crates whose crate root
+file is *src/main.rs*.
+
+First, we’ll extract the `front_of_house` module to its own file. Remove the
+code inside the curly brackets for the `front_of_house` module, leaving only
+the `mod front_of_house;` declaration, so that *src/lib.rs* contains the code
+shown in Listing 7-21. Note that this won’t compile until we create the
+*src/front_of_house.rs* file in Listing 7-22.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-21-and-22/src/lib.rs}}
+```
+
+<span class="caption">Listing 7-21: Declaring the `front_of_house` module whose
+body will be in *src/front_of_house.rs*</span>
+
+Next, place the code that was in the curly brackets into a new file named
+*src/front_of_house.rs*, as shown in Listing 7-22. The compiler knows to look
+in this file because it came across the module declaration in the crate root
+with the name `front_of_house`.
+
+<span class="filename">Filename: src/front_of_house.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/listing-07-21-and-22/src/front_of_house.rs}}
+```
+
+<span class="caption">Listing 7-22: Definitions inside the `front_of_house`
+module in *src/front_of_house.rs*</span>
+
+Note that you only need to load a file using a `mod` declaration *once* in your
+module tree. Once the compiler knows the file is part of the project (and knows
+where in the module tree the code resides because of where you’ve put the `mod`
+statement), other files in your project should refer to the loaded file’s code
+using a path to where it was declared, as covered in the [“Paths for Referring
+to an Item in the Module Tree”][paths]<!-- ignore --> section. In other words,
+`mod` is *not* an “include” operation that you may have seen in other
+programming languages.
+
+Next, we’ll extract the `hosting` module to its own file. The process is a bit
+different because `hosting` is a child module of `front_of_house`, not of the
+root module. We’ll place the file for `hosting` in a new directory that will be
+named for its ancestors in the module tree, in this case *src/front_of_house/*.
+
+To start moving `hosting`, we change *src/front_of_house.rs* to contain only the
+declaration of the `hosting` module:
+
+<span class="filename">Filename: src/front_of_house.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house.rs}}
+```
+
+Then we create a *src/front_of_house* directory and a file *hosting.rs* to
+contain the definitions made in the `hosting` module:
+
+<span class="filename">Filename: src/front_of_house/hosting.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch07-managing-growing-projects/no-listing-02-extracting-hosting/src/front_of_house/hosting.rs}}
+```
+
+If we instead put *hosting.rs* in the *src* directory, the compiler would
+expect the *hosting.rs* code to be in a `hosting` module declared in the crate
+root, and not declared as a child of the `front_of_house` module. The
+compiler’s rules for which files to check for which modules’ code means the
+directories and files more closely match the module tree.
+
+> ### Alternate File Paths
+>
+> So far we’ve covered the most idiomatic file paths the Rust compiler uses,
+> but Rust also supports an older style of file path. For a module named
+> `front_of_house` declared in the crate root, the compiler will look for the
+> module’s code in:
+>
+> * *src/front_of_house.rs* (what we covered)
+> * *src/front_of_house/mod.rs* (older style, still supported path)
+>
+> For a module named `hosting` that is a submodule of `front_of_house`, the
+> compiler will look for the module’s code in:
+>
+> * *src/front_of_house/hosting.rs* (what we covered)
+> * *src/front_of_house/hosting/mod.rs* (older style, still supported path)
+>
+> If you use both styles for the same module, you’ll get a compiler error. Using
+> a mix of both styles for different modules in the same project is allowed, but
+> might be confusing for people navigating your project.
+>
+> The main downside to the style that uses files named *mod.rs* is that your
+> project can end up with many files named *mod.rs*, which can get confusing
+> when you have them open in your editor at the same time.
+
+We’ve moved each module’s code to a separate file, and the module tree remains
+the same. The function calls in `eat_at_restaurant` will work without any
+modification, even though the definitions live in different files. This
+technique lets you move modules to new files as they grow in size.
+
+Note that the `pub use crate::front_of_house::hosting` statement in
+*src/lib.rs* also hasn’t changed, nor does `use` have any impact on what files
+are compiled as part of the crate. The `mod` keyword declares modules, and Rust
+looks in a file with the same name as the module for the code that goes into
+that module.
+
+## Summary
+
+Rust lets you split a package into multiple crates and a crate into modules
+so you can refer to items defined in one module from another module. You can do
+this by specifying absolute or relative paths. These paths can be brought into
+scope with a `use` statement so you can use a shorter path for multiple uses of
+the item in that scope. Module code is private by default, but you can make
+definitions public by adding the `pub` keyword.
+
+In the next chapter, we’ll look at some collection data structures in the
+standard library that you can use in your neatly organized code.
+
+[paths]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html
diff --git a/src/doc/book/src/ch08-00-common-collections.md b/src/doc/book/src/ch08-00-common-collections.md
new file mode 100644
index 000000000..cf66e1885
--- /dev/null
+++ b/src/doc/book/src/ch08-00-common-collections.md
@@ -0,0 +1,25 @@
+# Common Collections
+
+Rust’s standard library includes a number of very useful data structures called
+*collections*. Most other data types represent one specific value, but
+collections can contain multiple values. Unlike the built-in array and tuple
+types, the data these collections point to is stored on the heap, which means
+the amount of data does not need to be known at compile time and can grow or
+shrink as the program runs. Each kind of collection has different capabilities
+and costs, and choosing an appropriate one for your current situation is a
+skill you’ll develop over time. In this chapter, we’ll discuss three
+collections that are used very often in Rust programs:
+
+* A *vector* allows you to store a variable number of values next to each other.
+* A *string* is a collection of characters. We’ve mentioned the `String` type
+ previously, but in this chapter we’ll talk about it in depth.
+* A *hash map* allows you to associate a value with a particular key. It’s a
+ particular implementation of the more general data structure called a *map*.
+
+To learn about the other kinds of collections provided by the standard library,
+see [the documentation][collections].
+
+We’ll discuss how to create and update vectors, strings, and hash maps, as well
+as what makes each special.
+
+[collections]: ../std/collections/index.html
diff --git a/src/doc/book/src/ch08-01-vectors.md b/src/doc/book/src/ch08-01-vectors.md
new file mode 100644
index 000000000..85d3bcfe4
--- /dev/null
+++ b/src/doc/book/src/ch08-01-vectors.md
@@ -0,0 +1,253 @@
+## Storing Lists of Values with Vectors
+
+The first collection type we’ll look at is `Vec<T>`, also known as a *vector*.
+Vectors allow you to store more than one value in a single data structure that
+puts all the values next to each other in memory. Vectors can only store values
+of the same type. They are useful when you have a list of items, such as the
+lines of text in a file or the prices of items in a shopping cart.
+
+### Creating a New Vector
+
+To create a new empty vector, we call the `Vec::new` function, as shown in
+Listing 8-1.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-01/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-1: Creating a new, empty vector to hold values
+of type `i32`</span>
+
+Note that we added a type annotation here. Because we aren’t inserting any
+values into this vector, Rust doesn’t know what kind of elements we intend to
+store. This is an important point. Vectors are implemented using generics;
+we’ll cover how to use generics with your own types in Chapter 10. For now,
+know that the `Vec<T>` type provided by the standard library can hold any type.
+When we create a vector to hold a specific type, we can specify the type within
+angle brackets. In Listing 8-1, we’ve told Rust that the `Vec<T>` in `v` will
+hold elements of the `i32` type.
+
+More often, you’ll create a `Vec<T>` with initial values and Rust will infer
+the type of value you want to store, so you rarely need to do this type
+annotation. Rust conveniently provides the `vec!` macro, which will create a
+new vector that holds the values you give it. Listing 8-2 creates a new
+`Vec<i32>` that holds the values `1`, `2`, and `3`. The integer type is `i32`
+because that’s the default integer type, as we discussed in the [“Data
+Types”][data-types]<!-- ignore --> section of Chapter 3.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-2: Creating a new vector containing
+values</span>
+
+Because we’ve given initial `i32` values, Rust can infer that the type of `v`
+is `Vec<i32>`, and the type annotation isn’t necessary. Next, we’ll look at how
+to modify a vector.
+
+### Updating a Vector
+
+To create a vector and then add elements to it, we can use the `push` method,
+as shown in Listing 8-3.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-3: Using the `push` method to add values to a
+vector</span>
+
+As with any variable, if we want to be able to change its value, we need to
+make it mutable using the `mut` keyword, as discussed in Chapter 3. The numbers
+we place inside are all of type `i32`, and Rust infers this from the data, so
+we don’t need the `Vec<i32>` annotation.
+
+### Reading Elements of Vectors
+
+There are two ways to reference a value stored in a vector: via indexing or
+using the `get` method. In the following examples, we’ve annotated the types of
+the values that are returned from these functions for extra clarity.
+
+Listing 8-4 shows both methods of accessing a value in a vector, with indexing
+syntax and the `get` method.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-4: Using indexing syntax or the `get` method to
+access an item in a vector</span>
+
+Note a few details here. We use the index value of `2` to get the third element
+because vectors are indexed by number, starting at zero. Using `&` and `[]`
+gives us a reference to the element at the index value. When we use the `get`
+method with the index passed as an argument, we get an `Option<&T>` that we can
+use with `match`.
+
+The reason Rust provides these two ways to reference an element is so you can
+choose how the program behaves when you try to use an index value outside the
+range of existing elements. As an example, let’s see what happens when we have
+a vector of five elements and then we try to access an element at index 100
+with each technique, as shown in Listing 8-5.
+
+```rust,should_panic,panics
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-5: Attempting to access the element at index
+100 in a vector containing five elements</span>
+
+When we run this code, the first `[]` method will cause the program to panic
+because it references a nonexistent element. This method is best used when you
+want your program to crash if there’s an attempt to access an element past the
+end of the vector.
+
+When the `get` method is passed an index that is outside the vector, it returns
+`None` without panicking. You would use this method if accessing an element
+beyond the range of the vector may happen occasionally under normal
+circumstances. Your code will then have logic to handle having either
+`Some(&element)` or `None`, as discussed in Chapter 6. For example, the index
+could be coming from a person entering a number. If they accidentally enter a
+number that’s too large and the program gets a `None` value, you could tell the
+user how many items are in the current vector and give them another chance to
+enter a valid value. That would be more user-friendly than crashing the program
+due to a typo!
+
+When the program has a valid reference, the borrow checker enforces the
+ownership and borrowing rules (covered in Chapter 4) to ensure this reference
+and any other references to the contents of the vector remain valid. Recall the
+rule that states you can’t have mutable and immutable references in the same
+scope. That rule applies in Listing 8-6, where we hold an immutable reference
+to the first element in a vector and try to add an element to the end. This
+program won’t work if we also try to refer to that element later in the
+function:
+
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-6: Attempting to add an element to a vector
+while holding a reference to an item</span>
+
+Compiling this code will result in this error:
+
+
+```console
+{{#include ../listings/ch08-common-collections/listing-08-06/output.txt}}
+```
+
+The code in Listing 8-6 might look like it should work: why should a reference
+to the first element care about changes at the end of the vector? This error is
+due to the way vectors work: because vectors put the values next to each other
+in memory, adding a new element onto the end of the vector might require
+allocating new memory and copying the old elements to the new space, if there
+isn’t enough room to put all the elements next to each other where the vector
+is currently stored. In that case, the reference to the first element would be
+pointing to deallocated memory. The borrowing rules prevent programs from
+ending up in that situation.
+
+> Note: For more on the implementation details of the `Vec<T>` type, see [“The
+> Rustonomicon”][nomicon].
+
+### Iterating over the Values in a Vector
+
+To access each element in a vector in turn, we would iterate through all of the
+elements rather than use indices to access one at a time. Listing 8-7 shows how
+to use a `for` loop to get immutable references to each element in a vector of
+`i32` values and print them.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-7: Printing each element in a vector by
+iterating over the elements using a `for` loop</span>
+
+We can also iterate over mutable references to each element in a mutable vector
+in order to make changes to all the elements. The `for` loop in Listing 8-8
+will add `50` to each element.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-8: Iterating over mutable references to
+elements in a vector</span>
+
+To change the value that the mutable reference refers to, we have to use the
+`*` dereference operator to get to the value in `i` before we can use the `+=`
+operator. We’ll talk more about the dereference operator in the [“Following the
+Pointer to the Value with the Dereference Operator”][deref]<!-- ignore -->
+section of Chapter 15.
+
+Iterating over a vector, whether immutably or mutably, is safe because of the
+borrow checker's rules. If we attempted to insert or remove items in the `for`
+loop bodies in Listing 8-7 and Listing 8-8, we would get a compiler error
+similar to the one we got with the code in Listing 8-6. The reference to the
+vector that the `for` loop holds prevents simultaneous modification of the
+whole vector.
+
+### Using an Enum to Store Multiple Types
+
+Vectors can only store values that are the same type. This can be inconvenient;
+there are definitely use cases for needing to store a list of items of
+different types. Fortunately, the variants of an enum are defined under the
+same enum type, so when we need one type to represent elements of different
+types, we can define and use an enum!
+
+For example, say we want to get values from a row in a spreadsheet in which
+some of the columns in the row contain integers, some floating-point numbers,
+and some strings. We can define an enum whose variants will hold the different
+value types, and all the enum variants will be considered the same type: that
+of the enum. Then we can create a vector to hold that enum and so, ultimately,
+holds different types. We’ve demonstrated this in Listing 8-9.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-9: Defining an `enum` to store values of
+different types in one vector</span>
+
+Rust needs to know what types will be in the vector at compile time so it knows
+exactly how much memory on the heap will be needed to store each element. We
+must also be explicit about what types are allowed in this vector. If Rust
+allowed a vector to hold any type, there would be a chance that one or more of
+the types would cause errors with the operations performed on the elements of
+the vector. Using an enum plus a `match` expression means that Rust will ensure
+at compile time that every possible case is handled, as discussed in Chapter 6.
+
+If you don’t know the exhaustive set of types a program will get at runtime to
+store in a vector, the enum technique won’t work. Instead, you can use a trait
+object, which we’ll cover in Chapter 17.
+
+Now that we’ve discussed some of the most common ways to use vectors, be sure
+to review [the API documentation][vec-api]<!-- ignore --> for all the many
+useful methods defined on `Vec<T>` by the standard library. For example, in
+addition to `push`, a `pop` method removes and returns the last element.
+
+### Dropping a Vector Drops Its Elements
+
+Like any other `struct`, a vector is freed when it goes out of scope, as
+annotated in Listing 8-10.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-10: Showing where the vector and its elements
+are dropped</span>
+
+When the vector gets dropped, all of its contents are also dropped, meaning the
+integers it holds will be cleaned up. The borrow checker ensures that any
+references to contents of a vector are only used while the vector itself is
+valid.
+
+Let’s move on to the next collection type: `String`!
+
+[data-types]: ch03-02-data-types.html#data-types
+[nomicon]: ../nomicon/vec/vec.html
+[vec-api]: ../std/vec/struct.Vec.html
+[deref]: ch15-02-deref.html#following-the-pointer-to-the-value-with-the-dereference-operator
diff --git a/src/doc/book/src/ch08-02-strings.md b/src/doc/book/src/ch08-02-strings.md
new file mode 100644
index 000000000..bf79c3925
--- /dev/null
+++ b/src/doc/book/src/ch08-02-strings.md
@@ -0,0 +1,412 @@
+## Storing UTF-8 Encoded Text with Strings
+
+We talked about strings in Chapter 4, but we’ll look at them in more depth now.
+New Rustaceans commonly get stuck on strings for a combination of three
+reasons: Rust’s propensity for exposing possible errors, strings being a more
+complicated data structure than many programmers give them credit for, and
+UTF-8. These factors combine in a way that can seem difficult when you’re
+coming from other programming languages.
+
+We discuss strings in the context of collections because strings are
+implemented as a collection of bytes, plus some methods to provide useful
+functionality when those bytes are interpreted as text. In this section, we’ll
+talk about the operations on `String` that every collection type has, such as
+creating, updating, and reading. We’ll also discuss the ways in which `String`
+is different from the other collections, namely how indexing into a `String` is
+complicated by the differences between how people and computers interpret
+`String` data.
+
+### What Is a String?
+
+We’ll first define what we mean by the term *string*. Rust has only one string
+type in the core language, which is the string slice `str` that is usually seen
+in its borrowed form `&str`. In Chapter 4, we talked about *string slices*,
+which are references to some UTF-8 encoded string data stored elsewhere. String
+literals, for example, are stored in the program’s binary and are therefore
+string slices.
+
+The `String` type, which is provided by Rust’s standard library rather than
+coded into the core language, is a growable, mutable, owned, UTF-8 encoded
+string type. When Rustaceans refer to “strings” in Rust, they might be
+referring to either the `String` or the string slice `&str` types, not just one
+of those types. Although this section is largely about `String`, both types are
+used heavily in Rust’s standard library, and both `String` and string slices
+are UTF-8 encoded.
+
+### Creating a New String
+
+Many of the same operations available with `Vec<T>` are available with `String`
+as well, because `String` is actually implemented as a wrapper around a vector
+of bytes with some extra guarantees, restrictions, and capabilities. An example
+of a function that works the same way with `Vec<T>` and `String` is the `new`
+function to create an instance, shown in Listing 8-11.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-11: Creating a new, empty `String`</span>
+
+This line creates a new empty string called `s`, which we can then load data
+into. Often, we’ll have some initial data that we want to start the string
+with. For that, we use the `to_string` method, which is available on any type
+that implements the `Display` trait, as string literals do. Listing 8-12 shows
+two examples.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-12/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-12: Using the `to_string` method to create a
+`String` from a string literal</span>
+
+This code creates a string containing `initial contents`.
+
+We can also use the function `String::from` to create a `String` from a string
+literal. The code in Listing 8-13 is equivalent to the code from Listing 8-12
+that uses `to_string`.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-13/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-13: Using the `String::from` function to create
+a `String` from a string literal</span>
+
+Because strings are used for so many things, we can use many different generic
+APIs for strings, providing us with a lot of options. Some of them can seem
+redundant, but they all have their place! In this case, `String::from` and
+`to_string` do the same thing, so which you choose is a matter of style and
+readability.
+
+Remember that strings are UTF-8 encoded, so we can include any properly encoded
+data in them, as shown in Listing 8-14.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-14/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-14: Storing greetings in different languages in
+strings</span>
+
+All of these are valid `String` values.
+
+### Updating a String
+
+A `String` can grow in size and its contents can change, just like the contents
+of a `Vec<T>`, if you push more data into it. In addition, you can conveniently
+use the `+` operator or the `format!` macro to concatenate `String` values.
+
+#### Appending to a String with `push_str` and `push`
+
+We can grow a `String` by using the `push_str` method to append a string slice,
+as shown in Listing 8-15.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-15/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-15: Appending a string slice to a `String`
+using the `push_str` method</span>
+
+After these two lines, `s` will contain `foobar`. The `push_str` method takes a
+string slice because we don’t necessarily want to take ownership of the
+parameter. For example, in the code in Listing 8-16, we want to be able to use
+`s2` after appending its contents to `s1`.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-16/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-16: Using a string slice after appending its
+contents to a `String`</span>
+
+If the `push_str` method took ownership of `s2`, we wouldn’t be able to print
+its value on the last line. However, this code works as we’d expect!
+
+The `push` method takes a single character as a parameter and adds it to the
+`String`. Listing 8-17 adds the letter “l” to a `String` using the `push`
+method.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-17/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-17: Adding one character to a `String` value
+using `push`</span>
+
+As a result, `s` will contain `lol`.
+
+#### Concatenation with the `+` Operator or the `format!` Macro
+
+Often, you’ll want to combine two existing strings. One way to do so is to use
+the `+` operator, as shown in Listing 8-18.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-18/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-18: Using the `+` operator to combine two
+`String` values into a new `String` value</span>
+
+The string `s3` will contain `Hello, world!`. The reason `s1` is no longer
+valid after the addition, and the reason we used a reference to `s2`, has to do
+with the signature of the method that’s called when we use the `+` operator.
+The `+` operator uses the `add` method, whose signature looks something like
+this:
+
+```rust,ignore
+fn add(self, s: &str) -> String {
+```
+
+In the standard library, you'll see `add` defined using generics and associated
+types. Here, we’ve substituted in concrete types, which is what happens when we
+call this method with `String` values. We’ll discuss generics in Chapter 10.
+This signature gives us the clues we need to understand the tricky bits of the
+`+` operator.
+
+First, `s2` has an `&`, meaning that we’re adding a *reference* of the second
+string to the first string. This is because of the `s` parameter in the `add`
+function: we can only add a `&str` to a `String`; we can’t add two `String`
+values together. But wait—the type of `&s2` is `&String`, not `&str`, as
+specified in the second parameter to `add`. So why does Listing 8-18 compile?
+
+The reason we’re able to use `&s2` in the call to `add` is that the compiler
+can *coerce* the `&String` argument into a `&str`. When we call the `add`
+method, Rust uses a *deref coercion*, which here turns `&s2` into `&s2[..]`.
+We’ll discuss deref coercion in more depth in Chapter 15. Because `add` does
+not take ownership of the `s` parameter, `s2` will still be a valid `String`
+after this operation.
+
+Second, we can see in the signature that `add` takes ownership of `self`,
+because `self` does *not* have an `&`. This means `s1` in Listing 8-18 will be
+moved into the `add` call and will no longer be valid after that. So although
+`let s3 = s1 + &s2;` looks like it will copy both strings and create a new one,
+this statement actually takes ownership of `s1`, appends a copy of the contents
+of `s2`, and then returns ownership of the result. In other words, it looks
+like it’s making a lot of copies but isn’t; the implementation is more
+efficient than copying.
+
+If we need to concatenate multiple strings, the behavior of the `+` operator
+gets unwieldy:
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/no-listing-01-concat-multiple-strings/src/main.rs:here}}
+```
+
+At this point, `s` will be `tic-tac-toe`. With all of the `+` and `"`
+characters, it’s difficult to see what’s going on. For more complicated string
+combining, we can instead use the `format!` macro:
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/no-listing-02-format/src/main.rs:here}}
+```
+
+This code also sets `s` to `tic-tac-toe`. The `format!` macro works like
+`println!`, but instead of printing the output to the screen, it returns a
+`String` with the contents. The version of the code using `format!` is much
+easier to read, and the code generated by the `format!` macro uses references
+so that this call doesn’t take ownership of any of its parameters.
+
+### Indexing into Strings
+
+In many other programming languages, accessing individual characters in a
+string by referencing them by index is a valid and common operation. However,
+if you try to access parts of a `String` using indexing syntax in Rust, you’ll
+get an error. Consider the invalid code in Listing 8-19.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-19/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-19: Attempting to use indexing syntax with a
+String</span>
+
+This code will result in the following error:
+
+```console
+{{#include ../listings/ch08-common-collections/listing-08-19/output.txt}}
+```
+
+The error and the note tell the story: Rust strings don’t support indexing. But
+why not? To answer that question, we need to discuss how Rust stores strings in
+memory.
+
+#### Internal Representation
+
+A `String` is a wrapper over a `Vec<u8>`. Let’s look at some of our properly
+encoded UTF-8 example strings from Listing 8-14. First, this one:
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-14/src/main.rs:spanish}}
+```
+
+In this case, `len` will be 4, which means the vector storing the string “Hola”
+is 4 bytes long. Each of these letters takes 1 byte when encoded in UTF-8. The
+following line, however, may surprise you. (Note that this string begins with
+the capital Cyrillic letter Ze, not the Arabic number 3.)
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-14/src/main.rs:russian}}
+```
+
+Asked how long the string is, you might say 12. In fact, Rust’s answer is 24:
+that’s the number of bytes it takes to encode “Здравствуйте” in UTF-8, because
+each Unicode scalar value in that string takes 2 bytes of storage. Therefore,
+an index into the string’s bytes will not always correlate to a valid Unicode
+scalar value. To demonstrate, consider this invalid Rust code:
+
+```rust,ignore,does_not_compile
+let hello = "Здравствуйте";
+let answer = &hello[0];
+```
+
+You already know that `answer` will not be `З`, the first letter. When encoded
+in UTF-8, the first byte of `З` is `208` and the second is `151`, so it would
+seem that `answer` should in fact be `208`, but `208` is not a valid character
+on its own. Returning `208` is likely not what a user would want if they asked
+for the first letter of this string; however, that’s the only data that Rust
+has at byte index 0. Users generally don’t want the byte value returned, even
+if the string contains only Latin letters: if `&"hello"[0]` were valid code
+that returned the byte value, it would return `104`, not `h`.
+
+The answer, then, is that to avoid returning an unexpected value and causing
+bugs that might not be discovered immediately, Rust doesn’t compile this code
+at all and prevents misunderstandings early in the development process.
+
+#### Bytes and Scalar Values and Grapheme Clusters! Oh My!
+
+Another point about UTF-8 is that there are actually three relevant ways to
+look at strings from Rust’s perspective: as bytes, scalar values, and grapheme
+clusters (the closest thing to what we would call *letters*).
+
+If we look at the Hindi word “नमस्ते” written in the Devanagari script, it is
+stored as a vector of `u8` values that looks like this:
+
+```text
+[224, 164, 168, 224, 164, 174, 224, 164, 184, 224, 165, 141, 224, 164, 164,
+224, 165, 135]
+```
+
+That’s 18 bytes and is how computers ultimately store this data. If we look at
+them as Unicode scalar values, which are what Rust’s `char` type is, those
+bytes look like this:
+
+```text
+['न', 'म', 'स', '्', 'त', 'े']
+```
+
+There are six `char` values here, but the fourth and sixth are not letters:
+they’re diacritics that don’t make sense on their own. Finally, if we look at
+them as grapheme clusters, we’d get what a person would call the four letters
+that make up the Hindi word:
+
+```text
+["न", "म", "स्", "ते"]
+```
+
+Rust provides different ways of interpreting the raw string data that computers
+store so that each program can choose the interpretation it needs, no matter
+what human language the data is in.
+
+A final reason Rust doesn’t allow us to index into a `String` to get a
+character is that indexing operations are expected to always take constant time
+(O(1)). But it isn’t possible to guarantee that performance with a `String`,
+because Rust would have to walk through the contents from the beginning to the
+index to determine how many valid characters there were.
+
+### Slicing Strings
+
+Indexing into a string is often a bad idea because it’s not clear what the
+return type of the string-indexing operation should be: a byte value, a
+character, a grapheme cluster, or a string slice. If you really need to use
+indices to create string slices, therefore, Rust asks you to be more specific.
+
+Rather than indexing using `[]` with a single number, you can use `[]` with a
+range to create a string slice containing particular bytes:
+
+```rust
+let hello = "Здравствуйте";
+
+let s = &hello[0..4];
+```
+
+Here, `s` will be a `&str` that contains the first 4 bytes of the string.
+Earlier, we mentioned that each of these characters was 2 bytes, which means
+`s` will be `Зд`.
+
+If we were to try to slice only part of a character’s bytes with something like
+`&hello[0..1]`, Rust would panic at runtime in the same way as if an invalid
+index were accessed in a vector:
+
+```console
+{{#include ../listings/ch08-common-collections/output-only-01-not-char-boundary/output.txt}}
+```
+
+You should use ranges to create string slices with caution, because doing so
+can crash your program.
+
+### Methods for Iterating Over Strings
+
+The best way to operate on pieces of strings is to be explicit about whether
+you want characters or bytes. For individual Unicode scalar values, use the
+`chars` method. Calling `chars` on “Зд” separates out and returns two values
+of type `char`, and you can iterate over the result to access each element:
+
+```rust
+for c in "Зд".chars() {
+ println!("{}", c);
+}
+```
+
+This code will print the following:
+
+```text
+```
+
+Alternatively, the `bytes` method returns each raw byte, which might be
+appropriate for your domain:
+
+```rust
+for b in "Зд".bytes() {
+ println!("{}", b);
+}
+```
+
+This code will print the four bytes that make up this string:
+
+```text
+208
+151
+208
+180
+```
+
+But be sure to remember that valid Unicode scalar values may be made up of more
+than 1 byte.
+
+Getting grapheme clusters from strings as with the Devanagari script is
+complex, so this functionality is not provided by the standard library. Crates
+are available on [crates.io](https://crates.io/)<!-- ignore --> if this is the
+functionality you need.
+
+### Strings Are Not So Simple
+
+To summarize, strings are complicated. Different programming languages make
+different choices about how to present this complexity to the programmer. Rust
+has chosen to make the correct handling of `String` data the default behavior
+for all Rust programs, which means programmers have to put more thought into
+handling UTF-8 data upfront. This trade-off exposes more of the complexity of
+strings than is apparent in other programming languages, but it prevents you
+from having to handle errors involving non-ASCII characters later in your
+development life cycle.
+
+The good news is that the standard library offers a lot of functionality built
+off the `String` and `&str` types to help handle these complex situations
+correctly. Be sure to check out the documentation for useful methods like
+`contains` for searching in a string and `replace` for substituting parts of a
+string with another string.
+
+Let’s switch to something a bit less complex: hash maps!
diff --git a/src/doc/book/src/ch08-03-hash-maps.md b/src/doc/book/src/ch08-03-hash-maps.md
new file mode 100644
index 000000000..6322f1324
--- /dev/null
+++ b/src/doc/book/src/ch08-03-hash-maps.md
@@ -0,0 +1,242 @@
+## Storing Keys with Associated Values in Hash Maps
+
+The last of our common collections is the *hash map*. The type `HashMap<K, V>`
+stores a mapping of keys of type `K` to values of type `V` using a
+*hashing function*, which determines how it places these keys and values into
+memory. Many programming languages support this kind of data structure, but
+they often use a different name, such as hash, map, object, hash table,
+dictionary, or associative array, just to name a few.
+
+Hash maps are useful when you want to look up data not by using an index, as
+you can with vectors, but by using a key that can be of any type. For example,
+in a game, you could keep track of each team’s score in a hash map in which
+each key is a team’s name and the values are each team’s score. Given a team
+name, you can retrieve its score.
+
+We’ll go over the basic API of hash maps in this section, but many more goodies
+are hiding in the functions defined on `HashMap<K, V>` by the standard library.
+As always, check the standard library documentation for more information.
+
+### Creating a New Hash Map
+
+One way to create an empty hash map is using `new` and adding elements with
+`insert`. In Listing 8-20, we’re keeping track of the scores of two teams whose
+names are *Blue* and *Yellow*. The Blue team starts with 10 points, and the
+Yellow team starts with 50.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-20/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-20: Creating a new hash map and inserting some
+keys and values</span>
+
+Note that we need to first `use` the `HashMap` from the collections portion of
+the standard library. Of our three common collections, this one is the least
+often used, so it’s not included in the features brought into scope
+automatically in the prelude. Hash maps also have less support from the
+standard library; there’s no built-in macro to construct them, for example.
+
+Just like vectors, hash maps store their data on the heap. This `HashMap` has
+keys of type `String` and values of type `i32`. Like vectors, hash maps are
+homogeneous: all of the keys must have the same type as each other, and all of
+the values must have the same type.
+
+### Accessing Values in a Hash Map
+
+We can get a value out of the hash map by providing its key to the `get`
+method, as shown in Listing 8-21.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-21/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-21: Accessing the score for the Blue team
+stored in the hash map</span>
+
+Here, `score` will have the value that’s associated with the Blue team, and the
+result will be `10`. The `get` method returns an `Option<&V>`; if there’s no
+value for that key in the hash map, `get` will return `None`. This program
+handles the `Option` by calling `copied` to get an `Option<i32>` rather than an
+`Option<&i32>`, then `unwrap_or` to set `score` to zero if `scores` doesn't
+have an entry for the key.
+
+We can iterate over each key/value pair in a hash map in a similar manner as we
+do with vectors, using a `for` loop:
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/no-listing-03-iterate-over-hashmap/src/main.rs:here}}
+```
+
+This code will print each pair in an arbitrary order:
+
+```text
+Yellow: 50
+Blue: 10
+```
+
+### Hash Maps and Ownership
+
+For types that implement the `Copy` trait, like `i32`, the values are copied
+into the hash map. For owned values like `String`, the values will be moved and
+the hash map will be the owner of those values, as demonstrated in Listing 8-22.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-22/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-22: Showing that keys and values are owned by
+the hash map once they’re inserted</span>
+
+We aren’t able to use the variables `field_name` and `field_value` after
+they’ve been moved into the hash map with the call to `insert`.
+
+If we insert references to values into the hash map, the values won’t be moved
+into the hash map. The values that the references point to must be valid for at
+least as long as the hash map is valid. We’ll talk more about these issues in
+the [“Validating References with
+Lifetimes”][validating-references-with-lifetimes]<!-- ignore --> section in
+Chapter 10.
+
+### Updating a Hash Map
+
+Although the number of key and value pairs is growable, each unique key can
+only have one value associated with it at a time (but not vice versa: for
+example, both the Blue team and the Yellow team could have value 10 stored in
+the `scores` hash map).
+
+When you want to change the data in a hash map, you have to decide how to
+handle the case when a key already has a value assigned. You could replace the
+old value with the new value, completely disregarding the old value. You could
+keep the old value and ignore the new value, only adding the new value if the
+key *doesn’t* already have a value. Or you could combine the old value and the
+new value. Let’s look at how to do each of these!
+
+#### Overwriting a Value
+
+If we insert a key and a value into a hash map and then insert that same key
+with a different value, the value associated with that key will be replaced.
+Even though the code in Listing 8-23 calls `insert` twice, the hash map will
+only contain one key/value pair because we’re inserting the value for the Blue
+team’s key both times.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-23/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-23: Replacing a value stored with a particular
+key</span>
+
+This code will print `{"Blue": 25}`. The original value of `10` has been
+overwritten.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="only-inserting-a-value-if-the-key-has-no-value"></a>
+
+#### Adding a Key and Value Only If a Key Isn’t Present
+
+It’s common to check whether a particular key already exists in the hash map
+with a value then take the following actions: if the key does exist in the hash
+map, the existing value should remain the way it is. If the key doesn’t exist,
+insert it and a value for it.
+
+Hash maps have a special API for this called `entry` that takes the key you
+want to check as a parameter. The return value of the `entry` method is an enum
+called `Entry` that represents a value that might or might not exist. Let’s say
+we want to check whether the key for the Yellow team has a value associated
+with it. If it doesn’t, we want to insert the value 50, and the same for the
+Blue team. Using the `entry` API, the code looks like Listing 8-24.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-24/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-24: Using the `entry` method to only insert if
+the key does not already have a value</span>
+
+The `or_insert` method on `Entry` is defined to return a mutable reference to
+the value for the corresponding `Entry` key if that key exists, and if not,
+inserts the parameter as the new value for this key and returns a mutable
+reference to the new value. This technique is much cleaner than writing the
+logic ourselves and, in addition, plays more nicely with the borrow checker.
+
+Running the code in Listing 8-24 will print `{"Yellow": 50, "Blue": 10}`. The
+first call to `entry` will insert the key for the Yellow team with the value
+50 because the Yellow team doesn’t have a value already. The second call to
+`entry` will not change the hash map because the Blue team already has the
+value 10.
+
+#### Updating a Value Based on the Old Value
+
+Another common use case for hash maps is to look up a key’s value and then
+update it based on the old value. For instance, Listing 8-25 shows code that
+counts how many times each word appears in some text. We use a hash map with
+the words as keys and increment the value to keep track of how many times we’ve
+seen that word. If it’s the first time we’ve seen a word, we’ll first insert
+the value 0.
+
+```rust
+{{#rustdoc_include ../listings/ch08-common-collections/listing-08-25/src/main.rs:here}}
+```
+
+<span class="caption">Listing 8-25: Counting occurrences of words using a hash
+map that stores words and counts</span>
+
+This code will print `{"world": 2, "hello": 1, "wonderful": 1}`. You might see
+the same key/value pairs printed in a different order: recall from the
+[“Accessing Values in a Hash Map”][access]<!-- ignore --> section that
+iterating over a hash map happens in an arbitrary order.
+
+The `split_whitespace` method returns an iterator over sub-slices, separated by
+whitespace, of the value in `text`. The `or_insert` method returns a mutable
+reference (`&mut V`) to the value for the specified key. Here we store that
+mutable reference in the `count` variable, so in order to assign to that value,
+we must first dereference `count` using the asterisk (`*`). The mutable
+reference goes out of scope at the end of the `for` loop, so all of these
+changes are safe and allowed by the borrowing rules.
+
+### Hashing Functions
+
+By default, `HashMap` uses a hashing function called *SipHash* that can provide
+resistance to Denial of Service (DoS) attacks involving hash
+tables[^siphash]<!-- ignore -->. This is not the fastest hashing algorithm
+available, but the trade-off for better security that comes with the drop in
+performance is worth it. If you profile your code and find that the default
+hash function is too slow for your purposes, you can switch to another function
+by specifying a different hasher. A *hasher* is a type that implements the
+`BuildHasher` trait. We’ll talk about traits and how to implement them in
+Chapter 10. You don’t necessarily have to implement your own hasher from
+scratch; [crates.io](https://crates.io/)<!-- ignore --> has libraries shared by
+other Rust users that provide hashers implementing many common hashing
+algorithms.
+
+[^siphash]: [https://en.wikipedia.org/wiki/SipHash](https://en.wikipedia.org/wiki/SipHash)
+
+## Summary
+
+Vectors, strings, and hash maps will provide a large amount of functionality
+necessary in programs when you need to store, access, and modify data. Here are
+some exercises you should now be equipped to solve:
+
+* Given a list of integers, use a vector and return the median (when sorted,
+ the value in the middle position) and mode (the value that occurs most often;
+ a hash map will be helpful here) of the list.
+* Convert strings to pig latin. The first consonant of each word is moved to
+ the end of the word and “ay” is added, so “first” becomes “irst-fay.” Words
+ that start with a vowel have “hay” added to the end instead (“apple” becomes
+ “apple-hay”). Keep in mind the details about UTF-8 encoding!
+* Using a hash map and vectors, create a text interface to allow a user to add
+ employee names to a department in a company. For example, “Add Sally to
+ Engineering” or “Add Amir to Sales.” Then let the user retrieve a list of all
+ people in a department or all people in the company by department, sorted
+ alphabetically.
+
+The standard library API documentation describes methods that vectors, strings,
+and hash maps have that will be helpful for these exercises!
+
+We’re getting into more complex programs in which operations can fail, so, it’s
+a perfect time to discuss error handling. We’ll do that next!
+
+[validating-references-with-lifetimes]:
+ch10-03-lifetime-syntax.html#validating-references-with-lifetimes
+[access]: #accessing-values-in-a-hash-map
diff --git a/src/doc/book/src/ch09-00-error-handling.md b/src/doc/book/src/ch09-00-error-handling.md
new file mode 100644
index 000000000..790955c59
--- /dev/null
+++ b/src/doc/book/src/ch09-00-error-handling.md
@@ -0,0 +1,24 @@
+# Error Handling
+
+Errors are a fact of life in software, so Rust has a number of features for
+handling situations in which something goes wrong. In many cases, Rust requires
+you to acknowledge the possibility of an error and take some action before your
+code will compile. This requirement makes your program more robust by ensuring
+that you’ll discover errors and handle them appropriately before you’ve
+deployed your code to production!
+
+Rust groups errors into two major categories: *recoverable* and *unrecoverable*
+errors. For a recoverable error, such as a *file not found* error, we most
+likely just want to report the problem to the user and retry the operation.
+Unrecoverable errors are always symptoms of bugs, like trying to access a
+location beyond the end of an array, and so we want to immediately stop the
+program.
+
+Most languages don’t distinguish between these two kinds of errors and handle
+both in the same way, using mechanisms such as exceptions. Rust doesn’t have
+exceptions. Instead, it has the type `Result<T, E>` for recoverable errors and
+the `panic!` macro that stops execution when the program encounters an
+unrecoverable error. This chapter covers calling `panic!` first and then talks
+about returning `Result<T, E>` values. Additionally, we’ll explore
+considerations when deciding whether to try to recover from an error or to stop
+execution.
diff --git a/src/doc/book/src/ch09-01-unrecoverable-errors-with-panic.md b/src/doc/book/src/ch09-01-unrecoverable-errors-with-panic.md
new file mode 100644
index 000000000..f5b9fefb8
--- /dev/null
+++ b/src/doc/book/src/ch09-01-unrecoverable-errors-with-panic.md
@@ -0,0 +1,165 @@
+## Unrecoverable Errors with `panic!`
+
+Sometimes, bad things happen in your code, and there’s nothing you can do about
+it. In these cases, Rust has the `panic!` macro. There are two ways to cause a
+panic in practice: by taking an action that causes our code to panic (such as
+accessing an array past the end) or by explicitly calling the `panic!` macro.
+In both cases, we cause a panic in our program. By default, these panics will
+print a failure message, unwind, clean up the stack, and quit. Via an
+environment variable, you can also have Rust display the call stack when a
+panic occurs to make it easier to track down the source of the panic.
+
+> ### Unwinding the Stack or Aborting in Response to a Panic
+>
+> By default, when a panic occurs, the program starts *unwinding*, which
+> means Rust walks back up the stack and cleans up the data from each function
+> it encounters. However, this walking back and cleanup is a lot of work. Rust,
+> therefore, allows you to choose the alternative of immediately *aborting*,
+> which ends the program without cleaning up.
+>
+> Memory that the program was using will then need to be cleaned
+> up by the operating system. If in your project you need to make the resulting
+> binary as small as possible, you can switch from unwinding to aborting upon a
+> panic by adding `panic = 'abort'` to the appropriate `[profile]` sections in
+> your *Cargo.toml* file. For example, if you want to abort on panic in release
+> mode, add this:
+>
+> ```toml
+> [profile.release]
+> panic = 'abort'
+> ```
+
+Let’s try calling `panic!` in a simple program:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic,panics
+{{#rustdoc_include ../listings/ch09-error-handling/no-listing-01-panic/src/main.rs}}
+```
+
+When you run the program, you’ll see something like this:
+
+```console
+{{#include ../listings/ch09-error-handling/no-listing-01-panic/output.txt}}
+```
+
+The call to `panic!` causes the error message contained in the last two lines.
+The first line shows our panic message and the place in our source code where
+the panic occurred: *src/main.rs:2:5* indicates that it’s the second line,
+fifth character of our *src/main.rs* file.
+
+In this case, the line indicated is part of our code, and if we go to that
+line, we see the `panic!` macro call. In other cases, the `panic!` call might
+be in code that our code calls, and the filename and line number reported by
+the error message will be someone else’s code where the `panic!` macro is
+called, not the line of our code that eventually led to the `panic!` call. We
+can use the backtrace of the functions the `panic!` call came from to figure
+out the part of our code that is causing the problem. We’ll discuss backtraces
+in more detail next.
+
+### Using a `panic!` Backtrace
+
+Let’s look at another example to see what it’s like when a `panic!` call comes
+from a library because of a bug in our code instead of from our code calling
+the macro directly. Listing 9-1 has some code that attempts to access an
+index in a vector beyond the range of valid indexes.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic,panics
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-01/src/main.rs}}
+```
+
+<span class="caption">Listing 9-1: Attempting to access an element beyond the
+end of a vector, which will cause a call to `panic!`</span>
+
+Here, we’re attempting to access the 100th element of our vector (which is at
+index 99 because indexing starts at zero), but the vector has only 3 elements.
+In this situation, Rust will panic. Using `[]` is supposed to return an
+element, but if you pass an invalid index, there’s no element that Rust could
+return here that would be correct.
+
+In C, attempting to read beyond the end of a data structure is undefined
+behavior. You might get whatever is at the location in memory that would
+correspond to that element in the data structure, even though the memory
+doesn’t belong to that structure. This is called a *buffer overread* and can
+lead to security vulnerabilities if an attacker is able to manipulate the index
+in such a way as to read data they shouldn’t be allowed to that is stored after
+the data structure.
+
+To protect your program from this sort of vulnerability, if you try to read an
+element at an index that doesn’t exist, Rust will stop execution and refuse to
+continue. Let’s try it and see:
+
+```console
+{{#include ../listings/ch09-error-handling/listing-09-01/output.txt}}
+```
+
+This error points at line 4 of our `main.rs` where we attempt to access index
+99. The next note line tells us that we can set the `RUST_BACKTRACE`
+environment variable to get a backtrace of exactly what happened to cause the
+error. A *backtrace* is a list of all the functions that have been called to
+get to this point. Backtraces in Rust work as they do in other languages: the
+key to reading the backtrace is to start from the top and read until you see
+files you wrote. That’s the spot where the problem originated. The lines above
+that spot are code that your code has called; the lines below are code that
+called your code. These before-and-after lines might include core Rust code,
+standard library code, or crates that you’re using. Let’s try getting a
+backtrace by setting the `RUST_BACKTRACE` environment variable to any value
+except 0. Listing 9-2 shows output similar to what you’ll see.
+
+<!-- manual-regeneration
+cd listings/ch09-error-handling/listing-09-01
+RUST_BACKTRACE=1 cargo run
+copy the backtrace output below
+check the backtrace number mentioned in the text below the listing
+-->
+
+```console
+$ RUST_BACKTRACE=1 cargo run
+thread 'main' panicked at 'index out of bounds: the len is 3 but the index is 99', src/main.rs:4:5
+stack backtrace:
+ 0: rust_begin_unwind
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/std/src/panicking.rs:483
+ 1: core::panicking::panic_fmt
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/panicking.rs:85
+ 2: core::panicking::panic_bounds_check
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/panicking.rs:62
+ 3: <usize as core::slice::index::SliceIndex<[T]>>::index
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/slice/index.rs:255
+ 4: core::slice::index::<impl core::ops::index::Index<I> for [T]>::index
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/slice/index.rs:15
+ 5: <alloc::vec::Vec<T> as core::ops::index::Index<I>>::index
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/alloc/src/vec.rs:1982
+ 6: panic::main
+ at ./src/main.rs:4
+ 7: core::ops::function::FnOnce::call_once
+ at /rustc/7eac88abb2e57e752f3302f02be5f3ce3d7adfb4/library/core/src/ops/function.rs:227
+note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
+```
+
+<span class="caption">Listing 9-2: The backtrace generated by a call to
+`panic!` displayed when the environment variable `RUST_BACKTRACE` is set</span>
+
+That’s a lot of output! The exact output you see might be different depending
+on your operating system and Rust version. In order to get backtraces with this
+information, debug symbols must be enabled. Debug symbols are enabled by
+default when using `cargo build` or `cargo run` without the `--release` flag,
+as we have here.
+
+In the output in Listing 9-2, line 6 of the backtrace points to the line in our
+project that’s causing the problem: line 4 of *src/main.rs*. If we don’t want
+our program to panic, we should start our investigation at the location pointed
+to by the first line mentioning a file we wrote. In Listing 9-1, where we
+deliberately wrote code that would panic, the way to fix the panic is to not
+request an element beyond the range of the vector indexes. When your code
+panics in the future, you’ll need to figure out what action the code is taking
+with what values to cause the panic and what the code should do instead.
+
+We’ll come back to `panic!` and when we should and should not use `panic!` to
+handle error conditions in the [“To `panic!` or Not to
+`panic!`”][to-panic-or-not-to-panic]<!-- ignore --> section later in this
+chapter. Next, we’ll look at how to recover from an error using `Result`.
+
+[to-panic-or-not-to-panic]:
+ch09-03-to-panic-or-not-to-panic.html#to-panic-or-not-to-panic
diff --git a/src/doc/book/src/ch09-02-recoverable-errors-with-result.md b/src/doc/book/src/ch09-02-recoverable-errors-with-result.md
new file mode 100644
index 000000000..61931f08d
--- /dev/null
+++ b/src/doc/book/src/ch09-02-recoverable-errors-with-result.md
@@ -0,0 +1,537 @@
+## Recoverable Errors with `Result`
+
+Most errors aren’t serious enough to require the program to stop entirely.
+Sometimes, when a function fails, it’s for a reason that you can easily
+interpret and respond to. For example, if you try to open a file and that
+operation fails because the file doesn’t exist, you might want to create the
+file instead of terminating the process.
+
+Recall from [“Handling Potential Failure with the `Result`
+Type”][handle_failure]<!-- ignore --> in Chapter 2 that the `Result` enum is
+defined as having two variants, `Ok` and `Err`, as follows:
+
+```rust
+enum Result<T, E> {
+ Ok(T),
+ Err(E),
+}
+```
+
+The `T` and `E` are generic type parameters: we’ll discuss generics in more
+detail in Chapter 10. What you need to know right now is that `T` represents
+the type of the value that will be returned in a success case within the `Ok`
+variant, and `E` represents the type of the error that will be returned in a
+failure case within the `Err` variant. Because `Result` has these generic type
+parameters, we can use the `Result` type and the functions defined on it in
+many different situations where the successful value and error value we want to
+return may differ.
+
+Let’s call a function that returns a `Result` value because the function could
+fail. In Listing 9-3 we try to open a file.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-03/src/main.rs}}
+```
+
+<span class="caption">Listing 9-3: Opening a file</span>
+
+The return type of `File::open` is a `Result<T, E>`. The generic parameter `T`
+has been filled in by the implementation of `File::open` with the type of the
+success value, `std::fs::File`, which is a file handle. The type of `E` used in
+the error value is `std::io::Error`. This return type means the call to
+`File::open` might succeed and return a file handle that we can read from or
+write to. The function call also might fail: for example, the file might not
+exist, or we might not have permission to access the file. The `File::open`
+function needs to have a way to tell us whether it succeeded or failed and at
+the same time give us either the file handle or error information. This
+information is exactly what the `Result` enum conveys.
+
+In the case where `File::open` succeeds, the value in the variable
+`greeting_file_result` will be an instance of `Ok` that contains a file handle.
+In the case where it fails, the value in `greeting_file_result` will be an
+instance of `Err` that contains more information about the kind of error that
+happened.
+
+We need to add to the code in Listing 9-3 to take different actions depending
+on the value `File::open` returns. Listing 9-4 shows one way to handle the
+`Result` using a basic tool, the `match` expression that we discussed in
+Chapter 6.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-04/src/main.rs}}
+```
+
+<span class="caption">Listing 9-4: Using a `match` expression to handle the
+`Result` variants that might be returned</span>
+
+Note that, like the `Option` enum, the `Result` enum and its variants have been
+brought into scope by the prelude, so we don’t need to specify `Result::`
+before the `Ok` and `Err` variants in the `match` arms.
+
+When the result is `Ok`, this code will return the inner `file` value out of
+the `Ok` variant, and we then assign that file handle value to the variable
+`greeting_file`. After the `match`, we can use the file handle for reading or
+writing.
+
+The other arm of the `match` handles the case where we get an `Err` value from
+`File::open`. In this example, we’ve chosen to call the `panic!` macro. If
+there’s no file named *hello.txt* in our current directory and we run this
+code, we’ll see the following output from the `panic!` macro:
+
+```console
+{{#include ../listings/ch09-error-handling/listing-09-04/output.txt}}
+```
+
+As usual, this output tells us exactly what has gone wrong.
+
+### Matching on Different Errors
+
+The code in Listing 9-4 will `panic!` no matter why `File::open` failed.
+However, we want to take different actions for different failure reasons: if
+`File::open` failed because the file doesn’t exist, we want to create the file
+and return the handle to the new file. If `File::open` failed for any other
+reason—for example, because we didn’t have permission to open the file—we still
+want the code to `panic!` in the same way as it did in Listing 9-4. For this we
+add an inner `match` expression, shown in Listing 9-5.
+
+<span class="filename">Filename: src/main.rs</span>
+
+<!-- ignore this test because otherwise it creates hello.txt which causes other
+tests to fail lol -->
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-05/src/main.rs}}
+```
+
+<span class="caption">Listing 9-5: Handling different kinds of errors in
+different ways</span>
+
+The type of the value that `File::open` returns inside the `Err` variant is
+`io::Error`, which is a struct provided by the standard library. This struct
+has a method `kind` that we can call to get an `io::ErrorKind` value. The enum
+`io::ErrorKind` is provided by the standard library and has variants
+representing the different kinds of errors that might result from an `io`
+operation. The variant we want to use is `ErrorKind::NotFound`, which indicates
+the file we’re trying to open doesn’t exist yet. So we match on
+`greeting_file_result`, but we also have an inner match on `error.kind()`.
+
+The condition we want to check in the inner match is whether the value returned
+by `error.kind()` is the `NotFound` variant of the `ErrorKind` enum. If it is,
+we try to create the file with `File::create`. However, because `File::create`
+could also fail, we need a second arm in the inner `match` expression. When the
+file can’t be created, a different error message is printed. The second arm of
+the outer `match` stays the same, so the program panics on any error besides
+the missing file error.
+
+> ### Alternatives to Using `match` with `Result<T, E>`
+>
+> That’s a lot of `match`! The `match` expression is very useful but also very
+> much a primitive. In Chapter 13, you’ll learn about closures, which are used
+> with many of the methods defined on `Result<T, E>`. These methods can be more
+> concise than using `match` when handling `Result<T, E>` values in your code.
+>
+> For example, here’s another way to write the same logic as shown in Listing
+> 9-5, this time using closures and the `unwrap_or_else` method:
+>
+> <!-- CAN'T EXTRACT SEE https://github.com/rust-lang/mdBook/issues/1127 -->
+>
+> ```rust,ignore
+> use std::fs::File;
+> use std::io::ErrorKind;
+>
+> fn main() {
+> let greeting_file = File::open("hello.txt").unwrap_or_else(|error| {
+> if error.kind() == ErrorKind::NotFound {
+> File::create("hello.txt").unwrap_or_else(|error| {
+> panic!("Problem creating the file: {:?}", error);
+> })
+> } else {
+> panic!("Problem opening the file: {:?}", error);
+> }
+> });
+> }
+> ```
+>
+> Although this code has the same behavior as Listing 9-5, it doesn’t contain
+> any `match` expressions and is cleaner to read. Come back to this example
+> after you’ve read Chapter 13, and look up the `unwrap_or_else` method in the
+> standard library documentation. Many more of these methods can clean up huge
+> nested `match` expressions when you’re dealing with errors.
+
+### Shortcuts for Panic on Error: `unwrap` and `expect`
+
+Using `match` works well enough, but it can be a bit verbose and doesn’t always
+communicate intent well. The `Result<T, E>` type has many helper methods
+defined on it to do various, more specific tasks. The `unwrap` method is a
+shortcut method implemented just like the `match` expression we wrote in
+Listing 9-4. If the `Result` value is the `Ok` variant, `unwrap` will return
+the value inside the `Ok`. If the `Result` is the `Err` variant, `unwrap` will
+call the `panic!` macro for us. Here is an example of `unwrap` in action:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic
+{{#rustdoc_include ../listings/ch09-error-handling/no-listing-04-unwrap/src/main.rs}}
+```
+
+If we run this code without a *hello.txt* file, we’ll see an error message from
+the `panic!` call that the `unwrap` method makes:
+
+<!-- manual-regeneration
+cd listings/ch09-error-handling/no-listing-04-unwrap
+cargo run
+copy and paste relevant text
+-->
+
+```text
+thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os {
+code: 2, kind: NotFound, message: "No such file or directory" }',
+src/main.rs:4:49
+```
+
+Similarly, the `expect` method lets us also choose the `panic!` error message.
+Using `expect` instead of `unwrap` and providing good error messages can convey
+your intent and make tracking down the source of a panic easier. The syntax of
+`expect` looks like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic
+{{#rustdoc_include ../listings/ch09-error-handling/no-listing-05-expect/src/main.rs}}
+```
+
+We use `expect` in the same way as `unwrap`: to return the file handle or call
+the `panic!` macro. The error message used by `expect` in its call to `panic!`
+will be the parameter that we pass to `expect`, rather than the default
+`panic!` message that `unwrap` uses. Here’s what it looks like:
+
+<!-- manual-regeneration
+cd listings/ch09-error-handling/no-listing-05-expect
+cargo run
+copy and paste relevant text
+-->
+
+```text
+thread 'main' panicked at 'hello.txt should be included in this project: Os {
+code: 2, kind: NotFound, message: "No such file or directory" }',
+src/main.rs:5:10
+```
+
+In production-quality code, most Rustaceans choose `expect` rather than
+`unwrap` and give more context about why the operation is expected to always
+succeed. That way, if your assumptions are ever proven wrong, you have more
+information to use in debugging.
+
+### Propagating Errors
+
+When a function’s implementation calls something that might fail, instead of
+handling the error within the function itself, you can return the error to the
+calling code so that it can decide what to do. This is known as *propagating*
+the error and gives more control to the calling code, where there might be more
+information or logic that dictates how the error should be handled than what
+you have available in the context of your code.
+
+For example, Listing 9-6 shows a function that reads a username from a file. If
+the file doesn’t exist or can’t be read, this function will return those errors
+to the code that called the function.
+
+<span class="filename">Filename: src/main.rs</span>
+
+<!-- Deliberately not using rustdoc_include here; the `main` function in the
+file panics. We do want to include it for reader experimentation purposes, but
+don't want to include it for rustdoc testing purposes. -->
+
+```rust
+{{#include ../listings/ch09-error-handling/listing-09-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 9-6: A function that returns errors to the
+calling code using `match`</span>
+
+This function can be written in a much shorter way, but we’re going to start by
+doing a lot of it manually in order to explore error handling; at the end,
+we’ll show the shorter way. Let’s look at the return type of the function
+first: `Result<String, io::Error>`. This means the function is returning a
+value of the type `Result<T, E>` where the generic parameter `T` has been
+filled in with the concrete type `String`, and the generic type `E` has been
+filled in with the concrete type `io::Error`.
+
+If this function succeeds without any problems, the code that calls this
+function will receive an `Ok` value that holds a `String`—the username that
+this function read from the file. If this function encounters any problems, the
+calling code will receive an `Err` value that holds an instance of `io::Error`
+that contains more information about what the problems were. We chose
+`io::Error` as the return type of this function because that happens to be the
+type of the error value returned from both of the operations we’re calling in
+this function’s body that might fail: the `File::open` function and the
+`read_to_string` method.
+
+The body of the function starts by calling the `File::open` function. Then we
+handle the `Result` value with a `match` similar to the `match` in Listing 9-4.
+If `File::open` succeeds, the file handle in the pattern variable `file`
+becomes the value in the mutable variable `username_file` and the function
+continues. In the `Err` case, instead of calling `panic!`, we use the `return`
+keyword to return early out of the function entirely and pass the error value
+from `File::open`, now in the pattern variable `e`, back to the calling code as
+this function’s error value.
+
+So if we have a file handle in `username_file`, the function then creates a new
+`String` in variable `username` and calls the `read_to_string` method on
+the file handle in `username_file` to read the contents of the file into
+`username`. The `read_to_string` method also returns a `Result` because it
+might fail, even though `File::open` succeeded. So we need another `match` to
+handle that `Result`: if `read_to_string` succeeds, then our function has
+succeeded, and we return the username from the file that’s now in `username`
+wrapped in an `Ok`. If `read_to_string` fails, we return the error value in the
+same way that we returned the error value in the `match` that handled the
+return value of `File::open`. However, we don’t need to explicitly say
+`return`, because this is the last expression in the function.
+
+The code that calls this code will then handle getting either an `Ok` value
+that contains a username or an `Err` value that contains an `io::Error`. It’s
+up to the calling code to decide what to do with those values. If the calling
+code gets an `Err` value, it could call `panic!` and crash the program, use a
+default username, or look up the username from somewhere other than a file, for
+example. We don’t have enough information on what the calling code is actually
+trying to do, so we propagate all the success or error information upward for
+it to handle appropriately.
+
+This pattern of propagating errors is so common in Rust that Rust provides the
+question mark operator `?` to make this easier.
+
+#### A Shortcut for Propagating Errors: the `?` Operator
+
+Listing 9-7 shows an implementation of `read_username_from_file` that has the
+same functionality as in Listing 9-6, but this implementation uses the
+`?` operator.
+
+<span class="filename">Filename: src/main.rs</span>
+
+<!-- Deliberately not using rustdoc_include here; the `main` function in the
+file panics. We do want to include it for reader experimentation purposes, but
+don't want to include it for rustdoc testing purposes. -->
+
+```rust
+{{#include ../listings/ch09-error-handling/listing-09-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 9-7: A function that returns errors to the
+calling code using the `?` operator</span>
+
+The `?` placed after a `Result` value is defined to work in almost the same way
+as the `match` expressions we defined to handle the `Result` values in Listing
+9-6. If the value of the `Result` is an `Ok`, the value inside the `Ok` will
+get returned from this expression, and the program will continue. If the value
+is an `Err`, the `Err` will be returned from the whole function as if we had
+used the `return` keyword so the error value gets propagated to the calling
+code.
+
+There is a difference between what the `match` expression from Listing 9-6 does
+and what the `?` operator does: error values that have the `?` operator called
+on them go through the `from` function, defined in the `From` trait in the
+standard library, which is used to convert values from one type into another.
+When the `?` operator calls the `from` function, the error type received is
+converted into the error type defined in the return type of the current
+function. This is useful when a function returns one error type to represent
+all the ways a function might fail, even if parts might fail for many different
+reasons.
+
+For example, we could change the `read_username_from_file` function in Listing
+9-7 to return a custom error type named `OurError` that we define. If we also
+define `impl From<io::Error> for OurError` to construct an instance of
+`OurError` from an `io::Error`, then the `?` operator calls in the body of
+`read_username_from_file` will call `from` and convert the error types without
+needing to add any more code to the function.
+
+In the context of Listing 9-7, the `?` at the end of the `File::open` call will
+return the value inside an `Ok` to the variable `username_file`. If an error
+occurs, the `?` operator will return early out of the whole function and give
+any `Err` value to the calling code. The same thing applies to the `?` at the
+end of the `read_to_string` call.
+
+The `?` operator eliminates a lot of boilerplate and makes this function’s
+implementation simpler. We could even shorten this code further by chaining
+method calls immediately after the `?`, as shown in Listing 9-8.
+
+<span class="filename">Filename: src/main.rs</span>
+
+<!-- Deliberately not using rustdoc_include here; the `main` function in the
+file panics. We do want to include it for reader experimentation purposes, but
+don't want to include it for rustdoc testing purposes. -->
+
+```rust
+{{#include ../listings/ch09-error-handling/listing-09-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 9-8: Chaining method calls after the `?`
+operator</span>
+
+We’ve moved the creation of the new `String` in `username` to the beginning of
+the function; that part hasn’t changed. Instead of creating a variable
+`username_file`, we’ve chained the call to `read_to_string` directly onto the
+result of `File::open("hello.txt")?`. We still have a `?` at the end of the
+`read_to_string` call, and we still return an `Ok` value containing `username`
+when both `File::open` and `read_to_string` succeed rather than returning
+errors. The functionality is again the same as in Listing 9-6 and Listing 9-7;
+this is just a different, more ergonomic way to write it.
+
+Listing 9-9 shows a way to make this even shorter using `fs::read_to_string`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+<!-- Deliberately not using rustdoc_include here; the `main` function in the
+file panics. We do want to include it for reader experimentation purposes, but
+don't want to include it for rustdoc testing purposes. -->
+
+```rust
+{{#include ../listings/ch09-error-handling/listing-09-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 9-9: Using `fs::read_to_string` instead of
+opening and then reading the file</span>
+
+Reading a file into a string is a fairly common operation, so the standard
+library provides the convenient `fs::read_to_string` function that opens the
+file, creates a new `String`, reads the contents of the file, puts the contents
+into that `String`, and returns it. Of course, using `fs::read_to_string`
+doesn’t give us the opportunity to explain all the error handling, so we did it
+the longer way first.
+
+#### Where The `?` Operator Can Be Used
+
+The `?` operator can only be used in functions whose return type is compatible
+with the value the `?` is used on. This is because the `?` operator is defined
+to perform an early return of a value out of the function, in the same manner
+as the `match` expression we defined in Listing 9-6. In Listing 9-6, the
+`match` was using a `Result` value, and the early return arm returned an
+`Err(e)` value. The return type of the function has to be a `Result` so that
+it’s compatible with this `return`.
+
+In Listing 9-10, let’s look at the error we’ll get if we use the `?` operator
+in a `main` function with a return type incompatible with the type of the value
+we use `?` on:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-10/src/main.rs}}
+```
+
+<span class="caption">Listing 9-10: Attempting to use the `?` in the `main`
+function that returns `()` won’t compile</span>
+
+This code opens a file, which might fail. The `?` operator follows the `Result`
+value returned by `File::open`, but this `main` function has the return type of
+`()`, not `Result`. When we compile this code, we get the following error
+message:
+
+```console
+{{#include ../listings/ch09-error-handling/listing-09-10/output.txt}}
+```
+
+This error points out that we’re only allowed to use the `?` operator in a
+function that returns `Result`, `Option`, or another type that implements
+`FromResidual`.
+
+To fix the error, you have two choices. One choice is to change the return type
+of your function to be compatible with the value you’re using the `?` operator
+on as long as you have no restrictions preventing that. The other technique is
+to use a `match` or one of the `Result<T, E>` methods to handle the `Result<T,
+E>` in whatever way is appropriate.
+
+The error message also mentioned that `?` can be used with `Option<T>` values
+as well. As with using `?` on `Result`, you can only use `?` on `Option` in a
+function that returns an `Option`. The behavior of the `?` operator when called
+on an `Option<T>` is similar to its behavior when called on a `Result<T, E>`:
+if the value is `None`, the `None` will be returned early from the function at
+that point. If the value is `Some`, the value inside the `Some` is the
+resulting value of the expression and the function continues. Listing 9-11 has
+an example of a function that finds the last character of the first line in the
+given text:
+
+```rust
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 9-11: Using the `?` operator on an `Option<T>`
+value</span>
+
+This function returns `Option<char>` because it’s possible that there is a
+character there, but it’s also possible that there isn’t. This code takes the
+`text` string slice argument and calls the `lines` method on it, which returns
+an iterator over the lines in the string. Because this function wants to
+examine the first line, it calls `next` on the iterator to get the first value
+from the iterator. If `text` is the empty string, this call to `next` will
+return `None`, in which case we use `?` to stop and return `None` from
+`last_char_of_first_line`. If `text` is not the empty string, `next` will
+return a `Some` value containing a string slice of the first line in `text`.
+
+The `?` extracts the string slice, and we can call `chars` on that string slice
+to get an iterator of its characters. We’re interested in the last character in
+this first line, so we call `last` to return the last item in the iterator.
+This is an `Option` because it’s possible that the first line is the empty
+string, for example if `text` starts with a blank line but has characters on
+other lines, as in `"\nhi"`. However, if there is a last character on the first
+line, it will be returned in the `Some` variant. The `?` operator in the middle
+gives us a concise way to express this logic, allowing us to implement the
+function in one line. If we couldn’t use the `?` operator on `Option`, we’d
+have to implement this logic using more method calls or a `match` expression.
+
+Note that you can use the `?` operator on a `Result` in a function that returns
+`Result`, and you can use the `?` operator on an `Option` in a function that
+returns `Option`, but you can’t mix and match. The `?` operator won’t
+automatically convert a `Result` to an `Option` or vice versa; in those cases,
+you can use methods like the `ok` method on `Result` or the `ok_or` method on
+`Option` to do the conversion explicitly.
+
+So far, all the `main` functions we’ve used return `()`. The `main` function is
+special because it’s the entry and exit point of executable programs, and there
+are restrictions on what its return type can be for the programs to behave as
+expected.
+
+Luckily, `main` can also return a `Result<(), E>`. Listing 9-12 has the
+code from Listing 9-10 but we’ve changed the return type of `main` to be
+`Result<(), Box<dyn Error>>` and added a return value `Ok(())` to the end. This
+code will now compile:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch09-error-handling/listing-09-12/src/main.rs}}
+```
+
+<span class="caption">Listing 9-12: Changing `main` to return `Result<(), E>`
+allows the use of the `?` operator on `Result` values</span>
+
+The `Box<dyn Error>` type is a *trait object*, which we’ll talk about in the
+[“Using Trait Objects that Allow for Values of Different
+Types”][trait-objects]<!-- ignore --> section in Chapter 17. For now, you can
+read `Box<dyn Error>` to mean “any kind of error.” Using `?` on a `Result`
+value in a `main` function with the error type `Box<dyn Error>` is allowed,
+because it allows any `Err` value to be returned early. Even though the body of
+this `main` function will only ever return errors of type `std::io::Error`, by
+specifying `Box<dyn Error>`, this signature will continue to be correct even if
+more code that returns other errors is added to the body of `main`.
+
+When a `main` function returns a `Result<(), E>`, the executable will
+exit with a value of `0` if `main` returns `Ok(())` and will exit with a
+nonzero value if `main` returns an `Err` value. Executables written in C return
+integers when they exit: programs that exit successfully return the integer
+`0`, and programs that error return some integer other than `0`. Rust also
+returns integers from executables to be compatible with this convention.
+
+The `main` function may return any types that implement [the
+`std::process::Termination` trait][termination]<!-- ignore -->, which contains
+a function `report` that returns an `ExitCode` Consult the standard library
+documentation for more information on implementing the `Termination` trait for
+your own types.
+
+Now that we’ve discussed the details of calling `panic!` or returning `Result`,
+let’s return to the topic of how to decide which is appropriate to use in which
+cases.
+
+[handle_failure]: ch02-00-guessing-game-tutorial.html#handling-potential-failure-with-the-result-type
+[trait-objects]: ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types
+[termination]: ../std/process/trait.Termination.html
diff --git a/src/doc/book/src/ch09-03-to-panic-or-not-to-panic.md b/src/doc/book/src/ch09-03-to-panic-or-not-to-panic.md
new file mode 100644
index 000000000..7c77cf933
--- /dev/null
+++ b/src/doc/book/src/ch09-03-to-panic-or-not-to-panic.md
@@ -0,0 +1,223 @@
+## To `panic!` or Not to `panic!`
+
+So how do you decide when you should call `panic!` and when you should return
+`Result`? When code panics, there’s no way to recover. You could call `panic!`
+for any error situation, whether there’s a possible way to recover or not, but
+then you’re making the decision that a situation is unrecoverable on behalf of
+the calling code. When you choose to return a `Result` value, you give the
+calling code options. The calling code could choose to attempt to recover in a
+way that’s appropriate for its situation, or it could decide that an `Err`
+value in this case is unrecoverable, so it can call `panic!` and turn your
+recoverable error into an unrecoverable one. Therefore, returning `Result` is a
+good default choice when you’re defining a function that might fail.
+
+In situations such as examples, prototype code, and tests, it’s more
+appropriate to write code that panics instead of returning a `Result`. Let’s
+explore why, then discuss situations in which the compiler can’t tell that
+failure is impossible, but you as a human can. The chapter will conclude with
+some general guidelines on how to decide whether to panic in library code.
+
+### Examples, Prototype Code, and Tests
+
+When you’re writing an example to illustrate some concept, also including robust
+error-handling code can make the example less clear. In
+examples, it’s understood that a call to a method like `unwrap` that could
+panic is meant as a placeholder for the way you’d want your application to
+handle errors, which can differ based on what the rest of your code is doing.
+
+Similarly, the `unwrap` and `expect` methods are very handy when prototyping,
+before you’re ready to decide how to handle errors. They leave clear markers in
+your code for when you’re ready to make your program more robust.
+
+If a method call fails in a test, you’d want the whole test to fail, even if
+that method isn’t the functionality under test. Because `panic!` is how a test
+is marked as a failure, calling `unwrap` or `expect` is exactly what should
+happen.
+
+### Cases in Which You Have More Information Than the Compiler
+
+It would also be appropriate to call `unwrap` or `expect` when you have some
+other logic that ensures the `Result` will have an `Ok` value, but the logic
+isn’t something the compiler understands. You’ll still have a `Result` value
+that you need to handle: whatever operation you’re calling still has the
+possibility of failing in general, even though it’s logically impossible in
+your particular situation. If you can ensure by manually inspecting the code
+that you’ll never have an `Err` variant, it’s perfectly acceptable to call
+`unwrap`, and even better to document the reason you think you’ll never have an
+`Err` variant in the `expect` text. Here’s an example:
+
+```rust
+{{#rustdoc_include ../listings/ch09-error-handling/no-listing-08-unwrap-that-cant-fail/src/main.rs:here}}
+```
+
+We’re creating an `IpAddr` instance by parsing a hardcoded string. We can see
+that `127.0.0.1` is a valid IP address, so it’s acceptable to use `expect`
+here. However, having a hardcoded, valid string doesn’t change the return type
+of the `parse` method: we still get a `Result` value, and the compiler will
+still make us handle the `Result` as if the `Err` variant is a possibility
+because the compiler isn’t smart enough to see that this string is always a
+valid IP address. If the IP address string came from a user rather than being
+hardcoded into the program and therefore *did* have a possibility of failure,
+we’d definitely want to handle the `Result` in a more robust way instead.
+Mentioning the assumption that this IP address is hardcoded will prompt us to
+change `expect` to better error handling code if in the future, we need to get
+the IP address from some other source instead.
+
+### Guidelines for Error Handling
+
+It’s advisable to have your code panic when it’s possible that your code
+could end up in a bad state. In this context, a *bad state* is when some
+assumption, guarantee, contract, or invariant has been broken, such as when
+invalid values, contradictory values, or missing values are passed to your
+code—plus one or more of the following:
+
+* The bad state is something that is unexpected, as opposed to something that
+ will likely happen occasionally, like a user entering data in the wrong
+ format.
+* Your code after this point needs to rely on not being in this bad state,
+ rather than checking for the problem at every step.
+* There’s not a good way to encode this information in the types you use. We’ll
+ work through an example of what we mean in the [“Encoding States and Behavior
+ as Types”][encoding]<!-- ignore --> section of Chapter 17.
+
+If someone calls your code and passes in values that don’t make sense, it’s
+best to return an error if you can so the user of the library can decide what
+they want to do in that case. However, in cases where continuing could be
+insecure or harmful, the best choice might be to call `panic!` and alert the
+person using your library to the bug in their code so they can fix it during
+development. Similarly, `panic!` is often appropriate if you’re calling
+external code that is out of your control and it returns an invalid state that
+you have no way of fixing.
+
+However, when failure is expected, it’s more appropriate to return a `Result`
+than to make a `panic!` call. Examples include a parser being given malformed
+data or an HTTP request returning a status that indicates you have hit a rate
+limit. In these cases, returning a `Result` indicates that failure is an
+expected possibility that the calling code must decide how to handle.
+
+When your code performs an operation that could put a user at risk if it’s
+called using invalid values, your code should verify the values are valid first
+and panic if the values aren’t valid. This is mostly for safety reasons:
+attempting to operate on invalid data can expose your code to vulnerabilities.
+This is the main reason the standard library will call `panic!` if you attempt
+an out-of-bounds memory access: trying to access memory that doesn’t belong to
+the current data structure is a common security problem. Functions often have
+*contracts*: their behavior is only guaranteed if the inputs meet particular
+requirements. Panicking when the contract is violated makes sense because a
+contract violation always indicates a caller-side bug and it’s not a kind of
+error you want the calling code to have to explicitly handle. In fact, there’s
+no reasonable way for calling code to recover; the calling *programmers* need
+to fix the code. Contracts for a function, especially when a violation will
+cause a panic, should be explained in the API documentation for the function.
+
+However, having lots of error checks in all of your functions would be verbose
+and annoying. Fortunately, you can use Rust’s type system (and thus the type
+checking done by the compiler) to do many of the checks for you. If your
+function has a particular type as a parameter, you can proceed with your code’s
+logic knowing that the compiler has already ensured you have a valid value. For
+example, if you have a type rather than an `Option`, your program expects to
+have *something* rather than *nothing*. Your code then doesn’t have to handle
+two cases for the `Some` and `None` variants: it will only have one case for
+definitely having a value. Code trying to pass nothing to your function won’t
+even compile, so your function doesn’t have to check for that case at runtime.
+Another example is using an unsigned integer type such as `u32`, which ensures
+the parameter is never negative.
+
+### Creating Custom Types for Validation
+
+Let’s take the idea of using Rust’s type system to ensure we have a valid value
+one step further and look at creating a custom type for validation. Recall the
+guessing game in Chapter 2 in which our code asked the user to guess a number
+between 1 and 100. We never validated that the user’s guess was between those
+numbers before checking it against our secret number; we only validated that
+the guess was positive. In this case, the consequences were not very dire: our
+output of “Too high” or “Too low” would still be correct. But it would be a
+useful enhancement to guide the user toward valid guesses and have different
+behavior when a user guesses a number that’s out of range versus when a user
+types, for example, letters instead.
+
+One way to do this would be to parse the guess as an `i32` instead of only a
+`u32` to allow potentially negative numbers, and then add a check for the
+number being in range, like so:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch09-error-handling/no-listing-09-guess-out-of-range/src/main.rs:here}}
+```
+
+The `if` expression checks whether our value is out of range, tells the user
+about the problem, and calls `continue` to start the next iteration of the loop
+and ask for another guess. After the `if` expression, we can proceed with the
+comparisons between `guess` and the secret number knowing that `guess` is
+between 1 and 100.
+
+However, this is not an ideal solution: if it was absolutely critical that the
+program only operated on values between 1 and 100, and it had many functions
+with this requirement, having a check like this in every function would be
+tedious (and might impact performance).
+
+Instead, we can make a new type and put the validations in a function to create
+an instance of the type rather than repeating the validations everywhere. That
+way, it’s safe for functions to use the new type in their signatures and
+confidently use the values they receive. Listing 9-13 shows one way to define a
+`Guess` type that will only create an instance of `Guess` if the `new` function
+receives a value between 1 and 100.
+
+<!-- Deliberately not using rustdoc_include here; the `main` function in the
+file requires the `rand` crate. We do want to include it for reader
+experimentation purposes, but don't want to include it for rustdoc testing
+purposes. -->
+
+```rust
+{{#include ../listings/ch09-error-handling/listing-09-13/src/main.rs:here}}
+```
+
+<span class="caption">Listing 9-13: A `Guess` type that will only continue with
+values between 1 and 100</span>
+
+First, we define a struct named `Guess` that has a field named `value` that
+holds an `i32`. This is where the number will be stored.
+
+Then we implement an associated function named `new` on `Guess` that creates
+instances of `Guess` values. The `new` function is defined to have one
+parameter named `value` of type `i32` and to return a `Guess`. The code in the
+body of the `new` function tests `value` to make sure it’s between 1 and 100.
+If `value` doesn’t pass this test, we make a `panic!` call, which will alert
+the programmer who is writing the calling code that they have a bug they need
+to fix, because creating a `Guess` with a `value` outside this range would
+violate the contract that `Guess::new` is relying on. The conditions in which
+`Guess::new` might panic should be discussed in its public-facing API
+documentation; we’ll cover documentation conventions indicating the possibility
+of a `panic!` in the API documentation that you create in Chapter 14. If
+`value` does pass the test, we create a new `Guess` with its `value` field set
+to the `value` parameter and return the `Guess`.
+
+Next, we implement a method named `value` that borrows `self`, doesn’t have any
+other parameters, and returns an `i32`. This kind of method is sometimes called
+a *getter*, because its purpose is to get some data from its fields and return
+it. This public method is necessary because the `value` field of the `Guess`
+struct is private. It’s important that the `value` field be private so code
+using the `Guess` struct is not allowed to set `value` directly: code outside
+the module *must* use the `Guess::new` function to create an instance of
+`Guess`, thereby ensuring there’s no way for a `Guess` to have a `value` that
+hasn’t been checked by the conditions in the `Guess::new` function.
+
+A function that has a parameter or returns only numbers between 1 and 100 could
+then declare in its signature that it takes or returns a `Guess` rather than an
+`i32` and wouldn’t need to do any additional checks in its body.
+
+## Summary
+
+Rust’s error handling features are designed to help you write more robust code.
+The `panic!` macro signals that your program is in a state it can’t handle and
+lets you tell the process to stop instead of trying to proceed with invalid or
+incorrect values. The `Result` enum uses Rust’s type system to indicate that
+operations might fail in a way that your code could recover from. You can use
+`Result` to tell code that calls your code that it needs to handle potential
+success or failure as well. Using `panic!` and `Result` in the appropriate
+situations will make your code more reliable in the face of inevitable problems.
+
+Now that you’ve seen useful ways that the standard library uses generics with
+the `Option` and `Result` enums, we’ll talk about how generics work and how you
+can use them in your code.
+
+[encoding]: ch17-03-oo-design-patterns.html#encoding-states-and-behavior-as-types
diff --git a/src/doc/book/src/ch10-00-generics.md b/src/doc/book/src/ch10-00-generics.md
new file mode 100644
index 000000000..bfe7ad3ee
--- /dev/null
+++ b/src/doc/book/src/ch10-00-generics.md
@@ -0,0 +1,118 @@
+# Generic Types, Traits, and Lifetimes
+
+Every programming language has tools for effectively handling the duplication
+of concepts. In Rust, one such tool is *generics*: abstract stand-ins for
+concrete types or other properties. We can express the behavior of generics or
+how they relate to other generics without knowing what will be in their place
+when compiling and running the code.
+
+Functions can take parameters of some generic type, instead of a concrete type
+like `i32` or `String`, in the same way a function takes parameters with
+unknown values to run the same code on multiple concrete values. In fact, we’ve
+already used generics in Chapter 6 with `Option<T>`, Chapter 8 with `Vec<T>`
+and `HashMap<K, V>`, and Chapter 9 with `Result<T, E>`. In this chapter, you’ll
+explore how to define your own types, functions, and methods with generics!
+
+First, we’ll review how to extract a function to reduce code duplication. We’ll
+then use the same technique to make a generic function from two functions that
+differ only in the types of their parameters. We’ll also explain how to use
+generic types in struct and enum definitions.
+
+Then you’ll learn how to use *traits* to define behavior in a generic way. You
+can combine traits with generic types to constrain a generic type to accept
+only those types that have a particular behavior, as opposed to just any type.
+
+Finally, we’ll discuss *lifetimes*: a variety of generics that give the
+compiler information about how references relate to each other. Lifetimes allow
+us to give the compiler enough information about borrowed values so that it can
+ensure references will be valid in more situations than it could without our
+help.
+
+## Removing Duplication by Extracting a Function
+
+Generics allow us to replace specific types with a placeholder that represents
+multiple types to remove code duplication. Before diving into generics syntax,
+then, let’s first look at how to remove duplication in a way that doesn’t
+involve generic types by extracting a function that replaces specific values
+with a placeholder that represents multiple values. Then we’ll apply the same
+technique to extract a generic function! By looking at how to recognize
+duplicated code you can extract into a function, you’ll start to recognize
+duplicated code that can use generics.
+
+We begin with the short program in Listing 10-1 that finds the largest number
+in a list.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-01/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-1: Finding the largest number in a list of
+numbers</span>
+
+We store a list of integers in the variable `number_list` and place a reference
+to the first number in the list in a variable named `largest`. We then iterate
+through all the numbers in the list, and if the current number is greater than
+the number stored in `largest`, replace the reference in that variable.
+However, if the current number is less than or equal to the largest number seen
+so far, the variable doesn’t change, and the code moves on to the next number
+in the list. After considering all the numbers in the list, `largest` should
+refer to the largest number, which in this case is 100.
+
+We've now been tasked with finding the largest number in two different lists of
+numbers. To do so, we can choose to duplicate the code in Listing 10-1 and use
+the same logic at two different places in the program, as shown in Listing 10-2.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-02/src/main.rs}}
+```
+
+<span class="caption">Listing 10-2: Code to find the largest number in *two*
+lists of numbers</span>
+
+Although this code works, duplicating code is tedious and error prone. We also
+have to remember to update the code in multiple places when we want to change
+it.
+
+To eliminate this duplication, we’ll create an abstraction by defining a
+function that operates on any list of integers passed in a parameter. This
+solution makes our code clearer and lets us express the concept of finding the
+largest number in a list abstractly.
+
+In Listing 10-3, we extract the code that finds the largest number into a
+function named `largest`. Then we call the function to find the largest number
+in the two lists from Listing 10-2. We could also use the function on any other
+list of `i32` values we might have in the future.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-3: Abstracted code to find the largest number
+in two lists</span>
+
+The `largest` function has a parameter called `list`, which represents any
+concrete slice of `i32` values we might pass into the function. As a result,
+when we call the function, the code runs on the specific values that we pass
+in.
+
+In summary, here are the steps we took to change the code from Listing 10-2 to
+Listing 10-3:
+
+1. Identify duplicate code.
+2. Extract the duplicate code into the body of the function and specify the
+ inputs and return values of that code in the function signature.
+3. Update the two instances of duplicated code to call the function instead.
+
+Next, we’ll use these same steps with generics to reduce code duplication. In
+the same way that the function body can operate on an abstract `list` instead
+of specific values, generics allow code to operate on abstract types.
+
+For example, say we had two functions: one that finds the largest item in a
+slice of `i32` values and one that finds the largest item in a slice of `char`
+values. How would we eliminate that duplication? Let’s find out!
diff --git a/src/doc/book/src/ch10-01-syntax.md b/src/doc/book/src/ch10-01-syntax.md
new file mode 100644
index 000000000..c22aef7c3
--- /dev/null
+++ b/src/doc/book/src/ch10-01-syntax.md
@@ -0,0 +1,330 @@
+## Generic Data Types
+
+We use generics to create definitions for items like function signatures or
+structs, which we can then use with many different concrete data types. Let’s
+first look at how to define functions, structs, enums, and methods using
+generics. Then we’ll discuss how generics affect code performance.
+
+### In Function Definitions
+
+When defining a function that uses generics, we place the generics in the
+signature of the function where we would usually specify the data types of the
+parameters and return value. Doing so makes our code more flexible and provides
+more functionality to callers of our function while preventing code duplication.
+
+Continuing with our `largest` function, Listing 10-4 shows two functions that
+both find the largest value in a slice. We'll then combine these into a single
+function that uses generics.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-4: Two functions that differ only in their
+names and the types in their signatures</span>
+
+The `largest_i32` function is the one we extracted in Listing 10-3 that finds
+the largest `i32` in a slice. The `largest_char` function finds the largest
+`char` in a slice. The function bodies have the same code, so let’s eliminate
+the duplication by introducing a generic type parameter in a single function.
+
+To parameterize the types in a new single function, we need to name the type
+parameter, just as we do for the value parameters to a function. You can use
+any identifier as a type parameter name. But we’ll use `T` because, by
+convention, type parameter names in Rust are short, often just a letter, and Rust’s
+type-naming convention is CamelCase. Short for “type,” `T` is the default
+choice of most Rust programmers.
+
+When we use a parameter in the body of the function, we have to declare the
+parameter name in the signature so the compiler knows what that name means.
+Similarly, when we use a type parameter name in a function signature, we have
+to declare the type parameter name before we use it. To define the generic
+`largest` function, place type name declarations inside angle brackets, `<>`,
+between the name of the function and the parameter list, like this:
+
+```rust,ignore
+fn largest<T>(list: &[T]) -> &T {
+```
+
+We read this definition as: the function `largest` is generic over some type
+`T`. This function has one parameter named `list`, which is a slice of values
+of type `T`. The `largest` function will return a reference to a value of the
+same type `T`.
+
+Listing 10-5 shows the combined `largest` function definition using the generic
+data type in its signature. The listing also shows how we can call the function
+with either a slice of `i32` values or `char` values. Note that this code won’t
+compile yet, but we’ll fix it later in this chapter.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/src/main.rs}}
+```
+
+<span class="caption">Listing 10-5: The `largest` function using generic type
+parameters; this doesn’t yet compile</span>
+
+If we compile this code right now, we’ll get this error:
+
+```console
+{{#include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-05/output.txt}}
+```
+
+The help text mentions `std::cmp::PartialOrd`, which is a *trait*, and we’re
+going to talk about traits in the next section. For now, know that this error
+states that the body of `largest` won’t work for all possible types that `T`
+could be. Because we want to compare values of type `T` in the body, we can
+only use types whose values can be ordered. To enable comparisons, the standard
+library has the `std::cmp::PartialOrd` trait that you can implement on types
+(see Appendix C for more on this trait). By following the help text's
+suggestion, we restrict the types valid for `T` to only those that implement
+`PartialOrd` and this example will compile, because the standard library
+implements `PartialOrd` on both `i32` and `char`.
+
+### In Struct Definitions
+
+We can also define structs to use a generic type parameter in one or more
+fields using the `<>` syntax. Listing 10-6 defines a `Point<T>` struct to hold
+`x` and `y` coordinate values of any type.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-06/src/main.rs}}
+```
+
+<span class="caption">Listing 10-6: A `Point<T>` struct that holds `x` and `y`
+values of type `T`</span>
+
+The syntax for using generics in struct definitions is similar to that used in
+function definitions. First, we declare the name of the type parameter inside
+angle brackets just after the name of the struct. Then we use the generic type
+in the struct definition where we would otherwise specify concrete data types.
+
+Note that because we’ve used only one generic type to define `Point<T>`, this
+definition says that the `Point<T>` struct is generic over some type `T`, and
+the fields `x` and `y` are *both* that same type, whatever that type may be. If
+we create an instance of a `Point<T>` that has values of different types, as in
+Listing 10-7, our code won’t compile.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/src/main.rs}}
+```
+
+<span class="caption">Listing 10-7: The fields `x` and `y` must be the same
+type because both have the same generic data type `T`.</span>
+
+In this example, when we assign the integer value 5 to `x`, we let the compiler
+know that the generic type `T` will be an integer for this instance of
+`Point<T>`. Then when we specify 4.0 for `y`, which we’ve defined to have the
+same type as `x`, we’ll get a type mismatch error like this:
+
+```console
+{{#include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-07/output.txt}}
+```
+
+To define a `Point` struct where `x` and `y` are both generics but could have
+different types, we can use multiple generic type parameters. For example, in
+Listing 10-8, we change the definition of `Point` to be generic over types `T`
+and `U` where `x` is of type `T` and `y` is of type `U`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-08/src/main.rs}}
+```
+
+<span class="caption">Listing 10-8: A `Point<T, U>` generic over two types so
+that `x` and `y` can be values of different types</span>
+
+Now all the instances of `Point` shown are allowed! You can use as many generic
+type parameters in a definition as you want, but using more than a few makes
+your code hard to read. If you're finding you need lots of generic types in
+your code, it could indicate that your code needs restructuring into smaller
+pieces.
+
+### In Enum Definitions
+
+As we did with structs, we can define enums to hold generic data types in their
+variants. Let’s take another look at the `Option<T>` enum that the standard
+library provides, which we used in Chapter 6:
+
+```rust
+enum Option<T> {
+ Some(T),
+ None,
+}
+```
+
+This definition should now make more sense to you. As you can see, the
+`Option<T>` enum is generic over type `T` and has two variants: `Some`, which
+holds one value of type `T`, and a `None` variant that doesn’t hold any value.
+By using the `Option<T>` enum, we can express the abstract concept of an
+optional value, and because `Option<T>` is generic, we can use this abstraction
+no matter what the type of the optional value is.
+
+Enums can use multiple generic types as well. The definition of the `Result`
+enum that we used in Chapter 9 is one example:
+
+```rust
+enum Result<T, E> {
+ Ok(T),
+ Err(E),
+}
+```
+
+The `Result` enum is generic over two types, `T` and `E`, and has two variants:
+`Ok`, which holds a value of type `T`, and `Err`, which holds a value of type
+`E`. This definition makes it convenient to use the `Result` enum anywhere we
+have an operation that might succeed (return a value of some type `T`) or fail
+(return an error of some type `E`). In fact, this is what we used to open a
+file in Listing 9-3, where `T` was filled in with the type `std::fs::File` when
+the file was opened successfully and `E` was filled in with the type
+`std::io::Error` when there were problems opening the file.
+
+When you recognize situations in your code with multiple struct or enum
+definitions that differ only in the types of the values they hold, you can
+avoid duplication by using generic types instead.
+
+### In Method Definitions
+
+We can implement methods on structs and enums (as we did in Chapter 5) and use
+generic types in their definitions, too. Listing 10-9 shows the `Point<T>`
+struct we defined in Listing 10-6 with a method named `x` implemented on it.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-09/src/main.rs}}
+```
+
+<span class="caption">Listing 10-9: Implementing a method named `x` on the
+`Point<T>` struct that will return a reference to the `x` field of type
+`T`</span>
+
+Here, we’ve defined a method named `x` on `Point<T>` that returns a reference
+to the data in the field `x`.
+
+Note that we have to declare `T` just after `impl` so we can use `T` to specify
+that we’re implementing methods on the type `Point<T>`. By declaring `T` as a
+generic type after `impl`, Rust can identify that the type in the angle
+brackets in `Point` is a generic type rather than a concrete type. We could
+have chosen a different name for this generic parameter than the generic
+parameter declared in the struct definition, but using the same name is
+conventional. Methods written within an `impl` that declares the generic type
+will be defined on any instance of the type, no matter what concrete type ends
+up substituting for the generic type.
+
+We can also specify constraints on generic types when defining methods on the
+type. We could, for example, implement methods only on `Point<f32>` instances
+rather than on `Point<T>` instances with any generic type. In Listing 10-10 we
+use the concrete type `f32`, meaning we don’t declare any types after `impl`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-10: An `impl` block that only applies to a
+struct with a particular concrete type for the generic type parameter `T`</span>
+
+This code means the type `Point<f32>` will have a `distance_from_origin`
+method; other instances of `Point<T>` where `T` is not of type `f32` will not
+have this method defined. The method measures how far our point is from the
+point at coordinates (0.0, 0.0) and uses mathematical operations that are
+available only for floating point types.
+
+Generic type parameters in a struct definition aren’t always the same as those
+you use in that same struct’s method signatures. Listing 10-11 uses the generic
+types `X1` and `Y1` for the `Point` struct and `X2` `Y2` for the `mixup` method
+signature to make the example clearer. The method creates a new `Point`
+instance with the `x` value from the `self` `Point` (of type `X1`) and the `y`
+value from the passed-in `Point` (of type `Y2`).
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-11/src/main.rs}}
+```
+
+<span class="caption">Listing 10-11: A method that uses generic types different
+from its struct’s definition</span>
+
+In `main`, we’ve defined a `Point` that has an `i32` for `x` (with value `5`)
+and an `f64` for `y` (with value `10.4`). The `p2` variable is a `Point` struct
+that has a string slice for `x` (with value `"Hello"`) and a `char` for `y`
+(with value `c`). Calling `mixup` on `p1` with the argument `p2` gives us `p3`,
+which will have an `i32` for `x`, because `x` came from `p1`. The `p3` variable
+will have a `char` for `y`, because `y` came from `p2`. The `println!` macro
+call will print `p3.x = 5, p3.y = c`.
+
+The purpose of this example is to demonstrate a situation in which some generic
+parameters are declared with `impl` and some are declared with the method
+definition. Here, the generic parameters `X1` and `Y1` are declared after
+`impl` because they go with the struct definition. The generic parameters `X2`
+and `Y2` are declared after `fn mixup`, because they’re only relevant to the
+method.
+
+### Performance of Code Using Generics
+
+You might be wondering whether there is a runtime cost when using generic type
+parameters. The good news is that using generic types won't make your program run
+any slower than it would with concrete types.
+
+Rust accomplishes this by performing monomorphization of the code using
+generics at compile time. *Monomorphization* is the process of turning generic
+code into specific code by filling in the concrete types that are used when
+compiled. In this process, the compiler does the opposite of the steps we used
+to create the generic function in Listing 10-5: the compiler looks at all the
+places where generic code is called and generates code for the concrete types
+the generic code is called with.
+
+Let’s look at how this works by using the standard library’s generic
+`Option<T>` enum:
+
+```rust
+let integer = Some(5);
+let float = Some(5.0);
+```
+
+When Rust compiles this code, it performs monomorphization. During that
+process, the compiler reads the values that have been used in `Option<T>`
+instances and identifies two kinds of `Option<T>`: one is `i32` and the other
+is `f64`. As such, it expands the generic definition of `Option<T>` into two
+definitions specialized to `i32` and `f64`, thereby replacing the generic
+definition with the specific ones.
+
+The monomorphized version of the code looks similar to the following (the
+compiler uses different names than what we’re using here for illustration):
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+enum Option_i32 {
+ Some(i32),
+ None,
+}
+
+enum Option_f64 {
+ Some(f64),
+ None,
+}
+
+fn main() {
+ let integer = Option_i32::Some(5);
+ let float = Option_f64::Some(5.0);
+}
+```
+
+The generic `Option<T>` is replaced with the specific definitions created by
+the compiler. Because Rust compiles generic code into code that specifies the
+type in each instance, we pay no runtime cost for using generics. When the code
+runs, it performs just as it would if we had duplicated each definition by
+hand. The process of monomorphization makes Rust’s generics extremely efficient
+at runtime.
diff --git a/src/doc/book/src/ch10-02-traits.md b/src/doc/book/src/ch10-02-traits.md
new file mode 100644
index 000000000..3c4fb8cad
--- /dev/null
+++ b/src/doc/book/src/ch10-02-traits.md
@@ -0,0 +1,388 @@
+## Traits: Defining Shared Behavior
+
+A *trait* defines functionality a particular type has and can share with other
+types. We can use traits to define shared behavior in an abstract way. We can
+use *trait bounds* to specify that a generic type can be any type that has
+certain behavior.
+
+> Note: Traits are similar to a feature often called *interfaces* in other
+> languages, although with some differences.
+
+### Defining a Trait
+
+A type’s behavior consists of the methods we can call on that type. Different
+types share the same behavior if we can call the same methods on all of those
+types. Trait definitions are a way to group method signatures together to
+define a set of behaviors necessary to accomplish some purpose.
+
+For example, let’s say we have multiple structs that hold various kinds and
+amounts of text: a `NewsArticle` struct that holds a news story filed in a
+particular location and a `Tweet` that can have at most 280 characters along
+with metadata that indicates whether it was a new tweet, a retweet, or a reply
+to another tweet.
+
+We want to make a media aggregator library crate named `aggregator` that can
+display summaries of data that might be stored in a `NewsArticle` or `Tweet`
+instance. To do this, we need a summary from each type, and we’ll request
+that summary by calling a `summarize` method on an instance. Listing 10-12
+shows the definition of a public `Summary` trait that expresses this behavior.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-12/src/lib.rs}}
+```
+
+<span class="caption">Listing 10-12: A `Summary` trait that consists of the
+behavior provided by a `summarize` method</span>
+
+Here, we declare a trait using the `trait` keyword and then the trait’s name,
+which is `Summary` in this case. We’ve also declared the trait as `pub` so that
+crates depending on this crate can make use of this trait too, as we’ll see in
+a few examples. Inside the curly brackets, we declare the method signatures
+that describe the behaviors of the types that implement this trait, which in
+this case is `fn summarize(&self) -> String`.
+
+After the method signature, instead of providing an implementation within curly
+brackets, we use a semicolon. Each type implementing this trait must provide
+its own custom behavior for the body of the method. The compiler will enforce
+that any type that has the `Summary` trait will have the method `summarize`
+defined with this signature exactly.
+
+A trait can have multiple methods in its body: the method signatures are listed
+one per line and each line ends in a semicolon.
+
+### Implementing a Trait on a Type
+
+Now that we’ve defined the desired signatures of the `Summary` trait’s methods,
+we can implement it on the types in our media aggregator. Listing 10-13 shows
+an implementation of the `Summary` trait on the `NewsArticle` struct that uses
+the headline, the author, and the location to create the return value of
+`summarize`. For the `Tweet` struct, we define `summarize` as the username
+followed by the entire text of the tweet, assuming that tweet content is
+already limited to 280 characters.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-13/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 10-13: Implementing the `Summary` trait on the
+`NewsArticle` and `Tweet` types</span>
+
+Implementing a trait on a type is similar to implementing regular methods. The
+difference is that after `impl`, we put the trait name we want to implement,
+then use the `for` keyword, and then specify the name of the type we want to
+implement the trait for. Within the `impl` block, we put the method signatures
+that the trait definition has defined. Instead of adding a semicolon after each
+signature, we use curly brackets and fill in the method body with the specific
+behavior that we want the methods of the trait to have for the particular type.
+
+Now that the library has implemented the `Summary` trait on `NewsArticle` and
+`Tweet`, users of the crate can call the trait methods on instances of
+`NewsArticle` and `Tweet` in the same way we call regular methods. The only
+difference is that the user must bring the trait into scope as well as the
+types. Here’s an example of how a binary crate could use our `aggregator`
+library crate:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-01-calling-trait-method/src/main.rs}}
+```
+
+This code prints `1 new tweet: horse_ebooks: of course, as you probably already
+know, people`.
+
+Other crates that depend on the `aggregator` crate can also bring the `Summary`
+trait into scope to implement `Summary` on their own types. One restriction to
+note is that we can implement a trait on a type only if at least one of the
+trait or the type is local to our crate. For example, we can implement standard
+library traits like `Display` on a custom type like `Tweet` as part of our
+`aggregator` crate functionality, because the type `Tweet` is local to our
+`aggregator` crate. We can also implement `Summary` on `Vec<T>` in our
+`aggregator` crate, because the trait `Summary` is local to our `aggregator`
+crate.
+
+But we can’t implement external traits on external types. For example, we can’t
+implement the `Display` trait on `Vec<T>` within our `aggregator` crate,
+because `Display` and `Vec<T>` are both defined in the standard library and
+aren’t local to our `aggregator` crate. This restriction is part of a property
+called *coherence*, and more specifically the *orphan rule*, so named because
+the parent type is not present. This rule ensures that other people’s code
+can’t break your code and vice versa. Without the rule, two crates could
+implement the same trait for the same type, and Rust wouldn’t know which
+implementation to use.
+
+### Default Implementations
+
+Sometimes it’s useful to have default behavior for some or all of the methods
+in a trait instead of requiring implementations for all methods on every type.
+Then, as we implement the trait on a particular type, we can keep or override
+each method’s default behavior.
+
+In Listing 10-14 we specify a default string for the `summarize` method of the
+`Summary` trait instead of only defining the method signature, as we did in
+Listing 10-12.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-14/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 10-14: Defining a `Summary` trait with a default
+implementation of the `summarize` method</span>
+
+To use a default implementation to summarize instances of `NewsArticle`, we
+specify an empty `impl` block with `impl Summary for NewsArticle {}`.
+
+Even though we’re no longer defining the `summarize` method on `NewsArticle`
+directly, we’ve provided a default implementation and specified that
+`NewsArticle` implements the `Summary` trait. As a result, we can still call
+the `summarize` method on an instance of `NewsArticle`, like this:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-02-calling-default-impl/src/main.rs:here}}
+```
+
+This code prints `New article available! (Read more...)`.
+
+Creating a default implementation doesn’t require us to change anything about
+the implementation of `Summary` on `Tweet` in Listing 10-13. The reason is that
+the syntax for overriding a default implementation is the same as the syntax
+for implementing a trait method that doesn’t have a default implementation.
+
+Default implementations can call other methods in the same trait, even if those
+other methods don’t have a default implementation. In this way, a trait can
+provide a lot of useful functionality and only require implementors to specify
+a small part of it. For example, we could define the `Summary` trait to have a
+`summarize_author` method whose implementation is required, and then define a
+`summarize` method that has a default implementation that calls the
+`summarize_author` method:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs:here}}
+```
+
+To use this version of `Summary`, we only need to define `summarize_author`
+when we implement the trait on a type:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/lib.rs:impl}}
+```
+
+After we define `summarize_author`, we can call `summarize` on instances of the
+`Tweet` struct, and the default implementation of `summarize` will call the
+definition of `summarize_author` that we’ve provided. Because we’ve implemented
+`summarize_author`, the `Summary` trait has given us the behavior of the
+`summarize` method without requiring us to write any more code.
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-03-default-impl-calls-other-methods/src/main.rs:here}}
+```
+
+This code prints `1 new tweet: (Read more from @horse_ebooks...)`.
+
+Note that it isn’t possible to call the default implementation from an
+overriding implementation of that same method.
+
+### Traits as Parameters
+
+Now that you know how to define and implement traits, we can explore how to use
+traits to define functions that accept many different types. We'll use the
+`Summary` trait we implemented on the `NewsArticle` and `Tweet` types in
+Listing 10-13 to define a `notify` function that calls the `summarize` method
+on its `item` parameter, which is of some type that implements the `Summary`
+trait. To do this, we use the `impl Trait` syntax, like this:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-04-traits-as-parameters/src/lib.rs:here}}
+```
+
+Instead of a concrete type for the `item` parameter, we specify the `impl`
+keyword and the trait name. This parameter accepts any type that implements the
+specified trait. In the body of `notify`, we can call any methods on `item`
+that come from the `Summary` trait, such as `summarize`. We can call `notify`
+and pass in any instance of `NewsArticle` or `Tweet`. Code that calls the
+function with any other type, such as a `String` or an `i32`, won’t compile
+because those types don’t implement `Summary`.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="fixing-the-largest-function-with-trait-bounds"></a>
+
+#### Trait Bound Syntax
+
+The `impl Trait` syntax works for straightforward cases but is actually syntax
+sugar for a longer form known as a *trait bound*; it looks like this:
+
+```rust,ignore
+pub fn notify<T: Summary>(item: &T) {
+ println!("Breaking news! {}", item.summarize());
+}
+```
+
+This longer form is equivalent to the example in the previous section but is
+more verbose. We place trait bounds with the declaration of the generic type
+parameter after a colon and inside angle brackets.
+
+The `impl Trait` syntax is convenient and makes for more concise code in simple
+cases, while the fuller trait bound syntax can express more complexity in other
+cases. For example, we can have two parameters that implement `Summary`. Doing
+so with the `impl Trait` syntax looks like this:
+
+```rust,ignore
+pub fn notify(item1: &impl Summary, item2: &impl Summary) {
+```
+
+Using `impl Trait` is appropriate if we want this function to allow `item1` and
+`item2` to have different types (as long as both types implement `Summary`). If
+we want to force both parameters to have the same type, however, we must use a
+trait bound, like this:
+
+```rust,ignore
+pub fn notify<T: Summary>(item1: &T, item2: &T) {
+```
+
+The generic type `T` specified as the type of the `item1` and `item2`
+parameters constrains the function such that the concrete type of the value
+passed as an argument for `item1` and `item2` must be the same.
+
+#### Specifying Multiple Trait Bounds with the `+` Syntax
+
+We can also specify more than one trait bound. Say we wanted `notify` to use
+display formatting as well as `summarize` on `item`: we specify in the `notify`
+definition that `item` must implement both `Display` and `Summary`. We can do
+so using the `+` syntax:
+
+```rust,ignore
+pub fn notify(item: &(impl Summary + Display)) {
+```
+
+The `+` syntax is also valid with trait bounds on generic types:
+
+```rust,ignore
+pub fn notify<T: Summary + Display>(item: &T) {
+```
+
+With the two trait bounds specified, the body of `notify` can call `summarize`
+and use `{}` to format `item`.
+
+#### Clearer Trait Bounds with `where` Clauses
+
+Using too many trait bounds has its downsides. Each generic has its own trait
+bounds, so functions with multiple generic type parameters can contain lots of
+trait bound information between the function’s name and its parameter list,
+making the function signature hard to read. For this reason, Rust has alternate
+syntax for specifying trait bounds inside a `where` clause after the function
+signature. So instead of writing this:
+
+```rust,ignore
+fn some_function<T: Display + Clone, U: Clone + Debug>(t: &T, u: &U) -> i32 {
+```
+
+we can use a `where` clause, like this:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-07-where-clause/src/lib.rs:here}}
+```
+
+This function’s signature is less cluttered: the function name, parameter list,
+and return type are close together, similar to a function without lots of trait
+bounds.
+
+### Returning Types that Implement Traits
+
+We can also use the `impl Trait` syntax in the return position to return a
+value of some type that implements a trait, as shown here:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-05-returning-impl-trait/src/lib.rs:here}}
+```
+
+By using `impl Summary` for the return type, we specify that the
+`returns_summarizable` function returns some type that implements the `Summary`
+trait without naming the concrete type. In this case, `returns_summarizable`
+returns a `Tweet`, but the code calling this function doesn’t need to know that.
+
+The ability to specify a return type only by the trait it implements is
+especially useful in the context of closures and iterators, which we cover in
+Chapter 13. Closures and iterators create types that only the compiler knows or
+types that are very long to specify. The `impl Trait` syntax lets you concisely
+specify that a function returns some type that implements the `Iterator` trait
+without needing to write out a very long type.
+
+However, you can only use `impl Trait` if you’re returning a single type. For
+example, this code that returns either a `NewsArticle` or a `Tweet` with the
+return type specified as `impl Summary` wouldn’t work:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-06-impl-trait-returns-one-type/src/lib.rs:here}}
+```
+
+Returning either a `NewsArticle` or a `Tweet` isn’t allowed due to restrictions
+around how the `impl Trait` syntax is implemented in the compiler. We’ll cover
+how to write a function with this behavior in the [“Using Trait Objects That
+Allow for Values of Different
+Types”][using-trait-objects-that-allow-for-values-of-different-types]<!--
+ignore --> section of Chapter 17.
+
+### Using Trait Bounds to Conditionally Implement Methods
+
+By using a trait bound with an `impl` block that uses generic type parameters,
+we can implement methods conditionally for types that implement the specified
+traits. For example, the type `Pair<T>` in Listing 10-15 always implements the
+`new` function to return a new instance of `Pair<T>` (recall from the
+[“Defining Methods”][methods]<!-- ignore --> section of Chapter 5 that `Self`
+is a type alias for the type of the `impl` block, which in this case is
+`Pair<T>`). But in the next `impl` block, `Pair<T>` only implements the
+`cmp_display` method if its inner type `T` implements the `PartialOrd` trait
+that enables comparison *and* the `Display` trait that enables printing.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-15/src/lib.rs}}
+```
+
+<span class="caption">Listing 10-15: Conditionally implementing methods on a
+generic type depending on trait bounds</span>
+
+We can also conditionally implement a trait for any type that implements
+another trait. Implementations of a trait on any type that satisfies the trait
+bounds are called *blanket implementations* and are extensively used in the
+Rust standard library. For example, the standard library implements the
+`ToString` trait on any type that implements the `Display` trait. The `impl`
+block in the standard library looks similar to this code:
+
+```rust,ignore
+impl<T: Display> ToString for T {
+ // --snip--
+}
+```
+
+Because the standard library has this blanket implementation, we can call the
+`to_string` method defined by the `ToString` trait on any type that implements
+the `Display` trait. For example, we can turn integers into their corresponding
+`String` values like this because integers implement `Display`:
+
+```rust
+let s = 3.to_string();
+```
+
+Blanket implementations appear in the documentation for the trait in the
+“Implementors” section.
+
+Traits and trait bounds let us write code that uses generic type parameters to
+reduce duplication but also specify to the compiler that we want the generic
+type to have particular behavior. The compiler can then use the trait bound
+information to check that all the concrete types used with our code provide the
+correct behavior. In dynamically typed languages, we would get an error at
+runtime if we called a method on a type which didn’t define the method. But Rust
+moves these errors to compile time so we’re forced to fix the problems before
+our code is even able to run. Additionally, we don’t have to write code that
+checks for behavior at runtime because we’ve already checked at compile time.
+Doing so improves performance without having to give up the flexibility of
+generics.
+
+[using-trait-objects-that-allow-for-values-of-different-types]: ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types
+[methods]: ch05-03-method-syntax.html#defining-methods
diff --git a/src/doc/book/src/ch10-03-lifetime-syntax.md b/src/doc/book/src/ch10-03-lifetime-syntax.md
new file mode 100644
index 000000000..5229ab74b
--- /dev/null
+++ b/src/doc/book/src/ch10-03-lifetime-syntax.md
@@ -0,0 +1,622 @@
+## Validating References with Lifetimes
+
+Lifetimes are another kind of generic that we’ve already been using. Rather
+than ensuring that a type has the behavior we want, lifetimes ensure that
+references are valid as long as we need them to be.
+
+One detail we didn’t discuss in the [“References and
+Borrowing”][references-and-borrowing]<!-- ignore --> section in Chapter 4 is
+that every reference in Rust has a *lifetime*, which is the scope for which
+that reference is valid. Most of the time, lifetimes are implicit and inferred,
+just like most of the time, types are inferred. We only must annotate types
+when multiple types are possible. In a similar way, we must annotate lifetimes
+when the lifetimes of references could be related in a few different ways. Rust
+requires us to annotate the relationships using generic lifetime parameters to
+ensure the actual references used at runtime will definitely be valid.
+
+Annotating lifetimes is not even a concept most other programming languages
+have, so this is going to feel unfamiliar. Although we won’t cover lifetimes in
+their entirety in this chapter, we’ll discuss common ways you might encounter
+lifetime syntax so you can get comfortable with the concept.
+
+### Preventing Dangling References with Lifetimes
+
+The main aim of lifetimes is to prevent *dangling references*, which cause a
+program to reference data other than the data it’s intended to reference.
+Consider the program in Listing 10-16, which has an outer scope and an inner
+scope.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/src/main.rs}}
+```
+
+<span class="caption">Listing 10-16: An attempt to use a reference whose value
+has gone out of scope</span>
+
+> Note: The examples in Listings 10-16, 10-17, and 10-23 declare variables
+> without giving them an initial value, so the variable name exists in the
+> outer scope. At first glance, this might appear to be in conflict with Rust’s
+> having no null values. However, if we try to use a variable before giving it
+> a value, we’ll get a compile-time error, which shows that Rust indeed does
+> not allow null values.
+
+The outer scope declares a variable named `r` with no initial value, and the
+inner scope declares a variable named `x` with the initial value of 5. Inside
+the inner scope, we attempt to set the value of `r` as a reference to `x`. Then
+the inner scope ends, and we attempt to print the value in `r`. This code won’t
+compile because the value `r` is referring to has gone out of scope before we
+try to use it. Here is the error message:
+
+```console
+{{#include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-16/output.txt}}
+```
+
+The variable `x` doesn’t “live long enough.” The reason is that `x` will be out
+of scope when the inner scope ends on line 7. But `r` is still valid for the
+outer scope; because its scope is larger, we say that it “lives longer.” If
+Rust allowed this code to work, `r` would be referencing memory that was
+deallocated when `x` went out of scope, and anything we tried to do with `r`
+wouldn’t work correctly. So how does Rust determine that this code is invalid?
+It uses a borrow checker.
+
+### The Borrow Checker
+
+The Rust compiler has a *borrow checker* that compares scopes to determine
+whether all borrows are valid. Listing 10-17 shows the same code as Listing
+10-16 but with annotations showing the lifetimes of the variables.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-17/src/main.rs}}
+```
+
+<span class="caption">Listing 10-17: Annotations of the lifetimes of `r` and
+`x`, named `'a` and `'b`, respectively</span>
+
+Here, we’ve annotated the lifetime of `r` with `'a` and the lifetime of `x`
+with `'b`. As you can see, the inner `'b` block is much smaller than the outer
+`'a` lifetime block. At compile time, Rust compares the size of the two
+lifetimes and sees that `r` has a lifetime of `'a` but that it refers to memory
+with a lifetime of `'b`. The program is rejected because `'b` is shorter than
+`'a`: the subject of the reference doesn’t live as long as the reference.
+
+Listing 10-18 fixes the code so it doesn’t have a dangling reference and
+compiles without any errors.
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-18/src/main.rs}}
+```
+
+<span class="caption">Listing 10-18: A valid reference because the data has a
+longer lifetime than the reference</span>
+
+Here, `x` has the lifetime `'b`, which in this case is larger than `'a`. This
+means `r` can reference `x` because Rust knows that the reference in `r` will
+always be valid while `x` is valid.
+
+Now that you know where the lifetimes of references are and how Rust analyzes
+lifetimes to ensure references will always be valid, let’s explore generic
+lifetimes of parameters and return values in the context of functions.
+
+### Generic Lifetimes in Functions
+
+We’ll write a function that returns the longer of two string slices. This
+function will take two string slices and return a single string slice. After
+we’ve implemented the `longest` function, the code in Listing 10-19 should
+print `The longest string is abcd`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-19/src/main.rs}}
+```
+
+<span class="caption">Listing 10-19: A `main` function that calls the `longest`
+function to find the longer of two string slices</span>
+
+Note that we want the function to take string slices, which are references,
+rather than strings, because we don’t want the `longest` function to take
+ownership of its parameters. Refer to the [“String Slices as
+Parameters”][string-slices-as-parameters]<!-- ignore --> section in Chapter 4
+for more discussion about why the parameters we use in Listing 10-19 are the
+ones we want.
+
+If we try to implement the `longest` function as shown in Listing 10-20, it
+won’t compile.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-20: An implementation of the `longest`
+function that returns the longer of two string slices but does not yet
+compile</span>
+
+Instead, we get the following error that talks about lifetimes:
+
+```console
+{{#include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-20/output.txt}}
+```
+
+The help text reveals that the return type needs a generic lifetime parameter
+on it because Rust can’t tell whether the reference being returned refers to
+`x` or `y`. Actually, we don’t know either, because the `if` block in the body
+of this function returns a reference to `x` and the `else` block returns a
+reference to `y`!
+
+When we’re defining this function, we don’t know the concrete values that will
+be passed into this function, so we don’t know whether the `if` case or the
+`else` case will execute. We also don’t know the concrete lifetimes of the
+references that will be passed in, so we can’t look at the scopes as we did in
+Listings 10-17 and 10-18 to determine whether the reference we return will
+always be valid. The borrow checker can’t determine this either, because it
+doesn’t know how the lifetimes of `x` and `y` relate to the lifetime of the
+return value. To fix this error, we’ll add generic lifetime parameters that
+define the relationship between the references so the borrow checker can
+perform its analysis.
+
+### Lifetime Annotation Syntax
+
+Lifetime annotations don’t change how long any of the references live. Rather,
+they describe the relationships of the lifetimes of multiple references to each
+other without affecting the lifetimes. Just as functions can accept any type
+when the signature specifies a generic type parameter, functions can accept
+references with any lifetime by specifying a generic lifetime parameter.
+
+Lifetime annotations have a slightly unusual syntax: the names of lifetime
+parameters must start with an apostrophe (`'`) and are usually all lowercase
+and very short, like generic types. Most people use the name `'a` for the first
+lifetime annotation. We place lifetime parameter annotations after the `&` of a
+reference, using a space to separate the annotation from the reference’s type.
+
+Here are some examples: a reference to an `i32` without a lifetime parameter, a
+reference to an `i32` that has a lifetime parameter named `'a`, and a mutable
+reference to an `i32` that also has the lifetime `'a`.
+
+```rust,ignore
+&i32 // a reference
+&'a i32 // a reference with an explicit lifetime
+&'a mut i32 // a mutable reference with an explicit lifetime
+```
+
+One lifetime annotation by itself doesn’t have much meaning, because the
+annotations are meant to tell Rust how generic lifetime parameters of multiple
+references relate to each other. Let’s examine how the lifetime annotations
+relate to each other in the context of the `longest` function.
+
+### Lifetime Annotations in Function Signatures
+
+To use lifetime annotations in function signatures, we need to declare the
+generic *lifetime* parameters inside angle brackets between the function name
+and the parameter list, just as we did with generic *type* parameters.
+
+We want the signature to express the following constraint: the returned
+reference will be valid as long as both the parameters are valid. This is the
+relationship between lifetimes of the parameters and the return value. We’ll
+name the lifetime `'a` and then add it to each reference, as shown in Listing
+10-21.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-21/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-21: The `longest` function definition
+specifying that all the references in the signature must have the same lifetime
+`'a`</span>
+
+This code should compile and produce the result we want when we use it with the
+`main` function in Listing 10-19.
+
+The function signature now tells Rust that for some lifetime `'a`, the function
+takes two parameters, both of which are string slices that live at least as
+long as lifetime `'a`. The function signature also tells Rust that the string
+slice returned from the function will live at least as long as lifetime `'a`.
+In practice, it means that the lifetime of the reference returned by the
+`longest` function is the same as the smaller of the lifetimes of the values
+referred to by the function arguments. These relationships are what we want
+Rust to use when analyzing this code.
+
+Remember, when we specify the lifetime parameters in this function signature,
+we’re not changing the lifetimes of any values passed in or returned. Rather,
+we’re specifying that the borrow checker should reject any values that don’t
+adhere to these constraints. Note that the `longest` function doesn’t need to
+know exactly how long `x` and `y` will live, only that some scope can be
+substituted for `'a` that will satisfy this signature.
+
+When annotating lifetimes in functions, the annotations go in the function
+signature, not in the function body. The lifetime annotations become part of
+the contract of the function, much like the types in the signature. Having
+function signatures contain the lifetime contract means the analysis the Rust
+compiler does can be simpler. If there’s a problem with the way a function is
+annotated or the way it is called, the compiler errors can point to the part of
+our code and the constraints more precisely. If, instead, the Rust compiler
+made more inferences about what we intended the relationships of the lifetimes
+to be, the compiler might only be able to point to a use of our code many steps
+away from the cause of the problem.
+
+When we pass concrete references to `longest`, the concrete lifetime that is
+substituted for `'a` is the part of the scope of `x` that overlaps with the
+scope of `y`. In other words, the generic lifetime `'a` will get the concrete
+lifetime that is equal to the smaller of the lifetimes of `x` and `y`. Because
+we’ve annotated the returned reference with the same lifetime parameter `'a`,
+the returned reference will also be valid for the length of the smaller of the
+lifetimes of `x` and `y`.
+
+Let’s look at how the lifetime annotations restrict the `longest` function by
+passing in references that have different concrete lifetimes. Listing 10-22 is
+a straightforward example.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-22/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-22: Using the `longest` function with
+references to `String` values that have different concrete lifetimes</span>
+
+In this example, `string1` is valid until the end of the outer scope, `string2`
+is valid until the end of the inner scope, and `result` references something
+that is valid until the end of the inner scope. Run this code, and you’ll see
+that the borrow checker approves; it will compile and print `The longest string
+is long string is long`.
+
+Next, let’s try an example that shows that the lifetime of the reference in
+`result` must be the smaller lifetime of the two arguments. We’ll move the
+declaration of the `result` variable outside the inner scope but leave the
+assignment of the value to the `result` variable inside the scope with
+`string2`. Then we’ll move the `println!` that uses `result` to outside the
+inner scope, after the inner scope has ended. The code in Listing 10-23 will
+not compile.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-23: Attempting to use `result` after `string2`
+has gone out of scope</span>
+
+When we try to compile this code, we get this error:
+
+```console
+{{#include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-23/output.txt}}
+```
+
+The error shows that for `result` to be valid for the `println!` statement,
+`string2` would need to be valid until the end of the outer scope. Rust knows
+this because we annotated the lifetimes of the function parameters and return
+values using the same lifetime parameter `'a`.
+
+As humans, we can look at this code and see that `string1` is longer than
+`string2` and therefore `result` will contain a reference to `string1`.
+Because `string1` has not gone out of scope yet, a reference to `string1` will
+still be valid for the `println!` statement. However, the compiler can’t see
+that the reference is valid in this case. We’ve told Rust that the lifetime of
+the reference returned by the `longest` function is the same as the smaller of
+the lifetimes of the references passed in. Therefore, the borrow checker
+disallows the code in Listing 10-23 as possibly having an invalid reference.
+
+Try designing more experiments that vary the values and lifetimes of the
+references passed in to the `longest` function and how the returned reference
+is used. Make hypotheses about whether or not your experiments will pass the
+borrow checker before you compile; then check to see if you’re right!
+
+### Thinking in Terms of Lifetimes
+
+The way in which you need to specify lifetime parameters depends on what your
+function is doing. For example, if we changed the implementation of the
+`longest` function to always return the first parameter rather than the longest
+string slice, we wouldn’t need to specify a lifetime on the `y` parameter. The
+following code will compile:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-08-only-one-reference-with-lifetime/src/main.rs:here}}
+```
+
+We’ve specified a lifetime parameter `'a` for the parameter `x` and the return
+type, but not for the parameter `y`, because the lifetime of `y` does not have
+any relationship with the lifetime of `x` or the return value.
+
+When returning a reference from a function, the lifetime parameter for the
+return type needs to match the lifetime parameter for one of the parameters. If
+the reference returned does *not* refer to one of the parameters, it must refer
+to a value created within this function. However, this would be a dangling
+reference because the value will go out of scope at the end of the function.
+Consider this attempted implementation of the `longest` function that won’t
+compile:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/src/main.rs:here}}
+```
+
+Here, even though we’ve specified a lifetime parameter `'a` for the return
+type, this implementation will fail to compile because the return value
+lifetime is not related to the lifetime of the parameters at all. Here is the
+error message we get:
+
+```console
+{{#include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-09-unrelated-lifetime/output.txt}}
+```
+
+The problem is that `result` goes out of scope and gets cleaned up at the end
+of the `longest` function. We’re also trying to return a reference to `result`
+from the function. There is no way we can specify lifetime parameters that
+would change the dangling reference, and Rust won’t let us create a dangling
+reference. In this case, the best fix would be to return an owned data type
+rather than a reference so the calling function is then responsible for
+cleaning up the value.
+
+Ultimately, lifetime syntax is about connecting the lifetimes of various
+parameters and return values of functions. Once they’re connected, Rust has
+enough information to allow memory-safe operations and disallow operations that
+would create dangling pointers or otherwise violate memory safety.
+
+### Lifetime Annotations in Struct Definitions
+
+So far, the structs we’ve defined all hold owned types. We can define structs to
+hold references, but in that case we would need to add a lifetime annotation on
+every reference in the struct’s definition. Listing 10-24 has a struct named
+`ImportantExcerpt` that holds a string slice.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-24/src/main.rs}}
+```
+
+<span class="caption">Listing 10-24: A struct that holds a reference, requiring
+a lifetime annotation</span>
+
+This struct has the single field `part` that holds a string slice, which is a
+reference. As with generic data types, we declare the name of the generic
+lifetime parameter inside angle brackets after the name of the struct so we can
+use the lifetime parameter in the body of the struct definition. This
+annotation means an instance of `ImportantExcerpt` can’t outlive the reference
+it holds in its `part` field.
+
+The `main` function here creates an instance of the `ImportantExcerpt` struct
+that holds a reference to the first sentence of the `String` owned by the
+variable `novel`. The data in `novel` exists before the `ImportantExcerpt`
+instance is created. In addition, `novel` doesn’t go out of scope until after
+the `ImportantExcerpt` goes out of scope, so the reference in the
+`ImportantExcerpt` instance is valid.
+
+### Lifetime Elision
+
+You’ve learned that every reference has a lifetime and that you need to specify
+lifetime parameters for functions or structs that use references. However, in
+Chapter 4 we had a function in Listing 4-9, shown again in Listing 10-25, that
+compiled without lifetime annotations.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/listing-10-25/src/main.rs:here}}
+```
+
+<span class="caption">Listing 10-25: A function we defined in Listing 4-9 that
+compiled without lifetime annotations, even though the parameter and return
+type are references</span>
+
+The reason this function compiles without lifetime annotations is historical:
+in early versions (pre-1.0) of Rust, this code wouldn’t have compiled because
+every reference needed an explicit lifetime. At that time, the function
+signature would have been written like this:
+
+```rust,ignore
+fn first_word<'a>(s: &'a str) -> &'a str {
+```
+
+After writing a lot of Rust code, the Rust team found that Rust programmers
+were entering the same lifetime annotations over and over in particular
+situations. These situations were predictable and followed a few deterministic
+patterns. The developers programmed these patterns into the compiler’s code so
+the borrow checker could infer the lifetimes in these situations and wouldn’t
+need explicit annotations.
+
+This piece of Rust history is relevant because it’s possible that more
+deterministic patterns will emerge and be added to the compiler. In the future,
+even fewer lifetime annotations might be required.
+
+The patterns programmed into Rust’s analysis of references are called the
+*lifetime elision rules*. These aren’t rules for programmers to follow; they’re
+a set of particular cases that the compiler will consider, and if your code
+fits these cases, you don’t need to write the lifetimes explicitly.
+
+The elision rules don’t provide full inference. If Rust deterministically
+applies the rules but there is still ambiguity as to what lifetimes the
+references have, the compiler won’t guess what the lifetime of the remaining
+references should be. Instead of guessing, the compiler will give you an error
+that you can resolve by adding the lifetime annotations.
+
+Lifetimes on function or method parameters are called *input lifetimes*, and
+lifetimes on return values are called *output lifetimes*.
+
+The compiler uses three rules to figure out the lifetimes of the references
+when there aren’t explicit annotations. The first rule applies to input
+lifetimes, and the second and third rules apply to output lifetimes. If the
+compiler gets to the end of the three rules and there are still references for
+which it can’t figure out lifetimes, the compiler will stop with an error.
+These rules apply to `fn` definitions as well as `impl` blocks.
+
+The first rule is that the compiler assigns a lifetime parameter to each
+parameter that’s a reference. In other words, a function with one parameter gets
+one lifetime parameter: `fn foo<'a>(x: &'a i32)`; a function with two
+parameters gets two separate lifetime parameters: `fn foo<'a, 'b>(x: &'a i32,
+y: &'b i32)`; and so on.
+
+The second rule is that, if there is exactly one input lifetime parameter, that
+lifetime is assigned to all output lifetime parameters: `fn foo<'a>(x: &'a i32)
+-> &'a i32`.
+
+The third rule is that, if there are multiple input lifetime parameters, but
+one of them is `&self` or `&mut self` because this is a method, the lifetime of
+`self` is assigned to all output lifetime parameters. This third rule makes
+methods much nicer to read and write because fewer symbols are necessary.
+
+Let’s pretend we’re the compiler. We’ll apply these rules to figure out the
+lifetimes of the references in the signature of the `first_word` function in
+Listing 10-25. The signature starts without any lifetimes associated with the
+references:
+
+```rust,ignore
+fn first_word(s: &str) -> &str {
+```
+
+Then the compiler applies the first rule, which specifies that each parameter
+gets its own lifetime. We’ll call it `'a` as usual, so now the signature is
+this:
+
+```rust,ignore
+fn first_word<'a>(s: &'a str) -> &str {
+```
+
+The second rule applies because there is exactly one input lifetime. The second
+rule specifies that the lifetime of the one input parameter gets assigned to
+the output lifetime, so the signature is now this:
+
+```rust,ignore
+fn first_word<'a>(s: &'a str) -> &'a str {
+```
+
+Now all the references in this function signature have lifetimes, and the
+compiler can continue its analysis without needing the programmer to annotate
+the lifetimes in this function signature.
+
+Let’s look at another example, this time using the `longest` function that had
+no lifetime parameters when we started working with it in Listing 10-20:
+
+```rust,ignore
+fn longest(x: &str, y: &str) -> &str {
+```
+
+Let’s apply the first rule: each parameter gets its own lifetime. This time we
+have two parameters instead of one, so we have two lifetimes:
+
+```rust,ignore
+fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
+```
+
+You can see that the second rule doesn’t apply because there is more than one
+input lifetime. The third rule doesn’t apply either, because `longest` is a
+function rather than a method, so none of the parameters are `self`. After
+working through all three rules, we still haven’t figured out what the return
+type’s lifetime is. This is why we got an error trying to compile the code in
+Listing 10-20: the compiler worked through the lifetime elision rules but still
+couldn’t figure out all the lifetimes of the references in the signature.
+
+Because the third rule really only applies in method signatures, we’ll look at
+lifetimes in that context next to see why the third rule means we don’t have to
+annotate lifetimes in method signatures very often.
+
+### Lifetime Annotations in Method Definitions
+
+When we implement methods on a struct with lifetimes, we use the same syntax as
+that of generic type parameters shown in Listing 10-11. Where we declare and
+use the lifetime parameters depends on whether they’re related to the struct
+fields or the method parameters and return values.
+
+Lifetime names for struct fields always need to be declared after the `impl`
+keyword and then used after the struct’s name, because those lifetimes are part
+of the struct’s type.
+
+In method signatures inside the `impl` block, references might be tied to the
+lifetime of references in the struct’s fields, or they might be independent. In
+addition, the lifetime elision rules often make it so that lifetime annotations
+aren’t necessary in method signatures. Let’s look at some examples using the
+struct named `ImportantExcerpt` that we defined in Listing 10-24.
+
+First, we’ll use a method named `level` whose only parameter is a reference to
+`self` and whose return value is an `i32`, which is not a reference to anything:
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs:1st}}
+```
+
+The lifetime parameter declaration after `impl` and its use after the type name
+are required, but we’re not required to annotate the lifetime of the reference
+to `self` because of the first elision rule.
+
+Here is an example where the third lifetime elision rule applies:
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-10-lifetimes-on-methods/src/main.rs:3rd}}
+```
+
+There are two input lifetimes, so Rust applies the first lifetime elision rule
+and gives both `&self` and `announcement` their own lifetimes. Then, because
+one of the parameters is `&self`, the return type gets the lifetime of `&self`,
+and all lifetimes have been accounted for.
+
+### The Static Lifetime
+
+One special lifetime we need to discuss is `'static`, which denotes that the
+affected reference *can* live for the entire duration of the program. All
+string literals have the `'static` lifetime, which we can annotate as follows:
+
+```rust
+let s: &'static str = "I have a static lifetime.";
+```
+
+The text of this string is stored directly in the program’s binary, which
+is always available. Therefore, the lifetime of all string literals is
+`'static`.
+
+You might see suggestions to use the `'static` lifetime in error messages. But
+before specifying `'static` as the lifetime for a reference, think about
+whether the reference you have actually lives the entire lifetime of your
+program or not, and whether you want it to. Most of the time, an error message
+suggesting the `'static` lifetime results from attempting to create a dangling
+reference or a mismatch of the available lifetimes. In such cases, the solution
+is fixing those problems, not specifying the `'static` lifetime.
+
+## Generic Type Parameters, Trait Bounds, and Lifetimes Together
+
+Let’s briefly look at the syntax of specifying generic type parameters, trait
+bounds, and lifetimes all in one function!
+
+```rust
+{{#rustdoc_include ../listings/ch10-generic-types-traits-and-lifetimes/no-listing-11-generics-traits-and-lifetimes/src/main.rs:here}}
+```
+
+This is the `longest` function from Listing 10-21 that returns the longer of
+two string slices. But now it has an extra parameter named `ann` of the generic
+type `T`, which can be filled in by any type that implements the `Display`
+trait as specified by the `where` clause. This extra parameter will be printed
+using `{}`, which is why the `Display` trait bound is necessary. Because
+lifetimes are a type of generic, the declarations of the lifetime parameter
+`'a` and the generic type parameter `T` go in the same list inside the angle
+brackets after the function name.
+
+## Summary
+
+We covered a lot in this chapter! Now that you know about generic type
+parameters, traits and trait bounds, and generic lifetime parameters, you’re
+ready to write code without repetition that works in many different situations.
+Generic type parameters let you apply the code to different types. Traits and
+trait bounds ensure that even though the types are generic, they’ll have the
+behavior the code needs. You learned how to use lifetime annotations to ensure
+that this flexible code won’t have any dangling references. And all of this
+analysis happens at compile time, which doesn’t affect runtime performance!
+
+Believe it or not, there is much more to learn on the topics we discussed in
+this chapter: Chapter 17 discusses trait objects, which are another way to use
+traits. There are also more complex scenarios involving lifetime annotations
+that you will only need in very advanced scenarios; for those, you should read
+the [Rust Reference][reference]. But next, you’ll learn how to write tests in
+Rust so you can make sure your code is working the way it should.
+
+[references-and-borrowing]:
+ch04-02-references-and-borrowing.html#references-and-borrowing
+[string-slices-as-parameters]:
+ch04-03-slices.html#string-slices-as-parameters
+[reference]: ../reference/index.html
diff --git a/src/doc/book/src/ch11-00-testing.md b/src/doc/book/src/ch11-00-testing.md
new file mode 100644
index 000000000..7f11ec149
--- /dev/null
+++ b/src/doc/book/src/ch11-00-testing.md
@@ -0,0 +1,32 @@
+# Writing Automated Tests
+
+In his 1972 essay “The Humble Programmer,” Edsger W. Dijkstra said that
+“Program testing can be a very effective way to show the presence of bugs, but
+it is hopelessly inadequate for showing their absence.” That doesn’t mean we
+shouldn’t try to test as much as we can!
+
+Correctness in our programs is the extent to which our code does what we intend
+it to do. Rust is designed with a high degree of concern about the correctness
+of programs, but correctness is complex and not easy to prove. Rust’s type
+system shoulders a huge part of this burden, but the type system cannot catch
+everything. As such, Rust includes support for writing automated software tests.
+
+Say we write a function `add_two` that adds 2 to whatever number is passed to
+it. This function’s signature accepts an integer as a parameter and returns an
+integer as a result. When we implement and compile that function, Rust does all
+the type checking and borrow checking that you’ve learned so far to ensure
+that, for instance, we aren’t passing a `String` value or an invalid reference
+to this function. But Rust *can’t* check that this function will do precisely
+what we intend, which is return the parameter plus 2 rather than, say, the
+parameter plus 10 or the parameter minus 50! That’s where tests come in.
+
+We can write tests that assert, for example, that when we pass `3` to the
+`add_two` function, the returned value is `5`. We can run these tests whenever
+we make changes to our code to make sure any existing correct behavior has not
+changed.
+
+Testing is a complex skill: although we can’t cover every detail about how to
+write good tests in one chapter, we’ll discuss the mechanics of Rust’s testing
+facilities. We’ll talk about the annotations and macros available to you when
+writing your tests, the default behavior and options provided for running your
+tests, and how to organize tests into unit tests and integration tests.
diff --git a/src/doc/book/src/ch11-01-writing-tests.md b/src/doc/book/src/ch11-01-writing-tests.md
new file mode 100644
index 000000000..df09aadc8
--- /dev/null
+++ b/src/doc/book/src/ch11-01-writing-tests.md
@@ -0,0 +1,542 @@
+## How to Write Tests
+
+Tests are Rust functions that verify that the non-test code is functioning in
+the expected manner. The bodies of test functions typically perform these three
+actions:
+
+1. Set up any needed data or state.
+2. Run the code you want to test.
+3. Assert the results are what you expect.
+
+Let’s look at the features Rust provides specifically for writing tests that
+take these actions, which include the `test` attribute, a few macros, and the
+`should_panic` attribute.
+
+### The Anatomy of a Test Function
+
+At its simplest, a test in Rust is a function that’s annotated with the `test`
+attribute. Attributes are metadata about pieces of Rust code; one example is
+the `derive` attribute we used with structs in Chapter 5. To change a function
+into a test function, add `#[test]` on the line before `fn`. When you run your
+tests with the `cargo test` command, Rust builds a test runner binary that runs
+the annotated functions and reports on whether each
+test function passes or fails.
+
+Whenever we make a new library project with Cargo, a test module with a test
+function in it is automatically generated for us. This module gives you a
+template for writing your tests so you don’t have to look up the exact
+structure and syntax every time you start a new project. You can add as many
+additional test functions and as many test modules as you want!
+
+We’ll explore some aspects of how tests work by experimenting with the template
+test before we actually test any code. Then we’ll write some real-world tests
+that call some code that we’ve written and assert that its behavior is correct.
+
+Let’s create a new library project called `adder` that will add two numbers:
+
+```console
+$ cargo new adder --lib
+ Created library `adder` project
+$ cd adder
+```
+
+The contents of the *src/lib.rs* file in your `adder` library should look like
+Listing 11-1.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+<!-- manual-regeneration
+cd listings/ch11-writing-automated-tests
+rm -rf listing-11-01
+cargo new listing-11-01 --lib --name adder
+cd listing-11-01
+cargo test
+git co output.txt
+cd ../../..
+-->
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs}}
+```
+
+<span class="caption">Listing 11-1: The test module and function generated
+automatically by `cargo new`</span>
+
+For now, let’s ignore the top two lines and focus on the function. Note the
+`#[test]` annotation: this attribute indicates this is a test function, so the
+test runner knows to treat this function as a test. We might also have non-test
+functions in the `tests` module to help set up common scenarios or perform
+common operations, so we always need to indicate which functions are tests.
+
+The example function body uses the `assert_eq!` macro to assert that `result`,
+which contains the result of adding 2 and 2, equals 4. This assertion serves as
+an example of the format for a typical test. Let’s run it to see that this test
+passes.
+
+The `cargo test` command runs all tests in our project, as shown in Listing
+11-2.
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-01/output.txt}}
+```
+
+<span class="caption">Listing 11-2: The output from running the automatically
+generated test</span>
+
+Cargo compiled and ran the test. We see the line `running 1 test`. The next
+line shows the name of the generated test function, called `it_works`, and that
+the result of running that test is `ok`. The overall summary `test result: ok.`
+means that all the tests passed, and the portion that reads `1 passed; 0
+failed` totals the number of tests that passed or failed.
+
+It’s possible to mark a test as ignored so it doesn’t run in a particular
+instance; we’ll cover that in the [“Ignoring Some Tests Unless Specifically
+Requested”][ignoring]<!-- ignore --> section later in this chapter. Because we
+haven’t done that here, the summary shows `0 ignored`. We can also pass an
+argument to the `cargo test` command to run only tests whose name matches a
+string; this is called *filtering* and we’ll cover that in the [“Running a
+Subset of Tests by Name”][subset]<!-- ignore --> section. We also haven’t
+filtered the tests being run, so the end of the summary shows `0 filtered out`.
+
+The `0 measured` statistic is for benchmark tests that measure performance.
+Benchmark tests are, as of this writing, only available in nightly Rust. See
+[the documentation about benchmark tests][bench] to learn more.
+
+The next part of the test output starting at `Doc-tests adder` is for the
+results of any documentation tests. We don’t have any documentation tests yet,
+but Rust can compile any code examples that appear in our API documentation.
+This feature helps keep your docs and your code in sync! We’ll discuss how to
+write documentation tests in the [“Documentation Comments as
+Tests”][doc-comments]<!-- ignore --> section of Chapter 14. For now, we’ll
+ignore the `Doc-tests` output.
+
+Let’s start to customize the test to our own needs. First change the name of
+the `it_works` function to a different name, such as `exploration`, like so:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/src/lib.rs}}
+```
+
+Then run `cargo test` again. The output now shows `exploration` instead of
+`it_works`:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-01-changing-test-name/output.txt}}
+```
+
+Now we’ll add another test, but this time we’ll make a test that fails! Tests
+fail when something in the test function panics. Each test is run in a new
+thread, and when the main thread sees that a test thread has died, the test is
+marked as failed. In Chapter 9, we talked about how the simplest way to panic
+is to call the `panic!` macro. Enter the new test as a function named
+`another`, so your *src/lib.rs* file looks like Listing 11-3.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,panics,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-03/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 11-3: Adding a second test that will fail because
+we call the `panic!` macro</span>
+
+Run the tests again using `cargo test`. The output should look like Listing
+11-4, which shows that our `exploration` test passed and `another` failed.
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-03/output.txt}}
+```
+
+<span class="caption">Listing 11-4: Test results when one test passes and one
+test fails</span>
+
+Instead of `ok`, the line `test tests::another` shows `FAILED`. Two new
+sections appear between the individual results and the summary: the first
+displays the detailed reason for each test failure. In this case, we get the
+details that `another` failed because it `panicked at 'Make this test fail'` on
+line 10 in the *src/lib.rs* file. The next section lists just the names of all
+the failing tests, which is useful when there are lots of tests and lots of
+detailed failing test output. We can use the name of a failing test to run just
+that test to more easily debug it; we’ll talk more about ways to run tests in
+the [“Controlling How Tests Are Run”][controlling-how-tests-are-run]<!-- ignore
+--> section.
+
+The summary line displays at the end: overall, our test result is `FAILED`. We
+had one test pass and one test fail.
+
+Now that you’ve seen what the test results look like in different scenarios,
+let’s look at some macros other than `panic!` that are useful in tests.
+
+### Checking Results with the `assert!` Macro
+
+The `assert!` macro, provided by the standard library, is useful when you want
+to ensure that some condition in a test evaluates to `true`. We give the
+`assert!` macro an argument that evaluates to a Boolean. If the value is
+`true`, nothing happens and the test passes. If the value is `false`, the
+`assert!` macro calls `panic!` to cause the test to fail. Using the `assert!`
+macro helps us check that our code is functioning in the way we intend.
+
+In Chapter 5, Listing 5-15, we used a `Rectangle` struct and a `can_hold`
+method, which are repeated here in Listing 11-5. Let’s put this code in the
+*src/lib.rs* file, then write some tests for it using the `assert!` macro.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-05/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 11-5: Using the `Rectangle` struct and its
+`can_hold` method from Chapter 5</span>
+
+The `can_hold` method returns a Boolean, which means it’s a perfect use case
+for the `assert!` macro. In Listing 11-6, we write a test that exercises the
+`can_hold` method by creating a `Rectangle` instance that has a width of 8 and
+a height of 7 and asserting that it can hold another `Rectangle` instance that
+has a width of 5 and a height of 1.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-06/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 11-6: A test for `can_hold` that checks whether a
+larger rectangle can indeed hold a smaller rectangle</span>
+
+Note that we’ve added a new line inside the `tests` module: `use super::*;`.
+The `tests` module is a regular module that follows the usual visibility rules
+we covered in Chapter 7 in the [“Paths for Referring to an Item in the Module
+Tree”][paths-for-referring-to-an-item-in-the-module-tree]<!-- ignore -->
+section. Because the `tests` module is an inner module, we need to bring the
+code under test in the outer module into the scope of the inner module. We use
+a glob here so anything we define in the outer module is available to this
+`tests` module.
+
+We’ve named our test `larger_can_hold_smaller`, and we’ve created the two
+`Rectangle` instances that we need. Then we called the `assert!` macro and
+passed it the result of calling `larger.can_hold(&smaller)`. This expression is
+supposed to return `true`, so our test should pass. Let’s find out!
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-06/output.txt}}
+```
+
+It does pass! Let’s add another test, this time asserting that a smaller
+rectangle cannot hold a larger rectangle:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/src/lib.rs:here}}
+```
+
+Because the correct result of the `can_hold` function in this case is `false`,
+we need to negate that result before we pass it to the `assert!` macro. As a
+result, our test will pass if `can_hold` returns `false`:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-02-adding-another-rectangle-test/output.txt}}
+```
+
+Two tests that pass! Now let’s see what happens to our test results when we
+introduce a bug in our code. We’ll change the implementation of the `can_hold`
+method by replacing the greater-than sign with a less-than sign when it
+compares the widths:
+
+```rust,not_desired_behavior,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/src/lib.rs:here}}
+```
+
+Running the tests now produces the following:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-03-introducing-a-bug/output.txt}}
+```
+
+Our tests caught the bug! Because `larger.width` is 8 and `smaller.width` is
+5, the comparison of the widths in `can_hold` now returns `false`: 8 is not
+less than 5.
+
+### Testing Equality with the `assert_eq!` and `assert_ne!` Macros
+
+A common way to verify functionality is to test for equality between the result
+of the code under test and the value you expect the code to return. You could
+do this using the `assert!` macro and passing it an expression using the `==`
+operator. However, this is such a common test that the standard library
+provides a pair of macros—`assert_eq!` and `assert_ne!`—to perform this test
+more conveniently. These macros compare two arguments for equality or
+inequality, respectively. They’ll also print the two values if the assertion
+fails, which makes it easier to see *why* the test failed; conversely, the
+`assert!` macro only indicates that it got a `false` value for the `==`
+expression, without printing the values that led to the `false` value.
+
+In Listing 11-7, we write a function named `add_two` that adds `2` to its
+parameter, then we test this function using the `assert_eq!` macro.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-07/src/lib.rs}}
+```
+
+<span class="caption">Listing 11-7: Testing the function `add_two` using the
+`assert_eq!` macro</span>
+
+Let’s check that it passes!
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-07/output.txt}}
+```
+
+We pass `4` as the argument to `assert_eq!`, which is equal to the result of
+calling `add_two(2)`. The line for this test is `test tests::it_adds_two ...
+ok`, and the `ok` text indicates that our test passed!
+
+Let’s introduce a bug into our code to see what `assert_eq!` looks like when it
+fails. Change the implementation of the `add_two` function to instead add `3`:
+
+```rust,not_desired_behavior,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/src/lib.rs:here}}
+```
+
+Run the tests again:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-04-bug-in-add-two/output.txt}}
+```
+
+Our test caught the bug! The `it_adds_two` test failed, and the message tells
+us that the assertion that fails was `` assertion failed: `(left == right)` ``
+and what the `left` and `right` values are. This message helps us start
+debugging: the `left` argument was `4` but the `right` argument, where we had
+`add_two(2)`, was `5`. You can imagine that this would be especially helpful
+when we have a lot of tests going on.
+
+Note that in some languages and test frameworks, the parameters to equality
+assertion functions are called `expected` and `actual`, and the order in which
+we specify the arguments matters. However, in Rust, they’re called `left` and
+`right`, and the order in which we specify the value we expect and the value
+the code produces doesn’t matter. We could write the assertion in this test as
+`assert_eq!(add_two(2), 4)`, which would result in the same failure message
+that displays `` assertion failed: `(left == right)` ``.
+
+The `assert_ne!` macro will pass if the two values we give it are not equal and
+fail if they’re equal. This macro is most useful for cases when we’re not sure
+what a value *will* be, but we know what the value definitely *shouldn’t* be.
+For example, if we’re testing a function that is guaranteed to change its input
+in some way, but the way in which the input is changed depends on the day of
+the week that we run our tests, the best thing to assert might be that the
+output of the function is not equal to the input.
+
+Under the surface, the `assert_eq!` and `assert_ne!` macros use the operators
+`==` and `!=`, respectively. When the assertions fail, these macros print their
+arguments using debug formatting, which means the values being compared must
+implement the `PartialEq` and `Debug` traits. All primitive types and most of
+the standard library types implement these traits. For structs and enums that
+you define yourself, you’ll need to implement `PartialEq` to assert equality of
+those types. You’ll also need to implement `Debug` to print the values when the
+assertion fails. Because both traits are derivable traits, as mentioned in
+Listing 5-12 in Chapter 5, this is usually as straightforward as adding the
+`#[derive(PartialEq, Debug)]` annotation to your struct or enum definition. See
+Appendix C, [“Derivable Traits,”][derivable-traits]<!-- ignore --> for more
+details about these and other derivable traits.
+
+### Adding Custom Failure Messages
+
+You can also add a custom message to be printed with the failure message as
+optional arguments to the `assert!`, `assert_eq!`, and `assert_ne!` macros. Any
+arguments specified after the required arguments are passed along to the
+`format!` macro (discussed in Chapter 8 in the [“Concatenation with the `+`
+Operator or the `format!`
+Macro”][concatenation-with-the--operator-or-the-format-macro]<!-- ignore -->
+section), so you can pass a format string that contains `{}` placeholders and
+values to go in those placeholders. Custom messages are useful for documenting
+what an assertion means; when a test fails, you’ll have a better idea of what
+the problem is with the code.
+
+For example, let’s say we have a function that greets people by name and we
+want to test that the name we pass into the function appears in the output:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-05-greeter/src/lib.rs}}
+```
+
+The requirements for this program haven’t been agreed upon yet, and we’re
+pretty sure the `Hello` text at the beginning of the greeting will change. We
+decided we don’t want to have to update the test when the requirements change,
+so instead of checking for exact equality to the value returned from the
+`greeting` function, we’ll just assert that the output contains the text of the
+input parameter.
+
+Now let’s introduce a bug into this code by changing `greeting` to exclude
+`name` to see what the default test failure looks like:
+
+```rust,not_desired_behavior,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/src/lib.rs:here}}
+```
+
+Running this test produces the following:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-06-greeter-with-bug/output.txt}}
+```
+
+This result just indicates that the assertion failed and which line the
+assertion is on. A more useful failure message would print the value from the
+`greeting` function. Let’s add a custom failure message composed of a format
+string with a placeholder filled in with the actual value we got from the
+`greeting` function:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/src/lib.rs:here}}
+```
+
+Now when we run the test, we’ll get a more informative error message:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-07-custom-failure-message/output.txt}}
+```
+
+We can see the value we actually got in the test output, which would help us
+debug what happened instead of what we were expecting to happen.
+
+### Checking for Panics with `should_panic`
+
+In addition to checking return values, it’s important to check that our code
+handles error conditions as we expect. For example, consider the `Guess` type
+that we created in Chapter 9, Listing 9-13. Other code that uses `Guess`
+depends on the guarantee that `Guess` instances will contain only values
+between 1 and 100. We can write a test that ensures that attempting to create a
+`Guess` instance with a value outside that range panics.
+
+We do this by adding the attribute `should_panic` to our test function. The
+test passes if the code inside the function panics; the test fails if the code
+inside the function doesn’t panic.
+
+Listing 11-8 shows a test that checks that the error conditions of `Guess::new`
+happen when we expect them to.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-08/src/lib.rs}}
+```
+
+<span class="caption">Listing 11-8: Testing that a condition will cause a
+`panic!`</span>
+
+We place the `#[should_panic]` attribute after the `#[test]` attribute and
+before the test function it applies to. Let’s look at the result when this test
+passes:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-08/output.txt}}
+```
+
+Looks good! Now let’s introduce a bug in our code by removing the condition
+that the `new` function will panic if the value is greater than 100:
+
+```rust,not_desired_behavior,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/src/lib.rs:here}}
+```
+
+When we run the test in Listing 11-8, it will fail:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-08-guess-with-bug/output.txt}}
+```
+
+We don’t get a very helpful message in this case, but when we look at the test
+function, we see that it’s annotated with `#[should_panic]`. The failure we got
+means that the code in the test function did not cause a panic.
+
+Tests that use `should_panic` can be imprecise. A `should_panic` test would
+pass even if the test panics for a different reason from the one we were
+expecting. To make `should_panic` tests more precise, we can add an optional
+`expected` parameter to the `should_panic` attribute. The test harness will
+make sure that the failure message contains the provided text. For example,
+consider the modified code for `Guess` in Listing 11-9 where the `new` function
+panics with different messages depending on whether the value is too small or
+too large.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-09/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 11-9: Testing for a `panic!` with a panic message
+containing a specified substring</span>
+
+This test will pass because the value we put in the `should_panic` attribute’s
+`expected` parameter is a substring of the message that the `Guess::new`
+function panics with. We could have specified the entire panic message that we
+expect, which in this case would be `Guess value must be less than or equal to
+100, got 200.` What you choose to specify depends on how much of the panic
+message is unique or dynamic and how precise you want your test to be. In this
+case, a substring of the panic message is enough to ensure that the code in the
+test function executes the `else if value > 100` case.
+
+To see what happens when a `should_panic` test with an `expected` message
+fails, let’s again introduce a bug into our code by swapping the bodies of the
+`if value < 1` and the `else if value > 100` blocks:
+
+```rust,ignore,not_desired_behavior
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/src/lib.rs:here}}
+```
+
+This time when we run the `should_panic` test, it will fail:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-09-guess-with-panic-msg-bug/output.txt}}
+```
+
+The failure message indicates that this test did indeed panic as we expected,
+but the panic message did not include the expected string `'Guess value must be
+less than or equal to 100'`. The panic message that we did get in this case was
+`Guess value must be greater than or equal to 1, got 200.` Now we can start
+figuring out where our bug is!
+
+### Using `Result<T, E>` in Tests
+
+Our tests so far all panic when they fail. We can also write tests that use
+`Result<T, E>`! Here’s the test from Listing 11-1, rewritten to use `Result<T,
+E>` and return an `Err` instead of panicking:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-10-result-in-tests/src/lib.rs}}
+```
+
+The `it_works` function now has the `Result<(), String>` return type. In the
+body of the function, rather than calling the `assert_eq!` macro, we return
+`Ok(())` when the test passes and an `Err` with a `String` inside when the test
+fails.
+
+Writing tests so they return a `Result<T, E>` enables you to use the question
+mark operator in the body of tests, which can be a convenient way to write
+tests that should fail if any operation within them returns an `Err` variant.
+
+You can’t use the `#[should_panic]` annotation on tests that use `Result<T,
+E>`. To assert that an operation returns an `Err` variant, *don’t* use the
+question mark operator on the `Result<T, E>` value. Instead, use
+`assert!(value.is_err())`.
+
+Now that you know several ways to write tests, let’s look at what is happening
+when we run our tests and explore the different options we can use with `cargo
+test`.
+
+[concatenation-with-the--operator-or-the-format-macro]:
+ch08-02-strings.html#concatenation-with-the--operator-or-the-format-macro
+[bench]: ../unstable-book/library-features/test.html
+[ignoring]: ch11-02-running-tests.html#ignoring-some-tests-unless-specifically-requested
+[subset]: ch11-02-running-tests.html#running-a-subset-of-tests-by-name
+[controlling-how-tests-are-run]:
+ch11-02-running-tests.html#controlling-how-tests-are-run
+[derivable-traits]: appendix-03-derivable-traits.html
+[doc-comments]: ch14-02-publishing-to-crates-io.html#documentation-comments-as-tests
+[paths-for-referring-to-an-item-in-the-module-tree]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html
diff --git a/src/doc/book/src/ch11-02-running-tests.md b/src/doc/book/src/ch11-02-running-tests.md
new file mode 100644
index 000000000..194718256
--- /dev/null
+++ b/src/doc/book/src/ch11-02-running-tests.md
@@ -0,0 +1,183 @@
+## Controlling How Tests Are Run
+
+Just as `cargo run` compiles your code and then runs the resulting binary,
+`cargo test` compiles your code in test mode and runs the resulting test
+binary. The default behavior of the binary produced by `cargo test` is to run
+all the tests in parallel and capture output generated during test runs,
+preventing the output from being displayed and making it easier to read the
+output related to the test results. You can, however, specify command line
+options to change this default behavior.
+
+Some command line options go to `cargo test`, and some go to the resulting test
+binary. To separate these two types of arguments, you list the arguments that
+go to `cargo test` followed by the separator `--` and then the ones that go to
+the test binary. Running `cargo test --help` displays the options you can use
+with `cargo test`, and running `cargo test -- --help` displays the options you
+can use after the separator.
+
+### Running Tests in Parallel or Consecutively
+
+When you run multiple tests, by default they run in parallel using threads,
+meaning they finish running faster and you get feedback quicker. Because the
+tests are running at the same time, you must make sure your tests don’t depend
+on each other or on any shared state, including a shared environment, such as
+the current working directory or environment variables.
+
+For example, say each of your tests runs some code that creates a file on disk
+named *test-output.txt* and writes some data to that file. Then each test reads
+the data in that file and asserts that the file contains a particular value,
+which is different in each test. Because the tests run at the same time, one
+test might overwrite the file in the time between another test writing and
+reading the file. The second test will then fail, not because the code is
+incorrect but because the tests have interfered with each other while running
+in parallel. One solution is to make sure each test writes to a different file;
+another solution is to run the tests one at a time.
+
+If you don’t want to run the tests in parallel or if you want more fine-grained
+control over the number of threads used, you can send the `--test-threads` flag
+and the number of threads you want to use to the test binary. Take a look at
+the following example:
+
+```console
+$ cargo test -- --test-threads=1
+```
+
+We set the number of test threads to `1`, telling the program not to use any
+parallelism. Running the tests using one thread will take longer than running
+them in parallel, but the tests won’t interfere with each other if they share
+state.
+
+### Showing Function Output
+
+By default, if a test passes, Rust’s test library captures anything printed to
+standard output. For example, if we call `println!` in a test and the test
+passes, we won’t see the `println!` output in the terminal; we’ll see only the
+line that indicates the test passed. If a test fails, we’ll see whatever was
+printed to standard output with the rest of the failure message.
+
+As an example, Listing 11-10 has a silly function that prints the value of its
+parameter and returns 10, as well as a test that passes and a test that fails.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,panics,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-10/src/lib.rs}}
+```
+
+<span class="caption">Listing 11-10: Tests for a function that calls
+`println!`</span>
+
+When we run these tests with `cargo test`, we’ll see the following output:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-10/output.txt}}
+```
+
+Note that nowhere in this output do we see `I got the value 4`, which is what
+is printed when the test that passes runs. That output has been captured. The
+output from the test that failed, `I got the value 8`, appears in the section
+of the test summary output, which also shows the cause of the test failure.
+
+If we want to see printed values for passing tests as well, we can tell Rust
+to also show the output of successful tests with `--show-output`.
+
+```console
+$ cargo test -- --show-output
+```
+
+When we run the tests in Listing 11-10 again with the `--show-output` flag, we
+see the following output:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/output-only-01-show-output/output.txt}}
+```
+
+### Running a Subset of Tests by Name
+
+Sometimes, running a full test suite can take a long time. If you’re working on
+code in a particular area, you might want to run only the tests pertaining to
+that code. You can choose which tests to run by passing `cargo test` the name
+or names of the test(s) you want to run as an argument.
+
+To demonstrate how to run a subset of tests, we’ll first create three tests for
+our `add_two` function, as shown in Listing 11-11, and choose which ones to run.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-11/src/lib.rs}}
+```
+
+<span class="caption">Listing 11-11: Three tests with three different
+names</span>
+
+If we run the tests without passing any arguments, as we saw earlier, all the
+tests will run in parallel:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-11/output.txt}}
+```
+
+#### Running Single Tests
+
+We can pass the name of any test function to `cargo test` to run only that test:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/output-only-02-single-test/output.txt}}
+```
+
+Only the test with the name `one_hundred` ran; the other two tests didn’t match
+that name. The test output lets us know we had more tests that didn’t run by
+displaying `2 filtered out` at the end.
+
+We can’t specify the names of multiple tests in this way; only the first value
+given to `cargo test` will be used. But there is a way to run multiple tests.
+
+#### Filtering to Run Multiple Tests
+
+We can specify part of a test name, and any test whose name matches that value
+will be run. For example, because two of our tests’ names contain `add`, we can
+run those two by running `cargo test add`:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/output-only-03-multiple-tests/output.txt}}
+```
+
+This command ran all tests with `add` in the name and filtered out the test
+named `one_hundred`. Also note that the module in which a test appears becomes
+part of the test’s name, so we can run all the tests in a module by filtering
+on the module’s name.
+
+### Ignoring Some Tests Unless Specifically Requested
+
+Sometimes a few specific tests can be very time-consuming to execute, so you
+might want to exclude them during most runs of `cargo test`. Rather than
+listing as arguments all tests you do want to run, you can instead annotate the
+time-consuming tests using the `ignore` attribute to exclude them, as shown
+here:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/src/lib.rs}}
+```
+
+After `#[test]` we add the `#[ignore]` line to the test we want to exclude. Now
+when we run our tests, `it_works` runs, but `expensive_test` doesn’t:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-11-ignore-a-test/output.txt}}
+```
+
+The `expensive_test` function is listed as `ignored`. If we want to run only
+the ignored tests, we can use `cargo test -- --ignored`:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/output-only-04-running-ignored/output.txt}}
+```
+
+By controlling which tests run, you can make sure your `cargo test` results
+will be fast. When you’re at a point where it makes sense to check the results
+of the `ignored` tests and you have time to wait for the results, you can run
+`cargo test -- --ignored` instead. If you want to run all tests whether they’re
+ignored or not, you can run `cargo test -- --include-ignored`.
diff --git a/src/doc/book/src/ch11-03-test-organization.md b/src/doc/book/src/ch11-03-test-organization.md
new file mode 100644
index 000000000..9f26546cf
--- /dev/null
+++ b/src/doc/book/src/ch11-03-test-organization.md
@@ -0,0 +1,269 @@
+## Test Organization
+
+As mentioned at the start of the chapter, testing is a complex discipline, and
+different people use different terminology and organization. The Rust community
+thinks about tests in terms of two main categories: unit tests and integration
+tests. *Unit tests* are small and more focused, testing one module in isolation
+at a time, and can test private interfaces. *Integration tests* are entirely
+external to your library and use your code in the same way any other external
+code would, using only the public interface and potentially exercising multiple
+modules per test.
+
+Writing both kinds of tests is important to ensure that the pieces of your
+library are doing what you expect them to, separately and together.
+
+### Unit Tests
+
+The purpose of unit tests is to test each unit of code in isolation from the
+rest of the code to quickly pinpoint where code is and isn’t working as
+expected. You’ll put unit tests in the *src* directory in each file with the
+code that they’re testing. The convention is to create a module named `tests`
+in each file to contain the test functions and to annotate the module with
+`cfg(test)`.
+
+#### The Tests Module and `#[cfg(test)]`
+
+The `#[cfg(test)]` annotation on the tests module tells Rust to compile and run
+the test code only when you run `cargo test`, not when you run `cargo build`.
+This saves compile time when you only want to build the library and saves space
+in the resulting compiled artifact because the tests are not included. You’ll
+see that because integration tests go in a different directory, they don’t need
+the `#[cfg(test)]` annotation. However, because unit tests go in the same files
+as the code, you’ll use `#[cfg(test)]` to specify that they shouldn’t be
+included in the compiled result.
+
+Recall that when we generated the new `adder` project in the first section of
+this chapter, Cargo generated this code for us:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-01/src/lib.rs}}
+```
+
+This code is the automatically generated test module. The attribute `cfg`
+stands for *configuration* and tells Rust that the following item should only
+be included given a certain configuration option. In this case, the
+configuration option is `test`, which is provided by Rust for compiling and
+running tests. By using the `cfg` attribute, Cargo compiles our test code only
+if we actively run the tests with `cargo test`. This includes any helper
+functions that might be within this module, in addition to the functions
+annotated with `#[test]`.
+
+#### Testing Private Functions
+
+There’s debate within the testing community about whether or not private
+functions should be tested directly, and other languages make it difficult or
+impossible to test private functions. Regardless of which testing ideology you
+adhere to, Rust’s privacy rules do allow you to test private functions.
+Consider the code in Listing 11-12 with the private function `internal_adder`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-12/src/lib.rs}}
+```
+
+<span class="caption">Listing 11-12: Testing a private function</span>
+
+Note that the `internal_adder` function is not marked as `pub`. Tests are just
+Rust code, and the `tests` module is just another module. As we discussed in
+the [“Paths for Referring to an Item in the Module Tree”][paths]<!-- ignore -->
+section, items in child modules can use the items in their ancestor modules. In
+this test, we bring all of the `test` module’s parent’s items into scope with
+`use super::*`, and then the test can call `internal_adder`. If you don’t think
+private functions should be tested, there’s nothing in Rust that will compel
+you to do so.
+
+### Integration Tests
+
+In Rust, integration tests are entirely external to your library. They use your
+library in the same way any other code would, which means they can only call
+functions that are part of your library’s public API. Their purpose is to test
+whether many parts of your library work together correctly. Units of code that
+work correctly on their own could have problems when integrated, so test
+coverage of the integrated code is important as well. To create integration
+tests, you first need a *tests* directory.
+
+#### The *tests* Directory
+
+We create a *tests* directory at the top level of our project directory, next
+to *src*. Cargo knows to look for integration test files in this directory. We
+can then make as many test files as we want, and Cargo will compile each of the
+files as an individual crate.
+
+Let’s create an integration test. With the code in Listing 11-12 still in the
+*src/lib.rs* file, make a *tests* directory, and create a new file named
+*tests/integration_test.rs*. Your directory structure should look like this:
+
+```text
+adder
+├── Cargo.lock
+├── Cargo.toml
+├── src
+│   └── lib.rs
+└── tests
+ └── integration_test.rs
+```
+
+Enter the code in Listing 11-13 into the *tests/integration_test.rs* file:
+
+<span class="filename">Filename: tests/integration_test.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/listing-11-13/tests/integration_test.rs}}
+```
+
+<span class="caption">Listing 11-13: An integration test of a function in the
+`adder` crate</span>
+
+Each file in the `tests` directory is a separate crate, so we need to bring our
+library into each test crate’s scope. For that reason we add `use adder` at the
+top of the code, which we didn’t need in the unit tests.
+
+We don’t need to annotate any code in *tests/integration_test.rs* with
+`#[cfg(test)]`. Cargo treats the `tests` directory specially and compiles files
+in this directory only when we run `cargo test`. Run `cargo test` now:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/listing-11-13/output.txt}}
+```
+
+The three sections of output include the unit tests, the integration test, and
+the doc tests. Note that if any test in a section fails, the following sections
+will not be run. For example, if a unit test fails, there won’t be any output
+for integration and doc tests because those tests will only be run if all unit
+tests are passing.
+
+The first section for the unit tests is the same as we’ve been seeing: one line
+for each unit test (one named `internal` that we added in Listing 11-12) and
+then a summary line for the unit tests.
+
+The integration tests section starts with the line `Running
+tests/integration_test.rs`. Next, there is a line for each test function in
+that integration test and a summary line for the results of the integration
+test just before the `Doc-tests adder` section starts.
+
+Each integration test file has its own section, so if we add more files in the
+*tests* directory, there will be more integration test sections.
+
+We can still run a particular integration test function by specifying the test
+function’s name as an argument to `cargo test`. To run all the tests in a
+particular integration test file, use the `--test` argument of `cargo test`
+followed by the name of the file:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/output-only-05-single-integration/output.txt}}
+```
+
+This command runs only the tests in the *tests/integration_test.rs* file.
+
+#### Submodules in Integration Tests
+
+As you add more integration tests, you might want to make more files in the
+*tests* directory to help organize them; for example, you can group the test
+functions by the functionality they’re testing. As mentioned earlier, each file
+in the *tests* directory is compiled as its own separate crate, which is useful
+for creating separate scopes to more closely imitate the way end users will be
+using your crate. However, this means files in the *tests* directory don’t
+share the same behavior as files in *src* do, as you learned in Chapter 7
+regarding how to separate code into modules and files.
+
+The different behavior of *tests* directory files is most noticeable when you
+have a set of helper functions to use in multiple integration test files and
+you try to follow the steps in the [“Separating Modules into Different
+Files”][separating-modules-into-files]<!-- ignore --> section of Chapter 7 to
+extract them into a common module. For example, if we create *tests/common.rs*
+and place a function named `setup` in it, we can add some code to `setup` that
+we want to call from multiple test functions in multiple test files:
+
+<span class="filename">Filename: tests/common.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/tests/common.rs}}
+```
+
+When we run the tests again, we’ll see a new section in the test output for the
+*common.rs* file, even though this file doesn’t contain any test functions nor
+did we call the `setup` function from anywhere:
+
+```console
+{{#include ../listings/ch11-writing-automated-tests/no-listing-12-shared-test-code-problem/output.txt}}
+```
+
+Having `common` appear in the test results with `running 0 tests` displayed for
+it is not what we wanted. We just wanted to share some code with the other
+integration test files.
+
+To avoid having `common` appear in the test output, instead of creating
+*tests/common.rs*, we’ll create *tests/common/mod.rs*. The project directory
+now looks like this:
+
+```text
+├── Cargo.lock
+├── Cargo.toml
+├── src
+│   └── lib.rs
+└── tests
+ ├── common
+ │   └── mod.rs
+ └── integration_test.rs
+```
+
+This is the older naming convention that Rust also understands that we
+mentioned in the [“Alternate File Paths”][alt-paths]<!-- ignore --> section of
+Chapter 7. Naming the file this way tells Rust not to treat the `common` module
+as an integration test file. When we move the `setup` function code into
+*tests/common/mod.rs* and delete the *tests/common.rs* file, the section in the
+test output will no longer appear. Files in subdirectories of the *tests*
+directory don’t get compiled as separate crates or have sections in the test
+output.
+
+After we’ve created *tests/common/mod.rs*, we can use it from any of the
+integration test files as a module. Here’s an example of calling the `setup`
+function from the `it_adds_two` test in *tests/integration_test.rs*:
+
+<span class="filename">Filename: tests/integration_test.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch11-writing-automated-tests/no-listing-13-fix-shared-test-code-problem/tests/integration_test.rs}}
+```
+
+Note that the `mod common;` declaration is the same as the module declaration
+we demonstrated in Listing 7-21. Then in the test function, we can call the
+`common::setup()` function.
+
+#### Integration Tests for Binary Crates
+
+If our project is a binary crate that only contains a *src/main.rs* file and
+doesn’t have a *src/lib.rs* file, we can’t create integration tests in the
+*tests* directory and bring functions defined in the *src/main.rs* file into
+scope with a `use` statement. Only library crates expose functions that other
+crates can use; binary crates are meant to be run on their own.
+
+This is one of the reasons Rust projects that provide a binary have a
+straightforward *src/main.rs* file that calls logic that lives in the
+*src/lib.rs* file. Using that structure, integration tests *can* test the
+library crate with `use` to make the important functionality available.
+If the important functionality works, the small amount of code in the
+*src/main.rs* file will work as well, and that small amount of code doesn’t
+need to be tested.
+
+## Summary
+
+Rust’s testing features provide a way to specify how code should function to
+ensure it continues to work as you expect, even as you make changes. Unit tests
+exercise different parts of a library separately and can test private
+implementation details. Integration tests check that many parts of the library
+work together correctly, and they use the library’s public API to test the code
+in the same way external code will use it. Even though Rust’s type system and
+ownership rules help prevent some kinds of bugs, tests are still important to
+reduce logic bugs having to do with how your code is expected to behave.
+
+Let’s combine the knowledge you learned in this chapter and in previous
+chapters to work on a project!
+
+[paths]: ch07-03-paths-for-referring-to-an-item-in-the-module-tree.html
+[separating-modules-into-files]:
+ch07-05-separating-modules-into-different-files.html
+[alt-paths]: ch07-05-separating-modules-into-different-files.html#alternate-file-paths
diff --git a/src/doc/book/src/ch12-00-an-io-project.md b/src/doc/book/src/ch12-00-an-io-project.md
new file mode 100644
index 000000000..bae99c75f
--- /dev/null
+++ b/src/doc/book/src/ch12-00-an-io-project.md
@@ -0,0 +1,50 @@
+# An I/O Project: Building a Command Line Program
+
+This chapter is a recap of the many skills you’ve learned so far and an
+exploration of a few more standard library features. We’ll build a command line
+tool that interacts with file and command line input/output to practice some of
+the Rust concepts you now have under your belt.
+
+Rust’s speed, safety, single binary output, and cross-platform support make it
+an ideal language for creating command line tools, so for our project, we’ll
+make our own version of the classic command line search tool `grep`
+(**g**lobally search a **r**egular **e**xpression and **p**rint). In the
+simplest use case, `grep` searches a specified file for a specified string. To
+do so, `grep` takes as its arguments a file path and a string. Then it reads
+the file, finds lines in that file that contain the string argument, and prints
+those lines.
+
+Along the way, we’ll show how to make our command line tool use the terminal
+features that many other command line tools use. We’ll read the value of an
+environment variable to allow the user to configure the behavior of our tool.
+We’ll also print error messages to the standard error console stream (`stderr`)
+instead of standard output (`stdout`), so, for example, the user can redirect
+successful output to a file while still seeing error messages onscreen.
+
+One Rust community member, Andrew Gallant, has already created a fully
+featured, very fast version of `grep`, called `ripgrep`. By comparison, our
+version will be fairly simple, but this chapter will give you some of the
+background knowledge you need to understand a real-world project such as
+`ripgrep`.
+
+Our `grep` project will combine a number of concepts you’ve learned so far:
+
+* Organizing code (using what you learned about modules in [Chapter 7][ch7]<!--
+ ignore -->)
+* Using vectors and strings (collections, [Chapter 8][ch8]<!-- ignore -->)
+* Handling errors ([Chapter 9][ch9]<!-- ignore -->)
+* Using traits and lifetimes where appropriate ([Chapter 10][ch10]<!-- ignore
+ -->)
+* Writing tests ([Chapter 11][ch11]<!-- ignore -->)
+
+We’ll also briefly introduce closures, iterators, and trait objects, which
+Chapters [13][ch13]<!-- ignore --> and [17][ch17]<!-- ignore --> will cover in
+detail.
+
+[ch7]: ch07-00-managing-growing-projects-with-packages-crates-and-modules.html
+[ch8]: ch08-00-common-collections.html
+[ch9]: ch09-00-error-handling.html
+[ch10]: ch10-00-generics.html
+[ch11]: ch11-00-testing.html
+[ch13]: ch13-00-functional-features.html
+[ch17]: ch17-00-oop.html
diff --git a/src/doc/book/src/ch12-01-accepting-command-line-arguments.md b/src/doc/book/src/ch12-01-accepting-command-line-arguments.md
new file mode 100644
index 000000000..bb6936663
--- /dev/null
+++ b/src/doc/book/src/ch12-01-accepting-command-line-arguments.md
@@ -0,0 +1,135 @@
+## Accepting Command Line Arguments
+
+Let’s create a new project with, as always, `cargo new`. We’ll call our project
+`minigrep` to distinguish it from the `grep` tool that you might already have
+on your system.
+
+```console
+$ cargo new minigrep
+ Created binary (application) `minigrep` project
+$ cd minigrep
+```
+
+The first task is to make `minigrep` accept its two command line arguments: the
+file path and a string to search for. That is, we want to be able to run our
+program with `cargo run`, two hyphens to indicate the following arguments are
+for our program rather than for `cargo`, a string to search for, and a path to
+a file to search in, like so:
+
+```console
+$ cargo run -- searchstring example-filename.txt
+```
+
+Right now, the program generated by `cargo new` cannot process arguments we
+give it. Some existing libraries on [crates.io](https://crates.io/) can help
+with writing a program that accepts command line arguments, but because you’re
+just learning this concept, let’s implement this capability ourselves.
+
+### Reading the Argument Values
+
+To enable `minigrep` to read the values of command line arguments we pass to
+it, we’ll need the `std::env::args` function provided in Rust’s standard
+library. This function returns an iterator of the command line arguments passed
+to `minigrep`. We’ll cover iterators fully in [Chapter 13][ch13]<!-- ignore
+-->. For now, you only need to know two details about iterators: iterators
+produce a series of values, and we can call the `collect` method on an iterator
+to turn it into a collection, such as a vector, that contains all the elements
+the iterator produces.
+
+The code in Listing 12-1 allows your `minigrep` program to read any command
+line arguments passed to it and then collect the values into a vector.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-01/src/main.rs}}
+```
+
+<span class="caption">Listing 12-1: Collecting the command line arguments into
+a vector and printing them</span>
+
+First, we bring the `std::env` module into scope with a `use` statement so we
+can use its `args` function. Notice that the `std::env::args` function is
+nested in two levels of modules. As we discussed in [Chapter
+7][ch7-idiomatic-use]<!-- ignore -->, in cases where the desired function is
+nested in more than one module, we’ve chosen to bring the parent module into
+scope rather than the function. By doing so, we can easily use other functions
+from `std::env`. It’s also less ambiguous than adding `use std::env::args` and
+then calling the function with just `args`, because `args` might easily be
+mistaken for a function that’s defined in the current module.
+
+> ### The `args` Function and Invalid Unicode
+>
+> Note that `std::env::args` will panic if any argument contains invalid
+> Unicode. If your program needs to accept arguments containing invalid
+> Unicode, use `std::env::args_os` instead. That function returns an iterator
+> that produces `OsString` values instead of `String` values. We’ve chosen to
+> use `std::env::args` here for simplicity, because `OsString` values differ
+> per platform and are more complex to work with than `String` values.
+
+On the first line of `main`, we call `env::args`, and we immediately use
+`collect` to turn the iterator into a vector containing all the values produced
+by the iterator. We can use the `collect` function to create many kinds of
+collections, so we explicitly annotate the type of `args` to specify that we
+want a vector of strings. Although we very rarely need to annotate types in
+Rust, `collect` is one function you do often need to annotate because Rust
+isn’t able to infer the kind of collection you want.
+
+Finally, we print the vector using the debug macro. Let’s try running the code
+first with no arguments and then with two arguments:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-01/output.txt}}
+```
+
+```console
+{{#include ../listings/ch12-an-io-project/output-only-01-with-args/output.txt}}
+```
+
+Notice that the first value in the vector is `"target/debug/minigrep"`, which
+is the name of our binary. This matches the behavior of the arguments list in
+C, letting programs use the name by which they were invoked in their execution.
+It’s often convenient to have access to the program name in case you want to
+print it in messages or change behavior of the program based on what command
+line alias was used to invoke the program. But for the purposes of this
+chapter, we’ll ignore it and save only the two arguments we need.
+
+### Saving the Argument Values in Variables
+
+The program is currently able to access the values specified as command line
+arguments. Now we need to save the values of the two arguments in variables so
+we can use the values throughout the rest of the program. We do that in Listing
+12-2.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-02/src/main.rs}}
+```
+
+<span class="caption">Listing 12-2: Creating variables to hold the query
+argument and file path argument</span>
+
+As we saw when we printed the vector, the program’s name takes up the first
+value in the vector at `args[0]`, so we’re starting arguments at index `1`. The
+first argument `minigrep` takes is the string we’re searching for, so we put a
+reference to the first argument in the variable `query`. The second argument
+will be the file path, so we put a reference to the second argument in the
+variable `file_path`.
+
+We temporarily print the values of these variables to prove that the code is
+working as we intend. Let’s run this program again with the arguments `test`
+and `sample.txt`:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-02/output.txt}}
+```
+
+Great, the program is working! The values of the arguments we need are being
+saved into the right variables. Later we’ll add some error handling to deal
+with certain potential erroneous situations, such as when the user provides no
+arguments; for now, we’ll ignore that situation and work on adding file-reading
+capabilities instead.
+
+[ch13]: ch13-00-functional-features.html
+[ch7-idiomatic-use]: ch07-04-bringing-paths-into-scope-with-the-use-keyword.html#creating-idiomatic-use-paths
diff --git a/src/doc/book/src/ch12-02-reading-a-file.md b/src/doc/book/src/ch12-02-reading-a-file.md
new file mode 100644
index 000000000..d8340a2a0
--- /dev/null
+++ b/src/doc/book/src/ch12-02-reading-a-file.md
@@ -0,0 +1,57 @@
+## Reading a File
+
+Now we’ll add functionality to read the file specified in the `file_path`
+argument. First, we need a sample file to test it with: we’ll use a file with a
+small amount of text over multiple lines with some repeated words. Listing 12-3
+has an Emily Dickinson poem that will work well! Create a file called
+*poem.txt* at the root level of your project, and enter the poem “I’m Nobody!
+Who are you?”
+
+<span class="filename">Filename: poem.txt</span>
+
+```text
+{{#include ../listings/ch12-an-io-project/listing-12-03/poem.txt}}
+```
+
+<span class="caption">Listing 12-3: A poem by Emily Dickinson makes a good test
+case</span>
+
+With the text in place, edit *src/main.rs* and add code to read the file, as
+shown in Listing 12-4.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-4: Reading the contents of the file specified
+by the second argument</span>
+
+First, we bring in a relevant part of the standard library with a `use`
+statement: we need `std::fs` to handle files.
+
+In `main`, the new statement `fs::read_to_string` takes the `file_path`, opens
+that file, and returns a `std::io::Result<String>` of the file’s contents.
+
+After that, we again add a temporary `println!` statement that prints the value
+of `contents` after the file is read, so we can check that the program is
+working so far.
+
+Let’s run this code with any string as the first command line argument (because
+we haven’t implemented the searching part yet) and the *poem.txt* file as the
+second argument:
+
+```console
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-04/output.txt}}
+```
+
+Great! The code read and then printed the contents of the file. But the code
+has a few flaws. At the moment, the `main` function has multiple
+responsibilities: generally, functions are clearer and easier to maintain if
+each function is responsible for only one idea. The other problem is that we’re
+not handling errors as well as we could. The program is still small, so these
+flaws aren’t a big problem, but as the program grows, it will be harder to fix
+them cleanly. It’s good practice to begin refactoring early on when developing
+a program, because it’s much easier to refactor smaller amounts of code. We’ll
+do that next.
diff --git a/src/doc/book/src/ch12-03-improving-error-handling-and-modularity.md b/src/doc/book/src/ch12-03-improving-error-handling-and-modularity.md
new file mode 100644
index 000000000..87e525d12
--- /dev/null
+++ b/src/doc/book/src/ch12-03-improving-error-handling-and-modularity.md
@@ -0,0 +1,505 @@
+## Refactoring to Improve Modularity and Error Handling
+
+To improve our program, we’ll fix four problems that have to do with the
+program’s structure and how it’s handling potential errors. First, our `main`
+function now performs two tasks: it parses arguments and reads files. As our
+program grows, the number of separate tasks the `main` function handles will
+increase. As a function gains responsibilities, it becomes more difficult to
+reason about, harder to test, and harder to change without breaking one of its
+parts. It’s best to separate functionality so each function is responsible for
+one task.
+
+This issue also ties into the second problem: although `query` and `file_path`
+are configuration variables to our program, variables like `contents` are used
+to perform the program’s logic. The longer `main` becomes, the more variables
+we’ll need to bring into scope; the more variables we have in scope, the harder
+it will be to keep track of the purpose of each. It’s best to group the
+configuration variables into one structure to make their purpose clear.
+
+The third problem is that we’ve used `expect` to print an error message when
+reading the file fails, but the error message just prints `Should have been
+able to read the file`. Reading a file can fail in a number of ways: for
+example, the file could be missing, or we might not have permission to open it.
+Right now, regardless of the situation, we’d print the same error message for
+everything, which wouldn’t give the user any information!
+
+Fourth, we use `expect` repeatedly to handle different errors, and if the user
+runs our program without specifying enough arguments, they’ll get an `index out
+of bounds` error from Rust that doesn’t clearly explain the problem. It would
+be best if all the error-handling code were in one place so future maintainers
+had only one place to consult the code if the error-handling logic needed to
+change. Having all the error-handling code in one place will also ensure that
+we’re printing messages that will be meaningful to our end users.
+
+Let’s address these four problems by refactoring our project.
+
+### Separation of Concerns for Binary Projects
+
+The organizational problem of allocating responsibility for multiple tasks to
+the `main` function is common to many binary projects. As a result, the Rust
+community has developed guidelines for splitting the separate concerns of a
+binary program when `main` starts getting large. This process has the following
+steps:
+
+* Split your program into a *main.rs* and a *lib.rs* and move your program’s
+ logic to *lib.rs*.
+* As long as your command line parsing logic is small, it can remain in
+ *main.rs*.
+* When the command line parsing logic starts getting complicated, extract it
+ from *main.rs* and move it to *lib.rs*.
+
+The responsibilities that remain in the `main` function after this process
+should be limited to the following:
+
+* Calling the command line parsing logic with the argument values
+* Setting up any other configuration
+* Calling a `run` function in *lib.rs*
+* Handling the error if `run` returns an error
+
+This pattern is about separating concerns: *main.rs* handles running the
+program, and *lib.rs* handles all the logic of the task at hand. Because you
+can’t test the `main` function directly, this structure lets you test all of
+your program’s logic by moving it into functions in *lib.rs*. The code that
+remains in *main.rs* will be small enough to verify its correctness by reading
+it. Let’s rework our program by following this process.
+
+#### Extracting the Argument Parser
+
+We’ll extract the functionality for parsing arguments into a function that
+`main` will call to prepare for moving the command line parsing logic to
+*src/lib.rs*. Listing 12-5 shows the new start of `main` that calls a new
+function `parse_config`, which we’ll define in *src/main.rs* for the moment.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-5: Extracting a `parse_config` function from
+`main`</span>
+
+We’re still collecting the command line arguments into a vector, but instead of
+assigning the argument value at index 1 to the variable `query` and the
+argument value at index 2 to the variable `file_path` within the `main`
+function, we pass the whole vector to the `parse_config` function. The
+`parse_config` function then holds the logic that determines which argument
+goes in which variable and passes the values back to `main`. We still create
+the `query` and `file_path` variables in `main`, but `main` no longer has the
+responsibility of determining how the command line arguments and variables
+correspond.
+
+This rework may seem like overkill for our small program, but we’re refactoring
+in small, incremental steps. After making this change, run the program again to
+verify that the argument parsing still works. It’s good to check your progress
+often, to help identify the cause of problems when they occur.
+
+#### Grouping Configuration Values
+
+We can take another small step to improve the `parse_config` function further.
+At the moment, we’re returning a tuple, but then we immediately break that
+tuple into individual parts again. This is a sign that perhaps we don’t have
+the right abstraction yet.
+
+Another indicator that shows there’s room for improvement is the `config` part
+of `parse_config`, which implies that the two values we return are related and
+are both part of one configuration value. We’re not currently conveying this
+meaning in the structure of the data other than by grouping the two values into
+a tuple; we’ll instead put the two values into one struct and give each of the
+struct fields a meaningful name. Doing so will make it easier for future
+maintainers of this code to understand how the different values relate to each
+other and what their purpose is.
+
+Listing 12-6 shows the improvements to the `parse_config` function.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-6: Refactoring `parse_config` to return an
+instance of a `Config` struct</span>
+
+We’ve added a struct named `Config` defined to have fields named `query` and
+`file_path`. The signature of `parse_config` now indicates that it returns a
+`Config` value. In the body of `parse_config`, where we used to return
+string slices that reference `String` values in `args`, we now define `Config`
+to contain owned `String` values. The `args` variable in `main` is the owner of
+the argument values and is only letting the `parse_config` function borrow
+them, which means we’d violate Rust’s borrowing rules if `Config` tried to take
+ownership of the values in `args`.
+
+There are a number of ways we could manage the `String` data; the easiest,
+though somewhat inefficient, route is to call the `clone` method on the values.
+This will make a full copy of the data for the `Config` instance to own, which
+takes more time and memory than storing a reference to the string data.
+However, cloning the data also makes our code very straightforward because we
+don’t have to manage the lifetimes of the references; in this circumstance,
+giving up a little performance to gain simplicity is a worthwhile trade-off.
+
+> ### The Trade-Offs of Using `clone`
+>
+> There’s a tendency among many Rustaceans to avoid using `clone` to fix
+> ownership problems because of its runtime cost. In
+> [Chapter 13][ch13]<!-- ignore -->, you’ll learn how to use more efficient
+> methods in this type of situation. But for now, it’s okay to copy a few
+> strings to continue making progress because you’ll make these copies only
+> once and your file path and query string are very small. It’s better to have
+> a working program that’s a bit inefficient than to try to hyperoptimize code
+> on your first pass. As you become more experienced with Rust, it’ll be
+> easier to start with the most efficient solution, but for now, it’s
+> perfectly acceptable to call `clone`.
+
+We’ve updated `main` so it places the instance of `Config` returned by
+`parse_config` into a variable named `config`, and we updated the code that
+previously used the separate `query` and `file_path` variables so it now uses
+the fields on the `Config` struct instead.
+
+Now our code more clearly conveys that `query` and `file_path` are related and
+that their purpose is to configure how the program will work. Any code that
+uses these values knows to find them in the `config` instance in the fields
+named for their purpose.
+
+#### Creating a Constructor for `Config`
+
+So far, we’ve extracted the logic responsible for parsing the command line
+arguments from `main` and placed it in the `parse_config` function. Doing so
+helped us to see that the `query` and `file_path` values were related and that
+relationship should be conveyed in our code. We then added a `Config` struct to
+name the related purpose of `query` and `file_path` and to be able to return the
+values’ names as struct field names from the `parse_config` function.
+
+So now that the purpose of the `parse_config` function is to create a `Config`
+instance, we can change `parse_config` from a plain function to a function
+named `new` that is associated with the `Config` struct. Making this change
+will make the code more idiomatic. We can create instances of types in the
+standard library, such as `String`, by calling `String::new`. Similarly, by
+changing `parse_config` into a `new` function associated with `Config`, we’ll
+be able to create instances of `Config` by calling `Config::new`. Listing 12-7
+shows the changes we need to make.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,should_panic,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-7: Changing `parse_config` into
+`Config::new`</span>
+
+We’ve updated `main` where we were calling `parse_config` to instead call
+`Config::new`. We’ve changed the name of `parse_config` to `new` and moved it
+within an `impl` block, which associates the `new` function with `Config`. Try
+compiling this code again to make sure it works.
+
+### Fixing the Error Handling
+
+Now we’ll work on fixing our error handling. Recall that attempting to access
+the values in the `args` vector at index 1 or index 2 will cause the program to
+panic if the vector contains fewer than three items. Try running the program
+without any arguments; it will look like this:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-07/output.txt}}
+```
+
+The line `index out of bounds: the len is 1 but the index is 1` is an error
+message intended for programmers. It won’t help our end users understand what
+they should do instead. Let’s fix that now.
+
+#### Improving the Error Message
+
+In Listing 12-8, we add a check in the `new` function that will verify that the
+slice is long enough before accessing index 1 and 2. If the slice isn’t long
+enough, the program panics and displays a better error message.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-8: Adding a check for the number of
+arguments</span>
+
+This code is similar to [the `Guess::new` function we wrote in Listing
+9-13][ch9-custom-types]<!-- ignore -->, where we called `panic!` when the
+`value` argument was out of the range of valid values. Instead of checking for
+a range of values here, we’re checking that the length of `args` is at least 3
+and the rest of the function can operate under the assumption that this
+condition has been met. If `args` has fewer than three items, this condition
+will be true, and we call the `panic!` macro to end the program immediately.
+
+With these extra few lines of code in `new`, let’s run the program without any
+arguments again to see what the error looks like now:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-08/output.txt}}
+```
+
+This output is better: we now have a reasonable error message. However, we also
+have extraneous information we don’t want to give to our users. Perhaps using
+the technique we used in Listing 9-13 isn’t the best to use here: a call to
+`panic!` is more appropriate for a programming problem than a usage problem,
+[as discussed in Chapter 9][ch9-error-guidelines]<!-- ignore -->. Instead,
+we’ll use the other technique you learned about in Chapter 9—[returning a
+`Result`][ch9-result]<!-- ignore --> that indicates either success or an error.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="returning-a-result-from-new-instead-of-calling-panic"></a>
+
+#### Returning a `Result` Instead of Calling `panic!`
+
+We can instead return a `Result` value that will contain a `Config` instance in
+the successful case and will describe the problem in the error case. We’re also
+going to change the function name from `new` to `build` because many
+programmers expect `new` functions to never fail. When `Config::build` is
+communicating to `main`, we can use the `Result` type to signal there was a
+problem. Then we can change `main` to convert an `Err` variant into a more
+practical error for our users without the surrounding text about `thread
+'main'` and `RUST_BACKTRACE` that a call to `panic!` causes.
+
+Listing 12-9 shows the changes we need to make to the return value of the
+function we’re now calling `Config::build` and the body of the function needed
+to return a `Result`. Note that this won’t compile until we update `main` as
+well, which we’ll do in the next listing.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-9: Returning a `Result` from
+`Config::build`</span>
+
+Our `build` function returns a `Result` with a `Config` instance in the success
+case and a `&'static str` in the error case. Our error values will always be
+string literals that have the `'static` lifetime.
+
+We’ve made two changes in the body of the function: instead of calling `panic!`
+when the user doesn’t pass enough arguments, we now return an `Err` value, and
+we’ve wrapped the `Config` return value in an `Ok`. These changes make the
+function conform to its new type signature.
+
+Returning an `Err` value from `Config::build` allows the `main` function to
+handle the `Result` value returned from the `build` function and exit the
+process more cleanly in the error case.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="calling-confignew-and-handling-errors"></a>
+
+#### Calling `Config::build` and Handling Errors
+
+To handle the error case and print a user-friendly message, we need to update
+`main` to handle the `Result` being returned by `Config::build`, as shown in
+Listing 12-10. We’ll also take the responsibility of exiting the command line
+tool with a nonzero error code away from `panic!` and instead implement it by
+hand. A nonzero exit status is a convention to signal to the process that
+called our program that the program exited with an error state.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-10: Exiting with an error code if building a
+`Config` fails</span>
+
+In this listing, we’ve used a method we haven’t covered in detail yet:
+`unwrap_or_else`, which is defined on `Result<T, E>` by the standard library.
+Using `unwrap_or_else` allows us to define some custom, non-`panic!` error
+handling. If the `Result` is an `Ok` value, this method’s behavior is similar
+to `unwrap`: it returns the inner value `Ok` is wrapping. However, if the value
+is an `Err` value, this method calls the code in the *closure*, which is an
+anonymous function we define and pass as an argument to `unwrap_or_else`. We’ll
+cover closures in more detail in [Chapter 13][ch13]<!-- ignore -->. For now,
+you just need to know that `unwrap_or_else` will pass the inner value of the
+`Err`, which in this case is the static string `"not enough arguments"` that we
+added in Listing 12-9, to our closure in the argument `err` that appears
+between the vertical pipes. The code in the closure can then use the `err`
+value when it runs.
+
+We’ve added a new `use` line to bring `process` from the standard library into
+scope. The code in the closure that will be run in the error case is only two
+lines: we print the `err` value and then call `process::exit`. The
+`process::exit` function will stop the program immediately and return the
+number that was passed as the exit status code. This is similar to the
+`panic!`-based handling we used in Listing 12-8, but we no longer get all the
+extra output. Let’s try it:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-10/output.txt}}
+```
+
+Great! This output is much friendlier for our users.
+
+### Extracting Logic from `main`
+
+Now that we’ve finished refactoring the configuration parsing, let’s turn to
+the program’s logic. As we stated in [“Separation of Concerns for Binary
+Projects”](#separation-of-concerns-for-binary-projects)<!-- ignore -->, we’ll
+extract a function named `run` that will hold all the logic currently in the
+`main` function that isn’t involved with setting up configuration or handling
+errors. When we’re done, `main` will be concise and easy to verify by
+inspection, and we’ll be able to write tests for all the other logic.
+
+Listing 12-11 shows the extracted `run` function. For now, we’re just making
+the small, incremental improvement of extracting the function. We’re still
+defining the function in *src/main.rs*.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-11: Extracting a `run` function containing the
+rest of the program logic</span>
+
+The `run` function now contains all the remaining logic from `main`, starting
+from reading the file. The `run` function takes the `Config` instance as an
+argument.
+
+#### Returning Errors from the `run` Function
+
+With the remaining program logic separated into the `run` function, we can
+improve the error handling, as we did with `Config::build` in Listing 12-9.
+Instead of allowing the program to panic by calling `expect`, the `run`
+function will return a `Result<T, E>` when something goes wrong. This will let
+us further consolidate the logic around handling errors into `main` in a
+user-friendly way. Listing 12-12 shows the changes we need to make to the
+signature and body of `run`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-12/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-12: Changing the `run` function to return
+`Result`</span>
+
+We’ve made three significant changes here. First, we changed the return type of
+the `run` function to `Result<(), Box<dyn Error>>`. This function previously
+returned the unit type, `()`, and we keep that as the value returned in the
+`Ok` case.
+
+For the error type, we used the *trait object* `Box<dyn Error>` (and we’ve
+brought `std::error::Error` into scope with a `use` statement at the top).
+We’ll cover trait objects in [Chapter 17][ch17]<!-- ignore -->. For now, just
+know that `Box<dyn Error>` means the function will return a type that
+implements the `Error` trait, but we don’t have to specify what particular type
+the return value will be. This gives us flexibility to return error values that
+may be of different types in different error cases. The `dyn` keyword is short
+for “dynamic.”
+
+Second, we’ve removed the call to `expect` in favor of the `?` operator, as we
+talked about in [Chapter 9][ch9-question-mark]<!-- ignore -->. Rather than
+`panic!` on an error, `?` will return the error value from the current function
+for the caller to handle.
+
+Third, the `run` function now returns an `Ok` value in the success case.
+We’ve declared the `run` function’s success type as `()` in the signature,
+which means we need to wrap the unit type value in the `Ok` value. This
+`Ok(())` syntax might look a bit strange at first, but using `()` like this is
+the idiomatic way to indicate that we’re calling `run` for its side effects
+only; it doesn’t return a value we need.
+
+When you run this code, it will compile but will display a warning:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-12/output.txt}}
+```
+
+Rust tells us that our code ignored the `Result` value and the `Result` value
+might indicate that an error occurred. But we’re not checking to see whether or
+not there was an error, and the compiler reminds us that we probably meant to
+have some error-handling code here! Let’s rectify that problem now.
+
+#### Handling Errors Returned from `run` in `main`
+
+We’ll check for errors and handle them using a technique similar to one we used
+with `Config::build` in Listing 12-10, but with a slight difference:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/no-listing-01-handling-errors-in-main/src/main.rs:here}}
+```
+
+We use `if let` rather than `unwrap_or_else` to check whether `run` returns an
+`Err` value and call `process::exit(1)` if it does. The `run` function doesn’t
+return a value that we want to `unwrap` in the same way that `Config::build`
+returns the `Config` instance. Because `run` returns `()` in the success case,
+we only care about detecting an error, so we don’t need `unwrap_or_else` to
+return the unwrapped value, which would only be `()`.
+
+The bodies of the `if let` and the `unwrap_or_else` functions are the same in
+both cases: we print the error and exit.
+
+### Splitting Code into a Library Crate
+
+Our `minigrep` project is looking good so far! Now we’ll split the
+*src/main.rs* file and put some code into the *src/lib.rs* file. That way we
+can test the code and have a *src/main.rs* file with fewer responsibilities.
+
+Let’s move all the code that isn’t the `main` function from *src/main.rs* to
+*src/lib.rs*:
+
+* The `run` function definition
+* The relevant `use` statements
+* The definition of `Config`
+* The `Config::build` function definition
+
+The contents of *src/lib.rs* should have the signatures shown in Listing 12-13
+(we’ve omitted the bodies of the functions for brevity). Note that this won’t
+compile until we modify *src/main.rs* in Listing 12-14.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-13/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-13: Moving `Config` and `run` into
+*src/lib.rs*</span>
+
+We’ve made liberal use of the `pub` keyword: on `Config`, on its fields and its
+`build` method, and on the `run` function. We now have a library crate that has
+a public API we can test!
+
+Now we need to bring the code we moved to *src/lib.rs* into the scope of the
+binary crate in *src/main.rs*, as shown in Listing 12-14.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-14/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-14: Using the `minigrep` library crate in
+*src/main.rs*</span>
+
+We add a `use minigrep::Config` line to bring the `Config` type from the
+library crate into the binary crate’s scope, and we prefix the `run` function
+with our crate name. Now all the functionality should be connected and should
+work. Run the program with `cargo run` and make sure everything works
+correctly.
+
+Whew! That was a lot of work, but we’ve set ourselves up for success in the
+future. Now it’s much easier to handle errors, and we’ve made the code more
+modular. Almost all of our work will be done in *src/lib.rs* from here on out.
+
+Let’s take advantage of this newfound modularity by doing something that would
+have been difficult with the old code but is easy with the new code: we’ll
+write some tests!
+
+[ch13]: ch13-00-functional-features.html
+[ch9-custom-types]: ch09-03-to-panic-or-not-to-panic.html#creating-custom-types-for-validation
+[ch9-error-guidelines]: ch09-03-to-panic-or-not-to-panic.html#guidelines-for-error-handling
+[ch9-result]: ch09-02-recoverable-errors-with-result.html
+[ch17]: ch17-00-oop.html
+[ch9-question-mark]: ch09-02-recoverable-errors-with-result.html#a-shortcut-for-propagating-errors-the--operator
diff --git a/src/doc/book/src/ch12-04-testing-the-librarys-functionality.md b/src/doc/book/src/ch12-04-testing-the-librarys-functionality.md
new file mode 100644
index 000000000..129f835aa
--- /dev/null
+++ b/src/doc/book/src/ch12-04-testing-the-librarys-functionality.md
@@ -0,0 +1,245 @@
+## Developing the Library’s Functionality with Test-Driven Development
+
+Now that we’ve extracted the logic into *src/lib.rs* and left the argument
+collecting and error handling in *src/main.rs*, it’s much easier to write tests
+for the core functionality of our code. We can call functions directly with
+various arguments and check return values without having to call our binary
+from the command line.
+
+In this section, we’ll add the searching logic to the `minigrep` program
+using the test-driven development (TDD) process with the following steps:
+
+1. Write a test that fails and run it to make sure it fails for the reason you
+ expect.
+2. Write or modify just enough code to make the new test pass.
+3. Refactor the code you just added or changed and make sure the tests
+ continue to pass.
+4. Repeat from step 1!
+
+Though it’s just one of many ways to write software, TDD can help drive code
+design. Writing the test before you write the code that makes the test pass
+helps to maintain high test coverage throughout the process.
+
+We’ll test drive the implementation of the functionality that will actually do
+the searching for the query string in the file contents and produce a list of
+lines that match the query. We’ll add this functionality in a function called
+`search`.
+
+### Writing a Failing Test
+
+Because we don’t need them anymore, let’s remove the `println!` statements from
+*src/lib.rs* and *src/main.rs* that we used to check the program’s behavior.
+Then, in *src/lib.rs*, add a `tests` module with a test function, as we did in
+[Chapter 11][ch11-anatomy]<!-- ignore -->. The test function specifies the
+behavior we want the `search` function to have: it will take a query and the
+text to search, and it will return only the lines from the text that contain
+the query. Listing 12-15 shows this test, which won’t compile yet.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-15/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-15: Creating a failing test for the `search`
+function we wish we had</span>
+
+This test searches for the string `"duct"`. The text we’re searching is three
+lines, only one of which contains `"duct"` (Note that the backslash after the
+opening double quote tells Rust not to put a newline character at the beginning
+of the contents of this string literal). We assert that the value returned from
+the `search` function contains only the line we expect.
+
+We aren’t yet able to run this test and watch it fail because the test doesn’t
+even compile: the `search` function doesn’t exist yet! In accordance with TDD
+principles, we’ll add just enough code to get the test to compile and run by
+adding a definition of the `search` function that always returns an empty
+vector, as shown in Listing 12-16. Then the test should compile and fail
+because an empty vector doesn’t match a vector containing the line `"safe,
+fast, productive."`
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-16/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-16: Defining just enough of the `search`
+function so our test will compile</span>
+
+Notice that we need to define an explicit lifetime `'a` in the signature of
+`search` and use that lifetime with the `contents` argument and the return
+value. Recall in [Chapter 10][ch10-lifetimes]<!-- ignore --> that the lifetime
+parameters specify which argument lifetime is connected to the lifetime of the
+return value. In this case, we indicate that the returned vector should contain
+string slices that reference slices of the argument `contents` (rather than the
+argument `query`).
+
+In other words, we tell Rust that the data returned by the `search` function
+will live as long as the data passed into the `search` function in the
+`contents` argument. This is important! The data referenced *by* a slice needs
+to be valid for the reference to be valid; if the compiler assumes we’re making
+string slices of `query` rather than `contents`, it will do its safety checking
+incorrectly.
+
+If we forget the lifetime annotations and try to compile this function, we’ll
+get this error:
+
+```console
+{{#include ../listings/ch12-an-io-project/output-only-02-missing-lifetimes/output.txt}}
+```
+
+Rust can’t possibly know which of the two arguments we need, so we need to tell
+it explicitly. Because `contents` is the argument that contains all of our text
+and we want to return the parts of that text that match, we know `contents` is
+the argument that should be connected to the return value using the lifetime
+syntax.
+
+Other programming languages don’t require you to connect arguments to return
+values in the signature, but this practice will get easier over time. You might
+want to compare this example with the [“Validating References with
+Lifetimes”][validating-references-with-lifetimes]<!-- ignore --> section in
+Chapter 10.
+
+Now let’s run the test:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-16/output.txt}}
+```
+
+Great, the test fails, exactly as we expected. Let’s get the test to pass!
+
+### Writing Code to Pass the Test
+
+Currently, our test is failing because we always return an empty vector. To fix
+that and implement `search`, our program needs to follow these steps:
+
+* Iterate through each line of the contents.
+* Check whether the line contains our query string.
+* If it does, add it to the list of values we’re returning.
+* If it doesn’t, do nothing.
+* Return the list of results that match.
+
+Let’s work through each step, starting with iterating through lines.
+
+#### Iterating Through Lines with the `lines` Method
+
+Rust has a helpful method to handle line-by-line iteration of strings,
+conveniently named `lines`, that works as shown in Listing 12-17. Note this
+won’t compile yet.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-17/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-17: Iterating through each line in `contents`
+</span>
+
+The `lines` method returns an iterator. We’ll talk about iterators in depth in
+[Chapter 13][ch13-iterators]<!-- ignore -->, but recall that you saw this way
+of using an iterator in [Listing 3-5][ch3-iter]<!-- ignore -->, where we used a
+`for` loop with an iterator to run some code on each item in a collection.
+
+#### Searching Each Line for the Query
+
+Next, we’ll check whether the current line contains our query string.
+Fortunately, strings have a helpful method named `contains` that does this for
+us! Add a call to the `contains` method in the `search` function, as shown in
+Listing 12-18. Note this still won’t compile yet.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-18/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-18: Adding functionality to see whether the
+line contains the string in `query`</span>
+
+At the moment, we’re building up functionality. To get it to compile, we need
+to return a value from the body as we indicated we would in the function
+signature.
+
+#### Storing Matching Lines
+
+To finish this function, we need a way to store the matching lines that we want
+to return. For that, we can make a mutable vector before the `for` loop and
+call the `push` method to store a `line` in the vector. After the `for` loop,
+we return the vector, as shown in Listing 12-19.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-19/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-19: Storing the lines that match so we can
+return them</span>
+
+Now the `search` function should return only the lines that contain `query`,
+and our test should pass. Let’s run the test:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-19/output.txt}}
+```
+
+Our test passed, so we know it works!
+
+At this point, we could consider opportunities for refactoring the
+implementation of the search function while keeping the tests passing to
+maintain the same functionality. The code in the search function isn’t too bad,
+but it doesn’t take advantage of some useful features of iterators. We’ll
+return to this example in [Chapter 13][ch13-iterators]<!-- ignore -->, where
+we’ll explore iterators in detail, and look at how to improve it.
+
+#### Using the `search` Function in the `run` Function
+
+Now that the `search` function is working and tested, we need to call `search`
+from our `run` function. We need to pass the `config.query` value and the
+`contents` that `run` reads from the file to the `search` function. Then `run`
+will print each line returned from `search`:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/no-listing-02-using-search-in-run/src/lib.rs:here}}
+```
+
+We’re still using a `for` loop to return each line from `search` and print it.
+
+Now the entire program should work! Let’s try it out, first with a word that
+should return exactly one line from the Emily Dickinson poem, “frog”:
+
+```console
+{{#include ../listings/ch12-an-io-project/no-listing-02-using-search-in-run/output.txt}}
+```
+
+Cool! Now let’s try a word that will match multiple lines, like “body”:
+
+```console
+{{#include ../listings/ch12-an-io-project/output-only-03-multiple-matches/output.txt}}
+```
+
+And finally, let’s make sure that we don’t get any lines when we search for a
+word that isn’t anywhere in the poem, such as “monomorphization”:
+
+```console
+{{#include ../listings/ch12-an-io-project/output-only-04-no-matches/output.txt}}
+```
+
+Excellent! We’ve built our own mini version of a classic tool and learned a lot
+about how to structure applications. We’ve also learned a bit about file input
+and output, lifetimes, testing, and command line parsing.
+
+To round out this project, we’ll briefly demonstrate how to work with
+environment variables and how to print to standard error, both of which are
+useful when you’re writing command line programs.
+
+[validating-references-with-lifetimes]:
+ch10-03-lifetime-syntax.html#validating-references-with-lifetimes
+[ch11-anatomy]: ch11-01-writing-tests.html#the-anatomy-of-a-test-function
+[ch10-lifetimes]: ch10-03-lifetime-syntax.html
+[ch3-iter]: ch03-05-control-flow.html#looping-through-a-collection-with-for
+[ch13-iterators]: ch13-02-iterators.html
diff --git a/src/doc/book/src/ch12-05-working-with-environment-variables.md b/src/doc/book/src/ch12-05-working-with-environment-variables.md
new file mode 100644
index 000000000..4e6b40fb3
--- /dev/null
+++ b/src/doc/book/src/ch12-05-working-with-environment-variables.md
@@ -0,0 +1,206 @@
+## Working with Environment Variables
+
+We’ll improve `minigrep` by adding an extra feature: an option for
+case-insensitive searching that the user can turn on via an environment
+variable. We could make this feature a command line option and require that
+users enter it each time they want it to apply, but by instead making it an
+environment variable, we allow our users to set the environment variable once
+and have all their searches be case insensitive in that terminal session.
+
+### Writing a Failing Test for the Case-Insensitive `search` Function
+
+We first add a new `search_case_insensitive` function that will be called when
+the environment variable has a value. We’ll continue to follow the TDD process,
+so the first step is again to write a failing test. We’ll add a new test for
+the new `search_case_insensitive` function and rename our old test from
+`one_result` to `case_sensitive` to clarify the differences between the two
+tests, as shown in Listing 12-20.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-20/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-20: Adding a new failing test for the
+case-insensitive function we’re about to add</span>
+
+Note that we’ve edited the old test’s `contents` too. We’ve added a new line
+with the text `"Duct tape."` using a capital D that shouldn’t match the query
+`"duct"` when we’re searching in a case-sensitive manner. Changing the old test
+in this way helps ensure that we don’t accidentally break the case-sensitive
+search functionality that we’ve already implemented. This test should pass now
+and should continue to pass as we work on the case-insensitive search.
+
+The new test for the case-*insensitive* search uses `"rUsT"` as its query. In
+the `search_case_insensitive` function we’re about to add, the query `"rUsT"`
+should match the line containing `"Rust:"` with a capital R and match the line
+`"Trust me."` even though both have different casing from the query. This is
+our failing test, and it will fail to compile because we haven’t yet defined
+the `search_case_insensitive` function. Feel free to add a skeleton
+implementation that always returns an empty vector, similar to the way we did
+for the `search` function in Listing 12-16 to see the test compile and fail.
+
+### Implementing the `search_case_insensitive` Function
+
+The `search_case_insensitive` function, shown in Listing 12-21, will be almost
+the same as the `search` function. The only difference is that we’ll lowercase
+the `query` and each `line` so whatever the case of the input arguments,
+they’ll be the same case when we check whether the line contains the query.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-21/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-21: Defining the `search_case_insensitive`
+function to lowercase the query and the line before comparing them</span>
+
+First, we lowercase the `query` string and store it in a shadowed variable with
+the same name. Calling `to_lowercase` on the query is necessary so no
+matter whether the user’s query is `"rust"`, `"RUST"`, `"Rust"`, or `"rUsT"`,
+we’ll treat the query as if it were `"rust"` and be insensitive to the case.
+While `to_lowercase` will handle basic Unicode, it won’t be 100% accurate. If
+we were writing a real application, we’d want to do a bit more work here, but
+this section is about environment variables, not Unicode, so we’ll leave it at
+that here.
+
+Note that `query` is now a `String` rather than a string slice, because calling
+`to_lowercase` creates new data rather than referencing existing data. Say the
+query is `"rUsT"`, as an example: that string slice doesn’t contain a lowercase
+`u` or `t` for us to use, so we have to allocate a new `String` containing
+`"rust"`. When we pass `query` as an argument to the `contains` method now, we
+need to add an ampersand because the signature of `contains` is defined to take
+a string slice.
+
+Next, we add a call to `to_lowercase` on each `line` to lowercase all
+characters. Now that we’ve converted `line` and `query` to lowercase, we’ll
+find matches no matter what the case of the query is.
+
+Let’s see if this implementation passes the tests:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-21/output.txt}}
+```
+
+Great! They passed. Now, let’s call the new `search_case_insensitive` function
+from the `run` function. First, we’ll add a configuration option to the
+`Config` struct to switch between case-sensitive and case-insensitive search.
+Adding this field will cause compiler errors because we aren’t initializing
+this field anywhere yet:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-22/src/lib.rs:here}}
+```
+
+We added the `ignore_case` field that holds a Boolean. Next, we need the `run`
+function to check the `ignore_case` field’s value and use that to decide
+whether to call the `search` function or the `search_case_insensitive`
+function, as shown in Listing 12-22. This still won’t compile yet.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-22/src/lib.rs:there}}
+```
+
+<span class="caption">Listing 12-22: Calling either `search` or
+`search_case_insensitive` based on the value in `config.ignore_case`</span>
+
+Finally, we need to check for the environment variable. The functions for
+working with environment variables are in the `env` module in the standard
+library, so we bring that module into scope at the top of *src/lib.rs*. Then
+we’ll use the `var` function from the `env` module to check to see if any value
+has been set for an environment variable named `IGNORE_CASE`, as shown in
+Listing 12-23.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-23/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 12-23: Checking for any value in an environment
+variable named `IGNORE_CASE`</span>
+
+Here, we create a new variable `ignore_case`. To set its value, we call the
+`env::var` function and pass it the name of the `IGNORE_CASE` environment
+variable. The `env::var` function returns a `Result` that will be the
+successful `Ok` variant that contains the value of the environment variable if
+the environment variable is set to any value. It will return the `Err` variant
+if the environment variable is not set.
+
+We’re using the `is_ok` method on the `Result` to check whether the environment
+variable is set, which means the program should do a case-insensitive search.
+If the `IGNORE_CASE` environment variable isn’t set to anything, `is_ok` will
+return false and the program will perform a case-sensitive search. We don’t
+care about the *value* of the environment variable, just whether it’s set or
+unset, so we’re checking `is_ok` rather than using `unwrap`, `expect`, or any
+of the other methods we’ve seen on `Result`.
+
+We pass the value in the `ignore_case` variable to the `Config` instance so the
+`run` function can read that value and decide whether to call
+`search_case_insensitive` or `search`, as we implemented in Listing 12-22.
+
+Let’s give it a try! First, we’ll run our program without the environment
+variable set and with the query `to`, which should match any line that contains
+the word “to” in all lowercase:
+
+```console
+{{#include ../listings/ch12-an-io-project/listing-12-23/output.txt}}
+```
+
+Looks like that still works! Now, let’s run the program with `IGNORE_CASE`
+set to `1` but with the same query `to`.
+
+```console
+$ IGNORE_CASE=1 cargo run -- to poem.txt
+```
+
+If you’re using PowerShell, you will need to set the environment variable and
+run the program as separate commands:
+
+```console
+PS> $Env:IGNORE_CASE=1; cargo run -- to poem.txt
+```
+
+This will make `IGNORE_CASE` persist for the remainder of your shell
+session. It can be unset with the `Remove-Item` cmdlet:
+
+```console
+PS> Remove-Item Env:IGNORE_CASE
+```
+
+We should get lines that contain “to” that might have uppercase letters:
+
+<!-- manual-regeneration
+cd listings/ch12-an-io-project/listing-12-23
+IGNORE_CASE=1 cargo run -- to poem.txt
+can't extract because of the environment variable
+-->
+
+```console
+Are you nobody, too?
+How dreary to be somebody!
+To tell your name the livelong day
+To an admiring bog!
+```
+
+Excellent, we also got lines containing “To”! Our `minigrep` program can now do
+case-insensitive searching controlled by an environment variable. Now you know
+how to manage options set using either command line arguments or environment
+variables.
+
+Some programs allow arguments *and* environment variables for the same
+configuration. In those cases, the programs decide that one or the other takes
+precedence. For another exercise on your own, try controlling case sensitivity
+through either a command line argument or an environment variable. Decide
+whether the command line argument or the environment variable should take
+precedence if the program is run with one set to case sensitive and one set to
+ignore case.
+
+The `std::env` module contains many more useful features for dealing with
+environment variables: check out its documentation to see what is available.
diff --git a/src/doc/book/src/ch12-06-writing-to-stderr-instead-of-stdout.md b/src/doc/book/src/ch12-06-writing-to-stderr-instead-of-stdout.md
new file mode 100644
index 000000000..d017fa324
--- /dev/null
+++ b/src/doc/book/src/ch12-06-writing-to-stderr-instead-of-stdout.md
@@ -0,0 +1,108 @@
+## Writing Error Messages to Standard Error Instead of Standard Output
+
+At the moment, we’re writing all of our output to the terminal using the
+`println!` macro. In most terminals, there are two kinds of output: *standard
+output* (`stdout`) for general information and *standard error* (`stderr`) for
+error messages. This distinction enables users to choose to direct the
+successful output of a program to a file but still print error messages to the
+screen.
+
+The `println!` macro is only capable of printing to standard output, so we
+have to use something else to print to standard error.
+
+### Checking Where Errors Are Written
+
+First, let’s observe how the content printed by `minigrep` is currently being
+written to standard output, including any error messages we want to write to
+standard error instead. We’ll do that by redirecting the standard output stream
+to a file while intentionally causing an error. We won’t redirect the standard
+error stream, so any content sent to standard error will continue to display on
+the screen.
+
+Command line programs are expected to send error messages to the standard error
+stream so we can still see error messages on the screen even if we redirect the
+standard output stream to a file. Our program is not currently well-behaved:
+we’re about to see that it saves the error message output to a file instead!
+
+To demonstrate this behavior, we’ll run the program with `>` and the file path,
+*output.txt*, that we want to redirect the standard output stream to. We won’t
+pass any arguments, which should cause an error:
+
+```console
+$ cargo run > output.txt
+```
+
+The `>` syntax tells the shell to write the contents of standard output to
+*output.txt* instead of the screen. We didn’t see the error message we were
+expecting printed to the screen, so that means it must have ended up in the
+file. This is what *output.txt* contains:
+
+```text
+Problem parsing arguments: not enough arguments
+```
+
+Yup, our error message is being printed to standard output. It’s much more
+useful for error messages like this to be printed to standard error so only
+data from a successful run ends up in the file. We’ll change that.
+
+### Printing Errors to Standard Error
+
+We’ll use the code in Listing 12-24 to change how error messages are printed.
+Because of the refactoring we did earlier in this chapter, all the code that
+prints error messages is in one function, `main`. The standard library provides
+the `eprintln!` macro that prints to the standard error stream, so let’s change
+the two places we were calling `println!` to print errors to use `eprintln!`
+instead.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-24/src/main.rs:here}}
+```
+
+<span class="caption">Listing 12-24: Writing error messages to standard error
+instead of standard output using `eprintln!`</span>
+
+Let’s now run the program again in the same way, without any arguments and
+redirecting standard output with `>`:
+
+```console
+$ cargo run > output.txt
+Problem parsing arguments: not enough arguments
+```
+
+Now we see the error onscreen and *output.txt* contains nothing, which is the
+behavior we expect of command line programs.
+
+Let’s run the program again with arguments that don’t cause an error but still
+redirect standard output to a file, like so:
+
+```console
+$ cargo run -- to poem.txt > output.txt
+```
+
+We won’t see any output to the terminal, and *output.txt* will contain our
+results:
+
+<span class="filename">Filename: output.txt</span>
+
+```text
+Are you nobody, too?
+How dreary to be somebody!
+```
+
+This demonstrates that we’re now using standard output for successful output
+and standard error for error output as appropriate.
+
+## Summary
+
+This chapter recapped some of the major concepts you’ve learned so far and
+covered how to perform common I/O operations in Rust. By using command line
+arguments, files, environment variables, and the `eprintln!` macro for printing
+errors, you’re now prepared to write command line applications. Combined with
+the concepts in previous chapters, your code will be well organized, store data
+effectively in the appropriate data structures, handle errors nicely, and be
+well tested.
+
+Next, we’ll explore some Rust features that were influenced by functional
+languages: closures and iterators.
diff --git a/src/doc/book/src/ch13-00-functional-features.md b/src/doc/book/src/ch13-00-functional-features.md
new file mode 100644
index 000000000..7011cb9f4
--- /dev/null
+++ b/src/doc/book/src/ch13-00-functional-features.md
@@ -0,0 +1,24 @@
+# Functional Language Features: Iterators and Closures
+
+Rust’s design has taken inspiration from many existing languages and
+techniques, and one significant influence is *functional programming*.
+Programming in a functional style often includes using functions as values by
+passing them in arguments, returning them from other functions, assigning them
+to variables for later execution, and so forth.
+
+In this chapter, we won’t debate the issue of what functional programming is or
+isn’t but will instead discuss some features of Rust that are similar to
+features in many languages often referred to as functional.
+
+More specifically, we’ll cover:
+
+* *Closures*, a function-like construct you can store in a variable
+* *Iterators*, a way of processing a series of elements
+* How to use closures and iterators to improve the I/O project in Chapter 12
+* The performance of closures and iterators (Spoiler alert: they’re faster than
+ you might think!)
+
+We’ve already covered some other Rust features, such as pattern matching and
+enums, that are also influenced by the functional style. Because mastering
+closures and iterators is an important part of writing idiomatic, fast Rust
+code, we’ll devote this entire chapter to them.
diff --git a/src/doc/book/src/ch13-01-closures.md b/src/doc/book/src/ch13-01-closures.md
new file mode 100644
index 000000000..f1ae32435
--- /dev/null
+++ b/src/doc/book/src/ch13-01-closures.md
@@ -0,0 +1,423 @@
+<!-- Old heading. Do not remove or links may break. -->
+<a id="closures-anonymous-functions-that-can-capture-their-environment"></a>
+
+## Closures: Anonymous Functions that Capture Their Environment
+
+Rust’s closures are anonymous functions you can save in a variable or pass as
+arguments to other functions. You can create the closure in one place and then
+call the closure elsewhere to evaluate it in a different context. Unlike
+functions, closures can capture values from the scope in which they’re defined.
+We’ll demonstrate how these closure features allow for code reuse and behavior
+customization.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="creating-an-abstraction-of-behavior-with-closures"></a>
+<a id="refactoring-using-functions"></a>
+<a id="refactoring-with-closures-to-store-code"></a>
+
+### Capturing the Environment with Closures
+
+We’ll first examine how we can use closures to capture values from the
+environment they’re defined in for later use. Here’s the scenario: Every so
+often, our t-shirt company gives away an exclusive, limited-edition shirt to
+someone on our mailing list as a promotion. People on the mailing list can
+optionally add their favorite color to their profile. If the person chosen for
+a free shirt has their favorite color set, they get that color shirt. If the
+person hasn’t specified a favorite color, they get whatever color the company
+currently has the most of.
+
+There are many ways to implement this. For this example, we’re going to use an
+enum called `ShirtColor` that has the variants `Red` and `Blue` (limiting the
+number of colors available for simplicity). We represent the company’s
+inventory with an `Inventory` struct that has a field named `shirts` that
+contains a `Vec<ShirtColor>` representing the shirt colors currently in stock.
+The method `giveaway` defined on `Inventory` gets the optional shirt
+color preference of the free shirt winner, and returns the shirt color the
+person will get. This setup is shown in Listing 13-1:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-01/src/main.rs}}
+```
+
+<span class="caption">Listing 13-1: Shirt company giveaway situation</span>
+
+The `store` defined in `main` has two blue shirts and one red shirt remaining
+to distribute for this limited-edition promotion. We call the `giveaway` method
+for a user with a preference for a red shirt and a user without any preference.
+
+Again, this code could be implemented in many ways, and here, to focus on
+closures, we’ve stuck to concepts you’ve already learned except for the body of
+the `giveaway` method that uses a closure. In the `giveaway` method, we get the
+user preference as a parameter of type `Option<ShirtColor>` and call the
+`unwrap_or_else` method on `user_preference`. The [`unwrap_or_else` method on
+`Option<T>`][unwrap-or-else]<!-- ignore --> is defined by the standard library.
+It takes one argument: a closure without any arguments that returns a value `T`
+(the same type stored in the `Some` variant of the `Option<T>`, in this case
+`ShirtColor`). If the `Option<T>` is the `Some` variant, `unwrap_or_else`
+returns the value from within the `Some`. If the `Option<T>` is the `None`
+variant, `unwrap_or_else` calls the closure and returns the value returned by
+the closure.
+
+We specify the closure expression `|| self.most_stocked()` as the argument to
+`unwrap_or_else`. This is a closure that takes no parameters itself (if the
+closure had parameters, they would appear between the two vertical bars). The
+body of the closure calls `self.most_stocked()`. We’re defining the closure
+here, and the implementation of `unwrap_or_else` will evaluate the closure
+later if the result is needed.
+
+Running this code prints:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-01/output.txt}}
+```
+
+One interesting aspect here is that we’ve passed a closure that calls
+`self.most_stocked()` on the current `Inventory` instance. The standard library
+didn’t need to know anything about the `Inventory` or `ShirtColor` types we
+defined, or the logic we want to use in this scenario. The closure captures an
+immutable reference to the `self` `Inventory` instance and passes it with the
+code we specify to the `unwrap_or_else` method. Functions, on the other hand,
+are not able to capture their environment in this way.
+
+### Closure Type Inference and Annotation
+
+There are more differences between functions and closures. Closures don’t
+usually require you to annotate the types of the parameters or the return value
+like `fn` functions do. Type annotations are required on functions because the
+types are part of an explicit interface exposed to your users. Defining this
+interface rigidly is important for ensuring that everyone agrees on what types
+of values a function uses and returns. Closures, on the other hand, aren’t used
+in an exposed interface like this: they’re stored in variables and used without
+naming them and exposing them to users of our library.
+
+Closures are typically short and relevant only within a narrow context rather
+than in any arbitrary scenario. Within these limited contexts, the compiler can
+infer the types of the parameters and the return type, similar to how it’s able
+to infer the types of most variables (there are rare cases where the compiler
+needs closure type annotations too).
+
+As with variables, we can add type annotations if we want to increase
+explicitness and clarity at the cost of being more verbose than is strictly
+necessary. Annotating the types for a closure would look like the definition
+shown in Listing 13-2. In this example, we’re defining a closure and storing it
+in a variable rather than defining the closure in the spot we pass it as an
+argument as we did in Listing 13-1.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-2: Adding optional type annotations of the
+parameter and return value types in the closure</span>
+
+With type annotations added, the syntax of closures looks more similar to the
+syntax of functions. Here we define a function that adds 1 to its parameter and
+a closure that has the same behavior, for comparison. We’ve added some spaces
+to line up the relevant parts. This illustrates how closure syntax is similar
+to function syntax except for the use of pipes and the amount of syntax that is
+optional:
+
+```rust,ignore
+fn add_one_v1 (x: u32) -> u32 { x + 1 }
+let add_one_v2 = |x: u32| -> u32 { x + 1 };
+let add_one_v3 = |x| { x + 1 };
+let add_one_v4 = |x| x + 1 ;
+```
+
+The first line shows a function definition, and the second line shows a fully
+annotated closure definition. In the third line, we remove the type annotations
+from the closure definition. In the fourth line, we remove the brackets, which
+are optional because the closure body has only one expression. These are all
+valid definitions that will produce the same behavior when they’re called. The
+`add_one_v3` and `add_one_v4` lines require the closures to be evaluated to be
+able to compile because the types will be inferred from their usage. This is
+similar to `let v = Vec::new();` needing either type annotations or values of
+some type to be inserted into the `Vec` for Rust to be able to infer the type.
+
+For closure definitions, the compiler will infer one concrete type for each of
+their parameters and for their return value. For instance, Listing 13-3 shows
+the definition of a short closure that just returns the value it receives as a
+parameter. This closure isn’t very useful except for the purposes of this
+example. Note that we haven’t added any type annotations to the definition.
+Because there are no type annotations, we can call the closure with any type,
+which we’ve done here with `String` the first time. If we then try to call
+`example_closure` with an integer, we’ll get an error.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-3: Attempting to call a closure whose types
+are inferred with two different types</span>
+
+The compiler gives us this error:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-03/output.txt}}
+```
+
+The first time we call `example_closure` with the `String` value, the compiler
+infers the type of `x` and the return type of the closure to be `String`. Those
+types are then locked into the closure in `example_closure`, and we get a type
+error when we next try to use a different type with the same closure.
+
+### Capturing References or Moving Ownership
+
+Closures can capture values from their environment in three ways, which
+directly map to the three ways a function can take a parameter: borrowing
+immutably, borrowing mutably, and taking ownership. The closure will decide
+which of these to use based on what the body of the function does with the
+captured values.
+
+In Listing 13-4, we define a closure that captures an immutable reference to
+the vector named `list` because it only needs an immutable reference to print
+the value:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-04/src/main.rs}}
+```
+
+<span class="caption">Listing 13-4: Defining and calling a closure that
+captures an immutable reference</span>
+
+This example also illustrates that a variable can bind to a closure definition,
+and we can later call the closure by using the variable name and parentheses as
+if the variable name were a function name.
+
+Because we can have multiple immutable references to `list` at the same time,
+`list` is still accessible from the code before the closure definition, after
+the closure definition but before the closure is called, and after the closure
+is called. This code compiles, runs, and prints:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-04/output.txt}}
+```
+
+Next, in Listing 13-5, we change the closure body so that it adds an element to
+the `list` vector. The closure now captures a mutable reference:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-05/src/main.rs}}
+```
+
+<span class="caption">Listing 13-5: Defining and calling a closure that
+captures a mutable reference</span>
+
+This code compiles, runs, and prints:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-05/output.txt}}
+```
+
+Note that there’s no longer a `println!` between the definition and the call of
+the `borrows_mutably` closure: when `borrows_mutably` is defined, it captures a
+mutable reference to `list`. We don’t use the closure again after the closure
+is called, so the mutable borrow ends. Between the closure definition and the
+closure call, an immutable borrow to print isn’t allowed because no other
+borrows are allowed when there’s a mutable borrow. Try adding a `println!`
+there to see what error message you get!
+
+If you want to force the closure to take ownership of the values it uses in the
+environment even though the body of the closure doesn’t strictly need
+ownership, you can use the `move` keyword before the parameter list.
+
+This technique is mostly useful when passing a closure to a new thread to move
+the data so that it’s owned by the new thread. We’ll discuss threads and why
+you would want to use them in detail in Chapter 16 when we talk about
+concurrency, but for now, let’s briefly explore spawning a new thread using a
+closure that needs the `move` keyword. Listing 13-6 shows Listing 13-4 modified
+to print the vector in a new thread rather than in the main thread:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-06/src/main.rs}}
+```
+
+<span class="caption">Listing 13-6: Using `move` to force the closure for the
+thread to take ownership of `list`</span>
+
+We spawn a new thread, giving the thread a closure to run as an argument. The
+closure body prints out the list. In Listing 13-4, the closure only captured
+`list` using an immutable reference because that's the least amount of access
+to `list` needed to print it. In this example, even though the closure body
+still only needs an immutable reference, we need to specify that `list` should
+be moved into the closure by putting the `move` keyword at the beginning of the
+closure definition. The new thread might finish before the rest of the main
+thread finishes, or the main thread might finish first. If the main thread
+maintained ownership of `list` but ended before the new thread did and dropped
+`list`, the immutable reference in the thread would be invalid. Therefore, the
+compiler requires that `list` be moved into the closure given to the new thread
+so the reference will be valid. Try removing the `move` keyword or using `list`
+in the main thread after the closure is defined to see what compiler errors you
+get!
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="storing-closures-using-generic-parameters-and-the-fn-traits"></a>
+<a id="limitations-of-the-cacher-implementation"></a>
+<a id="moving-captured-values-out-of-the-closure-and-the-fn-traits"></a>
+
+### Moving Captured Values Out of Closures and the `Fn` Traits
+
+Once a closure has captured a reference or captured ownership of a value from
+the environment where the closure is defined (thus affecting what, if anything,
+is moved *into* the closure), the code in the body of the closure defines what
+happens to the references or values when the closure is evaluated later (thus
+affecting what, if anything, is moved *out of* the closure). A closure body can
+do any of the following: move a captured value out of the closure, mutate the
+captured value, neither move nor mutate the value, or capture nothing from the
+environment to begin with.
+
+The way a closure captures and handles values from the environment affects
+which traits the closure implements, and traits are how functions and structs
+can specify what kinds of closures they can use. Closures will automatically
+implement one, two, or all three of these `Fn` traits, in an additive fashion,
+depending on how the closure’s body handles the values:
+
+1. `FnOnce` applies to closures that can be called once. All closures implement
+ at least this trait, because all closures can be called. A closure that
+ moves captured values out of its body will only implement `FnOnce` and none
+ of the other `Fn` traits, because it can only be called once.
+2. `FnMut` applies to closures that don’t move captured values out of their
+ body, but that might mutate the captured values. These closures can be
+ called more than once.
+3. `Fn` applies to closures that don’t move captured values out of their body
+ and that don’t mutate captured values, as well as closures that capture
+ nothing from their environment. These closures can be called more than once
+ without mutating their environment, which is important in cases such as
+ calling a closure multiple times concurrently.
+
+Let’s look at the definition of the `unwrap_or_else` method on `Option<T>` that
+we used in Listing 13-1:
+
+```rust,ignore
+impl<T> Option<T> {
+ pub fn unwrap_or_else<F>(self, f: F) -> T
+ where
+ F: FnOnce() -> T
+ {
+ match self {
+ Some(x) => x,
+ None => f(),
+ }
+ }
+}
+```
+
+Recall that `T` is the generic type representing the type of the value in the
+`Some` variant of an `Option`. That type `T` is also the return type of the
+`unwrap_or_else` function: code that calls `unwrap_or_else` on an
+`Option<String>`, for example, will get a `String`.
+
+Next, notice that the `unwrap_or_else` function has the additional generic type
+parameter `F`. The `F` type is the type of the parameter named `f`, which is
+the closure we provide when calling `unwrap_or_else`.
+
+The trait bound specified on the generic type `F` is `FnOnce() -> T`, which
+means `F` must be able to be called once, take no arguments, and return a `T`.
+Using `FnOnce` in the trait bound expresses the constraint that
+`unwrap_or_else` is only going to call `f` at most one time. In the body of
+`unwrap_or_else`, we can see that if the `Option` is `Some`, `f` won’t be
+called. If the `Option` is `None`, `f` will be called once. Because all
+closures implement `FnOnce`, `unwrap_or_else` accepts the most different kinds
+of closures and is as flexible as it can be.
+
+> Note: Functions can implement all three of the `Fn` traits too. If what we
+> want to do doesn’t require capturing a value from the environment, we can use
+> the name of a function rather than a closure where we need something that
+> implements one of the `Fn` traits. For example, on an `Option<Vec<T>>` value,
+> we could call `unwrap_or_else(Vec::new)` to get a new, empty vector if the
+> value is `None`.
+
+Now let’s look at the standard library method `sort_by_key` defined on slices,
+to see how that differs from `unwrap_or_else` and why `sort_by_key` uses
+`FnMut` instead of `FnOnce` for the trait bound. The closure gets one argument
+in the form of a reference to the current item in the slice being considered,
+and returns a value of type `K` that can be ordered. This function is useful
+when you want to sort a slice by a particular attribute of each item. In
+Listing 13-7, we have a list of `Rectangle` instances and we use `sort_by_key`
+to order them by their `width` attribute from low to high:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-07/src/main.rs}}
+```
+
+<span class="caption">Listing 13-7: Using `sort_by_key` to order rectangles by
+width</span>
+
+This code prints:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-07/output.txt}}
+```
+
+The reason `sort_by_key` is defined to take an `FnMut` closure is that it calls
+the closure multiple times: once for each item in the slice. The closure `|r|
+r.width` doesn’t capture, mutate, or move out anything from its environment, so
+it meets the trait bound requirements.
+
+In contrast, Listing 13-8 shows an example of a closure that implements just
+the `FnOnce` trait, because it moves a value out of the environment. The
+compiler won’t let us use this closure with `sort_by_key`:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-08/src/main.rs}}
+```
+
+<span class="caption">Listing 13-8: Attempting to use an `FnOnce` closure with
+`sort_by_key`</span>
+
+This is a contrived, convoluted way (that doesn’t work) to try and count the
+number of times `sort_by_key` gets called when sorting `list`. This code
+attempts to do this counting by pushing `value`—a `String` from the closure’s
+environment—into the `sort_operations` vector. The closure captures `value`
+then moves `value` out of the closure by transferring ownership of `value` to
+the `sort_operations` vector. This closure can be called once; trying to call
+it a second time wouldn’t work because `value` would no longer be in the
+environment to be pushed into `sort_operations` again! Therefore, this closure
+only implements `FnOnce`. When we try to compile this code, we get this error
+that `value` can’t be moved out of the closure because the closure must
+implement `FnMut`:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-08/output.txt}}
+```
+
+The error points to the line in the closure body that moves `value` out of the
+environment. To fix this, we need to change the closure body so that it doesn’t
+move values out of the environment. To count the number of times `sort_by_key`
+is called, keeping a counter in the environment and incrementing its value in
+the closure body is a more straightforward way to calculate that. The closure
+in Listing 13-9 works with `sort_by_key` because it is only capturing a mutable
+reference to the `num_sort_operations` counter and can therefore be called more
+than once:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-09/src/main.rs}}
+```
+
+<span class="caption">Listing 13-9: Using an `FnMut` closure with `sort_by_key`
+is allowed</span>
+
+The `Fn` traits are important when defining or using functions or types that
+make use of closures. In the next section, we’ll discuss iterators. Many
+iterator methods take closure arguments, so keep these closure details in mind
+as we continue!
+
+[unwrap-or-else]: ../std/option/enum.Option.html#method.unwrap_or_else
diff --git a/src/doc/book/src/ch13-02-iterators.md b/src/doc/book/src/ch13-02-iterators.md
new file mode 100644
index 000000000..2efa552a8
--- /dev/null
+++ b/src/doc/book/src/ch13-02-iterators.md
@@ -0,0 +1,228 @@
+## Processing a Series of Items with Iterators
+
+The iterator pattern allows you to perform some task on a sequence of items in
+turn. An iterator is responsible for the logic of iterating over each item and
+determining when the sequence has finished. When you use iterators, you don’t
+have to reimplement that logic yourself.
+
+In Rust, iterators are *lazy*, meaning they have no effect until you call
+methods that consume the iterator to use it up. For example, the code in
+Listing 13-10 creates an iterator over the items in the vector `v1` by calling
+the `iter` method defined on `Vec<T>`. This code by itself doesn’t do anything
+useful.
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-10: Creating an iterator</span>
+
+The iterator is stored in the `v1_iter` variable. Once we’ve created an
+iterator, we can use it in a variety of ways. In Listing 3-5 in Chapter 3, we
+iterated over an array using a `for` loop to execute some code on each of its
+items. Under the hood this implicitly created and then consumed an iterator,
+but we glossed over how exactly that works until now.
+
+In the example in Listing 13-11, we separate the creation of the iterator from
+the use of the iterator in the `for` loop. When the `for` loop is called using
+the iterator in `v1_iter`, each element in the iterator is used in one
+iteration of the loop, which prints out each value.
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-11: Using an iterator in a `for` loop</span>
+
+In languages that don’t have iterators provided by their standard libraries,
+you would likely write this same functionality by starting a variable at index
+0, using that variable to index into the vector to get a value, and
+incrementing the variable value in a loop until it reached the total number of
+items in the vector.
+
+Iterators handle all that logic for you, cutting down on repetitive code you
+could potentially mess up. Iterators give you more flexibility to use the same
+logic with many different kinds of sequences, not just data structures you can
+index into, like vectors. Let’s examine how iterators do that.
+
+### The `Iterator` Trait and the `next` Method
+
+All iterators implement a trait named `Iterator` that is defined in the
+standard library. The definition of the trait looks like this:
+
+```rust
+pub trait Iterator {
+ type Item;
+
+ fn next(&mut self) -> Option<Self::Item>;
+
+ // methods with default implementations elided
+}
+```
+
+Notice this definition uses some new syntax: `type Item` and `Self::Item`,
+which are defining an *associated type* with this trait. We’ll talk about
+associated types in depth in Chapter 19. For now, all you need to know is that
+this code says implementing the `Iterator` trait requires that you also define
+an `Item` type, and this `Item` type is used in the return type of the `next`
+method. In other words, the `Item` type will be the type returned from the
+iterator.
+
+The `Iterator` trait only requires implementors to define one method: the
+`next` method, which returns one item of the iterator at a time wrapped in
+`Some` and, when iteration is over, returns `None`.
+
+We can call the `next` method on iterators directly; Listing 13-12 demonstrates
+what values are returned from repeated calls to `next` on the iterator created
+from the vector.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-12/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 13-12: Calling the `next` method on an
+iterator</span>
+
+Note that we needed to make `v1_iter` mutable: calling the `next` method on an
+iterator changes internal state that the iterator uses to keep track of where
+it is in the sequence. In other words, this code *consumes*, or uses up, the
+iterator. Each call to `next` eats up an item from the iterator. We didn’t need
+to make `v1_iter` mutable when we used a `for` loop because the loop took
+ownership of `v1_iter` and made it mutable behind the scenes.
+
+Also note that the values we get from the calls to `next` are immutable
+references to the values in the vector. The `iter` method produces an iterator
+over immutable references. If we want to create an iterator that takes
+ownership of `v1` and returns owned values, we can call `into_iter` instead of
+`iter`. Similarly, if we want to iterate over mutable references, we can call
+`iter_mut` instead of `iter`.
+
+### Methods that Consume the Iterator
+
+The `Iterator` trait has a number of different methods with default
+implementations provided by the standard library; you can find out about these
+methods by looking in the standard library API documentation for the `Iterator`
+trait. Some of these methods call the `next` method in their definition, which
+is why you’re required to implement the `next` method when implementing the
+`Iterator` trait.
+
+Methods that call `next` are called *consuming adaptors*, because calling them
+uses up the iterator. One example is the `sum` method, which takes ownership of
+the iterator and iterates through the items by repeatedly calling `next`, thus
+consuming the iterator. As it iterates through, it adds each item to a running
+total and returns the total when iteration is complete. Listing 13-13 has a
+test illustrating a use of the `sum` method:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-13/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 13-13: Calling the `sum` method to get the total
+of all items in the iterator</span>
+
+We aren’t allowed to use `v1_iter` after the call to `sum` because `sum` takes
+ownership of the iterator we call it on.
+
+### Methods that Produce Other Iterators
+
+*Iterator adaptors* are methods defined on the `Iterator` trait that don’t
+consume the iterator. Instead, they produce different iterators by changing
+some aspect of the original iterator.
+
+Listing 13-17 shows an example of calling the iterator adaptor method `map`,
+which takes a closure to call on each item as the items are iterated through.
+The `map` method returns a new iterator that produces the modified items. The
+closure here creates a new iterator in which each item from the vector will be
+incremented by 1:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,not_desired_behavior
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-14/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-14: Calling the iterator adaptor `map` to
+create a new iterator</span>
+
+However, this code produces a warning:
+
+```console
+{{#include ../listings/ch13-functional-features/listing-13-14/output.txt}}
+```
+
+The code in Listing 13-14 doesn’t do anything; the closure we’ve specified
+never gets called. The warning reminds us why: iterator adaptors are lazy, and
+we need to consume the iterator here.
+
+To fix this warning and consume the iterator, we’ll use the `collect` method,
+which we used in Chapter 12 with `env::args` in Listing 12-1. This method
+consumes the iterator and collects the resulting values into a collection data
+type.
+
+In Listing 13-15, we collect the results of iterating over the iterator that’s
+returned from the call to `map` into a vector. This vector will end up
+containing each item from the original vector incremented by 1.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-15/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-15: Calling the `map` method to create a new
+iterator and then calling the `collect` method to consume the new iterator and
+create a vector</span>
+
+Because `map` takes a closure, we can specify any operation we want to perform
+on each item. This is a great example of how closures let you customize some
+behavior while reusing the iteration behavior that the `Iterator` trait
+provides.
+
+You can chain multiple calls to iterator adaptors to perform complex actions in
+a readable way. But because all iterators are lazy, you have to call one of the
+consuming adaptor methods to get results from calls to iterator adaptors.
+
+### Using Closures that Capture Their Environment
+
+Many iterator adapters take closures as arguments, and commonly the closures
+we’ll specify as arguments to iterator adapters will be closures that capture
+their environment.
+
+For this example, we’ll use the `filter` method that takes a closure. The
+closure gets an item from the iterator and returns a `bool`. If the closure
+returns `true`, the value will be included in the iteration produced by
+`filter`. If the closure returns `false`, the value won’t be included.
+
+In Listing 13-16, we use `filter` with a closure that captures the `shoe_size`
+variable from its environment to iterate over a collection of `Shoe` struct
+instances. It will return only shoes that are the specified size.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-16/src/lib.rs}}
+```
+
+<span class="caption">Listing 13-16: Using the `filter` method with a closure
+that captures `shoe_size`</span>
+
+The `shoes_in_size` function takes ownership of a vector of shoes and a shoe
+size as parameters. It returns a vector containing only shoes of the specified
+size.
+
+In the body of `shoes_in_size`, we call `into_iter` to create an iterator
+that takes ownership of the vector. Then we call `filter` to adapt that
+iterator into a new iterator that only contains elements for which the closure
+returns `true`.
+
+The closure captures the `shoe_size` parameter from the environment and
+compares the value with each shoe’s size, keeping only shoes of the size
+specified. Finally, calling `collect` gathers the values returned by the
+adapted iterator into a vector that’s returned by the function.
+
+The test shows that when we call `shoes_in_size`, we get back only shoes
+that have the same size as the value we specified.
diff --git a/src/doc/book/src/ch13-03-improving-our-io-project.md b/src/doc/book/src/ch13-03-improving-our-io-project.md
new file mode 100644
index 000000000..b9ef0b430
--- /dev/null
+++ b/src/doc/book/src/ch13-03-improving-our-io-project.md
@@ -0,0 +1,178 @@
+## Improving Our I/O Project
+
+With this new knowledge about iterators, we can improve the I/O project in
+Chapter 12 by using iterators to make places in the code clearer and more
+concise. Let’s look at how iterators can improve our implementation of the
+`Config::build` function and the `search` function.
+
+### Removing a `clone` Using an Iterator
+
+In Listing 12-6, we added code that took a slice of `String` values and created
+an instance of the `Config` struct by indexing into the slice and cloning the
+values, allowing the `Config` struct to own those values. In Listing 13-17,
+we’ve reproduced the implementation of the `Config::build` function as it was
+in Listing 12-23:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch13-functional-features/listing-12-23-reproduced/src/lib.rs:ch13}}
+```
+
+<span class="caption">Listing 13-17: Reproduction of the `Config::build`
+function from Listing 12-23</span>
+
+At the time, we said not to worry about the inefficient `clone` calls because
+we would remove them in the future. Well, that time is now!
+
+We needed `clone` here because we have a slice with `String` elements in the
+parameter `args`, but the `build` function doesn’t own `args`. To return
+ownership of a `Config` instance, we had to clone the values from the `query`
+and `filename` fields of `Config` so the `Config` instance can own its values.
+
+With our new knowledge about iterators, we can change the `build` function to
+take ownership of an iterator as its argument instead of borrowing a slice.
+We’ll use the iterator functionality instead of the code that checks the length
+of the slice and indexes into specific locations. This will clarify what the
+`Config::build` function is doing because the iterator will access the values.
+
+Once `Config::build` takes ownership of the iterator and stops using indexing
+operations that borrow, we can move the `String` values from the iterator into
+`Config` rather than calling `clone` and making a new allocation.
+
+#### Using the Returned Iterator Directly
+
+Open your I/O project’s *src/main.rs* file, which should look like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch13-functional-features/listing-12-24-reproduced/src/main.rs:ch13}}
+```
+
+We’ll first change the start of the `main` function that we had in Listing
+12-24 to the code in Listing 13-18, which this time uses an iterator. This
+won’t compile until we update `Config::build` as well.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-18/src/main.rs:here}}
+```
+
+<span class="caption">Listing 13-18: Passing the return value of `env::args` to
+`Config::build`</span>
+
+The `env::args` function returns an iterator! Rather than collecting the
+iterator values into a vector and then passing a slice to `Config::build`, now
+we’re passing ownership of the iterator returned from `env::args` to
+`Config::build` directly.
+
+Next, we need to update the definition of `Config::build`. In your I/O
+project’s *src/lib.rs* file, let’s change the signature of `Config::build` to
+look like Listing 13-19. This still won’t compile because we need to update the
+function body.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-19/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 13-19: Updating the signature of `Config::build`
+to expect an iterator</span>
+
+The standard library documentation for the `env::args` function shows that the
+type of the iterator it returns is `std::env::Args`, and that type implements
+the `Iterator` trait and returns `String` values.
+
+We’ve updated the signature of the `Config::build` function so the parameter
+`args` has a generic type with the trait bounds `impl Iterator<Item = String>`
+instead of `&[String]`. This usage of the `impl Trait` syntax we discussed in
+the [“Traits as Parameters”][impl-trait]<!-- ignore --> section of Chapter 10
+means that `args` can be any type that implements the `Iterator` type and
+returns `String` items.
+
+Because we’re taking ownership of `args` and we’ll be mutating `args` by
+iterating over it, we can add the `mut` keyword into the specification of the
+`args` parameter to make it mutable.
+
+#### Using `Iterator` Trait Methods Instead of Indexing
+
+Next, we’ll fix the body of `Config::build`. Because `args` implements the
+`Iterator` trait, we know we can call the `next` method on it! Listing 13-20
+updates the code from Listing 12-23 to use the `next` method:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-20/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 13-20: Changing the body of `Config::build` to use
+iterator methods</span>
+
+Remember that the first value in the return value of `env::args` is the name of
+the program. We want to ignore that and get to the next value, so first we call
+`next` and do nothing with the return value. Second, we call `next` to get the
+value we want to put in the `query` field of `Config`. If `next` returns a
+`Some`, we use a `match` to extract the value. If it returns `None`, it means
+not enough arguments were given and we return early with an `Err` value. We do
+the same thing for the `filename` value.
+
+### Making Code Clearer with Iterator Adaptors
+
+We can also take advantage of iterators in the `search` function in our I/O
+project, which is reproduced here in Listing 13-21 as it was in Listing 12-19:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch12-an-io-project/listing-12-19/src/lib.rs:ch13}}
+```
+
+<span class="caption">Listing 13-21: The implementation of the `search`
+function from Listing 12-19</span>
+
+We can write this code in a more concise way using iterator adaptor methods.
+Doing so also lets us avoid having a mutable intermediate `results` vector. The
+functional programming style prefers to minimize the amount of mutable state to
+make code clearer. Removing the mutable state might enable a future enhancement
+to make searching happen in parallel, because we wouldn’t have to manage
+concurrent access to the `results` vector. Listing 13-22 shows this change:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch13-functional-features/listing-13-22/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 13-22: Using iterator adaptor methods in the
+implementation of the `search` function</span>
+
+Recall that the purpose of the `search` function is to return all lines in
+`contents` that contain the `query`. Similar to the `filter` example in Listing
+13-16, this code uses the `filter` adaptor to keep only the lines that
+`line.contains(query)` returns `true` for. We then collect the matching lines
+into another vector with `collect`. Much simpler! Feel free to make the same
+change to use iterator methods in the `search_case_insensitive` function as
+well.
+
+### Choosing Between Loops or Iterators
+
+The next logical question is which style you should choose in your own code and
+why: the original implementation in Listing 13-21 or the version using
+iterators in Listing 13-22. Most Rust programmers prefer to use the iterator
+style. It’s a bit tougher to get the hang of at first, but once you get a feel
+for the various iterator adaptors and what they do, iterators can be easier to
+understand. Instead of fiddling with the various bits of looping and building
+new vectors, the code focuses on the high-level objective of the loop. This
+abstracts away some of the commonplace code so it’s easier to see the concepts
+that are unique to this code, such as the filtering condition each element in
+the iterator must pass.
+
+But are the two implementations truly equivalent? The intuitive assumption
+might be that the more low-level loop will be faster. Let’s talk about
+performance.
+
+[impl-trait]: ch10-02-traits.html#traits-as-parameters
diff --git a/src/doc/book/src/ch13-04-performance.md b/src/doc/book/src/ch13-04-performance.md
new file mode 100644
index 000000000..5d09bf294
--- /dev/null
+++ b/src/doc/book/src/ch13-04-performance.md
@@ -0,0 +1,94 @@
+## Comparing Performance: Loops vs. Iterators
+
+To determine whether to use loops or iterators, you need to know which
+implementation is faster: the version of the `search` function with an explicit
+`for` loop or the version with iterators.
+
+We ran a benchmark by loading the entire contents of *The Adventures of
+Sherlock Holmes* by Sir Arthur Conan Doyle into a `String` and looking for the
+word *the* in the contents. Here are the results of the benchmark on the
+version of `search` using the `for` loop and the version using iterators:
+
+```text
+test bench_search_for ... bench: 19,620,300 ns/iter (+/- 915,700)
+test bench_search_iter ... bench: 19,234,900 ns/iter (+/- 657,200)
+```
+
+The iterator version was slightly faster! We won’t explain the benchmark code
+here, because the point is not to prove that the two versions are equivalent
+but to get a general sense of how these two implementations compare
+performance-wise.
+
+For a more comprehensive benchmark, you should check using various texts of
+various sizes as the `contents`, different words and words of different lengths
+as the `query`, and all kinds of other variations. The point is this:
+iterators, although a high-level abstraction, get compiled down to roughly the
+same code as if you’d written the lower-level code yourself. Iterators are one
+of Rust’s *zero-cost abstractions*, by which we mean using the abstraction
+imposes no additional runtime overhead. This is analogous to how Bjarne
+Stroustrup, the original designer and implementor of C++, defines
+*zero-overhead* in “Foundations of C++” (2012):
+
+> In general, C++ implementations obey the zero-overhead principle: What you
+> don’t use, you don’t pay for. And further: What you do use, you couldn’t hand
+> code any better.
+
+As another example, the following code is taken from an audio decoder. The
+decoding algorithm uses the linear prediction mathematical operation to
+estimate future values based on a linear function of the previous samples. This
+code uses an iterator chain to do some math on three variables in scope: a
+`buffer` slice of data, an array of 12 `coefficients`, and an amount by which
+to shift data in `qlp_shift`. We’ve declared the variables within this example
+but not given them any values; although this code doesn’t have much meaning
+outside of its context, it’s still a concise, real-world example of how Rust
+translates high-level ideas to low-level code.
+
+```rust,ignore
+let buffer: &mut [i32];
+let coefficients: [i64; 12];
+let qlp_shift: i16;
+
+for i in 12..buffer.len() {
+ let prediction = coefficients.iter()
+ .zip(&buffer[i - 12..i])
+ .map(|(&c, &s)| c * s as i64)
+ .sum::<i64>() >> qlp_shift;
+ let delta = buffer[i];
+ buffer[i] = prediction as i32 + delta;
+}
+```
+
+To calculate the value of `prediction`, this code iterates through each of the
+12 values in `coefficients` and uses the `zip` method to pair the coefficient
+values with the previous 12 values in `buffer`. Then, for each pair, we
+multiply the values together, sum all the results, and shift the bits in the
+sum `qlp_shift` bits to the right.
+
+Calculations in applications like audio decoders often prioritize performance
+most highly. Here, we’re creating an iterator, using two adaptors, and then
+consuming the value. What assembly code would this Rust code compile to? Well,
+as of this writing, it compiles down to the same assembly you’d write by hand.
+There’s no loop at all corresponding to the iteration over the values in
+`coefficients`: Rust knows that there are 12 iterations, so it “unrolls” the
+loop. *Unrolling* is an optimization that removes the overhead of the loop
+controlling code and instead generates repetitive code for each iteration of
+the loop.
+
+All of the coefficients get stored in registers, which means accessing the
+values is very fast. There are no bounds checks on the array access at runtime.
+All these optimizations that Rust is able to apply make the resulting code
+extremely efficient. Now that you know this, you can use iterators and closures
+without fear! They make code seem like it’s higher level but don’t impose a
+runtime performance penalty for doing so.
+
+## Summary
+
+Closures and iterators are Rust features inspired by functional programming
+language ideas. They contribute to Rust’s capability to clearly express
+high-level ideas at low-level performance. The implementations of closures and
+iterators are such that runtime performance is not affected. This is part of
+Rust’s goal to strive to provide zero-cost abstractions.
+
+Now that we’ve improved the expressiveness of our I/O project, let’s look at
+some more features of `cargo` that will help us share the project with the
+world.
diff --git a/src/doc/book/src/ch14-00-more-about-cargo.md b/src/doc/book/src/ch14-00-more-about-cargo.md
new file mode 100644
index 000000000..8f8b8e51c
--- /dev/null
+++ b/src/doc/book/src/ch14-00-more-about-cargo.md
@@ -0,0 +1,15 @@
+# More About Cargo and Crates.io
+
+So far we’ve used only the most basic features of Cargo to build, run, and test
+our code, but it can do a lot more. In this chapter, we’ll discuss some of its
+other, more advanced features to show you how to do the following:
+
+* Customize your build through release profiles
+* Publish libraries on [crates.io](https://crates.io/)<!-- ignore -->
+* Organize large projects with workspaces
+* Install binaries from [crates.io](https://crates.io/)<!-- ignore -->
+* Extend Cargo using custom commands
+
+Cargo can do even more than the functionality we cover in this chapter, so for
+a full explanation of all its features, see [its
+documentation](https://doc.rust-lang.org/cargo/).
diff --git a/src/doc/book/src/ch14-01-release-profiles.md b/src/doc/book/src/ch14-01-release-profiles.md
new file mode 100644
index 000000000..44391ae61
--- /dev/null
+++ b/src/doc/book/src/ch14-01-release-profiles.md
@@ -0,0 +1,75 @@
+## Customizing Builds with Release Profiles
+
+In Rust, *release profiles* are predefined and customizable profiles with
+different configurations that allow a programmer to have more control over
+various options for compiling code. Each profile is configured independently of
+the others.
+
+Cargo has two main profiles: the `dev` profile Cargo uses when you run `cargo
+build` and the `release` profile Cargo uses when you run `cargo build
+--release`. The `dev` profile is defined with good defaults for development,
+and the `release` profile has good defaults for release builds.
+
+These profile names might be familiar from the output of your builds:
+
+<!-- manual-regeneration
+anywhere, run:
+cargo build
+cargo build --release
+and ensure output below is accurate
+-->
+
+```console
+$ cargo build
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+$ cargo build --release
+ Finished release [optimized] target(s) in 0.0s
+```
+
+The `dev` and `release` are these different profiles used by the compiler.
+
+Cargo has default settings for each of the profiles that apply when you haven't
+explicitly added any `[profile.*]` sections in the project’s *Cargo.toml* file.
+By adding `[profile.*]` sections for any profile you want to customize, you
+override any subset of the default settings. For example, here are the default
+values for the `opt-level` setting for the `dev` and `release` profiles:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+[profile.dev]
+opt-level = 0
+
+[profile.release]
+opt-level = 3
+```
+
+The `opt-level` setting controls the number of optimizations Rust will apply to
+your code, with a range of 0 to 3. Applying more optimizations extends
+compiling time, so if you’re in development and compiling your code often,
+you’ll want fewer optimizations to compile faster even if the resulting code
+runs slower. The default `opt-level` for `dev` is therefore `0`. When you’re
+ready to release your code, it’s best to spend more time compiling. You’ll only
+compile in release mode once, but you’ll run the compiled program many times,
+so release mode trades longer compile time for code that runs faster. That is
+why the default `opt-level` for the `release` profile is `3`.
+
+You can override a default setting by adding a different value for it in
+*Cargo.toml*. For example, if we want to use optimization level 1 in the
+development profile, we can add these two lines to our project’s *Cargo.toml*
+file:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+[profile.dev]
+opt-level = 1
+```
+
+This code overrides the default setting of `0`. Now when we run `cargo build`,
+Cargo will use the defaults for the `dev` profile plus our customization to
+`opt-level`. Because we set `opt-level` to `1`, Cargo will apply more
+optimizations than the default, but not as many as in a release build.
+
+For the full list of configuration options and defaults for each profile, see
+[Cargo’s documentation](https://doc.rust-lang.org/cargo/reference/profiles.html).
diff --git a/src/doc/book/src/ch14-02-publishing-to-crates-io.md b/src/doc/book/src/ch14-02-publishing-to-crates-io.md
new file mode 100644
index 000000000..64885d052
--- /dev/null
+++ b/src/doc/book/src/ch14-02-publishing-to-crates-io.md
@@ -0,0 +1,464 @@
+## Publishing a Crate to Crates.io
+
+We’ve used packages from [crates.io](https://crates.io/)<!-- ignore --> as
+dependencies of our project, but you can also share your code with other people
+by publishing your own packages. The crate registry at
+[crates.io](https://crates.io/)<!-- ignore --> distributes the source code of
+your packages, so it primarily hosts code that is open source.
+
+Rust and Cargo have features that make your published package easier for people
+to find and use. We’ll talk about some of these features next and then explain
+how to publish a package.
+
+### Making Useful Documentation Comments
+
+Accurately documenting your packages will help other users know how and when to
+use them, so it’s worth investing the time to write documentation. In Chapter
+3, we discussed how to comment Rust code using two slashes, `//`. Rust also has
+a particular kind of comment for documentation, known conveniently as a
+*documentation comment*, that will generate HTML documentation. The HTML
+displays the contents of documentation comments for public API items intended
+for programmers interested in knowing how to *use* your crate as opposed to how
+your crate is *implemented*.
+
+Documentation comments use three slashes, `///`, instead of two and support
+Markdown notation for formatting the text. Place documentation comments just
+before the item they’re documenting. Listing 14-1 shows documentation comments
+for an `add_one` function in a crate named `my_crate`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-01/src/lib.rs}}
+```
+
+<span class="caption">Listing 14-1: A documentation comment for a
+function</span>
+
+Here, we give a description of what the `add_one` function does, start a
+section with the heading `Examples`, and then provide code that demonstrates
+how to use the `add_one` function. We can generate the HTML documentation from
+this documentation comment by running `cargo doc`. This command runs the
+`rustdoc` tool distributed with Rust and puts the generated HTML documentation
+in the *target/doc* directory.
+
+For convenience, running `cargo doc --open` will build the HTML for your
+current crate’s documentation (as well as the documentation for all of your
+crate’s dependencies) and open the result in a web browser. Navigate to the
+`add_one` function and you’ll see how the text in the documentation comments is
+rendered, as shown in Figure 14-1:
+
+<img alt="Rendered HTML documentation for the `add_one` function of `my_crate`" src="img/trpl14-01.png" class="center" />
+
+<span class="caption">Figure 14-1: HTML documentation for the `add_one`
+function</span>
+
+#### Commonly Used Sections
+
+We used the `# Examples` Markdown heading in Listing 14-1 to create a section
+in the HTML with the title “Examples.” Here are some other sections that crate
+authors commonly use in their documentation:
+
+* **Panics**: The scenarios in which the function being documented could
+ panic. Callers of the function who don’t want their programs to panic should
+ make sure they don’t call the function in these situations.
+* **Errors**: If the function returns a `Result`, describing the kinds of
+ errors that might occur and what conditions might cause those errors to be
+ returned can be helpful to callers so they can write code to handle the
+ different kinds of errors in different ways.
+* **Safety**: If the function is `unsafe` to call (we discuss unsafety in
+ Chapter 19), there should be a section explaining why the function is unsafe
+ and covering the invariants that the function expects callers to uphold.
+
+Most documentation comments don’t need all of these sections, but this is a
+good checklist to remind you of the aspects of your code users will be
+interested in knowing about.
+
+#### Documentation Comments as Tests
+
+Adding example code blocks in your documentation comments can help demonstrate
+how to use your library, and doing so has an additional bonus: running `cargo
+test` will run the code examples in your documentation as tests! Nothing is
+better than documentation with examples. But nothing is worse than examples
+that don’t work because the code has changed since the documentation was
+written. If we run `cargo test` with the documentation for the `add_one`
+function from Listing 14-1, we will see a section in the test results like this:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/listing-14-01/
+cargo test
+copy just the doc-tests section below
+-->
+
+```text
+ Doc-tests my_crate
+
+running 1 test
+test src/lib.rs - add_one (line 5) ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.27s
+```
+
+Now if we change either the function or the example so the `assert_eq!` in the
+example panics and run `cargo test` again, we’ll see that the doc tests catch
+that the example and the code are out of sync with each other!
+
+#### Commenting Contained Items
+
+The style of doc comment `//!` adds documentation to the item that contains the
+comments rather than to the items following the comments. We typically use
+these doc comments inside the crate root file (*src/lib.rs* by convention) or
+inside a module to document the crate or the module as a whole.
+
+For example, to add documentation that describes the purpose of the `my_crate`
+crate that contains the `add_one` function, we add documentation comments that
+start with `//!` to the beginning of the *src/lib.rs* file, as shown in Listing
+14-2:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-02/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 14-2: Documentation for the `my_crate` crate as a
+whole</span>
+
+Notice there isn’t any code after the last line that begins with `//!`. Because
+we started the comments with `//!` instead of `///`, we’re documenting the item
+that contains this comment rather than an item that follows this comment. In
+this case, that item is the *src/lib.rs* file, which is the crate root. These
+comments describe the entire crate.
+
+When we run `cargo doc --open`, these comments will display on the front
+page of the documentation for `my_crate` above the list of public items in the
+crate, as shown in Figure 14-2:
+
+<img alt="Rendered HTML documentation with a comment for the crate as a whole" src="img/trpl14-02.png" class="center" />
+
+<span class="caption">Figure 14-2: Rendered documentation for `my_crate`,
+including the comment describing the crate as a whole</span>
+
+Documentation comments within items are useful for describing crates and
+modules especially. Use them to explain the overall purpose of the container to
+help your users understand the crate’s organization.
+
+### Exporting a Convenient Public API with `pub use`
+
+The structure of your public API is a major consideration when publishing a
+crate. People who use your crate are less familiar with the structure than you
+are and might have difficulty finding the pieces they want to use if your crate
+has a large module hierarchy.
+
+In Chapter 7, we covered how to make items public using the `pub` keyword, and
+bring items into a scope with the `use` keyword. However, the structure that
+makes sense to you while you’re developing a crate might not be very convenient
+for your users. You might want to organize your structs in a hierarchy
+containing multiple levels, but then people who want to use a type you’ve
+defined deep in the hierarchy might have trouble finding out that type exists.
+They might also be annoyed at having to enter `use`
+`my_crate::some_module::another_module::UsefulType;` rather than `use`
+`my_crate::UsefulType;`.
+
+The good news is that if the structure *isn’t* convenient for others to use
+from another library, you don’t have to rearrange your internal organization:
+instead, you can re-export items to make a public structure that’s different
+from your private structure by using `pub use`. Re-exporting takes a public
+item in one location and makes it public in another location, as if it were
+defined in the other location instead.
+
+For example, say we made a library named `art` for modeling artistic concepts.
+Within this library are two modules: a `kinds` module containing two enums
+named `PrimaryColor` and `SecondaryColor` and a `utils` module containing a
+function named `mix`, as shown in Listing 14-3:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,test_harness
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-03/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 14-3: An `art` library with items organized into
+`kinds` and `utils` modules</span>
+
+Figure 14-3 shows what the front page of the documentation for this crate
+generated by `cargo doc` would look like:
+
+<img alt="Rendered documentation for the `art` crate that lists the `kinds` and `utils` modules" src="img/trpl14-03.png" class="center" />
+
+<span class="caption">Figure 14-3: Front page of the documentation for `art`
+that lists the `kinds` and `utils` modules</span>
+
+Note that the `PrimaryColor` and `SecondaryColor` types aren’t listed on the
+front page, nor is the `mix` function. We have to click `kinds` and `utils` to
+see them.
+
+Another crate that depends on this library would need `use` statements that
+bring the items from `art` into scope, specifying the module structure that’s
+currently defined. Listing 14-4 shows an example of a crate that uses the
+`PrimaryColor` and `mix` items from the `art` crate:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-04/src/main.rs}}
+```
+
+<span class="caption">Listing 14-4: A crate using the `art` crate’s items with
+its internal structure exported</span>
+
+The author of the code in Listing 14-4, which uses the `art` crate, had to
+figure out that `PrimaryColor` is in the `kinds` module and `mix` is in the
+`utils` module. The module structure of the `art` crate is more relevant to
+developers working on the `art` crate than to those using it. The internal
+structure doesn’t contain any useful information for someone trying to
+understand how to use the `art` crate, but rather causes confusion because
+developers who use it have to figure out where to look, and must specify the
+module names in the `use` statements.
+
+To remove the internal organization from the public API, we can modify the
+`art` crate code in Listing 14-3 to add `pub use` statements to re-export the
+items at the top level, as shown in Listing 14-5:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-05/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 14-5: Adding `pub use` statements to re-export
+items</span>
+
+The API documentation that `cargo doc` generates for this crate will now list
+and link re-exports on the front page, as shown in Figure 14-4, making the
+`PrimaryColor` and `SecondaryColor` types and the `mix` function easier to find.
+
+<img alt="Rendered documentation for the `art` crate with the re-exports on the front page" src="img/trpl14-04.png" class="center" />
+
+<span class="caption">Figure 14-4: The front page of the documentation for `art`
+that lists the re-exports</span>
+
+The `art` crate users can still see and use the internal structure from Listing
+14-3 as demonstrated in Listing 14-4, or they can use the more convenient
+structure in Listing 14-5, as shown in Listing 14-6:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 14-6: A program using the re-exported items from
+the `art` crate</span>
+
+In cases where there are many nested modules, re-exporting the types at the top
+level with `pub use` can make a significant difference in the experience of
+people who use the crate. Another common use of `pub use` is to re-export
+definitions of a dependency in the current crate to make that crate's
+definitions part of your crate’s public API.
+
+Creating a useful public API structure is more of an art than a science, and
+you can iterate to find the API that works best for your users. Choosing `pub
+use` gives you flexibility in how you structure your crate internally and
+decouples that internal structure from what you present to your users. Look at
+some of the code of crates you’ve installed to see if their internal structure
+differs from their public API.
+
+### Setting Up a Crates.io Account
+
+Before you can publish any crates, you need to create an account on
+[crates.io](https://crates.io/)<!-- ignore --> and get an API token. To do so,
+visit the home page at [crates.io](https://crates.io/)<!-- ignore --> and log
+in via a GitHub account. (The GitHub account is currently a requirement, but
+the site might support other ways of creating an account in the future.) Once
+you’re logged in, visit your account settings at
+[https://crates.io/me/](https://crates.io/me/)<!-- ignore --> and retrieve your
+API key. Then run the `cargo login` command with your API key, like this:
+
+```console
+$ cargo login abcdefghijklmnopqrstuvwxyz012345
+```
+
+This command will inform Cargo of your API token and store it locally in
+*~/.cargo/credentials*. Note that this token is a *secret*: do not share it
+with anyone else. If you do share it with anyone for any reason, you should
+revoke it and generate a new token on [crates.io](https://crates.io/)<!-- ignore
+-->.
+
+### Adding Metadata to a New Crate
+
+Let’s say you have a crate you want to publish. Before publishing, you’ll need
+to add some metadata in the `[package]` section of the crate’s *Cargo.toml*
+file.
+
+Your crate will need a unique name. While you’re working on a crate locally,
+you can name a crate whatever you’d like. However, crate names on
+[crates.io](https://crates.io/)<!-- ignore --> are allocated on a first-come,
+first-served basis. Once a crate name is taken, no one else can publish a crate
+with that name. Before attempting to publish a crate, search for the name you
+want to use. If the name has been used, you will need to find another name and
+edit the `name` field in the *Cargo.toml* file under the `[package]` section to
+use the new name for publishing, like so:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+[package]
+name = "guessing_game"
+```
+
+Even if you’ve chosen a unique name, when you run `cargo publish` to publish
+the crate at this point, you’ll get a warning and then an error:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/listing-14-01/
+cargo publish
+copy just the relevant lines below
+-->
+
+```console
+$ cargo publish
+ Updating crates.io index
+warning: manifest has no description, license, license-file, documentation, homepage or repository.
+See https://doc.rust-lang.org/cargo/reference/manifest.html#package-metadata for more info.
+--snip--
+error: failed to publish to registry at https://crates.io
+
+Caused by:
+ the remote server responded with an error: missing or empty metadata fields: description, license. Please see https://doc.rust-lang.org/cargo/reference/manifest.html for how to upload metadata
+```
+
+This errors because you’re missing some crucial information: a description and
+license are required so people will know what your crate does and under what
+terms they can use it. In *Cargo.toml*, add a description that's just a
+sentence or two, because it will appear with your crate in search results. For
+the `license` field, you need to give a *license identifier value*. The [Linux
+Foundation’s Software Package Data Exchange (SPDX)][spdx] lists the identifiers
+you can use for this value. For example, to specify that you’ve licensed your
+crate using the MIT License, add the `MIT` identifier:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+[package]
+name = "guessing_game"
+license = "MIT"
+```
+
+If you want to use a license that doesn’t appear in the SPDX, you need to place
+the text of that license in a file, include the file in your project, and then
+use `license-file` to specify the name of that file instead of using the
+`license` key.
+
+Guidance on which license is appropriate for your project is beyond the scope
+of this book. Many people in the Rust community license their projects in the
+same way as Rust by using a dual license of `MIT OR Apache-2.0`. This practice
+demonstrates that you can also specify multiple license identifiers separated
+by `OR` to have multiple licenses for your project.
+
+With a unique name, the version, your description, and a license added, the
+*Cargo.toml* file for a project that is ready to publish might look like this:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+[package]
+name = "guessing_game"
+version = "0.1.0"
+edition = "2021"
+description = "A fun game where you guess what number the computer has chosen."
+license = "MIT OR Apache-2.0"
+
+[dependencies]
+```
+
+[Cargo’s documentation](https://doc.rust-lang.org/cargo/) describes other
+metadata you can specify to ensure others can discover and use your crate more
+easily.
+
+### Publishing to Crates.io
+
+Now that you’ve created an account, saved your API token, chosen a name for
+your crate, and specified the required metadata, you’re ready to publish!
+Publishing a crate uploads a specific version to
+[crates.io](https://crates.io/)<!-- ignore --> for others to use.
+
+Be careful, because a publish is *permanent*. The version can never be
+overwritten, and the code cannot be deleted. One major goal of
+[crates.io](https://crates.io/)<!-- ignore --> is to act as a permanent archive
+of code so that builds of all projects that depend on crates from
+[crates.io](https://crates.io/)<!-- ignore --> will continue to work. Allowing
+version deletions would make fulfilling that goal impossible. However, there is
+no limit to the number of crate versions you can publish.
+
+Run the `cargo publish` command again. It should succeed now:
+
+<!-- manual-regeneration
+go to some valid crate, publish a new version
+cargo publish
+copy just the relevant lines below
+-->
+
+```console
+$ cargo publish
+ Updating crates.io index
+ Packaging guessing_game v0.1.0 (file:///projects/guessing_game)
+ Verifying guessing_game v0.1.0 (file:///projects/guessing_game)
+ Compiling guessing_game v0.1.0
+(file:///projects/guessing_game/target/package/guessing_game-0.1.0)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.19s
+ Uploading guessing_game v0.1.0 (file:///projects/guessing_game)
+```
+
+Congratulations! You’ve now shared your code with the Rust community, and
+anyone can easily add your crate as a dependency of their project.
+
+### Publishing a New Version of an Existing Crate
+
+When you’ve made changes to your crate and are ready to release a new version,
+you change the `version` value specified in your *Cargo.toml* file and
+republish. Use the [Semantic Versioning rules][semver] to decide what an
+appropriate next version number is based on the kinds of changes you’ve made.
+Then run `cargo publish` to upload the new version.
+
+<!-- Old link, do not remove -->
+<a id="removing-versions-from-cratesio-with-cargo-yank"></a>
+
+### Deprecating Versions from Crates.io with `cargo yank`
+
+Although you can’t remove previous versions of a crate, you can prevent any
+future projects from adding them as a new dependency. This is useful when a
+crate version is broken for one reason or another. In such situations, Cargo
+supports *yanking* a crate version.
+
+Yanking a version prevents new projects from depending on that version while
+allowing all existing projects that depend on it to continue. Essentially, a
+yank means that all projects with a *Cargo.lock* will not break, and any future
+*Cargo.lock* files generated will not use the yanked version.
+
+To yank a version of a crate, in the directory of the crate that you’ve
+previously published, run `cargo yank` and specify which version you want to
+yank. For example, if we've published a crate named `guessing_game` version
+1.0.1 and we want to yank it, in the project directory for `guessing_game` we'd
+run:
+
+```console
+$ cargo yank --vers 1.0.1
+ Updating crates.io index
+ Yank guessing_game:1.0.1
+```
+
+By adding `--undo` to the command, you can also undo a yank and allow projects
+to start depending on a version again:
+
+```console
+$ cargo yank --vers 1.0.1 --undo
+ Updating crates.io index
+ Unyank guessing_game_:1.0.1
+```
+
+A yank *does not* delete any code. It cannot, for example, delete accidentally
+uploaded secrets. If that happens, you must reset those secrets immediately.
+
+[spdx]: http://spdx.org/licenses/
+[semver]: http://semver.org/
diff --git a/src/doc/book/src/ch14-03-cargo-workspaces.md b/src/doc/book/src/ch14-03-cargo-workspaces.md
new file mode 100644
index 000000000..942d61b46
--- /dev/null
+++ b/src/doc/book/src/ch14-03-cargo-workspaces.md
@@ -0,0 +1,369 @@
+## Cargo Workspaces
+
+In Chapter 12, we built a package that included a binary crate and a library
+crate. As your project develops, you might find that the library crate
+continues to get bigger and you want to split your package further into
+multiple library crates. Cargo offers a feature called *workspaces* that can
+help manage multiple related packages that are developed in tandem.
+
+### Creating a Workspace
+
+A *workspace* is a set of packages that share the same *Cargo.lock* and output
+directory. Let’s make a project using a workspace—we’ll use trivial code so we
+can concentrate on the structure of the workspace. There are multiple ways to
+structure a workspace, so we'll just show one common way. We’ll have a
+workspace containing a binary and two libraries. The binary, which will provide
+the main functionality, will depend on the two libraries. One library will
+provide an `add_one` function, and a second library an `add_two` function.
+These three crates will be part of the same workspace. We’ll start by creating
+a new directory for the workspace:
+
+```console
+$ mkdir add
+$ cd add
+```
+
+Next, in the *add* directory, we create the *Cargo.toml* file that will
+configure the entire workspace. This file won’t have a `[package]` section.
+Instead, it will start with a `[workspace]` section that will allow us to add
+members to the workspace by specifying the path to the package with our binary
+crate; in this case, that path is *adder*:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch14-more-about-cargo/no-listing-01-workspace-with-adder-crate/add/Cargo.toml}}
+```
+
+Next, we’ll create the `adder` binary crate by running `cargo new` within the
+*add* directory:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/output-only-01-adder-crate/add
+rm -rf adder
+cargo new adder
+copy output below
+-->
+
+```console
+$ cargo new adder
+ Created binary (application) `adder` package
+```
+
+At this point, we can build the workspace by running `cargo build`. The files
+in your *add* directory should look like this:
+
+```text
+├── Cargo.lock
+├── Cargo.toml
+├── adder
+│ ├── Cargo.toml
+│ └── src
+│ └── main.rs
+└── target
+```
+
+The workspace has one *target* directory at the top level that the compiled
+artifacts will be placed into; the `adder` package doesn’t have its own
+*target* directory. Even if we were to run `cargo build` from inside the
+*adder* directory, the compiled artifacts would still end up in *add/target*
+rather than *add/adder/target*. Cargo structures the *target* directory in a
+workspace like this because the crates in a workspace are meant to depend on
+each other. If each crate had its own *target* directory, each crate would have
+to recompile each of the other crates in the workspace to place the artifacts
+in its own *target* directory. By sharing one *target* directory, the crates
+can avoid unnecessary rebuilding.
+
+### Creating the Second Package in the Workspace
+
+Next, let’s create another member package in the workspace and call it
+`add_one`. Change the top-level *Cargo.toml* to specify the *add_one* path in
+the `members` list:
+
+<span class="filename">Filename: Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/Cargo.toml}}
+```
+
+Then generate a new library crate named `add_one`:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/output-only-02-add-one/add
+rm -rf add_one
+cargo new add_one --lib
+copy output below
+-->
+
+```console
+$ cargo new add_one --lib
+ Created library `add_one` package
+```
+
+Your *add* directory should now have these directories and files:
+
+```text
+├── Cargo.lock
+├── Cargo.toml
+├── add_one
+│ ├── Cargo.toml
+│ └── src
+│ └── lib.rs
+├── adder
+│ ├── Cargo.toml
+│ └── src
+│ └── main.rs
+└── target
+```
+
+In the *add_one/src/lib.rs* file, let’s add an `add_one` function:
+
+<span class="filename">Filename: add_one/src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/add_one/src/lib.rs}}
+```
+
+Now we can have the `adder` package with our binary depend on the `add_one`
+package that has our library. First, we’ll need to add a path dependency on
+`add_one` to *adder/Cargo.toml*.
+
+<span class="filename">Filename: adder/Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch14-more-about-cargo/no-listing-02-workspace-with-two-crates/add/adder/Cargo.toml:6:7}}
+```
+
+Cargo doesn’t assume that crates in a workspace will depend on each other, so
+we need to be explicit about the dependency relationships.
+
+Next, let’s use the `add_one` function (from the `add_one` crate) in the
+`adder` crate. Open the *adder/src/main.rs* file and add a `use` line at the
+top to bring the new `add_one` library crate into scope. Then change the `main`
+function to call the `add_one` function, as in Listing 14-7.
+
+<span class="filename">Filename: adder/src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch14-more-about-cargo/listing-14-07/add/adder/src/main.rs}}
+```
+
+<span class="caption">Listing 14-7: Using the `add_one` library crate from the
+ `adder` crate</span>
+
+Let’s build the workspace by running `cargo build` in the top-level *add*
+directory!
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/listing-14-07/add
+cargo build
+copy output below; the output updating script doesn't handle subdirectories in paths properly
+-->
+
+```console
+$ cargo build
+ Compiling add_one v0.1.0 (file:///projects/add/add_one)
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.68s
+```
+
+To run the binary crate from the *add* directory, we can specify which
+package in the workspace we want to run by using the `-p` argument and the
+package name with `cargo run`:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/listing-14-07/add
+cargo run -p adder
+copy output below; the output updating script doesn't handle subdirectories in paths properly
+-->
+
+```console
+$ cargo run -p adder
+ Finished dev [unoptimized + debuginfo] target(s) in 0.0s
+ Running `target/debug/adder`
+Hello, world! 10 plus one is 11!
+```
+
+This runs the code in *adder/src/main.rs*, which depends on the `add_one` crate.
+
+#### Depending on an External Package in a Workspace
+
+Notice that the workspace has only one *Cargo.lock* file at the top level,
+rather than having a *Cargo.lock* in each crate’s directory. This ensures that
+all crates are using the same version of all dependencies. If we add the `rand`
+package to the *adder/Cargo.toml* and *add_one/Cargo.toml* files, Cargo will
+resolve both of those to one version of `rand` and record that in the one
+*Cargo.lock*. Making all crates in the workspace use the same dependencies
+means the crates will always be compatible with each other. Let’s add the
+`rand` crate to the `[dependencies]` section in the *add_one/Cargo.toml* file
+so we can use the `rand` crate in the `add_one` crate:
+
+<!-- When updating the version of `rand` used, also update the version of
+`rand` used in these files so they all match:
+* ch02-00-guessing-game-tutorial.md
+* ch07-04-bringing-paths-into-scope-with-the-use-keyword.md
+-->
+
+<span class="filename">Filename: add_one/Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add/add_one/Cargo.toml:6:7}}
+```
+
+We can now add `use rand;` to the *add_one/src/lib.rs* file, and building the
+whole workspace by running `cargo build` in the *add* directory will bring in
+and compile the `rand` crate. We will get one warning because we aren’t
+referring to the `rand` we brought into scope:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/no-listing-03-workspace-with-external-dependency/add
+cargo build
+copy output below; the output updating script doesn't handle subdirectories in paths properly
+-->
+
+```console
+$ cargo build
+ Updating crates.io index
+ Downloaded rand v0.8.3
+ --snip--
+ Compiling rand v0.8.3
+ Compiling add_one v0.1.0 (file:///projects/add/add_one)
+warning: unused import: `rand`
+ --> add_one/src/lib.rs:1:5
+ |
+1 | use rand;
+ | ^^^^
+ |
+ = note: `#[warn(unused_imports)]` on by default
+
+warning: 1 warning emitted
+
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+ Finished dev [unoptimized + debuginfo] target(s) in 10.18s
+```
+
+The top-level *Cargo.lock* now contains information about the dependency of
+`add_one` on `rand`. However, even though `rand` is used somewhere in the
+workspace, we can’t use it in other crates in the workspace unless we add
+`rand` to their *Cargo.toml* files as well. For example, if we add `use rand;`
+to the *adder/src/main.rs* file for the `adder` package, we’ll get an error:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/output-only-03-use-rand/add
+cargo build
+copy output below; the output updating script doesn't handle subdirectories in paths properly
+-->
+
+```console
+$ cargo build
+ --snip--
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+error[E0432]: unresolved import `rand`
+ --> adder/src/main.rs:2:5
+ |
+2 | use rand;
+ | ^^^^ no external crate `rand`
+```
+
+To fix this, edit the *Cargo.toml* file for the `adder` package and indicate
+that `rand` is a dependency for it as well. Building the `adder` package will
+add `rand` to the list of dependencies for `adder` in *Cargo.lock*, but no
+additional copies of `rand` will be downloaded. Cargo has ensured that every
+crate in every package in the workspace using the `rand` package will be using
+the same version, saving us space and ensuring that the crates in the workspace
+will be compatible with each other.
+
+#### Adding a Test to a Workspace
+
+For another enhancement, let’s add a test of the `add_one::add_one` function
+within the `add_one` crate:
+
+<span class="filename">Filename: add_one/src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add/add_one/src/lib.rs}}
+```
+
+Now run `cargo test` in the top-level *add* directory. Running `cargo test` in
+a workspace structured like this one will run the tests for all the crates in
+the workspace:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add
+cargo test
+copy output below; the output updating script doesn't handle subdirectories in
+paths properly
+-->
+
+```console
+$ cargo test
+ Compiling add_one v0.1.0 (file:///projects/add/add_one)
+ Compiling adder v0.1.0 (file:///projects/add/adder)
+ Finished test [unoptimized + debuginfo] target(s) in 0.27s
+ Running target/debug/deps/add_one-f0253159197f7841
+
+running 1 test
+test tests::it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Running target/debug/deps/adder-49979ff40686fa8e
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests add_one
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+The first section of the output shows that the `it_works` test in the `add_one`
+crate passed. The next section shows that zero tests were found in the `adder`
+crate, and then the last section shows zero documentation tests were found in
+the `add_one` crate.
+
+We can also run tests for one particular crate in a workspace from the
+top-level directory by using the `-p` flag and specifying the name of the crate
+we want to test:
+
+<!-- manual-regeneration
+cd listings/ch14-more-about-cargo/no-listing-04-workspace-with-tests/add
+cargo test -p add_one
+copy output below; the output updating script doesn't handle subdirectories in paths properly
+-->
+
+```console
+$ cargo test -p add_one
+ Finished test [unoptimized + debuginfo] target(s) in 0.00s
+ Running target/debug/deps/add_one-b3235fea9a156f74
+
+running 1 test
+test tests::it_works ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+
+ Doc-tests add_one
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+This output shows `cargo test` only ran the tests for the `add_one` crate and
+didn’t run the `adder` crate tests.
+
+If you publish the crates in the workspace to [crates.io](https://crates.io/),
+each crate in the workspace will need to be published separately. Like `cargo
+test`, we can publish a particular crate in our workspace by using the `-p`
+flag and specifying the name of the crate we want to publish.
+
+For additional practice, add an `add_two` crate to this workspace in a similar
+way as the `add_one` crate!
+
+As your project grows, consider using a workspace: it’s easier to understand
+smaller, individual components than one big blob of code. Furthermore, keeping
+the crates in a workspace can make coordination between crates easier if they
+are often changed at the same time.
diff --git a/src/doc/book/src/ch14-04-installing-binaries.md b/src/doc/book/src/ch14-04-installing-binaries.md
new file mode 100644
index 000000000..425cf9c37
--- /dev/null
+++ b/src/doc/book/src/ch14-04-installing-binaries.md
@@ -0,0 +1,47 @@
+<!-- Old link, do not remove -->
+<a id="installing-binaries-from-cratesio-with-cargo-install"></a>
+
+## Installing Binaries with `cargo install`
+
+The `cargo install` command allows you to install and use binary crates
+locally. This isn’t intended to replace system packages; it’s meant to be a
+convenient way for Rust developers to install tools that others have shared on
+[crates.io](https://crates.io/)<!-- ignore -->. Note that you can only install
+packages that have binary targets. A *binary target* is the runnable program
+that is created if the crate has a *src/main.rs* file or another file specified
+as a binary, as opposed to a library target that isn’t runnable on its own but
+is suitable for including within other programs. Usually, crates have
+information in the *README* file about whether a crate is a library, has a
+binary target, or both.
+
+All binaries installed with `cargo install` are stored in the installation
+root’s *bin* folder. If you installed Rust using *rustup.rs* and don’t have any
+custom configurations, this directory will be *$HOME/.cargo/bin*. Ensure that
+directory is in your `$PATH` to be able to run programs you’ve installed with
+`cargo install`.
+
+For example, in Chapter 12 we mentioned that there’s a Rust implementation of
+the `grep` tool called `ripgrep` for searching files. To install `ripgrep`, we
+can run the following:
+
+<!-- manual-regeneration
+cargo install something you don't have, copy relevant output below
+-->
+
+```console
+$ cargo install ripgrep
+ Updating crates.io index
+ Downloaded ripgrep v11.0.2
+ Downloaded 1 crate (243.3 KB) in 0.88s
+ Installing ripgrep v11.0.2
+--snip--
+ Compiling ripgrep v11.0.2
+ Finished release [optimized + debuginfo] target(s) in 3m 10s
+ Installing ~/.cargo/bin/rg
+ Installed package `ripgrep v11.0.2` (executable `rg`)
+```
+
+The second-to-last line of the output shows the location and the name of the
+installed binary, which in the case of `ripgrep` is `rg`. As long as the
+installation directory is in your `$PATH`, as mentioned previously, you can
+then run `rg --help` and start using a faster, rustier tool for searching files!
diff --git a/src/doc/book/src/ch14-05-extending-cargo.md b/src/doc/book/src/ch14-05-extending-cargo.md
new file mode 100644
index 000000000..bd228714a
--- /dev/null
+++ b/src/doc/book/src/ch14-05-extending-cargo.md
@@ -0,0 +1,17 @@
+## Extending Cargo with Custom Commands
+
+Cargo is designed so you can extend it with new subcommands without having to
+modify Cargo. If a binary in your `$PATH` is named `cargo-something`, you can
+run it as if it was a Cargo subcommand by running `cargo something`. Custom
+commands like this are also listed when you run `cargo --list`. Being able to
+use `cargo install` to install extensions and then run them just like the
+built-in Cargo tools is a super convenient benefit of Cargo’s design!
+
+## Summary
+
+Sharing code with Cargo and [crates.io](https://crates.io/)<!-- ignore --> is
+part of what makes the Rust ecosystem useful for many different tasks. Rust’s
+standard library is small and stable, but crates are easy to share, use, and
+improve on a timeline different from that of the language. Don’t be shy about
+sharing code that’s useful to you on [crates.io](https://crates.io/)<!-- ignore
+-->; it’s likely that it will be useful to someone else as well!
diff --git a/src/doc/book/src/ch15-00-smart-pointers.md b/src/doc/book/src/ch15-00-smart-pointers.md
new file mode 100644
index 000000000..7552dd5d1
--- /dev/null
+++ b/src/doc/book/src/ch15-00-smart-pointers.md
@@ -0,0 +1,53 @@
+# Smart Pointers
+
+A *pointer* is a general concept for a variable that contains an address in
+memory. This address refers to, or “points at,” some other data. The most
+common kind of pointer in Rust is a reference, which you learned about in
+Chapter 4. References are indicated by the `&` symbol and borrow the value they
+point to. They don’t have any special capabilities other than referring to
+data, and have no overhead.
+
+*Smart pointers*, on the other hand, are data structures that act like a
+pointer but also have additional metadata and capabilities. The concept of
+smart pointers isn’t unique to Rust: smart pointers originated in C++ and exist
+in other languages as well. Rust has a variety of smart pointers defined in the
+standard library that provide functionality beyond that provided by references.
+To explore the general concept, we'll look at a couple of different examples of
+smart pointers, including a *reference counting* smart pointer type. This
+pointer enables you to allow data to have multiple owners by keeping track of
+the number of owners and, when no owners remain, cleaning up the data.
+
+Rust, with its concept of ownership and borrowing, has an additional difference
+between references and smart pointers: while references only borrow data, in
+many cases, smart pointers *own* the data they point to.
+
+Though we didn't call them as such at the time, we’ve already encountered a few
+smart pointers in this book, including `String` and `Vec<T>` in Chapter 8. Both
+these types count as smart pointers because they own some memory and allow you
+to manipulate it. They also have metadata and extra capabilities or guarantees.
+`String`, for example, stores its capacity as metadata and has the extra
+ability to ensure its data will always be valid UTF-8.
+
+Smart pointers are usually implemented using structs. Unlike an ordinary
+struct, smart pointers implement the `Deref` and `Drop` traits. The `Deref`
+trait allows an instance of the smart pointer struct to behave like a reference
+so you can write your code to work with either references or smart pointers.
+The `Drop` trait allows you to customize the code that's run when an instance
+of the smart pointer goes out of scope. In this chapter, we’ll discuss both
+traits and demonstrate why they’re important to smart pointers.
+
+Given that the smart pointer pattern is a general design pattern used
+frequently in Rust, this chapter won’t cover every existing smart pointer. Many
+libraries have their own smart pointers, and you can even write your own. We’ll
+cover the most common smart pointers in the standard library:
+
+* `Box<T>` for allocating values on the heap
+* `Rc<T>`, a reference counting type that enables multiple ownership
+* `Ref<T>` and `RefMut<T>`, accessed through `RefCell<T>`, a type that enforces
+ the borrowing rules at runtime instead of compile time
+
+In addition, we’ll cover the *interior mutability* pattern where an immutable
+type exposes an API for mutating an interior value. We’ll also discuss
+*reference cycles*: how they can leak memory and how to prevent them.
+
+Let’s dive in!
diff --git a/src/doc/book/src/ch15-01-box.md b/src/doc/book/src/ch15-01-box.md
new file mode 100644
index 000000000..030a7842d
--- /dev/null
+++ b/src/doc/book/src/ch15-01-box.md
@@ -0,0 +1,255 @@
+## Using `Box<T>` to Point to Data on the Heap
+
+The most straightforward smart pointer is a *box*, whose type is written
+`Box<T>`. Boxes allow you to store data on the heap rather than the stack. What
+remains on the stack is the pointer to the heap data. Refer to Chapter 4 to
+review the difference between the stack and the heap.
+
+Boxes don’t have performance overhead, other than storing their data on the
+heap instead of on the stack. But they don’t have many extra capabilities
+either. You’ll use them most often in these situations:
+
+* When you have a type whose size can’t be known at compile time and you want
+ to use a value of that type in a context that requires an exact size
+* When you have a large amount of data and you want to transfer ownership but
+ ensure the data won’t be copied when you do so
+* When you want to own a value and you care only that it’s a type that
+ implements a particular trait rather than being of a specific type
+
+We’ll demonstrate the first situation in the [“Enabling Recursive Types with
+Boxes”](#enabling-recursive-types-with-boxes)<!-- ignore --> section. In the
+second case, transferring ownership of a large amount of data can take a long
+time because the data is copied around on the stack. To improve performance in
+this situation, we can store the large amount of data on the heap in a box.
+Then, only the small amount of pointer data is copied around on the stack,
+while the data it references stays in one place on the heap. The third case is
+known as a *trait object*, and Chapter 17 devotes an entire section, [“Using
+Trait Objects That Allow for Values of Different Types,”][trait-objects]<!--
+ignore --> just to that topic. So what you learn here you’ll apply again in
+Chapter 17!
+
+### Using a `Box<T>` to Store Data on the Heap
+
+Before we discuss the heap storage use case for `Box<T>`, we’ll cover the
+syntax and how to interact with values stored within a `Box<T>`.
+
+Listing 15-1 shows how to use a box to store an `i32` value on the heap:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-01/src/main.rs}}
+```
+
+<span class="caption">Listing 15-1: Storing an `i32` value on the heap using a
+box</span>
+
+We define the variable `b` to have the value of a `Box` that points to the
+value `5`, which is allocated on the heap. This program will print `b = 5`; in
+this case, we can access the data in the box similar to how we would if this
+data were on the stack. Just like any owned value, when a box goes out of
+scope, as `b` does at the end of `main`, it will be deallocated. The
+deallocation happens both for the box (stored on the stack) and the data it
+points to (stored on the heap).
+
+Putting a single value on the heap isn’t very useful, so you won’t use boxes by
+themselves in this way very often. Having values like a single `i32` on the
+stack, where they’re stored by default, is more appropriate in the majority of
+situations. Let’s look at a case where boxes allow us to define types that we
+wouldn’t be allowed to if we didn’t have boxes.
+
+### Enabling Recursive Types with Boxes
+
+A value of *recursive type* can have another value of the same type as part of
+itself. Recursive types pose an issue because at compile time Rust needs to
+know how much space a type takes up. However, the nesting of values of
+recursive types could theoretically continue infinitely, so Rust can’t know how
+much space the value needs. Because boxes have a known size, we can enable
+recursive types by inserting a box in the recursive type definition.
+
+As an example of a recursive type, let’s explore the *cons list*. This is a data
+type commonly found in functional programming languages. The cons list type
+we’ll define is straightforward except for the recursion; therefore, the
+concepts in the example we’ll work with will be useful any time you get into
+more complex situations involving recursive types.
+
+#### More Information About the Cons List
+
+A *cons list* is a data structure that comes from the Lisp programming language
+and its dialects and is made up of nested pairs, and is the Lisp version of a
+linked list. Its name comes from the `cons` function (short for “construct
+function”) in Lisp that constructs a new pair from its two arguments. By
+calling `cons` on a pair consisting of a value and another pair, we can
+construct cons lists made up of recursive pairs.
+
+For example, here's a pseudocode representation of a cons list containing the
+list 1, 2, 3 with each pair in parentheses:
+
+```text
+(1, (2, (3, Nil)))
+```
+
+Each item in a cons list contains two elements: the value of the current item
+and the next item. The last item in the list contains only a value called `Nil`
+without a next item. A cons list is produced by recursively calling the `cons`
+function. The canonical name to denote the base case of the recursion is `Nil`.
+Note that this is not the same as the “null” or “nil” concept in Chapter 6,
+which is an invalid or absent value.
+
+The cons list isn’t a commonly used data structure in Rust. Most of the time
+when you have a list of items in Rust, `Vec<T>` is a better choice to use.
+Other, more complex recursive data types *are* useful in various situations,
+but by starting with the cons list in this chapter, we can explore how boxes
+let us define a recursive data type without much distraction.
+
+Listing 15-2 contains an enum definition for a cons list. Note that this code
+won’t compile yet because the `List` type doesn’t have a known size, which
+we’ll demonstrate.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-2: The first attempt at defining an enum to
+represent a cons list data structure of `i32` values</span>
+
+> Note: We’re implementing a cons list that holds only `i32` values for the
+> purposes of this example. We could have implemented it using generics, as we
+> discussed in Chapter 10, to define a cons list type that could store values of
+> any type.
+
+Using the `List` type to store the list `1, 2, 3` would look like the code in
+Listing 15-3:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-3: Using the `List` enum to store the list `1,
+2, 3`</span>
+
+The first `Cons` value holds `1` and another `List` value. This `List` value is
+another `Cons` value that holds `2` and another `List` value. This `List` value
+is one more `Cons` value that holds `3` and a `List` value, which is finally
+`Nil`, the non-recursive variant that signals the end of the list.
+
+If we try to compile the code in Listing 15-3, we get the error shown in
+Listing 15-4:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-03/output.txt}}
+```
+
+<span class="caption">Listing 15-4: The error we get when attempting to define
+a recursive enum</span>
+
+The error shows this type “has infinite size.” The reason is that we’ve defined
+`List` with a variant that is recursive: it holds another value of itself
+directly. As a result, Rust can’t figure out how much space it needs to store a
+`List` value. Let’s break down why we get this error. First, we'll look at how
+Rust decides how much space it needs to store a value of a non-recursive type.
+
+#### Computing the Size of a Non-Recursive Type
+
+Recall the `Message` enum we defined in Listing 6-2 when we discussed enum
+definitions in Chapter 6:
+
+```rust
+{{#rustdoc_include ../listings/ch06-enums-and-pattern-matching/listing-06-02/src/main.rs:here}}
+```
+
+To determine how much space to allocate for a `Message` value, Rust goes
+through each of the variants to see which variant needs the most space. Rust
+sees that `Message::Quit` doesn’t need any space, `Message::Move` needs enough
+space to store two `i32` values, and so forth. Because only one variant will be
+used, the most space a `Message` value will need is the space it would take to
+store the largest of its variants.
+
+Contrast this with what happens when Rust tries to determine how much space a
+recursive type like the `List` enum in Listing 15-2 needs. The compiler starts
+by looking at the `Cons` variant, which holds a value of type `i32` and a value
+of type `List`. Therefore, `Cons` needs an amount of space equal to the size of
+an `i32` plus the size of a `List`. To figure out how much memory the `List`
+type needs, the compiler looks at the variants, starting with the `Cons`
+variant. The `Cons` variant holds a value of type `i32` and a value of type
+`List`, and this process continues infinitely, as shown in Figure 15-1.
+
+<img alt="An infinite Cons list" src="img/trpl15-01.svg" class="center" style="width: 50%;" />
+
+<span class="caption">Figure 15-1: An infinite `List` consisting of infinite
+`Cons` variants</span>
+
+#### Using `Box<T>` to Get a Recursive Type with a Known Size
+
+Because Rust can’t figure out how much space to allocate for recursively
+defined types, the compiler gives an error with this helpful suggestion:
+
+<!-- manual-regeneration
+after doing automatic regeneration, look at listings/ch15-smart-pointers/listing-15-03/output.txt and copy the relevant line
+-->
+
+```text
+help: insert some indirection (e.g., a `Box`, `Rc`, or `&`) to make `List` representable
+ |
+2 | Cons(i32, Box<List>),
+ | ^^^^ ^
+```
+
+In this suggestion, “indirection” means that instead of storing a value
+directly, we should change the data structure to store the value indirectly by
+storing a pointer to the value instead.
+
+Because a `Box<T>` is a pointer, Rust always knows how much space a `Box<T>`
+needs: a pointer’s size doesn’t change based on the amount of data it’s
+pointing to. This means we can put a `Box<T>` inside the `Cons` variant instead
+of another `List` value directly. The `Box<T>` will point to the next `List`
+value that will be on the heap rather than inside the `Cons` variant.
+Conceptually, we still have a list, created with lists holding other lists, but
+this implementation is now more like placing the items next to one another
+rather than inside one another.
+
+We can change the definition of the `List` enum in Listing 15-2 and the usage
+of the `List` in Listing 15-3 to the code in Listing 15-5, which will compile:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-05/src/main.rs}}
+```
+
+<span class="caption">Listing 15-5: Definition of `List` that uses `Box<T>` in
+order to have a known size</span>
+
+The `Cons` variant needs the size of an `i32` plus the space to store the
+box’s pointer data. The `Nil` variant stores no values, so it needs less space
+than the `Cons` variant. We now know that any `List` value will take up the
+size of an `i32` plus the size of a box’s pointer data. By using a box, we’ve
+broken the infinite, recursive chain, so the compiler can figure out the size
+it needs to store a `List` value. Figure 15-2 shows what the `Cons` variant
+looks like now.
+
+<img alt="A finite Cons list" src="img/trpl15-02.svg" class="center" />
+
+<span class="caption">Figure 15-2: A `List` that is not infinitely sized
+because `Cons` holds a `Box`</span>
+
+Boxes provide only the indirection and heap allocation; they don’t have any
+other special capabilities, like those we’ll see with the other smart pointer
+types. They also don’t have the performance overhead that these special
+capabilities incur, so they can be useful in cases like the cons list where the
+indirection is the only feature we need. We’ll look at more use cases for boxes
+in Chapter 17, too.
+
+The `Box<T>` type is a smart pointer because it implements the `Deref` trait,
+which allows `Box<T>` values to be treated like references. When a `Box<T>`
+value goes out of scope, the heap data that the box is pointing to is cleaned
+up as well because of the `Drop` trait implementation. These two traits will be
+even more important to the functionality provided by the other smart pointer
+types we’ll discuss in the rest of this chapter. Let’s explore these two traits
+in more detail.
+
+[trait-objects]: ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types
diff --git a/src/doc/book/src/ch15-02-deref.md b/src/doc/book/src/ch15-02-deref.md
new file mode 100644
index 000000000..ba0b8990f
--- /dev/null
+++ b/src/doc/book/src/ch15-02-deref.md
@@ -0,0 +1,298 @@
+## Treating Smart Pointers Like Regular References with the `Deref` Trait
+
+Implementing the `Deref` trait allows you to customize the behavior of the
+*dereference operator* `*` (not to be confused with the multiplication or glob
+operator). By implementing `Deref` in such a way that a smart pointer can be
+treated like a regular reference, you can write code that operates on
+references and use that code with smart pointers too.
+
+Let’s first look at how the dereference operator works with regular references.
+Then we’ll try to define a custom type that behaves like `Box<T>`, and see why
+the dereference operator doesn’t work like a reference on our newly defined
+type. We’ll explore how implementing the `Deref` trait makes it possible for
+smart pointers to work in ways similar to references. Then we’ll look at
+Rust’s *deref coercion* feature and how it lets us work with either references
+or smart pointers.
+
+> Note: there’s one big difference between the `MyBox<T>` type we’re about to
+> build and the real `Box<T>`: our version will not store its data on the heap.
+> We are focusing this example on `Deref`, so where the data is actually stored
+> is less important than the pointer-like behavior.
+
+<!-- Old link, do not remove -->
+<a id="following-the-pointer-to-the-value-with-the-dereference-operator"></a>
+
+### Following the Pointer to the Value
+
+A regular reference is a type of pointer, and one way to think of a pointer is
+as an arrow to a value stored somewhere else. In Listing 15-6, we create a
+reference to an `i32` value and then use the dereference operator to follow the
+reference to the value:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-06/src/main.rs}}
+```
+
+<span class="caption">Listing 15-6: Using the dereference operator to follow a
+reference to an `i32` value</span>
+
+The variable `x` holds an `i32` value `5`. We set `y` equal to a reference to
+`x`. We can assert that `x` is equal to `5`. However, if we want to make an
+assertion about the value in `y`, we have to use `*y` to follow the reference
+to the value it’s pointing to (hence *dereference*) so the compiler can compare
+the actual value. Once we dereference `y`, we have access to the integer value
+`y` is pointing to that we can compare with `5`.
+
+If we tried to write `assert_eq!(5, y);` instead, we would get this compilation
+error:
+
+```console
+{{#include ../listings/ch15-smart-pointers/output-only-01-comparing-to-reference/output.txt}}
+```
+
+Comparing a number and a reference to a number isn’t allowed because they’re
+different types. We must use the dereference operator to follow the reference
+to the value it’s pointing to.
+
+### Using `Box<T>` Like a Reference
+
+We can rewrite the code in Listing 15-6 to use a `Box<T>` instead of a
+reference; the dereference operator used on the `Box<T>` in Listing 15-7
+functions in the same way as the dereference operator used on the reference in
+Listing 15-6:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-07/src/main.rs}}
+```
+
+<span class="caption">Listing 15-7: Using the dereference operator on a
+`Box<i32>`</span>
+
+The main difference between Listing 15-7 and Listing 15-6 is that here we set
+`y` to be an instance of a box pointing to a copied value of `x` rather than a
+reference pointing to the value of `x`. In the last assertion, we can use the
+dereference operator to follow the box’s pointer in the same way that we did
+when `y` was a reference. Next, we’ll explore what is special about `Box<T>`
+that enables us to use the dereference operator by defining our own box type.
+
+### Defining Our Own Smart Pointer
+
+Let’s build a smart pointer similar to the `Box<T>` type provided by the
+standard library to experience how smart pointers behave differently from
+references by default. Then we’ll look at how to add the ability to use the
+dereference operator.
+
+The `Box<T>` type is ultimately defined as a tuple struct with one element, so
+Listing 15-8 defines a `MyBox<T>` type in the same way. We’ll also define a
+`new` function to match the `new` function defined on `Box<T>`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-8: Defining a `MyBox<T>` type</span>
+
+We define a struct named `MyBox` and declare a generic parameter `T`, because
+we want our type to hold values of any type. The `MyBox` type is a tuple struct
+with one element of type `T`. The `MyBox::new` function takes one parameter of
+type `T` and returns a `MyBox` instance that holds the value passed in.
+
+Let’s try adding the `main` function in Listing 15-7 to Listing 15-8 and
+changing it to use the `MyBox<T>` type we’ve defined instead of `Box<T>`. The
+code in Listing 15-9 won’t compile because Rust doesn’t know how to dereference
+`MyBox`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-9: Attempting to use `MyBox<T>` in the same
+way we used references and `Box<T>`</span>
+
+Here’s the resulting compilation error:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-09/output.txt}}
+```
+
+Our `MyBox<T>` type can’t be dereferenced because we haven’t implemented that
+ability on our type. To enable dereferencing with the `*` operator, we
+implement the `Deref` trait.
+
+### Treating a Type Like a Reference by Implementing the `Deref` Trait
+
+As discussed in the [“Implementing a Trait on a Type”][impl-trait]<!-- ignore
+--> section of Chapter 10, to implement a trait, we need to provide
+implementations for the trait’s required methods. The `Deref` trait, provided
+by the standard library, requires us to implement one method named `deref` that
+borrows `self` and returns a reference to the inner data. Listing 15-10
+contains an implementation of `Deref` to add to the definition of `MyBox`:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-10: Implementing `Deref` on `MyBox<T>`</span>
+
+The `type Target = T;` syntax defines an associated type for the `Deref`
+trait to use. Associated types are a slightly different way of declaring a
+generic parameter, but you don’t need to worry about them for now; we’ll cover
+them in more detail in Chapter 19.
+
+We fill in the body of the `deref` method with `&self.0` so `deref` returns a
+reference to the value we want to access with the `*` operator; recall from the
+[“Using Tuple Structs without Named Fields to Create Different
+Types”][tuple-structs]<!-- ignore --> section of Chapter 5 that `.0` accesses
+the first value in a tuple struct. The `main` function in Listing 15-9 that
+calls `*` on the `MyBox<T>` value now compiles, and the assertions pass!
+
+Without the `Deref` trait, the compiler can only dereference `&` references.
+The `deref` method gives the compiler the ability to take a value of any type
+that implements `Deref` and call the `deref` method to get a `&` reference that
+it knows how to dereference.
+
+When we entered `*y` in Listing 15-9, behind the scenes Rust actually ran this
+code:
+
+```rust,ignore
+*(y.deref())
+```
+
+Rust substitutes the `*` operator with a call to the `deref` method and then a
+plain dereference so we don’t have to think about whether or not we need to
+call the `deref` method. This Rust feature lets us write code that functions
+identically whether we have a regular reference or a type that implements
+`Deref`.
+
+The reason the `deref` method returns a reference to a value, and that the
+plain dereference outside the parentheses in `*(y.deref())` is still necessary,
+is to do with the ownership system. If the `deref` method returned the value
+directly instead of a reference to the value, the value would be moved out of
+`self`. We don’t want to take ownership of the inner value inside `MyBox<T>` in
+this case or in most cases where we use the dereference operator.
+
+Note that the `*` operator is replaced with a call to the `deref` method and
+then a call to the `*` operator just once, each time we use a `*` in our code.
+Because the substitution of the `*` operator does not recurse infinitely, we
+end up with data of type `i32`, which matches the `5` in `assert_eq!` in
+Listing 15-9.
+
+### Implicit Deref Coercions with Functions and Methods
+
+*Deref coercion* converts a reference to a type that implements the `Deref`
+trait into a reference to another type. For example, deref coercion can convert
+`&String` to `&str` because `String` implements the `Deref` trait such that it
+returns `&str`. Deref coercion is a convenience Rust performs on arguments to
+functions and methods, and works only on types that implement the `Deref`
+trait. It happens automatically when we pass a reference to a particular type’s
+value as an argument to a function or method that doesn’t match the parameter
+type in the function or method definition. A sequence of calls to the `deref`
+method converts the type we provided into the type the parameter needs.
+
+Deref coercion was added to Rust so that programmers writing function and
+method calls don’t need to add as many explicit references and dereferences
+with `&` and `*`. The deref coercion feature also lets us write more code that
+can work for either references or smart pointers.
+
+To see deref coercion in action, let’s use the `MyBox<T>` type we defined in
+Listing 15-8 as well as the implementation of `Deref` that we added in Listing
+15-10. Listing 15-11 shows the definition of a function that has a string slice
+parameter:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-11: A `hello` function that has the parameter
+`name` of type `&str`</span>
+
+We can call the `hello` function with a string slice as an argument, such as
+`hello("Rust");` for example. Deref coercion makes it possible to call `hello`
+with a reference to a value of type `MyBox<String>`, as shown in Listing 15-12:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-12/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-12: Calling `hello` with a reference to a
+`MyBox<String>` value, which works because of deref coercion</span>
+
+Here we’re calling the `hello` function with the argument `&m`, which is a
+reference to a `MyBox<String>` value. Because we implemented the `Deref` trait
+on `MyBox<T>` in Listing 15-10, Rust can turn `&MyBox<String>` into `&String`
+by calling `deref`. The standard library provides an implementation of `Deref`
+on `String` that returns a string slice, and this is in the API documentation
+for `Deref`. Rust calls `deref` again to turn the `&String` into `&str`, which
+matches the `hello` function’s definition.
+
+If Rust didn’t implement deref coercion, we would have to write the code in
+Listing 15-13 instead of the code in Listing 15-12 to call `hello` with a value
+of type `&MyBox<String>`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-13/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-13: The code we would have to write if Rust
+didn’t have deref coercion</span>
+
+The `(*m)` dereferences the `MyBox<String>` into a `String`. Then the `&` and
+`[..]` take a string slice of the `String` that is equal to the whole string to
+match the signature of `hello`. This code without deref coercions is harder to
+read, write, and understand with all of these symbols involved. Deref coercion
+allows Rust to handle these conversions for us automatically.
+
+When the `Deref` trait is defined for the types involved, Rust will analyze the
+types and use `Deref::deref` as many times as necessary to get a reference to
+match the parameter’s type. The number of times that `Deref::deref` needs to be
+inserted is resolved at compile time, so there is no runtime penalty for taking
+advantage of deref coercion!
+
+### How Deref Coercion Interacts with Mutability
+
+Similar to how you use the `Deref` trait to override the `*` operator on
+immutable references, you can use the `DerefMut` trait to override the `*`
+operator on mutable references.
+
+Rust does deref coercion when it finds types and trait implementations in three
+cases:
+
+* From `&T` to `&U` when `T: Deref<Target=U>`
+* From `&mut T` to `&mut U` when `T: DerefMut<Target=U>`
+* From `&mut T` to `&U` when `T: Deref<Target=U>`
+
+The first two cases are the same as each other except that the second
+implements mutability. The first case states that if you have a `&T`, and `T`
+implements `Deref` to some type `U`, you can get a `&U` transparently. The
+second case states that the same deref coercion happens for mutable references.
+
+The third case is trickier: Rust will also coerce a mutable reference to an
+immutable one. But the reverse is *not* possible: immutable references will
+never coerce to mutable references. Because of the borrowing rules, if you have
+a mutable reference, that mutable reference must be the only reference to that
+data (otherwise, the program wouldn’t compile). Converting one mutable
+reference to one immutable reference will never break the borrowing rules.
+Converting an immutable reference to a mutable reference would require that the
+initial immutable reference is the only immutable reference to that data, but
+the borrowing rules don’t guarantee that. Therefore, Rust can’t make the
+assumption that converting an immutable reference to a mutable reference is
+possible.
+
+[impl-trait]: ch10-02-traits.html#implementing-a-trait-on-a-type
+[tuple-structs]: ch05-01-defining-structs.html#using-tuple-structs-without-named-fields-to-create-different-types
diff --git a/src/doc/book/src/ch15-03-drop.md b/src/doc/book/src/ch15-03-drop.md
new file mode 100644
index 000000000..1ab2b86f0
--- /dev/null
+++ b/src/doc/book/src/ch15-03-drop.md
@@ -0,0 +1,149 @@
+## Running Code on Cleanup with the `Drop` Trait
+
+The second trait important to the smart pointer pattern is `Drop`, which lets
+you customize what happens when a value is about to go out of scope. You can
+provide an implementation for the `Drop` trait on any type, and that code can
+be used to release resources like files or network connections.
+
+We’re introducing `Drop` in the context of smart pointers because the
+functionality of the `Drop` trait is almost always used when implementing a
+smart pointer. For example, when a `Box<T>` is dropped it will deallocate the
+space on the heap that the box points to.
+
+In some languages, for some types, the programmer must call code to free memory
+or resources every time they finish using an instance of those types. Examples
+include file handles, sockets, or locks. If they forget, the system might
+become overloaded and crash. In Rust, you can specify that a particular bit of
+code be run whenever a value goes out of scope, and the compiler will insert
+this code automatically. As a result, you don’t need to be careful about
+placing cleanup code everywhere in a program that an instance of a particular
+type is finished with—you still won’t leak resources!
+
+You specify the code to run when a value goes out of scope by implementing the
+`Drop` trait. The `Drop` trait requires you to implement one method named
+`drop` that takes a mutable reference to `self`. To see when Rust calls `drop`,
+let’s implement `drop` with `println!` statements for now.
+
+Listing 15-14 shows a `CustomSmartPointer` struct whose only custom
+functionality is that it will print `Dropping CustomSmartPointer!` when the
+instance goes out of scope, to show when Rust runs the `drop` function.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-14/src/main.rs}}
+```
+
+<span class="caption">Listing 15-14: A `CustomSmartPointer` struct that
+implements the `Drop` trait where we would put our cleanup code</span>
+
+The `Drop` trait is included in the prelude, so we don’t need to bring it into
+scope. We implement the `Drop` trait on `CustomSmartPointer` and provide an
+implementation for the `drop` method that calls `println!`. The body of the
+`drop` function is where you would place any logic that you wanted to run when
+an instance of your type goes out of scope. We’re printing some text here to
+demonstrate visually when Rust will call `drop`.
+
+In `main`, we create two instances of `CustomSmartPointer` and then print
+`CustomSmartPointers created`. At the end of `main`, our instances of
+`CustomSmartPointer` will go out of scope, and Rust will call the code we put
+in the `drop` method, printing our final message. Note that we didn’t need to
+call the `drop` method explicitly.
+
+When we run this program, we’ll see the following output:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-14/output.txt}}
+```
+
+Rust automatically called `drop` for us when our instances went out of scope,
+calling the code we specified. Variables are dropped in the reverse order of
+their creation, so `d` was dropped before `c`. This example's purpose is to
+give you a visual guide to how the `drop` method works; usually you would
+specify the cleanup code that your type needs to run rather than a print
+message.
+
+### Dropping a Value Early with `std::mem::drop`
+
+Unfortunately, it’s not straightforward to disable the automatic `drop`
+functionality. Disabling `drop` isn’t usually necessary; the whole point of the
+`Drop` trait is that it’s taken care of automatically. Occasionally, however,
+you might want to clean up a value early. One example is when using smart
+pointers that manage locks: you might want to force the `drop` method that
+releases the lock so that other code in the same scope can acquire the lock.
+Rust doesn’t let you call the `Drop` trait’s `drop` method manually; instead
+you have to call the `std::mem::drop` function provided by the standard library
+if you want to force a value to be dropped before the end of its scope.
+
+If we try to call the `Drop` trait’s `drop` method manually by modifying the
+`main` function from Listing 15-14, as shown in Listing 15-15, we’ll get a
+compiler error:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-15/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-15: Attempting to call the `drop` method from
+the `Drop` trait manually to clean up early</span>
+
+When we try to compile this code, we’ll get this error:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-15/output.txt}}
+```
+
+This error message states that we’re not allowed to explicitly call `drop`. The
+error message uses the term *destructor*, which is the general programming term
+for a function that cleans up an instance. A *destructor* is analogous to a
+*constructor*, which creates an instance. The `drop` function in Rust is one
+particular destructor.
+
+Rust doesn’t let us call `drop` explicitly because Rust would still
+automatically call `drop` on the value at the end of `main`. This would cause a
+*double free* error because Rust would be trying to clean up the same value
+twice.
+
+We can’t disable the automatic insertion of `drop` when a value goes out of
+scope, and we can’t call the `drop` method explicitly. So, if we need to force
+a value to be cleaned up early, we use the `std::mem::drop` function.
+
+The `std::mem::drop` function is different from the `drop` method in the `Drop`
+trait. We call it by passing as an argument the value we want to force drop.
+The function is in the prelude, so we can modify `main` in Listing 15-15 to
+call the `drop` function, as shown in Listing 15-16:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-16/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-16: Calling `std::mem::drop` to explicitly
+drop a value before it goes out of scope</span>
+
+Running this code will print the following:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-16/output.txt}}
+```
+
+The text ```Dropping CustomSmartPointer with data `some data`!``` is printed
+between the `CustomSmartPointer created.` and `CustomSmartPointer dropped
+before the end of main.` text, showing that the `drop` method code is called to
+drop `c` at that point.
+
+You can use code specified in a `Drop` trait implementation in many ways to
+make cleanup convenient and safe: for instance, you could use it to create your
+own memory allocator! With the `Drop` trait and Rust’s ownership system, you
+don’t have to remember to clean up because Rust does it automatically.
+
+You also don’t have to worry about problems resulting from accidentally
+cleaning up values still in use: the ownership system that makes sure
+references are always valid also ensures that `drop` gets called only once when
+the value is no longer being used.
+
+Now that we’ve examined `Box<T>` and some of the characteristics of smart
+pointers, let’s look at a few other smart pointers defined in the standard
+library.
diff --git a/src/doc/book/src/ch15-04-rc.md b/src/doc/book/src/ch15-04-rc.md
new file mode 100644
index 000000000..87a42eb1a
--- /dev/null
+++ b/src/doc/book/src/ch15-04-rc.md
@@ -0,0 +1,164 @@
+## `Rc<T>`, the Reference Counted Smart Pointer
+
+In the majority of cases, ownership is clear: you know exactly which variable
+owns a given value. However, there are cases when a single value might have
+multiple owners. For example, in graph data structures, multiple edges might
+point to the same node, and that node is conceptually owned by all of the edges
+that point to it. A node shouldn’t be cleaned up unless it doesn’t have any
+edges pointing to it and so has no owners.
+
+You have to enable multiple ownership explicitly by using the Rust type
+`Rc<T>`, which is an abbreviation for *reference counting*. The `Rc<T>` type
+keeps track of the number of references to a value to determine whether or not
+the value is still in use. If there are zero references to a value, the value
+can be cleaned up without any references becoming invalid.
+
+Imagine `Rc<T>` as a TV in a family room. When one person enters to watch TV,
+they turn it on. Others can come into the room and watch the TV. When the last
+person leaves the room, they turn off the TV because it’s no longer being used.
+If someone turns off the TV while others are still watching it, there would be
+uproar from the remaining TV watchers!
+
+We use the `Rc<T>` type when we want to allocate some data on the heap for
+multiple parts of our program to read and we can’t determine at compile time
+which part will finish using the data last. If we knew which part would finish
+last, we could just make that part the data’s owner, and the normal ownership
+rules enforced at compile time would take effect.
+
+Note that `Rc<T>` is only for use in single-threaded scenarios. When we discuss
+concurrency in Chapter 16, we’ll cover how to do reference counting in
+multithreaded programs.
+
+### Using `Rc<T>` to Share Data
+
+Let’s return to our cons list example in Listing 15-5. Recall that we defined
+it using `Box<T>`. This time, we’ll create two lists that both share ownership
+of a third list. Conceptually, this looks similar to Figure 15-3:
+
+<img alt="Two lists that share ownership of a third list" src="img/trpl15-03.svg" class="center" />
+
+<span class="caption">Figure 15-3: Two lists, `b` and `c`, sharing ownership of
+a third list, `a`</span>
+
+We’ll create list `a` that contains 5 and then 10. Then we’ll make two more
+lists: `b` that starts with 3 and `c` that starts with 4. Both `b` and `c`
+lists will then continue on to the first `a` list containing 5 and 10. In other
+words, both lists will share the first list containing 5 and 10.
+
+Trying to implement this scenario using our definition of `List` with `Box<T>`
+won’t work, as shown in Listing 15-17:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-17/src/main.rs}}
+```
+
+<span class="caption">Listing 15-17: Demonstrating we’re not allowed to have
+two lists using `Box<T>` that try to share ownership of a third list</span>
+
+When we compile this code, we get this error:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-17/output.txt}}
+```
+
+The `Cons` variants own the data they hold, so when we create the `b` list, `a`
+is moved into `b` and `b` owns `a`. Then, when we try to use `a` again when
+creating `c`, we’re not allowed to because `a` has been moved.
+
+We could change the definition of `Cons` to hold references instead, but then
+we would have to specify lifetime parameters. By specifying lifetime
+parameters, we would be specifying that every element in the list will live at
+least as long as the entire list. This is the case for the elements and lists
+in Listing 15-17, but not in every scenario.
+
+Instead, we’ll change our definition of `List` to use `Rc<T>` in place of
+`Box<T>`, as shown in Listing 15-18. Each `Cons` variant will now hold a value
+and an `Rc<T>` pointing to a `List`. When we create `b`, instead of taking
+ownership of `a`, we’ll clone the `Rc<List>` that `a` is holding, thereby
+increasing the number of references from one to two and letting `a` and `b`
+share ownership of the data in that `Rc<List>`. We’ll also clone `a` when
+creating `c`, increasing the number of references from two to three. Every time
+we call `Rc::clone`, the reference count to the data within the `Rc<List>` will
+increase, and the data won’t be cleaned up unless there are zero references to
+it.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-18/src/main.rs}}
+```
+
+<span class="caption">Listing 15-18: A definition of `List` that uses
+`Rc<T>`</span>
+
+We need to add a `use` statement to bring `Rc<T>` into scope because it’s not
+in the prelude. In `main`, we create the list holding 5 and 10 and store it in
+a new `Rc<List>` in `a`. Then when we create `b` and `c`, we call the
+`Rc::clone` function and pass a reference to the `Rc<List>` in `a` as an
+argument.
+
+We could have called `a.clone()` rather than `Rc::clone(&a)`, but Rust’s
+convention is to use `Rc::clone` in this case. The implementation of
+`Rc::clone` doesn’t make a deep copy of all the data like most types’
+implementations of `clone` do. The call to `Rc::clone` only increments the
+reference count, which doesn’t take much time. Deep copies of data can take a
+lot of time. By using `Rc::clone` for reference counting, we can visually
+distinguish between the deep-copy kinds of clones and the kinds of clones that
+increase the reference count. When looking for performance problems in the
+code, we only need to consider the deep-copy clones and can disregard calls to
+`Rc::clone`.
+
+### Cloning an `Rc<T>` Increases the Reference Count
+
+Let’s change our working example in Listing 15-18 so we can see the reference
+counts changing as we create and drop references to the `Rc<List>` in `a`.
+
+In Listing 15-19, we’ll change `main` so it has an inner scope around list `c`;
+then we can see how the reference count changes when `c` goes out of scope.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-19/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-19: Printing the reference count</span>
+
+At each point in the program where the reference count changes, we print the
+reference count, which we get by calling the `Rc::strong_count` function. This
+function is named `strong_count` rather than `count` because the `Rc<T>` type
+also has a `weak_count`; we’ll see what `weak_count` is used for in the
+[“Preventing Reference Cycles: Turning an `Rc<T>` into a
+`Weak<T>`”][preventing-ref-cycles]<!-- ignore --> section.
+
+This code prints the following:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-19/output.txt}}
+```
+
+We can see that the `Rc<List>` in `a` has an initial reference count of 1; then
+each time we call `clone`, the count goes up by 1. When `c` goes out of scope,
+the count goes down by 1. We don’t have to call a function to decrease the
+reference count like we have to call `Rc::clone` to increase the reference
+count: the implementation of the `Drop` trait decreases the reference count
+automatically when an `Rc<T>` value goes out of scope.
+
+What we can’t see in this example is that when `b` and then `a` go out of scope
+at the end of `main`, the count is then 0, and the `Rc<List>` is cleaned up
+completely. Using `Rc<T>` allows a single value to have multiple owners, and
+the count ensures that the value remains valid as long as any of the owners
+still exist.
+
+Via immutable references, `Rc<T>` allows you to share data between multiple
+parts of your program for reading only. If `Rc<T>` allowed you to have multiple
+mutable references too, you might violate one of the borrowing rules discussed
+in Chapter 4: multiple mutable borrows to the same place can cause data races
+and inconsistencies. But being able to mutate data is very useful! In the next
+section, we’ll discuss the interior mutability pattern and the `RefCell<T>`
+type that you can use in conjunction with an `Rc<T>` to work with this
+immutability restriction.
+
+[preventing-ref-cycles]: ch15-06-reference-cycles.html#preventing-reference-cycles-turning-an-rct-into-a-weakt
diff --git a/src/doc/book/src/ch15-05-interior-mutability.md b/src/doc/book/src/ch15-05-interior-mutability.md
new file mode 100644
index 000000000..74bb02f05
--- /dev/null
+++ b/src/doc/book/src/ch15-05-interior-mutability.md
@@ -0,0 +1,344 @@
+## `RefCell<T>` and the Interior Mutability Pattern
+
+*Interior mutability* is a design pattern in Rust that allows you to mutate
+data even when there are immutable references to that data; normally, this
+action is disallowed by the borrowing rules. To mutate data, the pattern uses
+`unsafe` code inside a data structure to bend Rust’s usual rules that govern
+mutation and borrowing. Unsafe code indicates to the compiler that we’re
+checking the rules manually instead of relying on the compiler to check them
+for us; we will discuss unsafe code more in Chapter 19.
+
+We can use types that use the interior mutability pattern only when we can
+ensure that the borrowing rules will be followed at runtime, even though the
+compiler can’t guarantee that. The `unsafe` code involved is then wrapped in a
+safe API, and the outer type is still immutable.
+
+Let’s explore this concept by looking at the `RefCell<T>` type that follows the
+interior mutability pattern.
+
+### Enforcing Borrowing Rules at Runtime with `RefCell<T>`
+
+Unlike `Rc<T>`, the `RefCell<T>` type represents single ownership over the data
+it holds. So, what makes `RefCell<T>` different from a type like `Box<T>`?
+Recall the borrowing rules you learned in Chapter 4:
+
+* At any given time, you can have *either* (but not both) one mutable reference
+ or any number of immutable references.
+* References must always be valid.
+
+With references and `Box<T>`, the borrowing rules’ invariants are enforced at
+compile time. With `RefCell<T>`, these invariants are enforced *at runtime*.
+With references, if you break these rules, you’ll get a compiler error. With
+`RefCell<T>`, if you break these rules, your program will panic and exit.
+
+The advantages of checking the borrowing rules at compile time are that errors
+will be caught sooner in the development process, and there is no impact on
+runtime performance because all the analysis is completed beforehand. For those
+reasons, checking the borrowing rules at compile time is the best choice in the
+majority of cases, which is why this is Rust’s default.
+
+The advantage of checking the borrowing rules at runtime instead is that
+certain memory-safe scenarios are then allowed, where they would’ve been
+disallowed by the compile-time checks. Static analysis, like the Rust compiler,
+is inherently conservative. Some properties of code are impossible to detect by
+analyzing the code: the most famous example is the Halting Problem, which is
+beyond the scope of this book but is an interesting topic to research.
+
+Because some analysis is impossible, if the Rust compiler can’t be sure the
+code complies with the ownership rules, it might reject a correct program; in
+this way, it’s conservative. If Rust accepted an incorrect program, users
+wouldn’t be able to trust in the guarantees Rust makes. However, if Rust
+rejects a correct program, the programmer will be inconvenienced, but nothing
+catastrophic can occur. The `RefCell<T>` type is useful when you’re sure your
+code follows the borrowing rules but the compiler is unable to understand and
+guarantee that.
+
+Similar to `Rc<T>`, `RefCell<T>` is only for use in single-threaded scenarios
+and will give you a compile-time error if you try using it in a multithreaded
+context. We’ll talk about how to get the functionality of `RefCell<T>` in a
+multithreaded program in Chapter 16.
+
+Here is a recap of the reasons to choose `Box<T>`, `Rc<T>`, or `RefCell<T>`:
+
+* `Rc<T>` enables multiple owners of the same data; `Box<T>` and `RefCell<T>`
+ have single owners.
+* `Box<T>` allows immutable or mutable borrows checked at compile time; `Rc<T>`
+ allows only immutable borrows checked at compile time; `RefCell<T>` allows
+ immutable or mutable borrows checked at runtime.
+* Because `RefCell<T>` allows mutable borrows checked at runtime, you can
+ mutate the value inside the `RefCell<T>` even when the `RefCell<T>` is
+ immutable.
+
+Mutating the value inside an immutable value is the *interior mutability*
+pattern. Let’s look at a situation in which interior mutability is useful and
+examine how it’s possible.
+
+### Interior Mutability: A Mutable Borrow to an Immutable Value
+
+A consequence of the borrowing rules is that when you have an immutable value,
+you can’t borrow it mutably. For example, this code won’t compile:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/src/main.rs}}
+```
+
+If you tried to compile this code, you’d get the following error:
+
+```console
+{{#include ../listings/ch15-smart-pointers/no-listing-01-cant-borrow-immutable-as-mutable/output.txt}}
+```
+
+However, there are situations in which it would be useful for a value to mutate
+itself in its methods but appear immutable to other code. Code outside the
+value’s methods would not be able to mutate the value. Using `RefCell<T>` is
+one way to get the ability to have interior mutability, but `RefCell<T>`
+doesn’t get around the borrowing rules completely: the borrow checker in the
+compiler allows this interior mutability, and the borrowing rules are checked
+at runtime instead. If you violate the rules, you’ll get a `panic!` instead of
+a compiler error.
+
+Let’s work through a practical example where we can use `RefCell<T>` to mutate
+an immutable value and see why that is useful.
+
+#### A Use Case for Interior Mutability: Mock Objects
+
+Sometimes during testing a programmer will use a type in place of another type,
+in order to observe particular behavior and assert it's implemented correctly.
+This placeholder type is called a *test double*. Think of it in the sense of a
+"stunt double" in filmmaking, where a person steps in and substitutes for an
+actor to do a particular tricky scene. Test doubles stand in for other types
+when we're running tests. *Mock objects* are specific types of test doubles
+that record what happens during a test so you can assert that the correct
+actions took place.
+
+Rust doesn’t have objects in the same sense as other languages have objects,
+and Rust doesn’t have mock object functionality built into the standard library
+as some other languages do. However, you can definitely create a struct that
+will serve the same purposes as a mock object.
+
+Here’s the scenario we’ll test: we’ll create a library that tracks a value
+against a maximum value and sends messages based on how close to the maximum
+value the current value is. This library could be used to keep track of a
+user’s quota for the number of API calls they’re allowed to make, for example.
+
+Our library will only provide the functionality of tracking how close to the
+maximum a value is and what the messages should be at what times. Applications
+that use our library will be expected to provide the mechanism for sending the
+messages: the application could put a message in the application, send an
+email, send a text message, or something else. The library doesn’t need to know
+that detail. All it needs is something that implements a trait we’ll provide
+called `Messenger`. Listing 15-20 shows the library code:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-20/src/lib.rs}}
+```
+
+<span class="caption">Listing 15-20: A library to keep track of how close a
+value is to a maximum value and warn when the value is at certain levels</span>
+
+One important part of this code is that the `Messenger` trait has one method
+called `send` that takes an immutable reference to `self` and the text of the
+message. This trait is the interface our mock object needs to implement so that
+the mock can be used in the same way a real object is. The other important part
+is that we want to test the behavior of the `set_value` method on the
+`LimitTracker`. We can change what we pass in for the `value` parameter, but
+`set_value` doesn’t return anything for us to make assertions on. We want to be
+able to say that if we create a `LimitTracker` with something that implements
+the `Messenger` trait and a particular value for `max`, when we pass different
+numbers for `value`, the messenger is told to send the appropriate messages.
+
+We need a mock object that, instead of sending an email or text message when we
+call `send`, will only keep track of the messages it’s told to send. We can
+create a new instance of the mock object, create a `LimitTracker` that uses the
+mock object, call the `set_value` method on `LimitTracker`, and then check that
+the mock object has the messages we expect. Listing 15-21 shows an attempt to
+implement a mock object to do just that, but the borrow checker won’t allow it:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-21/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 15-21: An attempt to implement a `MockMessenger`
+that isn’t allowed by the borrow checker</span>
+
+This test code defines a `MockMessenger` struct that has a `sent_messages`
+field with a `Vec` of `String` values to keep track of the messages it’s told
+to send. We also define an associated function `new` to make it convenient to
+create new `MockMessenger` values that start with an empty list of messages. We
+then implement the `Messenger` trait for `MockMessenger` so we can give a
+`MockMessenger` to a `LimitTracker`. In the definition of the `send` method, we
+take the message passed in as a parameter and store it in the `MockMessenger`
+list of `sent_messages`.
+
+In the test, we’re testing what happens when the `LimitTracker` is told to set
+`value` to something that is more than 75 percent of the `max` value. First, we
+create a new `MockMessenger`, which will start with an empty list of messages.
+Then we create a new `LimitTracker` and give it a reference to the new
+`MockMessenger` and a `max` value of 100. We call the `set_value` method on the
+`LimitTracker` with a value of 80, which is more than 75 percent of 100. Then
+we assert that the list of messages that the `MockMessenger` is keeping track
+of should now have one message in it.
+
+However, there’s one problem with this test, as shown here:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-21/output.txt}}
+```
+
+We can’t modify the `MockMessenger` to keep track of the messages, because the
+`send` method takes an immutable reference to `self`. We also can’t take the
+suggestion from the error text to use `&mut self` instead, because then the
+signature of `send` wouldn’t match the signature in the `Messenger` trait
+definition (feel free to try and see what error message you get).
+
+This is a situation in which interior mutability can help! We’ll store the
+`sent_messages` within a `RefCell<T>`, and then the `send` method will be
+able to modify `sent_messages` to store the messages we’ve seen. Listing 15-22
+shows what that looks like:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-22/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 15-22: Using `RefCell<T>` to mutate an inner
+value while the outer value is considered immutable</span>
+
+The `sent_messages` field is now of type `RefCell<Vec<String>>` instead of
+`Vec<String>`. In the `new` function, we create a new `RefCell<Vec<String>>`
+instance around the empty vector.
+
+For the implementation of the `send` method, the first parameter is still an
+immutable borrow of `self`, which matches the trait definition. We call
+`borrow_mut` on the `RefCell<Vec<String>>` in `self.sent_messages` to get a
+mutable reference to the value inside the `RefCell<Vec<String>>`, which is the
+vector. Then we can call `push` on the mutable reference to the vector to keep
+track of the messages sent during the test.
+
+The last change we have to make is in the assertion: to see how many items are
+in the inner vector, we call `borrow` on the `RefCell<Vec<String>>` to get an
+immutable reference to the vector.
+
+Now that you’ve seen how to use `RefCell<T>`, let’s dig into how it works!
+
+#### Keeping Track of Borrows at Runtime with `RefCell<T>`
+
+When creating immutable and mutable references, we use the `&` and `&mut`
+syntax, respectively. With `RefCell<T>`, we use the `borrow` and `borrow_mut`
+methods, which are part of the safe API that belongs to `RefCell<T>`. The
+`borrow` method returns the smart pointer type `Ref<T>`, and `borrow_mut`
+returns the smart pointer type `RefMut<T>`. Both types implement `Deref`, so we
+can treat them like regular references.
+
+The `RefCell<T>` keeps track of how many `Ref<T>` and `RefMut<T>` smart
+pointers are currently active. Every time we call `borrow`, the `RefCell<T>`
+increases its count of how many immutable borrows are active. When a `Ref<T>`
+value goes out of scope, the count of immutable borrows goes down by one. Just
+like the compile-time borrowing rules, `RefCell<T>` lets us have many immutable
+borrows or one mutable borrow at any point in time.
+
+If we try to violate these rules, rather than getting a compiler error as we
+would with references, the implementation of `RefCell<T>` will panic at
+runtime. Listing 15-23 shows a modification of the implementation of `send` in
+Listing 15-22. We’re deliberately trying to create two mutable borrows active
+for the same scope to illustrate that `RefCell<T>` prevents us from doing this
+at runtime.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,panics
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-23/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 15-23: Creating two mutable references in the
+same scope to see that `RefCell<T>` will panic</span>
+
+We create a variable `one_borrow` for the `RefMut<T>` smart pointer returned
+from `borrow_mut`. Then we create another mutable borrow in the same way in the
+variable `two_borrow`. This makes two mutable references in the same scope,
+which isn’t allowed. When we run the tests for our library, the code in Listing
+15-23 will compile without any errors, but the test will fail:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-23/output.txt}}
+```
+
+Notice that the code panicked with the message `already borrowed:
+BorrowMutError`. This is how `RefCell<T>` handles violations of the borrowing
+rules at runtime.
+
+Choosing to catch borrowing errors at runtime rather than compile time, as
+we've done here, means you'd potentially be finding mistakes in your code later
+in the development process: possibly not until your code was deployed to
+production. Also, your code would incur a small runtime performance penalty as
+a result of keeping track of the borrows at runtime rather than compile time.
+However, using `RefCell<T>` makes it possible to write a mock object that can
+modify itself to keep track of the messages it has seen while you’re using it
+in a context where only immutable values are allowed. You can use `RefCell<T>`
+despite its trade-offs to get more functionality than regular references
+provide.
+
+### Having Multiple Owners of Mutable Data by Combining `Rc<T>` and `RefCell<T>`
+
+A common way to use `RefCell<T>` is in combination with `Rc<T>`. Recall that
+`Rc<T>` lets you have multiple owners of some data, but it only gives immutable
+access to that data. If you have an `Rc<T>` that holds a `RefCell<T>`, you can
+get a value that can have multiple owners *and* that you can mutate!
+
+For example, recall the cons list example in Listing 15-18 where we used
+`Rc<T>` to allow multiple lists to share ownership of another list. Because
+`Rc<T>` holds only immutable values, we can’t change any of the values in the
+list once we’ve created them. Let’s add in `RefCell<T>` to gain the ability to
+change the values in the lists. Listing 15-24 shows that by using a
+`RefCell<T>` in the `Cons` definition, we can modify the value stored in all
+the lists:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-24/src/main.rs}}
+```
+
+<span class="caption">Listing 15-24: Using `Rc<RefCell<i32>>` to create a
+`List` that we can mutate</span>
+
+We create a value that is an instance of `Rc<RefCell<i32>>` and store it in a
+variable named `value` so we can access it directly later. Then we create a
+`List` in `a` with a `Cons` variant that holds `value`. We need to clone
+`value` so both `a` and `value` have ownership of the inner `5` value rather
+than transferring ownership from `value` to `a` or having `a` borrow from
+`value`.
+
+We wrap the list `a` in an `Rc<T>` so when we create lists `b` and `c`, they
+can both refer to `a`, which is what we did in Listing 15-18.
+
+After we’ve created the lists in `a`, `b`, and `c`, we want to add 10 to the
+value in `value`. We do this by calling `borrow_mut` on `value`, which uses the
+automatic dereferencing feature we discussed in Chapter 5 (see the section
+[“Where’s the `->` Operator?”][wheres-the---operator]<!-- ignore -->) to
+dereference the `Rc<T>` to the inner `RefCell<T>` value. The `borrow_mut`
+method returns a `RefMut<T>` smart pointer, and we use the dereference operator
+on it and change the inner value.
+
+When we print `a`, `b`, and `c`, we can see that they all have the modified
+value of 15 rather than 5:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-24/output.txt}}
+```
+
+This technique is pretty neat! By using `RefCell<T>`, we have an outwardly
+immutable `List` value. But we can use the methods on `RefCell<T>` that provide
+access to its interior mutability so we can modify our data when we need to.
+The runtime checks of the borrowing rules protect us from data races, and it’s
+sometimes worth trading a bit of speed for this flexibility in our data
+structures. Note that `RefCell<T>` does not work for multithreaded code!
+`Mutex<T>` is the thread-safe version of `RefCell<T>` and we’ll discuss
+`Mutex<T>` in Chapter 16.
+
+[wheres-the---operator]: ch05-03-method-syntax.html#wheres-the---operator
diff --git a/src/doc/book/src/ch15-06-reference-cycles.md b/src/doc/book/src/ch15-06-reference-cycles.md
new file mode 100644
index 000000000..4b55d88a6
--- /dev/null
+++ b/src/doc/book/src/ch15-06-reference-cycles.md
@@ -0,0 +1,320 @@
+## Reference Cycles Can Leak Memory
+
+Rust’s memory safety guarantees make it difficult, but not impossible, to
+accidentally create memory that is never cleaned up (known as a *memory leak*).
+Preventing memory leaks entirely is not one of Rust’s guarantees, meaning
+memory leaks are memory safe in Rust. We can see that Rust allows memory leaks
+by using `Rc<T>` and `RefCell<T>`: it’s possible to create references where
+items refer to each other in a cycle. This creates memory leaks because the
+reference count of each item in the cycle will never reach 0, and the values
+will never be dropped.
+
+### Creating a Reference Cycle
+
+Let’s look at how a reference cycle might happen and how to prevent it,
+starting with the definition of the `List` enum and a `tail` method in Listing
+15-25:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-25/src/main.rs}}
+```
+
+<span class="caption">Listing 15-25: A cons list definition that holds a
+`RefCell<T>` so we can modify what a `Cons` variant is referring to</span>
+
+We’re using another variation of the `List` definition from Listing 15-5. The
+second element in the `Cons` variant is now `RefCell<Rc<List>>`, meaning that
+instead of having the ability to modify the `i32` value as we did in Listing
+15-24, we want to modify the `List` value a `Cons` variant is pointing to.
+We’re also adding a `tail` method to make it convenient for us to access the
+second item if we have a `Cons` variant.
+
+In Listing 15-26, we’re adding a `main` function that uses the definitions in
+Listing 15-25. This code creates a list in `a` and a list in `b` that points to
+the list in `a`. Then it modifies the list in `a` to point to `b`, creating a
+reference cycle. There are `println!` statements along the way to show what the
+reference counts are at various points in this process.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-26/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-26: Creating a reference cycle of two `List`
+values pointing to each other</span>
+
+We create an `Rc<List>` instance holding a `List` value in the variable `a`
+with an initial list of `5, Nil`. We then create an `Rc<List>` instance holding
+another `List` value in the variable `b` that contains the value 10 and points
+to the list in `a`.
+
+We modify `a` so it points to `b` instead of `Nil`, creating a cycle. We do
+that by using the `tail` method to get a reference to the `RefCell<Rc<List>>`
+in `a`, which we put in the variable `link`. Then we use the `borrow_mut`
+method on the `RefCell<Rc<List>>` to change the value inside from an `Rc<List>`
+that holds a `Nil` value to the `Rc<List>` in `b`.
+
+When we run this code, keeping the last `println!` commented out for the
+moment, we’ll get this output:
+
+```console
+{{#include ../listings/ch15-smart-pointers/listing-15-26/output.txt}}
+```
+
+The reference count of the `Rc<List>` instances in both `a` and `b` are 2 after
+we change the list in `a` to point to `b`. At the end of `main`, Rust drops the
+variable `b`, which decreases the reference count of the `b` `Rc<List>` instance
+from 2 to 1. The memory that `Rc<List>` has on the heap won’t be dropped at
+this point, because its reference count is 1, not 0. Then Rust drops `a`, which
+decreases the reference count of the `a` `Rc<List>` instance from 2 to 1 as
+well. This instance’s memory can’t be dropped either, because the other
+`Rc<List>` instance still refers to it. The memory allocated to the list will
+remain uncollected forever. To visualize this reference cycle, we’ve created a
+diagram in Figure 15-4.
+
+<img alt="Reference cycle of lists" src="img/trpl15-04.svg" class="center" />
+
+<span class="caption">Figure 15-4: A reference cycle of lists `a` and `b`
+pointing to each other</span>
+
+If you uncomment the last `println!` and run the program, Rust will try to
+print this cycle with `a` pointing to `b` pointing to `a` and so forth until it
+overflows the stack.
+
+Compared to a real-world program, the consequences creating a reference cycle
+in this example aren’t very dire: right after we create the reference cycle,
+the program ends. However, if a more complex program allocated lots of memory
+in a cycle and held onto it for a long time, the program would use more memory
+than it needed and might overwhelm the system, causing it to run out of
+available memory.
+
+Creating reference cycles is not easily done, but it’s not impossible either.
+If you have `RefCell<T>` values that contain `Rc<T>` values or similar nested
+combinations of types with interior mutability and reference counting, you must
+ensure that you don’t create cycles; you can’t rely on Rust to catch them.
+Creating a reference cycle would be a logic bug in your program that you should
+use automated tests, code reviews, and other software development practices to
+minimize.
+
+Another solution for avoiding reference cycles is reorganizing your data
+structures so that some references express ownership and some references don’t.
+As a result, you can have cycles made up of some ownership relationships and
+some non-ownership relationships, and only the ownership relationships affect
+whether or not a value can be dropped. In Listing 15-25, we always want `Cons`
+variants to own their list, so reorganizing the data structure isn’t possible.
+Let’s look at an example using graphs made up of parent nodes and child nodes
+to see when non-ownership relationships are an appropriate way to prevent
+reference cycles.
+
+### Preventing Reference Cycles: Turning an `Rc<T>` into a `Weak<T>`
+
+So far, we’ve demonstrated that calling `Rc::clone` increases the
+`strong_count` of an `Rc<T>` instance, and an `Rc<T>` instance is only cleaned
+up if its `strong_count` is 0. You can also create a *weak reference* to the
+value within an `Rc<T>` instance by calling `Rc::downgrade` and passing a
+reference to the `Rc<T>`. Strong references are how you can share ownership of
+an `Rc<T>` instance. Weak references don’t express an ownership relationship,
+and their count doesn't affect when an `Rc<T>` instance is cleaned up. They
+won’t cause a reference cycle because any cycle involving some weak references
+will be broken once the strong reference count of values involved is 0.
+
+When you call `Rc::downgrade`, you get a smart pointer of type `Weak<T>`.
+Instead of increasing the `strong_count` in the `Rc<T>` instance by 1, calling
+`Rc::downgrade` increases the `weak_count` by 1. The `Rc<T>` type uses
+`weak_count` to keep track of how many `Weak<T>` references exist, similar to
+`strong_count`. The difference is the `weak_count` doesn’t need to be 0 for the
+`Rc<T>` instance to be cleaned up.
+
+Because the value that `Weak<T>` references might have been dropped, to do
+anything with the value that a `Weak<T>` is pointing to, you must make sure the
+value still exists. Do this by calling the `upgrade` method on a `Weak<T>`
+instance, which will return an `Option<Rc<T>>`. You’ll get a result of `Some`
+if the `Rc<T>` value has not been dropped yet and a result of `None` if the
+`Rc<T>` value has been dropped. Because `upgrade` returns an `Option<Rc<T>>`,
+Rust will ensure that the `Some` case and the `None` case are handled, and
+there won’t be an invalid pointer.
+
+As an example, rather than using a list whose items know only about the next
+item, we’ll create a tree whose items know about their children items *and*
+their parent items.
+
+#### Creating a Tree Data Structure: a `Node` with Child Nodes
+
+To start, we’ll build a tree with nodes that know about their child nodes.
+We’ll create a struct named `Node` that holds its own `i32` value as well as
+references to its children `Node` values:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-27/src/main.rs:here}}
+```
+
+We want a `Node` to own its children, and we want to share that ownership with
+variables so we can access each `Node` in the tree directly. To do this, we
+define the `Vec<T>` items to be values of type `Rc<Node>`. We also want to
+modify which nodes are children of another node, so we have a `RefCell<T>` in
+`children` around the `Vec<Rc<Node>>`.
+
+Next, we’ll use our struct definition and create one `Node` instance named
+`leaf` with the value 3 and no children, and another instance named `branch`
+with the value 5 and `leaf` as one of its children, as shown in Listing 15-27:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-27/src/main.rs:there}}
+```
+
+<span class="caption">Listing 15-27: Creating a `leaf` node with no children
+and a `branch` node with `leaf` as one of its children</span>
+
+We clone the `Rc<Node>` in `leaf` and store that in `branch`, meaning the
+`Node` in `leaf` now has two owners: `leaf` and `branch`. We can get from
+`branch` to `leaf` through `branch.children`, but there’s no way to get from
+`leaf` to `branch`. The reason is that `leaf` has no reference to `branch` and
+doesn’t know they’re related. We want `leaf` to know that `branch` is its
+parent. We’ll do that next.
+
+#### Adding a Reference from a Child to Its Parent
+
+To make the child node aware of its parent, we need to add a `parent` field to
+our `Node` struct definition. The trouble is in deciding what the type of
+`parent` should be. We know it can’t contain an `Rc<T>`, because that would
+create a reference cycle with `leaf.parent` pointing to `branch` and
+`branch.children` pointing to `leaf`, which would cause their `strong_count`
+values to never be 0.
+
+Thinking about the relationships another way, a parent node should own its
+children: if a parent node is dropped, its child nodes should be dropped as
+well. However, a child should not own its parent: if we drop a child node, the
+parent should still exist. This is a case for weak references!
+
+So instead of `Rc<T>`, we’ll make the type of `parent` use `Weak<T>`,
+specifically a `RefCell<Weak<Node>>`. Now our `Node` struct definition looks
+like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-28/src/main.rs:here}}
+```
+
+A node will be able to refer to its parent node but doesn’t own its parent.
+In Listing 15-28, we update `main` to use this new definition so the `leaf`
+node will have a way to refer to its parent, `branch`:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-28/src/main.rs:there}}
+```
+
+<span class="caption">Listing 15-28: A `leaf` node with a weak reference to its
+parent node `branch`</span>
+
+Creating the `leaf` node looks similar to Listing 15-27 with the exception of
+the `parent` field: `leaf` starts out without a parent, so we create a new,
+empty `Weak<Node>` reference instance.
+
+At this point, when we try to get a reference to the parent of `leaf` by using
+the `upgrade` method, we get a `None` value. We see this in the output from the
+first `println!` statement:
+
+```text
+leaf parent = None
+```
+
+When we create the `branch` node, it will also have a new `Weak<Node>`
+reference in the `parent` field, because `branch` doesn’t have a parent node.
+We still have `leaf` as one of the children of `branch`. Once we have the
+`Node` instance in `branch`, we can modify `leaf` to give it a `Weak<Node>`
+reference to its parent. We use the `borrow_mut` method on the
+`RefCell<Weak<Node>>` in the `parent` field of `leaf`, and then we use the
+`Rc::downgrade` function to create a `Weak<Node>` reference to `branch` from
+the `Rc<Node>` in `branch.`
+
+When we print the parent of `leaf` again, this time we’ll get a `Some` variant
+holding `branch`: now `leaf` can access its parent! When we print `leaf`, we
+also avoid the cycle that eventually ended in a stack overflow like we had in
+Listing 15-26; the `Weak<Node>` references are printed as `(Weak)`:
+
+```text
+leaf parent = Some(Node { value: 5, parent: RefCell { value: (Weak) },
+children: RefCell { value: [Node { value: 3, parent: RefCell { value: (Weak) },
+children: RefCell { value: [] } }] } })
+```
+
+The lack of infinite output indicates that this code didn’t create a reference
+cycle. We can also tell this by looking at the values we get from calling
+`Rc::strong_count` and `Rc::weak_count`.
+
+#### Visualizing Changes to `strong_count` and `weak_count`
+
+Let’s look at how the `strong_count` and `weak_count` values of the `Rc<Node>`
+instances change by creating a new inner scope and moving the creation of
+`branch` into that scope. By doing so, we can see what happens when `branch` is
+created and then dropped when it goes out of scope. The modifications are shown
+in Listing 15-29:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch15-smart-pointers/listing-15-29/src/main.rs:here}}
+```
+
+<span class="caption">Listing 15-29: Creating `branch` in an inner scope and
+examining strong and weak reference counts</span>
+
+After `leaf` is created, its `Rc<Node>` has a strong count of 1 and a weak
+count of 0. In the inner scope, we create `branch` and associate it with
+`leaf`, at which point when we print the counts, the `Rc<Node>` in `branch`
+will have a strong count of 1 and a weak count of 1 (for `leaf.parent` pointing
+to `branch` with a `Weak<Node>`). When we print the counts in `leaf`, we’ll see
+it will have a strong count of 2, because `branch` now has a clone of the
+`Rc<Node>` of `leaf` stored in `branch.children`, but will still have a weak
+count of 0.
+
+When the inner scope ends, `branch` goes out of scope and the strong count of
+the `Rc<Node>` decreases to 0, so its `Node` is dropped. The weak count of 1
+from `leaf.parent` has no bearing on whether or not `Node` is dropped, so we
+don’t get any memory leaks!
+
+If we try to access the parent of `leaf` after the end of the scope, we’ll get
+`None` again. At the end of the program, the `Rc<Node>` in `leaf` has a strong
+count of 1 and a weak count of 0, because the variable `leaf` is now the only
+reference to the `Rc<Node>` again.
+
+All of the logic that manages the counts and value dropping is built into
+`Rc<T>` and `Weak<T>` and their implementations of the `Drop` trait. By
+specifying that the relationship from a child to its parent should be a
+`Weak<T>` reference in the definition of `Node`, you’re able to have parent
+nodes point to child nodes and vice versa without creating a reference cycle
+and memory leaks.
+
+## Summary
+
+This chapter covered how to use smart pointers to make different guarantees and
+trade-offs from those Rust makes by default with regular references. The
+`Box<T>` type has a known size and points to data allocated on the heap. The
+`Rc<T>` type keeps track of the number of references to data on the heap so
+that data can have multiple owners. The `RefCell<T>` type with its interior
+mutability gives us a type that we can use when we need an immutable type but
+need to change an inner value of that type; it also enforces the borrowing
+rules at runtime instead of at compile time.
+
+Also discussed were the `Deref` and `Drop` traits, which enable a lot of the
+functionality of smart pointers. We explored reference cycles that can cause
+memory leaks and how to prevent them using `Weak<T>`.
+
+If this chapter has piqued your interest and you want to implement your own
+smart pointers, check out [“The Rustonomicon”][nomicon] for more useful
+information.
+
+Next, we’ll talk about concurrency in Rust. You’ll even learn about a few new
+smart pointers.
+
+[nomicon]: ../nomicon/index.html
diff --git a/src/doc/book/src/ch16-00-concurrency.md b/src/doc/book/src/ch16-00-concurrency.md
new file mode 100644
index 000000000..410f3e40d
--- /dev/null
+++ b/src/doc/book/src/ch16-00-concurrency.md
@@ -0,0 +1,49 @@
+# Fearless Concurrency
+
+Handling concurrent programming safely and efficiently is another of Rust’s
+major goals. *Concurrent programming*, where different parts of a program
+execute independently, and *parallel programming*, where different parts of a
+program execute at the same time, are becoming increasingly important as more
+computers take advantage of their multiple processors. Historically,
+programming in these contexts has been difficult and error prone: Rust hopes to
+change that.
+
+Initially, the Rust team thought that ensuring memory safety and preventing
+concurrency problems were two separate challenges to be solved with different
+methods. Over time, the team discovered that the ownership and type systems are
+a powerful set of tools to help manage memory safety *and* concurrency
+problems! By leveraging ownership and type checking, many concurrency errors
+are compile-time errors in Rust rather than runtime errors. Therefore, rather
+than making you spend lots of time trying to reproduce the exact circumstances
+under which a runtime concurrency bug occurs, incorrect code will refuse to
+compile and present an error explaining the problem. As a result, you can fix
+your code while you’re working on it rather than potentially after it has been
+shipped to production. We’ve nicknamed this aspect of Rust *fearless*
+*concurrency*. Fearless concurrency allows you to write code that is free of
+subtle bugs and is easy to refactor without introducing new bugs.
+
+> Note: For simplicity’s sake, we’ll refer to many of the problems as
+> *concurrent* rather than being more precise by saying *concurrent and/or
+> parallel*. If this book were about concurrency and/or parallelism, we’d be
+> more specific. For this chapter, please mentally substitute *concurrent
+> and/or parallel* whenever we use *concurrent*.
+
+Many languages are dogmatic about the solutions they offer for handling
+concurrent problems. For example, Erlang has elegant functionality for
+message-passing concurrency but has only obscure ways to share state between
+threads. Supporting only a subset of possible solutions is a reasonable
+strategy for higher-level languages, because a higher-level language promises
+benefits from giving up some control to gain abstractions. However, lower-level
+languages are expected to provide the solution with the best performance in any
+given situation and have fewer abstractions over the hardware. Therefore, Rust
+offers a variety of tools for modeling problems in whatever way is appropriate
+for your situation and requirements.
+
+Here are the topics we’ll cover in this chapter:
+
+* How to create threads to run multiple pieces of code at the same time
+* *Message-passing* concurrency, where channels send messages between threads
+* *Shared-state* concurrency, where multiple threads have access to some piece
+ of data
+* The `Sync` and `Send` traits, which extend Rust’s concurrency guarantees to
+ user-defined types as well as types provided by the standard library
diff --git a/src/doc/book/src/ch16-01-threads.md b/src/doc/book/src/ch16-01-threads.md
new file mode 100644
index 000000000..52947a99b
--- /dev/null
+++ b/src/doc/book/src/ch16-01-threads.md
@@ -0,0 +1,281 @@
+## Using Threads to Run Code Simultaneously
+
+In most current operating systems, an executed program’s code is run in a
+*process*, and the operating system will manage multiple processes at once.
+Within a program, you can also have independent parts that run simultaneously.
+The features that run these independent parts are called *threads*. For
+example, a web server could have multiple threads so that it could respond to
+more than one request at the same time.
+
+Splitting the computation in your program into multiple threads to run multiple
+tasks at the same time can improve performance, but it also adds complexity.
+Because threads can run simultaneously, there’s no inherent guarantee about the
+order in which parts of your code on different threads will run. This can lead
+to problems, such as:
+
+* Race conditions, where threads are accessing data or resources in an
+ inconsistent order
+* Deadlocks, where two threads are waiting for each other, preventing both
+ threads from continuing
+* Bugs that happen only in certain situations and are hard to reproduce and fix
+ reliably
+
+Rust attempts to mitigate the negative effects of using threads, but
+programming in a multithreaded context still takes careful thought and requires
+a code structure that is different from that in programs running in a single
+thread.
+
+Programming languages implement threads in a few different ways, and many
+operating systems provide an API the language can call for creating new
+threads. The Rust standard library uses a *1:1* model of thread implementation,
+whereby a program uses one operating system thread per one language thread.
+There are crates that implement other models of threading that make different
+tradeoffs to the 1:1 model.
+
+### Creating a New Thread with `spawn`
+
+To create a new thread, we call the `thread::spawn` function and pass it a
+closure (we talked about closures in Chapter 13) containing the code we want to
+run in the new thread. The example in Listing 16-1 prints some text from a main
+thread and other text from a new thread:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-01/src/main.rs}}
+```
+
+<span class="caption">Listing 16-1: Creating a new thread to print one thing
+while the main thread prints something else</span>
+
+Note that when the main thread of a Rust program completes, all spawned threads
+are shut down, whether or not they have finished running. The output from this
+program might be a little different every time, but it will look similar to the
+following:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+hi number 1 from the main thread!
+hi number 1 from the spawned thread!
+hi number 2 from the main thread!
+hi number 2 from the spawned thread!
+hi number 3 from the main thread!
+hi number 3 from the spawned thread!
+hi number 4 from the main thread!
+hi number 4 from the spawned thread!
+hi number 5 from the spawned thread!
+```
+
+The calls to `thread::sleep` force a thread to stop its execution for a short
+duration, allowing a different thread to run. The threads will probably take
+turns, but that isn’t guaranteed: it depends on how your operating system
+schedules the threads. In this run, the main thread printed first, even though
+the print statement from the spawned thread appears first in the code. And even
+though we told the spawned thread to print until `i` is 9, it only got to 5
+before the main thread shut down.
+
+If you run this code and only see output from the main thread, or don’t see any
+overlap, try increasing the numbers in the ranges to create more opportunities
+for the operating system to switch between the threads.
+
+### Waiting for All Threads to Finish Using `join` Handles
+
+The code in Listing 16-1 not only stops the spawned thread prematurely most of
+the time due to the main thread ending, but because there is no guarantee on
+the order in which threads run, we also can’t guarantee that the spawned thread
+will get to run at all!
+
+We can fix the problem of the spawned thread not running or ending prematurely
+by saving the return value of `thread::spawn` in a variable. The return type of
+`thread::spawn` is `JoinHandle`. A `JoinHandle` is an owned value that, when we
+call the `join` method on it, will wait for its thread to finish. Listing 16-2
+shows how to use the `JoinHandle` of the thread we created in Listing 16-1 and
+call `join` to make sure the spawned thread finishes before `main` exits:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-02/src/main.rs}}
+```
+
+<span class="caption">Listing 16-2: Saving a `JoinHandle` from `thread::spawn`
+to guarantee the thread is run to completion</span>
+
+Calling `join` on the handle blocks the thread currently running until the
+thread represented by the handle terminates. *Blocking* a thread means that
+thread is prevented from performing work or exiting. Because we’ve put the call
+to `join` after the main thread’s `for` loop, running Listing 16-2 should
+produce output similar to this:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+hi number 1 from the main thread!
+hi number 2 from the main thread!
+hi number 1 from the spawned thread!
+hi number 3 from the main thread!
+hi number 2 from the spawned thread!
+hi number 4 from the main thread!
+hi number 3 from the spawned thread!
+hi number 4 from the spawned thread!
+hi number 5 from the spawned thread!
+hi number 6 from the spawned thread!
+hi number 7 from the spawned thread!
+hi number 8 from the spawned thread!
+hi number 9 from the spawned thread!
+```
+
+The two threads continue alternating, but the main thread waits because of the
+call to `handle.join()` and does not end until the spawned thread is finished.
+
+But let’s see what happens when we instead move `handle.join()` before the
+`for` loop in `main`, like this:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/no-listing-01-join-too-early/src/main.rs}}
+```
+
+The main thread will wait for the spawned thread to finish and then run its
+`for` loop, so the output won’t be interleaved anymore, as shown here:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+hi number 1 from the spawned thread!
+hi number 2 from the spawned thread!
+hi number 3 from the spawned thread!
+hi number 4 from the spawned thread!
+hi number 5 from the spawned thread!
+hi number 6 from the spawned thread!
+hi number 7 from the spawned thread!
+hi number 8 from the spawned thread!
+hi number 9 from the spawned thread!
+hi number 1 from the main thread!
+hi number 2 from the main thread!
+hi number 3 from the main thread!
+hi number 4 from the main thread!
+```
+
+Small details, such as where `join` is called, can affect whether or not your
+threads run at the same time.
+
+### Using `move` Closures with Threads
+
+We'll often use the `move` keyword with closures passed to `thread::spawn`
+because the closure will then take ownership of the values it uses from the
+environment, thus transferring ownership of those values from one thread to
+another. In the [“Capturing the Environment with Closures”][capture]<!-- ignore
+--> section of Chapter 13, we discussed `move` in the context of closures. Now,
+we’ll concentrate more on the interaction between `move` and `thread::spawn`.
+
+Notice in Listing 16-1 that the closure we pass to `thread::spawn` takes no
+arguments: we’re not using any data from the main thread in the spawned
+thread’s code. To use data from the main thread in the spawned thread, the
+spawned thread’s closure must capture the values it needs. Listing 16-3 shows
+an attempt to create a vector in the main thread and use it in the spawned
+thread. However, this won’t yet work, as you’ll see in a moment.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-03/src/main.rs}}
+```
+
+<span class="caption">Listing 16-3: Attempting to use a vector created by the
+main thread in another thread</span>
+
+The closure uses `v`, so it will capture `v` and make it part of the closure’s
+environment. Because `thread::spawn` runs this closure in a new thread, we
+should be able to access `v` inside that new thread. But when we compile this
+example, we get the following error:
+
+```console
+{{#include ../listings/ch16-fearless-concurrency/listing-16-03/output.txt}}
+```
+
+Rust *infers* how to capture `v`, and because `println!` only needs a reference
+to `v`, the closure tries to borrow `v`. However, there’s a problem: Rust can’t
+tell how long the spawned thread will run, so it doesn’t know if the reference
+to `v` will always be valid.
+
+Listing 16-4 provides a scenario that’s more likely to have a reference to `v`
+that won’t be valid:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-04/src/main.rs}}
+```
+
+<span class="caption">Listing 16-4: A thread with a closure that attempts to
+capture a reference to `v` from a main thread that drops `v`</span>
+
+If Rust allowed us to run this code, there’s a possibility the spawned thread
+would be immediately put in the background without running at all. The spawned
+thread has a reference to `v` inside, but the main thread immediately drops
+`v`, using the `drop` function we discussed in Chapter 15. Then, when the
+spawned thread starts to execute, `v` is no longer valid, so a reference to it
+is also invalid. Oh no!
+
+To fix the compiler error in Listing 16-3, we can use the error message’s
+advice:
+
+<!-- manual-regeneration
+after automatic regeneration, look at listings/ch16-fearless-concurrency/listing-16-03/output.txt and copy the relevant part
+-->
+
+```text
+help: to force the closure to take ownership of `v` (and any other referenced variables), use the `move` keyword
+ |
+6 | let handle = thread::spawn(move || {
+ | ++++
+```
+
+By adding the `move` keyword before the closure, we force the closure to take
+ownership of the values it’s using rather than allowing Rust to infer that it
+should borrow the values. The modification to Listing 16-3 shown in Listing
+16-5 will compile and run as we intend:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-05/src/main.rs}}
+```
+
+<span class="caption">Listing 16-5: Using the `move` keyword to force a closure
+to take ownership of the values it uses</span>
+
+We might be tempted to try the same thing to fix the code in Listing 16-4 where
+the main thread called `drop` by using a `move` closure. However, this fix will
+not work because what Listing 16-4 is trying to do is disallowed for a
+different reason. If we added `move` to the closure, we would move `v` into the
+closure’s environment, and we could no longer call `drop` on it in the main
+thread. We would get this compiler error instead:
+
+```console
+{{#include ../listings/ch16-fearless-concurrency/output-only-01-move-drop/output.txt}}
+```
+
+Rust’s ownership rules have saved us again! We got an error from the code in
+Listing 16-3 because Rust was being conservative and only borrowing `v` for the
+thread, which meant the main thread could theoretically invalidate the spawned
+thread’s reference. By telling Rust to move ownership of `v` to the spawned
+thread, we’re guaranteeing Rust that the main thread won’t use `v` anymore. If
+we change Listing 16-4 in the same way, we’re then violating the ownership
+rules when we try to use `v` in the main thread. The `move` keyword overrides
+Rust’s conservative default of borrowing; it doesn’t let us violate the
+ownership rules.
+
+With a basic understanding of threads and the thread API, let’s look at what we
+can *do* with threads.
+
+[capture]: ch13-01-closures.html#capturing-the-environment-with-closures
diff --git a/src/doc/book/src/ch16-02-message-passing.md b/src/doc/book/src/ch16-02-message-passing.md
new file mode 100644
index 000000000..e2f0b63c1
--- /dev/null
+++ b/src/doc/book/src/ch16-02-message-passing.md
@@ -0,0 +1,255 @@
+## Using Message Passing to Transfer Data Between Threads
+
+One increasingly popular approach to ensuring safe concurrency is *message
+passing*, where threads or actors communicate by sending each other messages
+containing data. Here’s the idea in a slogan from [the Go language
+documentation](https://golang.org/doc/effective_go.html#concurrency):
+“Do not communicate by sharing memory; instead, share memory by communicating.”
+
+To accomplish message-sending concurrency, Rust's standard library provides an
+implementation of *channels*. A channel is a general programming concept by
+which data is sent from one thread to another.
+
+You can imagine a channel in programming as being like a directional channel of
+water, such as a stream or a river. If you put something like a rubber duck
+into a river, it will travel downstream to the end of the waterway.
+
+A channel has two halves: a transmitter and a receiver. The transmitter half is
+the upstream location where you put rubber ducks into the river, and the
+receiver half is where the rubber duck ends up downstream. One part of your
+code calls methods on the transmitter with the data you want to send, and
+another part checks the receiving end for arriving messages. A channel is said
+to be *closed* if either the transmitter or receiver half is dropped.
+
+Here, we’ll work up to a program that has one thread to generate values and
+send them down a channel, and another thread that will receive the values and
+print them out. We’ll be sending simple values between threads using a channel
+to illustrate the feature. Once you’re familiar with the technique, you could
+use channels for any threads that need to communicate between each other, such
+as a chat system or a system where many threads perform parts of a calculation
+and send the parts to one thread that aggregates the results.
+
+First, in Listing 16-6, we’ll create a channel but not do anything with it.
+Note that this won’t compile yet because Rust can’t tell what type of values we
+want to send over the channel.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-06/src/main.rs}}
+```
+
+<span class="caption">Listing 16-6: Creating a channel and assigning the two
+halves to `tx` and `rx`</span>
+
+We create a new channel using the `mpsc::channel` function; `mpsc` stands for
+*multiple producer, single consumer*. In short, the way Rust’s standard library
+implements channels means a channel can have multiple *sending* ends that
+produce values but only one *receiving* end that consumes those values. Imagine
+multiple streams flowing together into one big river: everything sent down any
+of the streams will end up in one river at the end. We’ll start with a single
+producer for now, but we’ll add multiple producers when we get this example
+working.
+
+The `mpsc::channel` function returns a tuple, the first element of which is the
+sending end--the transmitter--and the second element is the receiving end--the
+receiver. The abbreviations `tx` and `rx` are traditionally used in many fields
+for *transmitter* and *receiver* respectively, so we name our variables as such
+to indicate each end. We’re using a `let` statement with a pattern that
+destructures the tuples; we’ll discuss the use of patterns in `let` statements
+and destructuring in Chapter 18. For now, know that using a `let` statement
+this way is a convenient approach to extract the pieces of the tuple returned
+by `mpsc::channel`.
+
+Let’s move the transmitting end into a spawned thread and have it send one
+string so the spawned thread is communicating with the main thread, as shown in
+Listing 16-7. This is like putting a rubber duck in the river upstream or
+sending a chat message from one thread to another.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-07/src/main.rs}}
+```
+
+<span class="caption">Listing 16-7: Moving `tx` to a spawned thread and sending
+“hi”</span>
+
+Again, we’re using `thread::spawn` to create a new thread and then using `move`
+to move `tx` into the closure so the spawned thread owns `tx`. The spawned
+thread needs to own the transmitter to be able to send messages through the
+channel. The transmitter has a `send` method that takes the value we want to
+send. The `send` method returns a `Result<T, E>` type, so if the receiver has
+already been dropped and there’s nowhere to send a value, the send operation
+will return an error. In this example, we’re calling `unwrap` to panic in case
+of an error. But in a real application, we would handle it properly: return to
+Chapter 9 to review strategies for proper error handling.
+
+In Listing 16-8, we’ll get the value from the receiver in the main thread. This
+is like retrieving the rubber duck from the water at the end of the river or
+receiving a chat message.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-08/src/main.rs}}
+```
+
+<span class="caption">Listing 16-8: Receiving the value “hi” in the main thread
+and printing it</span>
+
+The receiver has two useful methods: `recv` and `try_recv`. We’re using `recv`,
+short for *receive*, which will block the main thread’s execution and wait
+until a value is sent down the channel. Once a value is sent, `recv` will
+return it in a `Result<T, E>`. When the transmitter closes, `recv` will return
+an error to signal that no more values will be coming.
+
+The `try_recv` method doesn’t block, but will instead return a `Result<T, E>`
+immediately: an `Ok` value holding a message if one is available and an `Err`
+value if there aren’t any messages this time. Using `try_recv` is useful if
+this thread has other work to do while waiting for messages: we could write a
+loop that calls `try_recv` every so often, handles a message if one is
+available, and otherwise does other work for a little while until checking
+again.
+
+We’ve used `recv` in this example for simplicity; we don’t have any other work
+for the main thread to do other than wait for messages, so blocking the main
+thread is appropriate.
+
+When we run the code in Listing 16-8, we’ll see the value printed from the main
+thread:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+Got: hi
+```
+
+Perfect!
+
+### Channels and Ownership Transference
+
+The ownership rules play a vital role in message sending because they help you
+write safe, concurrent code. Preventing errors in concurrent programming is the
+advantage of thinking about ownership throughout your Rust programs. Let’s do
+an experiment to show how channels and ownership work together to prevent
+problems: we’ll try to use a `val` value in the spawned thread *after* we’ve
+sent it down the channel. Try compiling the code in Listing 16-9 to see why
+this code isn’t allowed:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-09/src/main.rs}}
+```
+
+<span class="caption">Listing 16-9: Attempting to use `val` after we’ve sent it
+down the channel</span>
+
+Here, we try to print `val` after we’ve sent it down the channel via `tx.send`.
+Allowing this would be a bad idea: once the value has been sent to another
+thread, that thread could modify or drop it before we try to use the value
+again. Potentially, the other thread’s modifications could cause errors or
+unexpected results due to inconsistent or nonexistent data. However, Rust gives
+us an error if we try to compile the code in Listing 16-9:
+
+```console
+{{#include ../listings/ch16-fearless-concurrency/listing-16-09/output.txt}}
+```
+
+Our concurrency mistake has caused a compile time error. The `send` function
+takes ownership of its parameter, and when the value is moved, the receiver
+takes ownership of it. This stops us from accidentally using the value again
+after sending it; the ownership system checks that everything is okay.
+
+### Sending Multiple Values and Seeing the Receiver Waiting
+
+The code in Listing 16-8 compiled and ran, but it didn’t clearly show us that
+two separate threads were talking to each other over the channel. In Listing
+16-10 we’ve made some modifications that will prove the code in Listing 16-8 is
+running concurrently: the spawned thread will now send multiple messages and
+pause for a second between each message.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-10/src/main.rs}}
+```
+
+<span class="caption">Listing 16-10: Sending multiple messages and pausing
+between each</span>
+
+This time, the spawned thread has a vector of strings that we want to send to
+the main thread. We iterate over them, sending each individually, and pause
+between each by calling the `thread::sleep` function with a `Duration` value of
+1 second.
+
+In the main thread, we’re not calling the `recv` function explicitly anymore:
+instead, we’re treating `rx` as an iterator. For each value received, we’re
+printing it. When the channel is closed, iteration will end.
+
+When running the code in Listing 16-10, you should see the following output
+with a 1-second pause in between each line:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+Got: hi
+Got: from
+Got: the
+Got: thread
+```
+
+Because we don’t have any code that pauses or delays in the `for` loop in the
+main thread, we can tell that the main thread is waiting to receive values from
+the spawned thread.
+
+### Creating Multiple Producers by Cloning the Transmitter
+
+Earlier we mentioned that `mpsc` was an acronym for *multiple producer,
+single consumer*. Let’s put `mpsc` to use and expand the code in Listing 16-10
+to create multiple threads that all send values to the same receiver. We can do
+so by cloning the transmitter, as shown in Listing 16-11:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 16-11: Sending multiple messages from multiple
+producers</span>
+
+This time, before we create the first spawned thread, we call `clone` on the
+transmitter. This will give us a new transmitter we can pass to the first
+spawned thread. We pass the original transmitter to a second spawned thread.
+This gives us two threads, each sending different messages to the one receiver.
+
+When you run the code, your output should look something like this:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+Got: hi
+Got: more
+Got: from
+Got: messages
+Got: for
+Got: the
+Got: thread
+Got: you
+```
+
+You might see the values in another order, depending on your system. This is
+what makes concurrency interesting as well as difficult. If you experiment with
+`thread::sleep`, giving it various values in the different threads, each run
+will be more nondeterministic and create different output each time.
+
+Now that we’ve looked at how channels work, let’s look at a different method of
+concurrency.
diff --git a/src/doc/book/src/ch16-03-shared-state.md b/src/doc/book/src/ch16-03-shared-state.md
new file mode 100644
index 000000000..41dccfa13
--- /dev/null
+++ b/src/doc/book/src/ch16-03-shared-state.md
@@ -0,0 +1,249 @@
+## Shared-State Concurrency
+
+Message passing is a fine way of handling concurrency, but it’s not the only
+one. Another method would be for multiple threads to access the same shared
+data. Consider this part of the slogan from the Go language documentation
+again: “do not communicate by sharing memory.”
+
+What would communicating by sharing memory look like? In addition, why would
+message-passing enthusiasts caution not to use memory sharing?
+
+In a way, channels in any programming language are similar to single ownership,
+because once you transfer a value down a channel, you should no longer use that
+value. Shared memory concurrency is like multiple ownership: multiple threads
+can access the same memory location at the same time. As you saw in Chapter 15,
+where smart pointers made multiple ownership possible, multiple ownership can
+add complexity because these different owners need managing. Rust’s type system
+and ownership rules greatly assist in getting this management correct. For an
+example, let’s look at mutexes, one of the more common concurrency primitives
+for shared memory.
+
+### Using Mutexes to Allow Access to Data from One Thread at a Time
+
+*Mutex* is an abbreviation for *mutual exclusion*, as in, a mutex allows only
+one thread to access some data at any given time. To access the data in a
+mutex, a thread must first signal that it wants access by asking to acquire the
+mutex’s *lock*. The lock is a data structure that is part of the mutex that
+keeps track of who currently has exclusive access to the data. Therefore, the
+mutex is described as *guarding* the data it holds via the locking system.
+
+Mutexes have a reputation for being difficult to use because you have to
+remember two rules:
+
+* You must attempt to acquire the lock before using the data.
+* When you’re done with the data that the mutex guards, you must unlock the
+ data so other threads can acquire the lock.
+
+For a real-world metaphor for a mutex, imagine a panel discussion at a
+conference with only one microphone. Before a panelist can speak, they have to
+ask or signal that they want to use the microphone. When they get the
+microphone, they can talk for as long as they want to and then hand the
+microphone to the next panelist who requests to speak. If a panelist forgets to
+hand the microphone off when they’re finished with it, no one else is able to
+speak. If management of the shared microphone goes wrong, the panel won’t work
+as planned!
+
+Management of mutexes can be incredibly tricky to get right, which is why so
+many people are enthusiastic about channels. However, thanks to Rust’s type
+system and ownership rules, you can’t get locking and unlocking wrong.
+
+#### The API of `Mutex<T>`
+
+As an example of how to use a mutex, let’s start by using a mutex in a
+single-threaded context, as shown in Listing 16-12:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-12/src/main.rs}}
+```
+
+<span class="caption">Listing 16-12: Exploring the API of `Mutex<T>` in a
+single-threaded context for simplicity</span>
+
+As with many types, we create a `Mutex<T>` using the associated function `new`.
+To access the data inside the mutex, we use the `lock` method to acquire the
+lock. This call will block the current thread so it can’t do any work until
+it’s our turn to have the lock.
+
+The call to `lock` would fail if another thread holding the lock panicked. In
+that case, no one would ever be able to get the lock, so we’ve chosen to
+`unwrap` and have this thread panic if we’re in that situation.
+
+After we’ve acquired the lock, we can treat the return value, named `num` in
+this case, as a mutable reference to the data inside. The type system ensures
+that we acquire a lock before using the value in `m`. The type of `m` is
+`Mutex<i32>`, not `i32`, so we *must* call `lock` to be able to use the `i32`
+value. We can’t forget; the type system won’t let us access the inner `i32`
+otherwise.
+
+As you might suspect, `Mutex<T>` is a smart pointer. More accurately, the call
+to `lock` *returns* a smart pointer called `MutexGuard`, wrapped in a
+`LockResult` that we handled with the call to `unwrap`. The `MutexGuard` smart
+pointer implements `Deref` to point at our inner data; the smart pointer also
+has a `Drop` implementation that releases the lock automatically when a
+`MutexGuard` goes out of scope, which happens at the end of the inner scope. As
+a result, we don’t risk forgetting to release the lock and blocking the mutex
+from being used by other threads, because the lock release happens
+automatically.
+
+After dropping the lock, we can print the mutex value and see that we were able
+to change the inner `i32` to 6.
+
+#### Sharing a `Mutex<T>` Between Multiple Threads
+
+Now, let’s try to share a value between multiple threads using `Mutex<T>`.
+We’ll spin up 10 threads and have them each increment a counter value by 1, so
+the counter goes from 0 to 10. The next example in Listing 16-13 will have
+a compiler error, and we’ll use that error to learn more about using
+`Mutex<T>` and how Rust helps us use it correctly.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-13/src/main.rs}}
+```
+
+<span class="caption">Listing 16-13: Ten threads each increment a counter
+guarded by a `Mutex<T>`</span>
+
+We create a `counter` variable to hold an `i32` inside a `Mutex<T>`, as we did
+in Listing 16-12. Next, we create 10 threads by iterating over a range of
+numbers. We use `thread::spawn` and give all the threads the same closure: one
+that moves the counter into the thread, acquires a lock on the `Mutex<T>` by
+calling the `lock` method, and then adds 1 to the value in the mutex. When a
+thread finishes running its closure, `num` will go out of scope and release the
+lock so another thread can acquire it.
+
+In the main thread, we collect all the join handles. Then, as we did in Listing
+16-2, we call `join` on each handle to make sure all the threads finish. At
+that point, the main thread will acquire the lock and print the result of this
+program.
+
+We hinted that this example wouldn’t compile. Now let’s find out why!
+
+```console
+{{#include ../listings/ch16-fearless-concurrency/listing-16-13/output.txt}}
+```
+
+The error message states that the `counter` value was moved in the previous
+iteration of the loop. Rust is telling us that we can’t move the ownership
+of lock `counter` into multiple threads. Let’s fix the compiler error with a
+multiple-ownership method we discussed in Chapter 15.
+
+#### Multiple Ownership with Multiple Threads
+
+In Chapter 15, we gave a value multiple owners by using the smart pointer
+`Rc<T>` to create a reference counted value. Let’s do the same here and see
+what happens. We’ll wrap the `Mutex<T>` in `Rc<T>` in Listing 16-14 and clone
+the `Rc<T>` before moving ownership to the thread.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-14/src/main.rs}}
+```
+
+<span class="caption">Listing 16-14: Attempting to use `Rc<T>` to allow
+multiple threads to own the `Mutex<T>`</span>
+
+Once again, we compile and get... different errors! The compiler is teaching us
+a lot.
+
+```console
+{{#include ../listings/ch16-fearless-concurrency/listing-16-14/output.txt}}
+```
+
+Wow, that error message is very wordy! Here’s the important part to focus on:
+`` `Rc<Mutex<i32>>` cannot be sent between threads safely ``. The compiler is
+also telling us the reason why: ``the trait `Send` is not implemented for
+`Rc<Mutex<i32>>` ``. We’ll talk about `Send` in the next section: it’s one of
+the traits that ensures the types we use with threads are meant for use in
+concurrent situations.
+
+Unfortunately, `Rc<T>` is not safe to share across threads. When `Rc<T>`
+manages the reference count, it adds to the count for each call to `clone` and
+subtracts from the count when each clone is dropped. But it doesn’t use any
+concurrency primitives to make sure that changes to the count can’t be
+interrupted by another thread. This could lead to wrong counts—subtle bugs that
+could in turn lead to memory leaks or a value being dropped before we’re done
+with it. What we need is a type exactly like `Rc<T>` but one that makes changes
+to the reference count in a thread-safe way.
+
+#### Atomic Reference Counting with `Arc<T>`
+
+Fortunately, `Arc<T>` *is* a type like `Rc<T>` that is safe to use in
+concurrent situations. The *a* stands for *atomic*, meaning it’s an *atomically
+reference counted* type. Atomics are an additional kind of concurrency
+primitive that we won’t cover in detail here: see the standard library
+documentation for [`std::sync::atomic`][atomic]<!-- ignore --> for more
+details. At this point, you just need to know that atomics work like primitive
+types but are safe to share across threads.
+
+You might then wonder why all primitive types aren’t atomic and why standard
+library types aren’t implemented to use `Arc<T>` by default. The reason is that
+thread safety comes with a performance penalty that you only want to pay when
+you really need to. If you’re just performing operations on values within a
+single thread, your code can run faster if it doesn’t have to enforce the
+guarantees atomics provide.
+
+Let’s return to our example: `Arc<T>` and `Rc<T>` have the same API, so we fix
+our program by changing the `use` line, the call to `new`, and the call to
+`clone`. The code in Listing 16-15 will finally compile and run:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch16-fearless-concurrency/listing-16-15/src/main.rs}}
+```
+
+<span class="caption">Listing 16-15: Using an `Arc<T>` to wrap the `Mutex<T>`
+to be able to share ownership across multiple threads</span>
+
+This code will print the following:
+
+<!-- Not extracting output because changes to this output aren't significant;
+the changes are likely to be due to the threads running differently rather than
+changes in the compiler -->
+
+```text
+Result: 10
+```
+
+We did it! We counted from 0 to 10, which may not seem very impressive, but it
+did teach us a lot about `Mutex<T>` and thread safety. You could also use this
+program’s structure to do more complicated operations than just incrementing a
+counter. Using this strategy, you can divide a calculation into independent
+parts, split those parts across threads, and then use a `Mutex<T>` to have each
+thread update the final result with its part.
+
+Note that if you are doing simple numerical operations, there are types simpler
+than `Mutex<T>` types provided by the [`std::sync::atomic` module of the
+standard library][atomic]. These types provide safe, concurrent, atomic access
+to primitive types. We chose to use `Mutex<T>` with a primitive type for this
+example so we could concentrate on how `Mutex<T>` works.
+
+### Similarities Between `RefCell<T>`/`Rc<T>` and `Mutex<T>`/`Arc<T>`
+
+You might have noticed that `counter` is immutable but we could get a mutable
+reference to the value inside it; this means `Mutex<T>` provides interior
+mutability, as the `Cell` family does. In the same way we used `RefCell<T>` in
+Chapter 15 to allow us to mutate contents inside an `Rc<T>`, we use `Mutex<T>`
+to mutate contents inside an `Arc<T>`.
+
+Another detail to note is that Rust can’t protect you from all kinds of logic
+errors when you use `Mutex<T>`. Recall in Chapter 15 that using `Rc<T>` came
+with the risk of creating reference cycles, where two `Rc<T>` values refer to
+each other, causing memory leaks. Similarly, `Mutex<T>` comes with the risk of
+creating *deadlocks*. These occur when an operation needs to lock two resources
+and two threads have each acquired one of the locks, causing them to wait for
+each other forever. If you’re interested in deadlocks, try creating a Rust
+program that has a deadlock; then research deadlock mitigation strategies for
+mutexes in any language and have a go at implementing them in Rust. The
+standard library API documentation for `Mutex<T>` and `MutexGuard` offers
+useful information.
+
+We’ll round out this chapter by talking about the `Send` and `Sync` traits and
+how we can use them with custom types.
+
+[atomic]: ../std/sync/atomic/index.html
diff --git a/src/doc/book/src/ch16-04-extensible-concurrency-sync-and-send.md b/src/doc/book/src/ch16-04-extensible-concurrency-sync-and-send.md
new file mode 100644
index 000000000..4586b8d2c
--- /dev/null
+++ b/src/doc/book/src/ch16-04-extensible-concurrency-sync-and-send.md
@@ -0,0 +1,90 @@
+## Extensible Concurrency with the `Sync` and `Send` Traits
+
+Interestingly, the Rust language has *very* few concurrency features. Almost
+every concurrency feature we’ve talked about so far in this chapter has been
+part of the standard library, not the language. Your options for handling
+concurrency are not limited to the language or the standard library; you can
+write your own concurrency features or use those written by others.
+
+However, two concurrency concepts are embedded in the language: the
+`std::marker` traits `Sync` and `Send`.
+
+### Allowing Transference of Ownership Between Threads with `Send`
+
+The `Send` marker trait indicates that ownership of values of the type
+implementing `Send` can be transferred between threads. Almost every Rust type
+is `Send`, but there are some exceptions, including `Rc<T>`: this cannot be
+`Send` because if you cloned an `Rc<T>` value and tried to transfer ownership
+of the clone to another thread, both threads might update the reference count
+at the same time. For this reason, `Rc<T>` is implemented for use in
+single-threaded situations where you don’t want to pay the thread-safe
+performance penalty.
+
+Therefore, Rust’s type system and trait bounds ensure that you can never
+accidentally send an `Rc<T>` value across threads unsafely. When we tried to do
+this in Listing 16-14, we got the error `the trait Send is not implemented for
+Rc<Mutex<i32>>`. When we switched to `Arc<T>`, which is `Send`, the code
+compiled.
+
+Any type composed entirely of `Send` types is automatically marked as `Send` as
+well. Almost all primitive types are `Send`, aside from raw pointers, which
+we’ll discuss in Chapter 19.
+
+### Allowing Access from Multiple Threads with `Sync`
+
+The `Sync` marker trait indicates that it is safe for the type implementing
+`Sync` to be referenced from multiple threads. In other words, any type `T` is
+`Sync` if `&T` (an immutable reference to `T`) is `Send`, meaning the reference
+can be sent safely to another thread. Similar to `Send`, primitive types are
+`Sync`, and types composed entirely of types that are `Sync` are also `Sync`.
+
+The smart pointer `Rc<T>` is also not `Sync` for the same reasons that it’s not
+`Send`. The `RefCell<T>` type (which we talked about in Chapter 15) and the
+family of related `Cell<T>` types are not `Sync`. The implementation of borrow
+checking that `RefCell<T>` does at runtime is not thread-safe. The smart
+pointer `Mutex<T>` is `Sync` and can be used to share access with multiple
+threads as you saw in the [“Sharing a `Mutex<T>` Between Multiple
+Threads”][sharing-a-mutext-between-multiple-threads]<!-- ignore --> section.
+
+### Implementing `Send` and `Sync` Manually Is Unsafe
+
+Because types that are made up of `Send` and `Sync` traits are automatically
+also `Send` and `Sync`, we don’t have to implement those traits manually. As
+marker traits, they don’t even have any methods to implement. They’re just
+useful for enforcing invariants related to concurrency.
+
+Manually implementing these traits involves implementing unsafe Rust code.
+We’ll talk about using unsafe Rust code in Chapter 19; for now, the important
+information is that building new concurrent types not made up of `Send` and
+`Sync` parts requires careful thought to uphold the safety guarantees. [“The
+Rustonomicon”][nomicon] has more information about these guarantees and how to
+uphold them.
+
+## Summary
+
+This isn’t the last you’ll see of concurrency in this book: the project in
+Chapter 20 will use the concepts in this chapter in a more realistic situation
+than the smaller examples discussed here.
+
+As mentioned earlier, because very little of how Rust handles concurrency is
+part of the language, many concurrency solutions are implemented as crates.
+These evolve more quickly than the standard library, so be sure to search
+online for the current, state-of-the-art crates to use in multithreaded
+situations.
+
+The Rust standard library provides channels for message passing and smart
+pointer types, such as `Mutex<T>` and `Arc<T>`, that are safe to use in
+concurrent contexts. The type system and the borrow checker ensure that the
+code using these solutions won’t end up with data races or invalid references.
+Once you get your code to compile, you can rest assured that it will happily
+run on multiple threads without the kinds of hard-to-track-down bugs common in
+other languages. Concurrent programming is no longer a concept to be afraid of:
+go forth and make your programs concurrent, fearlessly!
+
+Next, we’ll talk about idiomatic ways to model problems and structure solutions
+as your Rust programs get bigger. In addition, we’ll discuss how Rust’s idioms
+relate to those you might be familiar with from object-oriented programming.
+
+[sharing-a-mutext-between-multiple-threads]:
+ch16-03-shared-state.html#sharing-a-mutext-between-multiple-threads
+[nomicon]: ../nomicon/index.html
diff --git a/src/doc/book/src/ch17-00-oop.md b/src/doc/book/src/ch17-00-oop.md
new file mode 100644
index 000000000..e20f6583f
--- /dev/null
+++ b/src/doc/book/src/ch17-00-oop.md
@@ -0,0 +1,13 @@
+# Object-Oriented Programming Features of Rust
+
+Object-oriented programming (OOP) is a way of modeling programs. Objects as a
+programmatic concept were introduced in the programming language Simula in the
+1960s. Those objects influenced Alan Kay’s programming architecture in which
+objects pass messages to each other. To describe this architecture, he coined
+the term *object-oriented programming* in 1967. Many competing definitions
+describe what OOP is, and by some of these definitions Rust is object-oriented,
+but by others it is not. In this chapter, we’ll explore certain characteristics
+that are commonly considered object-oriented and how those characteristics
+translate to idiomatic Rust. We’ll then show you how to implement an
+object-oriented design pattern in Rust and discuss the trade-offs of doing so
+versus implementing a solution using some of Rust’s strengths instead.
diff --git a/src/doc/book/src/ch17-01-what-is-oo.md b/src/doc/book/src/ch17-01-what-is-oo.md
new file mode 100644
index 000000000..a47afebd9
--- /dev/null
+++ b/src/doc/book/src/ch17-01-what-is-oo.md
@@ -0,0 +1,152 @@
+## Characteristics of Object-Oriented Languages
+
+There is no consensus in the programming community about what features a
+language must have to be considered object-oriented. Rust is influenced by many
+programming paradigms, including OOP; for example, we explored the features
+that came from functional programming in Chapter 13. Arguably, OOP languages
+share certain common characteristics, namely objects, encapsulation, and
+inheritance. Let’s look at what each of those characteristics means and whether
+Rust supports it.
+
+### Objects Contain Data and Behavior
+
+The book *Design Patterns: Elements of Reusable Object-Oriented Software* by
+Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Addison-Wesley
+Professional, 1994), colloquially referred to as *The Gang of Four* book, is a
+catalog of object-oriented design patterns. It defines OOP this way:
+
+> Object-oriented programs are made up of objects. An *object* packages both
+> data and the procedures that operate on that data. The procedures are
+> typically called *methods* or *operations*.
+
+Using this definition, Rust is object-oriented: structs and enums have data,
+and `impl` blocks provide methods on structs and enums. Even though structs and
+enums with methods aren’t *called* objects, they provide the same
+functionality, according to the Gang of Four’s definition of objects.
+
+### Encapsulation that Hides Implementation Details
+
+Another aspect commonly associated with OOP is the idea of *encapsulation*,
+which means that the implementation details of an object aren’t accessible to
+code using that object. Therefore, the only way to interact with an object is
+through its public API; code using the object shouldn’t be able to reach into
+the object’s internals and change data or behavior directly. This enables the
+programmer to change and refactor an object’s internals without needing to
+change the code that uses the object.
+
+We discussed how to control encapsulation in Chapter 7: we can use the `pub`
+keyword to decide which modules, types, functions, and methods in our code
+should be public, and by default everything else is private. For example, we
+can define a struct `AveragedCollection` that has a field containing a vector
+of `i32` values. The struct can also have a field that contains the average of
+the values in the vector, meaning the average doesn’t have to be computed
+on demand whenever anyone needs it. In other words, `AveragedCollection` will
+cache the calculated average for us. Listing 17-1 has the definition of the
+`AveragedCollection` struct:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-01/src/lib.rs}}
+```
+
+<span class="caption">Listing 17-1: An `AveragedCollection` struct that
+maintains a list of integers and the average of the items in the
+collection</span>
+
+The struct is marked `pub` so that other code can use it, but the fields within
+the struct remain private. This is important in this case because we want to
+ensure that whenever a value is added or removed from the list, the average is
+also updated. We do this by implementing `add`, `remove`, and `average` methods
+on the struct, as shown in Listing 17-2:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-02/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-2: Implementations of the public methods
+`add`, `remove`, and `average` on `AveragedCollection`</span>
+
+The public methods `add`, `remove`, and `average` are the only ways to access
+or modify data in an instance of `AveragedCollection`. When an item is added
+to `list` using the `add` method or removed using the `remove` method, the
+implementations of each call the private `update_average` method that handles
+updating the `average` field as well.
+
+We leave the `list` and `average` fields private so there is no way for
+external code to add or remove items to or from the `list` field directly;
+otherwise, the `average` field might become out of sync when the `list`
+changes. The `average` method returns the value in the `average` field,
+allowing external code to read the `average` but not modify it.
+
+Because we’ve encapsulated the implementation details of the struct
+`AveragedCollection`, we can easily change aspects, such as the data structure,
+in the future. For instance, we could use a `HashSet<i32>` instead of a
+`Vec<i32>` for the `list` field. As long as the signatures of the `add`,
+`remove`, and `average` public methods stay the same, code using
+`AveragedCollection` wouldn’t need to change. If we made `list` public instead,
+this wouldn’t necessarily be the case: `HashSet<i32>` and `Vec<i32>` have
+different methods for adding and removing items, so the external code would
+likely have to change if it were modifying `list` directly.
+
+If encapsulation is a required aspect for a language to be considered
+object-oriented, then Rust meets that requirement. The option to use `pub` or
+not for different parts of code enables encapsulation of implementation details.
+
+### Inheritance as a Type System and as Code Sharing
+
+*Inheritance* is a mechanism whereby an object can inherit elements from
+another object’s definition, thus gaining the parent object’s data and behavior
+without you having to define them again.
+
+If a language must have inheritance to be an object-oriented language, then
+Rust is not one. There is no way to define a struct that inherits the parent
+struct’s fields and method implementations without using a macro.
+
+However, if you’re used to having inheritance in your programming toolbox, you
+can use other solutions in Rust, depending on your reason for reaching for
+inheritance in the first place.
+
+You would choose inheritance for two main reasons. One is for reuse of code:
+you can implement particular behavior for one type, and inheritance enables you
+to reuse that implementation for a different type. You can do this in a limited
+way in Rust code using default trait method implementations, which you saw in
+Listing 10-14 when we added a default implementation of the `summarize` method
+on the `Summary` trait. Any type implementing the `Summary` trait would have
+the `summarize` method available on it without any further code. This is
+similar to a parent class having an implementation of a method and an
+inheriting child class also having the implementation of the method. We can
+also override the default implementation of the `summarize` method when we
+implement the `Summary` trait, which is similar to a child class overriding the
+implementation of a method inherited from a parent class.
+
+The other reason to use inheritance relates to the type system: to enable a
+child type to be used in the same places as the parent type. This is also
+called *polymorphism*, which means that you can substitute multiple objects for
+each other at runtime if they share certain characteristics.
+
+> ### Polymorphism
+>
+> To many people, polymorphism is synonymous with inheritance. But it’s
+> actually a more general concept that refers to code that can work with data
+> of multiple types. For inheritance, those types are generally subclasses.
+>
+> Rust instead uses generics to abstract over different possible types and
+> trait bounds to impose constraints on what those types must provide. This is
+> sometimes called *bounded parametric polymorphism*.
+
+Inheritance has recently fallen out of favor as a programming design solution
+in many programming languages because it’s often at risk of sharing more code
+than necessary. Subclasses shouldn’t always share all characteristics of their
+parent class but will do so with inheritance. This can make a program’s design
+less flexible. It also introduces the possibility of calling methods on
+subclasses that don’t make sense or that cause errors because the methods don’t
+apply to the subclass. In addition, some languages will only allow single
+inheritance (meaning a subclass can only inherit from one class), further
+restricting the flexibility of a program’s design.
+
+For these reasons, Rust takes the different approach of using trait objects
+instead of inheritance. Let’s look at how trait objects enable polymorphism in
+Rust.
diff --git a/src/doc/book/src/ch17-02-trait-objects.md b/src/doc/book/src/ch17-02-trait-objects.md
new file mode 100644
index 000000000..2d3fea24a
--- /dev/null
+++ b/src/doc/book/src/ch17-02-trait-objects.md
@@ -0,0 +1,256 @@
+## Using Trait Objects That Allow for Values of Different Types
+
+In Chapter 8, we mentioned that one limitation of vectors is that they can
+store elements of only one type. We created a workaround in Listing 8-9 where
+we defined a `SpreadsheetCell` enum that had variants to hold integers, floats,
+and text. This meant we could store different types of data in each cell and
+still have a vector that represented a row of cells. This is a perfectly good
+solution when our interchangeable items are a fixed set of types that we know
+when our code is compiled.
+
+However, sometimes we want our library user to be able to extend the set of
+types that are valid in a particular situation. To show how we might achieve
+this, we’ll create an example graphical user interface (GUI) tool that iterates
+through a list of items, calling a `draw` method on each one to draw it to the
+screen—a common technique for GUI tools. We’ll create a library crate called
+`gui` that contains the structure of a GUI library. This crate might include
+some types for people to use, such as `Button` or `TextField`. In addition,
+`gui` users will want to create their own types that can be drawn: for
+instance, one programmer might add an `Image` and another might add a
+`SelectBox`.
+
+We won’t implement a fully fledged GUI library for this example but will show
+how the pieces would fit together. At the time of writing the library, we can’t
+know and define all the types other programmers might want to create. But we do
+know that `gui` needs to keep track of many values of different types, and it
+needs to call a `draw` method on each of these differently typed values. It
+doesn’t need to know exactly what will happen when we call the `draw` method,
+just that the value will have that method available for us to call.
+
+To do this in a language with inheritance, we might define a class named
+`Component` that has a method named `draw` on it. The other classes, such as
+`Button`, `Image`, and `SelectBox`, would inherit from `Component` and thus
+inherit the `draw` method. They could each override the `draw` method to define
+their custom behavior, but the framework could treat all of the types as if
+they were `Component` instances and call `draw` on them. But because Rust
+doesn’t have inheritance, we need another way to structure the `gui` library to
+allow users to extend it with new types.
+
+### Defining a Trait for Common Behavior
+
+To implement the behavior we want `gui` to have, we’ll define a trait named
+`Draw` that will have one method named `draw`. Then we can define a vector that
+takes a *trait object*. A trait object points to both an instance of a type
+implementing our specified trait and a table used to look up trait methods on
+that type at runtime. We create a trait object by specifying some sort of
+pointer, such as a `&` reference or a `Box<T>` smart pointer, then the `dyn`
+keyword, and then specifying the relevant trait. (We’ll talk about the reason
+trait objects must use a pointer in Chapter 19 in the section [“Dynamically
+Sized Types and the `Sized` Trait.”][dynamically-sized]<!-- ignore -->) We can
+use trait objects in place of a generic or concrete type. Wherever we use a
+trait object, Rust’s type system will ensure at compile time that any value
+used in that context will implement the trait object’s trait. Consequently, we
+don’t need to know all the possible types at compile time.
+
+We’ve mentioned that, in Rust, we refrain from calling structs and enums
+“objects” to distinguish them from other languages’ objects. In a struct or
+enum, the data in the struct fields and the behavior in `impl` blocks are
+separated, whereas in other languages, the data and behavior combined into one
+concept is often labeled an object. However, trait objects *are* more like
+objects in other languages in the sense that they combine data and behavior.
+But trait objects differ from traditional objects in that we can’t add data to
+a trait object. Trait objects aren’t as generally useful as objects in other
+languages: their specific purpose is to allow abstraction across common
+behavior.
+
+Listing 17-3 shows how to define a trait named `Draw` with one method named
+`draw`:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-03/src/lib.rs}}
+```
+
+<span class="caption">Listing 17-3: Definition of the `Draw` trait</span>
+
+This syntax should look familiar from our discussions on how to define traits
+in Chapter 10. Next comes some new syntax: Listing 17-4 defines a struct named
+`Screen` that holds a vector named `components`. This vector is of type
+`Box<dyn Draw>`, which is a trait object; it’s a stand-in for any type inside
+a `Box` that implements the `Draw` trait.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-04/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-4: Definition of the `Screen` struct with a
+`components` field holding a vector of trait objects that implement the `Draw`
+trait</span>
+
+On the `Screen` struct, we’ll define a method named `run` that will call the
+`draw` method on each of its `components`, as shown in Listing 17-5:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-05/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-5: A `run` method on `Screen` that calls the
+`draw` method on each component</span>
+
+This works differently from defining a struct that uses a generic type
+parameter with trait bounds. A generic type parameter can only be substituted
+with one concrete type at a time, whereas trait objects allow for multiple
+concrete types to fill in for the trait object at runtime. For example, we
+could have defined the `Screen` struct using a generic type and a trait bound
+as in Listing 17-6:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-06/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-6: An alternate implementation of the `Screen`
+struct and its `run` method using generics and trait bounds</span>
+
+This restricts us to a `Screen` instance that has a list of components all of
+type `Button` or all of type `TextField`. If you’ll only ever have homogeneous
+collections, using generics and trait bounds is preferable because the
+definitions will be monomorphized at compile time to use the concrete types.
+
+On the other hand, with the method using trait objects, one `Screen` instance
+can hold a `Vec<T>` that contains a `Box<Button>` as well as a
+`Box<TextField>`. Let’s look at how this works, and then we’ll talk about the
+runtime performance implications.
+
+### Implementing the Trait
+
+Now we’ll add some types that implement the `Draw` trait. We’ll provide the
+`Button` type. Again, actually implementing a GUI library is beyond the scope
+of this book, so the `draw` method won’t have any useful implementation in its
+body. To imagine what the implementation might look like, a `Button` struct
+might have fields for `width`, `height`, and `label`, as shown in Listing 17-7:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-07/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-7: A `Button` struct that implements the
+`Draw` trait</span>
+
+The `width`, `height`, and `label` fields on `Button` will differ from the
+fields on other components; for example, a `TextField` type might have those
+same fields plus a `placeholder` field. Each of the types we want to draw on
+the screen will implement the `Draw` trait but will use different code in the
+`draw` method to define how to draw that particular type, as `Button` has here
+(without the actual GUI code, as mentioned). The `Button` type, for instance,
+might have an additional `impl` block containing methods related to what
+happens when a user clicks the button. These kinds of methods won’t apply to
+types like `TextField`.
+
+If someone using our library decides to implement a `SelectBox` struct that has
+`width`, `height`, and `options` fields, they implement the `Draw` trait on the
+`SelectBox` type as well, as shown in Listing 17-8:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch17-oop/listing-17-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 17-8: Another crate using `gui` and implementing
+the `Draw` trait on a `SelectBox` struct</span>
+
+Our library’s user can now write their `main` function to create a `Screen`
+instance. To the `Screen` instance, they can add a `SelectBox` and a `Button`
+by putting each in a `Box<T>` to become a trait object. They can then call the
+`run` method on the `Screen` instance, which will call `draw` on each of the
+components. Listing 17-9 shows this implementation:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch17-oop/listing-17-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 17-9: Using trait objects to store values of
+different types that implement the same trait</span>
+
+When we wrote the library, we didn’t know that someone might add the
+`SelectBox` type, but our `Screen` implementation was able to operate on the
+new type and draw it because `SelectBox` implements the `Draw` trait, which
+means it implements the `draw` method.
+
+This concept—of being concerned only with the messages a value responds to
+rather than the value’s concrete type—is similar to the concept of *duck
+typing* in dynamically typed languages: if it walks like a duck and quacks
+like a duck, then it must be a duck! In the implementation of `run` on `Screen`
+in Listing 17-5, `run` doesn’t need to know what the concrete type of each
+component is. It doesn’t check whether a component is an instance of a `Button`
+or a `SelectBox`, it just calls the `draw` method on the component. By
+specifying `Box<dyn Draw>` as the type of the values in the `components`
+vector, we’ve defined `Screen` to need values that we can call the `draw`
+method on.
+
+The advantage of using trait objects and Rust’s type system to write code
+similar to code using duck typing is that we never have to check whether a
+value implements a particular method at runtime or worry about getting errors
+if a value doesn’t implement a method but we call it anyway. Rust won’t compile
+our code if the values don’t implement the traits that the trait objects need.
+
+For example, Listing 17-10 shows what happens if we try to create a `Screen`
+with a `String` as a component:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch17-oop/listing-17-10/src/main.rs}}
+```
+
+<span class="caption">Listing 17-10: Attempting to use a type that doesn’t
+implement the trait object’s trait</span>
+
+We’ll get this error because `String` doesn’t implement the `Draw` trait:
+
+```console
+{{#include ../listings/ch17-oop/listing-17-10/output.txt}}
+```
+
+This error lets us know that either we’re passing something to `Screen` we
+didn’t mean to pass and so should pass a different type or we should implement
+`Draw` on `String` so that `Screen` is able to call `draw` on it.
+
+### Trait Objects Perform Dynamic Dispatch
+
+Recall in the [“Performance of Code Using
+Generics”][performance-of-code-using-generics]<!-- ignore --> section in
+Chapter 10 our discussion on the monomorphization process performed by the
+compiler when we use trait bounds on generics: the compiler generates
+nongeneric implementations of functions and methods for each concrete type that
+we use in place of a generic type parameter. The code that results from
+monomorphization is doing *static dispatch*, which is when the compiler knows
+what method you’re calling at compile time. This is opposed to *dynamic
+dispatch*, which is when the compiler can’t tell at compile time which method
+you’re calling. In dynamic dispatch cases, the compiler emits code that at
+runtime will figure out which method to call.
+
+When we use trait objects, Rust must use dynamic dispatch. The compiler doesn’t
+know all the types that might be used with the code that’s using trait objects,
+so it doesn’t know which method implemented on which type to call. Instead, at
+runtime, Rust uses the pointers inside the trait object to know which method to
+call. This lookup incurs a runtime cost that doesn’t occur with static
+dispatch. Dynamic dispatch also prevents the compiler from choosing to inline a
+method’s code, which in turn prevents some optimizations. However, we did get
+extra flexibility in the code that we wrote in Listing 17-5 and were able to
+support in Listing 17-9, so it’s a trade-off to consider.
+
+[performance-of-code-using-generics]:
+ch10-01-syntax.html#performance-of-code-using-generics
+[dynamically-sized]: ch19-04-advanced-types.html#dynamically-sized-types-and-the-sized-trait
diff --git a/src/doc/book/src/ch17-03-oo-design-patterns.md b/src/doc/book/src/ch17-03-oo-design-patterns.md
new file mode 100644
index 000000000..13503ef02
--- /dev/null
+++ b/src/doc/book/src/ch17-03-oo-design-patterns.md
@@ -0,0 +1,516 @@
+## Implementing an Object-Oriented Design Pattern
+
+The *state pattern* is an object-oriented design pattern. The crux of the
+pattern is that we define a set of states a value can have internally. The
+states are represented by a set of *state objects*, and the value’s behavior
+changes based on its state. We’re going to work through an example of a blog
+post struct that has a field to hold its state, which will be a state object
+from the set "draft", "review", or "published".
+
+The state objects share functionality: in Rust, of course, we use structs and
+traits rather than objects and inheritance. Each state object is responsible
+for its own behavior and for governing when it should change into another
+state. The value that holds a state object knows nothing about the different
+behavior of the states or when to transition between states.
+
+The advantage of using the state pattern is that, when the business
+requirements of the program change, we won’t need to change the code of the
+value holding the state or the code that uses the value. We’ll only need to
+update the code inside one of the state objects to change its rules or perhaps
+add more state objects.
+
+First, we’re going to implement the state pattern in a more traditional
+object-oriented way, then we’ll use an approach that’s a bit more natural in
+Rust. Let’s dig in to incrementally implementing a blog post workflow using the
+state pattern.
+
+The final functionality will look like this:
+
+1. A blog post starts as an empty draft.
+2. When the draft is done, a review of the post is requested.
+3. When the post is approved, it gets published.
+4. Only published blog posts return content to print, so unapproved posts can’t
+ accidentally be published.
+
+Any other changes attempted on a post should have no effect. For example, if we
+try to approve a draft blog post before we’ve requested a review, the post
+should remain an unpublished draft.
+
+Listing 17-11 shows this workflow in code form: this is an example usage of the
+API we’ll implement in a library crate named `blog`. This won’t compile yet
+because we haven’t implemented the `blog` crate.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch17-oop/listing-17-11/src/main.rs:all}}
+```
+
+<span class="caption">Listing 17-11: Code that demonstrates the desired
+behavior we want our `blog` crate to have</span>
+
+We want to allow the user to create a new draft blog post with `Post::new`. We
+want to allow text to be added to the blog post. If we try to get the post’s
+content immediately, before approval, we shouldn’t get any text because the
+post is still a draft. We’ve added `assert_eq!` in the code for demonstration
+purposes. An excellent unit test for this would be to assert that a draft blog
+post returns an empty string from the `content` method, but we’re not going to
+write tests for this example.
+
+Next, we want to enable a request for a review of the post, and we want
+`content` to return an empty string while waiting for the review. When the post
+receives approval, it should get published, meaning the text of the post will
+be returned when `content` is called.
+
+Notice that the only type we’re interacting with from the crate is the `Post`
+type. This type will use the state pattern and will hold a value that will be
+one of three state objects representing the various states a post can be
+in—draft, waiting for review, or published. Changing from one state to another
+will be managed internally within the `Post` type. The states change in
+response to the methods called by our library’s users on the `Post` instance,
+but they don’t have to manage the state changes directly. Also, users can’t
+make a mistake with the states, like publishing a post before it’s reviewed.
+
+### Defining `Post` and Creating a New Instance in the Draft State
+
+Let’s get started on the implementation of the library! We know we need a
+public `Post` struct that holds some content, so we’ll start with the
+definition of the struct and an associated public `new` function to create an
+instance of `Post`, as shown in Listing 17-12. We’ll also make a private
+`State` trait that will define the behavior that all state objects for a `Post`
+must have.
+
+Then `Post` will hold a trait object of `Box<dyn State>` inside an `Option<T>`
+in a private field named `state` to hold the state object. You’ll see why the
+`Option<T>` is necessary in a bit.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-12/src/lib.rs}}
+```
+
+<span class="caption">Listing 17-12: Definition of a `Post` struct and a `new`
+function that creates a new `Post` instance, a `State` trait, and a `Draft`
+struct</span>
+
+The `State` trait defines the behavior shared by different post states. The
+state objects are `Draft`, `PendingReview`, and `Published`, and they will all
+implement the `State` trait. For now, the trait doesn’t have any methods, and
+we’ll start by defining just the `Draft` state because that is the state we
+want a post to start in.
+
+When we create a new `Post`, we set its `state` field to a `Some` value that
+holds a `Box`. This `Box` points to a new instance of the `Draft` struct.
+This ensures whenever we create a new instance of `Post`, it will start out as
+a draft. Because the `state` field of `Post` is private, there is no way to
+create a `Post` in any other state! In the `Post::new` function, we set the
+`content` field to a new, empty `String`.
+
+### Storing the Text of the Post Content
+
+We saw in Listing 17-11 that we want to be able to call a method named
+`add_text` and pass it a `&str` that is then added as the text content of the
+blog post. We implement this as a method, rather than exposing the `content`
+field as `pub`, so that later we can implement a method that will control how
+the `content` field’s data is read. The `add_text` method is pretty
+straightforward, so let’s add the implementation in Listing 17-13 to the `impl
+Post` block:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-13/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-13: Implementing the `add_text` method to add
+text to a post’s `content`</span>
+
+The `add_text` method takes a mutable reference to `self`, because we’re
+changing the `Post` instance that we’re calling `add_text` on. We then call
+`push_str` on the `String` in `content` and pass the `text` argument to add to
+the saved `content`. This behavior doesn’t depend on the state the post is in,
+so it’s not part of the state pattern. The `add_text` method doesn’t interact
+with the `state` field at all, but it is part of the behavior we want to
+support.
+
+### Ensuring the Content of a Draft Post Is Empty
+
+Even after we’ve called `add_text` and added some content to our post, we still
+want the `content` method to return an empty string slice because the post is
+still in the draft state, as shown on line 7 of Listing 17-11. For now, let’s
+implement the `content` method with the simplest thing that will fulfill this
+requirement: always returning an empty string slice. We’ll change this later
+once we implement the ability to change a post’s state so it can be published.
+So far, posts can only be in the draft state, so the post content should always
+be empty. Listing 17-14 shows this placeholder implementation:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-14/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-14: Adding a placeholder implementation for
+the `content` method on `Post` that always returns an empty string slice</span>
+
+With this added `content` method, everything in Listing 17-11 up to line 7
+works as intended.
+
+### Requesting a Review of the Post Changes Its State
+
+Next, we need to add functionality to request a review of a post, which should
+change its state from `Draft` to `PendingReview`. Listing 17-15 shows this code:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-15/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-15: Implementing `request_review` methods on
+`Post` and the `State` trait</span>
+
+We give `Post` a public method named `request_review` that will take a mutable
+reference to `self`. Then we call an internal `request_review` method on the
+current state of `Post`, and this second `request_review` method consumes the
+current state and returns a new state.
+
+We add the `request_review` method to the `State` trait; all types that
+implement the trait will now need to implement the `request_review` method.
+Note that rather than having `self`, `&self`, or `&mut self` as the first
+parameter of the method, we have `self: Box<Self>`. This syntax means the
+method is only valid when called on a `Box` holding the type. This syntax takes
+ownership of `Box<Self>`, invalidating the old state so the state value of the
+`Post` can transform into a new state.
+
+To consume the old state, the `request_review` method needs to take ownership
+of the state value. This is where the `Option` in the `state` field of `Post`
+comes in: we call the `take` method to take the `Some` value out of the `state`
+field and leave a `None` in its place, because Rust doesn’t let us have
+unpopulated fields in structs. This lets us move the `state` value out of
+`Post` rather than borrowing it. Then we’ll set the post’s `state` value to the
+result of this operation.
+
+We need to set `state` to `None` temporarily rather than setting it directly
+with code like `self.state = self.state.request_review();` to get ownership of
+the `state` value. This ensures `Post` can’t use the old `state` value after
+we’ve transformed it into a new state.
+
+The `request_review` method on `Draft` returns a new, boxed instance of a new
+`PendingReview` struct, which represents the state when a post is waiting for a
+review. The `PendingReview` struct also implements the `request_review` method
+but doesn’t do any transformations. Rather, it returns itself, because when we
+request a review on a post already in the `PendingReview` state, it should stay
+in the `PendingReview` state.
+
+Now we can start seeing the advantages of the state pattern: the
+`request_review` method on `Post` is the same no matter its `state` value. Each
+state is responsible for its own rules.
+
+We’ll leave the `content` method on `Post` as is, returning an empty string
+slice. We can now have a `Post` in the `PendingReview` state as well as in the
+`Draft` state, but we want the same behavior in the `PendingReview` state.
+Listing 17-11 now works up to line 10!
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="adding-the-approve-method-that-changes-the-behavior-of-content"></a>
+
+### Adding `approve` to Change the Behavior of `content`
+
+The `approve` method will be similar to the `request_review` method: it will
+set `state` to the value that the current state says it should have when that
+state is approved, as shown in Listing 17-16:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-16/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-16: Implementing the `approve` method on
+`Post` and the `State` trait</span>
+
+We add the `approve` method to the `State` trait and add a new struct that
+implements `State`, the `Published` state.
+
+Similar to the way `request_review` on `PendingReview` works, if we call the
+`approve` method on a `Draft`, it will have no effect because `approve` will
+return `self`. When we call `approve` on `PendingReview`, it returns a new,
+boxed instance of the `Published` struct. The `Published` struct implements the
+`State` trait, and for both the `request_review` method and the `approve`
+method, it returns itself, because the post should stay in the `Published`
+state in those cases.
+
+Now we need to update the `content` method on `Post`. We want the value
+returned from `content` to depend on the current state of the `Post`, so we’re
+going to have the `Post` delegate to a `content` method defined on its `state`,
+as shown in Listing 17-17:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch17-oop/listing-17-17/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-17: Updating the `content` method on `Post` to
+delegate to a `content` method on `State`</span>
+
+Because the goal is to keep all these rules inside the structs that implement
+`State`, we call a `content` method on the value in `state` and pass the post
+instance (that is, `self`) as an argument. Then we return the value that’s
+returned from using the `content` method on the `state` value.
+
+We call the `as_ref` method on the `Option` because we want a reference to the
+value inside the `Option` rather than ownership of the value. Because `state`
+is an `Option<Box<dyn State>>`, when we call `as_ref`, an `Option<&Box<dyn
+State>>` is returned. If we didn’t call `as_ref`, we would get an error because
+we can’t move `state` out of the borrowed `&self` of the function parameter.
+
+We then call the `unwrap` method, which we know will never panic, because we
+know the methods on `Post` ensure that `state` will always contain a `Some`
+value when those methods are done. This is one of the cases we talked about in
+the [“Cases In Which You Have More Information Than the
+Compiler”][more-info-than-rustc]<!-- ignore --> section of Chapter 9 when we
+know that a `None` value is never possible, even though the compiler isn’t able
+to understand that.
+
+At this point, when we call `content` on the `&Box<dyn State>`, deref coercion
+will take effect on the `&` and the `Box` so the `content` method will
+ultimately be called on the type that implements the `State` trait. That means
+we need to add `content` to the `State` trait definition, and that is where
+we’ll put the logic for what content to return depending on which state we
+have, as shown in Listing 17-18:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-18/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-18: Adding the `content` method to the `State`
+trait</span>
+
+We add a default implementation for the `content` method that returns an empty
+string slice. That means we don’t need to implement `content` on the `Draft`
+and `PendingReview` structs. The `Published` struct will override the `content`
+method and return the value in `post.content`.
+
+Note that we need lifetime annotations on this method, as we discussed in
+Chapter 10. We’re taking a reference to a `post` as an argument and returning a
+reference to part of that `post`, so the lifetime of the returned reference is
+related to the lifetime of the `post` argument.
+
+And we’re done—all of Listing 17-11 now works! We’ve implemented the state
+pattern with the rules of the blog post workflow. The logic related to the
+rules lives in the state objects rather than being scattered throughout `Post`.
+
+> #### Why Not An Enum?
+>
+> You may have been wondering why we didn’t use an `enum` with the different
+> possible post states as variants. That’s certainly a possible solution, try
+> it and compare the end results to see which you prefer! One disadvantage of
+> using an enum is every place that checks the value of the enum will need a
+> `match` expression or similar to handle every possible variant. This could
+> get more repetitive than this trait object solution.
+
+### Trade-offs of the State Pattern
+
+We’ve shown that Rust is capable of implementing the object-oriented state
+pattern to encapsulate the different kinds of behavior a post should have in
+each state. The methods on `Post` know nothing about the various behaviors. The
+way we organized the code, we have to look in only one place to know the
+different ways a published post can behave: the implementation of the `State`
+trait on the `Published` struct.
+
+If we were to create an alternative implementation that didn’t use the state
+pattern, we might instead use `match` expressions in the methods on `Post` or
+even in the `main` code that checks the state of the post and changes behavior
+in those places. That would mean we would have to look in several places to
+understand all the implications of a post being in the published state! This
+would only increase the more states we added: each of those `match` expressions
+would need another arm.
+
+With the state pattern, the `Post` methods and the places we use `Post` don’t
+need `match` expressions, and to add a new state, we would only need to add a
+new struct and implement the trait methods on that one struct.
+
+The implementation using the state pattern is easy to extend to add more
+functionality. To see the simplicity of maintaining code that uses the state
+pattern, try a few of these suggestions:
+
+* Add a `reject` method that changes the post’s state from `PendingReview` back
+ to `Draft`.
+* Require two calls to `approve` before the state can be changed to `Published`.
+* Allow users to add text content only when a post is in the `Draft` state.
+ Hint: have the state object responsible for what might change about the
+ content but not responsible for modifying the `Post`.
+
+One downside of the state pattern is that, because the states implement the
+transitions between states, some of the states are coupled to each other. If we
+add another state between `PendingReview` and `Published`, such as `Scheduled`,
+we would have to change the code in `PendingReview` to transition to
+`Scheduled` instead. It would be less work if `PendingReview` didn’t need to
+change with the addition of a new state, but that would mean switching to
+another design pattern.
+
+Another downside is that we’ve duplicated some logic. To eliminate some of the
+duplication, we might try to make default implementations for the
+`request_review` and `approve` methods on the `State` trait that return `self`;
+however, this would violate object safety, because the trait doesn’t know what
+the concrete `self` will be exactly. We want to be able to use `State` as a
+trait object, so we need its methods to be object safe.
+
+Other duplication includes the similar implementations of the `request_review`
+and `approve` methods on `Post`. Both methods delegate to the implementation of
+the same method on the value in the `state` field of `Option` and set the new
+value of the `state` field to the result. If we had a lot of methods on `Post`
+that followed this pattern, we might consider defining a macro to eliminate the
+repetition (see the [“Macros”][macros]<!-- ignore --> section in Chapter 19).
+
+By implementing the state pattern exactly as it’s defined for object-oriented
+languages, we’re not taking as full advantage of Rust’s strengths as we could.
+Let’s look at some changes we can make to the `blog` crate that can make
+invalid states and transitions into compile time errors.
+
+#### Encoding States and Behavior as Types
+
+We’ll show you how to rethink the state pattern to get a different set of
+trade-offs. Rather than encapsulating the states and transitions completely so
+outside code has no knowledge of them, we’ll encode the states into different
+types. Consequently, Rust’s type checking system will prevent attempts to use
+draft posts where only published posts are allowed by issuing a compiler error.
+
+Let’s consider the first part of `main` in Listing 17-11:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch17-oop/listing-17-11/src/main.rs:here}}
+```
+
+We still enable the creation of new posts in the draft state using `Post::new`
+and the ability to add text to the post’s content. But instead of having a
+`content` method on a draft post that returns an empty string, we’ll make it so
+draft posts don’t have the `content` method at all. That way, if we try to get
+a draft post’s content, we’ll get a compiler error telling us the method
+doesn’t exist. As a result, it will be impossible for us to accidentally
+display draft post content in production, because that code won’t even compile.
+Listing 17-19 shows the definition of a `Post` struct and a `DraftPost` struct,
+as well as methods on each:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-19/src/lib.rs}}
+```
+
+<span class="caption">Listing 17-19: A `Post` with a `content` method and a
+`DraftPost` without a `content` method</span>
+
+Both the `Post` and `DraftPost` structs have a private `content` field that
+stores the blog post text. The structs no longer have the `state` field because
+we’re moving the encoding of the state to the types of the structs. The `Post`
+struct will represent a published post, and it has a `content` method that
+returns the `content`.
+
+We still have a `Post::new` function, but instead of returning an instance of
+`Post`, it returns an instance of `DraftPost`. Because `content` is private
+and there aren’t any functions that return `Post`, it’s not possible to create
+an instance of `Post` right now.
+
+The `DraftPost` struct has an `add_text` method, so we can add text to
+`content` as before, but note that `DraftPost` does not have a `content` method
+defined! So now the program ensures all posts start as draft posts, and draft
+posts don’t have their content available for display. Any attempt to get around
+these constraints will result in a compiler error.
+
+#### Implementing Transitions as Transformations into Different Types
+
+So how do we get a published post? We want to enforce the rule that a draft
+post has to be reviewed and approved before it can be published. A post in the
+pending review state should still not display any content. Let’s implement
+these constraints by adding another struct, `PendingReviewPost`, defining the
+`request_review` method on `DraftPost` to return a `PendingReviewPost`, and
+defining an `approve` method on `PendingReviewPost` to return a `Post`, as
+shown in Listing 17-20:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch17-oop/listing-17-20/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 17-20: A `PendingReviewPost` that gets created by
+calling `request_review` on `DraftPost` and an `approve` method that turns a
+`PendingReviewPost` into a published `Post`</span>
+
+The `request_review` and `approve` methods take ownership of `self`, thus
+consuming the `DraftPost` and `PendingReviewPost` instances and transforming
+them into a `PendingReviewPost` and a published `Post`, respectively. This way,
+we won’t have any lingering `DraftPost` instances after we’ve called
+`request_review` on them, and so forth. The `PendingReviewPost` struct doesn’t
+have a `content` method defined on it, so attempting to read its content
+results in a compiler error, as with `DraftPost`. Because the only way to get a
+published `Post` instance that does have a `content` method defined is to call
+the `approve` method on a `PendingReviewPost`, and the only way to get a
+`PendingReviewPost` is to call the `request_review` method on a `DraftPost`,
+we’ve now encoded the blog post workflow into the type system.
+
+But we also have to make some small changes to `main`. The `request_review` and
+`approve` methods return new instances rather than modifying the struct they’re
+called on, so we need to add more `let post =` shadowing assignments to save
+the returned instances. We also can’t have the assertions about the draft and
+pending review posts’ contents be empty strings, nor do we need them: we can’t
+compile code that tries to use the content of posts in those states any longer.
+The updated code in `main` is shown in Listing 17-21:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch17-oop/listing-17-21/src/main.rs}}
+```
+
+<span class="caption">Listing 17-21: Modifications to `main` to use the new
+implementation of the blog post workflow</span>
+
+The changes we needed to make to `main` to reassign `post` mean that this
+implementation doesn’t quite follow the object-oriented state pattern anymore:
+the transformations between the states are no longer encapsulated entirely
+within the `Post` implementation. However, our gain is that invalid states are
+now impossible because of the type system and the type checking that happens at
+compile time! This ensures that certain bugs, such as display of the content of
+an unpublished post, will be discovered before they make it to production.
+
+Try the tasks suggested at the start of this section on the `blog` crate as it
+is after Listing 17-21 to see what you think about the design of this version
+of the code. Note that some of the tasks might be completed already in this
+design.
+
+We’ve seen that even though Rust is capable of implementing object-oriented
+design patterns, other patterns, such as encoding state into the type system,
+are also available in Rust. These patterns have different trade-offs. Although
+you might be very familiar with object-oriented patterns, rethinking the
+problem to take advantage of Rust’s features can provide benefits, such as
+preventing some bugs at compile time. Object-oriented patterns won’t always be
+the best solution in Rust due to certain features, like ownership, that
+object-oriented languages don’t have.
+
+## Summary
+
+No matter whether or not you think Rust is an object-oriented language after
+reading this chapter, you now know that you can use trait objects to get some
+object-oriented features in Rust. Dynamic dispatch can give your code some
+flexibility in exchange for a bit of runtime performance. You can use this
+flexibility to implement object-oriented patterns that can help your code’s
+maintainability. Rust also has other features, like ownership, that
+object-oriented languages don’t have. An object-oriented pattern won’t always
+be the best way to take advantage of Rust’s strengths, but is an available
+option.
+
+Next, we’ll look at patterns, which are another of Rust’s features that enable
+lots of flexibility. We’ve looked at them briefly throughout the book but
+haven’t seen their full capability yet. Let’s go!
+
+[more-info-than-rustc]: ch09-03-to-panic-or-not-to-panic.html#cases-in-which-you-have-more-information-than-the-compiler
+[macros]: ch19-06-macros.html#macros
diff --git a/src/doc/book/src/ch18-00-patterns.md b/src/doc/book/src/ch18-00-patterns.md
new file mode 100644
index 000000000..dc9290e33
--- /dev/null
+++ b/src/doc/book/src/ch18-00-patterns.md
@@ -0,0 +1,29 @@
+# Patterns and Matching
+
+*Patterns* are a special syntax in Rust for matching against the structure of
+types, both complex and simple. Using patterns in conjunction with `match`
+expressions and other constructs gives you more control over a program’s
+control flow. A pattern consists of some combination of the following:
+
+* Literals
+* Destructured arrays, enums, structs, or tuples
+* Variables
+* Wildcards
+* Placeholders
+
+Some example patterns include `x`, `(a, 3)`, and `Some(Color::Red)`. In the
+contexts in which patterns are valid, these components describe the shape of
+data. Our program then matches values against the patterns to determine whether
+it has the correct shape of data to continue running a particular piece of code.
+
+To use a pattern, we compare it to some value. If the pattern matches the
+value, we use the value parts in our code. Recall the `match` expressions in
+Chapter 6 that used patterns, such as the coin-sorting machine example. If the
+value fits the shape of the pattern, we can use the named pieces. If it
+doesn’t, the code associated with the pattern won’t run.
+
+This chapter is a reference on all things related to patterns. We’ll cover the
+valid places to use patterns, the difference between refutable and irrefutable
+patterns, and the different kinds of pattern syntax that you might see. By the
+end of the chapter, you’ll know how to use patterns to express many concepts in
+a clear way.
diff --git a/src/doc/book/src/ch18-01-all-the-places-for-patterns.md b/src/doc/book/src/ch18-01-all-the-places-for-patterns.md
new file mode 100644
index 000000000..58f5af573
--- /dev/null
+++ b/src/doc/book/src/ch18-01-all-the-places-for-patterns.md
@@ -0,0 +1,250 @@
+## All the Places Patterns Can Be Used
+
+Patterns pop up in a number of places in Rust, and you’ve been using them a lot
+without realizing it! This section discusses all the places where patterns are
+valid.
+
+### `match` Arms
+
+As discussed in Chapter 6, we use patterns in the arms of `match` expressions.
+Formally, `match` expressions are defined as the keyword `match`, a value to
+match on, and one or more match arms that consist of a pattern and an
+expression to run if the value matches that arm’s pattern, like this:
+
+```text
+match VALUE {
+ PATTERN => EXPRESSION,
+ PATTERN => EXPRESSION,
+ PATTERN => EXPRESSION,
+}
+```
+
+For example, here's the `match` expression from Listing 6-5 that matches on an
+`Option<i32>` value in the variable `x`:
+
+```rust,ignore
+match x {
+ None => None,
+ Some(i) => Some(i + 1),
+}
+```
+
+The patterns in this `match` expression are the `None` and `Some(i)` on the
+left of each arrow.
+
+One requirement for `match` expressions is that they need to be *exhaustive* in
+the sense that all possibilities for the value in the `match` expression must
+be accounted for. One way to ensure you’ve covered every possibility is to have
+a catchall pattern for the last arm: for example, a variable name matching any
+value can never fail and thus covers every remaining case.
+
+The particular pattern `_` will match anything, but it never binds to a
+variable, so it’s often used in the last match arm. The `_` pattern can be
+useful when you want to ignore any value not specified, for example. We’ll
+cover the `_` pattern in more detail in the [“Ignoring Values in a
+Pattern”][ignoring-values-in-a-pattern]<!-- ignore --> section later in this
+chapter.
+
+### Conditional `if let` Expressions
+
+In Chapter 6 we discussed how to use `if let` expressions mainly as a shorter
+way to write the equivalent of a `match` that only matches one case.
+Optionally, `if let` can have a corresponding `else` containing code to run if
+the pattern in the `if let` doesn’t match.
+
+Listing 18-1 shows that it’s also possible to mix and match `if let`, `else
+if`, and `else if let` expressions. Doing so gives us more flexibility than a
+`match` expression in which we can express only one value to compare with the
+patterns. Also, Rust doesn't require that the conditions in a series of `if
+let`, `else if`, `else if let` arms relate to each other.
+
+The code in Listing 18-1 determines what color to make your background based on
+a series of checks for several conditions. For this example, we’ve created
+variables with hardcoded values that a real program might receive from user
+input.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-01/src/main.rs}}
+```
+
+<span class="caption">Listing 18-1: Mixing `if let`, `else if`, `else if let`,
+and `else`</span>
+
+If the user specifies a favorite color, that color is used as the background.
+If no favorite color is specified and today is Tuesday, the background color is
+green. Otherwise, if the user specifies their age as a string and we can parse
+it as a number successfully, the color is either purple or orange depending on
+the value of the number. If none of these conditions apply, the background
+color is blue.
+
+This conditional structure lets us support complex requirements. With the
+hardcoded values we have here, this example will print `Using purple as the
+background color`.
+
+You can see that `if let` can also introduce shadowed variables in the same way
+that `match` arms can: the line `if let Ok(age) = age` introduces a new
+shadowed `age` variable that contains the value inside the `Ok` variant. This
+means we need to place the `if age > 30` condition within that block: we can’t
+combine these two conditions into `if let Ok(age) = age && age > 30`. The
+shadowed `age` we want to compare to 30 isn’t valid until the new scope starts
+with the curly bracket.
+
+The downside of using `if let` expressions is that the compiler doesn’t check
+for exhaustiveness, whereas with `match` expressions it does. If we omitted the
+last `else` block and therefore missed handling some cases, the compiler would
+not alert us to the possible logic bug.
+
+### `while let` Conditional Loops
+
+Similar in construction to `if let`, the `while let` conditional loop allows a
+`while` loop to run for as long as a pattern continues to match. In Listing
+18-2 we code a `while let` loop that uses a vector as a stack and prints the
+values in the vector in the opposite order in which they were pushed.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-2: Using a `while let` loop to print values
+for as long as `stack.pop()` returns `Some`</span>
+
+This example prints 3, 2, and then 1. The `pop` method takes the last element
+out of the vector and returns `Some(value)`. If the vector is empty, `pop`
+returns `None`. The `while` loop continues running the code in its block as
+long as `pop` returns `Some`. When `pop` returns `None`, the loop stops. We can
+use `while let` to pop every element off our stack.
+
+### `for` Loops
+
+In a `for` loop, the value that directly follows the keyword `for` is a
+pattern. For example, in `for x in y` the `x` is the pattern. Listing 18-3
+demonstrates how to use a pattern in a `for` loop to destructure, or break
+apart, a tuple as part of the `for` loop.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-3: Using a pattern in a `for` loop to
+destructure a tuple</span>
+
+The code in Listing 18-3 will print the following:
+
+```console
+{{#include ../listings/ch18-patterns-and-matching/listing-18-03/output.txt}}
+```
+
+We adapt an iterator using the `enumerate` method so it produces a value and
+the index for that value, placed into a tuple. The first value produced is the
+tuple `(0, 'a')`. When this value is matched to the pattern `(index, value)`,
+`index` will be `0` and `value` will be `'a'`, printing the first line of the
+output.
+
+### `let` Statements
+
+Prior to this chapter, we had only explicitly discussed using patterns with
+`match` and `if let`, but in fact, we’ve used patterns in other places as well,
+including in `let` statements. For example, consider this straightforward
+variable assignment with `let`:
+
+```rust
+let x = 5;
+```
+
+Every time you've used a `let` statement like this you've been using patterns,
+although you might not have realized it! More formally, a `let` statement looks
+like this:
+
+```text
+let PATTERN = EXPRESSION;
+```
+
+In statements like `let x = 5;` with a variable name in the `PATTERN` slot, the
+variable name is just a particularly simple form of a pattern. Rust compares
+the expression against the pattern and assigns any names it finds. So in the
+`let x = 5;` example, `x` is a pattern that means “bind what matches here to
+the variable `x`.” Because the name `x` is the whole pattern, this pattern
+effectively means “bind everything to the variable `x`, whatever the value is.”
+
+To see the pattern matching aspect of `let` more clearly, consider Listing
+18-4, which uses a pattern with `let` to destructure a tuple.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-4: Using a pattern to destructure a tuple and
+create three variables at once</span>
+
+Here, we match a tuple against a pattern. Rust compares the value `(1, 2, 3)`
+to the pattern `(x, y, z)` and sees that the value matches the pattern, so Rust
+binds `1` to `x`, `2` to `y`, and `3` to `z`. You can think of this tuple
+pattern as nesting three individual variable patterns inside it.
+
+If the number of elements in the pattern doesn’t match the number of elements
+in the tuple, the overall type won’t match and we’ll get a compiler error. For
+example, Listing 18-5 shows an attempt to destructure a tuple with three
+elements into two variables, which won’t work.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-5: Incorrectly constructing a pattern whose
+variables don’t match the number of elements in the tuple</span>
+
+Attempting to compile this code results in this type error:
+
+```console
+{{#include ../listings/ch18-patterns-and-matching/listing-18-05/output.txt}}
+```
+
+To fix the error, we could ignore one or more of the values in the tuple using
+`_` or `..`, as you’ll see in the [“Ignoring Values in a
+Pattern”][ignoring-values-in-a-pattern]<!-- ignore --> section. If the problem
+is that we have too many variables in the pattern, the solution is to make the
+types match by removing variables so the number of variables equals the number
+of elements in the tuple.
+
+### Function Parameters
+
+Function parameters can also be patterns. The code in Listing 18-6, which
+declares a function named `foo` that takes one parameter named `x` of type
+`i32`, should by now look familiar.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-6: A function signature uses patterns in the
+parameters</span>
+
+The `x` part is a pattern! As we did with `let`, we could match a tuple in a
+function’s arguments to the pattern. Listing 18-7 splits the values in a tuple
+as we pass it to a function.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-07/src/main.rs}}
+```
+
+<span class="caption">Listing 18-7: A function with parameters that destructure
+a tuple</span>
+
+This code prints `Current location: (3, 5)`. The values `&(3, 5)` match the
+pattern `&(x, y)`, so `x` is the value `3` and `y` is the value `5`.
+
+We can also use patterns in closure parameter lists in the same way as in
+function parameter lists, because closures are similar to functions, as
+discussed in Chapter 13.
+
+At this point, you’ve seen several ways of using patterns, but patterns don’t
+work the same in every place we can use them. In some places, the patterns must
+be irrefutable; in other circumstances, they can be refutable. We’ll discuss
+these two concepts next.
+
+[ignoring-values-in-a-pattern]:
+ch18-03-pattern-syntax.html#ignoring-values-in-a-pattern
diff --git a/src/doc/book/src/ch18-02-refutability.md b/src/doc/book/src/ch18-02-refutability.md
new file mode 100644
index 000000000..be3c31765
--- /dev/null
+++ b/src/doc/book/src/ch18-02-refutability.md
@@ -0,0 +1,90 @@
+## Refutability: Whether a Pattern Might Fail to Match
+
+Patterns come in two forms: refutable and irrefutable. Patterns that will match
+for any possible value passed are *irrefutable*. An example would be `x` in the
+statement `let x = 5;` because `x` matches anything and therefore cannot fail
+to match. Patterns that can fail to match for some possible value are
+*refutable*. An example would be `Some(x)` in the expression `if let Some(x) =
+a_value` because if the value in the `a_value` variable is `None` rather than
+`Some`, the `Some(x)` pattern will not match.
+
+Function parameters, `let` statements, and `for` loops can only accept
+irrefutable patterns, because the program cannot do anything meaningful when
+values don’t match. The `if let` and `while let` expressions accept
+refutable and irrefutable patterns, but the compiler warns against
+irrefutable patterns because by definition they’re intended to handle possible
+failure: the functionality of a conditional is in its ability to perform
+differently depending on success or failure.
+
+In general, you shouldn’t have to worry about the distinction between refutable
+and irrefutable patterns; however, you do need to be familiar with the concept
+of refutability so you can respond when you see it in an error message. In
+those cases, you’ll need to change either the pattern or the construct you’re
+using the pattern with, depending on the intended behavior of the code.
+
+Let’s look at an example of what happens when we try to use a refutable pattern
+where Rust requires an irrefutable pattern and vice versa. Listing 18-8 shows a
+`let` statement, but for the pattern we’ve specified `Some(x)`, a refutable
+pattern. As you might expect, this code will not compile.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-08/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-8: Attempting to use a refutable pattern with
+`let`</span>
+
+If `some_option_value` was a `None` value, it would fail to match the pattern
+`Some(x)`, meaning the pattern is refutable. However, the `let` statement can
+only accept an irrefutable pattern because there is nothing valid the code can
+do with a `None` value. At compile time, Rust will complain that we’ve tried to
+use a refutable pattern where an irrefutable pattern is required:
+
+```console
+{{#include ../listings/ch18-patterns-and-matching/listing-18-08/output.txt}}
+```
+
+Because we didn’t cover (and couldn’t cover!) every valid value with the
+pattern `Some(x)`, Rust rightfully produces a compiler error.
+
+If we have a refutable pattern where an irrefutable pattern is needed, we can
+fix it by changing the code that uses the pattern: instead of using `let`, we
+can use `if let`. Then if the pattern doesn’t match, the code will just skip
+the code in the curly brackets, giving it a way to continue validly. Listing
+18-9 shows how to fix the code in Listing 18-8.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-9: Using `if let` and a block with refutable
+patterns instead of `let`</span>
+
+We’ve given the code an out! This code is perfectly valid, although it means we
+cannot use an irrefutable pattern without receiving an error. If we give `if
+let` a pattern that will always match, such as `x`, as shown in Listing 18-10,
+the compiler will give a warning.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-10: Attempting to use an irrefutable pattern
+with `if let`</span>
+
+Rust complains that it doesn’t make sense to use `if let` with an irrefutable
+pattern:
+
+```console
+{{#include ../listings/ch18-patterns-and-matching/listing-18-10/output.txt}}
+```
+
+For this reason, match arms must use refutable patterns, except for the last
+arm, which should match any remaining values with an irrefutable pattern. Rust
+allows us to use an irrefutable pattern in a `match` with only one arm, but
+this syntax isn’t particularly useful and could be replaced with a simpler
+`let` statement.
+
+Now that you know where to use patterns and the difference between refutable
+and irrefutable patterns, let’s cover all the syntax we can use to create
+patterns.
diff --git a/src/doc/book/src/ch18-03-pattern-syntax.md b/src/doc/book/src/ch18-03-pattern-syntax.md
new file mode 100644
index 000000000..aeaa766ff
--- /dev/null
+++ b/src/doc/book/src/ch18-03-pattern-syntax.md
@@ -0,0 +1,594 @@
+## Pattern Syntax
+
+In this section, we gather all the syntax valid in patterns and discuss why and
+when you might want to use each one.
+
+### Matching Literals
+
+As you saw in Chapter 6, you can match patterns against literals directly. The
+following code gives some examples:
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/no-listing-01-literals/src/main.rs:here}}
+```
+
+This code prints `one` because the value in `x` is 1. This syntax is useful
+when you want your code to take an action if it gets a particular concrete
+value.
+
+### Matching Named Variables
+
+Named variables are irrefutable patterns that match any value, and we’ve used
+them many times in the book. However, there is a complication when you use
+named variables in `match` expressions. Because `match` starts a new scope,
+variables declared as part of a pattern inside the `match` expression will
+shadow those with the same name outside the `match` construct, as is the case
+with all variables. In Listing 18-11, we declare a variable named `x` with the
+value `Some(5)` and a variable `y` with the value `10`. We then create a
+`match` expression on the value `x`. Look at the patterns in the match arms and
+`println!` at the end, and try to figure out what the code will print before
+running this code or reading further.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-11: A `match` expression with an arm that
+introduces a shadowed variable `y`</span>
+
+Let’s walk through what happens when the `match` expression runs. The pattern
+in the first match arm doesn’t match the defined value of `x`, so the code
+continues.
+
+The pattern in the second match arm introduces a new variable named `y` that
+will match any value inside a `Some` value. Because we’re in a new scope inside
+the `match` expression, this is a new `y` variable, not the `y` we declared at
+the beginning with the value 10. This new `y` binding will match any value
+inside a `Some`, which is what we have in `x`. Therefore, this new `y` binds to
+the inner value of the `Some` in `x`. That value is `5`, so the expression for
+that arm executes and prints `Matched, y = 5`.
+
+If `x` had been a `None` value instead of `Some(5)`, the patterns in the first
+two arms wouldn’t have matched, so the value would have matched to the
+underscore. We didn’t introduce the `x` variable in the pattern of the
+underscore arm, so the `x` in the expression is still the outer `x` that hasn’t
+been shadowed. In this hypothetical case, the `match` would print `Default
+case, x = None`.
+
+When the `match` expression is done, its scope ends, and so does the scope of
+the inner `y`. The last `println!` produces `at the end: x = Some(5), y = 10`.
+
+To create a `match` expression that compares the values of the outer `x` and
+`y`, rather than introducing a shadowed variable, we would need to use a match
+guard conditional instead. We’ll talk about match guards later in the [“Extra
+Conditionals with Match Guards”](#extra-conditionals-with-match-guards)<!--
+ignore --> section.
+
+### Multiple Patterns
+
+In `match` expressions, you can match multiple patterns using the `|` syntax,
+which is the pattern *or* operator. For example, in the following code we match
+the value of `x` against the match arms, the first of which has an *or* option,
+meaning if the value of `x` matches either of the values in that arm, that
+arm’s code will run:
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/no-listing-02-multiple-patterns/src/main.rs:here}}
+```
+
+This code prints `one or two`.
+
+### Matching Ranges of Values with `..=`
+
+The `..=` syntax allows us to match to an inclusive range of values. In the
+following code, when a pattern matches any of the values within the given
+range, that arm will execute:
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/no-listing-03-ranges/src/main.rs:here}}
+```
+
+If `x` is 1, 2, 3, 4, or 5, the first arm will match. This syntax is more
+convenient for multiple match values than using the `|` operator to express the
+same idea; if we were to use `|` we would have to specify `1 | 2 | 3 | 4 | 5`.
+Specifying a range is much shorter, especially if we want to match, say, any
+number between 1 and 1,000!
+
+The compiler checks that the range isn’t empty at compile time, and because the
+only types for which Rust can tell if a range is empty or not are `char` and
+numeric values, ranges are only allowed with numeric or `char` values.
+
+Here is an example using ranges of `char` values:
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/no-listing-04-ranges-of-char/src/main.rs:here}}
+```
+
+Rust can tell that `'c'` is within the first pattern’s range and prints `early
+ASCII letter`.
+
+### Destructuring to Break Apart Values
+
+We can also use patterns to destructure structs, enums, and tuples to use
+different parts of these values. Let’s walk through each value.
+
+#### Destructuring Structs
+
+Listing 18-12 shows a `Point` struct with two fields, `x` and `y`, that we can
+break apart using a pattern with a `let` statement.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-12/src/main.rs}}
+```
+
+<span class="caption">Listing 18-12: Destructuring a struct’s fields into
+separate variables</span>
+
+This code creates the variables `a` and `b` that match the values of the `x`
+and `y` fields of the `p` struct. This example shows that the names of the
+variables in the pattern don’t have to match the field names of the struct.
+However, it’s common to match the variable names to the field names to make it
+easier to remember which variables came from which fields. Because of this
+common usage, and because writing `let Point { x: x, y: y } = p;` contains a
+lot of duplication, Rust has a shorthand for patterns that match struct fields:
+you only need to list the name of the struct field, and the variables created
+from the pattern will have the same names. Listing 18-13 behaves in the same
+way as the code in Listing 18-12, but the variables created in the `let`
+pattern are `x` and `y` instead of `a` and `b`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-13/src/main.rs}}
+```
+
+<span class="caption">Listing 18-13: Destructuring struct fields using struct
+field shorthand</span>
+
+This code creates the variables `x` and `y` that match the `x` and `y` fields
+of the `p` variable. The outcome is that the variables `x` and `y` contain the
+values from the `p` struct.
+
+We can also destructure with literal values as part of the struct pattern
+rather than creating variables for all the fields. Doing so allows us to test
+some of the fields for particular values while creating variables to
+destructure the other fields.
+
+In Listing 18-14, we have a `match` expression that separates `Point` values
+into three cases: points that lie directly on the `x` axis (which is true when
+`y = 0`), on the `y` axis (`x = 0`), or neither.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-14/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-14: Destructuring and matching literal values
+in one pattern</span>
+
+The first arm will match any point that lies on the `x` axis by specifying that
+the `y` field matches if its value matches the literal `0`. The pattern still
+creates an `x` variable that we can use in the code for this arm.
+
+Similarly, the second arm matches any point on the `y` axis by specifying that
+the `x` field matches if its value is `0` and creates a variable `y` for the
+value of the `y` field. The third arm doesn’t specify any literals, so it
+matches any other `Point` and creates variables for both the `x` and `y` fields.
+
+In this example, the value `p` matches the second arm by virtue of `x`
+containing a 0, so this code will print `On the y axis at 7`.
+
+Remember that a `match` expression stops checking arms once it has found the
+first matching pattern, so even though `Point { x: 0, y: 0}` is on the `x` axis
+and the `y` axis, this code would only print `On the x axis at 0`.
+
+#### Destructuring Enums
+
+We've destructured enums in this book (for example, Listing 6-5 in Chapter 6),
+but haven’t yet explicitly discussed that the pattern to destructure an enum
+corresponds to the way the data stored within the enum is defined. As an
+example, in Listing 18-15 we use the `Message` enum from Listing 6-2 and write
+a `match` with patterns that will destructure each inner value.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-15/src/main.rs}}
+```
+
+<span class="caption">Listing 18-15: Destructuring enum variants that hold
+different kinds of values</span>
+
+This code will print `Change the color to red 0, green 160, and blue 255`. Try
+changing the value of `msg` to see the code from the other arms run.
+
+For enum variants without any data, like `Message::Quit`, we can’t destructure
+the value any further. We can only match on the literal `Message::Quit` value,
+and no variables are in that pattern.
+
+For struct-like enum variants, such as `Message::Move`, we can use a pattern
+similar to the pattern we specify to match structs. After the variant name, we
+place curly brackets and then list the fields with variables so we break apart
+the pieces to use in the code for this arm. Here we use the shorthand form as
+we did in Listing 18-13.
+
+For tuple-like enum variants, like `Message::Write` that holds a tuple with one
+element and `Message::ChangeColor` that holds a tuple with three elements, the
+pattern is similar to the pattern we specify to match tuples. The number of
+variables in the pattern must match the number of elements in the variant we’re
+matching.
+
+#### Destructuring Nested Structs and Enums
+
+So far, our examples have all been matching structs or enums one level deep,
+but matching can work on nested items too! For example, we can refactor the
+code in Listing 18-15 to support RGB and HSV colors in the `ChangeColor`
+message, as shown in Listing 18-16.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-16/src/main.rs}}
+```
+
+<span class="caption">Listing 18-16: Matching on nested enums</span>
+
+The pattern of the first arm in the `match` expression matches a
+`Message::ChangeColor` enum variant that contains a `Color::Rgb` variant; then
+the pattern binds to the three inner `i32` values. The pattern of the second
+arm also matches a `Message::ChangeColor` enum variant, but the inner enum
+matches `Color::Hsv` instead. We can specify these complex conditions in one
+`match` expression, even though two enums are involved.
+
+#### Destructuring Structs and Tuples
+
+We can mix, match, and nest destructuring patterns in even more complex ways.
+The following example shows a complicated destructure where we nest structs and
+tuples inside a tuple and destructure all the primitive values out:
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/no-listing-05-destructuring-structs-and-tuples/src/main.rs:here}}
+```
+
+This code lets us break complex types into their component parts so we can use
+the values we’re interested in separately.
+
+Destructuring with patterns is a convenient way to use pieces of values, such
+as the value from each field in a struct, separately from each other.
+
+### Ignoring Values in a Pattern
+
+You’ve seen that it’s sometimes useful to ignore values in a pattern, such as
+in the last arm of a `match`, to get a catchall that doesn’t actually do
+anything but does account for all remaining possible values. There are a few
+ways to ignore entire values or parts of values in a pattern: using the `_`
+pattern (which you’ve seen), using the `_` pattern within another pattern,
+using a name that starts with an underscore, or using `..` to ignore remaining
+parts of a value. Let’s explore how and why to use each of these patterns.
+
+#### Ignoring an Entire Value with `_`
+
+We’ve used the underscore as a wildcard pattern that will match any value but
+not bind to the value. This is especially useful as the last arm in a `match`
+expression, but we can also use it in any pattern, including function
+parameters, as shown in Listing 18-17.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-17/src/main.rs}}
+```
+
+<span class="caption">Listing 18-17: Using `_` in a function signature</span>
+
+This code will completely ignore the value `3` passed as the first argument,
+and will print `This code only uses the y parameter: 4`.
+
+In most cases when you no longer need a particular function parameter, you
+would change the signature so it doesn’t include the unused parameter. Ignoring
+a function parameter can be especially useful in cases when, for example,
+you're implementing a trait when you need a certain type signature but the
+function body in your implementation doesn’t need one of the parameters. You
+then avoid getting a compiler warning about unused function parameters, as you
+would if you used a name instead.
+
+#### Ignoring Parts of a Value with a Nested `_`
+
+We can also use `_` inside another pattern to ignore just part of a value, for
+example, when we want to test for only part of a value but have no use for the
+other parts in the corresponding code we want to run. Listing 18-18 shows code
+responsible for managing a setting’s value. The business requirements are that
+the user should not be allowed to overwrite an existing customization of a
+setting but can unset the setting and give it a value if it is currently unset.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-18/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-18: Using an underscore within patterns that
+match `Some` variants when we don’t need to use the value inside the
+`Some`</span>
+
+This code will print `Can't overwrite an existing customized value` and then
+`setting is Some(5)`. In the first match arm, we don’t need to match on or use
+the values inside either `Some` variant, but we do need to test for the case
+when `setting_value` and `new_setting_value` are the `Some` variant. In that
+case, we print the reason for not changing `setting_value`, and it doesn’t get
+changed.
+
+In all other cases (if either `setting_value` or `new_setting_value` are
+`None`) expressed by the `_` pattern in the second arm, we want to allow
+`new_setting_value` to become `setting_value`.
+
+We can also use underscores in multiple places within one pattern to ignore
+particular values. Listing 18-19 shows an example of ignoring the second and
+fourth values in a tuple of five items.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-19/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-19: Ignoring multiple parts of a tuple</span>
+
+This code will print `Some numbers: 2, 8, 32`, and the values 4 and 16 will be
+ignored.
+
+#### Ignoring an Unused Variable by Starting Its Name with `_`
+
+If you create a variable but don’t use it anywhere, Rust will usually issue a
+warning because an unused variable could be a bug. However, sometimes it’s
+useful to be able to create a variable you won’t use yet, such as when you’re
+prototyping or just starting a project. In this situation, you can tell Rust
+not to warn you about the unused variable by starting the name of the variable
+with an underscore. In Listing 18-20, we create two unused variables, but when
+we compile this code, we should only get a warning about one of them.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-20/src/main.rs}}
+```
+
+<span class="caption">Listing 18-20: Starting a variable name with an
+underscore to avoid getting unused variable warnings</span>
+
+Here we get a warning about not using the variable `y`, but we don’t get a
+warning about not using `_x`.
+
+Note that there is a subtle difference between using only `_` and using a name
+that starts with an underscore. The syntax `_x` still binds the value to the
+variable, whereas `_` doesn’t bind at all. To show a case where this
+distinction matters, Listing 18-21 will provide us with an error.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-21/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-21: An unused variable starting with an
+underscore still binds the value, which might take ownership of the value</span>
+
+We’ll receive an error because the `s` value will still be moved into `_s`,
+which prevents us from using `s` again. However, using the underscore by itself
+doesn’t ever bind to the value. Listing 18-22 will compile without any errors
+because `s` doesn’t get moved into `_`.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-22/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-22: Using an underscore does not bind the
+value</span>
+
+This code works just fine because we never bind `s` to anything; it isn’t moved.
+
+#### Ignoring Remaining Parts of a Value with `..`
+
+With values that have many parts, we can use the `..` syntax to use specific
+parts and ignore the rest, avoiding the need to list underscores for each
+ignored value. The `..` pattern ignores any parts of a value that we haven’t
+explicitly matched in the rest of the pattern. In Listing 18-23, we have a
+`Point` struct that holds a coordinate in three-dimensional space. In the
+`match` expression, we want to operate only on the `x` coordinate and ignore
+the values in the `y` and `z` fields.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-23/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-23: Ignoring all fields of a `Point` except
+for `x` by using `..`</span>
+
+We list the `x` value and then just include the `..` pattern. This is quicker
+than having to list `y: _` and `z: _`, particularly when we’re working with
+structs that have lots of fields in situations where only one or two fields are
+relevant.
+
+The syntax `..` will expand to as many values as it needs to be. Listing 18-24
+shows how to use `..` with a tuple.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-24/src/main.rs}}
+```
+
+<span class="caption">Listing 18-24: Matching only the first and last values in
+a tuple and ignoring all other values</span>
+
+In this code, the first and last value are matched with `first` and `last`. The
+`..` will match and ignore everything in the middle.
+
+However, using `..` must be unambiguous. If it is unclear which values are
+intended for matching and which should be ignored, Rust will give us an error.
+Listing 18-25 shows an example of using `..` ambiguously, so it will not
+compile.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-25/src/main.rs}}
+```
+
+<span class="caption">Listing 18-25: An attempt to use `..` in an ambiguous
+way</span>
+
+When we compile this example, we get this error:
+
+```console
+{{#include ../listings/ch18-patterns-and-matching/listing-18-25/output.txt}}
+```
+
+It’s impossible for Rust to determine how many values in the tuple to ignore
+before matching a value with `second` and then how many further values to
+ignore thereafter. This code could mean that we want to ignore `2`, bind
+`second` to `4`, and then ignore `8`, `16`, and `32`; or that we want to ignore
+`2` and `4`, bind `second` to `8`, and then ignore `16` and `32`; and so forth.
+The variable name `second` doesn’t mean anything special to Rust, so we get a
+compiler error because using `..` in two places like this is ambiguous.
+
+### Extra Conditionals with Match Guards
+
+A *match guard* is an additional `if` condition, specified after the pattern in
+a `match` arm, that must also match for that arm to be chosen. Match guards are
+useful for expressing more complex ideas than a pattern alone allows.
+
+The condition can use variables created in the pattern. Listing 18-26 shows a
+`match` where the first arm has the pattern `Some(x)` and also has a match
+guard of `if x % 2 == 0` (which will be true if the number is even).
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-26/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-26: Adding a match guard to a pattern</span>
+
+This example will print `The number 4 is even`. When `num` is compared to the
+pattern in the first arm, it matches, because `Some(4)` matches `Some(x)`. Then
+the match guard checks whether the remainder of dividing `x` by 2 is equal to
+0, and because it is, the first arm is selected.
+
+If `num` had been `Some(5)` instead, the match guard in the first arm would
+have been false because the remainder of 5 divided by 2 is 1, which is not
+equal to 0. Rust would then go to the second arm, which would match because the
+second arm doesn’t have a match guard and therefore matches any `Some` variant.
+
+There is no way to express the `if x % 2 == 0` condition within a pattern, so
+the match guard gives us the ability to express this logic. The downside of
+this additional expressiveness is that the compiler doesn't try to check for
+exhaustiveness when match guard expressions are involved.
+
+In Listing 18-11, we mentioned that we could use match guards to solve our
+pattern-shadowing problem. Recall that we created a new variable inside the
+pattern in the `match` expression instead of using the variable outside the
+`match`. That new variable meant we couldn’t test against the value of the
+outer variable. Listing 18-27 shows how we can use a match guard to fix this
+problem.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-27/src/main.rs}}
+```
+
+<span class="caption">Listing 18-27: Using a match guard to test for equality
+with an outer variable</span>
+
+This code will now print `Default case, x = Some(5)`. The pattern in the second
+match arm doesn’t introduce a new variable `y` that would shadow the outer `y`,
+meaning we can use the outer `y` in the match guard. Instead of specifying the
+pattern as `Some(y)`, which would have shadowed the outer `y`, we specify
+`Some(n)`. This creates a new variable `n` that doesn’t shadow anything because
+there is no `n` variable outside the `match`.
+
+The match guard `if n == y` is not a pattern and therefore doesn’t introduce
+new variables. This `y` *is* the outer `y` rather than a new shadowed `y`, and
+we can look for a value that has the same value as the outer `y` by comparing
+`n` to `y`.
+
+You can also use the *or* operator `|` in a match guard to specify multiple
+patterns; the match guard condition will apply to all the patterns. Listing
+18-28 shows the precedence when combining a pattern that uses `|` with a match
+guard. The important part of this example is that the `if y` match guard
+applies to `4`, `5`, *and* `6`, even though it might look like `if y` only
+applies to `6`.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-28/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-28: Combining multiple patterns with a match
+guard</span>
+
+The match condition states that the arm only matches if the value of `x` is
+equal to `4`, `5`, or `6` *and* if `y` is `true`. When this code runs, the
+pattern of the first arm matches because `x` is `4`, but the match guard `if y`
+is false, so the first arm is not chosen. The code moves on to the second arm,
+which does match, and this program prints `no`. The reason is that the `if`
+condition applies to the whole pattern `4 | 5 | 6`, not only to the last value
+`6`. In other words, the precedence of a match guard in relation to a pattern
+behaves like this:
+
+```text
+(4 | 5 | 6) if y => ...
+```
+
+rather than this:
+
+```text
+4 | 5 | (6 if y) => ...
+```
+
+After running the code, the precedence behavior is evident: if the match guard
+were applied only to the final value in the list of values specified using the
+`|` operator, the arm would have matched and the program would have printed
+`yes`.
+
+### `@` Bindings
+
+The *at* operator `@` lets us create a variable that holds a value at the same
+time as we’re testing that value for a pattern match. In Listing 18-29, we want
+to test that a `Message::Hello` `id` field is within the range `3..=7`. We also
+want to bind the value to the variable `id_variable` so we can use it in the
+code associated with the arm. We could name this variable `id`, the same as the
+field, but for this example we’ll use a different name.
+
+```rust
+{{#rustdoc_include ../listings/ch18-patterns-and-matching/listing-18-29/src/main.rs:here}}
+```
+
+<span class="caption">Listing 18-29: Using `@` to bind to a value in a pattern
+while also testing it</span>
+
+This example will print `Found an id in range: 5`. By specifying `id_variable
+@` before the range `3..=7`, we’re capturing whatever value matched the range
+while also testing that the value matched the range pattern.
+
+In the second arm, where we only have a range specified in the pattern, the code
+associated with the arm doesn’t have a variable that contains the actual value
+of the `id` field. The `id` field’s value could have been 10, 11, or 12, but
+the code that goes with that pattern doesn’t know which it is. The pattern code
+isn’t able to use the value from the `id` field, because we haven’t saved the
+`id` value in a variable.
+
+In the last arm, where we’ve specified a variable without a range, we do have
+the value available to use in the arm’s code in a variable named `id`. The
+reason is that we’ve used the struct field shorthand syntax. But we haven’t
+applied any test to the value in the `id` field in this arm, as we did with the
+first two arms: any value would match this pattern.
+
+Using `@` lets us test a value and save it in a variable within one pattern.
+
+## Summary
+
+Rust’s patterns are very useful in distinguishing between different kinds of
+data. When used in `match` expressions, Rust ensures your patterns cover every
+possible value, or your program won’t compile. Patterns in `let` statements and
+function parameters make those constructs more useful, enabling the
+destructuring of values into smaller parts at the same time as assigning to
+variables. We can create simple or complex patterns to suit our needs.
+
+Next, for the penultimate chapter of the book, we’ll look at some advanced
+aspects of a variety of Rust’s features.
diff --git a/src/doc/book/src/ch19-00-advanced-features.md b/src/doc/book/src/ch19-00-advanced-features.md
new file mode 100644
index 000000000..a0db41fde
--- /dev/null
+++ b/src/doc/book/src/ch19-00-advanced-features.md
@@ -0,0 +1,22 @@
+# Advanced Features
+
+By now, you’ve learned the most commonly used parts of the Rust programming
+language. Before we do one more project in Chapter 20, we’ll look at a few
+aspects of the language you might run into every once in a while, but may not
+use every day. You can use this chapter as a reference for when you encounter
+any unknowns. The features covered here are useful in very specific situations.
+Although you might not reach for them often, we want to make sure you have a
+grasp of all the features Rust has to offer.
+
+In this chapter, we’ll cover:
+
+* Unsafe Rust: how to opt out of some of Rust’s guarantees and take
+ responsibility for manually upholding those guarantees
+* Advanced traits: associated types, default type parameters, fully qualified
+ syntax, supertraits, and the newtype pattern in relation to traits
+* Advanced types: more about the newtype pattern, type aliases, the never type,
+ and dynamically sized types
+* Advanced functions and closures: function pointers and returning closures
+* Macros: ways to define code that defines more code at compile time
+
+It’s a panoply of Rust features with something for everyone! Let’s dive in!
diff --git a/src/doc/book/src/ch19-01-unsafe-rust.md b/src/doc/book/src/ch19-01-unsafe-rust.md
new file mode 100644
index 000000000..6ff229dd3
--- /dev/null
+++ b/src/doc/book/src/ch19-01-unsafe-rust.md
@@ -0,0 +1,460 @@
+## Unsafe Rust
+
+All the code we’ve discussed so far has had Rust’s memory safety guarantees
+enforced at compile time. However, Rust has a second language hidden inside it
+that doesn’t enforce these memory safety guarantees: it’s called *unsafe Rust*
+and works just like regular Rust, but gives us extra superpowers.
+
+Unsafe Rust exists because, by nature, static analysis is conservative. When
+the compiler tries to determine whether or not code upholds the guarantees,
+it’s better for it to reject some valid programs than to accept some invalid
+programs. Although the code *might* be okay, if the Rust compiler doesn’t have
+enough information to be confident, it will reject the code. In these cases,
+you can use unsafe code to tell the compiler, “Trust me, I know what I’m
+doing.” Be warned, however, that you use unsafe Rust at your own risk: if you
+use unsafe code incorrectly, problems can occur due to memory unsafety, such as
+null pointer dereferencing.
+
+Another reason Rust has an unsafe alter ego is that the underlying computer
+hardware is inherently unsafe. If Rust didn’t let you do unsafe operations, you
+couldn’t do certain tasks. Rust needs to allow you to do low-level systems
+programming, such as directly interacting with the operating system or even
+writing your own operating system. Working with low-level systems programming
+is one of the goals of the language. Let’s explore what we can do with unsafe
+Rust and how to do it.
+
+### Unsafe Superpowers
+
+To switch to unsafe Rust, use the `unsafe` keyword and then start a new block
+that holds the unsafe code. You can take five actions in unsafe Rust that you
+can’t in safe Rust, which we call *unsafe superpowers*. Those superpowers
+include the ability to:
+
+* Dereference a raw pointer
+* Call an unsafe function or method
+* Access or modify a mutable static variable
+* Implement an unsafe trait
+* Access fields of `union`s
+
+It’s important to understand that `unsafe` doesn’t turn off the borrow checker
+or disable any other of Rust’s safety checks: if you use a reference in unsafe
+code, it will still be checked. The `unsafe` keyword only gives you access to
+these five features that are then not checked by the compiler for memory
+safety. You’ll still get some degree of safety inside of an unsafe block.
+
+In addition, `unsafe` does not mean the code inside the block is necessarily
+dangerous or that it will definitely have memory safety problems: the intent is
+that as the programmer, you’ll ensure the code inside an `unsafe` block will
+access memory in a valid way.
+
+People are fallible, and mistakes will happen, but by requiring these five
+unsafe operations to be inside blocks annotated with `unsafe` you’ll know that
+any errors related to memory safety must be within an `unsafe` block. Keep
+`unsafe` blocks small; you’ll be thankful later when you investigate memory
+bugs.
+
+To isolate unsafe code as much as possible, it’s best to enclose unsafe code
+within a safe abstraction and provide a safe API, which we’ll discuss later in
+the chapter when we examine unsafe functions and methods. Parts of the standard
+library are implemented as safe abstractions over unsafe code that has been
+audited. Wrapping unsafe code in a safe abstraction prevents uses of `unsafe`
+from leaking out into all the places that you or your users might want to use
+the functionality implemented with `unsafe` code, because using a safe
+abstraction is safe.
+
+Let’s look at each of the five unsafe superpowers in turn. We’ll also look at
+some abstractions that provide a safe interface to unsafe code.
+
+### Dereferencing a Raw Pointer
+
+In Chapter 4, in the [“Dangling References”][dangling-references]<!-- ignore
+--> section, we mentioned that the compiler ensures references are always
+valid. Unsafe Rust has two new types called *raw pointers* that are similar to
+references. As with references, raw pointers can be immutable or mutable and
+are written as `*const T` and `*mut T`, respectively. The asterisk isn’t the
+dereference operator; it’s part of the type name. In the context of raw
+pointers, *immutable* means that the pointer can’t be directly assigned to
+after being dereferenced.
+
+Different from references and smart pointers, raw pointers:
+
+* Are allowed to ignore the borrowing rules by having both immutable and
+ mutable pointers or multiple mutable pointers to the same location
+* Aren’t guaranteed to point to valid memory
+* Are allowed to be null
+* Don’t implement any automatic cleanup
+
+By opting out of having Rust enforce these guarantees, you can give up
+guaranteed safety in exchange for greater performance or the ability to
+interface with another language or hardware where Rust’s guarantees don’t apply.
+
+Listing 19-1 shows how to create an immutable and a mutable raw pointer from
+references.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-01/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-1: Creating raw pointers from references</span>
+
+Notice that we don’t include the `unsafe` keyword in this code. We can create
+raw pointers in safe code; we just can’t dereference raw pointers outside an
+unsafe block, as you’ll see in a bit.
+
+We’ve created raw pointers by using `as` to cast an immutable and a mutable
+reference into their corresponding raw pointer types. Because we created them
+directly from references guaranteed to be valid, we know these particular raw
+pointers are valid, but we can’t make that assumption about just any raw
+pointer.
+
+To demonstrate this, next we’ll create a raw pointer whose validity we can’t be
+so certain of. Listing 19-2 shows how to create a raw pointer to an arbitrary
+location in memory. Trying to use arbitrary memory is undefined: there might be
+data at that address or there might not, the compiler might optimize the code
+so there is no memory access, or the program might error with a segmentation
+fault. Usually, there is no good reason to write code like this, but it is
+possible.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-02/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-2: Creating a raw pointer to an arbitrary
+memory address</span>
+
+Recall that we can create raw pointers in safe code, but we can’t *dereference*
+raw pointers and read the data being pointed to. In Listing 19-3, we use the
+dereference operator `*` on a raw pointer that requires an `unsafe` block.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-3: Dereferencing raw pointers within an
+`unsafe` block</span>
+
+Creating a pointer does no harm; it’s only when we try to access the value that
+it points at that we might end up dealing with an invalid value.
+
+Note also that in Listing 19-1 and 19-3, we created `*const i32` and `*mut i32`
+raw pointers that both pointed to the same memory location, where `num` is
+stored. If we instead tried to create an immutable and a mutable reference to
+`num`, the code would not have compiled because Rust’s ownership rules don’t
+allow a mutable reference at the same time as any immutable references. With
+raw pointers, we can create a mutable pointer and an immutable pointer to the
+same location and change data through the mutable pointer, potentially creating
+a data race. Be careful!
+
+With all of these dangers, why would you ever use raw pointers? One major use
+case is when interfacing with C code, as you’ll see in the next section,
+[“Calling an Unsafe Function or
+Method.”](#calling-an-unsafe-function-or-method)<!-- ignore --> Another case is
+when building up safe abstractions that the borrow checker doesn’t understand.
+We’ll introduce unsafe functions and then look at an example of a safe
+abstraction that uses unsafe code.
+
+### Calling an Unsafe Function or Method
+
+The second type of operation you can perform in an unsafe block is calling
+unsafe functions. Unsafe functions and methods look exactly like regular
+functions and methods, but they have an extra `unsafe` before the rest of the
+definition. The `unsafe` keyword in this context indicates the function has
+requirements we need to uphold when we call this function, because Rust can’t
+guarantee we’ve met these requirements. By calling an unsafe function within an
+`unsafe` block, we’re saying that we’ve read this function’s documentation and
+take responsibility for upholding the function’s contracts.
+
+Here is an unsafe function named `dangerous` that doesn’t do anything in its
+body:
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-01-unsafe-fn/src/main.rs:here}}
+```
+
+We must call the `dangerous` function within a separate `unsafe` block. If we
+try to call `dangerous` without the `unsafe` block, we’ll get an error:
+
+```console
+{{#include ../listings/ch19-advanced-features/output-only-01-missing-unsafe/output.txt}}
+```
+
+With the `unsafe` block, we’re asserting to Rust that we’ve read the function’s
+documentation, we understand how to use it properly, and we’ve verified that
+we’re fulfilling the contract of the function.
+
+Bodies of unsafe functions are effectively `unsafe` blocks, so to perform other
+unsafe operations within an unsafe function, we don’t need to add another
+`unsafe` block.
+
+#### Creating a Safe Abstraction over Unsafe Code
+
+Just because a function contains unsafe code doesn’t mean we need to mark the
+entire function as unsafe. In fact, wrapping unsafe code in a safe function is
+a common abstraction. As an example, let’s study the `split_at_mut` function
+from the standard library, which requires some unsafe code. We’ll explore how
+we might implement it. This safe method is defined on mutable slices: it takes
+one slice and makes it two by splitting the slice at the index given as an
+argument. Listing 19-4 shows how to use `split_at_mut`.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-04/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-4: Using the safe `split_at_mut`
+function</span>
+
+We can’t implement this function using only safe Rust. An attempt might look
+something like Listing 19-5, which won’t compile. For simplicity, we’ll
+implement `split_at_mut` as a function rather than a method and only for slices
+of `i32` values rather than for a generic type `T`.
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-5: An attempted implementation of
+`split_at_mut` using only safe Rust</span>
+
+This function first gets the total length of the slice. Then it asserts that
+the index given as a parameter is within the slice by checking whether it’s
+less than or equal to the length. The assertion means that if we pass an index
+that is greater than the length to split the slice at, the function will panic
+before it attempts to use that index.
+
+Then we return two mutable slices in a tuple: one from the start of the
+original slice to the `mid` index and another from `mid` to the end of the
+slice.
+
+When we try to compile the code in Listing 19-5, we’ll get an error.
+
+```console
+{{#include ../listings/ch19-advanced-features/listing-19-05/output.txt}}
+```
+
+Rust’s borrow checker can’t understand that we’re borrowing different parts of
+the slice; it only knows that we’re borrowing from the same slice twice.
+Borrowing different parts of a slice is fundamentally okay because the two
+slices aren’t overlapping, but Rust isn’t smart enough to know this. When we
+know code is okay, but Rust doesn’t, it’s time to reach for unsafe code.
+
+Listing 19-6 shows how to use an `unsafe` block, a raw pointer, and some calls
+to unsafe functions to make the implementation of `split_at_mut` work.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-6: Using unsafe code in the implementation of
+the `split_at_mut` function</span>
+
+Recall from [“The Slice Type”][the-slice-type]<!-- ignore --> section in
+Chapter 4 that slices are a pointer to some data and the length of the slice.
+We use the `len` method to get the length of a slice and the `as_mut_ptr`
+method to access the raw pointer of a slice. In this case, because we have a
+mutable slice to `i32` values, `as_mut_ptr` returns a raw pointer with the type
+`*mut i32`, which we’ve stored in the variable `ptr`.
+
+We keep the assertion that the `mid` index is within the slice. Then we get to
+the unsafe code: the `slice::from_raw_parts_mut` function takes a raw pointer
+and a length, and it creates a slice. We use this function to create a slice
+that starts from `ptr` and is `mid` items long. Then we call the `add`
+method on `ptr` with `mid` as an argument to get a raw pointer that starts at
+`mid`, and we create a slice using that pointer and the remaining number of
+items after `mid` as the length.
+
+The function `slice::from_raw_parts_mut` is unsafe because it takes a raw
+pointer and must trust that this pointer is valid. The `add` method on raw
+pointers is also unsafe, because it must trust that the offset location is also
+a valid pointer. Therefore, we had to put an `unsafe` block around our calls to
+`slice::from_raw_parts_mut` and `add` so we could call them. By looking at
+the code and by adding the assertion that `mid` must be less than or equal to
+`len`, we can tell that all the raw pointers used within the `unsafe` block
+will be valid pointers to data within the slice. This is an acceptable and
+appropriate use of `unsafe`.
+
+Note that we don’t need to mark the resulting `split_at_mut` function as
+`unsafe`, and we can call this function from safe Rust. We’ve created a safe
+abstraction to the unsafe code with an implementation of the function that uses
+`unsafe` code in a safe way, because it creates only valid pointers from the
+data this function has access to.
+
+In contrast, the use of `slice::from_raw_parts_mut` in Listing 19-7 would
+likely crash when the slice is used. This code takes an arbitrary memory
+location and creates a slice 10,000 items long.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-7: Creating a slice from an arbitrary memory
+location</span>
+
+We don’t own the memory at this arbitrary location, and there is no guarantee
+that the slice this code creates contains valid `i32` values. Attempting to use
+`values` as though it’s a valid slice results in undefined behavior.
+
+#### Using `extern` Functions to Call External Code
+
+Sometimes, your Rust code might need to interact with code written in another
+language. For this, Rust has the keyword `extern` that facilitates the creation
+and use of a *Foreign Function Interface (FFI)*. An FFI is a way for a
+programming language to define functions and enable a different (foreign)
+programming language to call those functions.
+
+Listing 19-8 demonstrates how to set up an integration with the `abs` function
+from the C standard library. Functions declared within `extern` blocks are
+always unsafe to call from Rust code. The reason is that other languages don’t
+enforce Rust’s rules and guarantees, and Rust can’t check them, so
+responsibility falls on the programmer to ensure safety.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-08/src/main.rs}}
+```
+
+<span class="caption">Listing 19-8: Declaring and calling an `extern` function
+defined in another language</span>
+
+Within the `extern "C"` block, we list the names and signatures of external
+functions from another language we want to call. The `"C"` part defines which
+*application binary interface (ABI)* the external function uses: the ABI
+defines how to call the function at the assembly level. The `"C"` ABI is the
+most common and follows the C programming language’s ABI.
+
+> #### Calling Rust Functions from Other Languages
+>
+> We can also use `extern` to create an interface that allows other languages
+> to call Rust functions. Instead of creating a whole `extern` block, we add
+> the `extern` keyword and specify the ABI to use just before the `fn` keyword
+> for the relevant function. We also need to add a `#[no_mangle]` annotation to
+> tell the Rust compiler not to mangle the name of this function. *Mangling* is
+> when a compiler changes the name we’ve given a function to a different name
+> that contains more information for other parts of the compilation process to
+> consume but is less human readable. Every programming language compiler
+> mangles names slightly differently, so for a Rust function to be nameable by
+> other languages, we must disable the Rust compiler’s name mangling.
+>
+> In the following example, we make the `call_from_c` function accessible from
+> C code, after it’s compiled to a shared library and linked from C:
+>
+> ```rust
+> #[no_mangle]
+> pub extern "C" fn call_from_c() {
+> println!("Just called a Rust function from C!");
+> }
+> ```
+>
+> This usage of `extern` does not require `unsafe`.
+
+### Accessing or Modifying a Mutable Static Variable
+
+In this book, we’ve not yet talked about *global variables*, which Rust does
+support but can be problematic with Rust’s ownership rules. If two threads are
+accessing the same mutable global variable, it can cause a data race.
+
+In Rust, global variables are called *static* variables. Listing 19-9 shows an
+example declaration and use of a static variable with a string slice as a
+value.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-09/src/main.rs}}
+```
+
+<span class="caption">Listing 19-9: Defining and using an immutable static
+variable</span>
+
+Static variables are similar to constants, which we discussed in the
+[“Differences Between Variables and
+Constants”][differences-between-variables-and-constants]<!-- ignore --> section
+in Chapter 3. The names of static variables are in `SCREAMING_SNAKE_CASE` by
+convention. Static variables can only store references with the `'static`
+lifetime, which means the Rust compiler can figure out the lifetime and we
+aren’t required to annotate it explicitly. Accessing an immutable static
+variable is safe.
+
+A subtle difference between constants and immutable static variables is that
+values in a static variable have a fixed address in memory. Using the value
+will always access the same data. Constants, on the other hand, are allowed to
+duplicate their data whenever they’re used. Another difference is that static
+variables can be mutable. Accessing and modifying mutable static variables is
+*unsafe*. Listing 19-10 shows how to declare, access, and modify a mutable
+static variable named `COUNTER`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-10/src/main.rs}}
+```
+
+<span class="caption">Listing 19-10: Reading from or writing to a mutable
+static variable is unsafe</span>
+
+As with regular variables, we specify mutability using the `mut` keyword. Any
+code that reads or writes from `COUNTER` must be within an `unsafe` block. This
+code compiles and prints `COUNTER: 3` as we would expect because it’s single
+threaded. Having multiple threads access `COUNTER` would likely result in data
+races.
+
+With mutable data that is globally accessible, it’s difficult to ensure there
+are no data races, which is why Rust considers mutable static variables to be
+unsafe. Where possible, it’s preferable to use the concurrency techniques and
+thread-safe smart pointers we discussed in Chapter 16 so the compiler checks
+that data accessed from different threads is done safely.
+
+### Implementing an Unsafe Trait
+
+We can use `unsafe` to implement an unsafe trait. A trait is unsafe when at
+least one of its methods has some invariant that the compiler can’t verify. We
+declare that a trait is `unsafe` by adding the `unsafe` keyword before `trait`
+and marking the implementation of the trait as `unsafe` too, as shown in
+Listing 19-11.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-11/src/main.rs}}
+```
+
+<span class="caption">Listing 19-11: Defining and implementing an unsafe
+trait</span>
+
+By using `unsafe impl`, we’re promising that we’ll uphold the invariants that
+the compiler can’t verify.
+
+As an example, recall the `Sync` and `Send` marker traits we discussed in the
+[“Extensible Concurrency with the `Sync` and `Send`
+Traits”][extensible-concurrency-with-the-sync-and-send-traits]<!-- ignore -->
+section in Chapter 16: the compiler implements these traits automatically if
+our types are composed entirely of `Send` and `Sync` types. If we implement a
+type that contains a type that is not `Send` or `Sync`, such as raw pointers,
+and we want to mark that type as `Send` or `Sync`, we must use `unsafe`. Rust
+can’t verify that our type upholds the guarantees that it can be safely sent
+across threads or accessed from multiple threads; therefore, we need to do
+those checks manually and indicate as such with `unsafe`.
+
+### Accessing Fields of a Union
+
+The final action that works only with `unsafe` is accessing fields of a
+*union*. A `union` is similar to a `struct`, but only one declared field is
+used in a particular instance at one time. Unions are primarily used to
+interface with unions in C code. Accessing union fields is unsafe because Rust
+can’t guarantee the type of the data currently being stored in the union
+instance. You can learn more about unions in [the Rust Reference][reference].
+
+### When to Use Unsafe Code
+
+Using `unsafe` to take one of the five actions (superpowers) just discussed
+isn’t wrong or even frowned upon. But it is trickier to get `unsafe` code
+correct because the compiler can’t help uphold memory safety. When you have a
+reason to use `unsafe` code, you can do so, and having the explicit `unsafe`
+annotation makes it easier to track down the source of problems when they occur.
+
+[dangling-references]:
+ch04-02-references-and-borrowing.html#dangling-references
+[differences-between-variables-and-constants]:
+ch03-01-variables-and-mutability.html#constants
+[extensible-concurrency-with-the-sync-and-send-traits]:
+ch16-04-extensible-concurrency-sync-and-send.html#extensible-concurrency-with-the-sync-and-send-traits
+[the-slice-type]: ch04-03-slices.html#the-slice-type
+[reference]: ../reference/items/unions.html
diff --git a/src/doc/book/src/ch19-03-advanced-traits.md b/src/doc/book/src/ch19-03-advanced-traits.md
new file mode 100644
index 000000000..6fd3e09f4
--- /dev/null
+++ b/src/doc/book/src/ch19-03-advanced-traits.md
@@ -0,0 +1,468 @@
+## Advanced Traits
+
+We first covered traits in the [“Traits: Defining Shared
+Behavior”][traits-defining-shared-behavior]<!-- ignore --> section of Chapter
+10, but we didn’t discuss the more advanced details. Now that you know more
+about Rust, we can get into the nitty-gritty.
+
+### Specifying Placeholder Types in Trait Definitions with Associated Types
+
+*Associated types* connect a type placeholder with a trait such that the trait
+method definitions can use these placeholder types in their signatures. The
+implementor of a trait will specify the concrete type to be used instead of the
+placeholder type for the particular implementation. That way, we can define a
+trait that uses some types without needing to know exactly what those types are
+until the trait is implemented.
+
+We’ve described most of the advanced features in this chapter as being rarely
+needed. Associated types are somewhere in the middle: they’re used more rarely
+than features explained in the rest of the book but more commonly than many of
+the other features discussed in this chapter.
+
+One example of a trait with an associated type is the `Iterator` trait that the
+standard library provides. The associated type is named `Item` and stands in
+for the type of the values the type implementing the `Iterator` trait is
+iterating over. The definition of the `Iterator` trait is as shown in Listing
+19-12.
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-12/src/lib.rs}}
+```
+
+<span class="caption">Listing 19-12: The definition of the `Iterator` trait
+that has an associated type `Item`</span>
+
+The type `Item` is a placeholder, and the `next` method’s definition shows that
+it will return values of type `Option<Self::Item>`. Implementors of the
+`Iterator` trait will specify the concrete type for `Item`, and the `next`
+method will return an `Option` containing a value of that concrete type.
+
+Associated types might seem like a similar concept to generics, in that the
+latter allow us to define a function without specifying what types it can
+handle. To examine the difference between the two concepts, we’ll look at an
+implementation of the `Iterator` trait on a type named `Counter` that specifies
+the `Item` type is `u32`:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-22-iterator-on-counter/src/lib.rs:ch19}}
+```
+
+This syntax seems comparable to that of generics. So why not just define the
+`Iterator` trait with generics, as shown in Listing 19-13?
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-13/src/lib.rs}}
+```
+
+<span class="caption">Listing 19-13: A hypothetical definition of the
+`Iterator` trait using generics</span>
+
+The difference is that when using generics, as in Listing 19-13, we must
+annotate the types in each implementation; because we can also implement
+`Iterator<String> for Counter` or any other type, we could have multiple
+implementations of `Iterator` for `Counter`. In other words, when a trait has a
+generic parameter, it can be implemented for a type multiple times, changing
+the concrete types of the generic type parameters each time. When we use the
+`next` method on `Counter`, we would have to provide type annotations to
+indicate which implementation of `Iterator` we want to use.
+
+With associated types, we don’t need to annotate types because we can’t
+implement a trait on a type multiple times. In Listing 19-12 with the
+definition that uses associated types, we can only choose what the type of
+`Item` will be once, because there can only be one `impl Iterator for Counter`.
+We don’t have to specify that we want an iterator of `u32` values everywhere
+that we call `next` on `Counter`.
+
+Associated types also become part of the trait’s contract: implementors of the
+trait must provide a type to stand in for the associated type placeholder.
+Associated types often have a name that describes how the type will be used,
+and documenting the associated type in the API documentation is good practice.
+
+### Default Generic Type Parameters and Operator Overloading
+
+When we use generic type parameters, we can specify a default concrete type for
+the generic type. This eliminates the need for implementors of the trait to
+specify a concrete type if the default type works. You specify a default type
+when declaring a generic type with the `<PlaceholderType=ConcreteType>` syntax.
+
+A great example of a situation where this technique is useful is with *operator
+overloading*, in which you customize the behavior of an operator (such as `+`)
+in particular situations.
+
+Rust doesn’t allow you to create your own operators or overload arbitrary
+operators. But you can overload the operations and corresponding traits listed
+in `std::ops` by implementing the traits associated with the operator. For
+example, in Listing 19-14 we overload the `+` operator to add two `Point`
+instances together. We do this by implementing the `Add` trait on a `Point`
+struct:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-14/src/main.rs}}
+```
+
+<span class="caption">Listing 19-14: Implementing the `Add` trait to overload
+the `+` operator for `Point` instances</span>
+
+The `add` method adds the `x` values of two `Point` instances and the `y`
+values of two `Point` instances to create a new `Point`. The `Add` trait has an
+associated type named `Output` that determines the type returned from the `add`
+method.
+
+The default generic type in this code is within the `Add` trait. Here is its
+definition:
+
+```rust
+trait Add<Rhs=Self> {
+ type Output;
+
+ fn add(self, rhs: Rhs) -> Self::Output;
+}
+```
+
+This code should look generally familiar: a trait with one method and an
+associated type. The new part is `Rhs=Self`: this syntax is called *default
+type parameters*. The `Rhs` generic type parameter (short for “right hand
+side”) defines the type of the `rhs` parameter in the `add` method. If we don’t
+specify a concrete type for `Rhs` when we implement the `Add` trait, the type
+of `Rhs` will default to `Self`, which will be the type we’re implementing
+`Add` on.
+
+When we implemented `Add` for `Point`, we used the default for `Rhs` because we
+wanted to add two `Point` instances. Let’s look at an example of implementing
+the `Add` trait where we want to customize the `Rhs` type rather than using the
+default.
+
+We have two structs, `Millimeters` and `Meters`, holding values in different
+units. This thin wrapping of an existing type in another struct is known as the
+*newtype pattern*, which we describe in more detail in the [“Using the Newtype
+Pattern to Implement External Traits on External Types”][newtype]<!-- ignore
+--> section. We want to add values in millimeters to values in meters and have
+the implementation of `Add` do the conversion correctly. We can implement `Add`
+for `Millimeters` with `Meters` as the `Rhs`, as shown in Listing 19-15.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-15/src/lib.rs}}
+```
+
+<span class="caption">Listing 19-15: Implementing the `Add` trait on
+`Millimeters` to add `Millimeters` to `Meters`</span>
+
+To add `Millimeters` and `Meters`, we specify `impl Add<Meters>` to set the
+value of the `Rhs` type parameter instead of using the default of `Self`.
+
+You’ll use default type parameters in two main ways:
+
+* To extend a type without breaking existing code
+* To allow customization in specific cases most users won’t need
+
+The standard library’s `Add` trait is an example of the second purpose:
+usually, you’ll add two like types, but the `Add` trait provides the ability to
+customize beyond that. Using a default type parameter in the `Add` trait
+definition means you don’t have to specify the extra parameter most of the
+time. In other words, a bit of implementation boilerplate isn’t needed, making
+it easier to use the trait.
+
+The first purpose is similar to the second but in reverse: if you want to add a
+type parameter to an existing trait, you can give it a default to allow
+extension of the functionality of the trait without breaking the existing
+implementation code.
+
+### Fully Qualified Syntax for Disambiguation: Calling Methods with the Same Name
+
+Nothing in Rust prevents a trait from having a method with the same name as
+another trait’s method, nor does Rust prevent you from implementing both traits
+on one type. It’s also possible to implement a method directly on the type with
+the same name as methods from traits.
+
+When calling methods with the same name, you’ll need to tell Rust which one you
+want to use. Consider the code in Listing 19-16 where we’ve defined two traits,
+`Pilot` and `Wizard`, that both have a method called `fly`. We then implement
+both traits on a type `Human` that already has a method named `fly` implemented
+on it. Each `fly` method does something different.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-16/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-16: Two traits are defined to have a `fly`
+method and are implemented on the `Human` type, and a `fly` method is
+implemented on `Human` directly</span>
+
+When we call `fly` on an instance of `Human`, the compiler defaults to calling
+the method that is directly implemented on the type, as shown in Listing 19-17.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-17/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-17: Calling `fly` on an instance of
+`Human`</span>
+
+Running this code will print `*waving arms furiously*`, showing that Rust
+called the `fly` method implemented on `Human` directly.
+
+To call the `fly` methods from either the `Pilot` trait or the `Wizard` trait,
+we need to use more explicit syntax to specify which `fly` method we mean.
+Listing 19-18 demonstrates this syntax.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-18/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-18: Specifying which trait’s `fly` method we
+want to call</span>
+
+Specifying the trait name before the method name clarifies to Rust which
+implementation of `fly` we want to call. We could also write
+`Human::fly(&person)`, which is equivalent to the `person.fly()` that we used
+in Listing 19-18, but this is a bit longer to write if we don’t need to
+disambiguate.
+
+Running this code prints the following:
+
+```console
+{{#include ../listings/ch19-advanced-features/listing-19-18/output.txt}}
+```
+
+Because the `fly` method takes a `self` parameter, if we had two *types* that
+both implement one *trait*, Rust could figure out which implementation of a
+trait to use based on the type of `self`.
+
+However, associated functions that are not methods don’t have a `self`
+parameter. When there are multiple types or traits that define non-method
+functions with the same function name, Rust doesn't always know which type you
+mean unless you use *fully qualified syntax*. For example, in Listing 19-19 we
+create a trait for an animal shelter that wants to name all baby dogs *Spot*.
+We make an `Animal` trait with an associated non-method function `baby_name`.
+The `Animal` trait is implemented for the struct `Dog`, on which we also
+provide an associated non-method function `baby_name` directly.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-19/src/main.rs}}
+```
+
+<span class="caption">Listing 19-19: A trait with an associated function and a
+type with an associated function of the same name that also implements the
+trait</span>
+
+We implement the code for naming all puppies Spot in the `baby_name` associated
+function that is defined on `Dog`. The `Dog` type also implements the trait
+`Animal`, which describes characteristics that all animals have. Baby dogs are
+called puppies, and that is expressed in the implementation of the `Animal`
+trait on `Dog` in the `baby_name` function associated with the `Animal` trait.
+
+In `main`, we call the `Dog::baby_name` function, which calls the associated
+function defined on `Dog` directly. This code prints the following:
+
+```console
+{{#include ../listings/ch19-advanced-features/listing-19-19/output.txt}}
+```
+
+This output isn’t what we wanted. We want to call the `baby_name` function that
+is part of the `Animal` trait that we implemented on `Dog` so the code prints
+`A baby dog is called a puppy`. The technique of specifying the trait name that
+we used in Listing 19-18 doesn’t help here; if we change `main` to the code in
+Listing 19-20, we’ll get a compilation error.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-20/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-20: Attempting to call the `baby_name`
+function from the `Animal` trait, but Rust doesn’t know which implementation to
+use</span>
+
+Because `Animal::baby_name` doesn’t have a `self` parameter, and there could be
+other types that implement the `Animal` trait, Rust can’t figure out which
+implementation of `Animal::baby_name` we want. We’ll get this compiler error:
+
+```console
+{{#include ../listings/ch19-advanced-features/listing-19-20/output.txt}}
+```
+
+To disambiguate and tell Rust that we want to use the implementation of
+`Animal` for `Dog` as opposed to the implementation of `Animal` for some other
+type, we need to use fully qualified syntax. Listing 19-21 demonstrates how to
+use fully qualified syntax.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-21/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-21: Using fully qualified syntax to specify
+that we want to call the `baby_name` function from the `Animal` trait as
+implemented on `Dog`</span>
+
+We’re providing Rust with a type annotation within the angle brackets, which
+indicates we want to call the `baby_name` method from the `Animal` trait as
+implemented on `Dog` by saying that we want to treat the `Dog` type as an
+`Animal` for this function call. This code will now print what we want:
+
+```console
+{{#include ../listings/ch19-advanced-features/listing-19-21/output.txt}}
+```
+
+In general, fully qualified syntax is defined as follows:
+
+```rust,ignore
+<Type as Trait>::function(receiver_if_method, next_arg, ...);
+```
+
+For associated functions that aren’t methods, there would not be a `receiver`:
+there would only be the list of other arguments. You could use fully qualified
+syntax everywhere that you call functions or methods. However, you’re allowed
+to omit any part of this syntax that Rust can figure out from other information
+in the program. You only need to use this more verbose syntax in cases where
+there are multiple implementations that use the same name and Rust needs help
+to identify which implementation you want to call.
+
+### Using Supertraits to Require One Trait’s Functionality Within Another Trait
+
+Sometimes, you might write a trait definition that depends on another trait:
+for a type to implement the first trait, you want to require that type to also
+implement the second trait. You would do this so that your trait definition can
+make use of the associated items of the second trait. The trait your trait
+definition is relying on is called a *supertrait* of your trait.
+
+For example, let’s say we want to make an `OutlinePrint` trait with an
+`outline_print` method that will print a given value formatted so that it's
+framed in asterisks. That is, given a `Point` struct that implements the
+standard library trait `Display` to result in `(x, y)`, when we call
+`outline_print` on a `Point` instance that has `1` for `x` and `3` for `y`, it
+should print the following:
+
+```text
+**********
+* *
+* (1, 3) *
+* *
+**********
+```
+
+In the implementation of the `outline_print` method, we want to use the
+`Display` trait’s functionality. Therefore, we need to specify that the
+`OutlinePrint` trait will work only for types that also implement `Display` and
+provide the functionality that `OutlinePrint` needs. We can do that in the
+trait definition by specifying `OutlinePrint: Display`. This technique is
+similar to adding a trait bound to the trait. Listing 19-22 shows an
+implementation of the `OutlinePrint` trait.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-22/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-22: Implementing the `OutlinePrint` trait that
+requires the functionality from `Display`</span>
+
+Because we’ve specified that `OutlinePrint` requires the `Display` trait, we
+can use the `to_string` function that is automatically implemented for any type
+that implements `Display`. If we tried to use `to_string` without adding a
+colon and specifying the `Display` trait after the trait name, we’d get an
+error saying that no method named `to_string` was found for the type `&Self` in
+the current scope.
+
+Let’s see what happens when we try to implement `OutlinePrint` on a type that
+doesn’t implement `Display`, such as the `Point` struct:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/src/main.rs:here}}
+```
+
+We get an error saying that `Display` is required but not implemented:
+
+```console
+{{#include ../listings/ch19-advanced-features/no-listing-02-impl-outlineprint-for-point/output.txt}}
+```
+
+To fix this, we implement `Display` on `Point` and satisfy the constraint that
+`OutlinePrint` requires, like so:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-03-impl-display-for-point/src/main.rs:here}}
+```
+
+Then implementing the `OutlinePrint` trait on `Point` will compile
+successfully, and we can call `outline_print` on a `Point` instance to display
+it within an outline of asterisks.
+
+### Using the Newtype Pattern to Implement External Traits on External Types
+
+In Chapter 10 in the [“Implementing a Trait on a
+Type”][implementing-a-trait-on-a-type]<!-- ignore --> section, we mentioned the
+orphan rule that states we’re only allowed to implement a trait on a type if
+either the trait or the type are local to our crate. It’s possible to get
+around this restriction using the *newtype pattern*, which involves creating a
+new type in a tuple struct. (We covered tuple structs in the [“Using Tuple
+Structs without Named Fields to Create Different Types”][tuple-structs]<!--
+ignore --> section of Chapter 5.) The tuple struct will have one field and be a
+thin wrapper around the type we want to implement a trait for. Then the wrapper
+type is local to our crate, and we can implement the trait on the wrapper.
+*Newtype* is a term that originates from the Haskell programming language.
+There is no runtime performance penalty for using this pattern, and the wrapper
+type is elided at compile time.
+
+As an example, let’s say we want to implement `Display` on `Vec<T>`, which the
+orphan rule prevents us from doing directly because the `Display` trait and the
+`Vec<T>` type are defined outside our crate. We can make a `Wrapper` struct
+that holds an instance of `Vec<T>`; then we can implement `Display` on
+`Wrapper` and use the `Vec<T>` value, as shown in Listing 19-23.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-23/src/main.rs}}
+```
+
+<span class="caption">Listing 19-23: Creating a `Wrapper` type around
+`Vec<String>` to implement `Display`</span>
+
+The implementation of `Display` uses `self.0` to access the inner `Vec<T>`,
+because `Wrapper` is a tuple struct and `Vec<T>` is the item at index 0 in the
+tuple. Then we can use the functionality of the `Display` type on `Wrapper`.
+
+The downside of using this technique is that `Wrapper` is a new type, so it
+doesn’t have the methods of the value it’s holding. We would have to implement
+all the methods of `Vec<T>` directly on `Wrapper` such that the methods
+delegate to `self.0`, which would allow us to treat `Wrapper` exactly like a
+`Vec<T>`. If we wanted the new type to have every method the inner type has,
+implementing the `Deref` trait (discussed in Chapter 15 in the [“Treating Smart
+Pointers Like Regular References with the `Deref`
+Trait”][smart-pointer-deref]<!-- ignore --> section) on the `Wrapper` to return
+the inner type would be a solution. If we don’t want the `Wrapper` type to have
+all the methods of the inner type—for example, to restrict the `Wrapper` type’s
+behavior—we would have to implement just the methods we do want manually.
+
+This newtype pattern is also useful even when traits are not involved. Let’s
+switch focus and look at some advanced ways to interact with Rust’s type system.
+
+[newtype]: ch19-03-advanced-traits.html#using-the-newtype-pattern-to-implement-external-traits-on-external-types
+[implementing-a-trait-on-a-type]:
+ch10-02-traits.html#implementing-a-trait-on-a-type
+[traits-defining-shared-behavior]:
+ch10-02-traits.html#traits-defining-shared-behavior
+[smart-pointer-deref]: ch15-02-deref.html#treating-smart-pointers-like-regular-references-with-the-deref-trait
+[tuple-structs]: ch05-01-defining-structs.html#using-tuple-structs-without-named-fields-to-create-different-types
diff --git a/src/doc/book/src/ch19-04-advanced-types.md b/src/doc/book/src/ch19-04-advanced-types.md
new file mode 100644
index 000000000..2dfed23cc
--- /dev/null
+++ b/src/doc/book/src/ch19-04-advanced-types.md
@@ -0,0 +1,297 @@
+## Advanced Types
+
+The Rust type system has some features that we’ve so far mentioned but haven’t
+yet discussed. We’ll start by discussing newtypes in general as we examine why
+newtypes are useful as types. Then we’ll move on to type aliases, a feature
+similar to newtypes but with slightly different semantics. We’ll also discuss
+the `!` type and dynamically sized types.
+
+### Using the Newtype Pattern for Type Safety and Abstraction
+
+> Note: This section assumes you’ve read the earlier section [“Using the
+> Newtype Pattern to Implement External Traits on External
+> Types.”][using-the-newtype-pattern]<!-- ignore -->
+
+The newtype pattern is also useful for tasks beyond those we’ve discussed so
+far, including statically enforcing that values are never confused and
+indicating the units of a value. You saw an example of using newtypes to
+indicate units in Listing 19-15: recall that the `Millimeters` and `Meters`
+structs wrapped `u32` values in a newtype. If we wrote a function with a
+parameter of type `Millimeters`, we couldn’t compile a program that
+accidentally tried to call that function with a value of type `Meters` or a
+plain `u32`.
+
+We can also use the newtype pattern to abstract away some implementation
+details of a type: the new type can expose a public API that is different from
+the API of the private inner type.
+
+Newtypes can also hide internal implementation. For example, we could provide a
+`People` type to wrap a `HashMap<i32, String>` that stores a person’s ID
+associated with their name. Code using `People` would only interact with the
+public API we provide, such as a method to add a name string to the `People`
+collection; that code wouldn’t need to know that we assign an `i32` ID to names
+internally. The newtype pattern is a lightweight way to achieve encapsulation
+to hide implementation details, which we discussed in the [“Encapsulation that
+Hides Implementation
+Details”][encapsulation-that-hides-implementation-details]<!-- ignore -->
+section of Chapter 17.
+
+### Creating Type Synonyms with Type Aliases
+
+Rust provides the ability to declare a *type alias* to give an existing type
+another name. For this we use the `type` keyword. For example, we can create
+the alias `Kilometers` to `i32` like so:
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs:here}}
+```
+
+Now, the alias `Kilometers` is a *synonym* for `i32`; unlike the `Millimeters`
+and `Meters` types we created in Listing 19-15, `Kilometers` is not a separate,
+new type. Values that have the type `Kilometers` will be treated the same as
+values of type `i32`:
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-04-kilometers-alias/src/main.rs:there}}
+```
+
+Because `Kilometers` and `i32` are the same type, we can add values of both
+types and we can pass `Kilometers` values to functions that take `i32`
+parameters. However, using this method, we don’t get the type checking benefits
+that we get from the newtype pattern discussed earlier. In other words, if we
+mix up `Kilometers` and `i32` values somewhere, the compiler will not give us
+an error.
+
+The main use case for type synonyms is to reduce repetition. For example, we
+might have a lengthy type like this:
+
+```rust,ignore
+Box<dyn Fn() + Send + 'static>
+```
+
+Writing this lengthy type in function signatures and as type annotations all
+over the code can be tiresome and error prone. Imagine having a project full of
+code like that in Listing 19-24.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-24/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-24: Using a long type in many places</span>
+
+A type alias makes this code more manageable by reducing the repetition. In
+Listing 19-25, we’ve introduced an alias named `Thunk` for the verbose type and
+can replace all uses of the type with the shorter alias `Thunk`.
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-25/src/main.rs:here}}
+```
+
+<span class="caption">Listing 19-25: Introducing a type alias `Thunk` to reduce
+repetition</span>
+
+This code is much easier to read and write! Choosing a meaningful name for a
+type alias can help communicate your intent as well (*thunk* is a word for code
+to be evaluated at a later time, so it’s an appropriate name for a closure that
+gets stored).
+
+Type aliases are also commonly used with the `Result<T, E>` type for reducing
+repetition. Consider the `std::io` module in the standard library. I/O
+operations often return a `Result<T, E>` to handle situations when operations
+fail to work. This library has a `std::io::Error` struct that represents all
+possible I/O errors. Many of the functions in `std::io` will be returning
+`Result<T, E>` where the `E` is `std::io::Error`, such as these functions in
+the `Write` trait:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-05-write-trait/src/lib.rs}}
+```
+
+The `Result<..., Error>` is repeated a lot. As such, `std::io` has this type
+alias declaration:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs:here}}
+```
+
+Because this declaration is in the `std::io` module, we can use the fully
+qualified alias `std::io::Result<T>`; that is, a `Result<T, E>` with the `E`
+filled in as `std::io::Error`. The `Write` trait function signatures end up
+looking like this:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-06-result-alias/src/lib.rs:there}}
+```
+
+The type alias helps in two ways: it makes code easier to write *and* it gives
+us a consistent interface across all of `std::io`. Because it’s an alias, it’s
+just another `Result<T, E>`, which means we can use any methods that work on
+`Result<T, E>` with it, as well as special syntax like the `?` operator.
+
+### The Never Type that Never Returns
+
+Rust has a special type named `!` that’s known in type theory lingo as the
+*empty type* because it has no values. We prefer to call it the *never type*
+because it stands in the place of the return type when a function will never
+return. Here is an example:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-07-never-type/src/lib.rs:here}}
+```
+
+This code is read as “the function `bar` returns never.” Functions that return
+never are called *diverging functions*. We can’t create values of the type `!`
+so `bar` can never possibly return.
+
+But what use is a type you can never create values for? Recall the code from
+Listing 2-5, part of the number guessing game; we’ve reproduced a bit of it
+here in Listing 19-26.
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch02-guessing-game-tutorial/listing-02-05/src/main.rs:ch19}}
+```
+
+<span class="caption">Listing 19-26: A `match` with an arm that ends in
+`continue`</span>
+
+At the time, we skipped over some details in this code. In Chapter 6 in [“The
+`match` Control Flow Operator”][the-match-control-flow-operator]<!-- ignore -->
+section, we discussed that `match` arms must all return the same type. So, for
+example, the following code doesn’t work:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-08-match-arms-different-types/src/main.rs:here}}
+```
+
+The type of `guess` in this code would have to be an integer *and* a string,
+and Rust requires that `guess` have only one type. So what does `continue`
+return? How were we allowed to return a `u32` from one arm and have another arm
+that ends with `continue` in Listing 19-26?
+
+As you might have guessed, `continue` has a `!` value. That is, when Rust
+computes the type of `guess`, it looks at both match arms, the former with a
+value of `u32` and the latter with a `!` value. Because `!` can never have a
+value, Rust decides that the type of `guess` is `u32`.
+
+The formal way of describing this behavior is that expressions of type `!` can
+be coerced into any other type. We’re allowed to end this `match` arm with
+`continue` because `continue` doesn’t return a value; instead, it moves control
+back to the top of the loop, so in the `Err` case, we never assign a value to
+`guess`.
+
+The never type is useful with the `panic!` macro as well. Recall the `unwrap`
+function that we call on `Option<T>` values to produce a value or panic with
+this definition:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-09-unwrap-definition/src/lib.rs:here}}
+```
+
+In this code, the same thing happens as in the `match` in Listing 19-26: Rust
+sees that `val` has the type `T` and `panic!` has the type `!`, so the result
+of the overall `match` expression is `T`. This code works because `panic!`
+doesn’t produce a value; it ends the program. In the `None` case, we won’t be
+returning a value from `unwrap`, so this code is valid.
+
+One final expression that has the type `!` is a `loop`:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-10-loop-returns-never/src/main.rs:here}}
+```
+
+Here, the loop never ends, so `!` is the value of the expression. However, this
+wouldn’t be true if we included a `break`, because the loop would terminate
+when it got to the `break`.
+
+### Dynamically Sized Types and the `Sized` Trait
+
+Rust needs to know certain details about its types, such as how much space to
+allocate for a value of a particular type. This leaves one corner of its type
+system a little confusing at first: the concept of *dynamically sized types*.
+Sometimes referred to as *DSTs* or *unsized types*, these types let us write
+code using values whose size we can know only at runtime.
+
+Let’s dig into the details of a dynamically sized type called `str`, which
+we’ve been using throughout the book. That’s right, not `&str`, but `str` on
+its own, is a DST. We can’t know how long the string is until runtime, meaning
+we can’t create a variable of type `str`, nor can we take an argument of type
+`str`. Consider the following code, which does not work:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-11-cant-create-str/src/main.rs:here}}
+```
+
+Rust needs to know how much memory to allocate for any value of a particular
+type, and all values of a type must use the same amount of memory. If Rust
+allowed us to write this code, these two `str` values would need to take up the
+same amount of space. But they have different lengths: `s1` needs 12 bytes of
+storage and `s2` needs 15. This is why it’s not possible to create a variable
+holding a dynamically sized type.
+
+So what do we do? In this case, you already know the answer: we make the types
+of `s1` and `s2` a `&str` rather than a `str`. Recall from the [“String
+Slices”][string-slices]<!-- ignore --> section of Chapter 4 that the slice data
+structure just stores the starting position and the length of the slice. So
+although a `&T` is a single value that stores the memory address of where the
+`T` is located, a `&str` is *two* values: the address of the `str` and its
+length. As such, we can know the size of a `&str` value at compile time: it’s
+twice the length of a `usize`. That is, we always know the size of a `&str`, no
+matter how long the string it refers to is. In general, this is the way in
+which dynamically sized types are used in Rust: they have an extra bit of
+metadata that stores the size of the dynamic information. The golden rule of
+dynamically sized types is that we must always put values of dynamically sized
+types behind a pointer of some kind.
+
+We can combine `str` with all kinds of pointers: for example, `Box<str>` or
+`Rc<str>`. In fact, you’ve seen this before but with a different dynamically
+sized type: traits. Every trait is a dynamically sized type we can refer to by
+using the name of the trait. In Chapter 17 in the [“Using Trait Objects That
+Allow for Values of Different
+Types”][using-trait-objects-that-allow-for-values-of-different-types]<!--
+ignore --> section, we mentioned that to use traits as trait objects, we must
+put them behind a pointer, such as `&dyn Trait` or `Box<dyn Trait>` (`Rc<dyn
+Trait>` would work too).
+
+To work with DSTs, Rust provides the `Sized` trait to determine whether or not
+a type’s size is known at compile time. This trait is automatically implemented
+for everything whose size is known at compile time. In addition, Rust
+implicitly adds a bound on `Sized` to every generic function. That is, a
+generic function definition like this:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-12-generic-fn-definition/src/lib.rs}}
+```
+
+is actually treated as though we had written this:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-13-generic-implicit-sized-bound/src/lib.rs}}
+```
+
+By default, generic functions will work only on types that have a known size at
+compile time. However, you can use the following special syntax to relax this
+restriction:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-14-generic-maybe-sized/src/lib.rs}}
+```
+
+A trait bound on `?Sized` means “`T` may or may not be `Sized`” and this
+notation overrides the default that generic types must have a known size at
+compile time. The `?Trait` syntax with this meaning is only available for
+`Sized`, not any other traits.
+
+Also note that we switched the type of the `t` parameter from `T` to `&T`.
+Because the type might not be `Sized`, we need to use it behind some kind of
+pointer. In this case, we’ve chosen a reference.
+
+Next, we’ll talk about functions and closures!
+
+[encapsulation-that-hides-implementation-details]:
+ch17-01-what-is-oo.html#encapsulation-that-hides-implementation-details
+[string-slices]: ch04-03-slices.html#string-slices
+[the-match-control-flow-operator]:
+ch06-02-match.html#the-match-control-flow-operator
+[using-trait-objects-that-allow-for-values-of-different-types]:
+ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types
+[using-the-newtype-pattern]: ch19-03-advanced-traits.html#using-the-newtype-pattern-to-implement-external-traits-on-external-types
diff --git a/src/doc/book/src/ch19-05-advanced-functions-and-closures.md b/src/doc/book/src/ch19-05-advanced-functions-and-closures.md
new file mode 100644
index 000000000..69624f056
--- /dev/null
+++ b/src/doc/book/src/ch19-05-advanced-functions-and-closures.md
@@ -0,0 +1,130 @@
+## Advanced Functions and Closures
+
+This section explores some advanced features related to functions and closures,
+including function pointers and returning closures.
+
+### Function Pointers
+
+We’ve talked about how to pass closures to functions; you can also pass regular
+functions to functions! This technique is useful when you want to pass a
+function you’ve already defined rather than defining a new closure. Functions
+coerce to the type `fn` (with a lowercase f), not to be confused with the `Fn`
+closure trait. The `fn` type is called a *function pointer*. Passing functions
+with function pointers will allow you to use functions as arguments to other
+functions.
+
+The syntax for specifying that a parameter is a function pointer is similar to
+that of closures, as shown in Listing 19-27, where we’ve defined a function
+`add_one` that adds one to its parameter. The function `do_twice` takes two
+parameters: a function pointer to any function that takes an `i32` parameter
+and returns an `i32`, and one `i32 value`. The `do_twice` function calls the
+function `f` twice, passing it the `arg` value, then adds the two function call
+results together. The `main` function calls `do_twice` with the arguments
+`add_one` and `5`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-27/src/main.rs}}
+```
+
+<span class="caption">Listing 19-27: Using the `fn` type to accept a function
+pointer as an argument</span>
+
+This code prints `The answer is: 12`. We specify that the parameter `f` in
+`do_twice` is an `fn` that takes one parameter of type `i32` and returns an
+`i32`. We can then call `f` in the body of `do_twice`. In `main`, we can pass
+the function name `add_one` as the first argument to `do_twice`.
+
+Unlike closures, `fn` is a type rather than a trait, so we specify `fn` as the
+parameter type directly rather than declaring a generic type parameter with one
+of the `Fn` traits as a trait bound.
+
+Function pointers implement all three of the closure traits (`Fn`, `FnMut`, and
+`FnOnce`), meaning you can always pass a function pointer as an argument for a
+function that expects a closure. It’s best to write functions using a generic
+type and one of the closure traits so your functions can accept either
+functions or closures.
+
+That said, one example of where you would want to only accept `fn` and not
+closures is when interfacing with external code that doesn’t have closures: C
+functions can accept functions as arguments, but C doesn’t have closures.
+
+As an example of where you could use either a closure defined inline or a named
+function, let’s look at a use of the `map` method provided by the `Iterator`
+trait in the standard library. To use the `map` function to turn a vector of
+numbers into a vector of strings, we could use a closure, like this:
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-15-map-closure/src/main.rs:here}}
+```
+
+Or we could name a function as the argument to `map` instead of the closure,
+like this:
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-16-map-function/src/main.rs:here}}
+```
+
+Note that we must use the fully qualified syntax that we talked about earlier
+in the [“Advanced Traits”][advanced-traits]<!-- ignore --> section because
+there are multiple functions available named `to_string`. Here, we’re using the
+`to_string` function defined in the `ToString` trait, which the standard
+library has implemented for any type that implements `Display`.
+
+Recall from the [“Enum values”][enum-values]<!-- ignore --> section of Chapter
+6 that the name of each enum variant that we define also becomes an initializer
+function. We can use these initializer functions as function pointers that
+implement the closure traits, which means we can specify the initializer
+functions as arguments for methods that take closures, like so:
+
+```rust
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-17-map-initializer/src/main.rs:here}}
+```
+
+Here we create `Status::Value` instances using each `u32` value in the range
+that `map` is called on by using the initializer function of `Status::Value`.
+Some people prefer this style, and some people prefer to use closures. They
+compile to the same code, so use whichever style is clearer to you.
+
+### Returning Closures
+
+Closures are represented by traits, which means you can’t return closures
+directly. In most cases where you might want to return a trait, you can instead
+use the concrete type that implements the trait as the return value of the
+function. However, you can’t do that with closures because they don’t have a
+concrete type that is returnable; you’re not allowed to use the function
+pointer `fn` as a return type, for example.
+
+The following code tries to return a closure directly, but it won’t compile:
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-18-returns-closure/src/lib.rs}}
+```
+
+The compiler error is as follows:
+
+```console
+{{#include ../listings/ch19-advanced-features/no-listing-18-returns-closure/output.txt}}
+```
+
+The error references the `Sized` trait again! Rust doesn’t know how much space
+it will need to store the closure. We saw a solution to this problem earlier.
+We can use a trait object:
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-19-returns-closure-trait-object/src/lib.rs}}
+```
+
+This code will compile just fine. For more about trait objects, refer to the
+section [“Using Trait Objects That Allow for Values of Different
+Types”][using-trait-objects-that-allow-for-values-of-different-types]<!--
+ignore --> in Chapter 17.
+
+Next, let’s look at macros!
+
+[advanced-traits]:
+ch19-03-advanced-traits.html#advanced-traits
+[enum-values]: ch06-01-defining-an-enum.html#enum-values
+[using-trait-objects-that-allow-for-values-of-different-types]:
+ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types
diff --git a/src/doc/book/src/ch19-06-macros.md b/src/doc/book/src/ch19-06-macros.md
new file mode 100644
index 000000000..7731869ea
--- /dev/null
+++ b/src/doc/book/src/ch19-06-macros.md
@@ -0,0 +1,513 @@
+## Macros
+
+We’ve used macros like `println!` throughout this book, but we haven’t fully
+explored what a macro is and how it works. The term *macro* refers to a family
+of features in Rust: *declarative* macros with `macro_rules!` and three kinds
+of *procedural* macros:
+
+* Custom `#[derive]` macros that specify code added with the `derive` attribute
+ used on structs and enums
+* Attribute-like macros that define custom attributes usable on any item
+* Function-like macros that look like function calls but operate on the tokens
+ specified as their argument
+
+We’ll talk about each of these in turn, but first, let’s look at why we even
+need macros when we already have functions.
+
+### The Difference Between Macros and Functions
+
+Fundamentally, macros are a way of writing code that writes other code, which
+is known as *metaprogramming*. In Appendix C, we discuss the `derive`
+attribute, which generates an implementation of various traits for you. We’ve
+also used the `println!` and `vec!` macros throughout the book. All of these
+macros *expand* to produce more code than the code you’ve written manually.
+
+Metaprogramming is useful for reducing the amount of code you have to write and
+maintain, which is also one of the roles of functions. However, macros have
+some additional powers that functions don’t.
+
+A function signature must declare the number and type of parameters the
+function has. Macros, on the other hand, can take a variable number of
+parameters: we can call `println!("hello")` with one argument or
+`println!("hello {}", name)` with two arguments. Also, macros are expanded
+before the compiler interprets the meaning of the code, so a macro can, for
+example, implement a trait on a given type. A function can’t, because it gets
+called at runtime and a trait needs to be implemented at compile time.
+
+The downside to implementing a macro instead of a function is that macro
+definitions are more complex than function definitions because you’re writing
+Rust code that writes Rust code. Due to this indirection, macro definitions are
+generally more difficult to read, understand, and maintain than function
+definitions.
+
+Another important difference between macros and functions is that you must
+define macros or bring them into scope *before* you call them in a file, as
+opposed to functions you can define anywhere and call anywhere.
+
+### Declarative Macros with `macro_rules!` for General Metaprogramming
+
+The most widely used form of macros in Rust is the *declarative macro*. These
+are also sometimes referred to as “macros by example,” “`macro_rules!` macros,”
+or just plain “macros.” At their core, declarative macros allow you to write
+something similar to a Rust `match` expression. As discussed in Chapter 6,
+`match` expressions are control structures that take an expression, compare the
+resulting value of the expression to patterns, and then run the code associated
+with the matching pattern. Macros also compare a value to patterns that are
+associated with particular code: in this situation, the value is the literal
+Rust source code passed to the macro; the patterns are compared with the
+structure of that source code; and the code associated with each pattern, when
+matched, replaces the code passed to the macro. This all happens during
+compilation.
+
+To define a macro, you use the `macro_rules!` construct. Let’s explore how to
+use `macro_rules!` by looking at how the `vec!` macro is defined. Chapter 8
+covered how we can use the `vec!` macro to create a new vector with particular
+values. For example, the following macro creates a new vector containing three
+integers:
+
+```rust
+let v: Vec<u32> = vec![1, 2, 3];
+```
+
+We could also use the `vec!` macro to make a vector of two integers or a vector
+of five string slices. We wouldn’t be able to use a function to do the same
+because we wouldn’t know the number or type of values up front.
+
+Listing 19-28 shows a slightly simplified definition of the `vec!` macro.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-28/src/lib.rs}}
+```
+
+<span class="caption">Listing 19-28: A simplified version of the `vec!` macro
+definition</span>
+
+> Note: The actual definition of the `vec!` macro in the standard library
+> includes code to preallocate the correct amount of memory up front. That code
+> is an optimization that we don’t include here to make the example simpler.
+
+The `#[macro_export]` annotation indicates that this macro should be made
+available whenever the crate in which the macro is defined is brought into
+scope. Without this annotation, the macro can’t be brought into scope.
+
+We then start the macro definition with `macro_rules!` and the name of the
+macro we’re defining *without* the exclamation mark. The name, in this case
+`vec`, is followed by curly brackets denoting the body of the macro definition.
+
+The structure in the `vec!` body is similar to the structure of a `match`
+expression. Here we have one arm with the pattern `( $( $x:expr ),* )`,
+followed by `=>` and the block of code associated with this pattern. If the
+pattern matches, the associated block of code will be emitted. Given that this
+is the only pattern in this macro, there is only one valid way to match; any
+other pattern will result in an error. More complex macros will have more than
+one arm.
+
+Valid pattern syntax in macro definitions is different than the pattern syntax
+covered in Chapter 18 because macro patterns are matched against Rust code
+structure rather than values. Let’s walk through what the pattern pieces in
+Listing 19-28 mean; for the full macro pattern syntax, see the [Rust
+Reference][ref].
+
+First, we use a set of parentheses to encompass the whole pattern. We use a
+dollar sign (`$`) to declare a variable in the macro system that will contain
+the Rust code matching the pattern. The dollar sign makes it clear this is a
+macro variable as opposed to a regular Rust variable. Next comes a set of
+parentheses that captures values that match the pattern within the parentheses
+for use in the replacement code. Within `$()` is `$x:expr`, which matches any
+Rust expression and gives the expression the name `$x`.
+
+The comma following `$()` indicates that a literal comma separator character
+could optionally appear after the code that matches the code in `$()`. The `*`
+specifies that the pattern matches zero or more of whatever precedes the `*`.
+
+When we call this macro with `vec![1, 2, 3];`, the `$x` pattern matches three
+times with the three expressions `1`, `2`, and `3`.
+
+Now let’s look at the pattern in the body of the code associated with this arm:
+`temp_vec.push()` within `$()*` is generated for each part that matches `$()`
+in the pattern zero or more times depending on how many times the pattern
+matches. The `$x` is replaced with each expression matched. When we call this
+macro with `vec![1, 2, 3];`, the code generated that replaces this macro call
+will be the following:
+
+```rust,ignore
+{
+ let mut temp_vec = Vec::new();
+ temp_vec.push(1);
+ temp_vec.push(2);
+ temp_vec.push(3);
+ temp_vec
+}
+```
+
+We’ve defined a macro that can take any number of arguments of any type and can
+generate code to create a vector containing the specified elements.
+
+To learn more about how to write macros, consult the online documentation or
+other resources, such as [“The Little Book of Rust Macros”][tlborm] started by
+Daniel Keep and continued by Lukas Wirth.
+
+### Procedural Macros for Generating Code from Attributes
+
+The second form of macros is the *procedural macro*, which acts more like a
+function (and is a type of procedure). Procedural macros accept some code as an
+input, operate on that code, and produce some code as an output rather than
+matching against patterns and replacing the code with other code as declarative
+macros do. The three kinds of procedural macros are custom derive,
+attribute-like, and function-like, and all work in a similar fashion.
+
+When creating procedural macros, the definitions must reside in their own crate
+with a special crate type. This is for complex technical reasons that we hope
+to eliminate in the future. In Listing 19-29, we show how to define a
+procedural macro, where `some_attribute` is a placeholder for using a specific
+macro variety.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore
+use proc_macro;
+
+#[some_attribute]
+pub fn some_name(input: TokenStream) -> TokenStream {
+}
+```
+
+<span class="caption">Listing 19-29: An example of defining a procedural
+macro</span>
+
+The function that defines a procedural macro takes a `TokenStream` as an input
+and produces a `TokenStream` as an output. The `TokenStream` type is defined by
+the `proc_macro` crate that is included with Rust and represents a sequence of
+tokens. This is the core of the macro: the source code that the macro is
+operating on makes up the input `TokenStream`, and the code the macro produces
+is the output `TokenStream`. The function also has an attribute attached to it
+that specifies which kind of procedural macro we’re creating. We can have
+multiple kinds of procedural macros in the same crate.
+
+Let’s look at the different kinds of procedural macros. We’ll start with a
+custom derive macro and then explain the small dissimilarities that make the
+other forms different.
+
+### How to Write a Custom `derive` Macro
+
+Let’s create a crate named `hello_macro` that defines a trait named
+`HelloMacro` with one associated function named `hello_macro`. Rather than
+making our users implement the `HelloMacro` trait for each of their types,
+we’ll provide a procedural macro so users can annotate their type with
+`#[derive(HelloMacro)]` to get a default implementation of the `hello_macro`
+function. The default implementation will print `Hello, Macro! My name is
+TypeName!` where `TypeName` is the name of the type on which this trait has
+been defined. In other words, we’ll write a crate that enables another
+programmer to write code like Listing 19-30 using our crate.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-30/src/main.rs}}
+```
+
+<span class="caption">Listing 19-30: The code a user of our crate will be able
+to write when using our procedural macro</span>
+
+This code will print `Hello, Macro! My name is Pancakes!` when we’re done. The
+first step is to make a new library crate, like this:
+
+```console
+$ cargo new hello_macro --lib
+```
+
+Next, we’ll define the `HelloMacro` trait and its associated function:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/hello_macro/src/lib.rs}}
+```
+
+We have a trait and its function. At this point, our crate user could implement
+the trait to achieve the desired functionality, like so:
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/no-listing-20-impl-hellomacro-for-pancakes/pancakes/src/main.rs}}
+```
+
+However, they would need to write the implementation block for each type they
+wanted to use with `hello_macro`; we want to spare them from having to do this
+work.
+
+Additionally, we can’t yet provide the `hello_macro` function with default
+implementation that will print the name of the type the trait is implemented
+on: Rust doesn’t have reflection capabilities, so it can’t look up the type’s
+name at runtime. We need a macro to generate code at compile time.
+
+The next step is to define the procedural macro. At the time of this writing,
+procedural macros need to be in their own crate. Eventually, this restriction
+might be lifted. The convention for structuring crates and macro crates is as
+follows: for a crate named `foo`, a custom derive procedural macro crate is
+called `foo_derive`. Let’s start a new crate called `hello_macro_derive` inside
+our `hello_macro` project:
+
+```console
+$ cargo new hello_macro_derive --lib
+```
+
+Our two crates are tightly related, so we create the procedural macro crate
+within the directory of our `hello_macro` crate. If we change the trait
+definition in `hello_macro`, we’ll have to change the implementation of the
+procedural macro in `hello_macro_derive` as well. The two crates will need to
+be published separately, and programmers using these crates will need to add
+both as dependencies and bring them both into scope. We could instead have the
+`hello_macro` crate use `hello_macro_derive` as a dependency and re-export the
+procedural macro code. However, the way we’ve structured the project makes it
+possible for programmers to use `hello_macro` even if they don’t want the
+`derive` functionality.
+
+We need to declare the `hello_macro_derive` crate as a procedural macro crate.
+We’ll also need functionality from the `syn` and `quote` crates, as you’ll see
+in a moment, so we need to add them as dependencies. Add the following to the
+*Cargo.toml* file for `hello_macro_derive`:
+
+<span class="filename">Filename: hello_macro_derive/Cargo.toml</span>
+
+```toml
+{{#include ../listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/Cargo.toml:6:12}}
+```
+
+To start defining the procedural macro, place the code in Listing 19-31 into
+your *src/lib.rs* file for the `hello_macro_derive` crate. Note that this code
+won’t compile until we add a definition for the `impl_hello_macro` function.
+
+<span class="filename">Filename: hello_macro_derive/src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-31/hello_macro/hello_macro_derive/src/lib.rs}}
+```
+
+<span class="caption">Listing 19-31: Code that most procedural macro crates
+will require in order to process Rust code</span>
+
+Notice that we’ve split the code into the `hello_macro_derive` function, which
+is responsible for parsing the `TokenStream`, and the `impl_hello_macro`
+function, which is responsible for transforming the syntax tree: this makes
+writing a procedural macro more convenient. The code in the outer function
+(`hello_macro_derive` in this case) will be the same for almost every
+procedural macro crate you see or create. The code you specify in the body of
+the inner function (`impl_hello_macro` in this case) will be different
+depending on your procedural macro’s purpose.
+
+We’ve introduced three new crates: `proc_macro`, [`syn`], and [`quote`]. The
+`proc_macro` crate comes with Rust, so we didn’t need to add that to the
+dependencies in *Cargo.toml*. The `proc_macro` crate is the compiler’s API that
+allows us to read and manipulate Rust code from our code.
+
+The `syn` crate parses Rust code from a string into a data structure that we
+can perform operations on. The `quote` crate turns `syn` data structures back
+into Rust code. These crates make it much simpler to parse any sort of Rust
+code we might want to handle: writing a full parser for Rust code is no simple
+task.
+
+The `hello_macro_derive` function will be called when a user of our library
+specifies `#[derive(HelloMacro)]` on a type. This is possible because we’ve
+annotated the `hello_macro_derive` function here with `proc_macro_derive` and
+specified the name `HelloMacro`, which matches our trait name; this is the
+convention most procedural macros follow.
+
+The `hello_macro_derive` function first converts the `input` from a
+`TokenStream` to a data structure that we can then interpret and perform
+operations on. This is where `syn` comes into play. The `parse` function in
+`syn` takes a `TokenStream` and returns a `DeriveInput` struct representing the
+parsed Rust code. Listing 19-32 shows the relevant parts of the `DeriveInput`
+struct we get from parsing the `struct Pancakes;` string:
+
+```rust,ignore
+DeriveInput {
+ // --snip--
+
+ ident: Ident {
+ ident: "Pancakes",
+ span: #0 bytes(95..103)
+ },
+ data: Struct(
+ DataStruct {
+ struct_token: Struct,
+ fields: Unit,
+ semi_token: Some(
+ Semi
+ )
+ }
+ )
+}
+```
+
+<span class="caption">Listing 19-32: The `DeriveInput` instance we get when
+parsing the code that has the macro’s attribute in Listing 19-30</span>
+
+The fields of this struct show that the Rust code we’ve parsed is a unit struct
+with the `ident` (identifier, meaning the name) of `Pancakes`. There are more
+fields on this struct for describing all sorts of Rust code; check the [`syn`
+documentation for `DeriveInput`][syn-docs] for more information.
+
+Soon we’ll define the `impl_hello_macro` function, which is where we’ll build
+the new Rust code we want to include. But before we do, note that the output
+for our derive macro is also a `TokenStream`. The returned `TokenStream` is
+added to the code that our crate users write, so when they compile their crate,
+they’ll get the extra functionality that we provide in the modified
+`TokenStream`.
+
+You might have noticed that we’re calling `unwrap` to cause the
+`hello_macro_derive` function to panic if the call to the `syn::parse` function
+fails here. It’s necessary for our procedural macro to panic on errors because
+`proc_macro_derive` functions must return `TokenStream` rather than `Result` to
+conform to the procedural macro API. We’ve simplified this example by using
+`unwrap`; in production code, you should provide more specific error messages
+about what went wrong by using `panic!` or `expect`.
+
+Now that we have the code to turn the annotated Rust code from a `TokenStream`
+into a `DeriveInput` instance, let’s generate the code that implements the
+`HelloMacro` trait on the annotated type, as shown in Listing 19-33.
+
+<span class="filename">Filename: hello_macro_derive/src/lib.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch19-advanced-features/listing-19-33/hello_macro/hello_macro_derive/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 19-33: Implementing the `HelloMacro` trait using
+the parsed Rust code</span>
+
+We get an `Ident` struct instance containing the name (identifier) of the
+annotated type using `ast.ident`. The struct in Listing 19-32 shows that when
+we run the `impl_hello_macro` function on the code in Listing 19-30, the
+`ident` we get will have the `ident` field with a value of `"Pancakes"`. Thus,
+the `name` variable in Listing 19-33 will contain an `Ident` struct instance
+that, when printed, will be the string `"Pancakes"`, the name of the struct in
+Listing 19-30.
+
+The `quote!` macro lets us define the Rust code that we want to return. The
+compiler expects something different to the direct result of the `quote!`
+macro’s execution, so we need to convert it to a `TokenStream`. We do this by
+calling the `into` method, which consumes this intermediate representation and
+returns a value of the required `TokenStream` type.
+
+The `quote!` macro also provides some very cool templating mechanics: we can
+enter `#name`, and `quote!` will replace it with the value in the variable
+`name`. You can even do some repetition similar to the way regular macros work.
+Check out [the `quote` crate’s docs][quote-docs] for a thorough introduction.
+
+We want our procedural macro to generate an implementation of our `HelloMacro`
+trait for the type the user annotated, which we can get by using `#name`. The
+trait implementation has the one function `hello_macro`, whose body contains the
+functionality we want to provide: printing `Hello, Macro! My name is` and then
+the name of the annotated type.
+
+The `stringify!` macro used here is built into Rust. It takes a Rust
+expression, such as `1 + 2`, and at compile time turns the expression into a
+string literal, such as `"1 + 2"`. This is different than `format!` or
+`println!`, macros which evaluate the expression and then turn the result into
+a `String`. There is a possibility that the `#name` input might be an
+expression to print literally, so we use `stringify!`. Using `stringify!` also
+saves an allocation by converting `#name` to a string literal at compile time.
+
+At this point, `cargo build` should complete successfully in both `hello_macro`
+and `hello_macro_derive`. Let’s hook up these crates to the code in Listing
+19-30 to see the procedural macro in action! Create a new binary project in
+your *projects* directory using `cargo new pancakes`. We need to add
+`hello_macro` and `hello_macro_derive` as dependencies in the `pancakes`
+crate’s *Cargo.toml*. If you’re publishing your versions of `hello_macro` and
+`hello_macro_derive` to [crates.io](https://crates.io/), they would be regular
+dependencies; if not, you can specify them as `path` dependencies as follows:
+
+```toml
+{{#include ../listings/ch19-advanced-features/no-listing-21-pancakes/pancakes/Cargo.toml:7:9}}
+```
+
+Put the code in Listing 19-30 into *src/main.rs*, and run `cargo run`: it
+should print `Hello, Macro! My name is Pancakes!` The implementation of the
+`HelloMacro` trait from the procedural macro was included without the
+`pancakes` crate needing to implement it; the `#[derive(HelloMacro)]` added the
+trait implementation.
+
+Next, let’s explore how the other kinds of procedural macros differ from custom
+derive macros.
+
+### Attribute-like macros
+
+Attribute-like macros are similar to custom derive macros, but instead of
+generating code for the `derive` attribute, they allow you to create new
+attributes. They’re also more flexible: `derive` only works for structs and
+enums; attributes can be applied to other items as well, such as functions.
+Here’s an example of using an attribute-like macro: say you have an attribute
+named `route` that annotates functions when using a web application framework:
+
+```rust,ignore
+#[route(GET, "/")]
+fn index() {
+```
+
+This `#[route]` attribute would be defined by the framework as a procedural
+macro. The signature of the macro definition function would look like this:
+
+```rust,ignore
+#[proc_macro_attribute]
+pub fn route(attr: TokenStream, item: TokenStream) -> TokenStream {
+```
+
+Here, we have two parameters of type `TokenStream`. The first is for the
+contents of the attribute: the `GET, "/"` part. The second is the body of the
+item the attribute is attached to: in this case, `fn index() {}` and the rest
+of the function’s body.
+
+Other than that, attribute-like macros work the same way as custom derive
+macros: you create a crate with the `proc-macro` crate type and implement a
+function that generates the code you want!
+
+### Function-like macros
+
+Function-like macros define macros that look like function calls. Similarly to
+`macro_rules!` macros, they’re more flexible than functions; for example, they
+can take an unknown number of arguments. However, `macro_rules!` macros can be
+defined only using the match-like syntax we discussed in the section
+[“Declarative Macros with `macro_rules!` for General
+Metaprogramming”][decl]<!-- ignore --> earlier. Function-like macros take a
+`TokenStream` parameter and their definition manipulates that `TokenStream`
+using Rust code as the other two types of procedural macros do. An example of a
+function-like macro is an `sql!` macro that might be called like so:
+
+```rust,ignore
+let sql = sql!(SELECT * FROM posts WHERE id=1);
+```
+
+This macro would parse the SQL statement inside it and check that it’s
+syntactically correct, which is much more complex processing than a
+`macro_rules!` macro can do. The `sql!` macro would be defined like this:
+
+```rust,ignore
+#[proc_macro]
+pub fn sql(input: TokenStream) -> TokenStream {
+```
+
+This definition is similar to the custom derive macro’s signature: we receive
+the tokens that are inside the parentheses and return the code we wanted to
+generate.
+
+## Summary
+
+Whew! Now you have some Rust features in your toolbox that you likely won’t use
+often, but you’ll know they’re available in very particular circumstances.
+We’ve introduced several complex topics so that when you encounter them in
+error message suggestions or in other peoples’ code, you’ll be able to
+recognize these concepts and syntax. Use this chapter as a reference to guide
+you to solutions.
+
+Next, we’ll put everything we’ve discussed throughout the book into practice
+and do one more project!
+
+[ref]: ../reference/macros-by-example.html
+[tlborm]: https://veykril.github.io/tlborm/
+[`syn`]: https://crates.io/crates/syn
+[`quote`]: https://crates.io/crates/quote
+[syn-docs]: https://docs.rs/syn/1.0/syn/struct.DeriveInput.html
+[quote-docs]: https://docs.rs/quote
+[decl]: #declarative-macros-with-macro_rules-for-general-metaprogramming
diff --git a/src/doc/book/src/ch20-00-final-project-a-web-server.md b/src/doc/book/src/ch20-00-final-project-a-web-server.md
new file mode 100644
index 000000000..1004eaf3f
--- /dev/null
+++ b/src/doc/book/src/ch20-00-final-project-a-web-server.md
@@ -0,0 +1,33 @@
+# Final Project: Building a Multithreaded Web Server
+
+It’s been a long journey, but we’ve reached the end of the book. In this
+chapter, we’ll build one more project together to demonstrate some of the
+concepts we covered in the final chapters, as well as recap some earlier
+lessons.
+
+For our final project, we’ll make a web server that says “hello” and looks like
+Figure 20-1 in a web browser.
+
+![hello from rust](img/trpl20-01.png)
+
+<span class="caption">Figure 20-1: Our final shared project</span>
+
+Here is our plan for building the web server:
+
+1. Learn a bit about TCP and HTTP.
+2. Listen for TCP connections on a socket.
+3. Parse a small number of HTTP requests.
+4. Create a proper HTTP response.
+5. Improve the throughput of our server with a thread pool.
+
+Before we get started, we should mention one detail: the method we’ll use won’t
+be the best way to build a web server with Rust. Community members have
+published a number of production-ready crates available on
+[crates.io](https://crates.io/) that provide more complete web server and
+thread pool implementations than we’ll build. However, our intention in this
+chapter is to help you learn, not to take the easy route. Because Rust is a
+systems programming language, we can choose the level of abstraction we want to
+work with and can go to a lower level than is possible or practical in other
+languages. We’ll therefore write the basic HTTP server and thread pool manually
+so you can learn the general ideas and techniques behind the crates you might
+use in the future.
diff --git a/src/doc/book/src/ch20-01-single-threaded.md b/src/doc/book/src/ch20-01-single-threaded.md
new file mode 100644
index 000000000..993239a98
--- /dev/null
+++ b/src/doc/book/src/ch20-01-single-threaded.md
@@ -0,0 +1,460 @@
+## Building a Single-Threaded Web Server
+
+We’ll start by getting a single-threaded web server working. Before we begin,
+let’s look at a quick overview of the protocols involved in building web
+servers. The details of these protocols are beyond the scope of this book, but
+a brief overview will give you the information you need.
+
+The two main protocols involved in web servers are *Hypertext Transfer
+Protocol* *(HTTP)* and *Transmission Control Protocol* *(TCP)*. Both protocols
+are *request-response* protocols, meaning a *client* initiates requests and a
+*server* listens to the requests and provides a response to the client. The
+contents of those requests and responses are defined by the protocols.
+
+TCP is the lower-level protocol that describes the details of how information
+gets from one server to another but doesn’t specify what that information is.
+HTTP builds on top of TCP by defining the contents of the requests and
+responses. It’s technically possible to use HTTP with other protocols, but in
+the vast majority of cases, HTTP sends its data over TCP. We’ll work with the
+raw bytes of TCP and HTTP requests and responses.
+
+### Listening to the TCP Connection
+
+Our web server needs to listen to a TCP connection, so that’s the first part
+we’ll work on. The standard library offers a `std::net` module that lets us do
+this. Let’s make a new project in the usual fashion:
+
+```console
+$ cargo new hello
+ Created binary (application) `hello` project
+$ cd hello
+```
+
+Now enter the code in Listing 20-1 in *src/main.rs* to start. This code will
+listen at the local address `127.0.0.1:7878` for incoming TCP streams. When it
+gets an incoming stream, it will print `Connection established!`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-01/src/main.rs}}
+```
+
+<span class="caption">Listing 20-1: Listening for incoming streams and printing
+a message when we receive a stream</span>
+
+Using `TcpListener`, we can listen for TCP connections at the address
+`127.0.0.1:7878`. In the address, the section before the colon is an IP address
+representing your computer (this is the same on every computer and doesn’t
+represent the authors’ computer specifically), and `7878` is the port. We’ve
+chosen this port for two reasons: HTTP isn’t normally accepted on this port so
+our server is unlikely to conflict with any other web server you might have
+running on your machine, and 7878 is *rust* typed on a telephone.
+
+The `bind` function in this scenario works like the `new` function in that it
+will return a new `TcpListener` instance. The function is called `bind`
+because, in networking, connecting to a port to listen to is known as “binding
+to a port.”
+
+The `bind` function returns a `Result<T, E>`, which indicates that it’s
+possible for binding to fail. For example, connecting to port 80 requires
+administrator privileges (nonadministrators can listen only on ports higher
+than 1023), so if we tried to connect to port 80 without being an
+administrator, binding wouldn’t work. Binding also wouldn’t work, for example,
+if we ran two instances of our program and so had two programs listening to the
+same port. Because we’re writing a basic server just for learning purposes, we
+won’t worry about handling these kinds of errors; instead, we use `unwrap` to
+stop the program if errors happen.
+
+The `incoming` method on `TcpListener` returns an iterator that gives us a
+sequence of streams (more specifically, streams of type `TcpStream`). A single
+*stream* represents an open connection between the client and the server. A
+*connection* is the name for the full request and response process in which a
+client connects to the server, the server generates a response, and the server
+closes the connection. As such, we will read from the `TcpStream` to see what
+the client sent and then write our response to the stream to send data back to
+the client. Overall, this `for` loop will process each connection in turn and
+produce a series of streams for us to handle.
+
+For now, our handling of the stream consists of calling `unwrap` to terminate
+our program if the stream has any errors; if there aren’t any errors, the
+program prints a message. We’ll add more functionality for the success case in
+the next listing. The reason we might receive errors from the `incoming` method
+when a client connects to the server is that we’re not actually iterating over
+connections. Instead, we’re iterating over *connection attempts*. The
+connection might not be successful for a number of reasons, many of them
+operating system specific. For example, many operating systems have a limit to
+the number of simultaneous open connections they can support; new connection
+attempts beyond that number will produce an error until some of the open
+connections are closed.
+
+Let’s try running this code! Invoke `cargo run` in the terminal and then load
+*127.0.0.1:7878* in a web browser. The browser should show an error message
+like “Connection reset,” because the server isn’t currently sending back any
+data. But when you look at your terminal, you should see several messages that
+were printed when the browser connected to the server!
+
+```text
+ Running `target/debug/hello`
+Connection established!
+Connection established!
+Connection established!
+```
+
+Sometimes, you’ll see multiple messages printed for one browser request; the
+reason might be that the browser is making a request for the page as well as a
+request for other resources, like the *favicon.ico* icon that appears in the
+browser tab.
+
+It could also be that the browser is trying to connect to the server multiple
+times because the server isn’t responding with any data. When `stream` goes out
+of scope and is dropped at the end of the loop, the connection is closed as
+part of the `drop` implementation. Browsers sometimes deal with closed
+connections by retrying, because the problem might be temporary. The important
+factor is that we’ve successfully gotten a handle to a TCP connection!
+
+Remember to stop the program by pressing <span class="keystroke">ctrl-c</span>
+when you’re done running a particular version of the code. Then restart the
+program by invoking the `cargo run` command after you’ve made each set of code
+changes to make sure you’re running the newest code.
+
+### Reading the Request
+
+Let’s implement the functionality to read the request from the browser! To
+separate the concerns of first getting a connection and then taking some action
+with the connection, we’ll start a new function for processing connections. In
+this new `handle_connection` function, we’ll read data from the TCP stream and
+print it so we can see the data being sent from the browser. Change the code to
+look like Listing 20-2.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-02/src/main.rs}}
+```
+
+<span class="caption">Listing 20-2: Reading from the `TcpStream` and printing
+the data</span>
+
+We bring `std::io::prelude` and `std::io::BufReader` into scope to get access
+to traits and types that let us read from and write to the stream. In the `for`
+loop in the `main` function, instead of printing a message that says we made a
+connection, we now call the new `handle_connection` function and pass the
+`stream` to it.
+
+In the `handle_connection` function, we create a new `BufReader` instance that
+wraps a mutable reference to the `stream`. `BufReader` adds buffering by
+managing calls to the `std::io::Read` trait methods for us.
+
+We create a variable named `http_request` to collect the lines of the request
+the browser sends to our server. We indicate that we want to collect these
+lines in a vector by adding the `Vec<_>` type annotation.
+
+`BufReader` implements the `std::io::BufRead` trait, which provides the `lines`
+method. The `lines` method returns an iterator of `Result<String,
+std::io::Error>` by splitting the stream of data whenever it sees a newline
+byte. To get each `String`, we map and `unwrap` each `Result`. The `Result`
+might be an error if the data isn’t valid UTF-8 or if there was a problem
+reading from the stream. Again, a production program should handle these errors
+more gracefully, but we’re choosing to stop the program in the error case for
+simplicity.
+
+The browser signals the end of an HTTP request by sending two newline
+characters in a row, so to get one request from the stream, we take lines until
+we get a line that is the empty string. Once we’ve collected the lines into the
+vector, we’re printing them out using pretty debug formatting so we can take a
+look at the instructions the web browser is sending to our server.
+
+Let’s try this code! Start the program and make a request in a web browser
+again. Note that we’ll still get an error page in the browser, but our
+program’s output in the terminal will now look similar to this:
+
+```console
+$ cargo run
+ Compiling hello v0.1.0 (file:///projects/hello)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.42s
+ Running `target/debug/hello`
+Request: [
+ "GET / HTTP/1.1",
+ "Host: 127.0.0.1:7878",
+ "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:99.0) Gecko/20100101 Firefox/99.0",
+ "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
+ "Accept-Language: en-US,en;q=0.5",
+ "Accept-Encoding: gzip, deflate, br",
+ "DNT: 1",
+ "Connection: keep-alive",
+ "Upgrade-Insecure-Requests: 1",
+ "Sec-Fetch-Dest: document",
+ "Sec-Fetch-Mode: navigate",
+ "Sec-Fetch-Site: none",
+ "Sec-Fetch-User: ?1",
+ "Cache-Control: max-age=0",
+]
+```
+
+Depending on your browser, you might get slightly different output. Now that
+we’re printing the request data, we can see why we get multiple connections
+from one browser request by looking at the path after `GET` in the first line
+of the request. If the repeated connections are all requesting */*, we know the
+browser is trying to fetch */* repeatedly because it’s not getting a response
+from our program.
+
+Let’s break down this request data to understand what the browser is asking of
+our program.
+
+### A Closer Look at an HTTP Request
+
+HTTP is a text-based protocol, and a request takes this format:
+
+```text
+Method Request-URI HTTP-Version CRLF
+headers CRLF
+message-body
+```
+
+The first line is the *request line* that holds information about what the
+client is requesting. The first part of the request line indicates the *method*
+being used, such as `GET` or `POST`, which describes how the client is making
+this request. Our client used a `GET` request, which means it is asking for
+information.
+
+The next part of the request line is */*, which indicates the *Uniform Resource
+Identifier* *(URI)* the client is requesting: a URI is almost, but not quite,
+the same as a *Uniform Resource Locator* *(URL)*. The difference between URIs
+and URLs isn’t important for our purposes in this chapter, but the HTTP spec
+uses the term URI, so we can just mentally substitute URL for URI here.
+
+The last part is the HTTP version the client uses, and then the request line
+ends in a *CRLF sequence*. (CRLF stands for *carriage return* and *line feed*,
+which are terms from the typewriter days!) The CRLF sequence can also be
+written as `\r\n`, where `\r` is a carriage return and `\n` is a line feed. The
+CRLF sequence separates the request line from the rest of the request data.
+Note that when the CRLF is printed, we see a new line start rather than `\r\n`.
+
+Looking at the request line data we received from running our program so far,
+we see that `GET` is the method, */* is the request URI, and `HTTP/1.1` is the
+version.
+
+After the request line, the remaining lines starting from `Host:` onward are
+headers. `GET` requests have no body.
+
+Try making a request from a different browser or asking for a different
+address, such as *127.0.0.1:7878/test*, to see how the request data changes.
+
+Now that we know what the browser is asking for, let’s send back some data!
+
+### Writing a Response
+
+We’re going to implement sending data in response to a client request.
+Responses have the following format:
+
+```text
+HTTP-Version Status-Code Reason-Phrase CRLF
+headers CRLF
+message-body
+```
+
+The first line is a *status line* that contains the HTTP version used in the
+response, a numeric status code that summarizes the result of the request, and
+a reason phrase that provides a text description of the status code. After the
+CRLF sequence are any headers, another CRLF sequence, and the body of the
+response.
+
+Here is an example response that uses HTTP version 1.1, has a status code of
+200, an OK reason phrase, no headers, and no body:
+
+```text
+HTTP/1.1 200 OK\r\n\r\n
+```
+
+The status code 200 is the standard success response. The text is a tiny
+successful HTTP response. Let’s write this to the stream as our response to a
+successful request! From the `handle_connection` function, remove the
+`println!` that was printing the request data and replace it with the code in
+Listing 20-3.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-03/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-3: Writing a tiny successful HTTP response to
+the stream</span>
+
+The first new line defines the `response` variable that holds the success
+message’s data. Then we call `as_bytes` on our `response` to convert the string
+data to bytes. The `write_all` method on `stream` takes a `&[u8]` and sends
+those bytes directly down the connection. Because the `write_all` operation
+could fail, we use `unwrap` on any error result as before. Again, in a real
+application you would add error handling here.
+
+With these changes, let’s run our code and make a request. We’re no longer
+printing any data to the terminal, so we won’t see any output other than the
+output from Cargo. When you load *127.0.0.1:7878* in a web browser, you should
+get a blank page instead of an error. You’ve just hand-coded receiving an HTTP
+request and sending a response!
+
+### Returning Real HTML
+
+Let’s implement the functionality for returning more than a blank page. Create
+the new file *hello.html* in the root of your project directory, not in the
+*src* directory. You can input any HTML you want; Listing 20-4 shows one
+possibility.
+
+<span class="filename">Filename: hello.html</span>
+
+```html
+{{#include ../listings/ch20-web-server/listing-20-05/hello.html}}
+```
+
+<span class="caption">Listing 20-4: A sample HTML file to return in a
+response</span>
+
+This is a minimal HTML5 document with a heading and some text. To return this
+from the server when a request is received, we’ll modify `handle_connection` as
+shown in Listing 20-5 to read the HTML file, add it to the response as a body,
+and send it.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-05/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-5: Sending the contents of *hello.html* as the
+body of the response</span>
+
+We’ve added `fs` to the `use` statement to bring the standard library’s
+filesystem module into scope. The code for reading the contents of a file to a
+string should look familiar; we used it in Chapter 12 when we read the contents
+of a file for our I/O project in Listing 12-4.
+
+Next, we use `format!` to add the file’s contents as the body of the success
+response. To ensure a valid HTTP response, we add the `Content-Length` header
+which is set to the size of our response body, in this case the size of
+`hello.html`.
+
+Run this code with `cargo run` and load *127.0.0.1:7878* in your browser; you
+should see your HTML rendered!
+
+Currently, we’re ignoring the request data in `http_request` and just sending
+back the contents of the HTML file unconditionally. That means if you try
+requesting *127.0.0.1:7878/something-else* in your browser, you’ll still get
+back this same HTML response. At the moment, our server is very limited and
+does not do what most web servers do. We want to customize our responses
+depending on the request and only send back the HTML file for a well-formed
+request to */*.
+
+### Validating the Request and Selectively Responding
+
+Right now, our web server will return the HTML in the file no matter what the
+client requested. Let’s add functionality to check that the browser is
+requesting */* before returning the HTML file and return an error if the
+browser requests anything else. For this we need to modify `handle_connection`,
+as shown in Listing 20-6. This new code checks the content of the request
+received against what we know a request for */* looks like and adds `if` and
+`else` blocks to treat requests differently.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-06/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-6: Handling requests to */* differently from
+other requests</span>
+
+We’re only going to be looking at the first line of the HTTP request, so rather
+than reading the entire request into a vector, we’re calling `next` to get the
+first item from the iterator. The first `unwrap` takes care of the `Option` and
+stops the program if the iterator has no items. The second `unwrap` handles the
+`Result` and has the same effect as the `unwrap` that was in the `map` added in
+Listing 20-2.
+
+Next, we check the `request_line` to see if it equals the request line of a GET
+request to the */* path. If it does, the `if` block returns the contents of our
+HTML file.
+
+If the `request_line` does *not* equal the GET request to the */* path, it
+means we’ve received some other request. We’ll add code to the `else` block in
+a moment to respond to all other requests.
+
+Run this code now and request *127.0.0.1:7878*; you should get the HTML in
+*hello.html*. If you make any other request, such as
+*127.0.0.1:7878/something-else*, you’ll get a connection error like those you
+saw when running the code in Listing 20-1 and Listing 20-2.
+
+Now let’s add the code in Listing 20-7 to the `else` block to return a response
+with the status code 404, which signals that the content for the request was
+not found. We’ll also return some HTML for a page to render in the browser
+indicating the response to the end user.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-07/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-7: Responding with status code 404 and an
+error page if anything other than */* was requested</span>
+
+Here, our response has a status line with status code 404 and the reason phrase
+`NOT FOUND`. The body of the response will be the HTML in the file *404.html*.
+You’ll need to create a *404.html* file next to *hello.html* for the error
+page; again feel free to use any HTML you want or use the example HTML in
+Listing 20-8.
+
+<span class="filename">Filename: 404.html</span>
+
+```html
+{{#include ../listings/ch20-web-server/listing-20-07/404.html}}
+```
+
+<span class="caption">Listing 20-8: Sample content for the page to send back
+with any 404 response</span>
+
+With these changes, run your server again. Requesting *127.0.0.1:7878* should
+return the contents of *hello.html*, and any other request, like
+*127.0.0.1:7878/foo*, should return the error HTML from *404.html*.
+
+### A Touch of Refactoring
+
+At the moment the `if` and `else` blocks have a lot of repetition: they’re both
+reading files and writing the contents of the files to the stream. The only
+differences are the status line and the filename. Let’s make the code more
+concise by pulling out those differences into separate `if` and `else` lines
+that will assign the values of the status line and the filename to variables;
+we can then use those variables unconditionally in the code to read the file
+and write the response. Listing 20-9 shows the resulting code after replacing
+the large `if` and `else` blocks.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-09/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-9: Refactoring the `if` and `else` blocks to
+contain only the code that differs between the two cases</span>
+
+Now the `if` and `else` blocks only return the appropriate values for the
+status line and filename in a tuple; we then use destructuring to assign these
+two values to `status_line` and `filename` using a pattern in the `let`
+statement, as discussed in Chapter 18.
+
+The previously duplicated code is now outside the `if` and `else` blocks and
+uses the `status_line` and `filename` variables. This makes it easier to see
+the difference between the two cases, and it means we have only one place to
+update the code if we want to change how the file reading and response writing
+work. The behavior of the code in Listing 20-9 will be the same as that in
+Listing 20-8.
+
+Awesome! We now have a simple web server in approximately 40 lines of Rust code
+that responds to one request with a page of content and responds to all other
+requests with a 404 response.
+
+Currently, our server runs in a single thread, meaning it can only serve one
+request at a time. Let’s examine how that can be a problem by simulating some
+slow requests. Then we’ll fix it so our server can handle multiple requests at
+once.
diff --git a/src/doc/book/src/ch20-02-multithreaded.md b/src/doc/book/src/ch20-02-multithreaded.md
new file mode 100644
index 000000000..bd1dc25ab
--- /dev/null
+++ b/src/doc/book/src/ch20-02-multithreaded.md
@@ -0,0 +1,698 @@
+## Turning Our Single-Threaded Server into a Multithreaded Server
+
+Right now, the server will process each request in turn, meaning it won’t
+process a second connection until the first is finished processing. If the
+server received more and more requests, this serial execution would be less and
+less optimal. If the server receives a request that takes a long time to
+process, subsequent requests will have to wait until the long request is
+finished, even if the new requests can be processed quickly. We’ll need to fix
+this, but first, we’ll look at the problem in action.
+
+### Simulating a Slow Request in the Current Server Implementation
+
+We’ll look at how a slow-processing request can affect other requests made to
+our current server implementation. Listing 20-10 implements handling a request
+to */sleep* with a simulated slow response that will cause the server to sleep
+for 5 seconds before responding.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-10/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-10: Simulating a slow request by sleeping for
+5 seconds</span>
+
+We switched from `if` to `match` now that we have three cases. We need to
+explicitly match on a slice of `request_line` to pattern match against the
+string literal values; `match` doesn’t do automatic referencing and
+dereferencing like the equality method does.
+
+The first arm is the same as the `if` block from Listing 20-9. The second arm
+matches a request to */sleep*. When that request is received, the server will
+sleep for 5 seconds before rendering the successful HTML page. The third arm is
+the same as the `else` block from Listing 20-9.
+
+You can see how primitive our server is: real libraries would handle the
+recognition of multiple requests in a much less verbose way!
+
+Start the server using `cargo run`. Then open two browser windows: one for
+*http://127.0.0.1:7878/* and the other for *http://127.0.0.1:7878/sleep*. If
+you enter the */* URI a few times, as before, you’ll see it respond quickly.
+But if you enter */sleep* and then load */*, you’ll see that */* waits until
+`sleep` has slept for its full 5 seconds before loading.
+
+There are multiple techniques we could use to avoid requests backing up behind
+a slow request; the one we’ll implement is a thread pool.
+
+### Improving Throughput with a Thread Pool
+
+A *thread pool* is a group of spawned threads that are waiting and ready to
+handle a task. When the program receives a new task, it assigns one of the
+threads in the pool to the task, and that thread will process the task. The
+remaining threads in the pool are available to handle any other tasks that come
+in while the first thread is processing. When the first thread is done
+processing its task, it’s returned to the pool of idle threads, ready to handle
+a new task. A thread pool allows you to process connections concurrently,
+increasing the throughput of your server.
+
+We’ll limit the number of threads in the pool to a small number to protect us
+from Denial of Service (DoS) attacks; if we had our program create a new thread
+for each request as it came in, someone making 10 million requests to our
+server could create havoc by using up all our server’s resources and grinding
+the processing of requests to a halt.
+
+Rather than spawning unlimited threads, then, we’ll have a fixed number of
+threads waiting in the pool. Requests that come in are sent to the pool for
+processing. The pool will maintain a queue of incoming requests. Each of the
+threads in the pool will pop off a request from this queue, handle the request,
+and then ask the queue for another request. With this design, we can process up
+to `N` requests concurrently, where `N` is the number of threads. If each
+thread is responding to a long-running request, subsequent requests can still
+back up in the queue, but we’ve increased the number of long-running requests
+we can handle before reaching that point.
+
+This technique is just one of many ways to improve the throughput of a web
+server. Other options you might explore are the *fork/join model*, the
+*single-threaded async I/O model*, or the *multi-threaded async I/O model*. If
+you’re interested in this topic, you can read more about other solutions and
+try to implement them; with a low-level language like Rust, all of these
+options are possible.
+
+Before we begin implementing a thread pool, let’s talk about what using the
+pool should look like. When you’re trying to design code, writing the client
+interface first can help guide your design. Write the API of the code so it’s
+structured in the way you want to call it; then implement the functionality
+within that structure rather than implementing the functionality and then
+designing the public API.
+
+Similar to how we used test-driven development in the project in Chapter 12,
+we’ll use compiler-driven development here. We’ll write the code that calls the
+functions we want, and then we’ll look at errors from the compiler to determine
+what we should change next to get the code to work. Before we do that, however,
+we’ll explore the technique we’re not going to use as a starting point.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="code-structure-if-we-could-spawn-a-thread-for-each-request"></a>
+
+#### Spawning a Thread for Each Request
+
+First, let’s explore how our code might look if it did create a new thread for
+every connection. As mentioned earlier, this isn’t our final plan due to the
+problems with potentially spawning an unlimited number of threads, but it is a
+starting point to get a working multithreaded server first. Then we’ll add the
+thread pool as an improvement, and contrasting the two solutions will be
+easier. Listing 20-11 shows the changes to make to `main` to spawn a new thread
+to handle each stream within the `for` loop.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,no_run
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-11/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-11: Spawning a new thread for each
+stream</span>
+
+As you learned in Chapter 16, `thread::spawn` will create a new thread and then
+run the code in the closure in the new thread. If you run this code and load
+*/sleep* in your browser, then */* in two more browser tabs, you’ll indeed see
+that the requests to */* don’t have to wait for */sleep* to finish. However, as
+we mentioned, this will eventually overwhelm the system because you’d be making
+new threads without any limit.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="creating-a-similar-interface-for-a-finite-number-of-threads"></a>
+
+#### Creating a Finite Number of Threads
+
+We want our thread pool to work in a similar, familiar way so switching from
+threads to a thread pool doesn’t require large changes to the code that uses
+our API. Listing 20-12 shows the hypothetical interface for a `ThreadPool`
+struct we want to use instead of `thread::spawn`.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-12/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-12: Our ideal `ThreadPool` interface</span>
+
+We use `ThreadPool::new` to create a new thread pool with a configurable number
+of threads, in this case four. Then, in the `for` loop, `pool.execute` has a
+similar interface as `thread::spawn` in that it takes a closure the pool should
+run for each stream. We need to implement `pool.execute` so it takes the
+closure and gives it to a thread in the pool to run. This code won’t yet
+compile, but we’ll try so the compiler can guide us in how to fix it.
+
+<!-- Old headings. Do not remove or links may break. -->
+<a id="building-the-threadpool-struct-using-compiler-driven-development"></a>
+
+#### Building `ThreadPool` Using Compiler Driven Development
+
+Make the changes in Listing 20-12 to *src/main.rs*, and then let’s use the
+compiler errors from `cargo check` to drive our development. Here is the first
+error we get:
+
+```console
+{{#include ../listings/ch20-web-server/listing-20-12/output.txt}}
+```
+
+Great! This error tells us we need a `ThreadPool` type or module, so we’ll
+build one now. Our `ThreadPool` implementation will be independent of the kind
+of work our web server is doing. So, let’s switch the `hello` crate from a
+binary crate to a library crate to hold our `ThreadPool` implementation. After
+we change to a library crate, we could also use the separate thread pool
+library for any work we want to do using a thread pool, not just for serving
+web requests.
+
+Create a *src/lib.rs* that contains the following, which is the simplest
+definition of a `ThreadPool` struct that we can have for now:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/lib.rs}}
+```
+
+Then edit *main.rs* file to bring `ThreadPool` into scope from the library
+crate by adding the following code to the top of *src/main.rs*:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-01-define-threadpool-struct/src/main.rs:here}}
+```
+
+This code still won’t work, but let’s check it again to get the next error that
+we need to address:
+
+```console
+{{#include ../listings/ch20-web-server/no-listing-01-define-threadpool-struct/output.txt}}
+```
+
+This error indicates that next we need to create an associated function named
+`new` for `ThreadPool`. We also know that `new` needs to have one parameter
+that can accept `4` as an argument and should return a `ThreadPool` instance.
+Let’s implement the simplest `new` function that will have those
+characteristics:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-02-impl-threadpool-new/src/lib.rs}}
+```
+
+We chose `usize` as the type of the `size` parameter, because we know that a
+negative number of threads doesn’t make any sense. We also know we’ll use this
+4 as the number of elements in a collection of threads, which is what the
+`usize` type is for, as discussed in the [“Integer Types”][integer-types]<!--
+ignore --> section of Chapter 3.
+
+Let’s check the code again:
+
+```console
+{{#include ../listings/ch20-web-server/no-listing-02-impl-threadpool-new/output.txt}}
+```
+
+Now the error occurs because we don’t have an `execute` method on `ThreadPool`.
+Recall from the [“Creating a Finite Number of
+Threads”](#creating-a-finite-number-of-threads)<!-- ignore --> section that we
+decided our thread pool should have an interface similar to `thread::spawn`. In
+addition, we’ll implement the `execute` function so it takes the closure it’s
+given and gives it to an idle thread in the pool to run.
+
+We’ll define the `execute` method on `ThreadPool` to take a closure as a
+parameter. Recall from the [“Moving Captured Values Out of the Closure and the
+`Fn` Traits”][fn-traits]<!-- ignore --> section in Chapter 13 that we can take
+closures as parameters with three different traits: `Fn`, `FnMut`, and
+`FnOnce`. We need to decide which kind of closure to use here. We know we’ll
+end up doing something similar to the standard library `thread::spawn`
+implementation, so we can look at what bounds the signature of `thread::spawn`
+has on its parameter. The documentation shows us the following:
+
+```rust,ignore
+pub fn spawn<F, T>(f: F) -> JoinHandle<T>
+ where
+ F: FnOnce() -> T,
+ F: Send + 'static,
+ T: Send + 'static,
+```
+
+The `F` type parameter is the one we’re concerned with here; the `T` type
+parameter is related to the return value, and we’re not concerned with that. We
+can see that `spawn` uses `FnOnce` as the trait bound on `F`. This is probably
+what we want as well, because we’ll eventually pass the argument we get in
+`execute` to `spawn`. We can be further confident that `FnOnce` is the trait we
+want to use because the thread for running a request will only execute that
+request’s closure one time, which matches the `Once` in `FnOnce`.
+
+The `F` type parameter also has the trait bound `Send` and the lifetime bound
+`'static`, which are useful in our situation: we need `Send` to transfer the
+closure from one thread to another and `'static` because we don’t know how long
+the thread will take to execute. Let’s create an `execute` method on
+`ThreadPool` that will take a generic parameter of type `F` with these bounds:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-03-define-execute/src/lib.rs:here}}
+```
+
+We still use the `()` after `FnOnce` because this `FnOnce` represents a closure
+that takes no parameters and returns the unit type `()`. Just like function
+definitions, the return type can be omitted from the signature, but even if we
+have no parameters, we still need the parentheses.
+
+Again, this is the simplest implementation of the `execute` method: it does
+nothing, but we’re trying only to make our code compile. Let’s check it again:
+
+```console
+{{#include ../listings/ch20-web-server/no-listing-03-define-execute/output.txt}}
+```
+
+It compiles! But note that if you try `cargo run` and make a request in the
+browser, you’ll see the errors in the browser that we saw at the beginning of
+the chapter. Our library isn’t actually calling the closure passed to `execute`
+yet!
+
+> Note: A saying you might hear about languages with strict compilers, such as
+> Haskell and Rust, is “if the code compiles, it works.” But this saying is not
+> universally true. Our project compiles, but it does absolutely nothing! If we
+> were building a real, complete project, this would be a good time to start
+> writing unit tests to check that the code compiles *and* has the behavior we
+> want.
+
+#### Validating the Number of Threads in `new`
+
+We aren’t doing anything with the parameters to `new` and `execute`. Let’s
+implement the bodies of these functions with the behavior we want. To start,
+let’s think about `new`. Earlier we chose an unsigned type for the `size`
+parameter, because a pool with a negative number of threads makes no sense.
+However, a pool with zero threads also makes no sense, yet zero is a perfectly
+valid `usize`. We’ll add code to check that `size` is greater than zero before
+we return a `ThreadPool` instance and have the program panic if it receives a
+zero by using the `assert!` macro, as shown in Listing 20-13.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-13/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-13: Implementing `ThreadPool::new` to panic if
+`size` is zero</span>
+
+We’ve also added some documentation for our `ThreadPool` with doc comments.
+Note that we followed good documentation practices by adding a section that
+calls out the situations in which our function can panic, as discussed in
+Chapter 14. Try running `cargo doc --open` and clicking the `ThreadPool` struct
+to see what the generated docs for `new` look like!
+
+Instead of adding the `assert!` macro as we’ve done here, we could change `new`
+into `build` and return a `Result` like we did with `Config::build` in the I/O
+project in Listing 12-9. But we’ve decided in this case that trying to create a
+thread pool without any threads should be an unrecoverable error. If you’re
+feeling ambitious, try to write a function named `build` with the following
+signature to compare with the `new` function:
+
+```rust,ignore
+pub fn build(size: usize) -> Result<ThreadPool, PoolCreationError> {
+```
+
+#### Creating Space to Store the Threads
+
+Now that we have a way to know we have a valid number of threads to store in
+the pool, we can create those threads and store them in the `ThreadPool` struct
+before returning the struct. But how do we “store” a thread? Let’s take another
+look at the `thread::spawn` signature:
+
+```rust,ignore
+pub fn spawn<F, T>(f: F) -> JoinHandle<T>
+ where
+ F: FnOnce() -> T,
+ F: Send + 'static,
+ T: Send + 'static,
+```
+
+The `spawn` function returns a `JoinHandle<T>`, where `T` is the type that the
+closure returns. Let’s try using `JoinHandle` too and see what happens. In our
+case, the closures we’re passing to the thread pool will handle the connection
+and not return anything, so `T` will be the unit type `()`.
+
+The code in Listing 20-14 will compile but doesn’t create any threads yet.
+We’ve changed the definition of `ThreadPool` to hold a vector of
+`thread::JoinHandle<()>` instances, initialized the vector with a capacity of
+`size`, set up a `for` loop that will run some code to create the threads, and
+returned a `ThreadPool` instance containing them.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,not_desired_behavior
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-14/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-14: Creating a vector for `ThreadPool` to hold
+the threads</span>
+
+We’ve brought `std::thread` into scope in the library crate, because we’re
+using `thread::JoinHandle` as the type of the items in the vector in
+`ThreadPool`.
+
+Once a valid size is received, our `ThreadPool` creates a new vector that can
+hold `size` items. The `with_capacity` function performs the same task as
+`Vec::new` but with an important difference: it preallocates space in the
+vector. Because we know we need to store `size` elements in the vector, doing
+this allocation up front is slightly more efficient than using `Vec::new`,
+which resizes itself as elements are inserted.
+
+When you run `cargo check` again, it should succeed.
+
+#### A `Worker` Struct Responsible for Sending Code from the `ThreadPool` to a Thread
+
+We left a comment in the `for` loop in Listing 20-14 regarding the creation of
+threads. Here, we’ll look at how we actually create threads. The standard
+library provides `thread::spawn` as a way to create threads, and
+`thread::spawn` expects to get some code the thread should run as soon as the
+thread is created. However, in our case, we want to create the threads and have
+them *wait* for code that we’ll send later. The standard library’s
+implementation of threads doesn’t include any way to do that; we have to
+implement it manually.
+
+We’ll implement this behavior by introducing a new data structure between the
+`ThreadPool` and the threads that will manage this new behavior. We’ll call
+this data structure *Worker*, which is a common term in pooling
+implementations. The Worker picks up code that needs to be run and runs the
+code in the Worker’s thread. Think of people working in the kitchen at a
+restaurant: the workers wait until orders come in from customers, and then
+they’re responsible for taking those orders and filling them.
+
+Instead of storing a vector of `JoinHandle<()>` instances in the thread pool,
+we’ll store instances of the `Worker` struct. Each `Worker` will store a single
+`JoinHandle<()>` instance. Then we’ll implement a method on `Worker` that will
+take a closure of code to run and send it to the already running thread for
+execution. We’ll also give each worker an `id` so we can distinguish between
+the different workers in the pool when logging or debugging.
+
+Here is the new process that will happen when we create a `ThreadPool`. We’ll
+implement the code that sends the closure to the thread after we have `Worker`
+set up in this way:
+
+1. Define a `Worker` struct that holds an `id` and a `JoinHandle<()>`.
+2. Change `ThreadPool` to hold a vector of `Worker` instances.
+3. Define a `Worker::new` function that takes an `id` number and returns a
+ `Worker` instance that holds the `id` and a thread spawned with an empty
+ closure.
+4. In `ThreadPool::new`, use the `for` loop counter to generate an `id`, create
+ a new `Worker` with that `id`, and store the worker in the vector.
+
+If you’re up for a challenge, try implementing these changes on your own before
+looking at the code in Listing 20-15.
+
+Ready? Here is Listing 20-15 with one way to make the preceding modifications.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-15/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-15: Modifying `ThreadPool` to hold `Worker`
+instances instead of holding threads directly</span>
+
+We’ve changed the name of the field on `ThreadPool` from `threads` to `workers`
+because it’s now holding `Worker` instances instead of `JoinHandle<()>`
+instances. We use the counter in the `for` loop as an argument to
+`Worker::new`, and we store each new `Worker` in the vector named `workers`.
+
+External code (like our server in *src/main.rs*) doesn’t need to know the
+implementation details regarding using a `Worker` struct within `ThreadPool`,
+so we make the `Worker` struct and its `new` function private. The
+`Worker::new` function uses the `id` we give it and stores a `JoinHandle<()>`
+instance that is created by spawning a new thread using an empty closure.
+
+> Note: If the operating system can’t create a thread because there aren’t
+> enough system resources, `thread::spawn` will panic. That will cause our
+> whole server to panic, even though the creation of some threads might
+> succeed. For simplicity’s sake, this behavior is fine, but in a production
+> thread pool implementation, you’d likely want to use
+> [`std::thread::Builder`][builder]<!-- ignore --> and its
+> [`spawn`][builder-spawn]<!-- ignore --> method that returns `Result` instead.
+
+This code will compile and will store the number of `Worker` instances we
+specified as an argument to `ThreadPool::new`. But we’re *still* not processing
+the closure that we get in `execute`. Let’s look at how to do that next.
+
+#### Sending Requests to Threads via Channels
+
+The next problem we’ll tackle is that the closures given to `thread::spawn` do
+absolutely nothing. Currently, we get the closure we want to execute in the
+`execute` method. But we need to give `thread::spawn` a closure to run when we
+create each `Worker` during the creation of the `ThreadPool`.
+
+We want the `Worker` structs that we just created to fetch the code to run from
+a queue held in the `ThreadPool` and send that code to its thread to run.
+
+The channels we learned about in Chapter 16—a simple way to communicate between
+two threads—would be perfect for this use case. We’ll use a channel to function
+as the queue of jobs, and `execute` will send a job from the `ThreadPool` to
+the `Worker` instances, which will send the job to its thread. Here is the plan:
+
+1. The `ThreadPool` will create a channel and hold on to the sender.
+2. Each `Worker` will hold on to the receiver.
+3. We’ll create a new `Job` struct that will hold the closures we want to send
+ down the channel.
+4. The `execute` method will send the job it wants to execute through the
+ sender.
+5. In its thread, the `Worker` will loop over its receiver and execute the
+ closures of any jobs it receives.
+
+Let’s start by creating a channel in `ThreadPool::new` and holding the sender
+in the `ThreadPool` instance, as shown in Listing 20-16. The `Job` struct
+doesn’t hold anything for now but will be the type of item we’re sending down
+the channel.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-16/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-16: Modifying `ThreadPool` to store the
+sender of a channel that transmits `Job` instances</span>
+
+In `ThreadPool::new`, we create our new channel and have the pool hold the
+sender. This will successfully compile.
+
+Let’s try passing a receiver of the channel into each worker as the thread pool
+creates the channel. We know we want to use the receiver in the thread that the
+workers spawn, so we’ll reference the `receiver` parameter in the closure. The
+code in Listing 20-17 won’t quite compile yet.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-17/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-17: Passing the receiver to the workers</span>
+
+We’ve made some small and straightforward changes: we pass the receiver into
+`Worker::new`, and then we use it inside the closure.
+
+When we try to check this code, we get this error:
+
+```console
+{{#include ../listings/ch20-web-server/listing-20-17/output.txt}}
+```
+
+The code is trying to pass `receiver` to multiple `Worker` instances. This
+won’t work, as you’ll recall from Chapter 16: the channel implementation that
+Rust provides is multiple *producer*, single *consumer*. This means we can’t
+just clone the consuming end of the channel to fix this code. We also don’t
+want to send a message multiple times to multiple consumers; we want one list
+of messages with multiple workers such that each message gets processed once.
+
+Additionally, taking a job off the channel queue involves mutating the
+`receiver`, so the threads need a safe way to share and modify `receiver`;
+otherwise, we might get race conditions (as covered in Chapter 16).
+
+Recall the thread-safe smart pointers discussed in Chapter 16: to share
+ownership across multiple threads and allow the threads to mutate the value, we
+need to use `Arc<Mutex<T>>`. The `Arc` type will let multiple workers own the
+receiver, and `Mutex` will ensure that only one worker gets a job from the
+receiver at a time. Listing 20-18 shows the changes we need to make.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-18/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-18: Sharing the receiver among the workers
+using `Arc` and `Mutex`</span>
+
+In `ThreadPool::new`, we put the receiver in an `Arc` and a `Mutex`. For each
+new worker, we clone the `Arc` to bump the reference count so the workers can
+share ownership of the receiver.
+
+With these changes, the code compiles! We’re getting there!
+
+#### Implementing the `execute` Method
+
+Let’s finally implement the `execute` method on `ThreadPool`. We’ll also change
+`Job` from a struct to a type alias for a trait object that holds the type of
+closure that `execute` receives. As discussed in the [“Creating Type Synonyms
+with Type Aliases”][creating-type-synonyms-with-type-aliases]<!-- ignore -->
+section of Chapter 19, type aliases allow us to make long types shorter for
+ease of use. Look at Listing 20-19.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-19/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-19: Creating a `Job` type alias for a `Box`
+that holds each closure and then sending the job down the channel</span>
+
+After creating a new `Job` instance using the closure we get in `execute`, we
+send that job down the sending end of the channel. We’re calling `unwrap` on
+`send` for the case that sending fails. This might happen if, for example, we
+stop all our threads from executing, meaning the receiving end has stopped
+receiving new messages. At the moment, we can’t stop our threads from
+executing: our threads continue executing as long as the pool exists. The
+reason we use `unwrap` is that we know the failure case won’t happen, but the
+compiler doesn’t know that.
+
+But we’re not quite done yet! In the worker, our closure being passed to
+`thread::spawn` still only *references* the receiving end of the channel.
+Instead, we need the closure to loop forever, asking the receiving end of the
+channel for a job and running the job when it gets one. Let’s make the change
+shown in Listing 20-20 to `Worker::new`.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-20/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-20: Receiving and executing the jobs in the
+worker’s thread</span>
+
+Here, we first call `lock` on the `receiver` to acquire the mutex, and then we
+call `unwrap` to panic on any errors. Acquiring a lock might fail if the mutex
+is in a *poisoned* state, which can happen if some other thread panicked while
+holding the lock rather than releasing the lock. In this situation, calling
+`unwrap` to have this thread panic is the correct action to take. Feel free to
+change this `unwrap` to an `expect` with an error message that is meaningful to
+you.
+
+If we get the lock on the mutex, we call `recv` to receive a `Job` from the
+channel. A final `unwrap` moves past any errors here as well, which might occur
+if the thread holding the sender has shut down, similar to how the `send`
+method returns `Err` if the receiver shuts down.
+
+The call to `recv` blocks, so if there is no job yet, the current thread will
+wait until a job becomes available. The `Mutex<T>` ensures that only one
+`Worker` thread at a time is trying to request a job.
+
+Our thread pool is now in a working state! Give it a `cargo run` and make some
+requests:
+
+<!-- manual-regeneration
+cd listings/ch20-web-server/listing-20-20
+cargo run
+make some requests to 127.0.0.1:7878
+Can't automate because the output depends on making requests
+-->
+
+```console
+$ cargo run
+ Compiling hello v0.1.0 (file:///projects/hello)
+warning: field is never read: `workers`
+ --> src/lib.rs:7:5
+ |
+7 | workers: Vec<Worker>,
+ | ^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: `#[warn(dead_code)]` on by default
+
+warning: field is never read: `id`
+ --> src/lib.rs:48:5
+ |
+48 | id: usize,
+ | ^^^^^^^^^
+
+warning: field is never read: `thread`
+ --> src/lib.rs:49:5
+ |
+49 | thread: thread::JoinHandle<()>,
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: `hello` (lib) generated 3 warnings
+ Finished dev [unoptimized + debuginfo] target(s) in 1.40s
+ Running `target/debug/hello`
+Worker 0 got a job; executing.
+Worker 2 got a job; executing.
+Worker 1 got a job; executing.
+Worker 3 got a job; executing.
+Worker 0 got a job; executing.
+Worker 2 got a job; executing.
+Worker 1 got a job; executing.
+Worker 3 got a job; executing.
+Worker 0 got a job; executing.
+Worker 2 got a job; executing.
+```
+
+Success! We now have a thread pool that executes connections asynchronously.
+There are never more than four threads created, so our system won’t get
+overloaded if the server receives a lot of requests. If we make a request to
+*/sleep*, the server will be able to serve other requests by having another
+thread run them.
+
+> Note: if you open */sleep* in multiple browser windows simultaneously, they
+> might load one at a time in 5 second intervals. Some web browsers execute
+> multiple instances of the same request sequentially for caching reasons. This
+> limitation is not caused by our web server.
+
+After learning about the `while let` loop in Chapter 18, you might be wondering
+why we didn’t write the worker thread code as shown in Listing 20-21.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,not_desired_behavior
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-21/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-21: An alternative implementation of
+`Worker::new` using `while let`</span>
+
+This code compiles and runs but doesn’t result in the desired threading
+behavior: a slow request will still cause other requests to wait to be
+processed. The reason is somewhat subtle: the `Mutex` struct has no public
+`unlock` method because the ownership of the lock is based on the lifetime of
+the `MutexGuard<T>` within the `LockResult<MutexGuard<T>>` that the `lock`
+method returns. At compile time, the borrow checker can then enforce the rule
+that a resource guarded by a `Mutex` cannot be accessed unless we hold the
+lock. However, this implementation can also result in the lock being held
+longer than intended if we aren’t mindful of the lifetime of the
+`MutexGuard<T>`.
+
+The code in Listing 20-20 that uses `let job =
+receiver.lock().unwrap().recv().unwrap();` works because with `let`, any
+temporary values used in the expression on the right hand side of the equals
+sign are immediately dropped when the `let` statement ends. However, `while
+let` (and `if let` and `match`) does not drop temporary values until the end of
+the associated block. In Listing 20-21, the lock remains held for the duration
+of the call to `job()`, meaning other workers cannot receive jobs.
+
+[creating-type-synonyms-with-type-aliases]:
+ch19-04-advanced-types.html#creating-type-synonyms-with-type-aliases
+[integer-types]: ch03-02-data-types.html#integer-types
+[fn-traits]:
+ch13-01-closures.html#moving-captured-values-out-of-the-closure-and-the-fn-traits
+[builder]: ../std/thread/struct.Builder.html
+[builder-spawn]: ../std/thread/struct.Builder.html#method.spawn
diff --git a/src/doc/book/src/ch20-03-graceful-shutdown-and-cleanup.md b/src/doc/book/src/ch20-03-graceful-shutdown-and-cleanup.md
new file mode 100644
index 000000000..a28c79e5a
--- /dev/null
+++ b/src/doc/book/src/ch20-03-graceful-shutdown-and-cleanup.md
@@ -0,0 +1,245 @@
+## Graceful Shutdown and Cleanup
+
+The code in Listing 20-20 is responding to requests asynchronously through the
+use of a thread pool, as we intended. We get some warnings about the `workers`,
+`id`, and `thread` fields that we’re not using in a direct way that reminds us
+we’re not cleaning up anything. When we use the less elegant <span
+class="keystroke">ctrl-c</span> method to halt the main thread, all other
+threads are stopped immediately as well, even if they’re in the middle of
+serving a request.
+
+Next, then, we’ll implement the `Drop` trait to call `join` on each of the
+threads in the pool so they can finish the requests they’re working on before
+closing. Then we’ll implement a way to tell the threads they should stop
+accepting new requests and shut down. To see this code in action, we’ll modify
+our server to accept only two requests before gracefully shutting down its
+thread pool.
+
+### Implementing the `Drop` Trait on `ThreadPool`
+
+Let’s start with implementing `Drop` on our thread pool. When the pool is
+dropped, our threads should all join to make sure they finish their work.
+Listing 20-22 shows a first attempt at a `Drop` implementation; this code won’t
+quite work yet.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-22/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-22: Joining each thread when the thread pool
+goes out of scope</span>
+
+First, we loop through each of the thread pool `workers`. We use `&mut` for
+this because `self` is a mutable reference, and we also need to be able to
+mutate `worker`. For each worker, we print a message saying that this
+particular worker is shutting down, and then we call `join` on that worker’s
+thread. If the call to `join` fails, we use `unwrap` to make Rust panic and go
+into an ungraceful shutdown.
+
+Here is the error we get when we compile this code:
+
+```console
+{{#include ../listings/ch20-web-server/listing-20-22/output.txt}}
+```
+
+The error tells us we can’t call `join` because we only have a mutable borrow
+of each `worker` and `join` takes ownership of its argument. To solve this
+issue, we need to move the thread out of the `Worker` instance that owns
+`thread` so `join` can consume the thread. We did this in Listing 17-15: if
+`Worker` holds an `Option<thread::JoinHandle<()>>` instead, we can call the
+`take` method on the `Option` to move the value out of the `Some` variant and
+leave a `None` variant in its place. In other words, a `Worker` that is running
+will have a `Some` variant in `thread`, and when we want to clean up a
+`Worker`, we’ll replace `Some` with `None` so the `Worker` doesn’t have a
+thread to run.
+
+So we know we want to update the definition of `Worker` like this:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-04-update-worker-definition/src/lib.rs:here}}
+```
+
+Now let’s lean on the compiler to find the other places that need to change.
+Checking this code, we get two errors:
+
+```console
+{{#include ../listings/ch20-web-server/no-listing-04-update-worker-definition/output.txt}}
+```
+
+Let’s address the second error, which points to the code at the end of
+`Worker::new`; we need to wrap the `thread` value in `Some` when we create a
+new `Worker`. Make the following changes to fix this error:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,does_not_compile
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-05-fix-worker-new/src/lib.rs:here}}
+```
+
+The first error is in our `Drop` implementation. We mentioned earlier that we
+intended to call `take` on the `Option` value to move `thread` out of `worker`.
+The following changes will do so:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,ignore,not_desired_behavior
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-06-fix-threadpool-drop/src/lib.rs:here}}
+```
+
+As discussed in Chapter 17, the `take` method on `Option` takes the `Some`
+variant out and leaves `None` in its place. We’re using `if let` to destructure
+the `Some` and get the thread; then we call `join` on the thread. If a worker’s
+thread is already `None`, we know that worker has already had its thread
+cleaned up, so nothing happens in that case.
+
+### Signaling to the Threads to Stop Listening for Jobs
+
+With all the changes we’ve made, our code compiles without any warnings.
+However, the bad news is this code doesn’t function the way we want it to yet.
+The key is the logic in the closures run by the threads of the `Worker`
+instances: at the moment, we call `join`, but that won’t shut down the threads
+because they `loop` forever looking for jobs. If we try to drop our
+`ThreadPool` with our current implementation of `drop`, the main thread will
+block forever waiting for the first thread to finish.
+
+To fix this problem, we’ll need a change in the `ThreadPool` `drop`
+implementation and then a change in the `Worker` loop.
+
+First, we’ll change the `ThreadPool` `drop` implementation to explicitly drop
+the `sender` before waiting for the threads to finish. Listing 20-23 shows the
+changes to `ThreadPool` to explicitly drop `sender`. We use the same `Option`
+and `take` technique as we did with the thread to be able to move `sender` out
+of `ThreadPool`:
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground,not_desired_behavior
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-23/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-23: Explicitly drop `sender` before joining
+the worker threads</span>
+
+Dropping `sender` closes the channel, which indicates no more messages will be
+sent. When that happens, all the calls to `recv` that the workers do in the
+infinite loop will return an error. In Listing 20-24, we change the `Worker`
+loop to gracefully exit the loop in that case, which means the threads will
+finish when the `ThreadPool` `drop` implementation calls `join` on them.
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-24/src/lib.rs:here}}
+```
+
+<span class="caption">Listing 20-24: Explicitly break out of the loop when
+`recv` returns an error</span>
+
+To see this code in action, let’s modify `main` to accept only two requests
+before gracefully shutting down the server, as shown in Listing 20-25.
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch20-web-server/listing-20-25/src/main.rs:here}}
+```
+
+<span class="caption">Listing 20-25: Shut down the server after serving two
+requests by exiting the loop</span>
+
+You wouldn’t want a real-world web server to shut down after serving only two
+requests. This code just demonstrates that the graceful shutdown and cleanup is
+in working order.
+
+The `take` method is defined in the `Iterator` trait and limits the iteration
+to the first two items at most. The `ThreadPool` will go out of scope at the
+end of `main`, and the `drop` implementation will run.
+
+Start the server with `cargo run`, and make three requests. The third request
+should error, and in your terminal you should see output similar to this:
+
+<!-- manual-regeneration
+cd listings/ch20-web-server/listing-20-25
+cargo run
+curl http://127.0.0.1:7878
+curl http://127.0.0.1:7878
+curl http://127.0.0.1:7878
+third request will error because server will have shut down
+copy output below
+Can't automate because the output depends on making requests
+-->
+
+```console
+$ cargo run
+ Compiling hello v0.1.0 (file:///projects/hello)
+ Finished dev [unoptimized + debuginfo] target(s) in 1.0s
+ Running `target/debug/hello`
+Worker 0 got a job; executing.
+Shutting down.
+Shutting down worker 0
+Worker 3 got a job; executing.
+Worker 1 disconnected; shutting down.
+Worker 2 disconnected; shutting down.
+Worker 3 disconnected; shutting down.
+Worker 0 disconnected; shutting down.
+Shutting down worker 1
+Shutting down worker 2
+Shutting down worker 3
+```
+
+You might see a different ordering of workers and messages printed. We can see
+how this code works from the messages: workers 0 and 3 got the first two
+requests. The server stopped accepting connections after the second connection,
+and the `Drop` implementation on `ThreadPool` starts executing before worker 3
+even starts its job. Dropping the `sender` disconnects all the workers and
+tells them to shut down. The workers each print a message when they disconnect,
+and then the thread pool calls `join` to wait for each worker thread to finish.
+
+Notice one interesting aspect of this particular execution: the `ThreadPool`
+dropped the `sender`, and before any worker received an error, we tried to join
+worker 0. Worker 0 had not yet gotten an error from `recv`, so the main thread
+blocked waiting for worker 0 to finish. In the meantime, worker 3 received a
+job and then all threads received an error. When worker 0 finished, the main
+thread waited for the rest of the workers to finish. At that point, they had
+all exited their loops and stopped.
+
+Congrats! We’ve now completed our project; we have a basic web server that uses
+a thread pool to respond asynchronously. We’re able to perform a graceful
+shutdown of the server, which cleans up all the threads in the pool.
+
+Here’s the full code for reference:
+
+<span class="filename">Filename: src/main.rs</span>
+
+```rust,ignore
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-07-final-code/src/main.rs}}
+```
+
+<span class="filename">Filename: src/lib.rs</span>
+
+```rust,noplayground
+{{#rustdoc_include ../listings/ch20-web-server/no-listing-07-final-code/src/lib.rs}}
+```
+
+We could do more here! If you want to continue enhancing this project, here are
+some ideas:
+
+* Add more documentation to `ThreadPool` and its public methods.
+* Add tests of the library’s functionality.
+* Change calls to `unwrap` to more robust error handling.
+* Use `ThreadPool` to perform some task other than serving web requests.
+* Find a thread pool crate on [crates.io](https://crates.io/) and implement a
+ similar web server using the crate instead. Then compare its API and
+ robustness to the thread pool we implemented.
+
+## Summary
+
+Well done! You’ve made it to the end of the book! We want to thank you for
+joining us on this tour of Rust. You’re now ready to implement your own Rust
+projects and help with other peoples’ projects. Keep in mind that there is a
+welcoming community of other Rustaceans who would love to help you with any
+challenges you encounter on your Rust journey.
diff --git a/src/doc/book/src/foreword.md b/src/doc/book/src/foreword.md
new file mode 100644
index 000000000..2265e2714
--- /dev/null
+++ b/src/doc/book/src/foreword.md
@@ -0,0 +1,41 @@
+# Foreword
+
+It wasn’t always so clear, but the Rust programming language is fundamentally
+about *empowerment*: no matter what kind of code you are writing now, Rust
+empowers you to reach farther, to program with confidence in a wider variety of
+domains than you did before.
+
+Take, for example, “systems-level” work that deals with low-level details of
+memory management, data representation, and concurrency. Traditionally, this
+realm of programming is seen as arcane, accessible only to a select few who
+have devoted the necessary years learning to avoid its infamous pitfalls. And
+even those who practice it do so with caution, lest their code be open to
+exploits, crashes, or corruption.
+
+Rust breaks down these barriers by eliminating the old pitfalls and providing a
+friendly, polished set of tools to help you along the way. Programmers who need
+to “dip down” into lower-level control can do so with Rust, without taking on
+the customary risk of crashes or security holes, and without having to learn
+the fine points of a fickle toolchain. Better yet, the language is designed to
+guide you naturally towards reliable code that is efficient in terms of speed
+and memory usage.
+
+Programmers who are already working with low-level code can use Rust to raise
+their ambitions. For example, introducing parallelism in Rust is a relatively
+low-risk operation: the compiler will catch the classical mistakes for you. And
+you can tackle more aggressive optimizations in your code with the confidence
+that you won’t accidentally introduce crashes or vulnerabilities.
+
+But Rust isn’t limited to low-level systems programming. It’s expressive and
+ergonomic enough to make CLI apps, web servers, and many other kinds of code
+quite pleasant to write — you’ll find simple examples of both later in the
+book. Working with Rust allows you to build skills that transfer from one
+domain to another; you can learn Rust by writing a web app, then apply those
+same skills to target your Raspberry Pi.
+
+This book fully embraces the potential of Rust to empower its users. It’s a
+friendly and approachable text intended to help you level up not just your
+knowledge of Rust, but also your reach and confidence as a programmer in
+general. So dive in, get ready to learn—and welcome to the Rust community!
+
+— Nicholas Matsakis and Aaron Turon
diff --git a/src/doc/book/src/img/ferris/does_not_compile.svg b/src/doc/book/src/img/ferris/does_not_compile.svg
new file mode 100644
index 000000000..48b7b4d3a
--- /dev/null
+++ b/src/doc/book/src/img/ferris/does_not_compile.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1259px" height="847px" viewBox="0 0 1259 847" enable-background="new 0 0 1259 847" xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1259" height="847"/>-->
+<path fill="#8F1F1D" d="M706.403,338.05c-131.633,0-251.228,15.825-339.77,41.615v220.298
+ c88.542,25.79,208.137,41.614,339.77,41.614c150.657,0,285.535-20.729,376.134-53.402V391.457
+ C991.938,358.781,857.06,338.05,706.403,338.05"/>
+<path fill="#8F1F1D" d="M1088.423,537.442c-3.856-10.663-4.629-24.154-1.36-37.162c5.85-23.289,22.421-36.198,37.013-28.833
+ c3.618,1.827,6.773,4.73,9.387,8.418c0.239-0.001,0.479,0,0.715,0.016c0,0,44.552,53.106,3.313,116.003
+ c-0.896,3.569-76.534,91.718-94.043,94.524C1031.987,692.244,1058.338,600.41,1088.423,537.442"/>
+<path fill="#8F1F1D" d="M357.479,527.021c5.3-9.631,7.158-22.788,4.217-36.426c-5.266-24.416-23.91-41.109-41.642-37.285
+ c-4.398,0.948-8.325,3.072-11.666,6.099c-0.282-0.059-0.564-0.113-0.845-0.153c0,0-56.292,41.952-12.057,113.924
+ c0.805,3.741,83.851,108.838,104.311,115.764C413.188,693.475,388.55,596.418,357.479,527.021"/>
+<path fill="#E23A26" d="M280.467,535.066l0.007,0.015C280.659,535.226,280.831,535.357,280.467,535.066"/>
+<path fill="#E33B26" d="M1174.119,457.903c-0.88-3.064-1.756-6.126-2.662-9.162l30.683-44.451c3.13-4.522,3.771-10.398,1.73-15.555
+ c-2.04-5.13-6.49-8.81-11.76-9.71l-51.887-8.805c-2.008-4.102-4.115-8.142-6.229-12.15l21.797-49.903
+ c2.243-5.087,1.769-10.995-1.203-15.608c-2.961-4.636-7.99-7.344-13.349-7.133l-52.656,1.913c-2.727-3.55-5.496-7.068-8.322-10.521
+ l12.102-53.49c1.225-5.433-0.322-11.118-4.104-15.064c-3.762-3.932-9.229-5.559-14.426-4.283l-51.289,12.608
+ c-3.321-2.935-6.699-5.833-10.114-8.673l1.849-54.914c0.197-5.559-2.394-10.842-6.845-13.925
+ c-4.445-3.104-10.093-3.573-14.955-1.266l-47.848,22.747c-3.854-2.21-7.728-4.4-11.644-6.517l-8.455-54.115
+ c-0.857-5.483-4.386-10.139-9.326-12.266c-4.923-2.137-10.568-1.447-14.891,1.808l-42.659,32.007
+ c-4.2-1.395-8.419-2.732-12.692-4.011l-18.386-51.316c-1.87-5.229-6.182-9.071-11.438-10.151c-5.238-1.072-10.63,0.742-14.263,4.802
+ L764.97,100.97c-4.342-0.5-8.685-0.956-13.043-1.331l-27.723-46.713c-2.811-4.732-7.771-7.612-13.116-7.612
+ c-5.334,0-10.304,2.88-13.09,7.612l-27.733,46.713c-4.358,0.375-8.722,0.831-13.056,1.331l-35.91-40.171
+ c-3.636-4.06-9.047-5.874-14.268-4.802c-5.255,1.092-9.573,4.922-11.433,10.151l-18.402,51.316
+ c-4.26,1.279-8.481,2.627-12.691,4.011l-42.644-32.007c-4.336-3.266-9.98-3.955-14.916-1.808c-4.919,2.127-8.461,6.783-9.313,12.266
+ l-8.461,54.115c-3.914,2.117-7.789,4.294-11.653,6.517l-47.842-22.747c-4.858-2.316-10.529-1.838-14.954,1.266
+ c-4.445,3.083-7.042,8.366-6.84,13.925l1.835,54.914c-3.405,2.84-6.774,5.738-10.112,8.673l-51.279-12.608
+ c-5.211-1.265-10.67,0.351-14.441,4.283c-3.795,3.946-5.332,9.631-4.113,15.064l12.079,53.49c-2.802,3.467-5.575,6.971-8.293,10.521
+ l-52.655-1.913c-5.314-0.157-10.386,2.497-13.356,7.133c-2.974,4.613-3.425,10.521-1.211,15.608l21.814,49.903
+ c-2.119,4.008-4.224,8.048-6.249,12.15l-51.882,8.805c-5.271,0.888-9.715,4.566-11.765,9.71c-2.037,5.157-1.375,11.033,1.735,15.555
+ l30.69,44.451c-0.236,0.784-0.455,1.576-0.69,2.364l-16.863,17.911l45.341,64.05c0,0,435.152,200.731,838.797,3.396
+ C1163.372,528.189,1174.119,457.903,1174.119,457.903"/>
+<path d="M788.629,436.277c0,0,54.108-46.602,95.626,11.5c0,0,29.173,74.328-12.593,104.708c0,0-67.353,41.473-95.627-11.5
+ C776.035,540.985,739.67,497.66,788.629,436.277"/>
+<path fill="#FFFFFF" d="M843.648,464.356c-2.452,20.385-16.456,35.467-31.276,33.684c-14.817-1.781-24.846-19.755-22.395-40.14
+ c2.452-20.385,16.457-35.468,31.274-33.687C836.071,425.997,846.1,443.971,843.648,464.356"/>
+<path d="M572.949,399.315c0,0,86.384-26.449,99.021,57.297c0,0,12.086,97.294-79.356,91.705
+ C592.613,548.317,479.508,512.09,572.949,399.315"/>
+<rect x="181" y="45" fill="none" width="1060" height="782"/>
+<path fill="#FFFFFF" d="M611.925,441.324c-2.528,21.021-16.969,36.581-32.257,34.742c-15.281-1.837-25.624-20.378-23.095-41.399
+ c2.529-21.026,16.973-36.581,32.253-34.743C604.113,401.763,614.454,420.298,611.925,441.324"/>
+<path fill="#E33B26" d="M292.602,544.216c10.967-12.463,37.611-27.557,35.57-46.282c-3.653-33.526-31.456-57.999-62.099-54.658
+ c-7.599,0.827-14.658,3.292-20.923,7.035c-0.463-0.106-0.925-0.211-1.388-0.294c0,0-103.632,50.873-44.564,152.657
+ c0.557,5.137,117.847,155.668,150.787,167.131C371.544,777.307,330.074,641.165,292.602,544.216"/>
+<path fill="#E33B26" d="M1134.549,539.673c-12.692-10.7-46.162-20.418-46.92-39.238c-1.355-33.697,22.512-62.021,53.312-63.26
+ c7.638-0.308,14.983,1.083,21.734,3.857c0.442-0.174,0.884-0.347,1.329-0.497c0,0,110.025,34.951,66.695,144.366
+ c0.21,5.163-93.468,171.416-124.345,187.635C1086.146,783.151,1111.861,641.105,1134.549,539.673"/>
+<rect x="181.06" y="45.314" fill="none" width="1059.75" height="781.686"/>
+<path fill="#E33B26" d="M372.142,545.559c0,0-1.383,137.296,133.166,167.933l28.054-56.363c0,0-97.495,9.431-104.995-111.569
+ H372.142"/>
+<rect x="181" y="45" fill="none" width="1060" height="782"/>
+<path fill="#E33B26" d="M1057.362,537.246c0,0,1.382,137.296-133.167,167.933l-28.055-56.363c0,0,97.495,9.431,104.995-111.569
+ H1057.362"/>
+<path fill="#E33B26" d="M960.167,677.279c-20.25-48.941-85.595-68.373-145.951-43.399c-53.126,21.98-84.637,71.031-77.624,115.845
+ c41.946-0.652,86.94-3.371,130.736-9.718c0,0-25.837,41.763-63.857,78.211c25.566,6.599,55.383,4.768,84.076-7.104
+ C947.904,786.141,980.417,726.221,960.167,677.279"/>
+<path fill="#E33B26" d="M585.746,745.985c0,0,55.203,7.295,130.67,9.155c6.61-47.511-29.38-97.792-86.801-117.242
+ c-63.438-21.488-128.989,2.792-146.414,54.231c-17.425,51.44,19.876,110.561,83.314,132.049
+ c28.121,9.526,56.653,10.049,81.229,3.207C610.833,790.881,585.746,745.985,585.746,745.985"/>
+<rect x="181.06" y="45.314" fill="none" width="1059.75" height="781.686"/>
+<g>
+ <path style="stroke:#ffffff;stroke-width:20" d="M92.314,318.146l0.072-12.563c-0.359-24.665,8.95-49.384,31.787-73.989c16.267-18.129,29.512-33.493,30.216-49.411
+ c0.747-16.883-9.835-28.95-33.932-30.499c-15.918-0.704-35.468,4.231-48.394,12.359l-14.075-53.303
+ c18.296-9.34,47.182-17.729,81.429-16.214c63.672,2.816,91.538,39.33,89.768,79.366c-1.621,36.659-25.84,59.753-45.066,79.202
+ c-18.24,19.009-26.789,37.48-27.267,59.207l-0.384,8.683L92.314,318.146z M76.808,384.64c1.152-26.048,19.789-43.105,44.872-41.997
+ c26.047,1.152,42.14,19.746,41.471,45.815c-1.109,25.083-18.824,43.148-45.353,41.975C92.232,429.303,75.698,409.723,76.808,384.64
+ z"/>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/ferris/not_desired_behavior.svg b/src/doc/book/src/img/ferris/not_desired_behavior.svg
new file mode 100644
index 000000000..47f402455
--- /dev/null
+++ b/src/doc/book/src/img/ferris/not_desired_behavior.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1354px" height="819px" viewBox="0 0 1354 819" enable-background="new 0 0 1354 819" xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1354" height="819"/>-->
+<path fill="#8F1F1D" d="M803.403,312.05c-131.633,0-251.228,15.825-339.77,41.615v220.298
+ c88.542,25.79,208.137,41.614,339.77,41.614c150.657,0,285.535-20.729,376.134-53.402V365.457
+ C1088.938,332.781,954.06,312.05,803.403,312.05"/>
+<path fill="#8F1F1D" d="M1185.423,511.442c-3.856-10.663-4.629-24.154-1.36-37.162c5.85-23.289,22.421-36.198,37.013-28.833
+ c3.618,1.827,6.773,4.73,9.387,8.418c0.239-0.001,0.479,0,0.715,0.016c0,0,44.552,53.106,3.313,116.003
+ c-0.896,3.569-76.534,91.718-94.043,94.524C1128.987,666.244,1155.338,574.41,1185.423,511.442"/>
+<path fill="#8F1F1D" d="M454.479,501.021c5.3-9.631,7.158-22.788,4.217-36.426c-5.266-24.416-23.91-41.109-41.642-37.285
+ c-4.398,0.948-8.325,3.072-11.666,6.099c-0.282-0.059-0.564-0.113-0.845-0.153c0,0-56.292,41.952-12.057,113.924
+ c0.805,3.741,83.851,108.838,104.311,115.764C510.188,667.475,485.55,570.418,454.479,501.021"/>
+<path fill="#E23A26" d="M375.467,507.066l0.007,0.015C375.659,507.226,375.831,507.357,375.467,507.066"/>
+<path fill="#E33B26" d="M1271.119,431.903c-0.88-3.064-1.756-6.126-2.662-9.162l30.683-44.451c3.13-4.522,3.771-10.398,1.73-15.555
+ c-2.04-5.13-6.49-8.81-11.76-9.71l-51.887-8.805c-2.008-4.102-4.115-8.142-6.229-12.15l21.797-49.903
+ c2.243-5.087,1.769-10.995-1.203-15.608c-2.961-4.636-7.99-7.344-13.349-7.133l-52.656,1.913c-2.727-3.55-5.496-7.068-8.322-10.521
+ l12.102-53.49c1.225-5.433-0.322-11.118-4.104-15.064c-3.762-3.932-9.229-5.559-14.426-4.283l-51.289,12.608
+ c-3.321-2.935-6.699-5.833-10.114-8.673l1.849-54.914c0.197-5.559-2.394-10.842-6.845-13.925
+ c-4.445-3.104-10.093-3.573-14.955-1.266l-47.848,22.747c-3.854-2.21-7.728-4.4-11.644-6.517l-8.455-54.115
+ c-0.857-5.483-4.386-10.139-9.326-12.266c-4.923-2.137-10.568-1.447-14.891,1.808l-42.659,32.007
+ c-4.2-1.395-8.419-2.732-12.692-4.011l-18.386-51.316c-1.87-5.229-6.182-9.071-11.438-10.151c-5.238-1.072-10.63,0.742-14.263,4.802
+ L861.97,74.97c-4.342-0.5-8.685-0.956-13.043-1.331l-27.723-46.713c-2.811-4.732-7.771-7.612-13.116-7.612
+ c-5.334,0-10.304,2.88-13.09,7.612l-27.733,46.713c-4.358,0.375-8.722,0.831-13.056,1.331l-35.91-40.171
+ c-3.636-4.06-9.047-5.874-14.268-4.802c-5.255,1.092-9.573,4.922-11.433,10.151l-18.402,51.316
+ c-4.26,1.279-8.481,2.627-12.691,4.011l-42.644-32.007c-4.336-3.266-9.98-3.955-14.916-1.808c-4.919,2.127-8.461,6.783-9.313,12.266
+ l-8.461,54.115c-3.914,2.117-7.789,4.294-11.653,6.517l-47.842-22.747c-4.858-2.316-10.529-1.838-14.954,1.266
+ c-4.445,3.083-7.042,8.366-6.84,13.925l1.835,54.914c-3.405,2.84-6.774,5.738-10.112,8.673l-51.279-12.608
+ c-5.211-1.265-10.67,0.351-14.441,4.283c-3.795,3.946-5.332,9.631-4.113,15.064l12.079,53.49c-2.802,3.467-5.575,6.971-8.293,10.521
+ l-52.655-1.913c-5.314-0.157-10.386,2.497-13.356,7.133c-2.974,4.613-3.425,10.521-1.211,15.608l21.814,49.903
+ c-2.119,4.008-4.224,8.048-6.249,12.15l-51.882,8.805c-5.271,0.888-9.715,4.566-11.765,9.71c-2.037,5.157-1.375,11.033,1.735,15.555
+ l30.69,44.451c-0.236,0.784-0.455,1.576-0.69,2.364l-16.863,17.911l45.341,64.05c0,0,435.152,200.731,838.797,3.396
+ C1260.372,502.189,1271.119,431.903,1271.119,431.903"/>
+<path d="M886.303,395.759c0,0,48.157-52.729,96.315,0c0,0,37.84,70.312,0,105.463c0,0-61.917,49.218-96.315,0
+ C886.303,501.222,845.024,462.55,886.303,395.759"/>
+<path fill="#FFFFFF" d="M942.057,415.32c0,20.532-12.103,37.179-27.029,37.179c-14.924,0-27.027-16.646-27.027-37.179
+ s12.104-37.18,27.027-37.18C929.954,378.14,942.057,394.788,942.057,415.32"/>
+<path d="M671.365,381.361c0,0,82.608-36.576,105.154,45.062c0,0,23.618,95.154-67.837,100.525
+ C708.682,526.948,592.06,504.486,671.365,381.361"/>
+<rect x="278" y="19" fill="none" width="1060" height="782"/>
+<g>
+ <defs>
+ <rect id="SVGID_1_" x="278.06" y="19.314" width="1059.75" height="781.686"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_2_)" fill="#FFFFFF" d="M712.855,416.668c0,21.173-12.48,38.346-27.877,38.346
+ c-15.391,0-27.874-17.173-27.874-38.346c0-21.178,12.483-38.346,27.874-38.346C700.375,378.322,712.855,395.49,712.855,416.668"/>
+ <path clip-path="url(#SVGID_2_)" fill="#E33B26" d="M389.602,518.216c10.967-12.463,37.611-27.557,35.57-46.282
+ c-3.653-33.526-31.456-57.999-62.099-54.658c-7.599,0.827-14.658,3.292-20.923,7.035c-0.463-0.106-0.925-0.211-1.388-0.294
+ c0,0-103.632,50.873-44.564,152.657c0.557,5.137,117.847,155.668,150.787,167.131C468.544,751.307,427.074,615.165,389.602,518.216
+ "/>
+ <path clip-path="url(#SVGID_2_)" fill="#E33B26" d="M1231.549,513.673c-12.692-10.7-46.162-20.418-46.92-39.238
+ c-1.355-33.697,22.512-62.021,53.312-63.26c7.638-0.308,14.983,1.083,21.734,3.857c0.442-0.174,0.884-0.347,1.329-0.497
+ c0,0,110.025,34.951,66.695,144.366c0.21,5.163-93.468,171.416-124.345,187.635
+ C1183.146,757.151,1208.861,615.105,1231.549,513.673"/>
+</g>
+<rect x="278" y="19" fill="none" width="1060" height="782"/>
+<path fill="#E33B26" d="M1154.362,514.558c0,0,1.382,137.296-133.167,167.933l-28.055-56.363c0,0,97.495,9.431,104.995-111.569
+ H1154.362"/>
+<path fill="#E33B26" d="M1057.167,654.591c-20.25-48.941-85.595-68.373-145.951-43.399c-53.126,21.98-84.637,71.031-77.624,115.845
+ c41.946-0.652,86.94-3.371,130.736-9.718c0,0-25.837,41.763-63.857,78.211c25.566,6.599,55.383,4.768,84.076-7.104
+ C1044.904,763.452,1077.417,703.532,1057.167,654.591"/>
+<g>
+ <path fill="#E33B26" d="M396.635,512.763c0,0-120.426,65.951-210.88-38.262l36.479-51.313c0,0,37.649,90.426,147.893,39.991
+ L396.635,512.763"/>
+ <path fill="#E33B26" d="M144.038,392.655c0,0-46.915-29.995-114.487-63.65C3.436,369.241,14.735,430.034,58.509,471.979
+ c48.361,46.34,118.025,52.115,155.601,12.901c37.576-39.214,28.833-108.569-19.528-154.908
+ c-21.437-20.543-47.061-33.103-72.221-37.316C140.333,341.359,144.038,392.655,144.038,392.655"/>
+</g>
+<rect x="278.06" y="19.314" fill="none" width="1059.75" height="781.686"/>
+</svg>
diff --git a/src/doc/book/src/img/ferris/panics.svg b/src/doc/book/src/img/ferris/panics.svg
new file mode 100644
index 000000000..be55f5e09
--- /dev/null
+++ b/src/doc/book/src/img/ferris/panics.svg
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="1434.979px" height="947px" viewBox="0 0 1434.979 947" enable-background="new 0 0 1434.979 947" xml:space="preserve">
+<!--<rect fill="#FFFFFF" width="1434.979" height="947"/>-->
+<path fill="#8F1F1D" d="M712.827,368.579c-131.633,0-251.228,15.825-339.77,41.615v220.298
+ c88.542,25.79,208.137,41.614,339.77,41.614c150.657,0,285.535-20.729,376.134-53.402V421.986
+ C998.361,389.311,863.483,368.579,712.827,368.579"/>
+<path fill="#8F1F1D" d="M1094.847,567.972c-3.856-10.663-4.629-24.154-1.36-37.162c5.85-23.289,22.421-36.198,37.013-28.833
+ c3.618,1.827,6.773,4.73,9.387,8.418c0.239-0.001,0.479,0,0.715,0.016c0,0,44.552,53.106,3.313,116.003
+ c-0.896,3.569-76.534,91.718-94.043,94.524C1038.411,722.773,1064.762,630.939,1094.847,567.972"/>
+<path fill="#8F1F1D" d="M363.903,557.551c5.3-9.631,7.158-22.788,4.217-36.426c-5.266-24.416-23.91-41.109-41.642-37.285
+ c-4.398,0.948-8.325,3.072-11.666,6.099c-0.282-0.059-0.564-0.113-0.845-0.153c0,0-56.292,41.952-12.057,113.924
+ c0.805,3.741,83.851,108.838,104.311,115.764C419.612,724.004,394.974,626.947,363.903,557.551"/>
+<path fill="#E23A26" d="M284.891,563.596l0.007,0.015C285.083,563.755,285.255,563.887,284.891,563.596"/>
+<path fill="#E33B26" d="M1180.543,488.433c-0.88-3.064-1.756-6.126-2.662-9.162l30.683-44.451c3.13-4.522,3.771-10.398,1.73-15.555
+ c-2.04-5.13-6.49-8.81-11.76-9.71l-51.887-8.805c-2.008-4.102-4.115-8.142-6.229-12.15l21.797-49.903
+ c2.243-5.087,1.769-10.995-1.203-15.608c-2.961-4.636-7.99-7.344-13.349-7.133l-52.656,1.913c-2.727-3.55-5.496-7.068-8.322-10.521
+ l12.102-53.49c1.225-5.433-0.322-11.118-4.104-15.064c-3.762-3.932-9.229-5.559-14.426-4.283l-51.289,12.608
+ c-3.321-2.935-6.699-5.833-10.114-8.673l1.849-54.914c0.197-5.559-2.394-10.842-6.845-13.925
+ c-4.445-3.104-10.093-3.573-14.955-1.266l-47.848,22.747c-3.854-2.21-7.728-4.4-11.644-6.517l-8.455-54.115
+ c-0.857-5.483-4.386-10.139-9.326-12.266c-4.923-2.137-10.568-1.447-14.891,1.808l-42.659,32.007
+ c-4.2-1.395-8.419-2.732-12.692-4.011l-18.386-51.316c-1.87-5.229-6.182-9.071-11.438-10.151c-5.238-1.072-10.63,0.742-14.263,4.802
+ l-35.907,40.171c-4.342-0.5-8.685-0.956-13.043-1.331l-27.723-46.713c-2.811-4.732-7.771-7.612-13.116-7.612
+ c-5.334,0-10.304,2.88-13.09,7.612l-27.733,46.713c-4.358,0.375-8.722,0.831-13.056,1.331l-35.91-40.171
+ c-3.636-4.06-9.047-5.874-14.268-4.802c-5.255,1.092-9.573,4.922-11.433,10.151l-18.402,51.316
+ c-4.26,1.279-8.481,2.627-12.691,4.011l-42.644-32.007c-4.336-3.266-9.98-3.955-14.916-1.808c-4.919,2.127-8.461,6.783-9.313,12.266
+ l-8.461,54.115c-3.914,2.117-7.789,4.294-11.653,6.517L436.1,168.34c-4.858-2.316-10.529-1.838-14.954,1.266
+ c-4.445,3.083-7.042,8.366-6.84,13.925l1.835,54.914c-3.405,2.84-6.774,5.738-10.112,8.673L354.75,234.51
+ c-5.211-1.265-10.67,0.351-14.441,4.283c-3.795,3.946-5.332,9.631-4.113,15.064l12.079,53.49c-2.802,3.467-5.575,6.971-8.293,10.521
+ l-52.655-1.913c-5.314-0.157-10.386,2.497-13.356,7.133c-2.974,4.613-3.425,10.521-1.211,15.608l21.814,49.903
+ c-2.119,4.008-4.224,8.048-6.249,12.15l-51.882,8.805c-5.271,0.888-9.715,4.566-11.765,9.71c-2.037,5.157-1.375,11.033,1.735,15.555
+ l30.69,44.451c-0.236,0.784-0.455,1.576-0.69,2.364l-16.863,17.911l45.341,64.05c0,0,435.152,200.731,838.797,3.396
+ C1169.796,558.719,1180.543,488.433,1180.543,488.433"/>
+<path d="M795.716,446.557c0,0,48.162-52.734,96.324,0c0,0,37.844,70.318,0,105.473c0,0-61.922,49.223-96.324,0
+ C795.716,552.029,754.434,513.354,795.716,446.557"/>
+<path fill="#FFFFFF" d="M855.154,481.097c0,19.782-11.66,35.82-26.041,35.82c-14.379,0-26.04-16.038-26.04-35.82
+ c0-19.782,11.661-35.821,26.04-35.821C843.494,445.275,855.154,461.315,855.154,481.097"/>
+<path d="M578.401,430.129c0,0,84.436-37.385,107.481,46.059c0,0,24.141,97.261-69.339,102.751
+ C616.543,578.939,497.34,555.98,578.401,430.129"/>
+<rect x="187.424" y="75.529" fill="none" width="1060" height="782"/>
+<path fill="#FFFFFF" d="M627.514,481.096c0,20.579-12.13,37.27-27.095,37.27c-14.959,0-27.092-16.69-27.092-37.27
+ c0-20.583,12.133-37.27,27.092-37.27C615.384,443.826,627.514,460.513,627.514,481.096"/>
+<path fill="#E33B26" d="M299.026,574.745c10.967-12.463,37.611-27.557,35.57-46.282c-3.653-33.526-31.456-57.999-62.099-54.658
+ c-7.599,0.827-14.658,3.292-20.923,7.035c-0.463-0.106-0.925-0.211-1.388-0.294c0,0-103.632,50.873-44.564,152.657
+ c0.557,5.137,117.847,155.668,150.787,167.131C377.968,807.836,336.498,671.694,299.026,574.745"/>
+<path fill="#E33B26" d="M1140.973,570.202c-12.692-10.7-46.162-20.418-46.92-39.238c-1.355-33.697,22.512-62.021,53.312-63.26
+ c7.638-0.308,14.983,1.083,21.734,3.857c0.442-0.174,0.884-0.347,1.329-0.497c0,0,110.025,34.951,66.695,144.366
+ c0.21,5.163-93.468,171.416-124.345,187.635C1092.57,813.681,1118.285,671.635,1140.973,570.202"/>
+<rect x="187.484" y="75.843" fill="none" width="1059.75" height="781.686"/>
+<rect x="187.424" y="75.529" fill="none" width="1060" height="782"/>
+<g>
+ <path fill="#E33B26" d="M283.144,565.511c0,0-137.214-4.942-161.62-140.761l57.596-25.427c0,0-13.912,96.957,106.615,110.022
+ L283.144,565.511"/>
+ <path fill="#E33B26" d="M127.552,333.083c0,0-24.965-49.774-65.807-113.261C18.721,241.035-2.671,299.05,13.482,357.484
+ c17.846,64.558,74.749,105.16,127.097,90.69s80.318-78.535,62.471-143.092c-7.909-28.618-23.501-52.519-42.963-69.011
+ C150.611,287.113,127.552,333.083,127.552,333.083"/>
+</g>
+<rect x="187.484" y="75.843" fill="none" width="1059.75" height="781.686"/>
+<g>
+ <path fill="#E33B26" d="M1148.012,565.511c0,0,137.214-4.942,161.62-140.761l-57.596-25.428c0,0,13.912,96.957-106.615,110.022
+ L1148.012,565.511"/>
+ <path fill="#E33B26" d="M1303.604,333.083c0,0,24.966-49.774,65.808-113.261c43.023,21.212,64.416,79.228,48.262,137.662
+ c-17.846,64.558-74.748,105.16-127.096,90.689c-52.348-14.47-80.318-78.534-62.472-143.091
+ c7.909-28.618,23.501-52.519,42.964-69.011C1280.544,287.113,1303.604,333.083,1303.604,333.083"/>
+</g>
+<path d="M807.895,626.942c-7.131-58.735-72.193-61.431-72.193-61.431c-50.936,11.227-59.183,47.369-57.392,75.104L807.895,626.942z"
+ />
+</svg>
diff --git a/src/doc/book/src/img/trpl04-01.svg b/src/doc/book/src/img/trpl04-01.svg
new file mode 100644
index 000000000..314f53ba1
--- /dev/null
+++ b/src/doc/book/src/img/trpl04-01.svg
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 700.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 152)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-152 233,-152 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 96,-124 "/>
+<text text-anchor="start" x="45.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 60,-124 60,-104 8,-104"/>
+<text text-anchor="start" x="18.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-104 60,-124 96,-124 96,-104 60,-104"/>
+<text text-anchor="start" x="62.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 60,-104 60,-84 8,-84"/>
+<text text-anchor="start" x="26.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-84 60,-104 96,-104 96,-84 60,-84"/>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="25.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="74.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="10.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<text text-anchor="start" x="74.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="151.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="188.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="200" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="163.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-94C78,-94 109.3406,-94 138.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-97.5001 148.5,-94 138.5,-90.5001 138.5,-97.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl04-02.svg b/src/doc/book/src/img/trpl04-02.svg
new file mode 100644
index 000000000..70d490f0b
--- /dev/null
+++ b/src/doc/book/src/img/trpl04-02.svg
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1000.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 238)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-238 233,-238 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-210 96,-210 "/>
+<text text-anchor="start" x="45.7759" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="18.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="62.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-170 8,-190 60,-190 60,-170 8,-170"/>
+<text text-anchor="start" x="26.2241" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-170 60,-190 96,-190 96,-170 60,-170"/>
+<polygon fill="none" stroke="#000000" points="8,-150 8,-170 60,-170 60,-150 8,-150"/>
+<text text-anchor="start" x="25.4482" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-150 60,-170 96,-170 96,-150 60,-150"/>
+<text text-anchor="start" x="74.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-130 8,-150 60,-150 60,-130 8,-130"/>
+<text text-anchor="start" x="10.6826" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-130 60,-150 96,-150 96,-130 60,-130"/>
+<text text-anchor="start" x="74.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node3" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-127 148.5,-147 185.5,-147 185.5,-127 148.5,-127"/>
+<text text-anchor="start" x="151.4482" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-127 185.5,-147 221.5,-147 221.5,-127 185.5,-127"/>
+<text text-anchor="start" x="188.3413" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-107 148.5,-127 185.5,-127 185.5,-107 148.5,-107"/>
+<text text-anchor="start" x="163.5" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-107 185.5,-127 221.5,-127 221.5,-107 185.5,-107"/>
+<text text-anchor="start" x="200" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-87 148.5,-107 185.5,-107 185.5,-87 148.5,-87"/>
+<text text-anchor="start" x="163.5" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-87 185.5,-107 221.5,-107 221.5,-87 185.5,-87"/>
+<text text-anchor="start" x="200.3931" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-67 148.5,-87 185.5,-87 185.5,-67 148.5,-67"/>
+<text text-anchor="start" x="163.5" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-67 185.5,-87 221.5,-87 221.5,-67 185.5,-67"/>
+<text text-anchor="start" x="201.5552" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-47 148.5,-67 185.5,-67 185.5,-47 148.5,-47"/>
+<text text-anchor="start" x="163.5" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-47 185.5,-67 221.5,-67 221.5,-47 185.5,-47"/>
+<text text-anchor="start" x="201.5552" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-27 148.5,-47 185.5,-47 185.5,-27 148.5,-27"/>
+<text text-anchor="start" x="163.5" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-27 185.5,-47 221.5,-47 221.5,-27 185.5,-27"/>
+<text text-anchor="start" x="200" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-180C78,-180 101.9982,-126.912 138.4405,-118.2023"/>
+<polygon fill="#000000" stroke="#000000" points="138.986,-121.6621 148.5,-117 138.1553,-114.7115 138.986,-121.6621"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-84 96,-84 "/>
+<text text-anchor="start" x="45.7759" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="18.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="62.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="26.2241" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<polygon fill="none" stroke="#000000" points="8,-24 8,-44 60,-44 60,-24 8,-24"/>
+<text text-anchor="start" x="25.4482" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-24 60,-44 96,-44 96,-24 60,-24"/>
+<text text-anchor="start" x="74.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-24 60,-24 60,-4 8,-4"/>
+<text text-anchor="start" x="10.6826" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-4 60,-24 96,-24 96,-4 60,-4"/>
+<text text-anchor="start" x="74.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table3&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-54C78,-54 101.9982,-107.088 138.4405,-115.7977"/>
+<polygon fill="#000000" stroke="#000000" points="138.1553,-119.2885 148.5,-117 138.986,-112.3379 138.1553,-119.2885"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl04-03.svg b/src/doc/book/src/img/trpl04-03.svg
new file mode 100644
index 000000000..7c153e23a
--- /dev/null
+++ b/src/doc/book/src/img/trpl04-03.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1300.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 298)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-298 233,-298 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 96,-124 "/>
+<text text-anchor="start" x="45.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 60,-124 60,-104 8,-104"/>
+<text text-anchor="start" x="18.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-104 60,-124 96,-124 96,-104 60,-104"/>
+<text text-anchor="start" x="62.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 60,-104 60,-84 8,-84"/>
+<text text-anchor="start" x="26.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-84 60,-104 96,-104 96,-84 60,-84"/>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="25.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="74.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="10.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<text text-anchor="start" x="74.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="151.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="188.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="200" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="163.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-94C78,-94 109.3406,-94 138.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-97.5001 148.5,-94 138.5,-90.5001 138.5,-97.5001"/>
+</g>
+<!-- table3 -->
+<g id="node3" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-270 96,-270 "/>
+<text text-anchor="start" x="45.7759" y="-275.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-250 8,-270 60,-270 60,-250 8,-250"/>
+<text text-anchor="start" x="18.8413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-250 60,-270 96,-270 96,-250 60,-250"/>
+<text text-anchor="start" x="62.8413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-230 8,-250 60,-250 60,-230 8,-230"/>
+<text text-anchor="start" x="26.2241" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-230 60,-250 96,-250 96,-230 60,-230"/>
+<polygon fill="none" stroke="#000000" points="8,-210 8,-230 60,-230 60,-210 8,-210"/>
+<text text-anchor="start" x="25.4482" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-210 60,-230 96,-230 96,-210 60,-210"/>
+<text text-anchor="start" x="74.5" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="10.6826" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="74.5" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table4 -->
+<g id="node4" class="node">
+<title>table4</title>
+<polygon fill="none" stroke="#000000" points="148.5,-250 148.5,-270 185.5,-270 185.5,-250 148.5,-250"/>
+<text text-anchor="start" x="151.4482" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-250 185.5,-270 221.5,-270 221.5,-250 185.5,-250"/>
+<text text-anchor="start" x="188.3413" y="-255.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-230 148.5,-250 185.5,-250 185.5,-230 148.5,-230"/>
+<text text-anchor="start" x="163.5" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-230 185.5,-250 221.5,-250 221.5,-230 185.5,-230"/>
+<text text-anchor="start" x="200" y="-235.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-210 148.5,-230 185.5,-230 185.5,-210 148.5,-210"/>
+<text text-anchor="start" x="163.5" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-210 185.5,-230 221.5,-230 221.5,-210 185.5,-210"/>
+<text text-anchor="start" x="200.3931" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-190 148.5,-210 185.5,-210 185.5,-190 148.5,-190"/>
+<text text-anchor="start" x="163.5" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-190 185.5,-210 221.5,-210 221.5,-190 185.5,-190"/>
+<text text-anchor="start" x="201.5552" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-170 148.5,-190 185.5,-190 185.5,-170 148.5,-170"/>
+<text text-anchor="start" x="163.5" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-170 185.5,-190 221.5,-190 221.5,-170 185.5,-170"/>
+<text text-anchor="start" x="201.5552" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-150 148.5,-170 185.5,-170 185.5,-150 148.5,-150"/>
+<text text-anchor="start" x="163.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-150 185.5,-170 221.5,-170 221.5,-150 185.5,-150"/>
+<text text-anchor="start" x="200" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table3&#45;&gt;table4 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table4:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-240C78,-240 109.3406,-240 138.3797,-240"/>
+<polygon fill="#000000" stroke="#000000" points="138.5,-243.5001 148.5,-240 138.5,-236.5001 138.5,-243.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl04-04.svg b/src/doc/book/src/img/trpl04-04.svg
new file mode 100644
index 000000000..a0513abd9
--- /dev/null
+++ b/src/doc/book/src/img/trpl04-04.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1000.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 238)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-238 233,-238 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polygon fill="#c0c0c0" stroke="transparent" points="8,-130 8,-230 96,-230 96,-130 8,-130"/>
+<polyline fill="none" stroke="#000000" points="8,-210 96,-210 "/>
+<text text-anchor="start" x="45.7759" y="-215.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="8,-190 8,-210 60,-210 60,-190 8,-190"/>
+<text text-anchor="start" x="18.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-190 60,-210 96,-210 96,-190 60,-190"/>
+<text text-anchor="start" x="62.8413" y="-195.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-170 8,-190 60,-190 60,-170 8,-170"/>
+<text text-anchor="start" x="26.2241" y="-175.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-170 60,-190 96,-190 96,-170 60,-170"/>
+<polygon fill="none" stroke="#000000" points="8,-150 8,-170 60,-170 60,-150 8,-150"/>
+<text text-anchor="start" x="25.4482" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-150 60,-170 96,-170 96,-150 60,-150"/>
+<text text-anchor="start" x="74.5" y="-155.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-130 8,-150 60,-150 60,-130 8,-130"/>
+<text text-anchor="start" x="10.6826" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-130 60,-150 96,-150 96,-130 60,-130"/>
+<text text-anchor="start" x="74.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table1 -->
+<g id="node3" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="148.5,-127 148.5,-147 185.5,-147 185.5,-127 148.5,-127"/>
+<text text-anchor="start" x="151.4482" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-127 185.5,-147 221.5,-147 221.5,-127 185.5,-127"/>
+<text text-anchor="start" x="188.3413" y="-132.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-107 148.5,-127 185.5,-127 185.5,-107 148.5,-107"/>
+<text text-anchor="start" x="163.5" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-107 185.5,-127 221.5,-127 221.5,-107 185.5,-107"/>
+<text text-anchor="start" x="200" y="-112.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-87 148.5,-107 185.5,-107 185.5,-87 148.5,-87"/>
+<text text-anchor="start" x="163.5" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-87 185.5,-107 221.5,-107 221.5,-87 185.5,-87"/>
+<text text-anchor="start" x="200.3931" y="-92.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-67 148.5,-87 185.5,-87 185.5,-67 148.5,-67"/>
+<text text-anchor="start" x="163.5" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-67 185.5,-87 221.5,-87 221.5,-67 185.5,-67"/>
+<text text-anchor="start" x="201.5552" y="-72.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-47 148.5,-67 185.5,-67 185.5,-47 148.5,-47"/>
+<text text-anchor="start" x="163.5" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-47 185.5,-67 221.5,-67 221.5,-47 185.5,-47"/>
+<text text-anchor="start" x="201.5552" y="-52.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-27 148.5,-47 185.5,-47 185.5,-27 148.5,-27"/>
+<text text-anchor="start" x="163.5" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-27 185.5,-47 221.5,-47 221.5,-27 185.5,-27"/>
+<text text-anchor="start" x="200" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-180C78,-180 101.9982,-126.912 138.4405,-118.2023"/>
+<polygon fill="#000000" stroke="#000000" points="138.986,-121.6621 148.5,-117 138.1553,-114.7115 138.986,-121.6621"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-84 96,-84 "/>
+<text text-anchor="start" x="45.7759" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">s2</text>
+<polygon fill="none" stroke="#000000" points="8,-64 8,-84 60,-84 60,-64 8,-64"/>
+<text text-anchor="start" x="18.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-64 60,-84 96,-84 96,-64 60,-64"/>
+<text text-anchor="start" x="62.8413" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-44 8,-64 60,-64 60,-44 8,-44"/>
+<text text-anchor="start" x="26.2241" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-44 60,-64 96,-64 96,-44 60,-44"/>
+<polygon fill="none" stroke="#000000" points="8,-24 8,-44 60,-44 60,-24 8,-24"/>
+<text text-anchor="start" x="25.4482" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-24 60,-44 96,-44 96,-24 60,-24"/>
+<text text-anchor="start" x="74.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-24 60,-24 60,-4 8,-4"/>
+<text text-anchor="start" x="10.6826" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-4 60,-24 96,-24 96,-4 60,-4"/>
+<text text-anchor="start" x="74.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table3&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table1:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-54C78,-54 101.9982,-107.088 138.4405,-115.7977"/>
+<polygon fill="#000000" stroke="#000000" points="138.1553,-119.2885 148.5,-117 138.986,-112.3379 138.1553,-119.2885"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl04-05.svg b/src/doc/book/src/img/trpl04-05.svg
new file mode 100644
index 000000000..b4bf2ebee
--- /dev/null
+++ b/src/doc/book/src/img/trpl04-05.svg
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1500.00 650.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 152)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-152 357,-152 357,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-124 80,-124 "/>
+<text text-anchor="start" x="41.2759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s</text>
+<polygon fill="none" stroke="#000000" points="8,-104 8,-124 44,-124 44,-104 8,-104"/>
+<text text-anchor="start" x="10.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="44,-104 44,-124 80,-124 80,-104 44,-104"/>
+<text text-anchor="start" x="46.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-84 8,-104 44,-104 44,-84 8,-84"/>
+<text text-anchor="start" x="18.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="44,-84 44,-104 80,-104 80,-84 44,-84"/>
+</g>
+<!-- table1 -->
+<g id="node2" class="node">
+<title>table1</title>
+<polyline fill="none" stroke="#000000" points="132,-124 220,-124 "/>
+<text text-anchor="start" x="169.7759" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">s1</text>
+<polygon fill="none" stroke="#000000" points="132,-104 132,-124 184,-124 184,-104 132,-104"/>
+<text text-anchor="start" x="142.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="184,-104 184,-124 220,-124 220,-104 184,-104"/>
+<text text-anchor="start" x="186.8413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="132,-84 132,-104 184,-104 184,-84 132,-84"/>
+<text text-anchor="start" x="150.2241" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="184,-84 184,-104 220,-104 220,-84 184,-84"/>
+<polygon fill="none" stroke="#000000" points="132,-64 132,-84 184,-84 184,-64 132,-64"/>
+<text text-anchor="start" x="149.4482" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="184,-64 184,-84 220,-84 220,-64 184,-64"/>
+<text text-anchor="start" x="198.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="132,-44 132,-64 184,-64 184,-44 132,-44"/>
+<text text-anchor="start" x="134.6826" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="184,-44 184,-64 220,-64 220,-44 184,-44"/>
+<text text-anchor="start" x="198.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge2" class="edge">
+<title>table0:c&#45;&gt;table1:borrowee</title>
+<path fill="none" stroke="#000000" d="M62,-94C62,-94 93.1184,-94 121.9514,-94"/>
+<polygon fill="#000000" stroke="#000000" points="122,-97.5001 132,-94 122,-90.5001 122,-97.5001"/>
+</g>
+<!-- table2 -->
+<g id="node3" class="node">
+<title>table2</title>
+<polygon fill="none" stroke="#000000" points="272.5,-104 272.5,-124 309.5,-124 309.5,-104 272.5,-104"/>
+<text text-anchor="start" x="275.4482" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="309.5,-104 309.5,-124 345.5,-124 345.5,-104 309.5,-104"/>
+<text text-anchor="start" x="312.3413" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="272.5,-84 272.5,-104 309.5,-104 309.5,-84 272.5,-84"/>
+<text text-anchor="start" x="287.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="309.5,-84 309.5,-104 345.5,-104 345.5,-84 309.5,-84"/>
+<text text-anchor="start" x="324" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="272.5,-64 272.5,-84 309.5,-84 309.5,-64 272.5,-64"/>
+<text text-anchor="start" x="287.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="309.5,-64 309.5,-84 345.5,-84 345.5,-64 309.5,-64"/>
+<text text-anchor="start" x="324.3931" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="272.5,-44 272.5,-64 309.5,-64 309.5,-44 272.5,-44"/>
+<text text-anchor="start" x="287.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="309.5,-44 309.5,-64 345.5,-64 345.5,-44 309.5,-44"/>
+<text text-anchor="start" x="325.5552" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="272.5,-24 272.5,-44 309.5,-44 309.5,-24 272.5,-24"/>
+<text text-anchor="start" x="287.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="309.5,-24 309.5,-44 345.5,-44 345.5,-24 309.5,-24"/>
+<text text-anchor="start" x="325.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="272.5,-4 272.5,-24 309.5,-24 309.5,-4 272.5,-4"/>
+<text text-anchor="start" x="287.5" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="309.5,-4 309.5,-24 345.5,-24 345.5,-4 309.5,-4"/>
+<text text-anchor="start" x="324" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge1" class="edge">
+<title>table1:c&#45;&gt;table2:pointee</title>
+<path fill="none" stroke="#000000" d="M202,-94C202,-94 233.3406,-94 262.3797,-94"/>
+<polygon fill="#000000" stroke="#000000" points="262.5,-97.5001 272.5,-94 262.5,-90.5001 262.5,-97.5001"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl04-06.svg b/src/doc/book/src/img/trpl04-06.svg
new file mode 100644
index 000000000..e64415fe4
--- /dev/null
+++ b/src/doc/book/src/img/trpl04-06.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 1279.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 275)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-275 233,-275 233,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="16,-121 88,-121 "/>
+<text text-anchor="start" x="35.6689" y="-126.8" font-family="Times,serif" font-size="14.00" fill="#000000">world</text>
+<polygon fill="none" stroke="#000000" points="16,-101 16,-121 52,-121 52,-101 16,-101"/>
+<text text-anchor="start" x="18.8413" y="-106.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="52,-101 52,-121 88,-121 88,-101 52,-101"/>
+<text text-anchor="start" x="54.8413" y="-106.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="16,-81 16,-101 52,-101 52,-81 16,-81"/>
+<text text-anchor="start" x="26.2241" y="-86.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="52,-81 52,-101 88,-101 88,-81 52,-81"/>
+<polygon fill="none" stroke="#000000" points="16,-61 16,-81 52,-81 52,-61 16,-61"/>
+<text text-anchor="start" x="25.4482" y="-66.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="52,-61 52,-81 88,-81 88,-61 52,-61"/>
+<text text-anchor="start" x="66.5" y="-66.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+</g>
+<!-- table4 -->
+<g id="node3" class="node">
+<title>table4</title>
+<polygon fill="none" stroke="#000000" points="148.5,-224 148.5,-244 185.5,-244 185.5,-224 148.5,-224"/>
+<text text-anchor="start" x="151.4482" y="-229.8" font-family="Times,serif" font-size="14.00" fill="#000000">index</text>
+<polygon fill="none" stroke="#000000" points="185.5,-224 185.5,-244 221.5,-244 221.5,-224 185.5,-224"/>
+<text text-anchor="start" x="188.3413" y="-229.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="148.5,-204 148.5,-224 185.5,-224 185.5,-204 148.5,-204"/>
+<text text-anchor="start" x="163.5" y="-209.8" font-family="Times,serif" font-size="14.00" fill="#000000">0</text>
+<polygon fill="none" stroke="#000000" points="185.5,-204 185.5,-224 221.5,-224 221.5,-204 185.5,-204"/>
+<text text-anchor="start" x="200" y="-209.8" font-family="Times,serif" font-size="14.00" fill="#000000">h</text>
+<polygon fill="none" stroke="#000000" points="148.5,-184 148.5,-204 185.5,-204 185.5,-184 148.5,-184"/>
+<text text-anchor="start" x="163.5" y="-189.8" font-family="Times,serif" font-size="14.00" fill="#000000">1</text>
+<polygon fill="none" stroke="#000000" points="185.5,-184 185.5,-204 221.5,-204 221.5,-184 185.5,-184"/>
+<text text-anchor="start" x="200.3931" y="-189.8" font-family="Times,serif" font-size="14.00" fill="#000000">e</text>
+<polygon fill="none" stroke="#000000" points="148.5,-164 148.5,-184 185.5,-184 185.5,-164 148.5,-164"/>
+<text text-anchor="start" x="163.5" y="-169.8" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+<polygon fill="none" stroke="#000000" points="185.5,-164 185.5,-184 221.5,-184 221.5,-164 185.5,-164"/>
+<text text-anchor="start" x="201.5552" y="-169.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-144 148.5,-164 185.5,-164 185.5,-144 148.5,-144"/>
+<text text-anchor="start" x="163.5" y="-149.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="185.5,-144 185.5,-164 221.5,-164 221.5,-144 185.5,-144"/>
+<text text-anchor="start" x="201.5552" y="-149.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-124 148.5,-144 185.5,-144 185.5,-124 148.5,-124"/>
+<text text-anchor="start" x="163.5" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="185.5,-124 185.5,-144 221.5,-144 221.5,-124 185.5,-124"/>
+<text text-anchor="start" x="200" y="-129.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+<polygon fill="none" stroke="#000000" points="148.5,-104 148.5,-124 185.5,-124 185.5,-104 148.5,-104"/>
+<text text-anchor="start" x="163.5" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="185.5,-104 185.5,-124 221.5,-124 221.5,-104 185.5,-104"/>
+<text text-anchor="start" x="201.75" y="-109.8" font-family="Times,serif" font-size="14.00" fill="#000000"> </text>
+<polygon fill="none" stroke="#000000" points="148.5,-84 148.5,-104 185.5,-104 185.5,-84 148.5,-84"/>
+<text text-anchor="start" x="163.5" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">6</text>
+<polygon fill="none" stroke="#000000" points="185.5,-84 185.5,-104 221.5,-104 221.5,-84 185.5,-84"/>
+<text text-anchor="start" x="198.4448" y="-89.8" font-family="Times,serif" font-size="14.00" fill="#000000">w</text>
+<polygon fill="none" stroke="#000000" points="148.5,-64 148.5,-84 185.5,-84 185.5,-64 148.5,-64"/>
+<text text-anchor="start" x="163.5" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">7</text>
+<polygon fill="none" stroke="#000000" points="185.5,-64 185.5,-84 221.5,-84 221.5,-64 185.5,-64"/>
+<text text-anchor="start" x="200" y="-69.8" font-family="Times,serif" font-size="14.00" fill="#000000">o</text>
+<polygon fill="none" stroke="#000000" points="148.5,-44 148.5,-64 185.5,-64 185.5,-44 148.5,-44"/>
+<text text-anchor="start" x="163.5" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">8</text>
+<polygon fill="none" stroke="#000000" points="185.5,-44 185.5,-64 221.5,-64 221.5,-44 185.5,-44"/>
+<text text-anchor="start" x="201.1689" y="-49.8" font-family="Times,serif" font-size="14.00" fill="#000000">r</text>
+<polygon fill="none" stroke="#000000" points="148.5,-24 148.5,-44 185.5,-44 185.5,-24 148.5,-24"/>
+<text text-anchor="start" x="163.5" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">9</text>
+<polygon fill="none" stroke="#000000" points="185.5,-24 185.5,-44 221.5,-44 221.5,-24 185.5,-24"/>
+<text text-anchor="start" x="201.5552" y="-29.8" font-family="Times,serif" font-size="14.00" fill="#000000">l</text>
+<polygon fill="none" stroke="#000000" points="148.5,-4 148.5,-24 185.5,-24 185.5,-4 148.5,-4"/>
+<text text-anchor="start" x="160" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">10</text>
+<polygon fill="none" stroke="#000000" points="185.5,-4 185.5,-24 221.5,-24 221.5,-4 185.5,-4"/>
+<text text-anchor="start" x="200" y="-9.8" font-family="Times,serif" font-size="14.00" fill="#000000">d</text>
+</g>
+<!-- table0&#45;&gt;table4 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table4:pointee2</title>
+<path fill="none" stroke="#000000" d="M70,-91C70,-91 105.7964,-93.4639 138.4948,-93.9258"/>
+<polygon fill="#000000" stroke="#000000" points="138.4743,-97.4257 148.5,-94 138.5263,-90.4259 138.4743,-97.4257"/>
+</g>
+<!-- table3 -->
+<g id="node2" class="node">
+<title>table3</title>
+<polyline fill="none" stroke="#000000" points="8,-247 96,-247 "/>
+<text text-anchor="start" x="49.2759" y="-252.8" font-family="Times,serif" font-size="14.00" fill="#000000">s</text>
+<polygon fill="none" stroke="#000000" points="8,-227 8,-247 60,-247 60,-227 8,-227"/>
+<text text-anchor="start" x="18.8413" y="-232.8" font-family="Times,serif" font-size="14.00" fill="#000000">name</text>
+<polygon fill="none" stroke="#000000" points="60,-227 60,-247 96,-247 96,-227 60,-227"/>
+<text text-anchor="start" x="62.8413" y="-232.8" font-family="Times,serif" font-size="14.00" fill="#000000">value</text>
+<polygon fill="none" stroke="#000000" points="8,-207 8,-227 60,-227 60,-207 8,-207"/>
+<text text-anchor="start" x="26.2241" y="-212.8" font-family="Times,serif" font-size="14.00" fill="#000000">ptr</text>
+<polygon fill="none" stroke="#000000" points="60,-207 60,-227 96,-227 96,-207 60,-207"/>
+<polygon fill="none" stroke="#000000" points="8,-187 8,-207 60,-207 60,-187 8,-187"/>
+<text text-anchor="start" x="25.4482" y="-192.8" font-family="Times,serif" font-size="14.00" fill="#000000">len</text>
+<polygon fill="none" stroke="#000000" points="60,-187 60,-207 96,-207 96,-187 60,-187"/>
+<text text-anchor="start" x="71.2563" y="-192.8" font-family="Times,serif" font-size="14.00" fill="#000000">11</text>
+<polygon fill="none" stroke="#000000" points="8,-167 8,-187 60,-187 60,-167 8,-167"/>
+<text text-anchor="start" x="10.6826" y="-172.8" font-family="Times,serif" font-size="14.00" fill="#000000">capacity</text>
+<polygon fill="none" stroke="#000000" points="60,-167 60,-187 96,-187 96,-167 60,-167"/>
+<text text-anchor="start" x="71.2563" y="-172.8" font-family="Times,serif" font-size="14.00" fill="#000000">11</text>
+</g>
+<!-- table3&#45;&gt;table4 -->
+<g id="edge2" class="edge">
+<title>table3:c&#45;&gt;table4:pointee</title>
+<path fill="none" stroke="#000000" d="M78,-217C78,-217 109.3179,-214.5994 138.3725,-214.0931"/>
+<polygon fill="#000000" stroke="#000000" points="138.5326,-217.5918 148.5,-214 138.4682,-210.5921 138.5326,-217.5918"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl14-01.png b/src/doc/book/src/img/trpl14-01.png
new file mode 100644
index 000000000..d7deaaf95
--- /dev/null
+++ b/src/doc/book/src/img/trpl14-01.png
Binary files differ
diff --git a/src/doc/book/src/img/trpl14-02.png b/src/doc/book/src/img/trpl14-02.png
new file mode 100644
index 000000000..121801b76
--- /dev/null
+++ b/src/doc/book/src/img/trpl14-02.png
Binary files differ
diff --git a/src/doc/book/src/img/trpl14-03.png b/src/doc/book/src/img/trpl14-03.png
new file mode 100644
index 000000000..cf5a15c41
--- /dev/null
+++ b/src/doc/book/src/img/trpl14-03.png
Binary files differ
diff --git a/src/doc/book/src/img/trpl14-04.png b/src/doc/book/src/img/trpl14-04.png
new file mode 100644
index 000000000..dc1caaba9
--- /dev/null
+++ b/src/doc/book/src/img/trpl14-04.png
Binary files differ
diff --git a/src/doc/book/src/img/trpl15-01.svg b/src/doc/book/src/img/trpl15-01.svg
new file mode 100644
index 000000000..bbeef968a
--- /dev/null
+++ b/src/doc/book/src/img/trpl15-01.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg
+ viewBox="0.00 0.00 1000.00 700.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 156)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-156 174,-156 174,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8,-128 162,-128 "/>
+<text text-anchor="start" x="70.6069" y="-133.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="8,-4 8,-128 31,-128 31,-4 8,-4"/>
+<text text-anchor="start" x="10.5552" y="-61.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="31,-4 31,-128 162,-128 162,-4 31,-4"/>
+<polyline fill="none" stroke="#000000" points="34,-105 159,-105 "/>
+<text text-anchor="start" x="82.1069" y="-110.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="34,-7 34,-105 57,-105 57,-7 34,-7"/>
+<text text-anchor="start" x="36.5552" y="-51.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="57,-7 57,-105 159,-105 159,-7 57,-7"/>
+<polyline fill="none" stroke="#000000" points="60,-82 156,-82 "/>
+<text text-anchor="start" x="93.6069" y="-87.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="60,-10 60,-82 83,-82 83,-10 60,-10"/>
+<text text-anchor="start" x="62.5552" y="-41.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="83,-10 83,-82 156,-82 156,-10 83,-10"/>
+<polyline fill="none" stroke="#000000" points="86,-59 153,-59 "/>
+<text text-anchor="start" x="105.1069" y="-64.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="86,-13 86,-59 109,-59 109,-13 86,-13"/>
+<text text-anchor="start" x="88.5552" y="-31.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="109,-13 109,-59 153,-59 153,-13 109,-13"/>
+<polyline fill="none" stroke="#000000" points="112,-36 150,-36 "/>
+<text text-anchor="start" x="116.6069" y="-41.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="112,-16 112,-36 135,-36 135,-16 112,-16"/>
+<text text-anchor="start" x="114.5552" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="135,-16 135,-36 150,-36 150,-16 135,-16"/>
+<text text-anchor="start" x="137.5098" y="-21.8" font-family="Times,serif" font-size="14.00" fill="#000000">∞</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl15-02.svg b/src/doc/book/src/img/trpl15-02.svg
new file mode 100644
index 000000000..4454df8c3
--- /dev/null
+++ b/src/doc/book/src/img/trpl15-02.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+<svg width="250pt"
+ viewBox="0.00 0.00 363.00 342.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 78)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-78 83,-78 83,4 -4,4"/>
+<!-- table0 -->
+<g id="node1" class="node">
+<title>table0</title>
+<polyline fill="none" stroke="#000000" points="8.5,-50 71.5,-50 "/>
+<text text-anchor="start" x="25.6069" y="-55.8" font-family="Times,serif" font-size="14.00" fill="#000000">Cons</text>
+<polygon fill="none" stroke="#000000" points="8.5,-4 8.5,-50 31.5,-50 31.5,-4 8.5,-4"/>
+<text text-anchor="start" x="11.0552" y="-22.8" font-family="Times,serif" font-size="14.00" fill="#000000">i32</text>
+<polygon fill="none" stroke="#000000" points="31.5,-4 31.5,-50 71.5,-50 71.5,-4 31.5,-4"/>
+<polyline fill="none" stroke="#000000" points="34.5,-27 68.5,-27 "/>
+<text text-anchor="start" x="39.8311" y="-32.8" font-family="Times,serif" font-size="14.00" fill="#000000">Box</text>
+<polygon fill="none" stroke="#000000" points="34.5,-7 34.5,-27 68.5,-27 68.5,-7 34.5,-7"/>
+<text text-anchor="start" x="37.1172" y="-12.8" font-family="Times,serif" font-size="14.00" fill="#000000">usize</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl15-03.svg b/src/doc/book/src/img/trpl15-03.svg
new file mode 100644
index 000000000..dbc3b5cdb
--- /dev/null
+++ b/src/doc/book/src/img/trpl15-03.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: %3 Pages: 1 -->
+ <svg width="750pt"
+ viewBox="0.00 0.00 2500 700" xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(4.1667 4.1667) rotate(0) translate(4 148)">
+<title>%3</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-148 418,-148 418,4 -4,4"/>
+<!-- table4 -->
+<g id="node1" class="node">
+<title>table4</title>
+<text text-anchor="start" x="21" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">b</text>
+</g>
+<!-- table5 -->
+<g id="node2" class="node">
+<title>table5</title>
+<polygon fill="none" stroke="#000000" points="104,-116 104,-136 117,-136 117,-116 104,-116"/>
+<text text-anchor="start" x="107" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000">3</text>
+<polygon fill="none" stroke="#000000" points="117,-116 117,-136 130,-136 130,-116 117,-116"/>
+<text text-anchor="start" x="120" y="-121.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table4&#45;&gt;table5 -->
+<g id="edge4" class="edge">
+<title>table4:c&#45;&gt;table5:pte4</title>
+<path fill="none" stroke="#000000" d="M34,-126C34,-126 65.1184,-126 93.9514,-126"/>
+<polygon fill="#000000" stroke="#000000" points="94,-129.5001 104,-126 94,-122.5001 94,-129.5001"/>
+</g>
+<!-- table1 -->
+<g id="node4" class="node">
+<title>table1</title>
+<polygon fill="none" stroke="#000000" points="194,-62 194,-82 207,-82 207,-62 194,-62"/>
+<text text-anchor="start" x="197" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">5</text>
+<polygon fill="none" stroke="#000000" points="207,-62 207,-82 220,-82 220,-62 207,-62"/>
+<text text-anchor="start" x="210" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table5&#45;&gt;table1 -->
+<g id="edge5" class="edge">
+<title>table5:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M124,-126C124,-126 149.4376,-81.2672 183.6334,-73.2293"/>
+<polygon fill="#000000" stroke="#000000" points="184.4818,-76.6533 194,-72 183.6574,-69.702 184.4818,-76.6533"/>
+</g>
+<!-- table0 -->
+<g id="node3" class="node">
+<title>table0</title>
+<text text-anchor="start" x="110.8931" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">a</text>
+</g>
+<!-- table0&#45;&gt;table1 -->
+<g id="edge1" class="edge">
+<title>table0:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M123,-72C123,-72 154.5629,-72 183.8079,-72"/>
+<polygon fill="#000000" stroke="#000000" points="184,-75.5001 194,-72 184,-68.5001 184,-75.5001"/>
+</g>
+<!-- table2 -->
+<g id="node5" class="node">
+<title>table2</title>
+<polygon fill="none" stroke="#000000" points="281,-62 281,-82 301,-82 301,-62 281,-62"/>
+<text text-anchor="start" x="284" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">10</text>
+<polygon fill="none" stroke="#000000" points="301,-62 301,-82 314,-82 314,-62 301,-62"/>
+<text text-anchor="start" x="304" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table1&#45;&gt;table2 -->
+<g id="edge2" class="edge">
+<title>table1:c&#45;&gt;table2:pte1</title>
+<path fill="none" stroke="#000000" d="M214,-72C214,-72 243.2667,-72 270.6585,-72"/>
+<polygon fill="#000000" stroke="#000000" points="271,-75.5001 281,-72 271,-68.5001 271,-75.5001"/>
+</g>
+<!-- table3 -->
+<g id="node6" class="node">
+<title>table3</title>
+<polygon fill="none" stroke="#000000" points="376,-62 376,-82 399,-82 399,-62 376,-62"/>
+<text text-anchor="start" x="378.5552" y="-67.8" font-family="Times,serif" font-size="14.00" fill="#000000">Nil</text>
+</g>
+<!-- table2&#45;&gt;table3 -->
+<g id="edge3" class="edge">
+<title>table2:c&#45;&gt;table3:pte2</title>
+<path fill="none" stroke="#000000" d="M308,-72C308,-72 341.8867,-72 365.5509,-72"/>
+<polygon fill="#000000" stroke="#000000" points="365.8498,-75.5001 375.8497,-72 365.8497,-68.5001 365.8498,-75.5001"/>
+</g>
+<!-- table6 -->
+<g id="node7" class="node">
+<title>table6</title>
+<text text-anchor="start" x="20.8931" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">c</text>
+</g>
+<!-- table7 -->
+<g id="node8" class="node">
+<title>table7</title>
+<polygon fill="none" stroke="#000000" points="104,-8 104,-28 117,-28 117,-8 104,-8"/>
+<text text-anchor="start" x="107" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000">4</text>
+<polygon fill="none" stroke="#000000" points="117,-8 117,-28 130,-28 130,-8 117,-8"/>
+<text text-anchor="start" x="120" y="-13.8" font-family="Times,serif" font-size="14.00" fill="#000000"> &#160;</text>
+</g>
+<!-- table6&#45;&gt;table7 -->
+<g id="edge6" class="edge">
+<title>table6:c&#45;&gt;table7:pte6</title>
+<path fill="none" stroke="#000000" d="M33,-18C33,-18 64.5629,-18 93.8079,-18"/>
+<polygon fill="#000000" stroke="#000000" points="94,-21.5001 104,-18 94,-14.5001 94,-21.5001"/>
+</g>
+<!-- table7&#45;&gt;table1 -->
+<g id="edge7" class="edge">
+<title>table7:c&#45;&gt;table1:pte0</title>
+<path fill="none" stroke="#000000" d="M124,-18C124,-18 149.4376,-62.7328 183.6334,-70.7707"/>
+<polygon fill="#000000" stroke="#000000" points="183.6574,-74.298 194,-72 184.4818,-67.3467 183.6574,-74.298"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl15-04.svg b/src/doc/book/src/img/trpl15-04.svg
new file mode 100644
index 000000000..7285ae673
--- /dev/null
+++ b/src/doc/book/src/img/trpl15-04.svg
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.44.1 (20200629.0846)
+ -->
+<!-- Pages: 1 -->
+<svg width="750pt"
+ viewBox="0.00 0.00 1000 550" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(3.5 3.5) rotate(0) translate(4 148.09)">
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-148.09 274,-148.09 274,4 -4,4"/>
+<!-- l1 -->
+<g id="node1" class="node">
+<title>l1</title>
+<polygon fill="none" stroke="black" points="90,-52.59 90,-88.59 144,-88.59 144,-52.59 90,-52.59"/>
+<text text-anchor="middle" x="104" y="-66.89" font-family="Times,serif" font-size="14.00">5</text>
+<polyline fill="none" stroke="black" points="118,-52.59 118,-88.59 "/>
+<text text-anchor="middle" x="131" y="-66.89" font-family="Times,serif" font-size="14.00"> </text>
+</g>
+<!-- l2 -->
+<g id="node2" class="node">
+<title>l2</title>
+<polygon fill="none" stroke="black" points="180,-52.59 180,-88.59 234,-88.59 234,-52.59 180,-52.59"/>
+<text text-anchor="middle" x="196" y="-66.89" font-family="Times,serif" font-size="14.00">10</text>
+<polyline fill="none" stroke="black" points="212,-52.59 212,-88.59 "/>
+<text text-anchor="middle" x="223" y="-66.89" font-family="Times,serif" font-size="14.00"> </text>
+</g>
+<!-- l1&#45;&gt;l2 -->
+<g id="edge5" class="edge">
+<title>l1:c&#45;&gt;l2:data</title>
+<path fill="none" stroke="black" d="M144.31,-70.59C151.47,-70.59 160.69,-70.59 169.83,-70.59"/>
+<polygon fill="black" stroke="black" points="170,-74.09 180,-70.59 170,-67.09 170,-74.09"/>
+</g>
+<!-- invisible_end -->
+<g id="node4" class="node">
+<title>invisible_end</title>
+<ellipse fill="black" stroke="black" cx="270" cy="-46.59" rx="0" ry="0"/>
+</g>
+<!-- l2&#45;&gt;invisible_end -->
+<g id="edge6" class="edge">
+<title>l2:c&#45;&gt;invisible_end:n</title>
+<path fill="none" stroke="black" d="M234.38,-69.89C248.29,-68.34 270,-63.4 270,-47.59"/>
+</g>
+<!-- invisible_start -->
+<g id="node3" class="node">
+<title>invisible_start</title>
+<ellipse fill="black" stroke="black" cx="27" cy="-37.59" rx="0" ry="0"/>
+</g>
+<!-- invisible_start&#45;&gt;l1 -->
+<g id="edge3" class="edge">
+<title>invisible_start:n&#45;&gt;l1</title>
+<path fill="none" stroke="black" d="M27,-38.59C27,-50.42 55.22,-59.08 79.87,-64.38"/>
+<polygon fill="black" stroke="black" points="79.28,-67.83 89.78,-66.38 80.67,-60.97 79.28,-67.83"/>
+</g>
+<!-- invisible_start&#45;&gt;invisible_end -->
+<g id="edge4" class="edge">
+<title>invisible_start:s&#45;&gt;invisible_end:s</title>
+<path fill="none" stroke="black" d="M27,-36.59C27,17.45 270,8.45 270,-45.59"/>
+</g>
+<!-- a -->
+<g id="node5" class="node">
+<title>a</title>
+<polygon fill="none" stroke="black" points="0,-70.59 0,-106.59 54,-106.59 54,-70.59 0,-70.59"/>
+<text text-anchor="middle" x="27" y="-84.89" font-family="Times,serif" font-size="14.00">a</text>
+</g>
+<!-- a&#45;&gt;l1 -->
+<g id="edge1" class="edge">
+<title>a&#45;&gt;l1:n</title>
+<path fill="none" stroke="black" d="M54.22,-93.79C73.3,-97.06 97.79,-100.05 109.76,-96.58"/>
+<polygon fill="black" stroke="black" points="112.24,-99.06 117,-89.59 107.38,-94.02 112.24,-99.06"/>
+</g>
+<!-- b -->
+<g id="node6" class="node">
+<title>b</title>
+<polygon fill="none" stroke="black" points="90,-107.59 90,-143.59 144,-143.59 144,-107.59 90,-107.59"/>
+<text text-anchor="middle" x="117" y="-121.89" font-family="Times,serif" font-size="14.00">b</text>
+</g>
+<!-- b&#45;&gt;l2 -->
+<g id="edge2" class="edge">
+<title>b&#45;&gt;l2:n</title>
+<path fill="none" stroke="black" d="M144.22,-125.57C166.99,-124.22 197.48,-118.71 205.18,-99.44"/>
+<polygon fill="black" stroke="black" points="208.62,-100.06 207,-89.59 201.74,-98.79 208.62,-100.06"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/book/src/img/trpl20-01.png b/src/doc/book/src/img/trpl20-01.png
new file mode 100644
index 000000000..19e2cbc0a
--- /dev/null
+++ b/src/doc/book/src/img/trpl20-01.png
Binary files differ
diff --git a/src/doc/book/src/title-page.md b/src/doc/book/src/title-page.md
new file mode 100644
index 000000000..47226dc84
--- /dev/null
+++ b/src/doc/book/src/title-page.md
@@ -0,0 +1,22 @@
+# The Rust Programming Language
+
+*by Steve Klabnik and Carol Nichols, with contributions from the Rust Community*
+
+This version of the text assumes you’re using Rust 1.62 (released 2022-06-30)
+or later. See the [“Installation” section of Chapter 1][install]<!-- ignore -->
+to install or update Rust.
+
+The HTML format is available online at
+[https://doc.rust-lang.org/stable/book/](https://doc.rust-lang.org/stable/book/)
+and offline with installations of Rust made with `rustup`; run `rustup docs
+--book` to open.
+
+Several community [translations] are also available.
+
+This text is available in [paperback and ebook format from No Starch
+Press][nsprust].
+
+[install]: ch01-01-installation.html
+[editions]: appendix-05-editions.html
+[nsprust]: https://nostarch.com/rust
+[translations]: appendix-06-translation.html
diff --git a/src/doc/book/style-guide.md b/src/doc/book/style-guide.md
new file mode 100644
index 000000000..56677811f
--- /dev/null
+++ b/src/doc/book/style-guide.md
@@ -0,0 +1,34 @@
+# Style Guide
+
+## Prose
+
+* Prefer title case for chapter/section headings, ex: `## Generating a Secret
+ Number` rather than `## Generating a secret number`.
+* Prefer italics over single quotes when calling out a term, ex: `is an
+ *associated function* of` rather than `is an ‘associated function’ of`.
+* When talking about a method in prose, DO NOT include the parentheses, ex:
+ `read_line` rather than `read_line()`.
+* Hard wrap at 80 chars
+* Prefer not mixing code and not-code in one word, ex: ``Remember when we wrote
+ `use std::io`?`` rather than ``Remember when we `use`d `std::io`?``
+
+## Code
+
+* Add the file name before markdown blocks to make it clear which file we're
+ talking about, when applicable.
+* When making changes to code, make it clear which parts of the code changed
+ and which stayed the same... not sure how to do this yet
+* Split up long lines as appropriate to keep them under 80 chars if possible
+* Use `bash` syntax highlighting for command line output code blocks
+
+## Links
+
+Once all the scripts are done:
+
+* If a link shouldn't be printed, mark it to be ignored
+ * This includes all "Chapter XX" intra-book links, which *should* be links
+ for the HTML version
+* Make intra-book links and stdlib API doc links relative so they work whether
+ the book is read offline or on docs.rust-lang.org
+* Use markdown links and keep in mind that they will be changed into `text at
+ *url*` in print, so word them in a way that it reads well in that format
diff --git a/src/doc/book/theme/2018-edition.css b/src/doc/book/theme/2018-edition.css
new file mode 100644
index 000000000..b1dcf9364
--- /dev/null
+++ b/src/doc/book/theme/2018-edition.css
@@ -0,0 +1,9 @@
+span.caption {
+ font-size: .8em;
+ font-weight: 600;
+}
+
+span.caption code {
+ font-size: 0.875em;
+ font-weight: 400;
+}
diff --git a/src/doc/book/tools/convert-quotes.sh b/src/doc/book/tools/convert-quotes.sh
new file mode 100755
index 000000000..bffe82359
--- /dev/null
+++ b/src/doc/book/tools/convert-quotes.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+
+set -eu
+
+mkdir -p tmp/src
+rm -rf tmp/*.md
+
+for f in src/"${1:-\"\"}"*.md
+do
+ cargo run --bin convert_quotes < "$f" > "tmp/$f"
+ mv "tmp/$f" "$f"
+done
diff --git a/src/doc/book/tools/doc-to-md.sh b/src/doc/book/tools/doc-to-md.sh
new file mode 100755
index 000000000..cffe4c04b
--- /dev/null
+++ b/src/doc/book/tools/doc-to-md.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+
+set -eu
+
+# Get all the docx files in the tmp dir.
+find tmp -name '*.docx' -print0 | \
+# Extract just the filename so we can reuse it easily.
+xargs -0 basename -s .docx | \
+while IFS= read -r filename; do
+ # Make a directory to put the XML in.
+ mkdir -p "tmp/$filename"
+ # Unzip the docx to get at the XML.
+ unzip -o "tmp/$filename.docx" -d "tmp/$filename"
+ # Convert to markdown with XSL.
+ xsltproc tools/docx-to-md.xsl "tmp/$filename/word/document.xml" | \
+ # Hard wrap at 80 chars at word bourdaries.
+ fold -w 80 -s | \
+ # Remove trailing whitespace and save in the `nostarch` dir for comparison.
+ sed -e "s/ *$//" > "nostarch/$filename.md"
+done
diff --git a/src/doc/book/tools/docx-to-md.xsl b/src/doc/book/tools/docx-to-md.xsl
new file mode 100644
index 000000000..637c7a59c
--- /dev/null
+++ b/src/doc/book/tools/docx-to-md.xsl
@@ -0,0 +1,220 @@
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml">
+ <xsl:output method="text" />
+ <xsl:template match="/">
+ <xsl:apply-templates select="/w:document/w:body/*" />
+ </xsl:template>
+
+ <!-- Ignore these -->
+ <xsl:template match="w:p[starts-with(w:pPr/w:pStyle/@w:val, 'TOC')]" />
+ <xsl:template match="w:p[starts-with(w:pPr/w:pStyle/@w:val, 'Contents1')]" />
+ <xsl:template match="w:p[starts-with(w:pPr/w:pStyle/@w:val, 'Contents2')]" />
+ <xsl:template match="w:p[starts-with(w:pPr/w:pStyle/@w:val, 'Contents3')]" />
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'ChapterStart']" />
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'Normal']" />
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'Standard']" />
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'AuthorQuery']" />
+
+ <xsl:template match="w:p[w:pPr[not(w:pStyle)]]" />
+
+ <!-- Paragraph styles -->
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'ChapterTitle']">
+ <xsl:text>&#10;[TOC]&#10;&#10;</xsl:text>
+ <xsl:text># </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'HeadA']">
+ <xsl:text>## </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'HeadB']">
+ <xsl:text>### </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'HeadC']">
+ <xsl:text>#### </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'HeadBox']">
+ <xsl:text>### </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'NumListA' or @w:val = 'NumListB']]">
+ <xsl:text>1. </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'NumListC']]">
+ <xsl:text>1. </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'BulletA' or @w:val = 'BulletB' or @w:val = 'ListPlainA' or @w:val = 'ListPlainB']]">
+ <xsl:text>* </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'BulletC' or @w:val = 'ListPlainC']]">
+ <xsl:text>* </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'SubBullet']]">
+ <xsl:text> * </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'BodyFirst' or @w:val = 'Body' or @w:val = 'BodyFirstBox' or @w:val = 'BodyBox' or @w:val = '1stPara']]">
+ <xsl:if test=".//w:t">
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'CodeA' or @w:val = 'CodeAWingding']]">
+ <xsl:text>```&#10;</xsl:text>
+ <!-- Don't apply Emphasis/etc templates in code blocks -->
+ <xsl:for-each select="w:r">
+ <xsl:value-of select="w:t" />
+ </xsl:for-each>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'CodeB' or @w:val = 'CodeBWingding']]">
+ <!-- Don't apply Emphasis/etc templates in code blocks -->
+ <xsl:for-each select="w:r">
+ <xsl:value-of select="w:t" />
+ </xsl:for-each>
+ <xsl:text>&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'CodeC' or @w:val = 'CodeCWingding']]">
+ <!-- Don't apply Emphasis/etc templates in code blocks -->
+ <xsl:for-each select="w:r">
+ <xsl:value-of select="w:t" />
+ </xsl:for-each>
+ <xsl:text>&#10;```&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'CodeSingle']">
+ <xsl:text>```&#10;</xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;```&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'ProductionDirective']">
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'Caption' or @w:val = 'TableTitle' or @w:val = 'Caption1' or @w:val = 'Listing']]">
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'BlockQuote']]">
+ <xsl:text>> </xsl:text>
+ <xsl:apply-templates select="*" />
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle[@w:val = 'BlockText']]">
+ <xsl:text>&#10;</xsl:text>
+ <xsl:text>> </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p[w:pPr/w:pStyle/@w:val = 'Note']">
+ <xsl:text>> </xsl:text>
+ <xsl:apply-templates select="*" />
+ <xsl:text>&#10;&#10;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="w:p">
+Unmatched: <xsl:value-of select="w:pPr/w:pStyle/@w:val" />
+ <xsl:text>
+ </xsl:text>
+
+
+ </xsl:template>
+
+ <!-- Character styles -->
+
+ <xsl:template match="w:r[w:rPr/w:rStyle[@w:val = 'Literal' or @w:val = 'LiteralBold' or @w:val = 'LiteralCaption' or @w:val = 'LiteralBox']]">
+ <xsl:choose>
+ <xsl:when test="normalize-space(w:t) != ''">
+ <xsl:if test="starts-with(w:t, ' ')">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <xsl:text>`</xsl:text>
+ <xsl:value-of select="normalize-space(w:t)" />
+ <xsl:text>`</xsl:text>
+ <xsl:if test="substring(w:t, string-length(w:t)) = ' '">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="normalize-space(w:t) != w:t and w:t != ''">
+ <xsl:text> </xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="w:r[w:rPr/w:rStyle[@w:val = 'EmphasisBold']]">
+ <xsl:choose>
+ <xsl:when test="normalize-space(w:t) != ''">
+ <xsl:if test="starts-with(w:t, ' ')">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <xsl:text>**</xsl:text>
+ <xsl:value-of select="normalize-space(w:t)" />
+ <xsl:text>**</xsl:text>
+ <xsl:if test="substring(w:t, string-length(w:t)) = ' '">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test="normalize-space(w:t) != w:t and w:t != ''">
+ <xsl:text> </xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="w:r[w:rPr/w:rStyle[@w:val = 'EmphasisItalic' or @w:val = 'EmphasisItalicBox' or @w:val = 'EmphasisNote' or @w:val = 'EmphasisRevCaption' or @w:val = 'EmphasisRevItal']]">
+ <xsl:choose>
+ <xsl:when test="normalize-space(w:t) != ''">
+ <xsl:if test="starts-with(w:t, ' ')">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ <xsl:text>*</xsl:text>
+ <xsl:value-of select="normalize-space(w:t)" />
+ <xsl:text>*</xsl:text>
+ <xsl:if test="substring(w:t, string-length(w:t)) = ' '">
+ <xsl:text> </xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> </xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="w:r">
+ <xsl:value-of select="w:t" />
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/doc/book/tools/megadiff.sh b/src/doc/book/tools/megadiff.sh
new file mode 100755
index 000000000..f1e510249
--- /dev/null
+++ b/src/doc/book/tools/megadiff.sh
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+set -eu
+
+# Remove files that are never affected by rustfmt or are otherwise uninteresting
+rm -rf tmp/book-before/css/ tmp/book-before/theme/ tmp/book-before/img/ tmp/book-before/*.js \
+ tmp/book-before/FontAwesome tmp/book-before/*.css tmp/book-before/*.png \
+ tmp/book-before/*.json tmp/book-before/print.html
+
+rm -rf tmp/book-after/css/ tmp/book-after/theme/ tmp/book-after/img/ tmp/book-after/*.js \
+ tmp/book-after/FontAwesome tmp/book-after/*.css tmp/book-after/*.png \
+ tmp/book-after/*.json tmp/book-after/print.html
+
+# Get all the html files before
+find tmp/book-before -name '*.html' -print0 | \
+# Extract just the filename so we can reuse it easily.
+xargs -0 basename | \
+while IFS= read -r filename; do
+ # Remove any files that are the same before and after
+ diff "tmp/book-before/$filename" "tmp/book-after/$filename" > /dev/null \
+ && rm "tmp/book-before/$filename" "tmp/book-after/$filename"
+done
diff --git a/src/doc/book/tools/nostarch.sh b/src/doc/book/tools/nostarch.sh
new file mode 100755
index 000000000..eec0ac5ea
--- /dev/null
+++ b/src/doc/book/tools/nostarch.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+set -eu
+
+cargo build --release
+
+mkdir -p tmp
+rm -rf tmp/*.md
+rm -rf tmp/markdown
+
+# Render the book as Markdown to include all the code listings
+MDBOOK_OUTPUT__MARKDOWN=1 mdbook build -d tmp
+
+# Get all the Markdown files
+find tmp/markdown -name "${1:-\"\"}*.md" -print0 | \
+# Extract just the filename so we can reuse it easily.
+xargs -0 basename | \
+# Remove all links followed by `<!-- ignore -->``, then
+# Change all remaining links from Markdown to italicized inline text.
+while IFS= read -r filename; do
+ < "tmp/markdown/$filename" ./target/release/remove_links \
+ | ./target/release/link2print \
+ | ./target/release/remove_markup \
+ | ./target/release/remove_hidden_lines > "tmp/$filename"
+done
+# Concatenate the files into the `nostarch` dir.
+./target/release/concat_chapters tmp nostarch
diff --git a/src/doc/book/tools/src/bin/concat_chapters.rs b/src/doc/book/tools/src/bin/concat_chapters.rs
new file mode 100644
index 000000000..79ffec9b7
--- /dev/null
+++ b/src/doc/book/tools/src/bin/concat_chapters.rs
@@ -0,0 +1,127 @@
+#[macro_use]
+extern crate lazy_static;
+
+use std::collections::BTreeMap;
+use std::env;
+use std::fs::{create_dir, read_dir, File};
+use std::io;
+use std::io::{Read, Write};
+use std::path::{Path, PathBuf};
+use std::process::exit;
+
+use regex::Regex;
+
+static PATTERNS: &[(&str, &str)] = &[
+ (r"ch(\d\d)-\d\d-.*\.md", "chapter$1.md"),
+ (r"appendix-(\d\d).*\.md", "appendix.md"),
+];
+
+lazy_static! {
+ static ref MATCHERS: Vec<(Regex, &'static str)> = {
+ PATTERNS
+ .iter()
+ .map(|&(expr, repl)| (Regex::new(expr).unwrap(), repl))
+ .collect()
+ };
+}
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ if args.len() < 3 {
+ println!("Usage: {} <src-dir> <target-dir>", args[0]);
+ exit(1);
+ }
+
+ let source_dir = ensure_dir_exists(&args[1]).unwrap();
+ let target_dir = ensure_dir_exists(&args[2]).unwrap();
+
+ let mut matched_files = match_files(source_dir, target_dir);
+ matched_files.sort();
+
+ for (target_path, source_paths) in group_by_target(matched_files) {
+ concat_files(source_paths, target_path).unwrap();
+ }
+}
+
+fn match_files(
+ source_dir: &Path,
+ target_dir: &Path,
+) -> Vec<(PathBuf, PathBuf)> {
+ read_dir(source_dir)
+ .expect("Unable to read source directory")
+ .filter_map(|maybe_entry| maybe_entry.ok())
+ .filter_map(|entry| {
+ let source_filename = entry.file_name();
+ let source_filename =
+ &source_filename.to_string_lossy().into_owned();
+ for &(ref regex, replacement) in MATCHERS.iter() {
+ if regex.is_match(source_filename) {
+ let target_filename =
+ regex.replace_all(source_filename, replacement);
+ let source_path = entry.path();
+ let mut target_path = PathBuf::from(&target_dir);
+ target_path.push(target_filename.to_string());
+ return Some((source_path, target_path));
+ }
+ }
+ None
+ })
+ .collect()
+}
+
+fn group_by_target(
+ matched_files: Vec<(PathBuf, PathBuf)>,
+) -> BTreeMap<PathBuf, Vec<PathBuf>> {
+ let mut grouped: BTreeMap<PathBuf, Vec<PathBuf>> = BTreeMap::new();
+ for (source, target) in matched_files {
+ if let Some(source_paths) = grouped.get_mut(&target) {
+ source_paths.push(source);
+ continue;
+ }
+ let source_paths = vec![source];
+ grouped.insert(target.clone(), source_paths);
+ }
+ grouped
+}
+
+fn concat_files(
+ source_paths: Vec<PathBuf>,
+ target_path: PathBuf,
+) -> io::Result<()> {
+ println!("Concatenating into {}:", target_path.to_string_lossy());
+ let mut target = File::create(target_path)?;
+
+ write!(
+ target,
+ "\
+<!-- DO NOT EDIT THIS FILE.
+
+This file is periodically generated from the content in the `/src/`
+directory, so all fixes need to be made in `/src/`.
+-->
+
+[TOC]
+"
+ )?;
+
+ for path in source_paths {
+ println!(" {}", path.to_string_lossy());
+ let mut source = File::open(path)?;
+ let mut contents: Vec<u8> = Vec::new();
+ source.read_to_end(&mut contents)?;
+
+ target.write_all(b"\n")?;
+ target.write_all(&contents)?;
+ target.write_all(b"\n")?;
+ }
+ Ok(())
+}
+
+fn ensure_dir_exists(dir_string: &str) -> io::Result<&Path> {
+ let path = Path::new(dir_string);
+ if !path.exists() {
+ create_dir(path)?;
+ }
+ Ok(path)
+}
diff --git a/src/doc/book/tools/src/bin/convert_quotes.rs b/src/doc/book/tools/src/bin/convert_quotes.rs
new file mode 100644
index 000000000..b4a9bdce2
--- /dev/null
+++ b/src/doc/book/tools/src/bin/convert_quotes.rs
@@ -0,0 +1,78 @@
+use std::io;
+use std::io::Read;
+
+fn main() {
+ let mut is_in_code_block = false;
+ let mut is_in_inline_code = false;
+ let mut is_in_html_tag = false;
+
+ let mut buffer = String::new();
+ if let Err(e) = io::stdin().read_to_string(&mut buffer) {
+ panic!("{}", e);
+ }
+
+ for line in buffer.lines() {
+ if line.is_empty() {
+ is_in_inline_code = false;
+ }
+ if line.starts_with("```") {
+ is_in_code_block = !is_in_code_block;
+ }
+ if is_in_code_block {
+ is_in_inline_code = false;
+ is_in_html_tag = false;
+ println!("{}", line);
+ } else {
+ let modified_line = &mut String::new();
+ let mut previous_char = std::char::REPLACEMENT_CHARACTER;
+ let chars_in_line = line.chars();
+
+ for possible_match in chars_in_line {
+ // Check if inside inline code.
+ if possible_match == '`' {
+ is_in_inline_code = !is_in_inline_code;
+ }
+ // Check if inside HTML tag.
+ if possible_match == '<' && !is_in_inline_code {
+ is_in_html_tag = true;
+ }
+ if possible_match == '>' && !is_in_inline_code {
+ is_in_html_tag = false;
+ }
+
+ // Replace with right/left apostrophe/quote.
+ let char_to_push = if possible_match == '\''
+ && !is_in_inline_code
+ && !is_in_html_tag
+ {
+ if (previous_char != std::char::REPLACEMENT_CHARACTER
+ && !previous_char.is_whitespace())
+ || previous_char == '‘'
+ {
+ '’'
+ } else {
+ '‘'
+ }
+ } else if possible_match == '"'
+ && !is_in_inline_code
+ && !is_in_html_tag
+ {
+ if (previous_char != std::char::REPLACEMENT_CHARACTER
+ && !previous_char.is_whitespace())
+ || previous_char == '“'
+ {
+ '”'
+ } else {
+ '“'
+ }
+ } else {
+ // Leave untouched.
+ possible_match
+ };
+ modified_line.push(char_to_push);
+ previous_char = char_to_push;
+ }
+ println!("{}", modified_line);
+ }
+ }
+}
diff --git a/src/doc/book/tools/src/bin/lfp.rs b/src/doc/book/tools/src/bin/lfp.rs
new file mode 100644
index 000000000..c4d4bce03
--- /dev/null
+++ b/src/doc/book/tools/src/bin/lfp.rs
@@ -0,0 +1,248 @@
+// We have some long regex literals, so:
+// ignore-tidy-linelength
+
+use docopt::Docopt;
+use serde::Deserialize;
+use std::io::BufRead;
+use std::{fs, io, path};
+
+fn main() {
+ let args: Args = Docopt::new(USAGE)
+ .and_then(|d| d.deserialize())
+ .unwrap_or_else(|e| e.exit());
+
+ let src_dir = &path::Path::new(&args.arg_src_dir);
+ let found_errs = walkdir::WalkDir::new(src_dir)
+ .min_depth(1)
+ .into_iter()
+ .map(|entry| match entry {
+ Ok(entry) => entry,
+ Err(err) => {
+ eprintln!("{:?}", err);
+ std::process::exit(911)
+ }
+ })
+ .map(|entry| {
+ let path = entry.path();
+ if is_file_of_interest(path) {
+ let err_vec = lint_file(path);
+ for err in &err_vec {
+ match *err {
+ LintingError::LineOfInterest(line_num, ref line) => {
+ eprintln!(
+ "{}:{}\t{}",
+ path.display(),
+ line_num,
+ line
+ )
+ }
+ LintingError::UnableToOpenFile => {
+ eprintln!("Unable to open {}.", path.display())
+ }
+ }
+ }
+ !err_vec.is_empty()
+ } else {
+ false
+ }
+ })
+ .collect::<Vec<_>>()
+ .iter()
+ .any(|result| *result);
+
+ if found_errs {
+ std::process::exit(1)
+ } else {
+ std::process::exit(0)
+ }
+}
+
+const USAGE: &str = "
+counter
+Usage:
+ lfp <src-dir>
+ lfp (-h | --help)
+Options:
+ -h --help Show this screen.
+";
+
+#[derive(Debug, Deserialize)]
+struct Args {
+ arg_src_dir: String,
+}
+
+fn lint_file(path: &path::Path) -> Vec<LintingError> {
+ match fs::File::open(path) {
+ Ok(file) => lint_lines(io::BufReader::new(&file).lines()),
+ Err(_) => vec![LintingError::UnableToOpenFile],
+ }
+}
+
+fn lint_lines<I>(lines: I) -> Vec<LintingError>
+where
+ I: Iterator<Item = io::Result<String>>,
+{
+ lines
+ .enumerate()
+ .map(|(line_num, line)| {
+ let raw_line = line.unwrap();
+ if is_line_of_interest(&raw_line) {
+ Err(LintingError::LineOfInterest(line_num, raw_line))
+ } else {
+ Ok(())
+ }
+ })
+ .filter(|result| result.is_err())
+ .map(|result| result.unwrap_err())
+ .collect()
+}
+
+fn is_file_of_interest(path: &path::Path) -> bool {
+ path.extension().map_or(false, |ext| ext == "md")
+}
+
+fn is_line_of_interest(line: &str) -> bool {
+ line.split_whitespace().any(|sub_string| {
+ sub_string.contains("file://")
+ && !sub_string.contains("file:///projects/")
+ })
+}
+
+#[derive(Debug)]
+enum LintingError {
+ UnableToOpenFile,
+ LineOfInterest(usize, String),
+}
+
+#[cfg(test)]
+mod tests {
+
+ use std::path;
+
+ #[test]
+ fn lint_file_returns_a_vec_with_errs_when_lines_of_interest_are_found() {
+ let string = r#"
+ $ cargo run
+ Compiling guessing_game v0.1.0 (file:///home/you/projects/guessing_game)
+ Running `target/guessing_game`
+ Guess the number!
+ The secret number is: 61
+ Please input your guess.
+ 10
+ You guessed: 10
+ Too small!
+ Please input your guess.
+ 99
+ You guessed: 99
+ Too big!
+ Please input your guess.
+ foo
+ Please input your guess.
+ 61
+ You guessed: 61
+ You win!
+ $ cargo run
+ Compiling guessing_game v0.1.0 (file:///home/you/projects/guessing_game)
+ Running `target/debug/guessing_game`
+ Guess the number!
+ The secret number is: 7
+ Please input your guess.
+ 4
+ You guessed: 4
+ $ cargo run
+ Running `target/debug/guessing_game`
+ Guess the number!
+ The secret number is: 83
+ Please input your guess.
+ 5
+ $ cargo run
+ Compiling guessing_game v0.1.0 (file:///home/you/projects/guessing_game)
+ Running `target/debug/guessing_game`
+ Hello, world!
+ "#;
+
+ let raw_lines = string.to_string();
+ let lines = raw_lines.lines().map(|line| Ok(line.to_string()));
+
+ let result_vec = super::lint_lines(lines);
+
+ assert!(!result_vec.is_empty());
+ assert_eq!(3, result_vec.len());
+ }
+
+ #[test]
+ fn lint_file_returns_an_empty_vec_when_no_lines_of_interest_are_found() {
+ let string = r#"
+ $ cargo run
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+ Running `target/guessing_game`
+ Guess the number!
+ The secret number is: 61
+ Please input your guess.
+ 10
+ You guessed: 10
+ Too small!
+ Please input your guess.
+ 99
+ You guessed: 99
+ Too big!
+ Please input your guess.
+ foo
+ Please input your guess.
+ 61
+ You guessed: 61
+ You win!
+ "#;
+
+ let raw_lines = string.to_string();
+ let lines = raw_lines.lines().map(|line| Ok(line.to_string()));
+
+ let result_vec = super::lint_lines(lines);
+
+ assert!(result_vec.is_empty());
+ }
+
+ #[test]
+ fn is_file_of_interest_returns_false_when_the_path_is_a_directory() {
+ let uninteresting_fn = "src/img";
+
+ assert!(!super::is_file_of_interest(path::Path::new(
+ uninteresting_fn
+ )));
+ }
+
+ #[test]
+ fn is_file_of_interest_returns_false_when_the_filename_does_not_have_the_md_extension(
+ ) {
+ let uninteresting_fn = "src/img/foo1.png";
+
+ assert!(!super::is_file_of_interest(path::Path::new(
+ uninteresting_fn
+ )));
+ }
+
+ #[test]
+ fn is_file_of_interest_returns_true_when_the_filename_has_the_md_extension()
+ {
+ let interesting_fn = "src/ch01-00-introduction.md";
+
+ assert!(super::is_file_of_interest(path::Path::new(interesting_fn)));
+ }
+
+ #[test]
+ fn is_line_of_interest_does_not_report_a_line_if_the_line_contains_a_file_url_which_is_directly_followed_by_the_project_path(
+ ) {
+ let sample_line =
+ "Compiling guessing_game v0.1.0 (file:///projects/guessing_game)";
+
+ assert!(!super::is_line_of_interest(sample_line));
+ }
+
+ #[test]
+ fn is_line_of_interest_reports_a_line_if_the_line_contains_a_file_url_which_is_not_directly_followed_by_the_project_path(
+ ) {
+ let sample_line = "Compiling guessing_game v0.1.0 (file:///home/you/projects/guessing_game)";
+
+ assert!(super::is_line_of_interest(sample_line));
+ }
+}
diff --git a/src/doc/book/tools/src/bin/link2print.rs b/src/doc/book/tools/src/bin/link2print.rs
new file mode 100644
index 000000000..1e92ecbcc
--- /dev/null
+++ b/src/doc/book/tools/src/bin/link2print.rs
@@ -0,0 +1,415 @@
+// FIXME: we have some long lines that could be refactored, but it's not a big deal.
+// ignore-tidy-linelength
+
+use regex::{Captures, Regex};
+use std::collections::HashMap;
+use std::io;
+use std::io::Read;
+
+fn main() {
+ write_md(parse_links(parse_references(read_md())));
+}
+
+fn read_md() -> String {
+ let mut buffer = String::new();
+ match io::stdin().read_to_string(&mut buffer) {
+ Ok(_) => buffer,
+ Err(error) => panic!("{}", error),
+ }
+}
+
+fn write_md(output: String) {
+ print!("{}", output);
+}
+
+fn parse_references(buffer: String) -> (String, HashMap<String, String>) {
+ let mut ref_map = HashMap::new();
+ // FIXME: currently doesn't handle "title" in following line.
+ let re = Regex::new(r###"(?m)\n?^ {0,3}\[([^]]+)\]:[[:blank:]]*(.*)$"###)
+ .unwrap();
+ let output = re
+ .replace_all(&buffer, |caps: &Captures<'_>| {
+ let key = caps.get(1).unwrap().as_str().to_uppercase();
+ let val = caps.get(2).unwrap().as_str().to_string();
+ if ref_map.insert(key, val).is_some() {
+ panic!(
+ "Did not expect markdown page to have duplicate reference"
+ );
+ }
+ "".to_string()
+ })
+ .to_string();
+ (output, ref_map)
+}
+
+fn parse_links((buffer, ref_map): (String, HashMap<String, String>)) -> String {
+ // FIXME: check which punctuation is allowed by spec.
+ let re = Regex::new(r###"(?:(?P<pre>(?:```(?:[^`]|`[^`])*`?\n```\n)|(?:[^\[]`[^`\n]+[\n]?[^`\n]*`))|(?:\[(?P<name>[^]]+)\](?:(?:\([[:blank:]]*(?P<val>[^")]*[^ ])(?:[[:blank:]]*"[^"]*")?\))|(?:\[(?P<key>[^]]*)\]))?))"###).expect("could not create regex");
+ let error_code =
+ Regex::new(r###"^E\d{4}$"###).expect("could not create regex");
+ let output = re.replace_all(&buffer, |caps: &Captures<'_>| {
+ match caps.name("pre") {
+ Some(pre_section) => pre_section.as_str().to_string(),
+ None => {
+ let name = caps.name("name").expect("could not get name").as_str();
+ // Really we should ignore text inside code blocks,
+ // this is a hack to not try to treat `#[derive()]`,
+ // `[profile]`, `[test]`, or `[E\d\d\d\d]` like a link.
+ if name.starts_with("derive(") ||
+ name.starts_with("profile") ||
+ name.starts_with("test") ||
+ name.starts_with("no_mangle") ||
+ error_code.is_match(name) {
+ return name.to_string()
+ }
+
+ let val = match caps.name("val") {
+ // `[name](link)`
+ Some(value) => value.as_str().to_string(),
+ None => {
+ match caps.name("key") {
+ Some(key) => {
+ match key.as_str() {
+ // `[name][]`
+ "" => ref_map.get(&name.to_uppercase()).unwrap_or_else(|| panic!("could not find url for the link text `{}`", name)).to_string(),
+ // `[name][reference]`
+ _ => ref_map.get(&key.as_str().to_uppercase()).unwrap_or_else(|| panic!("could not find url for the link text `{}`", key.as_str())).to_string(),
+ }
+ }
+ // `[name]` as reference
+ None => ref_map.get(&name.to_uppercase()).unwrap_or_else(|| panic!("could not find url for the link text `{}`", name)).to_string(),
+ }
+ }
+ };
+ format!("{} at *{}*", name, val)
+ }
+ }
+ });
+ output.to_string()
+}
+
+#[cfg(test)]
+mod tests {
+ fn parse(source: String) -> String {
+ super::parse_links(super::parse_references(source))
+ }
+
+ #[test]
+ fn parses_inline_link() {
+ let source =
+ r"This is a [link](http://google.com) that should be expanded"
+ .to_string();
+ let target =
+ r"This is a link at *http://google.com* that should be expanded"
+ .to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_multiline_links() {
+ let source = r"This is a [link](http://google.com) that
+should appear expanded. Another [location](/here/) and [another](http://gogogo)"
+ .to_string();
+ let target = r"This is a link at *http://google.com* that
+should appear expanded. Another location at */here/* and another at *http://gogogo*"
+ .to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_reference() {
+ let source = r"This is a [link][theref].
+[theref]: http://example.com/foo
+more text"
+ .to_string();
+ let target = r"This is a link at *http://example.com/foo*.
+more text"
+ .to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_implicit_link() {
+ let source = r"This is an [implicit][] link.
+[implicit]: /The Link/"
+ .to_string();
+ let target = r"This is an implicit at */The Link/* link.".to_string();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn parses_refs_with_one_space_indentation() {
+ let source = r"This is a [link][ref]
+ [ref]: The link"
+ .to_string();
+ let target = r"This is a link at *The link*".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_refs_with_two_space_indentation() {
+ let source = r"This is a [link][ref]
+ [ref]: The link"
+ .to_string();
+ let target = r"This is a link at *The link*".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_refs_with_three_space_indentation() {
+ let source = r"This is a [link][ref]
+ [ref]: The link"
+ .to_string();
+ let target = r"This is a link at *The link*".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ #[should_panic]
+ fn rejects_refs_with_four_space_indentation() {
+ let source = r"This is a [link][ref]
+ [ref]: The link"
+ .to_string();
+ let target = r"This is a link at *The link*".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn ignores_optional_inline_title() {
+ let source =
+ r###"This is a titled [link](http://example.com "My title")."###
+ .to_string();
+ let target =
+ r"This is a titled link at *http://example.com*.".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_title_with_puctuation() {
+ let source =
+ r###"[link](http://example.com "It's Title")"###.to_string();
+ let target = r"link at *http://example.com*".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_name_with_punctuation() {
+ let source = r###"[I'm here](there)"###.to_string();
+ let target = r###"I'm here at *there*"###.to_string();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn parses_name_with_utf8() {
+ let source = r###"[user’s forum](the user’s forum)"###.to_string();
+ let target = r###"user’s forum at *the user’s forum*"###.to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_reference_with_punctuation() {
+ let source = r###"[link][the ref-ref]
+[the ref-ref]:http://example.com/ref-ref"###
+ .to_string();
+ let target = r###"link at *http://example.com/ref-ref*"###.to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_reference_case_insensitively() {
+ let source = r"[link][Ref]
+[ref]: The reference"
+ .to_string();
+ let target = r"link at *The reference*".to_string();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn parses_link_as_reference_when_reference_is_empty() {
+ let source = r"[link as reference][]
+[link as reference]: the actual reference"
+ .to_string();
+ let target = r"link as reference at *the actual reference*".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn parses_link_without_reference_as_reference() {
+ let source = r"[link] is alone
+[link]: The contents"
+ .to_string();
+ let target = r"link at *The contents* is alone".to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ #[ignore]
+ fn parses_link_without_reference_as_reference_with_asterisks() {
+ let source = r"*[link]* is alone
+[link]: The contents"
+ .to_string();
+ let target = r"*link* at *The contents* is alone".to_string();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn ignores_links_in_pre_sections() {
+ let source = r###"```toml
+[package]
+name = "hello_cargo"
+version = "0.1.0"
+
+[dependencies]
+```
+"###
+ .to_string();
+ let target = source.clone();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn ignores_links_in_quoted_sections() {
+ let source = r###"do not change `[package]`."###.to_string();
+ let target = source.clone();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn ignores_links_in_quoted_sections_containing_newlines() {
+ let source = r"do not change `this [package]
+is still here` [link](ref)"
+ .to_string();
+ let target = r"do not change `this [package]
+is still here` link at *ref*"
+ .to_string();
+ assert_eq!(parse(source), target);
+ }
+
+ #[test]
+ fn ignores_links_in_pre_sections_while_still_handling_links() {
+ let source = r###"```toml
+[package]
+name = "hello_cargo"
+version = "0.1.0"
+
+[dependencies]
+```
+Another [link]
+more text
+[link]: http://gohere
+"###
+ .to_string();
+ let target = r###"```toml
+[package]
+name = "hello_cargo"
+version = "0.1.0"
+
+[dependencies]
+```
+Another link at *http://gohere*
+more text
+"###
+ .to_string();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn ignores_quotes_in_pre_sections() {
+ let source = r###"```bash
+$ cargo build
+ Compiling guessing_game v0.1.0 (file:///projects/guessing_game)
+src/main.rs:23:21: 23:35 error: mismatched types [E0308]
+src/main.rs:23 match guess.cmp(&secret_number) {
+ ^~~~~~~~~~~~~~
+src/main.rs:23:21: 23:35 help: run `rustc --explain E0308` to see a detailed explanation
+src/main.rs:23:21: 23:35 note: expected type `&std::string::String`
+src/main.rs:23:21: 23:35 note: found type `&_`
+error: aborting due to previous error
+Could not compile `guessing_game`.
+```
+"###
+ .to_string();
+ let target = source.clone();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn ignores_short_quotes() {
+ let source = r"to `1` at index `[0]` i".to_string();
+ let target = source.clone();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn ignores_pre_sections_with_final_quote() {
+ let source = r###"```bash
+$ cargo run
+ Compiling points v0.1.0 (file:///projects/points)
+error: the trait bound `Point: std::fmt::Display` is not satisfied [--explain E0277]
+ --> src/main.rs:8:29
+8 |> println!("Point 1: {}", p1);
+ |> ^^
+<std macros>:2:27: 2:58: note: in this expansion of format_args!
+<std macros>:3:1: 3:54: note: in this expansion of print! (defined in <std macros>)
+src/main.rs:8:5: 8:33: note: in this expansion of println! (defined in <std macros>)
+note: `Point` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string
+note: required by `std::fmt::Display::fmt`
+```
+`here` is another [link](the ref)
+"###.to_string();
+ let target = r###"```bash
+$ cargo run
+ Compiling points v0.1.0 (file:///projects/points)
+error: the trait bound `Point: std::fmt::Display` is not satisfied [--explain E0277]
+ --> src/main.rs:8:29
+8 |> println!("Point 1: {}", p1);
+ |> ^^
+<std macros>:2:27: 2:58: note: in this expansion of format_args!
+<std macros>:3:1: 3:54: note: in this expansion of print! (defined in <std macros>)
+src/main.rs:8:5: 8:33: note: in this expansion of println! (defined in <std macros>)
+note: `Point` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string
+note: required by `std::fmt::Display::fmt`
+```
+`here` is another link at *the ref*
+"###.to_string();
+ assert_eq!(parse(source), target);
+ }
+ #[test]
+ fn parses_adam_p_cheatsheet() {
+ let source = r###"[I'm an inline-style link](https://www.google.com)
+
+[I'm an inline-style link with title](https://www.google.com "Google's Homepage")
+
+[I'm a reference-style link][Arbitrary case-insensitive reference text]
+
+[I'm a relative reference to a repository file](../blob/master/LICENSE)
+
+[You can use numbers for reference-style link definitions][1]
+
+Or leave it empty and use the [link text itself][].
+
+URLs and URLs in angle brackets will automatically get turned into links.
+http://www.example.com or <http://www.example.com> and sometimes
+example.com (but not on Github, for example).
+
+Some text to show that the reference links can follow later.
+
+[arbitrary case-insensitive reference text]: https://www.mozilla.org
+[1]: http://slashdot.org
+[link text itself]: http://www.reddit.com"###
+ .to_string();
+
+ let target = r###"I'm an inline-style link at *https://www.google.com*
+
+I'm an inline-style link with title at *https://www.google.com*
+
+I'm a reference-style link at *https://www.mozilla.org*
+
+I'm a relative reference to a repository file at *../blob/master/LICENSE*
+
+You can use numbers for reference-style link definitions at *http://slashdot.org*
+
+Or leave it empty and use the link text itself at *http://www.reddit.com*.
+
+URLs and URLs in angle brackets will automatically get turned into links.
+http://www.example.com or <http://www.example.com> and sometimes
+example.com (but not on Github, for example).
+
+Some text to show that the reference links can follow later.
+"###
+ .to_string();
+ assert_eq!(parse(source), target);
+ }
+}
diff --git a/src/doc/book/tools/src/bin/release_listings.rs b/src/doc/book/tools/src/bin/release_listings.rs
new file mode 100644
index 000000000..c371d7b30
--- /dev/null
+++ b/src/doc/book/tools/src/bin/release_listings.rs
@@ -0,0 +1,159 @@
+#[macro_use]
+extern crate lazy_static;
+
+use regex::Regex;
+use std::error::Error;
+use std::fs;
+use std::fs::File;
+use std::io::prelude::*;
+use std::io::{BufReader, BufWriter};
+use std::path::{Path, PathBuf};
+
+fn main() -> Result<(), Box<dyn Error>> {
+ // Get all listings from the `listings` directory
+ let listings_dir = Path::new("listings");
+
+ // Put the results in the `tmp/listings` directory
+ let out_dir = Path::new("tmp/listings");
+
+ // Clear out any existing content in `tmp/listings`
+ if out_dir.is_dir() {
+ fs::remove_dir_all(out_dir)?;
+ }
+
+ // Create a new, empty `tmp/listings` directory
+ fs::create_dir(out_dir)?;
+
+ // For each chapter in the `listings` directory,
+ for chapter in fs::read_dir(listings_dir)? {
+ let chapter = chapter?;
+ let chapter_path = chapter.path();
+
+ let chapter_name = chapter_path
+ .file_name()
+ .expect("Chapter should've had a name");
+
+ // Create a corresponding chapter dir in `tmp/listings`
+ let output_chapter_path = out_dir.join(chapter_name);
+ fs::create_dir(&output_chapter_path)?;
+
+ // For each listing in the chapter directory,
+ for listing in fs::read_dir(chapter_path)? {
+ let listing = listing?;
+ let listing_path = listing.path();
+
+ let listing_name = listing_path
+ .file_name()
+ .expect("Listing should've had a name");
+
+ // Create a corresponding listing dir in the tmp chapter dir
+ let output_listing_dir = output_chapter_path.join(listing_name);
+ fs::create_dir(&output_listing_dir)?;
+
+ // Copy all the cleaned files in the listing to the tmp directory
+ copy_cleaned_listing_files(listing_path, output_listing_dir)?;
+ }
+ }
+
+ // Create a compressed archive of all the listings
+ let tarfile = File::create("tmp/listings.tar.gz")?;
+ let encoder =
+ flate2::write::GzEncoder::new(tarfile, flate2::Compression::default());
+ let mut archive = tar::Builder::new(encoder);
+ archive.append_dir_all("listings", "tmp/listings")?;
+
+ // Assure whoever is running this that the script exiting successfully, and remind them
+ // where the generated file ends up
+ println!("Release tarball of listings in tmp/listings.tar.gz");
+
+ Ok(())
+}
+
+// Cleaned listings will not contain:
+//
+// - `target` directories
+// - `output.txt` files used to display output in the book
+// - `rustfmt-ignore` files used to signal to update-rustc.sh the listing shouldn't be formatted
+// - anchor comments or snip comments
+// - empty `main` functions in `lib.rs` files used to trick rustdoc
+fn copy_cleaned_listing_files(
+ from: PathBuf,
+ to: PathBuf,
+) -> Result<(), Box<dyn Error>> {
+ for item in fs::read_dir(from)? {
+ let item = item?;
+ let item_path = item.path();
+
+ let item_name =
+ item_path.file_name().expect("Item should've had a name");
+ let output_item = to.join(item_name);
+
+ if item_path.is_dir() {
+ // Don't copy `target` directories
+ if item_name != "target" {
+ fs::create_dir(&output_item)?;
+ copy_cleaned_listing_files(item_path, output_item)?;
+ }
+ } else {
+ // Don't copy output files or files that tell update-rustc.sh not to format
+ if item_name != "output.txt" && item_name != "rustfmt-ignore" {
+ let item_extension = item_path.extension();
+ if item_extension.is_some() && item_extension.unwrap() == "rs" {
+ copy_cleaned_rust_file(
+ item_name,
+ &item_path,
+ &output_item,
+ )?;
+ } else {
+ // Copy any non-Rust files without modification
+ fs::copy(item_path, output_item)?;
+ }
+ }
+ }
+ }
+
+ Ok(())
+}
+
+lazy_static! {
+ static ref ANCHOR_OR_SNIP_COMMENTS: Regex = Regex::new(
+ r"(?x)
+ //\s*ANCHOR:\s*[\w_-]+ # Remove all anchor comments
+ |
+ //\s*ANCHOR_END:\s*[\w_-]+ # Remove all anchor ending comments
+ |
+ //\s*--snip-- # Remove all snip comments
+ "
+ )
+ .unwrap();
+}
+
+lazy_static! {
+ static ref EMPTY_MAIN: Regex = Regex::new(r"fn main\(\) \{}").unwrap();
+}
+
+// Cleaned Rust files will not contain:
+//
+// - anchor comments or snip comments
+// - empty `main` functions in `lib.rs` files used to trick rustdoc
+fn copy_cleaned_rust_file(
+ item_name: &std::ffi::OsStr,
+ from: &PathBuf,
+ to: &PathBuf,
+) -> Result<(), Box<dyn Error>> {
+ let from_buf = BufReader::new(File::open(from)?);
+ let mut to_buf = BufWriter::new(File::create(to)?);
+
+ for line in from_buf.lines() {
+ let line = line?;
+ if !ANCHOR_OR_SNIP_COMMENTS.is_match(&line)
+ && (item_name != "lib.rs" || !EMPTY_MAIN.is_match(&line))
+ {
+ writeln!(&mut to_buf, "{}", line)?;
+ }
+ }
+
+ to_buf.flush()?;
+
+ Ok(())
+}
diff --git a/src/doc/book/tools/src/bin/remove_hidden_lines.rs b/src/doc/book/tools/src/bin/remove_hidden_lines.rs
new file mode 100644
index 000000000..dc3c59357
--- /dev/null
+++ b/src/doc/book/tools/src/bin/remove_hidden_lines.rs
@@ -0,0 +1,83 @@
+use std::io;
+use std::io::prelude::*;
+
+fn main() {
+ write_md(remove_hidden_lines(&read_md()));
+}
+
+fn read_md() -> String {
+ let mut buffer = String::new();
+ match io::stdin().read_to_string(&mut buffer) {
+ Ok(_) => buffer,
+ Err(error) => panic!("{}", error),
+ }
+}
+
+fn write_md(output: String) {
+ print!("{}", output);
+}
+
+fn remove_hidden_lines(input: &str) -> String {
+ let mut resulting_lines = vec![];
+ let mut within_codeblock = false;
+
+ for line in input.lines() {
+ if line.starts_with("```") {
+ within_codeblock = !within_codeblock;
+ }
+
+ if !within_codeblock || (!line.starts_with("# ") && line != "#") {
+ resulting_lines.push(line)
+ }
+ }
+
+ resulting_lines.join("\n")
+}
+
+#[cfg(test)]
+mod tests {
+ use crate::remove_hidden_lines;
+
+ #[test]
+ fn hidden_line_in_code_block_is_removed() {
+ let input = r#"
+In this listing:
+
+```
+fn main() {
+# secret
+}
+```
+
+you can see that...
+ "#;
+ let output = remove_hidden_lines(input);
+
+ let desired_output = r#"
+In this listing:
+
+```
+fn main() {
+}
+```
+
+you can see that...
+ "#;
+
+ assert_eq!(output, desired_output);
+ }
+
+ #[test]
+ fn headings_arent_removed() {
+ let input = r#"
+# Heading 1
+ "#;
+ let output = remove_hidden_lines(input);
+
+ let desired_output = r#"
+# Heading 1
+ "#;
+
+ assert_eq!(output, desired_output);
+ }
+}
diff --git a/src/doc/book/tools/src/bin/remove_links.rs b/src/doc/book/tools/src/bin/remove_links.rs
new file mode 100644
index 000000000..b3f78d70a
--- /dev/null
+++ b/src/doc/book/tools/src/bin/remove_links.rs
@@ -0,0 +1,45 @@
+extern crate regex;
+
+use regex::{Captures, Regex};
+use std::collections::HashSet;
+use std::io;
+use std::io::Read;
+
+fn main() {
+ let mut buffer = String::new();
+ if let Err(e) = io::stdin().read_to_string(&mut buffer) {
+ panic!("{}", e);
+ }
+
+ let mut refs = HashSet::new();
+
+ // Capture all links and link references.
+ let regex =
+ r"\[([^\]]+)\](?:(?:\[([^\]]+)\])|(?:\([^\)]+\)))(?i)<!--\signore\s-->";
+ let link_regex = Regex::new(regex).unwrap();
+ let first_pass = link_regex.replace_all(&buffer, |caps: &Captures<'_>| {
+ // Save the link reference we want to delete.
+ if let Some(reference) = caps.get(2) {
+ refs.insert(reference.as_str().to_string());
+ }
+
+ // Put the link title back.
+ caps.get(1).unwrap().as_str().to_string()
+ });
+
+ // Search for the references we need to delete.
+ let ref_regex = Regex::new(r"(?m)^\[([^\]]+)\]:\s.*\n").unwrap();
+ let out = ref_regex.replace_all(&first_pass, |caps: &Captures<'_>| {
+ let capture = caps.get(1).unwrap().to_owned();
+
+ // Check if we've marked this reference for deletion ...
+ if refs.contains(capture.as_str()) {
+ return "".to_string();
+ }
+
+ // ... else we put back everything we captured.
+ caps.get(0).unwrap().as_str().to_string()
+ });
+
+ print!("{}", out);
+}
diff --git a/src/doc/book/tools/src/bin/remove_markup.rs b/src/doc/book/tools/src/bin/remove_markup.rs
new file mode 100644
index 000000000..c42e588e7
--- /dev/null
+++ b/src/doc/book/tools/src/bin/remove_markup.rs
@@ -0,0 +1,53 @@
+extern crate regex;
+
+use regex::{Captures, Regex};
+use std::io;
+use std::io::Read;
+
+fn main() {
+ write_md(remove_markup(read_md()));
+}
+
+fn read_md() -> String {
+ let mut buffer = String::new();
+ match io::stdin().read_to_string(&mut buffer) {
+ Ok(_) => buffer,
+ Err(error) => panic!("{}", error),
+ }
+}
+
+fn write_md(output: String) {
+ print!("{}", output);
+}
+
+fn remove_markup(input: String) -> String {
+ let filename_regex =
+ Regex::new(r#"\A<span class="filename">(.*)</span>\z"#).unwrap();
+ // Captions sometimes take up multiple lines.
+ let caption_start_regex =
+ Regex::new(r#"\A<span class="caption">(.*)\z"#).unwrap();
+ let caption_end_regex = Regex::new(r#"(.*)</span>\z"#).unwrap();
+ let regexen = vec![filename_regex, caption_start_regex, caption_end_regex];
+
+ let lines: Vec<_> = input
+ .lines()
+ .flat_map(|line| {
+ // Remove our syntax highlighting and rustdoc markers.
+ if line.starts_with("```") {
+ Some(String::from("```"))
+ // Remove the span around filenames and captions.
+ } else {
+ let result =
+ regexen.iter().fold(line.to_string(), |result, regex| {
+ regex
+ .replace_all(&result, |caps: &Captures<'_>| {
+ caps.get(1).unwrap().as_str().to_string()
+ })
+ .to_string()
+ });
+ Some(result)
+ }
+ })
+ .collect();
+ lines.join("\n")
+}
diff --git a/src/doc/book/tools/update-editions.sh b/src/doc/book/tools/update-editions.sh
new file mode 100755
index 000000000..bd52bc9c8
--- /dev/null
+++ b/src/doc/book/tools/update-editions.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+set -eu
+
+OLD_EDITION=2018
+NEW_EDITION=2021
+
+find listings/** -name "Cargo.toml" -exec sed -i '' "s/edition = \"$OLD_EDITION\"/edition = \"$NEW_EDITION\"/g" '{}' \;
diff --git a/src/doc/book/tools/update-rustc.sh b/src/doc/book/tools/update-rustc.sh
new file mode 100755
index 000000000..45a0ce4f6
--- /dev/null
+++ b/src/doc/book/tools/update-rustc.sh
@@ -0,0 +1,93 @@
+#!/bin/bash
+
+set -eu
+
+# Build the book before making any changes for comparison of the output.
+echo 'Building book into tmp/book-before before updating...'
+mdbook build -d tmp/book-before
+
+# Rustfmt all listings
+echo 'Formatting all listings...'
+find -s listings -name Cargo.toml -print0 | while IFS= read -r -d '' f; do
+ dir_to_fmt=$(dirname "$f")
+
+ # There are a handful of listings we don't want to rustfmt and skipping
+ # doesn't work; those will have a file in their directory that explains why.
+ if [ ! -f "${dir_to_fmt}/rustfmt-ignore" ]; then
+ cd "$dir_to_fmt"
+ cargo fmt --all && true
+ cd - > /dev/null
+ fi
+done
+
+# Get listings without anchor comments in tmp by compiling a release listings
+# artifact
+echo 'Generate listings without anchor comments...'
+cargo run --bin release_listings
+
+root_dir=$(pwd)
+
+echo 'Regenerating output...'
+# For any listings where we show the output,
+find -s listings -name output.txt -print0 | while IFS= read -r -d '' f; do
+ build_directory=$(dirname "$f")
+ full_build_directory="${root_dir}/${build_directory}"
+ full_output_path="${full_build_directory}/output.txt"
+ tmp_build_directory="tmp/${build_directory}"
+
+ cd "$tmp_build_directory"
+
+ # Save the previous compile time; we're going to keep it to minimize diff
+ # churn
+ compile_time=$(sed -E -ne 's/.*Finished (dev|test) \[unoptimized \+ debuginfo] target\(s\) in ([0-9.]*).*/\2/p' "${full_output_path}")
+
+ # Save the hash from the first test binary; we're going to keep it to
+ # minimize diff churn
+ test_binary_hash=$(sed -E -ne 's@.*Running [^[:space:]]+( [^[:space:]\(\)]+)? \(target/debug/deps/[^-]*-([^\s]*)\)@\2@p' "${full_output_path}" | head -n 1)
+
+ # Act like this is the first time this listing has been built
+ cargo clean
+
+ # Run the command in the existing output file
+ cargo_command=$(sed -ne 's/$ \(.*\)/\1/p' "${full_output_path}")
+
+ # Clear the output file of everything except the command
+ echo "$ ${cargo_command}" > "${full_output_path}"
+
+ # Regenerate the output and append to the output file. Turn some warnings
+ # off to reduce output noise, and use one test thread to get consistent
+ # ordering of tests in the output when the command is `cargo test`.
+ RUSTFLAGS="-A unused_variables -A dead_code" RUST_TEST_THREADS=1 $cargo_command >> "${full_output_path}" 2>&1 || true
+
+ # Set the project file path to the projects directory plus the crate name
+ # instead of a path to the computer of whoever is running this
+ sed -i '' -E -e 's@(Compiling|Checking) ([^\)]*) v0.1.0 (.*)@\1 \2 v0.1.0 (file:///projects/\2)@' "${full_output_path}"
+
+ # Restore the previous compile time, if there is one
+ if [ -n "${compile_time}" ]; then
+ sed -i '' -E -e "s/Finished (dev|test) \[unoptimized \+ debuginfo] target\(s\) in [0-9.]*/Finished \1 [unoptimized + debuginfo] target(s) in ${compile_time}/" "${full_output_path}"
+ fi
+
+ # Restore the previous test binary hash, if there is one
+ if [ -n "${test_binary_hash}" ]; then
+ replacement='s@Running ([^[:space:]]+)( [^[:space:]\(\)]+)? \(target/debug/deps/([^-]*)-([^\s]*)\)@Running \1\2 (target/debug/deps/\3-'
+ replacement+="${test_binary_hash}"
+ replacement+=')@g'
+ sed -i '' -E -e "${replacement}" "${full_output_path}"
+ fi
+
+ # Clean again
+ cargo clean
+
+ cd - > /dev/null
+done
+
+# Build the book after making all the changes
+echo 'Building book into tmp/book-after after updating...'
+mdbook build -d tmp/book-after
+
+# Run the megadiff script that removes all files that are the same, leaving only files to audit
+echo 'Removing tmp files that had no changes from the update...'
+./tools/megadiff.sh
+
+echo 'Done.'
diff --git a/src/doc/complement-design-faq.md b/src/doc/complement-design-faq.md
new file mode 100644
index 000000000..f4898dc67
--- /dev/null
+++ b/src/doc/complement-design-faq.md
@@ -0,0 +1,3 @@
+% The Rust Design FAQ
+
+This content has moved to [the website](https://www.rust-lang.org/).
diff --git a/src/doc/complement-lang-faq.md b/src/doc/complement-lang-faq.md
new file mode 100644
index 000000000..920c6edc3
--- /dev/null
+++ b/src/doc/complement-lang-faq.md
@@ -0,0 +1,3 @@
+% The Rust Language FAQ
+
+This content has moved to [the website](https://www.rust-lang.org/).
diff --git a/src/doc/complement-project-faq.md b/src/doc/complement-project-faq.md
new file mode 100644
index 000000000..b44de8e2c
--- /dev/null
+++ b/src/doc/complement-project-faq.md
@@ -0,0 +1,3 @@
+% The Rust Project FAQ
+
+This content has moved to [the website](https://www.rust-lang.org/).
diff --git a/src/doc/edition-guide/.github/workflows/main.yml b/src/doc/edition-guide/.github/workflows/main.yml
new file mode 100644
index 000000000..27a9336aa
--- /dev/null
+++ b/src/doc/edition-guide/.github/workflows/main.yml
@@ -0,0 +1,33 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Update rustup
+ run: rustup self update
+ - name: Install Rust
+ run: |
+ rustup set profile minimal
+ rustup toolchain install nightly -c rust-docs
+ rustup default nightly
+ - name: Install mdbook
+ run: |
+ mkdir bin
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.7/mdbook-v0.4.7-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
+ echo "$(pwd)/bin" >> $GITHUB_PATH
+ - name: Report versions
+ run: |
+ rustup --version
+ rustc -Vv
+ mdbook --version
+ - name: Run tests
+ run: mdbook test
+ - name: Check for broken links
+ run: |
+ curl -sSLo linkcheck.sh \
+ https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+ sh linkcheck.sh --all edition-guide
diff --git a/src/doc/edition-guide/LICENSE-APACHE b/src/doc/edition-guide/LICENSE-APACHE
new file mode 100644
index 000000000..f8e5e5ea0
--- /dev/null
+++ b/src/doc/edition-guide/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License. \ No newline at end of file
diff --git a/src/doc/edition-guide/LICENSE-MIT b/src/doc/edition-guide/LICENSE-MIT
new file mode 100644
index 000000000..1351ec070
--- /dev/null
+++ b/src/doc/edition-guide/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2018 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/src/doc/edition-guide/README.md b/src/doc/edition-guide/README.md
new file mode 100644
index 000000000..559498257
--- /dev/null
+++ b/src/doc/edition-guide/README.md
@@ -0,0 +1,44 @@
+# The Rust Edition Guide
+
+This book explains the concept of "editions", major new eras in [Rust]'s
+development. You can [read the book
+online](https://doc.rust-lang.org/nightly/edition-guide/).
+
+[Rust]: https://www.rust-lang.org/
+
+## License
+
+The Edition Guide is dual licensed under `MIT`/`Apache2`, just like Rust itself.
+See the `LICENSE-*` files in this repository for more details.
+
+## Building locally
+
+You can also build the book and read it locally if you'd like.
+
+### Requirements
+
+Building the book requires [mdBook] 0.4. To get it:
+
+[mdBook]: https://github.com/rust-lang/mdBook
+
+```bash
+$ cargo install mdbook
+```
+
+### Building
+
+The most straight-forward way to build and view the book locally is to use the following command:
+```bash
+$ mdbook serve --open
+```
+
+This builds the HTML version of the book, starts a webserver at
+http://localhost:3000, and opens your default web browser. It will also
+automatically rebuild the book whenever the source changes, and the page
+should automatically reload.
+
+To run the tests:
+
+```bash
+$ mdbook test
+```
diff --git a/src/doc/edition-guide/book.toml b/src/doc/edition-guide/book.toml
new file mode 100644
index 000000000..8d8b26322
--- /dev/null
+++ b/src/doc/edition-guide/book.toml
@@ -0,0 +1,96 @@
+[book]
+authors = ["The Rust Project Developers"]
+multilingual = false
+src = "src"
+title = "The Edition Guide"
+
+[output.html]
+git-repository-url = "https://github.com/rust-lang/edition-guide"
+
+[output.html.redirect]
+"/rust-2018/edition-changes.html" = "index.html"
+"/rust-2018/module-system/index.html" = "../path-changes.html"
+"/rust-2018/module-system/raw-identifiers.html" = "../../../rust-by-example/compatibility/raw_identifiers.html"
+"/rust-2018/module-system/path-clarity.html" = "../path-changes.html"
+"/rust-2018/module-system/more-visibility-modifiers.html" = "../../../reference/visibility-and-privacy.html"
+"/rust-2018/module-system/nested-imports-with-use.html" = "../../../rust-by-example/mod/use.html"
+"/rust-2018/error-handling-and-panics/index.html" = "../../../book/ch09-00-error-handling.html"
+"/rust-2018/error-handling-and-panics/the-question-mark-operator-for-easier-error-handling.html" = "../../../book/ch09-02-recoverable-errors-with-result.html"
+"/rust-2018/error-handling-and-panics/question-mark-in-main-and-tests.html" = "../../../rust-by-example/error/result.html#using-result-in-main"
+"/rust-2018/error-handling-and-panics/controlling-panics-with-std-panic.html" = "https://blog.rust-lang.org/2016/05/26/Rust-1.9.html#controlled-unwinding"
+"/rust-2018/error-handling-and-panics/aborting-on-panic.html" = "../../../book/ch09-01-unrecoverable-errors-with-panic.html"
+"/rust-2018/control-flow/index.html" = "../../../rust-by-example/flow_control.html"
+"/rust-2018/control-flow/loops-can-break-with-a-value.html" = "../../../rust-by-example/flow_control/loop/return.html"
+"/rust-2018/control-flow/async-await-for-easier-concurrency.html" = "https://rust-lang.github.io/async-book/"
+"/rust-2018/trait-system/index.html" = "../index.html"
+"/rust-2018/trait-system/impl-trait-for-returning-complex-types-with-ease.html" = "https://blog.rust-lang.org/2018/05/10/Rust-1.26.html#impl-trait"
+"/rust-2018/trait-system/dyn-trait-for-trait-objects.html" = "https://blog.rust-lang.org/2018/06/21/Rust-1.27.html#dyn-trait"
+"/rust-2018/trait-system/more-container-types-support-trait-objects.html" = "https://github.com/rust-lang/rfcs/blob/master/text/0982-dst-coercion.md"
+"/rust-2018/trait-system/associated-constants.html" = "../../../reference/items/associated-items.html#associated-constants"
+"/rust-2018/trait-system/no-anon-params.html" = "../trait-fn-parameters.html"
+"/rust-2018/slice-patterns.html" = "https://blog.rust-lang.org/2018/05/10/Rust-1.26.html#basic-slice-patterns"
+"/rust-2018/ownership-and-lifetimes/index.html" = "../../../book/ch04-00-understanding-ownership.html"
+"/rust-2018/ownership-and-lifetimes/non-lexical-lifetimes.html" = "https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html#non-lexical-lifetimes"
+"/rust-2018/ownership-and-lifetimes/default-match-bindings.html" = "https://blog.rust-lang.org/2018/05/10/Rust-1.26.html#nicer-match-bindings"
+"/rust-2018/ownership-and-lifetimes/the-anonymous-lifetime.html" = "https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html#more-lifetime-elision-rules"
+"/rust-2018/ownership-and-lifetimes/lifetime-elision-in-impl.html" = "https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html#more-lifetime-elision-rules"
+"/rust-2018/ownership-and-lifetimes/inference-in-structs.html" = "https://github.com/rust-lang/rfcs/blob/master/text/2093-infer-outlives.md"
+"/rust-2018/ownership-and-lifetimes/simpler-lifetimes-in-static-and-const.html" = "../../../reference/lifetime-elision.html#static-lifetime-elision"
+"/rust-2018/data-types/index.html" = "../index.html"
+"/rust-2018/data-types/field-init-shorthand.html" = "../../../reference/expressions/struct-expr.html#struct-field-init-shorthand"
+"/rust-2018/data-types/inclusive-ranges.html" = "https://blog.rust-lang.org/2018/05/10/Rust-1.26.html#inclusive-ranges-with-"
+"/rust-2018/data-types/128-bit-integers.html" = "https://blog.rust-lang.org/2018/05/10/Rust-1.26.html#128-bit-integers"
+"/rust-2018/data-types/operator-equals-are-now-implementable.html" = "../../../std/ops/index.html"
+"/rust-2018/data-types/union-for-an-unsafe-form-of-enum.html" = "../../../reference/items/unions.html"
+"/rust-2018/data-types/choosing-alignment-with-the-repr-attribute.html" = "../../../reference/type-layout.html#representations"
+"/rust-2018/simd-for-faster-computing.html" = "https://blog.rust-lang.org/2018/06/21/Rust-1.27.html#simd"
+"/rust-2018/macros/index.html" = "../../../book/ch19-06-macros.html"
+"/rust-2018/macros/custom-derive.html" = "../../../book/ch19-06-macros.html#how-to-write-a-custom-derive-macro"
+"/rust-2018/macros/macro-changes.html" = "../../../book/ch19-06-macros.html"
+"/rust-2018/macros/at-most-once.html" = "../../../reference/macros-by-example.html#repetitions"
+"/rust-2018/the-compiler/index.html" = "../index.html"
+"/rust-2018/the-compiler/improved-error-messages.html" = "https://blog.rust-lang.org/2016/09/29/Rust-1.12.html#overhauled-error-messages"
+"/rust-2018/the-compiler/incremental-compilation-for-faster-compiles.html" = "https://blog.rust-lang.org/2018/02/15/Rust-1.24.html#incremental-compilation"
+"/rust-2018/the-compiler/an-attribute-for-deprecation.html" = "../../../reference/attributes/diagnostics.html#the-deprecated-attribute"
+"/rust-2018/rustup-for-managing-rust-versions.html" = "https://rust-lang.github.io/rustup/"
+"/rust-2018/cargo-and-crates-io/index.html" = "../../../cargo/index.html"
+"/rust-2018/cargo-and-crates-io/cargo-check-for-faster-checking.html" = "../../../cargo/commands/cargo-check.html"
+"/rust-2018/cargo-and-crates-io/cargo-install-for-easy-installation-of-tools.html" = "../../../cargo/commands/cargo-install.html"
+"/rust-2018/cargo-and-crates-io/cargo-new-defaults-to-a-binary-project.html" = "https://blog.rust-lang.org/2018/03/29/Rust-1.25.html#cargo-features"
+"/rust-2018/cargo-and-crates-io/cargo-rustc-for-passing-arbitrary-flags-to-rustc.html" = "../../../cargo/commands/cargo-rustc.html"
+"/rust-2018/cargo-and-crates-io/cargo-workspaces-for-multi-package-projects.html" = "../../../cargo/reference/workspaces.html"
+"/rust-2018/cargo-and-crates-io/multi-file-examples.html" = "../../../cargo/guide/project-layout.html"
+"/rust-2018/cargo-and-crates-io/replacing-dependencies-with-patch.html" = "../../../cargo/reference/overriding-dependencies.html#the-patch-section"
+"/rust-2018/cargo-and-crates-io/cargo-can-use-a-local-registry-replacement.html" = "../../../cargo/reference/source-replacement.html"
+"/rust-2018/cargo-and-crates-io/crates-io-disallows-wildcard-dependencies.html" = "https://blog.rust-lang.org/2016/01/21/Rust-1.6.html#cratesio-disallows-wildcards"
+"/rust-2018/documentation/index.html" = "../../../index.html"
+"/rust-2018/documentation/new-editions-of-the-book.html" = "../../../book/index.html"
+"/rust-2018/documentation/the-rust-bookshelf.html" = "../../../index.html"
+"/rust-2018/documentation/the-rustonomicon.html" = "../../../nomicon/index.html"
+"/rust-2018/documentation/std-os-has-documentation-for-all-platforms.html" = "../../../std/os/index.html"
+"/rust-2018/rustdoc/index.html" = "../../../rustdoc/index.html"
+"/rust-2018/rustdoc/documentation-tests-can-now-compile-fail.html" = "../../../rustdoc/documentation-tests.html#attributes"
+"/rust-2018/rustdoc/rustdoc-uses-commonmark.html" = "../../../rustdoc/how-to-write-documentation.html#markdown"
+"/rust-2018/platform-and-target-support/index.html" = "../../../rustc/targets/index.html"
+"/rust-2018/platform-and-target-support/libcore-for-low-level-rust.html" = "../../../core/index.html"
+"/rust-2018/platform-and-target-support/webassembly-support.html" = "https://rustwasm.github.io/docs/book/"
+"/rust-2018/platform-and-target-support/global-allocators.html" = "https://blog.rust-lang.org/2018/08/02/Rust-1.28.html#global-allocators"
+"/rust-2018/platform-and-target-support/msvc-toolchain-support.html" = "../../../rustc/platform-support.html"
+"/rust-2018/platform-and-target-support/musl-support-for-fully-static-binaries.html" = "../../../rustc/platform-support.html"
+"/rust-2018/platform-and-target-support/cdylib-crates-for-c-interoperability.html" = "https://github.com/rust-lang/rfcs/blob/master/text/1510-cdylib.md"
+"/rust-next/index.html" = "../rust-2021/index.html"
+"/rust-next/edition-changes.html" = "../rust-2021/index.html"
+"/rust-next/dbg-macro.html" = "../../std/macro.dbg.html"
+"/rust-next/no-jemalloc.html" = "https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html#jemalloc-is-removed-by-default"
+"/rust-next/uniform-paths.html" = "https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html#final-module-improvements"
+"/rust-next/literal-macro-matcher.html" = "https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html#macro-improvements"
+"/rust-next/qustion-mark-operator-in-macros.html" = "https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html#macro-improvements"
+"/rust-next/const-fn.html" = "../../reference/const_eval.html"
+"/rust-next/pin.html" = "../../std/pin/index.html"
+"/rust-next/no-more-fnbox.html" = "https://blog.rust-lang.org/2019/05/23/Rust-1.35.0.html#fn-closure-traits-implemented-for-boxdyn-fn"
+"/rust-next/alternative-cargo-registries.html" = "https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html#alternative-cargo-registries"
+"/rust-next/tryfrom-and-tryinto.html" = "https://blog.rust-lang.org/2019/04/11/Rust-1.34.0.html#tryfrom-and-tryinto"
+"/rust-next/future.html" = "../../std/future/trait.Future.html"
+"/rust-next/alloc.html" = "https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html#the-alloc-crate-is-stable"
+"/rust-next/maybe-uninit.html" = "https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html#maybeuninitt-instead-of-memuninitialized"
+"/rust-next/cargo-vendor.html" = "../../cargo/commands/cargo-vendor.html"
diff --git a/src/doc/edition-guide/src/SUMMARY.md b/src/doc/edition-guide/src/SUMMARY.md
new file mode 100644
index 000000000..dac77913b
--- /dev/null
+++ b/src/doc/edition-guide/src/SUMMARY.md
@@ -0,0 +1,35 @@
+# The Edition Guide
+
+[Introduction](introduction.md)
+
+## What are editions?
+
+- [What are editions?](editions/index.md)
+ - [Creating a new project](editions/creating-a-new-project.md)
+ - [Transitioning an existing project to a new edition](editions/transitioning-an-existing-project-to-a-new-edition.md)
+ - [Advanced migrations](editions/advanced-migrations.md)
+
+## Rust 2015
+
+- [Rust 2015](rust-2015/index.md)
+
+## Rust 2018
+
+- [Rust 2018](rust-2018/index.md)
+ - [Path and module system changes](rust-2018/path-changes.md)
+ - [Anonymous trait function parameters deprecated](rust-2018/trait-fn-parameters.md)
+ - [New keywords](rust-2018/new-keywords.md)
+ - [Method dispatch for raw pointers to inference variables](rust-2018/tyvar-behind-raw-pointer.md)
+ - [Cargo changes](rust-2018/cargo.md)
+
+## Rust 2021
+
+- [Rust 2021](rust-2021/index.md)
+ - [Additions to the prelude](rust-2021/prelude.md)
+ - [Default Cargo feature resolver](rust-2021/default-cargo-resolver.md)
+ - [IntoIterator for arrays](rust-2021/IntoIterator-for-arrays.md)
+ - [Disjoint capture in closures](rust-2021/disjoint-capture-in-closures.md)
+ - [Panic macro consistency](rust-2021/panic-macro-consistency.md)
+ - [Reserving syntax](rust-2021/reserving-syntax.md)
+ - [Warnings promoted to errors](rust-2021/warnings-promoted-to-error.md)
+ - [Or patterns in macro-rules](rust-2021/or-patterns-macro-rules.md)
diff --git a/src/doc/edition-guide/src/editions/advanced-migrations.md b/src/doc/edition-guide/src/editions/advanced-migrations.md
new file mode 100644
index 000000000..b804ae644
--- /dev/null
+++ b/src/doc/edition-guide/src/editions/advanced-migrations.md
@@ -0,0 +1,210 @@
+# Advanced migration strategies
+
+## How migrations work
+
+[`cargo fix --edition`][`cargo fix`] works by running the equivalent of [`cargo check`] on your project with special [lints] enabled which will detect code that may not compile in the next edition.
+These lints include instructions on how to modify the code to make it compatible on both the current and the next edition.
+`cargo fix` applies these changes to the source code, and then runs `cargo check` again to verify that the fixes work.
+If the fixes fail, then it will back out the changes and display a warning.
+
+Changing the code to be simultaneously compatible with both the current and next edition makes it easier to incrementally migrate the code.
+If the automated migration does not completely succeed, or requires manual help, you can iterate while staying on the original edition before changing `Cargo.toml` to use the next edition.
+
+The lints that `cargo fix --edition` apply are part of a [lint group].
+For example, when migrating from 2018 to 2021, Cargo uses the `rust-2021-compatibility` group of lints to fix the code.
+Check the [Partial migration](#partial-migration-with-broken-code) section below for tips on using individual lints to help with migration.
+
+`cargo fix` may run `cargo check` multiple times.
+For example, after applying one set of fixes, this may trigger new warnings which require further fixes.
+Cargo repeats this until no new warnings are generated.
+
+## Migrating multiple configurations
+
+`cargo fix` can only work with a single configuration at a time.
+If you use [Cargo features] or [conditional compilation], then you may need to run `cargo fix` multiple times with different flags.
+
+For example, if you have code that uses `#[cfg]` attributes to include different code for different platforms, you may need to run `cargo fix` with the `--target` option to fix for different targets.
+This may require moving your code between machines if you don't have cross-compiling available.
+
+Similarly, if you have conditions on Cargo features, like `#[cfg(feature = "my-optional-thing")]`, it is recommended to use the `--all-features` flag to allow `cargo fix` to migrate all the code behind those feature gates.
+If you want to migrate feature code individually, you can use the `--features` flag to migrate one at a time.
+
+## Migrating a large project or workspace
+
+You can migrate a large project incrementally to make the process easier if you run into problems.
+
+In a [Cargo workspace], each package defines its own edition, so the process naturally involves migrating one package at a time.
+
+Within a [Cargo package], you can either migrate the entire package at once, or migrate individual [Cargo targets] one at a time.
+For example, if you have multiple binaries, tests, and examples, you can use specific target selection flags with `cargo fix --edition` to migrate just that one target.
+By default, `cargo fix` uses `--all-targets`.
+
+For even more advanced cases, you can specify the edition for each individual target in `Cargo.toml` like this:
+
+```toml
+[[bin]]
+name = "my-binary"
+edition = "2018"
+```
+
+This usually should not be required, but is an option if you have a lot of targets and are having difficulty migrating them all together.
+
+## Partial migration with broken code
+
+Sometimes the fixes suggested by the compiler may fail to work.
+When this happens, Cargo will report a warning indicating what happened and what the error was.
+However, by default it will automatically back out the changes it made.
+It can be helpful to keep the code in the broken state and manually resolve the issue.
+Some of the fixes may have been correct, and the broken fix maybe be *mostly* correct, but just need minor tweaking.
+
+In this situation, use the `--broken-code` option with `cargo fix` to tell Cargo not to back out the changes.
+Then, you can go manually inspect the error and investigate what is needed to fix it.
+
+Another option to incrementally migrate a project is to apply individual fixes separately, one at a time.
+You can do this by adding the individual lints as warnings, and then either running `cargo fix` (without the `--edition` flag) or using your editor or IDE to apply its suggestions if it supports "Quick Fixes".
+
+For example, the 2018 edition uses the [`keyword-idents`] lint to fix any conflicting keywords.
+You can add `#![warn(keyword_idents)]` to the top of each crate (like at the top of `src/lib.rs` or `src/main.rs`).
+Then, running `cargo fix` will apply just the suggestions for that lint.
+
+You can see the list of lints enabled for each edition in the [lint group] page, or run the `rustc -Whelp` command.
+
+## Migrating macros
+
+Some macros may require manual work to fix them for the next edition.
+For example, `cargo fix --edition` may not be able to automatically fix a macro that generates syntax that does not work in the next edition.
+
+This may be a problem for both [proc macros] and `macro_rules`-style macros.
+`macro_rules` macros can sometimes be automatically updated if the macro is used within the same crate, but there are several situations where it cannot.
+Proc macros in general cannot be automatically fixed at all.
+
+For example, if we migrate a crate containing this (contrived) macro `foo` from 2015 to 2018, `foo` would not be automatically fixed.
+
+```rust
+#[macro_export]
+macro_rules! foo {
+ () => {
+ let dyn = 1;
+ println!("it is {}", dyn);
+ };
+}
+```
+
+When this macro is defined in a 2015 crate, it can be used from a crate of any other edition due to macro hygiene (discussed below).
+In 2015, `dyn` is a normal identifier and can be used without restriction.
+
+However, in 2018, `dyn` is no longer a valid identifier.
+When using `cargo fix --edition` to migrate to 2018, Cargo won't display any warnings or errors at all.
+However, `foo` won't work when called from any crate.
+
+If you have macros, you are encouraged to make sure you have tests that fully cover the macro's syntax.
+You may also want to test the macros by importing and using them in crates from multiple editions, just to ensure it works correctly everywhere.
+If you run into issues, you'll need to read through the chapters of this guide to understand how the code can be changed to work across all editions.
+
+### Macro hygiene
+
+Macros use a system called "edition hygiene" where the tokens within a macro are marked with which edition they come from.
+This allows external macros to be called from crates of varying editions without needing to worry about which edition it is called from.
+
+Let's take a closer look at the example above that defines a `macro_rules` macro using `dyn` as an identifier.
+If that macro was defined in a crate using the 2015 edition, then that macro works fine, even if it were called from a 2018 crate where `dyn` is a keyword and that would normally be a syntax error.
+The `let dyn = 1;` tokens are marked as being from 2015, and the compiler will remember that wherever that code gets expanded.
+The parser looks at the edition of the tokens to know how to interpret it.
+
+The problem arises when changing the edition to 2018 in the crate where it is defined.
+Now, those tokens are tagged with the 2018 edition, and those will fail to parse.
+However, since we never called the macro from our crate, `cargo fix --edition` never had a chance to inspect the macro and fix it.
+
+<!-- TODO: hopefully someday, the reference will have chapters on how expansion works, and this can link there for actual details. -->
+
+## Documentation tests
+
+At this time, `cargo fix` is not able to update [documentation tests].
+After updating the edition in `Cargo.toml`, you should run `cargo test` to ensure everything still passes.
+If your documentation tests use syntax that is not supported in the new edition, you will need to update them manually.
+
+In rare cases, you can manually set the edition for each test.
+For example, you can use the [`edition2018` annotation][rustdoc-annotation] on the triple backticks to tell `rustdoc` which edition to use.
+
+## Generated code
+
+Another area where the automated fixes cannot apply is if you have a build script which generates Rust code at compile time (see [Code generation] for an example).
+In this situation, if you end up with code that doesn't work in the next edition, you will need to manually change the build script to generate code that is compatible.
+
+## Migrating non-Cargo projects
+
+If your project is not using Cargo as a build system, it may still be possible to make use of the automated lints to assist migrating to the next edition.
+You can enable the migration lints as described above by enabling the appropriate [lint group].
+For example, you can use the `#![warn(rust_2021_compatibility)]` attribute or the `-Wrust-2021-compatibility` or `--force-warns=rust-2021-compatibility` [CLI flag].
+
+The next step is to apply those lints to your code.
+There are several options here:
+
+* Manually read the warnings and apply the suggestions recommended by the compiler.
+* Use an editor or IDE that supports automatically applying suggestions.
+ For example, [Visual Studio Code] with the [Rust Analyzer extension] has the ability to use the "Quick Fix" links to automatically apply suggestions.
+ Many other editors and IDEs have similar functionality.
+* Write a migration tool using the [`rustfix`] library.
+ This is the library that Cargo uses internally to take the [JSON messages] from the compiler and modify the source code.
+ Check the [`examples` directory][rustfix-examples] for examples of how to use the library.
+
+## Writing idiomatic code in a new edition
+
+Editions are not only about new features and removing old ones.
+In any programming language, idioms change over time, and Rust is no exception.
+While old code will continue to compile, it might be written with different idioms today.
+
+For example, in Rust 2015, external crates must be listed with `extern crate` like this:
+
+```rust,ignore
+// src/lib.rs
+extern crate rand;
+```
+
+In Rust 2018, it is [no longer necessary](../rust-2018/path-changes.md#no-more-extern-crate) to include these items.
+
+`cargo fix` has the `--edition-idioms` option to automatically transition some of these idioms to the new syntax.
+
+> **Warning**: The current *"idiom lints"* are known to have some problems.
+> They may make incorrect suggestions which may fail to compile.
+> The current lints are:
+> * Edition 2018:
+> * [`unused-extern-crates`]
+> * [`explicit-outlives-requirements`]
+> * Edition 2021 does not have any idiom lints.
+>
+> The following instructions are recommended only for the intrepid who are willing to work through a few compiler/Cargo bugs!
+> If you run into problems, you can try the `--broken-code` option [described above](#partial-migration-with-broken-code) to make as much progress as possible, and then resolve the remaining issues manually.
+
+With that out of the way, we can instruct Cargo to fix our code snippet with:
+
+```console
+cargo fix --edition-idioms
+```
+
+Afterwards, the line with `extern crate rand;` in `src/lib.rs` will be removed.
+
+We're now more idiomatic, and we didn't have to fix our code manually!
+
+[`cargo check`]: ../../cargo/commands/cargo-check.html
+[`cargo fix`]: ../../cargo/commands/cargo-fix.html
+[`explicit-outlives-requirements`]: ../../rustc/lints/listing/allowed-by-default.html#explicit-outlives-requirements
+[`keyword-idents`]: ../../rustc/lints/listing/allowed-by-default.html#keyword-idents
+[`rustfix`]: https://github.com/rust-lang/rustfix
+[`unused-extern-crates`]: ../../rustc/lints/listing/allowed-by-default.html#unused-extern-crates
+[Cargo features]: ../../cargo/reference/features.html
+[Cargo package]: ../../cargo/reference/manifest.html#the-package-section
+[Cargo targets]: ../../cargo/reference/cargo-targets.html
+[Cargo workspace]: ../../cargo/reference/workspaces.html
+[CLI flag]: ../../rustc/lints/levels.html#via-compiler-flag
+[Code generation]: ../../cargo/reference/build-script-examples.html#code-generation
+[conditional compilation]: ../../reference/conditional-compilation.html
+[documentation tests]: ../../rustdoc/documentation-tests.html
+[JSON messages]: ../../rustc/json.html
+[lint group]: ../../rustc/lints/groups.html
+[lints]: ../../rustc/lints/index.html
+[proc macros]: ../../reference/procedural-macros.html
+[Rust Analyzer extension]: https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer
+[rustdoc-annotation]: ../../rustdoc/documentation-tests.html#attributes
+[rustfix-examples]: https://github.com/rust-lang/rustfix/tree/master/examples
+[Visual Studio Code]: https://code.visualstudio.com/
diff --git a/src/doc/edition-guide/src/editions/creating-a-new-project.md b/src/doc/edition-guide/src/editions/creating-a-new-project.md
new file mode 100644
index 000000000..319d6996c
--- /dev/null
+++ b/src/doc/edition-guide/src/editions/creating-a-new-project.md
@@ -0,0 +1,33 @@
+# Creating a new project
+
+When you create a new project with Cargo, it will automatically add
+configuration for the latest edition:
+
+```console
+> cargo new foo
+ Created binary (application) `foo` project
+> cat foo/Cargo.toml
+[package]
+name = "foo"
+version = "0.1.0"
+edition = "2021"
+
+[dependencies]
+```
+
+That `edition = "2021"` setting will configure your package to use Rust 2021.
+No more configuration needed!
+
+If you'd prefer to use an older edition, you can change the value in that
+key, for example:
+
+```toml
+[package]
+name = "foo"
+version = "0.1.0"
+edition = "2015"
+
+[dependencies]
+```
+
+This will build your package in Rust 2015.
diff --git a/src/doc/edition-guide/src/editions/index.md b/src/doc/edition-guide/src/editions/index.md
new file mode 100644
index 000000000..e12285c49
--- /dev/null
+++ b/src/doc/edition-guide/src/editions/index.md
@@ -0,0 +1,61 @@
+# What are Editions?
+
+The release of Rust 1.0 established
+["stability without stagnation"](https://blog.rust-lang.org/2014/10/30/Stability.html)
+as a core Rust deliverable.
+Ever since the 1.0 release,
+the rule for Rust has been that once a feature has been released on stable,
+we are committed to supporting that feature for all future releases.
+
+There are times, however, when it is useful to be able to make small changes
+to the language that are not backwards compatible.
+The most obvious example is introducing a new keyword,
+which would invalidate variables with the same name.
+For example, the first version of Rust did not have the `async` and `await` keywords.
+Suddenly changing those words to keywords in a later version would've broken code like `let async = 1;`.
+
+**Editions** are the mechanism we use to solve this problem.
+When we want to release a feature that would otherwise be backwards incompatible,
+we do so as part of a new Rust *edition*.
+Editions are opt-in, and so existing crates do
+not see these changes until they explicitly migrate over to the new edition.
+This means that even the latest version of Rust will still *not* treat `async` as a keyword,
+unless edition 2018 or later is chosen.
+This choice is made *per crate* [as part of its `Cargo.toml`](https://doc.rust-lang.org/cargo/reference/manifest.html#the-edition-field).
+New crates created by `cargo new` are always configured to use the latest stable edition.
+
+### Editions do not split the ecosystem
+
+The most important rule for editions is that crates in one edition can
+interoperate seamlessly with crates compiled in other editions. This ensures
+that the decision to migrate to a newer edition is a "private one" that the
+crate can make without affecting others.
+
+The requirement for crate interoperability implies some limits on the kinds of
+changes that we can make in an edition.
+In general, changes that occur in an edition tend to be "skin deep".
+All Rust code, regardless of edition,
+is ultimately compiled to the same internal representation within the compiler.
+
+### Edition migration is easy and largely automated
+
+Our goal is to make it easy for crates to upgrade to a new edition.
+When we release a new edition,
+we also provide [tooling to automate the migration](https://doc.rust-lang.org/cargo/commands/cargo-fix.html).
+It makes minor changes to your code necessary to make it compatible with the new edition.
+For example, when migrating to Rust 2018, it changes anything named `async` to use the equivalent
+[raw identifier syntax](https://doc.rust-lang.org/rust-by-example/compatibility/raw_identifiers.html): `r#async`.
+
+The automated migrations are not necessarily perfect:
+there might be some corner cases where manual changes are still required.
+The tooling tries hard to avoid changes
+to semantics that could affect the correctness or performance of the code.
+
+In addition to tooling, we also maintain this Edition Migration Guide that covers
+the changes that are part of an edition.
+This guide describes each change and gives pointers to where you can learn more about it.
+It also covers any corner cases or details you should be aware of.
+This guide serves both as an overview of the edition
+and as a quick troubleshooting reference
+if you encounter problems with the automated tooling.
+
diff --git a/src/doc/edition-guide/src/editions/transitioning-an-existing-project-to-a-new-edition.md b/src/doc/edition-guide/src/editions/transitioning-an-existing-project-to-a-new-edition.md
new file mode 100644
index 000000000..434352943
--- /dev/null
+++ b/src/doc/edition-guide/src/editions/transitioning-an-existing-project-to-a-new-edition.md
@@ -0,0 +1,89 @@
+# Transitioning an existing project to a new edition
+
+Rust includes tooling to automatically transition a project from one edition to the next.
+It will update your source code so that it is compatible with the next edition.
+Briefly, the steps to update to the next edition are:
+
+1. Run `cargo fix --edition`
+2. Edit `Cargo.toml` and set the `edition` field to the next edition, for example `edition = "2021"`
+3. Run `cargo build` or `cargo test` to verify the fixes worked.
+
+The following sections dig into the details of these steps, and some of the issues you may encounter along the way.
+
+> It's our intention that the migration to new editions is as smooth an
+> experience as possible. If it's difficult for you to upgrade to the latest edition,
+> we consider that a bug. If you run into problems with this process, please
+> [file a bug](https://github.com/rust-lang/rust/issues/new/choose). Thank you!
+
+## Starting the migration
+
+As an example, let's take a look at transitioning from the 2015 edition to the 2018 edition.
+The steps are essentially the same when transitioning to other editions like 2021.
+
+Imagine we have a crate that has this code in `src/lib.rs`:
+
+```rust
+trait Foo {
+ fn foo(&self, i32);
+}
+```
+
+This code uses an anonymous parameter, that `i32`. This is [not
+supported in Rust 2018](../rust-2018/trait-system/no-anon-params.md), and
+so this would fail to compile. Let's get this code up to date!
+
+## Updating your code to be compatible with the new edition
+
+Your code may or may not use features that are incompatible with the new edition.
+In order to help transition to the next edition, Cargo includes the [`cargo fix`] subcommand to automatically update your source code.
+To start, let's run it:
+
+```console
+cargo fix --edition
+```
+
+This will check your code, and automatically fix any issues that it can.
+Let's look at `src/lib.rs` again:
+
+```rust
+trait Foo {
+ fn foo(&self, _: i32);
+}
+```
+
+It's re-written our code to introduce a parameter name for that `i32` value.
+In this case, since it had no name, `cargo fix` will replace it with `_`,
+which is conventional for unused variables.
+
+`cargo fix` can't always fix your code automatically.
+If `cargo fix` can't fix something, it will print the warning that it cannot fix
+to the console. If you see one of these warnings, you'll have to update your code manually.
+See the [Advanced migration strategies] chapter for more on working with the migration process, and read the chapters in this guide which explain which changes are needed.
+If you have problems, please seek help at the [user's forums](https://users.rust-lang.org/).
+
+## Enabling the new edition to use new features
+
+In order to use some new features, you must explicitly opt in to the new
+edition. Once you're ready to continue, change your `Cargo.toml` to add the new
+`edition` key/value pair. For example:
+
+```toml
+[package]
+name = "foo"
+version = "0.1.0"
+edition = "2018"
+```
+
+If there's no `edition` key, Cargo will default to Rust 2015. But in this case,
+we've chosen `2018`, and so our code will compile with Rust 2018!
+
+The next step is to test your project on the new edition.
+Run your project tests to verify that everything still works, such as running [`cargo test`].
+If new warnings are issued, you may want to consider running `cargo fix` again (without the `--edition` flag) to apply any suggestions given by the compiler.
+
+Congrats! Your code is now valid in both Rust 2015 and Rust 2018!
+
+[`cargo fix`]: ../../cargo/commands/cargo-fix.html
+[`cargo test`]: ../../cargo/commands/cargo-test.html
+[Advanced migration strategies]: advanced-migrations.md
+[nightly channel]: ../../book/appendix-07-nightly-rust.html
diff --git a/src/doc/edition-guide/src/introduction.md b/src/doc/edition-guide/src/introduction.md
new file mode 100644
index 000000000..c23508b2f
--- /dev/null
+++ b/src/doc/edition-guide/src/introduction.md
@@ -0,0 +1,11 @@
+# Introduction
+
+Welcome to the Rust Edition Guide! "Editions" are Rust's way of introducing
+changes into the language that would not otherwise be backwards
+compatible.
+
+In this guide, we'll discuss:
+
+* What editions are
+* Which changes are contained in each edition
+* How to migrate your code from one edition to another
diff --git a/src/doc/edition-guide/src/rust-2015/index.md b/src/doc/edition-guide/src/rust-2015/index.md
new file mode 100644
index 000000000..8c1889148
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2015/index.md
@@ -0,0 +1,18 @@
+# Rust 2015
+
+Rust 2015 has a theme of "stability". It commenced with the release of 1.0,
+and is the "default edition". The edition system was conceived in late 2017,
+but Rust 1.0 was released in May of 2015. As such, 2015 is the edition
+that you get when you don't specify any particular edition, for backwards
+compatibility reasons.
+
+"Stability" is the theme of Rust 2015 because 1.0 marked a huge change in
+Rust development. Previous to Rust 1.0, Rust was changing on a daily basis.
+This made it very difficult to write large software in Rust, and made it
+difficult to learn. With the release of Rust 1.0 and Rust 2015, we committed
+to backwards compatibility, ensuring a solid foundation for people to build
+projects on top of.
+
+Since it's the default edition, there's no way to port your code to Rust
+2015; it just *is*. You'll be transitioning *away* from 2015, but never
+really *to* 2015. As such, there's not much else to say about it! \ No newline at end of file
diff --git a/src/doc/edition-guide/src/rust-2018/cargo.md b/src/doc/edition-guide/src/rust-2018/cargo.md
new file mode 100644
index 000000000..6b7ee9be0
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2018/cargo.md
@@ -0,0 +1,10 @@
+# Cargo changes
+
+## Summary
+
+- If there is a target definition in a `Cargo.toml` manifest, it no longer
+ automatically disables automatic discovery of other targets.
+- Target paths of the form `src/{target_name}.rs` are no longer inferred for
+ targets where the `path` field is not set.
+- `cargo install` for the current directory is no longer allowed, you must
+ specify `cargo install --path .` to install the current package. \ No newline at end of file
diff --git a/src/doc/edition-guide/src/rust-2018/index.md b/src/doc/edition-guide/src/rust-2018/index.md
new file mode 100644
index 000000000..77d3f48f3
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2018/index.md
@@ -0,0 +1,8 @@
+# Rust 2018
+
+| Info | |
+| --- | --- |
+| RFC | [#2052](https://rust-lang.github.io/rfcs/2052-epochs.html), which also proposed the Edition system |
+| Release version | [1.31.0](https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html) |
+
+The edition system was created for the release of Rust 2018. The release of the Rust 2018 edition coincided with a number of other features all coordinated around the theme of *productivity*. The majority of those features were backwards compatible and are now available on all editions; however, some of those changes required the edition mechanism (most notably the [module system changes](path-changes.md)).
diff --git a/src/doc/edition-guide/src/rust-2018/new-keywords.md b/src/doc/edition-guide/src/rust-2018/new-keywords.md
new file mode 100644
index 000000000..92ee87708
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2018/new-keywords.md
@@ -0,0 +1,66 @@
+# New keywords
+
+![Minimum Rust version: 1.27](https://img.shields.io/badge/Minimum%20Rust%20Version-1.27-brightgreen.svg)
+
+## Summary
+
+- `dyn` is a [strict keyword][strict], in 2015 it is a [weak keyword].
+- `async` and `await` are [strict keywords][strict].
+- `try` is a [reserved keyword].
+
+[strict]: https://doc.rust-lang.org/reference/keywords.html#strict-keywords
+[weak keyword]: https://doc.rust-lang.org/reference/keywords.html#weak-keywords
+[reserved keyword]: https://doc.rust-lang.org/reference/keywords.html#reserved-keywords
+
+## Motivation
+
+### `dyn Trait` for trait objects
+
+The `dyn Trait` feature is the new syntax for using trait objects. In short:
+
+* `Box<Trait>` becomes `Box<dyn Trait>`
+* `&Trait` and `&mut Trait` become `&dyn Trait` and `&mut dyn Trait`
+
+And so on. In code:
+
+```rust
+trait Trait {}
+
+impl Trait for i32 {}
+
+// old
+fn function1() -> Box<Trait> {
+# unimplemented!()
+}
+
+// new
+fn function2() -> Box<dyn Trait> {
+# unimplemented!()
+}
+```
+
+That's it!
+
+#### Why?
+
+Using just the trait name for trait objects turned out to be a bad decision.
+The current syntax is often ambiguous and confusing, even to veterans,
+and favors a feature that is not more frequently used than its alternatives,
+is sometimes slower, and often cannot be used at all when its alternatives can.
+
+Furthermore, with `impl Trait` arriving, "`impl Trait` vs `dyn Trait`" is much
+more symmetric, and therefore a bit nicer, than "`impl Trait` vs `Trait`".
+`impl Trait` is explained [here][impl-trait].
+
+In the new edition, you should therefore prefer `dyn Trait` to just `Trait`
+where you need a trait object.
+
+[impl-trait]: ../../rust-by-example/trait/impl_trait.html
+
+### `async` and `await`
+
+These keywords are reserved to implement the async-await feature of Rust, which was ultimately [released to stable in 1.39.0](https://blog.rust-lang.org/2019/11/07/Async-await-stable.html).
+
+### `try` keyword
+
+The `try` keyword is reserved for use in `try` blocks, which have not (as of this writing) been stabilized ([tracking issue](https://github.com/rust-lang/rust/issues/31436))
diff --git a/src/doc/edition-guide/src/rust-2018/path-changes.md b/src/doc/edition-guide/src/rust-2018/path-changes.md
new file mode 100644
index 000000000..ca2c27ca2
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2018/path-changes.md
@@ -0,0 +1,379 @@
+# Path and module system changes
+
+![Minimum Rust version: 1.31](https://img.shields.io/badge/Minimum%20Rust%20Version-1.31-brightgreen.svg)
+
+## Summary
+
+- Paths in `use` declarations now work the same as other paths.
+- Paths starting with `::` must now be followed with an external crate.
+- Paths in `pub(in path)` visibility modifiers must now start with `crate`, `self`, or `super`.
+
+## Motivation
+
+The module system is often one of the hardest things for people new to Rust. Everyone
+has their own things that take time to master, of course, but there's a root
+cause for why it's so confusing to many: while there are simple and
+consistent rules defining the module system, their consequences can feel
+inconsistent, counterintuitive and mysterious.
+
+As such, the 2018 edition of Rust introduces a few new module system
+features, but they end up *simplifying* the module system, to make it more
+clear as to what is going on.
+
+Here's a brief summary:
+
+* `extern crate` is no longer needed in 99% of circumstances.
+* The `crate` keyword refers to the current crate.
+* Paths may start with a crate name, even within submodules.
+* Paths starting with `::` must reference an external crate.
+* A `foo.rs` and `foo/` subdirectory may coexist; `mod.rs` is no longer needed
+ when placing submodules in a subdirectory.
+* Paths in `use` declarations work the same as other paths.
+
+These may seem like arbitrary new rules when put this way, but the mental
+model is now significantly simplified overall. Read on for more details!
+
+## More details
+
+Let's talk about each new feature in turn.
+
+### No more `extern crate`
+
+This one is quite straightforward: you no longer need to write `extern crate` to
+import a crate into your project. Before:
+
+```rust,ignore
+// Rust 2015
+
+extern crate futures;
+
+mod submodule {
+ use futures::Future;
+}
+```
+
+After:
+
+```rust,ignore
+// Rust 2018
+
+mod submodule {
+ use futures::Future;
+}
+```
+
+Now, to add a new crate to your project, you can add it to your `Cargo.toml`,
+and then there is no step two. If you're not using Cargo, you already had to pass
+`--extern` flags to give `rustc` the location of external crates, so you'd just
+keep doing what you were doing there as well.
+
+> One small note here: `cargo fix` will not currently automate this change. We may
+> have it do this for you in the future.
+
+#### An exception
+
+There's one exception to this rule, and that's the "sysroot" crates. These are the
+crates distributed with Rust itself.
+
+Usually these are only needed in very specialized situations. Starting in
+1.41, `rustc` accepts the `--extern=CRATE_NAME` flag which automatically adds
+the given crate name in a way similar to `extern crate`. Build tools may use
+this to inject sysroot crates into the crate's prelude. Cargo does not have a
+general way to express this, though it uses it for `proc_macro` crates.
+
+Some examples of needing to explicitly import sysroot crates are:
+
+* [`std`]: Usually this is not necessary, because `std` is automatically
+ imported unless the crate is marked with [`#![no_std]`][no_std].
+* [`core`]: Usually this is not necessary, because `core` is automatically
+ imported, unless the crate is marked with [`#![no_core]`][no_core]. For
+ example, some of the internal crates used by the standard library itself
+ need this.
+* [`proc_macro`]: This is automatically imported by Cargo if it is a
+ proc-macro crate starting in 1.42. `extern crate proc_macro;` would be
+ needed if you want to support older releases, or if using another build tool
+ that does not pass the appropriate `--extern` flags to `rustc`.
+* [`alloc`]: Items in the `alloc` crate are usually accessed via re-exports in
+ the `std` crate. If you are working with a `no_std` crate that supports
+ allocation, then you may need to explicitly import `alloc`.
+* [`test`]: This is only available on the [nightly channel], and is usually
+ only used for the unstable benchmark support.
+
+[`alloc`]: ../../alloc/index.html
+[`core`]: ../../core/index.html
+[`proc_macro`]: ../../proc_macro/index.html
+[`std`]: ../../std/index.html
+[`test`]: ../../test/index.html
+[nightly channel]: ../../book/appendix-07-nightly-rust.html
+[no_core]: https://github.com/rust-lang/rust/issues/29639
+[no_std]: ../../reference/names/preludes.html#the-no_std-attribute
+
+#### Macros
+
+One other use for `extern crate` was to import macros; that's no longer needed.
+Macros may be imported with `use` like any other item. For example, the
+following use of `extern crate`:
+
+```rust,ignore
+#[macro_use]
+extern crate bar;
+
+fn main() {
+ baz!();
+}
+```
+
+Can be changed to something like the following:
+
+```rust,ignore
+use bar::baz;
+
+fn main() {
+ baz!();
+}
+```
+
+#### Renaming crates
+
+If you've been using `as` to rename your crate like this:
+
+```rust,ignore
+extern crate futures as f;
+
+use f::Future;
+```
+
+then removing the `extern crate` line on its own won't work. You'll need to do this:
+
+```rust,ignore
+use futures as f;
+
+use self::f::Future;
+```
+
+This change will need to happen in any module that uses `f`.
+
+### The `crate` keyword refers to the current crate
+
+In `use` declarations and in other code, you can refer to the root of the
+current crate with the `crate::` prefix. For instance, `crate::foo::bar` will
+always refer to the name `bar` inside the module `foo`, from anywhere else in
+the same crate.
+
+The prefix `::` previously referred to either the crate root or an external
+crate; it now unambiguously refers to an external crate. For instance,
+`::foo::bar` always refers to the name `bar` inside the external crate `foo`.
+
+### Extern crate paths
+
+Previously, using an external crate in a module without a `use` import
+required a leading `::` on the path.
+
+```rust,ignore
+// Rust 2015
+
+extern crate chrono;
+
+fn foo() {
+ // this works in the crate root
+ let x = chrono::Utc::now();
+}
+
+mod submodule {
+ fn function() {
+ // but in a submodule it requires a leading :: if not imported with `use`
+ let x = ::chrono::Utc::now();
+ }
+}
+```
+
+Now, extern crate names are in scope in the entire crate, including
+submodules.
+
+```rust,ignore
+// Rust 2018
+
+fn foo() {
+ // this works in the crate root
+ let x = chrono::Utc::now();
+}
+
+mod submodule {
+ fn function() {
+ // crates may be referenced directly, even in submodules
+ let x = chrono::Utc::now();
+ }
+}
+```
+
+### No more `mod.rs`
+
+In Rust 2015, if you have a submodule:
+
+```rust,ignore
+// This `mod` declaration looks for the `foo` module in
+// `foo.rs` or `foo/mod.rs`.
+mod foo;
+```
+
+It can live in `foo.rs` or `foo/mod.rs`. If it has submodules of its own, it
+*must* be `foo/mod.rs`. So a `bar` submodule of `foo` would live at
+`foo/bar.rs`.
+
+In Rust 2018 the restriction that a module with submodules must be named
+`mod.rs` is lifted. `foo.rs` can just be `foo.rs`,
+and the submodule is still `foo/bar.rs`. This eliminates the special
+name, and if you have a bunch of files open in your editor, you can clearly
+see their names, instead of having a bunch of tabs named `mod.rs`.
+
+<table>
+ <thead>
+ <tr>
+ <th>Rust 2015</th>
+ <th>Rust 2018</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>
+<pre>
+.
+├── lib.rs
+└── foo/
+    ├── mod.rs
+    └── bar.rs
+</pre>
+ </td>
+ <td>
+<pre>
+.
+├── lib.rs
+├── foo.rs
+└── foo/
+    └── bar.rs
+</pre>
+ </td>
+ </tr>
+ </tbody>
+</table>
+
+### `use` paths
+
+![Minimum Rust version: 1.32](https://img.shields.io/badge/Minimum%20Rust%20Version-1.32-brightgreen.svg)
+
+Rust 2018 simplifies and unifies path handling compared to Rust 2015. In Rust
+2015, paths work differently in `use` declarations than they do elsewhere. In
+particular, paths in `use` declarations would always start from the crate
+root, while paths in other code implicitly started from the current scope.
+Those differences didn't have any effect in the top-level module, which meant
+that everything would seem straightforward until working on a project large
+enough to have submodules.
+
+In Rust 2018, paths in `use` declarations and in other code work the same way,
+both in the top-level module and in any submodule. You can use a relative path
+from the current scope, a path starting from an external crate name, or a path
+starting with `crate`, `super`, or `self`.
+
+Code that looked like this:
+
+```rust,ignore
+// Rust 2015
+
+extern crate futures;
+
+use futures::Future;
+
+mod foo {
+ pub struct Bar;
+}
+
+use foo::Bar;
+
+fn my_poll() -> futures::Poll { ... }
+
+enum SomeEnum {
+ V1(usize),
+ V2(String),
+}
+
+fn func() {
+ let five = std::sync::Arc::new(5);
+ use SomeEnum::*;
+ match ... {
+ V1(i) => { ... }
+ V2(s) => { ... }
+ }
+}
+```
+
+will look exactly the same in Rust 2018, except that you can delete the `extern
+crate` line:
+
+```rust,ignore
+// Rust 2018
+
+use futures::Future;
+
+mod foo {
+ pub struct Bar;
+}
+
+use foo::Bar;
+
+fn my_poll() -> futures::Poll { ... }
+
+enum SomeEnum {
+ V1(usize),
+ V2(String),
+}
+
+fn func() {
+ let five = std::sync::Arc::new(5);
+ use SomeEnum::*;
+ match ... {
+ V1(i) => { ... }
+ V2(s) => { ... }
+ }
+}
+```
+
+The same code will also work completely unmodified in a submodule:
+
+```rust,ignore
+// Rust 2018
+
+mod submodule {
+ use futures::Future;
+
+ mod foo {
+ pub struct Bar;
+ }
+
+ use foo::Bar;
+
+ fn my_poll() -> futures::Poll { ... }
+
+ enum SomeEnum {
+ V1(usize),
+ V2(String),
+ }
+
+ fn func() {
+ let five = std::sync::Arc::new(5);
+ use SomeEnum::*;
+ match ... {
+ V1(i) => { ... }
+ V2(s) => { ... }
+ }
+ }
+}
+```
+
+This makes it easy to move code around in a project, and avoids introducing
+additional complexity to multi-module projects.
+
+If a path is ambiguous, such as if you have an external crate and a local
+module or item with the same name, you'll get an error, and you'll need to
+either rename one of the conflicting names or explicitly disambiguate the path.
+To explicitly disambiguate a path, use `::name` for an external crate name, or
+`self::name` for a local module or item.
diff --git a/src/doc/edition-guide/src/rust-2018/trait-fn-parameters.md b/src/doc/edition-guide/src/rust-2018/trait-fn-parameters.md
new file mode 100644
index 000000000..e82af19c0
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2018/trait-fn-parameters.md
@@ -0,0 +1,32 @@
+# Anonymous trait function parameters deprecated
+
+![Minimum Rust version: 1.31](https://img.shields.io/badge/Minimum%20Rust%20Version-1.31-brightgreen.svg)
+
+## Summary
+
+- [Trait function parameters] may use any irrefutable pattern when the function has a body.
+
+[Trait function parameters]: https://doc.rust-lang.org/stable/reference/items/traits.html#parameter-patterns
+
+
+## Details
+
+In accordance with RFC [#1685](https://github.com/rust-lang/rfcs/pull/1685),
+parameters in trait method declarations are no longer allowed to be anonymous.
+
+For example, in the 2015 edition, this was allowed:
+
+```rust
+trait Foo {
+ fn foo(&self, u8);
+}
+```
+
+In the 2018 edition, all parameters must be given an argument name (even if it's just
+`_`):
+
+```rust
+trait Foo {
+ fn foo(&self, baz: u8);
+}
+```
diff --git a/src/doc/edition-guide/src/rust-2018/tyvar-behind-raw-pointer.md b/src/doc/edition-guide/src/rust-2018/tyvar-behind-raw-pointer.md
new file mode 100644
index 000000000..fce7d06a4
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2018/tyvar-behind-raw-pointer.md
@@ -0,0 +1,11 @@
+# Method dispatch for raw pointers to inference variables
+
+## Summary
+
+- The [`tyvar_behind_raw_pointer`][#46906] lint is now a hard error.
+
+[#46906]: https://github.com/rust-lang/rust/issues/46906
+
+## Details
+
+See Rust issue [#46906] for details. \ No newline at end of file
diff --git a/src/doc/edition-guide/src/rust-2021/IntoIterator-for-arrays.md b/src/doc/edition-guide/src/rust-2021/IntoIterator-for-arrays.md
new file mode 100644
index 000000000..d70c02aa1
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/IntoIterator-for-arrays.md
@@ -0,0 +1,98 @@
+# IntoIterator for arrays
+
+## Summary
+
+- Arrays implement `IntoIterator` in *all* editions.
+- Calls to `IntoIterator::into_iter` are *hidden* in Rust 2015 and Rust 2018 when using method call syntax
+ (i.e., `array.into_iter()`). So, `array.into_iter()` still resolves to `(&array).into_iter()` as it
+ has before.
+- `array.into_iter()` changes meaning to be the call to `IntoIterator::into_iter` in Rust 2021.
+
+## Details
+
+Until Rust 1.53, only *references* to arrays implement `IntoIterator`.
+This means you can iterate over `&[1, 2, 3]` and `&mut [1, 2, 3]`,
+but not over `[1, 2, 3]` directly.
+
+```rust,ignore
+for &e in &[1, 2, 3] {} // Ok :)
+
+for e in [1, 2, 3] {} // Error :(
+```
+
+This has been [a long-standing issue][25], but the solution is not as simple as it seems.
+Just [adding the trait implementation][20] would break existing code.
+`array.into_iter()` already compiles today because that implicitly calls
+`(&array).into_iter()` due to [how method call syntax works][22].
+Adding the trait implementation would change the meaning.
+
+Usually this type of breakage (adding a trait implementation) is categorized as 'minor' and acceptable.
+But in this case there is too much code that would be broken by it.
+
+It has been suggested many times to "only implement `IntoIterator` for arrays in Rust 2021".
+However, this is simply not possible.
+You can't have a trait implementation exist in one edition and not in another,
+since editions can be mixed.
+
+Instead, the trait implementation was added in *all* editions (starting in Rust 1.53.0)
+but with a small hack to avoid breakage until Rust 2021.
+In Rust 2015 and 2018 code, the compiler will still resolve `array.into_iter()`
+to `(&array).into_iter()` like before, as if the trait implementation does not exist.
+This *only* applies to the `.into_iter()` method call syntax.
+It does not affect any other syntax such as `for e in [1, 2, 3]`, `iter.zip([1, 2, 3])` or
+`IntoIterator::into_iter([1, 2, 3])`.
+Those will start to work in *all* editions.
+
+While it's a shame that this required a small hack to avoid breakage,
+this solution keeps the difference between the editions to an absolute minimum.
+
+[25]: https://github.com/rust-lang/rust/issues/25725
+[20]: https://github.com/rust-lang/rust/pull/65819
+[22]: https://doc.rust-lang.org/book/ch05-03-method-syntax.html#wheres-the---operator
+
+## Migration
+
+A lint, `array_into_iter`, gets triggered whenever there is some call to `into_iter()` that will change
+meaning in Rust 2021. The `array_into_iter` lint has already been a warning by default on all editions
+since the 1.41 release (with several enhancements made in 1.55). If your code is already warning free,
+then it should already be ready to go for Rust 2021!
+
+You can automatically migrate your code to be Rust 2021 Edition compatible or ensure it is already compatible by
+running:
+
+```sh
+cargo fix --edition
+```
+
+Because the difference between editions is small, the migration to Rust 2021 is fairly straight-forward.
+
+For method calls of `into_iter` on arrays, the elements being implemented will change from references to owned values.
+
+For example:
+
+```rust
+fn main() {
+ let array = [1u8, 2, 3];
+ for x in array.into_iter() {
+ // x is a `&u8` in Rust 2015 and Rust 2018
+ // x is a `u8` in Rust 2021
+ }
+}
+```
+
+The most straightforward way to migrate in Rust 2021, is by keeping the exact behavior from previous editions
+by calling `iter()` which also iterates over owned arrays by reference:
+
+```rust
+fn main() {
+ let array = [1u8, 2, 3];
+ for x in array.iter() { // <- This line changed
+ // x is a `&u8` in all editions
+ }
+}
+```
+
+### Optional migration
+
+If you are using fully qualified method syntax (i.e., `IntoIterator::into_iter(array)`) in a previous edition,
+this can be upgraded to method call syntax (i.e., `array.into_iter()`).
diff --git a/src/doc/edition-guide/src/rust-2021/default-cargo-resolver.md b/src/doc/edition-guide/src/rust-2021/default-cargo-resolver.md
new file mode 100644
index 000000000..9abc5a608
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/default-cargo-resolver.md
@@ -0,0 +1,179 @@
+# Default Cargo feature resolver
+
+## Summary
+
+- `edition = "2021"` implies `resolver = "2"` in `Cargo.toml`.
+
+## Details
+
+Since Rust 1.51.0, Cargo has opt-in support for a [new feature resolver][4]
+which can be activated with `resolver = "2"` in `Cargo.toml`.
+
+Starting in Rust 2021, this will be the default.
+That is, writing `edition = "2021"` in `Cargo.toml` will imply `resolver = "2"`.
+
+The resolver is a global setting for a [workspace], and the setting is ignored in dependencies.
+The setting is only honored for the top-level package of the workspace.
+If you are using a [virtual workspace], you will still need to explicitly set the [`resolver` field]
+in the `[workspace]` definition if you want to opt-in to the new resolver.
+
+The new feature resolver no longer merges all requested features for
+crates that are depended on in multiple ways.
+See [the announcement of Rust 1.51][5] for details.
+
+[4]: ../../cargo/reference/resolver.html#feature-resolver-version-2
+[5]: https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html#cargos-new-feature-resolver
+[workspace]: ../../cargo/reference/workspaces.html
+[virtual workspace]: ../../cargo/reference/workspaces.html#virtual-manifest
+[`resolver` field]: ../../cargo/reference/resolver.html#resolver-versions
+
+## Migration
+
+There are no automated migration tools for updating for the new resolver.
+For most projects, there are usually few or no changes as a result of updating.
+
+When updating with `cargo fix --edition`, Cargo will display a report if the new resolver will build dependencies with different features.
+It may look something like this:
+
+> note: Switching to Edition 2021 will enable the use of the version 2 feature resolver in Cargo.
+> This may cause some dependencies to be built with fewer features enabled than previously.
+> More information about the resolver changes may be found at <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/default-cargo-resolver.html><br>
+> When building the following dependencies, the given features will no longer be used:
+>
+> ```text
+> bstr v0.2.16: default, lazy_static, regex-automata, unicode
+> libz-sys v1.1.3 (as host dependency): libc
+> ```
+
+This lets you know that certain dependencies will no longer be built with the given features.
+
+### Build failures
+
+There may be some circumstances where your project may not build correctly after the change.
+If a dependency declaration in one package assumes that certain features are enabled in another, and those features are now disabled, it may fail to compile.
+
+For example, let's say we have a dependency like this:
+
+```toml
+# Cargo.toml
+
+[dependencies]
+bstr = { version = "0.2.16", default-features = false }
+# ...
+```
+
+And somewhere in our dependency tree, another package has this:
+
+```toml
+# Another package's Cargo.toml
+
+[build-dependencies]
+bstr = "0.2.16"
+```
+
+In our package, we've been using the [`words_with_breaks`](https://docs.rs/bstr/0.2.16/bstr/trait.ByteSlice.html#method.words_with_breaks) method from `bstr`, which requires `bstr`'s "unicode" feature to be enabled.
+This has historically worked because Cargo unified the features of `bstr` between the two packages.
+However, after updating to Rust 2021, the new resolver will build `bstr` twice, once with the default features (as a build dependency), and once with no features (as our normal dependency).
+Since `bstr` is now being built without the "unicode" feature, the `words_with_breaks` method doesn't exist, and the build will fail with an error that the method is missing.
+
+The solution here is to ensure that the dependency is declared with the features you are actually using.
+For example:
+
+```toml
+[dependencies]
+bstr = { version = "0.2.16", default-features = false, features = ["unicode"] }
+```
+
+In some cases, this may be a problem with a third-party dependency that you don't have direct control over.
+You can consider submitting a patch to that project to try to declare the correct set of features for the problematic dependency.
+Alternatively, you can add features to any dependency from within your own `Cargo.toml` file.
+For example, if the `bstr` example given above was declared in some third-party dependency, you can just copy the correct dependency declaration into your own project.
+The features will be unified, as long as they match the unification rules of the new resolver. Those are:
+
+* Features enabled on platform-specific dependencies for targets not currently being built are ignored.
+* Build-dependencies and proc-macros do not share features with normal dependencies.
+* Dev-dependencies do not activate features unless building a target that needs them (like tests or examples).
+
+A real-world example is using [`diesel`](https://crates.io/crates/diesel) and [`diesel_migrations`](https://crates.io/crates/diesel_migrations).
+These packages provide database support, and the database is selected using a feature, like this:
+
+```toml
+[dependencies]
+diesel = { version = "1.4.7", features = ["postgres"] }
+diesel_migrations = "1.4.0"
+```
+
+The problem is that `diesel_migrations` has an internal proc-macro which itself depends on `diesel`, and the proc-macro assumes its own copy of `diesel` has the same features enabled as the rest of the dependency graph.
+After updating to the new resolver, it fails to build because now there are two copies of `diesel`, and the one built for the proc-macro is missing the "postgres" feature.
+
+A solution here is to add `diesel` as a build-dependency with the required features, for example:
+
+```toml
+[build-dependencies]
+diesel = { version = "1.4.7", features = ["postgres"] }
+```
+
+This causes Cargo to add "postgres" as a feature for host dependencies (proc-macros and build-dependencies).
+Now, the `diesel_migrations` proc-macro will get the "postgres" feature enabled, and it will build correctly.
+
+The 2.0 release of `diesel` (currently in development) does not have this problem as it has been restructured to not have this dependency requirement.
+
+### Exploring features
+
+The [`cargo tree`] command has had substantial improvements to help with the migration to the new resolver.
+`cargo tree` can be used to explore the dependency graph, and to see which features are being enabled, and importantly *why* they are being enabled.
+
+One option is to use the `--duplicates` flag (`-d` for short), which will tell you when a package is being built multiple times.
+Taking the `bstr` example from earlier, we might see:
+
+```console
+> cargo tree -d
+bstr v0.2.16
+└── foo v0.1.0 (/MyProjects/foo)
+
+bstr v0.2.16
+[build-dependencies]
+└── bar v0.1.0
+ └── foo v0.1.0 (/MyProjects/foo)
+
+```
+
+This output tells us that `bstr` is built twice, and shows the chain of dependencies that led to its inclusion in both cases.
+
+You can print which features each package is using with the `-f` flag, like this:
+
+```console
+cargo tree -f '{p} {f}'
+```
+
+This tells Cargo to change the "format" of the output, where it will print both the package and the enabled features.
+
+You can also use the `-e` flag to tell it which "edges" to display.
+For example, `cargo tree -e features` will show in-between each dependency which features are being added by each dependency.
+This option becomes more useful with the `-i` flag which can be used to "invert" the tree.
+This allows you to see how features *flow* into a given dependency.
+For example, let's say the dependency graph is large, and we're not quite sure who is depending on `bstr`, the following command will show that:
+
+```console
+> cargo tree -e features -i bstr
+bstr v0.2.16
+├── bstr feature "default"
+│ [build-dependencies]
+│ └── bar v0.1.0
+│ └── bar feature "default"
+│ └── foo v0.1.0 (/MyProjects/foo)
+├── bstr feature "lazy_static"
+│ └── bstr feature "unicode"
+│ └── bstr feature "default" (*)
+├── bstr feature "regex-automata"
+│ └── bstr feature "unicode" (*)
+├── bstr feature "std"
+│ └── bstr feature "default" (*)
+└── bstr feature "unicode" (*)
+```
+
+This snippet of output shows that the project `foo` depends on `bar` with the "default" feature.
+Then, `bar` depends on `bstr` as a build-dependency with the "default" feature.
+We can further see that `bstr`'s "default" feature enables "unicode" (among other features).
+
+[`cargo tree`]: ../../cargo/commands/cargo-tree.html
diff --git a/src/doc/edition-guide/src/rust-2021/disjoint-capture-in-closures.md b/src/doc/edition-guide/src/rust-2021/disjoint-capture-in-closures.md
new file mode 100644
index 000000000..25da6d71c
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/disjoint-capture-in-closures.md
@@ -0,0 +1,165 @@
+# Disjoint capture in closures
+
+## Summary
+
+- `|| a.x + 1` now captures only `a.x` instead of `a`.
+- This can cause things to be dropped at different times or affect whether closures implement traits like `Send` or `Clone`.
+ - If possible changes are detected, `cargo fix` will insert statements like `let _ = &a` to force a closure to capture the entire variable.
+
+## Details
+
+[Closures](https://doc.rust-lang.org/book/ch13-01-closures.html)
+automatically capture anything that you refer to from within their body.
+For example, `|| a + 1` automatically captures a reference to `a` from the surrounding context.
+
+In Rust 2018 and before, closures capture entire variables, even if the closure only uses one field.
+For example, `|| a.x + 1` captures a reference to `a` and not just `a.x`.
+Capturing `a` in its entirety prevents mutation or moves from other fields of `a`, so that code like this does not compile:
+
+```rust,ignore
+let a = SomeStruct::new();
+drop(a.x); // Move out of one field of the struct
+println!("{}", a.y); // Ok: Still use another field of the struct
+let c = || println!("{}", a.y); // Error: Tries to capture all of `a`
+c();
+```
+
+Starting in Rust 2021, closures captures are more precise. Typically they will only capture the fields they use (in some cases, they might capture more than just what they use, see the Rust reference for full details). Therefore, the above example will compile fine in Rust 2021.
+
+Disjoint capture was proposed as part of [RFC 2229](https://github.com/rust-lang/rfcs/blob/master/text/2229-capture-disjoint-fields.md) and the RFC contains details about the motivation.
+
+## Migration
+
+As a part of the 2021 edition a migration lint, `rust_2021_incompatible_closure_captures`, has been added in order to aid in automatic migration of Rust 2018 codebases to Rust 2021.
+
+In order to have `rustfix` migrate your code to be Rust 2021 Edition compatible, run:
+
+```sh
+cargo fix --edition
+```
+
+Below is an examination of how to manually migrate code to use closure captures that are compatible with Rust 2021 should the automatic migration fail
+or you would like to better understand how the migration works.
+
+Changing the variables captured by a closure can cause programs to change behavior or to stop compiling in two cases:
+
+- changes to drop order, or when destructors run ([details](#drop-order));
+- changes to which traits a closure implements ([details](#trait-implementations)).
+
+Whenever any of the scenarios below are detected, `cargo fix` will insert a "dummy let" into your closure to force it to capture the entire variable:
+
+```rust
+let x = (vec![22], vec![23]);
+let c = move || {
+ // "Dummy let" that forces `x` to be captured in its entirety
+ let _ = &x;
+
+ // Otherwise, only `x.0` would be captured here
+ println!("{:?}", x.0);
+};
+```
+
+This is a conservative analysis: in many cases, these dummy lets can be safely removed and your program will work fine.
+
+### Wild Card Patterns
+
+Closures now only capture data that needs to be read, which means the following closures will not capture `x`:
+
+```rust
+let x = 10;
+let c = || {
+ let _ = x; // no-op
+};
+
+let c = || match x {
+ _ => println!("Hello World!")
+};
+```
+
+The `let _ = x` statement here is a no-op, since the `_` pattern completely ignores the right-hand side, and `x` is a reference to a place in memory (in this case, a variable).
+
+This change by itself (capturing fewer values) doesn't trigger any suggestions, but it may do so in conjunction with the "drop order" change below.
+
+**Subtle:** There are other similar expressions, such as the "dummy lets" `let _ = &x` that we insert, which are not no-ops. This is because the right-hand side (`&x`) is not a reference to a place in memory, but rather an expression that must first be evaluated (and whose result is then discarded).
+
+### Drop Order
+
+When a closure takes ownership of a value from a variable `t`, that value is then dropped when the closure is dropped, and not when the variable `t` goes out of scope:
+
+```rust
+# fn move_value<T>(_: T){}
+{
+ let t = (vec![0], vec![0]);
+
+ {
+ let c = || move_value(t); // t is moved here
+ } // c is dropped, which drops the tuple `t` as well
+} // t goes out of scope here
+```
+
+The above code will run the same in both Rust 2018 and Rust 2021. However, in cases where the closure only takes ownership of _part_ of a variable, there can be differences:
+
+```rust
+# fn move_value<T>(_: T){}
+{
+ let t = (vec![0], vec![0]);
+
+ {
+ let c = || {
+ // In Rust 2018, captures all of `t`.
+ // In Rust 2021, captures only `t.0`
+ move_value(t.0);
+ };
+
+ // In Rust 2018, `c` (and `t`) are both dropped when we
+ // exit this block.
+ //
+ // In Rust 2021, `c` and `t.0` are both dropped when we
+ // exit this block.
+ }
+
+// In Rust 2018, the value from `t` has been moved and is
+// not dropped.
+//
+// In Rust 2021, the value from `t.0` has been moved, but `t.1`
+// remains, so it will be dropped here.
+}
+```
+
+In most cases, dropping values at different times just affects when memory is freed and is not important. However, some `Drop` impls (aka, destructors) have side-effects, and changing the drop order in those cases can alter the semantics of your program. In such cases, the compiler will suggest inserting a dummy `let` to force the entire variable to be captured.
+
+### Trait implementations
+
+Closures automatically implement the following traits based on what values they capture:
+
+- [`Clone`]: if all captured values are `Clone`.
+- [Auto traits] like [`Send`], [`Sync`], and [`UnwindSafe`]: if all captured values implement the given trait.
+
+[auto traits]: https://doc.rust-lang.org/nightly/reference/special-types-and-traits.html#auto-traits
+[`clone`]: https://doc.rust-lang.org/std/clone/trait.Clone.html
+[`send`]: https://doc.rust-lang.org/std/marker/trait.Send.html
+[`sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html
+[`unwindsafe`]: https://doc.rust-lang.org/std/panic/trait.UnwindSafe.html
+
+In Rust 2021, since different values are being captured, this can affect what traits a closure will implement. The migration lints test each closure to see whether it would have implemented a given trait before and whether it still implements it now; if they find that a trait used to be implemented but no longer is, then "dummy lets" are inserted.
+
+For instance, a common way to allow passing around raw pointers between threads is to wrap them in a struct and then implement `Send`/`Sync` auto trait for the wrapper. The closure that is passed to `thread::spawn` uses the specific fields within the wrapper but the entire wrapper is captured regardless. Since the wrapper is `Send`/`Sync`, the code is considered safe and therefore compiles successfully.
+
+With disjoint captures, only the specific field mentioned in the closure gets captured, which wasn't originally `Send`/`Sync` defeating the purpose of the wrapper.
+
+```rust
+use std::thread;
+
+struct Ptr(*mut i32);
+unsafe impl Send for Ptr {}
+
+
+let mut x = 5;
+let px = Ptr(&mut x as *mut i32);
+
+let c = thread::spawn(move || {
+ unsafe {
+ *(px.0) += 10;
+ }
+}); // Closure captured px.0 which is not Send
+```
diff --git a/src/doc/edition-guide/src/rust-2021/index.md b/src/doc/edition-guide/src/rust-2021/index.md
new file mode 100644
index 000000000..0bb4143d7
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/index.md
@@ -0,0 +1,11 @@
+# Rust 2021
+
+| Info | |
+| --- | --- |
+| RFC | [#3085](https://github.com/rust-lang/rfcs/pull/3085) |
+| Release version | 1.56.0 |
+
+The Rust 2021 Edition contains several changes that bring new capabilities and more consistency to the language,
+and opens up room for expansion in the future.
+The following chapters dive into the details of each change,
+and they include guidance on migrating your existing code.
diff --git a/src/doc/edition-guide/src/rust-2021/or-patterns-macro-rules.md b/src/doc/edition-guide/src/rust-2021/or-patterns-macro-rules.md
new file mode 100644
index 000000000..5277e9c21
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/or-patterns-macro-rules.md
@@ -0,0 +1,72 @@
+# Or patterns in macro-rules
+
+## Summary
+
+- How patterns work in `macro_rules` macros changes slightly:
+ - `$_:pat` in `macro_rules` now matches usage of `|` too: e.g. `A | B`.
+ - The new `$_:pat_param` behaves like `$_:pat` did before; it does not match (top level) `|`.
+ - `$_:pat_param` is available in all editions.
+
+## Details
+
+Starting in Rust 1.53.0, [patterns](https://doc.rust-lang.org/stable/reference/patterns.html)
+are extended to support `|` nested anywhere in the pattern.
+This enables you to write `Some(1 | 2)` instead of `Some(1) | Some(2)`.
+Since this was simply not allowed before, this is not a breaking change.
+
+However, this change also affects [`macro_rules` macros](https://doc.rust-lang.org/stable/reference/macros-by-example.html).
+Such macros can accept patterns using the `:pat` fragment specifier.
+Currently, `:pat` does *not* match top level `|`, since before Rust 1.53,
+not all patterns (at all nested levels) could contain a `|`.
+Macros that accept patterns like `A | B`,
+such as [`matches!()`](https://doc.rust-lang.org/1.51.0/std/macro.matches.html)
+use something like `$($_:pat)|+`.
+
+Because this would potentially break existing macros, the meaning of `:pat` did
+not change in Rust 1.53.0 to include `|`. Instead, that change happens in Rust 2021.
+In the new edition, the `:pat` fragment specifier *will* match `A | B`.
+
+`$_:pat` fragments in Rust 2021 cannot be followed by an explicit `|`. Since there are times
+that one still wishes to match pattern fragments followed by a `|`, the fragment specified `:pat_param`
+has been added to retain the older behavior.
+
+It's important to remember that editions are _per crate_, so the only relevant edition is the edition
+of the crate where the macro is defined. The edition of the crate where the macro is used does not
+change how the macro works.
+
+## Migration
+
+A lint, `rust_2021_incompatible_or_patterns`, gets triggered whenever there is a use `$_:pat` which
+will change meaning in Rust 2021.
+
+You can automatically migrate your code to be Rust 2021 Edition compatible or ensure it is already compatible by
+running:
+
+```sh
+cargo fix --edition
+```
+
+If you have a macro which relies on `$_:pat` not matching the top level use of `|` in patterns,
+you'll need to change each occurrence of `$_:pat` to `$_:pat_param`.
+
+For example:
+
+```rust
+macro_rules! my_macro {
+ ($x:pat | $y:pat) => {
+ // TODO: implementation
+ }
+}
+
+// This macro works in Rust 2018 since `$x:pat` does not match against `|`:
+my_macro!(1 | 2);
+
+// In Rust 2021 however, the `$_:pat` fragment matches `|` and is not allowed
+// to be followed by a `|`. To make sure this macro still works in Rust 2021
+// change the macro to the following:
+macro_rules! my_macro {
+ ($x:pat_param | $y:pat) => { // <- this line is different
+ // TODO: implementation
+ }
+}
+``` \ No newline at end of file
diff --git a/src/doc/edition-guide/src/rust-2021/panic-macro-consistency.md b/src/doc/edition-guide/src/rust-2021/panic-macro-consistency.md
new file mode 100644
index 000000000..0e3295186
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/panic-macro-consistency.md
@@ -0,0 +1,84 @@
+# Panic macro consistency
+
+## Summary
+
+- `panic!(..)` now always uses `format_args!(..)`, just like `println!()`.
+- `panic!("{")` is no longer accepted, without escaping the `{` as `{{`.
+- `panic!(x)` is no longer accepted if `x` is not a string literal.
+ - Use `std::panic::panic_any(x)` to panic with a non-string payload.
+ - Or use `panic!("{}", x)` to use `x`'s `Display` implementation.
+- The same applies to `assert!(expr, ..)`.
+
+## Details
+
+The `panic!()` macro is one of Rust's most well known macros.
+However, it has [some subtle surprises](https://github.com/rust-lang/rfcs/blob/master/text/3007-panic-plan.md)
+that we can't just change due to backwards compatibility.
+
+```rust,ignore
+// Rust 2018
+panic!("{}", 1); // Ok, panics with the message "1"
+panic!("{}"); // Ok, panics with the message "{}"
+```
+
+The `panic!()` macro only uses string formatting when it's invoked with more than one argument.
+When invoked with a single argument, it doesn't even look at that argument.
+
+```rust,ignore
+// Rust 2018
+let a = "{";
+println!(a); // Error: First argument must be a format string literal
+panic!(a); // Ok: The panic macro doesn't care
+```
+
+It even accepts non-strings such as `panic!(123)`, which is uncommon and rarely useful since it
+produces a surprisingly unhelpful message: `panicked at 'Box<Any>'`.
+
+This will especially be a problem once
+[implicit format arguments](https://rust-lang.github.io/rfcs/2795-format-args-implicit-identifiers.html)
+are stabilized.
+That feature will make `println!("hello {name}")` a short-hand for `println!("hello {}", name)`.
+However, `panic!("hello {name}")` would not work as expected,
+since `panic!()` doesn't process a single argument as format string.
+
+To avoid that confusing situation, Rust 2021 features a more consistent `panic!()` macro.
+The new `panic!()` macro will no longer accept arbitrary expressions as the only argument.
+It will, just like `println!()`, always process the first argument as format string.
+Since `panic!()` will no longer accept arbitrary payloads,
+[`panic_any()`](https://doc.rust-lang.org/stable/std/panic/fn.panic_any.html)
+will be the only way to panic with something other than a formatted string.
+
+```rust,ignore
+// Rust 2021
+panic!("{}", 1); // Ok, panics with the message "1"
+panic!("{}"); // Error, missing argument
+panic!(a); // Error, must be a string literal
+```
+
+In addition, `core::panic!()` and `std::panic!()` will be identical in Rust 2021.
+Currently, there are some historical differences between those two,
+which can be noticeable when switching `#![no_std]` on or off.
+
+## Migration
+
+A lint, `non_fmt_panics`, gets triggered whenever there is some call to `panic` that uses some
+deprecated behavior that will error in Rust 2021. The `non_fmt_panics` lint has already been a warning
+by default on all editions since the 1.50 release (with several enhancements made in later releases).
+If your code is already warning free, then it should already be ready to go for Rust 2021!
+
+You can automatically migrate your code to be Rust 2021 Edition compatible or ensure it is already compatible by
+running:
+
+```sh
+cargo fix --edition
+```
+
+Should you choose or need to manually migrate, you'll need to update all panic invocations to either use the same
+formatting as `println` or use `std::panic::panic_any` to panic with non-string data.
+
+For example, in the case of `panic!(MyStruct)`, you'll need to convert to using `std::panic::panic_any` (note
+that this is a function not a macro): `std::panic::panic_any(MyStruct)`.
+
+In the case of panic messages that include curly braces but the wrong number of arguments (e.g., `panic!("Some curlies: {}")`),
+you can panic with the string literal by either using the same syntax as `println!` (i.e., `panic!("{}", "Some curlies: {}")`)
+or by escaping the curly braces (i.e., `panic!("Some curlies: {{}}")`). \ No newline at end of file
diff --git a/src/doc/edition-guide/src/rust-2021/prelude.md b/src/doc/edition-guide/src/rust-2021/prelude.md
new file mode 100644
index 000000000..be1fbf111
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/prelude.md
@@ -0,0 +1,159 @@
+# Additions to the prelude
+
+## Summary
+
+- The `TryInto`, `TryFrom` and `FromIterator` traits are now part of the prelude.
+- This might make calls to trait methods ambiguous which could make some code fail to compile.
+
+## Details
+
+The [prelude of the standard library](https://doc.rust-lang.org/stable/std/prelude/index.html)
+is the module containing everything that is automatically imported in every module.
+It contains commonly used items such as `Option`, `Vec`, `drop`, and `Clone`.
+
+The Rust compiler prioritizes any manually imported items over those
+from the prelude, to make sure additions to the prelude will not break any existing code.
+For example, if you have a crate or module called `example` containing a `pub struct Option;`,
+then `use example::*;` will make `Option` unambiguously refer to the one from `example`;
+not the one from the standard library.
+
+However, adding a _trait_ to the prelude can break existing code in a subtle way.
+For example, a call to `x.try_into()` which comes from a `MyTryInto` trait might fail
+to compile if `std`'s `TryInto` is also imported, because the call to `try_into` is now
+ambiguous and could come from either trait. This is the reason we haven't added `TryInto`
+to the prelude yet, since there is a lot of code that would break this way.
+
+As a solution, Rust 2021 will use a new prelude.
+It's identical to the current one, except for three new additions:
+
+- [`std::convert::TryInto`](https://doc.rust-lang.org/stable/std/convert/trait.TryInto.html)
+- [`std::convert::TryFrom`](https://doc.rust-lang.org/stable/std/convert/trait.TryFrom.html)
+- [`std::iter::FromIterator`](https://doc.rust-lang.org/stable/std/iter/trait.FromIterator.html)
+
+The tracking issue [can be found here](https://github.com/rust-lang/rust/issues/85684).
+
+## Migration
+
+As a part of the 2021 edition a migration lint, `rust_2021_prelude_collisions`, has been added in order to aid in automatic migration of Rust 2018 codebases to Rust 2021.
+
+In order to have `rustfix` migrate your code to be Rust 2021 Edition compatible, run:
+
+```sh
+cargo fix --edition
+```
+
+The lint detects cases where functions or methods are called that have the same name as the methods defined in one of the new prelude traits. In some cases, it may rewrite your calls in various ways to ensure that you continue to call the same function you did before.
+
+If you'd like to migrate your code manually or better understand what `rustfix` is doing, below we've outlined the situations where a migration is needed along with a counter example of when it's not needed.
+
+### Migration needed
+
+#### Conflicting trait methods
+
+When two traits that are in scope have the same method name, it is ambiguous which trait method should be used. For example:
+
+```rust
+trait MyTrait<A> {
+ // This name is the same as the `from_iter` method on the `FromIterator` trait from `std`.
+ fn from_iter(x: Option<A>);
+}
+
+impl<T> MyTrait<()> for Vec<T> {
+ fn from_iter(_: Option<()>) {}
+}
+
+fn main() {
+ // Vec<T> implements both `std::iter::FromIterator` and `MyTrait`
+ // If both traits are in scope (as would be the case in Rust 2021),
+ // then it becomes ambiguous which `from_iter` method to call
+ <Vec<i32>>::from_iter(None);
+}
+```
+
+We can fix this by using fully qualified syntax:
+
+```rust,ignore
+fn main() {
+ // Now it is clear which trait method we're referring to
+ <Vec<i32> as MyTrait<()>>::from_iter(None);
+}
+```
+
+#### Inherent methods on `dyn Trait` objects
+
+Some users invoke methods on a `dyn Trait` value where the method name overlaps with a new prelude trait:
+
+```rust
+mod submodule {
+ pub trait MyTrait {
+ // This has the same name as `TryInto::try_into`
+ fn try_into(&self) -> Result<u32, ()>;
+ }
+}
+
+// `MyTrait` isn't in scope here and can only be referred to through the path `submodule::MyTrait`
+fn bar(f: Box<dyn submodule::MyTrait>) {
+ // If `std::convert::TryInto` is in scope (as would be the case in Rust 2021),
+ // then it becomes ambiguous which `try_into` method to call
+ f.try_into();
+}
+```
+
+Unlike with static dispatch methods, calling a trait method on a trait object does not require that the trait be in scope. The code above works
+as long as there is no trait in scope with a conflicting method name. When the `TryInto` trait is in scope (which is the case in Rust 2021),
+this causes an ambiguity. Should the call be to `MyTrait::try_into` or `std::convert::TryInto::try_into`?
+
+In these cases, we can fix this by adding an additional dereferences or otherwise clarify the type of the method receiver. This ensures that
+the `dyn Trait` method is chosen, versus the methods from the prelude trait. For example, turning `f.try_into()` above into `(&*f).try_into()`
+ensures that we're calling `try_into` on the `dyn MyTrait` which can only refer to the `MyTrait::try_into` method.
+
+### No migration needed
+
+#### Inherent methods
+
+Many types define their own inherent methods with the same name as a trait method. For instance, below the struct `MyStruct` implements `from_iter` which shares the same name with the method from the trait `FromIterator` found in the standard library:
+
+```rust
+use std::iter::IntoIterator;
+
+struct MyStruct {
+ data: Vec<u32>
+}
+
+impl MyStruct {
+ // This has the same name as `std::iter::FromIterator::from_iter`
+ fn from_iter(iter: impl IntoIterator<Item = u32>) -> Self {
+ Self {
+ data: iter.into_iter().collect()
+ }
+ }
+}
+
+impl std::iter::FromIterator<u32> for MyStruct {
+ fn from_iter<I: IntoIterator<Item = u32>>(iter: I) -> Self {
+ Self {
+ data: iter.into_iter().collect()
+ }
+ }
+}
+```
+
+Inherent methods always take precedent over trait methods so there's no need for any migration.
+
+### Implementation Reference
+
+The lint needs to take a couple of factors into account when determining whether or not introducing 2021 Edition to a codebase will cause a name resolution collision (thus breaking the code after changing edition). These factors include:
+
+- Is the call a [fully-qualified call] or does it use [dot-call method syntax]?
+ - This will affect how the name is resolved due to auto-reference and auto-dereferencing on method call syntax. Manually dereferencing/referencing will allow specifying priority in the case of dot-call method syntax, while fully-qualified call requires specification of the type and the trait name in the method path (e.g. `<Type as Trait>::method`)
+- Is this an [inherent method] or [a trait method]?
+ - Inherent methods that take `self` will take priority over `TryInto::try_into` as inherent methods take priority over trait methods, but inherent methods that take `&self` or `&mut self` won't take priority due to requiring a auto-reference (while `TryInto::try_into` does not, as it takes `self`)
+- Is the origin of this method from `core`/`std`? (As the traits can't have a collision with themselves)
+- Does the given type implement the trait it could have a collision against?
+- Is the method being called via dynamic dispatch? (i.e. is the `self` type `dyn Trait`)
+ - If so, trait imports don't affect resolution, and no migration lint needs to occur
+
+[fully-qualified call]: https://doc.rust-lang.org/reference/expressions/call-expr.html#disambiguating-function-calls
+[dot-call method syntax]: https://doc.rust-lang.org/reference/expressions/method-call-expr.html
+[inherent method]: https://doc.rust-lang.org/reference/items/implementations.html#inherent-implementations
+[a trait method]: https://doc.rust-lang.org/reference/items/implementations.html#trait-implementations
diff --git a/src/doc/edition-guide/src/rust-2021/reserving-syntax.md b/src/doc/edition-guide/src/rust-2021/reserving-syntax.md
new file mode 100644
index 000000000..db711a7d1
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/reserving-syntax.md
@@ -0,0 +1,85 @@
+# Reserving syntax
+
+## Summary
+
+- `any_identifier#`, `any_identifier"..."`, and `any_identifier'...'` are now reserved
+ syntax, and no longer tokenize.
+- This is mostly relevant to macros. E.g. `quote!{ #a#b }` is no longer accepted.
+- It doesn't treat keywords specially, so e.g. `match"..." {}` is no longer accepted.
+- Insert whitespace between the identifier and the subsequent `#`, `"`, or `'`
+ to avoid errors.
+- Edition migrations will help you insert whitespace in such cases.
+
+## Details
+
+To make space for new syntax in the future,
+we've decided to reserve syntax for prefixed identifiers and literals:
+`prefix#identifier`, `prefix"string"`, `prefix'c'`, and `prefix#123`,
+where `prefix` can be any identifier.
+(Except those prefixes that already have a meaning, such as `b'...'` (byte
+strings) and `r"..."` (raw strings).)
+
+This provides syntax we can expand into in the future without requiring an
+edition boundary. We may use this for temporary syntax until the next edition,
+or for permanent syntax if appropriate.
+
+Without an edition, this would be a breaking change, since macros can currently
+accept syntax such as `hello"world"`, which they will see as two separate
+tokens: `hello` and `"world"`. The (automatic) fix is simple though: just
+insert a space: `hello "world"`. Likewise, `prefix#ident` should become
+`prefix #ident`. Edition migrations will help with this fix.
+
+Other than turning these into a tokenization error,
+[the RFC][10] does not attach a meaning to any prefix yet.
+Assigning meaning to specific prefixes is left to future proposals,
+which will now&mdash;thanks to reserving these prefixes&mdash;not be breaking changes.
+
+Some new prefixes you might potentially see in the future (though we haven't
+committed to any of them yet):
+
+- `k#keyword` to allow writing keywords that don't exist yet in the current edition.
+ For example, while `async` is not a keyword in edition 2015,
+ this prefix would've allowed us to accept `k#async` in edition 2015
+ without having to wait for edition 2018 to reserve `async` as a keyword.
+
+- `f""` as a short-hand for a format string.
+ For example, `f"hello {name}"` as a short-hand for the equivalent `format!()` invocation.
+
+- `s""` for `String` literals.
+
+- `c""` or `z""` for null-terminated C strings.
+
+[10]: https://github.com/rust-lang/rfcs/pull/3101
+
+
+## Migration
+
+As a part of the 2021 edition a migration lint, `rust_2021_prefixes_incompatible_syntax`, has been added in order to aid in automatic migration of Rust 2018 codebases to Rust 2021.
+
+In order to have `rustfix` migrate your code to be Rust 2021 Edition compatible, run:
+
+```sh
+cargo fix --edition
+```
+
+Should you want or need to manually migrate your code, migration is fairly straight-forward.
+
+Let's say you have a macro that is defined like so:
+
+```rust
+macro_rules! my_macro {
+ ($a:tt $b:tt) => {};
+}
+```
+
+In Rust 2015 and 2018 it's legal for this macro to be called like so with no space between the first token tree and the second:
+
+```rust,ignore
+my_macro!(z"hey");
+```
+
+This `z` prefix is no longer allowed in Rust 2021, so in order to call this macro, you must add a space after the prefix like so:
+
+```rust,ignore
+my_macro!(z "hey");
+``` \ No newline at end of file
diff --git a/src/doc/edition-guide/src/rust-2021/warnings-promoted-to-error.md b/src/doc/edition-guide/src/rust-2021/warnings-promoted-to-error.md
new file mode 100644
index 000000000..f17e2b2b2
--- /dev/null
+++ b/src/doc/edition-guide/src/rust-2021/warnings-promoted-to-error.md
@@ -0,0 +1,49 @@
+# Warnings promoted to errors
+
+## Summary
+
+- Code that triggered the `bare_trait_objects` and `ellipsis_inclusive_range_patterns` lints will error in Rust 2021.
+
+## Details
+
+Two existing lints are becoming hard errors in Rust 2021, but these lints will remain warnings in older editions.
+
+### `bare_trait_objects`:
+
+The use of the `dyn` keyword to identify [trait objects](https://doc.rust-lang.org/book/ch17-02-trait-objects.html)
+will be mandatory in Rust 2021.
+
+For example, the following code which does not include the `dyn` keyword in `&MyTrait`
+will produce an error instead of just a lint in Rust 2021:
+
+```rust
+pub trait MyTrait {}
+
+pub fn my_function(_trait_object: &MyTrait) { // should be `&dyn MyTrait`
+ unimplemented!()
+}
+```
+
+### `ellipsis_inclusive_range_patterns`:
+
+The [deprecated `...` syntax](https://doc.rust-lang.org/stable/reference/patterns.html#range-patterns)
+for inclusive range patterns (i.e., ranges where the end value is *included* in the range) is no longer
+accepted in Rust 2021. It has been superseded by `..=`, which is consistent with expressions.
+
+For example, the following code which uses `...` in a pattern will produce an error instead of
+just a lint in Rust 2021:
+
+```rust
+pub fn less_or_eq_to_100(n: u8) -> bool {
+ matches!(n, 0...100) // should be `0..=100`
+}
+```
+
+## Migrations
+
+If your Rust 2015 or 2018 code does not produce any warnings for `bare_trait_objects`
+or `ellipsis_inclusive_range_patterns` and you've not allowed these lints through the
+use of `#![allow()]` or some other mechanism, then there's no need to migrate.
+
+To automatically migrate any crate that uses `...` in patterns or does not use `dyn` with
+trait objects, you can run `cargo fix --edition`. \ No newline at end of file
diff --git a/src/doc/edition-guide/triagebot.toml b/src/doc/edition-guide/triagebot.toml
new file mode 100644
index 000000000..5648018b6
--- /dev/null
+++ b/src/doc/edition-guide/triagebot.toml
@@ -0,0 +1,4 @@
+[assign]
+
+[relabel]
+
diff --git a/src/doc/embedded-book/.github/CODEOWNERS b/src/doc/embedded-book/.github/CODEOWNERS
new file mode 100644
index 000000000..259d14d00
--- /dev/null
+++ b/src/doc/embedded-book/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @rust-embedded/resources
diff --git a/src/doc/embedded-book/.github/bors.toml b/src/doc/embedded-book/.github/bors.toml
new file mode 100644
index 000000000..c3cfa378d
--- /dev/null
+++ b/src/doc/embedded-book/.github/bors.toml
@@ -0,0 +1,4 @@
+block_labels = ["needs-decision"]
+delete_merged_branches = true
+required_approvals = 1
+status = ["build"]
diff --git a/src/doc/embedded-book/.github/workflows/ci.yml b/src/doc/embedded-book/.github/workflows/ci.yml
new file mode 100644
index 000000000..b1e3d552e
--- /dev/null
+++ b/src/doc/embedded-book/.github/workflows/ci.yml
@@ -0,0 +1,57 @@
+name: CI
+
+on:
+ push:
+ branches: [ staging, trying, master ]
+ pull_request:
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+
+ - name: Install Python dependencies
+ run: |
+ pip3 install --user python-dateutil linkchecker
+ - name: Put pip binary directory into path
+ run: echo "~/.local/bin" >> $GITHUB_PATH
+
+ - name: Cache Cargo installed binaries
+ uses: actions/cache@v1
+ id: cache-cargo
+ with:
+ path: ~/cargo-bin
+ key: cache-cargo
+ - name: Install mdbook
+ if: steps.cache-cargo.outputs.cache-hit != 'true'
+ uses: actions-rs/install@v0.1
+ with:
+ crate: mdbook
+ version: latest
+ - name: Copy mdbook to cache directory
+ if: steps.cache-cargo.outputs.cache-hit != 'true'
+ run: |
+ mkdir ~/cargo-bin
+ cp ~/.cargo/bin/mdbook ~/cargo-bin
+ - name: Put new cargo binary directory into path
+ run: echo "~/cargo-bin" >> $GITHUB_PATH
+
+ - name: Build book
+ run: mdbook build
+ - name: Test book
+ run: mdbook test
+ - name: Check links
+ run: linkchecker book
+
+ - name: Deploy book
+ if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
+ uses: peaceiris/actions-gh-pages@v3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: book
+ force_orphan: true
diff --git a/src/doc/embedded-book/CODE_OF_CONDUCT.md b/src/doc/embedded-book/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..67cc9b2a0
--- /dev/null
+++ b/src/doc/embedded-book/CODE_OF_CONDUCT.md
@@ -0,0 +1,37 @@
+# The Rust Code of Conduct
+
+## Conduct
+
+**Contact**: [Resources team][team]
+
+* We are committed to providing a friendly, safe, and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristics.
+* On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all.
+* Please be kind and courteous. There's no need to be mean or rude.
+* Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer.
+* Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works.
+* We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups.
+* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [Resources team][team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back.
+* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome.
+
+## Moderation
+
+These are the policies for upholding our community's standards of conduct.
+
+1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.)
+2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed.
+3. Moderators will first respond to such remarks with a warning.
+4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off.
+5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded.
+6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology.
+7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed.
+8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others.
+
+In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely.
+
+And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust.
+
+The enforcement policies listed above apply to all official embedded WG venues; including official IRC channels (#rust-embedded); GitHub repositories under rust-embedded; and all forums under rust-embedded.org (forum.rust-embedded.org).
+
+*Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).*
+
+[team]: https://github.com/rust-embedded/wg#the-resources-team
diff --git a/src/doc/embedded-book/LICENSE-APACHE b/src/doc/embedded-book/LICENSE-APACHE
new file mode 100644
index 000000000..11069edd7
--- /dev/null
+++ b/src/doc/embedded-book/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/doc/embedded-book/LICENSE-CC-BY-SA b/src/doc/embedded-book/LICENSE-CC-BY-SA
new file mode 100644
index 000000000..a73481c4b
--- /dev/null
+++ b/src/doc/embedded-book/LICENSE-CC-BY-SA
@@ -0,0 +1,428 @@
+Attribution-ShareAlike 4.0 International
+
+=======================================================================
+
+Creative Commons Corporation ("Creative Commons") is not a law firm and
+does not provide legal services or legal advice. Distribution of
+Creative Commons public licenses does not create a lawyer-client or
+other relationship. Creative Commons makes its licenses and related
+information available on an "as-is" basis. Creative Commons gives no
+warranties regarding its licenses, any material licensed under their
+terms and conditions, or any related information. Creative Commons
+disclaims all liability for damages resulting from their use to the
+fullest extent possible.
+
+Using Creative Commons Public Licenses
+
+Creative Commons public licenses provide a standard set of terms and
+conditions that creators and other rights holders may use to share
+original works of authorship and other material subject to copyright
+and certain other rights specified in the public license below. The
+following considerations are for informational purposes only, are not
+exhaustive, and do not form part of our licenses.
+
+ Considerations for licensors: Our public licenses are
+ intended for use by those authorized to give the public
+ permission to use material in ways otherwise restricted by
+ copyright and certain other rights. Our licenses are
+ irrevocable. Licensors should read and understand the terms
+ and conditions of the license they choose before applying it.
+ Licensors should also secure all rights necessary before
+ applying our licenses so that the public can reuse the
+ material as expected. Licensors should clearly mark any
+ material not subject to the license. This includes other CC-
+ licensed material, or material used under an exception or
+ limitation to copyright. More considerations for licensors:
+ wiki.creativecommons.org/Considerations_for_licensors
+
+ Considerations for the public: By using one of our public
+ licenses, a licensor grants the public permission to use the
+ licensed material under specified terms and conditions. If
+ the licensor's permission is not necessary for any reason--for
+ example, because of any applicable exception or limitation to
+ copyright--then that use is not regulated by the license. Our
+ licenses grant only permissions under copyright and certain
+ other rights that a licensor has authority to grant. Use of
+ the licensed material may still be restricted for other
+ reasons, including because others have copyright or other
+ rights in the material. A licensor may make special requests,
+ such as asking that all changes be marked or described.
+ Although not required by our licenses, you are encouraged to
+ respect those requests where reasonable. More considerations
+ for the public:
+ wiki.creativecommons.org/Considerations_for_licensees
+
+=======================================================================
+
+Creative Commons Attribution-ShareAlike 4.0 International Public
+License
+
+By exercising the Licensed Rights (defined below), You accept and agree
+to be bound by the terms and conditions of this Creative Commons
+Attribution-ShareAlike 4.0 International Public License ("Public
+License"). To the extent this Public License may be interpreted as a
+contract, You are granted the Licensed Rights in consideration of Your
+acceptance of these terms and conditions, and the Licensor grants You
+such rights in consideration of benefits the Licensor receives from
+making the Licensed Material available under these terms and
+conditions.
+
+
+Section 1 -- Definitions.
+
+ a. Adapted Material means material subject to Copyright and Similar
+ Rights that is derived from or based upon the Licensed Material
+ and in which the Licensed Material is translated, altered,
+ arranged, transformed, or otherwise modified in a manner requiring
+ permission under the Copyright and Similar Rights held by the
+ Licensor. For purposes of this Public License, where the Licensed
+ Material is a musical work, performance, or sound recording,
+ Adapted Material is always produced where the Licensed Material is
+ synched in timed relation with a moving image.
+
+ b. Adapter's License means the license You apply to Your Copyright
+ and Similar Rights in Your contributions to Adapted Material in
+ accordance with the terms and conditions of this Public License.
+
+ c. BY-SA Compatible License means a license listed at
+ creativecommons.org/compatiblelicenses, approved by Creative
+ Commons as essentially the equivalent of this Public License.
+
+ d. Copyright and Similar Rights means copyright and/or similar rights
+ closely related to copyright including, without limitation,
+ performance, broadcast, sound recording, and Sui Generis Database
+ Rights, without regard to how the rights are labeled or
+ categorized. For purposes of this Public License, the rights
+ specified in Section 2(b)(1)-(2) are not Copyright and Similar
+ Rights.
+
+ e. Effective Technological Measures means those measures that, in the
+ absence of proper authority, may not be circumvented under laws
+ fulfilling obligations under Article 11 of the WIPO Copyright
+ Treaty adopted on December 20, 1996, and/or similar international
+ agreements.
+
+ f. Exceptions and Limitations means fair use, fair dealing, and/or
+ any other exception or limitation to Copyright and Similar Rights
+ that applies to Your use of the Licensed Material.
+
+ g. License Elements means the license attributes listed in the name
+ of a Creative Commons Public License. The License Elements of this
+ Public License are Attribution and ShareAlike.
+
+ h. Licensed Material means the artistic or literary work, database,
+ or other material to which the Licensor applied this Public
+ License.
+
+ i. Licensed Rights means the rights granted to You subject to the
+ terms and conditions of this Public License, which are limited to
+ all Copyright and Similar Rights that apply to Your use of the
+ Licensed Material and that the Licensor has authority to license.
+
+ j. Licensor means the individual(s) or entity(ies) granting rights
+ under this Public License.
+
+ k. Share means to provide material to the public by any means or
+ process that requires permission under the Licensed Rights, such
+ as reproduction, public display, public performance, distribution,
+ dissemination, communication, or importation, and to make material
+ available to the public including in ways that members of the
+ public may access the material from a place and at a time
+ individually chosen by them.
+
+ l. Sui Generis Database Rights means rights other than copyright
+ resulting from Directive 96/9/EC of the European Parliament and of
+ the Council of 11 March 1996 on the legal protection of databases,
+ as amended and/or succeeded, as well as other essentially
+ equivalent rights anywhere in the world.
+
+ m. You means the individual or entity exercising the Licensed Rights
+ under this Public License. Your has a corresponding meaning.
+
+
+Section 2 -- Scope.
+
+ a. License grant.
+
+ 1. Subject to the terms and conditions of this Public License,
+ the Licensor hereby grants You a worldwide, royalty-free,
+ non-sublicensable, non-exclusive, irrevocable license to
+ exercise the Licensed Rights in the Licensed Material to:
+
+ a. reproduce and Share the Licensed Material, in whole or
+ in part; and
+
+ b. produce, reproduce, and Share Adapted Material.
+
+ 2. Exceptions and Limitations. For the avoidance of doubt, where
+ Exceptions and Limitations apply to Your use, this Public
+ License does not apply, and You do not need to comply with
+ its terms and conditions.
+
+ 3. Term. The term of this Public License is specified in Section
+ 6(a).
+
+ 4. Media and formats; technical modifications allowed. The
+ Licensor authorizes You to exercise the Licensed Rights in
+ all media and formats whether now known or hereafter created,
+ and to make technical modifications necessary to do so. The
+ Licensor waives and/or agrees not to assert any right or
+ authority to forbid You from making technical modifications
+ necessary to exercise the Licensed Rights, including
+ technical modifications necessary to circumvent Effective
+ Technological Measures. For purposes of this Public License,
+ simply making modifications authorized by this Section 2(a)
+ (4) never produces Adapted Material.
+
+ 5. Downstream recipients.
+
+ a. Offer from the Licensor -- Licensed Material. Every
+ recipient of the Licensed Material automatically
+ receives an offer from the Licensor to exercise the
+ Licensed Rights under the terms and conditions of this
+ Public License.
+
+ b. Additional offer from the Licensor -- Adapted Material.
+ Every recipient of Adapted Material from You
+ automatically receives an offer from the Licensor to
+ exercise the Licensed Rights in the Adapted Material
+ under the conditions of the Adapter's License You apply.
+
+ c. No downstream restrictions. You may not offer or impose
+ any additional or different terms or conditions on, or
+ apply any Effective Technological Measures to, the
+ Licensed Material if doing so restricts exercise of the
+ Licensed Rights by any recipient of the Licensed
+ Material.
+
+ 6. No endorsement. Nothing in this Public License constitutes or
+ may be construed as permission to assert or imply that You
+ are, or that Your use of the Licensed Material is, connected
+ with, or sponsored, endorsed, or granted official status by,
+ the Licensor or others designated to receive attribution as
+ provided in Section 3(a)(1)(A)(i).
+
+ b. Other rights.
+
+ 1. Moral rights, such as the right of integrity, are not
+ licensed under this Public License, nor are publicity,
+ privacy, and/or other similar personality rights; however, to
+ the extent possible, the Licensor waives and/or agrees not to
+ assert any such rights held by the Licensor to the limited
+ extent necessary to allow You to exercise the Licensed
+ Rights, but not otherwise.
+
+ 2. Patent and trademark rights are not licensed under this
+ Public License.
+
+ 3. To the extent possible, the Licensor waives any right to
+ collect royalties from You for the exercise of the Licensed
+ Rights, whether directly or through a collecting society
+ under any voluntary or waivable statutory or compulsory
+ licensing scheme. In all other cases the Licensor expressly
+ reserves any right to collect such royalties.
+
+
+Section 3 -- License Conditions.
+
+Your exercise of the Licensed Rights is expressly made subject to the
+following conditions.
+
+ a. Attribution.
+
+ 1. If You Share the Licensed Material (including in modified
+ form), You must:
+
+ a. retain the following if it is supplied by the Licensor
+ with the Licensed Material:
+
+ i. identification of the creator(s) of the Licensed
+ Material and any others designated to receive
+ attribution, in any reasonable manner requested by
+ the Licensor (including by pseudonym if
+ designated);
+
+ ii. a copyright notice;
+
+ iii. a notice that refers to this Public License;
+
+ iv. a notice that refers to the disclaimer of
+ warranties;
+
+ v. a URI or hyperlink to the Licensed Material to the
+ extent reasonably practicable;
+
+ b. indicate if You modified the Licensed Material and
+ retain an indication of any previous modifications; and
+
+ c. indicate the Licensed Material is licensed under this
+ Public License, and include the text of, or the URI or
+ hyperlink to, this Public License.
+
+ 2. You may satisfy the conditions in Section 3(a)(1) in any
+ reasonable manner based on the medium, means, and context in
+ which You Share the Licensed Material. For example, it may be
+ reasonable to satisfy the conditions by providing a URI or
+ hyperlink to a resource that includes the required
+ information.
+
+ 3. If requested by the Licensor, You must remove any of the
+ information required by Section 3(a)(1)(A) to the extent
+ reasonably practicable.
+
+ b. ShareAlike.
+
+ In addition to the conditions in Section 3(a), if You Share
+ Adapted Material You produce, the following conditions also apply.
+
+ 1. The Adapter's License You apply must be a Creative Commons
+ license with the same License Elements, this version or
+ later, or a BY-SA Compatible License.
+
+ 2. You must include the text of, or the URI or hyperlink to, the
+ Adapter's License You apply. You may satisfy this condition
+ in any reasonable manner based on the medium, means, and
+ context in which You Share Adapted Material.
+
+ 3. You may not offer or impose any additional or different terms
+ or conditions on, or apply any Effective Technological
+ Measures to, Adapted Material that restrict exercise of the
+ rights granted under the Adapter's License You apply.
+
+
+Section 4 -- Sui Generis Database Rights.
+
+Where the Licensed Rights include Sui Generis Database Rights that
+apply to Your use of the Licensed Material:
+
+ a. for the avoidance of doubt, Section 2(a)(1) grants You the right
+ to extract, reuse, reproduce, and Share all or a substantial
+ portion of the contents of the database;
+
+ b. if You include all or a substantial portion of the database
+ contents in a database in which You have Sui Generis Database
+ Rights, then the database in which You have Sui Generis Database
+ Rights (but not its individual contents) is Adapted Material,
+
+ including for purposes of Section 3(b); and
+ c. You must comply with the conditions in Section 3(a) if You Share
+ all or a substantial portion of the contents of the database.
+
+For the avoidance of doubt, this Section 4 supplements and does not
+replace Your obligations under this Public License where the Licensed
+Rights include other Copyright and Similar Rights.
+
+
+Section 5 -- Disclaimer of Warranties and Limitation of Liability.
+
+ a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
+ EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
+ AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
+ ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
+ IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
+ WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
+ PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
+ ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
+ KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
+ ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
+
+ b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
+ TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
+ NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
+ INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
+ COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
+ USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
+ DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
+ IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
+
+ c. The disclaimer of warranties and limitation of liability provided
+ above shall be interpreted in a manner that, to the extent
+ possible, most closely approximates an absolute disclaimer and
+ waiver of all liability.
+
+
+Section 6 -- Term and Termination.
+
+ a. This Public License applies for the term of the Copyright and
+ Similar Rights licensed here. However, if You fail to comply with
+ this Public License, then Your rights under this Public License
+ terminate automatically.
+
+ b. Where Your right to use the Licensed Material has terminated under
+ Section 6(a), it reinstates:
+
+ 1. automatically as of the date the violation is cured, provided
+ it is cured within 30 days of Your discovery of the
+ violation; or
+
+ 2. upon express reinstatement by the Licensor.
+
+ For the avoidance of doubt, this Section 6(b) does not affect any
+ right the Licensor may have to seek remedies for Your violations
+ of this Public License.
+
+ c. For the avoidance of doubt, the Licensor may also offer the
+ Licensed Material under separate terms or conditions or stop
+ distributing the Licensed Material at any time; however, doing so
+ will not terminate this Public License.
+
+ d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
+ License.
+
+
+Section 7 -- Other Terms and Conditions.
+
+ a. The Licensor shall not be bound by any additional or different
+ terms or conditions communicated by You unless expressly agreed.
+
+ b. Any arrangements, understandings, or agreements regarding the
+ Licensed Material not stated herein are separate from and
+ independent of the terms and conditions of this Public License.
+
+
+Section 8 -- Interpretation.
+
+ a. For the avoidance of doubt, this Public License does not, and
+ shall not be interpreted to, reduce, limit, restrict, or impose
+ conditions on any use of the Licensed Material that could lawfully
+ be made without permission under this Public License.
+
+ b. To the extent possible, if any provision of this Public License is
+ deemed unenforceable, it shall be automatically reformed to the
+ minimum extent necessary to make it enforceable. If the provision
+ cannot be reformed, it shall be severed from this Public License
+ without affecting the enforceability of the remaining terms and
+ conditions.
+
+ c. No term or condition of this Public License will be waived and no
+ failure to comply consented to unless expressly agreed to by the
+ Licensor.
+
+ d. Nothing in this Public License constitutes or may be interpreted
+ as a limitation upon, or waiver of, any privileges and immunities
+ that apply to the Licensor or You, including from the legal
+ processes of any jurisdiction or authority.
+
+
+=======================================================================
+
+Creative Commons is not a party to its public
+licenses. Notwithstanding, Creative Commons may elect to apply one of
+its public licenses to material it publishes and in those instances
+will be considered the “Licensor.” The text of the Creative Commons
+public licenses is dedicated to the public domain under the CC0 Public
+Domain Dedication. Except for the limited purpose of indicating that
+material is shared under a Creative Commons public license or as
+otherwise permitted by the Creative Commons policies published at
+creativecommons.org/policies, Creative Commons does not authorize the
+use of the trademark "Creative Commons" or any other trademark or logo
+of Creative Commons without its prior written consent including,
+without limitation, in connection with any unauthorized modifications
+to any of its public licenses or any other arrangements,
+understandings, or agreements concerning use of licensed material. For
+the avoidance of doubt, this paragraph does not form part of the
+public licenses.
+
+Creative Commons may be contacted at creativecommons.org.
+
diff --git a/src/doc/embedded-book/LICENSE-MIT b/src/doc/embedded-book/LICENSE-MIT
new file mode 100644
index 000000000..468cd79a8
--- /dev/null
+++ b/src/doc/embedded-book/LICENSE-MIT
@@ -0,0 +1,23 @@
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/src/doc/embedded-book/README.md b/src/doc/embedded-book/README.md
new file mode 100644
index 000000000..2ed54e3bd
--- /dev/null
+++ b/src/doc/embedded-book/README.md
@@ -0,0 +1,46 @@
+# The Embedded Rust Book
+
+> Documentation on how to use the Rust Programming Language to develop firmware for bare metal (microcontroller) devices
+
+This project is developed and maintained by the [Resources team][team].
+
+See [the issue tracker] for more details. This book is a living document, and is updated continuously.
+
+[the issue tracker]: https://github.com/rust-embedded/book/issues
+
+## Online Copies of this Book
+
+This book is located at https://docs.rust-embedded.org/book/
+
+## License
+
+The Embedded Rust Book (this project) is distributed under the following licenses:
+
+* The code samples and free-standing Cargo projects contained within this book are licensed under the terms of both the [MIT License] and the [Apache License v2.0].
+* The written prose contained within this book is licensed under the terms of the Creative Commons [CC-BY-SA v4.0] license.
+
+Copies of the licenses used by this project may also be found here:
+
+* [MIT License Hosted]
+* [Apache License v2.0 Hosted]
+* [CC-BY-SA v4.0 Hosted]
+
+[MIT License]: ./LICENSE-MIT
+[Apache License v2.0]: ./LICENSE-APACHE
+[CC-BY-SA v4.0]: ./LICENSE-CC-BY-SA
+[MIT License Hosted]: https://opensource.org/licenses/MIT
+[Apache License v2.0 Hosted]: http://www.apache.org/licenses/LICENSE-2.0
+[CC-BY-SA v4.0 Hosted]: https://creativecommons.org/licenses/by-sa/4.0/legalcode
+
+### Contribution
+
+Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.
+
+## Code of Conduct
+
+Contribution to this crate is organized under the terms of the [Rust Code of
+Conduct][CoC], the maintainer of this crate, the [Resources team][team], promises
+to intervene to uphold that code of conduct.
+
+[CoC]: CODE_OF_CONDUCT.md
+[team]: https://github.com/rust-embedded/wg#the-resources-team
diff --git a/src/doc/embedded-book/book.toml b/src/doc/embedded-book/book.toml
new file mode 100644
index 000000000..fa5b7e3ae
--- /dev/null
+++ b/src/doc/embedded-book/book.toml
@@ -0,0 +1,8 @@
+[book]
+authors = ["James Munns"]
+multilingual = false
+src = "src"
+title = "The Embedded Rust Book"
+
+[output.html]
+git-repository-url = "https://github.com/rust-embedded/book"
diff --git a/src/doc/embedded-book/src/SUMMARY.md b/src/doc/embedded-book/src/SUMMARY.md
new file mode 100644
index 000000000..f62fa6333
--- /dev/null
+++ b/src/doc/embedded-book/src/SUMMARY.md
@@ -0,0 +1,60 @@
+# Summary
+
+<!--
+
+Definition of the organization of this book is still a work in process.
+
+Refer to https://github.com/rust-embedded/book/issues for
+more information and coordination
+
+-->
+
+- [Introduction](./intro/index.md)
+ - [Hardware](./intro/hardware.md)
+ - [`no_std`](./intro/no-std.md)
+ - [Tooling](./intro/tooling.md)
+ - [Installation](./intro/install.md)
+ - [Linux](./intro/install/linux.md)
+ - [MacOS](./intro/install/macos.md)
+ - [Windows](./intro/install/windows.md)
+ - [Verify Installation](./intro/install/verify.md)
+- [Getting started](./start/index.md)
+ - [QEMU](./start/qemu.md)
+ - [Hardware](./start/hardware.md)
+ - [Memory-mapped Registers](./start/registers.md)
+ - [Semihosting](./start/semihosting.md)
+ - [Panicking](./start/panicking.md)
+ - [Exceptions](./start/exceptions.md)
+ - [Interrupts](./start/interrupts.md)
+ - [IO](./start/io.md)
+- [Peripherals](./peripherals/index.md)
+ - [A first attempt in Rust](./peripherals/a-first-attempt.md)
+ - [The Borrow Checker](./peripherals/borrowck.md)
+ - [Singletons](./peripherals/singletons.md)
+- [Static Guarantees](./static-guarantees/index.md)
+ - [Typestate Programming](./static-guarantees/typestate-programming.md)
+ - [Peripherals as State Machines](./static-guarantees/state-machines.md)
+ - [Design Contracts](./static-guarantees/design-contracts.md)
+ - [Zero Cost Abstractions](./static-guarantees/zero-cost-abstractions.md)
+- [Portability](./portability/index.md)
+- [Concurrency](./concurrency/index.md)
+- [Collections](./collections/index.md)
+- [Design Patterns](./design-patterns/index.md)
+ - [HALs](./design-patterns/hal/index.md)
+ - [Checklist](./design-patterns/hal/checklist.md)
+ - [Naming](./design-patterns/hal/naming.md)
+ - [Interoperability](./design-patterns/hal/interoperability.md)
+ - [Predictability](./design-patterns/hal/predictability.md)
+ - [GPIO](./design-patterns/hal/gpio.md)
+- [Tips for embedded C developers](./c-tips/index.md)
+ <!-- TODO: Define Sections -->
+- [Interoperability](./interoperability/index.md)
+ - [A little C with your Rust](./interoperability/c-with-rust.md)
+ - [A little Rust with your C](./interoperability/rust-with-c.md)
+- [Unsorted topics](./unsorted/index.md)
+ - [Optimizations: The speed size tradeoff](./unsorted/speed-vs-size.md)
+ - [Performing Math Functionality](./unsorted/math.md)
+
+---
+
+[Appendix A: Glossary](./appendix/glossary.md)
diff --git a/src/doc/embedded-book/src/appendix/glossary.md b/src/doc/embedded-book/src/appendix/glossary.md
new file mode 100644
index 000000000..6a898b497
--- /dev/null
+++ b/src/doc/embedded-book/src/appendix/glossary.md
@@ -0,0 +1,64 @@
+# Appendix A: Glossary
+
+The embedded ecosystem is full of different protocols, hardware components and
+vendor-specific things that use their own terms and abbreviations. This Glossary
+attempts to list them with pointers for understanding them better.
+
+### BSP
+
+A Board Support Crate provides a high level interface configured for a specific
+board. It usually depends on a [HAL](#hal) crate.
+There is a more detailed description on the [memory-mapped registers page](../start/registers.md)
+or for a broader overview see [this video](https://youtu.be/vLYit_HHPaY).
+
+### FPU
+
+Floating-point Unit. A 'math processor' running only operations on floating-point numbers.
+
+### HAL
+
+A Hardware Abstraction Layer crate provides a developer friendly interface to a microcontroller's
+features and peripherals. It is usually implemented on top of a [Peripheral Access Crate (PAC)](#pac).
+It may also implement traits from the [`embedded-hal`](https://crates.io/crates/embedded-hal) crate.
+There is a more detailed description on the [memory-mapped registers page](../start/registers.md)
+or for a broader overview see [this video](https://youtu.be/vLYit_HHPaY).
+
+### I2C
+
+Sometimes referred to as `I²C` or Inter-IC. It is a protocol meant for hardware communication
+within a single integrated circuit. See [here][i2c] for more details
+
+[i2c]: https://en.wikipedia.org/wiki/I2c
+
+### PAC
+
+A Peripheral Access Crate provides access to a microcontroller's peripherals. It is one of
+the lower level crates and is usually generated directly from the provided [SVD](#svd), often
+using [svd2rust](https://github.com/rust-embedded/svd2rust/). The [Hardware Abstraction Layer](#hal)
+would usually depend on this crate.
+There is a more detailed description on the [memory-mapped registers page](../start/registers.md)
+or for a broader overview see [this video](https://youtu.be/vLYit_HHPaY).
+
+### SPI
+
+Serial Peripheral Interface. See [here][spi] for more information.
+
+[spi]: https://en.wikipedia.org/wiki/Serial_peripheral_interface
+
+### SVD
+
+System View Description is an XML file format used to describe the programmers view of a
+microcontroller device. You can read more about it on
+[the ARM CMSIS documentation site](https://www.keil.com/pack/doc/CMSIS/SVD/html/index.html).
+
+### UART
+
+Universal asynchronous receiver-transmitter. See [here][uart] for more information.
+
+[uart]: https://en.wikipedia.org/wiki/Universal_asynchronous_receiver-transmitter
+
+### USART
+
+Universal synchronous and asynchronous receiver-transmitter. See [here][usart] for more information.
+
+[usart]: https://en.wikipedia.org/wiki/Universal_synchronous_and_asynchronous_receiver-transmitter
diff --git a/src/doc/embedded-book/src/assets/crates.png b/src/doc/embedded-book/src/assets/crates.png
new file mode 100644
index 000000000..d5898301d
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/crates.png
Binary files differ
diff --git a/src/doc/embedded-book/src/assets/embedded-hal.svg b/src/doc/embedded-book/src/assets/embedded-hal.svg
new file mode 100644
index 000000000..40c9475bd
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/embedded-hal.svg
@@ -0,0 +1,2 @@
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="801px" height="301px" version="1.1"><defs/><g transform="translate(0.5,0.5)"><rect x="0" y="0" width="800" height="300" fill="#f5f5f5" stroke="#666666" pointer-events="none"/><rect x="20" y="20" width="250" height="260" fill="#dae8fc" stroke="#6c8ebf" pointer-events="none"/><rect x="40" y="40" width="210" height="60" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(41.5,41.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="206" height="56" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: normal; width: 206px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="font-size: 16px"><font style="font-size: 16px">HAL Implementation Crate</font></div><div style="font-size: 16px"><font style="font-size: 16px"><b>nrf52-hal</b><br /></font></div></div></div></foreignObject><text x="103" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="40" y="120" width="210" height="60" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(84.5,130.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="120" height="39" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: nowrap; width: 121px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="font-size: 17px"><font style="font-size: 17px">Device Crate</font></div><div style="font-size: 17px"><font style="font-size: 17px"><b>nrf52</b><br /></font></div></div></div></foreignObject><text x="60" y="26" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="40" y="200" width="210" height="60" fill="#f8cecc" stroke="#b85450" pointer-events="none"/><g transform="translate(69.5,221.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="150" height="17" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: nowrap; width: 151px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><font style="font-size: 16px">Device Hardware</font></div></div></foreignObject><text x="75" y="15" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">&lt;font style="font-size: 16px"&gt;Device Hardware&lt;/font&gt;</text></switch></g><rect x="310" y="120" width="210" height="60" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(319.5,131.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="190" height="36" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: nowrap; width: 191px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="font-size: 16px"><font style="font-size: 16px">Embedded HAL Traits</font></div><div style="font-size: 16px"><font style="font-size: 16px"><b>embedded-hal</b><br /></font></div></div></div></foreignObject><text x="95" y="24" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="570" y="40" width="210" height="60" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(574.5,51.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="200" height="36" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: nowrap; width: 201px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="font-size: 16px"><font style="font-size: 16px">Accelerometer Driver</font></div><div style="font-size: 16px"><font style="font-size: 16px"><b>LSM303DLHC</b><br /></font></div></div></div></foreignObject><text x="100" y="24" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="570" y="120" width="210" height="60" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(589.5,131.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="170" height="36" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: nowrap; width: 171px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="font-size: 16px"><font style="font-size: 16px">Gas Sensor Driver</font></div><div style="font-size: 16px"><font style="font-size: 16px"><b>SGP30</b><br /></font></div></div></div></foreignObject><text x="85" y="24" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="570" y="200" width="210" height="60" fill="#d5e8d4" stroke="#82b366" pointer-events="none"/><g transform="translate(571.5,201.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="206" height="56" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; overflow-wrap: normal; text-align: center; white-space: normal; width: 206px;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;"><div style="font-size: 16px"><font style="font-size: 16px">Light Intensity Driver</font></div><div style="font-size: 16px"><font style="font-size: 16px"><b>TSL256X</b><br /></font></div></div></div></foreignObject><text x="103" y="34" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 524.1 130.13 L 563.9 82.87" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 520.72 134.14 L 522.55 126.54 L 524.1 130.13 L 527.91 131.04 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 567.28 78.86 L 565.45 86.46 L 563.9 82.87 L 560.09 81.96 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 523.88 170.05 L 566.12 224.95" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 520.68 165.89 L 527.72 169.3 L 523.88 170.05 L 522.18 173.57 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 569.32 229.11 L 562.28 225.7 L 566.12 224.95 L 567.82 221.43 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 526.37 150 L 563.63 150" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 521.12 150 L 528.12 146.5 L 526.37 150 L 528.12 153.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 568.88 150 L 561.88 153.5 L 563.63 150 L 561.88 146.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 306.18 144.91 L 253.82 75.09" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 309.33 149.11 L 302.33 145.61 L 306.18 144.91 L 307.93 141.41 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 250.67 70.89 L 257.67 74.39 L 253.82 75.09 L 252.07 78.59 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 145 113.63 L 145 106.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 145 118.88 L 141.5 111.88 L 145 113.63 L 148.5 111.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 145 101.12 L 148.5 108.12 L 145 106.37 L 141.5 108.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 145 193.63 L 145 186.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 145 198.88 L 141.5 191.88 L 145 193.63 L 148.5 191.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 145 181.12 L 148.5 188.12 L 145 186.37 L 141.5 188.12 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/></g></svg> \ No newline at end of file
diff --git a/src/doc/embedded-book/src/assets/f3.jpg b/src/doc/embedded-book/src/assets/f3.jpg
new file mode 100644
index 000000000..7a122aa04
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/f3.jpg
Binary files differ
diff --git a/src/doc/embedded-book/src/assets/nrf52-memory-map.png b/src/doc/embedded-book/src/assets/nrf52-memory-map.png
new file mode 100644
index 000000000..8252f02d8
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/nrf52-memory-map.png
Binary files differ
diff --git a/src/doc/embedded-book/src/assets/nrf52-spi-frequency-register.png b/src/doc/embedded-book/src/assets/nrf52-spi-frequency-register.png
new file mode 100644
index 000000000..e8eaef8c0
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/nrf52-spi-frequency-register.png
Binary files differ
diff --git a/src/doc/embedded-book/src/assets/rust_layers.svg b/src/doc/embedded-book/src/assets/rust_layers.svg
new file mode 100644
index 000000000..c9e55fff4
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/rust_layers.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 1104 632" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;"><path d="M0.5,525l1103,0" style="fill:none;stroke:#000;stroke-width:1px;"/><use xlink:href="#_Image1" x="129.592" y="552.914" width="944.329px" height="83.329px" transform="matrix(0.99929,0,0,0.992017,0,0)"/><path d="M1071,569c0,-11.038 -8.962,-20 -20,-20l-901,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l901,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><use xlink:href="#_Image1" x="129.592" y="423.884" width="944.329px" height="83.329px" transform="matrix(0.99929,0,0,0.992017,0,0)"/><path d="M1071,441c0,-11.038 -8.962,-20 -20,-20l-901,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l901,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><text x="385.246px" y="471.586px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Peripheral <tspan x="576.477px 603.156px " y="471.586px 471.586px ">Ac</tspan>cess Crate</text><use xlink:href="#_Image2" x="129.63" y="319.047" width="670.329px" height="83.329px" transform="matrix(0.999001,0,0,0.992017,0,0)"/><path d="M797,337c0,-11.038 -8.962,-20 -20,-20l-627,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l627,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><text x="173.178px" y="367.107px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Hardware <tspan x="355.482px 382.162px " y="367.107px 367.107px ">Ab</tspan>straction Layer Impl</text><use xlink:href="#_Image3" x="822.672" y="319.047" width="253.329px" height="83.329px" transform="matrix(0.99736,0,0,0.992017,0,0)"/><path d="M1071,337c0,-11.038 -8.962,-20 -20,-20l-210,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l210,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><text x="890.854px" y="371.082px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Driver</text><use xlink:href="#_Image3" x="822.672" y="104.893" width="253.329px" height="83.329px" transform="matrix(0.99736,0,0,0.992017,0,0)"/><path d="M1071,124.556c0,-11.039 -8.962,-20 -20,-20l-210,0c-11.038,0 -20,8.961 -20,20l0,40c0,11.038 8.962,20 20,20l210,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><text x="890.854px" y="158.638px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Driver</text><g><use xlink:href="#_Image1" x="129.592" y="0" width="944.329px" height="83.329px" transform="matrix(0.99929,0,0,0.992017,0,0)"/><path d="M1071,20.5c0,-11.038 -8.962,-20 -20,-20l-901,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l901,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><text x="504.064px" y="50.842px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Application</text></g><g><use xlink:href="#_Image2" x="129.63" y="105.341" width="670.329px" height="83.329px" transform="matrix(0.999001,0,0,0.992017,0,0)"/><path d="M797,125c0,-11.038 -8.962,-20 -20,-20l-627,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l627,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#fff;stroke:#ebd8d8;stroke-width:1px;"/><text x="279.428px" y="155.586px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Board Support Crate</text></g><g transform="matrix(6.12323e-17,-1,1,6.12323e-17,-898.906,438.632)"><text x="80.06px" y="938.942px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:20px;">Uses</text></g><g transform="matrix(6.12323e-17,-1,1,6.12323e-17,-684.651,221.938)"><text x="78.84px" y="723.468px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:20px;">Implements</text></g><use xlink:href="#_Image4" x="129.71" y="210.657" width="943.929px" height="82.929px" transform="matrix(0.999925,0,0,0.999149,0,0)"/><path d="M1071,230.778c0,-11.038 -8.962,-20 -20,-20l-901,0c-11.038,0 -20,8.962 -20,20l0,40c0,11.038 8.962,20 20,20l901,0c11.038,0 20,-8.962 20,-20l0,-40Z" style="fill:#d4d6d6;stroke:#ebd8d8;stroke-width:0.6px;stroke-dasharray:0.6,0.6;"/><text x="298.43px" y="260.885px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Hardware <tspan x="480.734px 507.414px " y="260.885px 260.885px ">Ab</tspan>straction Layer <tspan x="802.395px 825.344px 838.664px " y="260.885px 260.885px 260.885px ">Tra</tspan>its</text><text x="467.6px" y="603.082px" style="font-family:'ArialMT', 'Arial', sans-serif;font-size:40px;">Microcontroller</text><path d="M72.552,375.709l14.489,0l-22.291,22.291l-22.291,-22.291l14.489,0l0,-352.918l-14.489,0l22.291,-22.291l22.291,22.291l-14.489,0l0,352.918Z" style="fill:#5796e3;stroke:#ebd8d8;stroke-width:0.6px;stroke-dasharray:0.6,0.6;"/><defs><image id="_Image1" width="945px" height="84px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7EAAABUCAYAAABUQrD1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAG8ElEQVR4nO3d2XIbxxmG4Q8LN1FLJJWjJHbu/8YSx3FkyxLFRQQB5uDv9gxhyqYcWcSEz1PVRew8fuvv6Znl082SzJMs2tpvay/Jsr03+x2/CwAAwP+X6ySbJOskqySXbV211zbtM3f2KbE5S0XrMslBkqO2HrV1lIrZRYQsAADAQ3fd1joVrhdJzkbroq1V+8ydYvYuodknr8tUqD5O8jTJsyRPkhy31w9T09gesQAAADxsPWJXST4kOU9ymuQkydsk75K8T0XtKneYzP5WxM4yTF6fJHme5EVbT1MBe5BhK/Fi6zdNYwEAAB6m69HfdW7G7FkqZH9s600qaC9SW403H/vRX4vMPn09TsXrV229SAXtYWr78DzD9mHRCgAAwLbr3NxefJUK1pNUwL5O8n0qaE9T249vDdnFR/7BPDVdfZrkz0m+SfJ1klepoO0T2H64k4AFAADgY3oz9iHoMtWch7l5eWoyTG179N6wvOXHtwP26yR/ScXrUXtPtAIAAPB7zEarHx68P1r9rjc/pbYe35jIbkdsvwb2cYYJ7N9SAXvY3hOvAAAA/K96yO5luI1rD9ik4vVttrYWL7Z+oF8D+yrJ31NT2BepCayABQAA4HMbT2X7ocGz1HWzlxlOLU5yM2IXqWnrywzXwL5MBez2qcMAAADwuWxfL7tIhetlakvxVdr1sYvRF/aS/Cm1ffib1EnEj2ICCwAAwJfRtxX3LcX9FOPLtMOeesQuUsH6VSpgX6Vuo9MPcQIAAIAvoW8tnqfC9bytVVrEzlInQPUp7F9TBzkdZKhfAAAA+BLGt+O5Tm0nPk1NZNd9z/FB6pY6z1MT2P0IWAAAAO5Hv/Xr49Rhw89SZzjN+37jw/biszjICQAAgPvXW/VJhlZd9og9am8cZ7hHDwAAANyXfhvYR6mdw8dpEbvXXjxObSs2hQUAAGAX9Mtfj1Pduj9PXf/6KDWNNYUFAABgV/TB62Fbe9svmMICAACwS3q3HqRF7CI1jTWFBQAAYJf02+0s07q1R+wyw81kTWIBAADYFfNUs+6lHew0i4AFAABgN80ybCle9HAdLwAAANgl875cAwsAAMCu+3nwKmIBAACYDBELAADAZIhYAAAAJkPEAgAAMBkiFgAAgMkQsQAAAEyGiAUAAGAyRCwAAACTIWIBAACYDBELAADAZIhYAAAAJkPEAgAAMBkiFgAAgMkQsQAAAEyGiAUAAGAyRCwAAACTIWIBAACYDBELAADAZIhYAAAAJkPEAgAAMBkiFgAAgMkQsQAAAEyGiAUAAGAyRCwAAACTIWIBAACYDBELAADAZIhYAAAAJkPEAgAAMBkiFgAAgMkQsQAAAEyGiAUAAGAyRCwAAACTIWIBAACYDBELAADAZIhYAAAAJkPEAgAAMBkiFgAAgMkQsQAAAOy6677m4ydtAQAAwK7orbpJspmPn0TEAgAAsHvWSa6SrOepeL1qL4pYAAAAdskm1aurJFfzVMCu2l/TWAAAAHZF30p8leQyo4i9SPKhPRaxAAAA7IpNavB6mWQ1bw/OkpxnmMYCAADAfetT2A+pZr2cp4r2LMlpe8OWYgAAAHbBJjV4PU1166pvJz5PctJetKUYAACA+9ansGcZ9eo8dcrTeZJ3bZ3HScUAAADcr01qt/BJkrdpl8DOR2+8TfImyfvUFmMRCwAAwH24TnXp+1Sn9ohdL0YfmiVZJjlKcphkP8m8vQ4AAABfwnVqd/Bpkv8k+WeS16ntxD9HbL/3zizJXipiD1JRO4uQBQAA4MvYpG4D+ybJt0m+S01iL5Ncjyex2yF7kJrGLlITWQAAAPgjjS93/VdqCvtDhrObstj6wnX7Ut9avJ8K2nmELAAAAH+cfjudd0n+neQfSb7PcG5Tkl9G7Kat9ej9ZVuL2FoMAADA59WHqR9yM2C/a88vMzp4eDtikyFi1+1x/1zfVixkAQAA+Bz6IU4XqS3E44D9KRW2m/EXbovYfm3sKlW8Vxm2GM9yM2TFLAAAAJ+qT18vU6cQv0ldAzsO2IsMu4R/dlvEjn/wqv3oZSpq1xkOf+o+9hgAAAC6PjBdp/ryPLVd+HXqFOJvU5PYd6kJ7C8CNvnt6JxnuHfs0yQvkrxM8rw9f5ThVjzja2bFLAAAANej1QelH1IBe5KawP6Q5MfUduKzVOBubvux5G6xOUsF6n4qZp8kedbW0yTHqfvK7meI2b7lGAAAgIdpPHntu3wvUtuHT1IT17ft71l7f3w2063uGpp9urpI3XLnMDWFPW5/jzKE7F6cZAwAAPCQfSxgz1PB2tdFhrOY+nd+1adG5vhwp2UqWPdS8doDdhmnGAMAADxk4y3E/RrY8XlLq1S4rnPHeO3+CxIDcA7UvxoMAAAAAElFTkSuQmCC"/><image id="_Image2" width="671px" height="84px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAp8AAABUCAYAAADEWFxWAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGjUlEQVR4nO3db3MT1xnG4VuS5b8YCpkkbUO//xdr0iYlAQw2xpbtvnjOYddCgAFlZ0yua+aMZck2vPzNc/bszvL5ZknmSRZt7SZZttXfm7UFAMD9dNPWdZKrJJdJLtrXVXvvuv3MnX1OIM5SYbmTZC/JfpLDtg7aWrbP5xGgAAD3WQ/PVSo4z5OctfWmrbfts6vcMULvEod90rmTCswHSR62dZzkKBWgexmmnz0+AQC4n8ZTz1UqNN8kOU3yOsnLJCft9VkqQj85Cf1UIM4yTDqPkzxO8qSth6nwHEfn+pa7AAUAuH9uRl/Xt97fpmLzJMnzJH+0ryep6eiq/fxGH4vDPu08SkXn9209SYXofjZPOgUnAMC35Wa0xhH6KhWez5L8lgrR09S1oRsDdPGBf2CeCsuHSX5I8lOSp0l+TIVon3ju5Pa0U3gCAHx7eufNMwwol6lh5EGGoWRScdqvAX1vC35nwx/fFJ5/T0VnP1QkNAEA/prGQ8d+GH03wx2Q+uHzF6np6K0J6Hp89ms8H6TC82mSf6bCc799JjoBAOgBusxwG86+K55UdL7M2hb8Yu0P9Gs8f0zyr9TU80lq4ik8AQBYN56C9snnLLfvC7oxPhep6eZ3qYnnT+31QYbrOgEAYN369aCLVHBepLbeV2nXfy5Gv7BM8rfUNvvT1Mn2w5h4AgBwN337fd6+X6Vuv3SRdgipx+ciFZrfZzjVfpzhcBEAANxF34Kfp4KzPw3pMi0+Z6nTSX3q+Y/UAaO9DNUKAAB3Mb4t001q2/00NQG96nvze6lbKz1OTTx3IzwBAPgy/dadD1KH1x+lzhbN+778fnvzURwwAgDg6/XGPM7QmDs9Pg/aB0cZ7tUEAABfqt/G8zC1w36UFp/L9mZ/ZKapJwAA29Av7zxK9ebuPHV952GGR2eaegIAsA190Lnf1nL9DVNPAAC2qffmXlp8LjI8CN7UEwCAbem3XdpJ6831h8DPY/IJAMD29EduLtMOHI3vQi88AQDYpn7D+WWSRQ/O8QIAgG3qDzaau8YTAIA/27tBp/gEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgMmITwAAJiM+AQCYjPgEAGAy4hMAgD/bTV/z8TdtAQDAtvTGvE5yPR9/E/EJAMD2XSVZJbmap6Jz1d4UnwAAbNN1qjMvk6zmqfC8bF9NPwEA2Ja+5b5KcpFRfJ4nedtei08AALblOjXovEhyOW8vzpK8yTD9BACAr9Wnnm9TrXkxT5XoWZLT9oGtdwAAtuE6Neg8TcXnZd92f5PkVSpCbb0DAPC1+tTzLNWZp2nXfF6l4vOkrTdx8h0AgK9zndpVf5XkZdolnvPRBy+TPE/yOrUVLz4BAPgSN6mefJ3qyx6fV4vRD82S7CQ5SLKfZDf1+M3ZpP9VAADus5vULvppkv8l+TnJs9T2+7v47PdgmiVZpuJzLxWjswhQAADu5jp1G8/nSX5J8t/U5PMiyc148rkeoHup6eciNQEFAICP6ZdzvkhF589Jfs9wpiiLtV/oz3nvW/C7qRCdR4ACAPBh/bZKJxnC87cM54mSvB+f1xmev9k/32lrEVvwAADc1oeXb1Ph+WsqPG9tt/cfXo/PZIjPqwxPO1pk2H4XoAAAJMPhovNUaP6a5N+p8HyR4QFG72yKz37tZ38GZ3/kZo/OcYCKUACAv54+7exPL3qe5D+5HZ7nGXbT39kUn+M/uGp/9CIVo5tuPj/7wGsAAL4NN6OvV6ku7A8pepY61d6v8XyZmni+F57Jp2NxnuHenw+TPEnyXZLH7fvD3D6UNIupKADAt6IPJNcHk/3R7M9Tp9n/SEXnWSpMrzf9seRugThLTUh3UxF6nORRW8dJjlL3BV1mOJjk9kwAAPdbn3JepaLzMjXRPE2F50kqOE9S0XmR22eGNrrrdLJPMhcZbkJ/OFoHqTjtU9CdOJwEAHBfjSedlxnC8zwVmn2dZzgj1M8NfdTnhuH40NFOKjTXV59+zke/AwDA/dHjs089xxHa1yrDeaBPRmf3f8YHcw0aADjMAAAAAElFTkSuQmCC"/><image id="_Image3" width="254px" height="84px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAP4AAABUCAYAAACiEYrZAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAFlklEQVR4nO3ca1dTRxSH8ScJCXcsumyX1e//zVqtVikgl4SQ9MWe7RnSUFFohTPPb61ZJ54E8M1/9txOBny7ATAERqWNgUm55r1BaZLuZ1naArgGroBZuc7LvUX5zJ19Szgz8GNgE9gCdoDt6joGNsrnDL90f0si3Bn6S+C8tIvSpuW9a+7YAdwlmBn4DSLse8Az4ADYB3aJ0G/RVf0MvqT7qav9nAj5BRH8U+AYOCmvL4gO4KsjgK+Fc0AEfpMI+U/AC+CQCP8ONwO/Osw3/NL3W1bX1eH+lAj/CXAEfCzXU2JUMC+fX+vfgplVfpcI+svSDolqf1uFN+zSw1vtBOqh/2ci9B9K+wScEWsBa8M/uuWP5Fx+H/gZeA28AX4hgr9LjAI2uFnlDb3036gzNqQrzBOiCNfT7QHdukB2FDdsrPkDGfoDIvS/Aq+IwOcCniGXfqy6IxjRdQKbdEV5QKwBTFmp/KvBzzn9HhH6N0TwD4neJH+ZpMchwz+m22bPnTWIan/MyrB/tPILck6foX8NPCcqvaGXHq+6+ue2+oCb+/5rgz8iqvoLIvRvyuttunm8pMdrdf4/IsI+I4b7c8p8f1T9wJjYrntFhP4lsV1npZeelgx/5jtX/6eUBb98Y0SE/CXd6v0+3UKepKclh/1DIuyXdAd8ljmEn9BV+1zM26RbIJD0tNRbf0u6Az+XwHUOCTaJ7bvnRKWfYOilpy635vfoTttuAcOcB2yVm89wMU/qk8z3AV2+NzL423QP3OR+oKSnL7fpd+gyvpFDgR26Y7hWe6lfcjq/R2R9MiTm8/k8fX3iR1I/ZIHPM/3j+oZHcqX+yqxPKMEf0X11ltVe6qec60+oFvfyeJ/fnCP1T/0tWmNKxa/P9xp6qZ/q8I/q4PuMvdRvOcIfOqeX2vHlyzsMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy81yOBLDTL4UoMMvtQggy+1Y5ltWP+jNEn9tAQWwCKDf11uGHypnzLnc+B6SAT+ujSDL/VT5vwKmA+JHuCqXK36Uv/kNH4OzKiCfwlMy2uDL/XPgijwM+BqWF6cAxd0VV9Sf2S1nxI5vxoSvcA5cFbecLgv9cuCKPBnRNZnOdS/AE7LzSsMvtQXWe3PgZNynQ+Jlb6LcvOEmO+7wi/1w4IYyZ+yEvx84xj4BHzGqi/1wZLI8mfgiMj4JXA9qj40AMbAFrANTIgjvYP/9b8q6SHkgZ0z4APwG/AnUfG/BD/3+QZE4LeATWCj3DP80tOyIKr7EfA78Jao+DNgWVf8OvxjIvgTYIQP80hPSa7i/wW8I6r9R2It7xoi1LU8xD8gqv2E6ARyyG/llx63DP0JXejf063dAf8M/oLuTG++v1Ga4ZceryzaGfo/iNC/oxri54dXgw9d8PMU36B8Lpvhlx6XXMi7JEKelf4dMdzPg3lfrAt+faD/qrT8oSE3K78dgPTj1FX+jFjIe8vN0Oe5nBvWBb/+hfk0z6y8XnewZ3DLa0kPa1ld8xHbC6LKf6AL/XtiuD9lTejh60EdEvP7beAAeA68AA6BfWCHWP1fXQB0NCA9nCzEqwU5T9weEYfvPhGdQB69v/WBu7uEM+f4YyLo+8Cz0vaBXWLff0x0ErkW4BagdH/1gntOv6fE0P6UCPox3bM2M7pv1LrVXatyVvDsALaITiBbnvTL7b96F0DS98sKn+ttU2Lenk/UXpR/53T8To/Vf2swswPIKcB4Tcuqb/Cl+8mhfVb7ugPIVq+93fn5mr8BLA5xFhSlDAMAAAAASUVORK5CYII="/><image id="_Image4" width="944px" height="83px" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA7AAAABTCAYAAACmhetzAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAHfUlEQVR4nO3d/XMT1xUG4FeSbWyMgXy0yTD9//+yUlpCAwZj4y+pP5x70VoxYBcUacPzzOysfKRda8hkmJdz79lJ7m+SZJpk1o69JLvtmLb3J//HfQEAAPhrWSS5TnKV5DLJRXs9Hxx3dp+gOUkF1t1UaN1PcpDkMMnDJA+S7GQZYu97fwAAAMZtsfLzPBVYz5OctuMsyYdWu0gF3NXrbnWXgNk7rrup0HqU5HE7H+VmgJ1l2YEVXgEAAL5Pi8H5KhVUz5K8T3KS5F2S43Y+S3VnvxhkvxQyJ6muag+uPyT5qZ2Psgyue6nwOuy+AgAA8H1bpLqw11kuIT5LBdfXSf7bzm9bvS8vvtXnwmbvuh6mAuvf2vFjkkepULubzwfX1dpCXV1dXX3r6sN/6bxLfdu+j/rd6uv+b7ht30ddXV1dfbP1VYss97xepZYQn6TC66skL5P83moX+USIXf1l3TTVVT1KhdZfk/w9FWQPs+y4Tj5zDwAAABhatKN3ZM+SvEkF2BdJfkt1Y89TIfZGIN655YY9vD5J8kuSZ+38NDW0aTeCKwAAAPc3GRx9SHAfFLyb5WDgN6kQez28eDXATtpFR6mO6z9S3denqSXDOxFcAQAA+DrDIPswFWZ3slzpu8gyxH5cTryzcoOddvHPqc7rr6llw/uDGwEAAMC30Dux+1nmzb5Ptg90ukhbSjwbXDhLLRH+KdV5fZYa2HQQ4RUAAID1mKSWDU+z7MIuUsH1PBVkbwTYSZb7Xp+lAuzPqW6sZcMAAACsW+/G9gZqn1bc98IueoDtS4f7vtdfUo/K6QObAAAAYJ36ntjejZ2nphSfpS0j7sl2LzWo6Vk7niZ50C4CAACAP0MPsH2Q00WS01Qn9qon2wdJHqcGNh1FeAUAAGAz+tNxHqUy6pPUkKfpNMvhTU/aYWgTAAAAmzRLNVaPUs3WgyQ7fcrTQXvD0CYAAAA2bfiY149ZdZpqzT5McphKuLqvAAAAbNosNa/pMJVZ93qAPUitKd6Nva8AAABsXt8Lu5/KrLt9CfFeO3RfAQAA2BZ96PB+Wge2h1jhFQAAgG3RH6nTm667PcDOIsACAACwXYYhdjbNzQfFCrAAAABsk950nfaBTcPwKsQCAACwDSaDY2riMAAAANtukiwfmbMYvLH442cBAABgs3RgAQAAGIXhHtjc8hoAAAA2bZHowAIAADAOCwEWAACAMZgIsAAAAGw7U4gBAAAYDx1YAAAARsEUYgAAALadKcQAAACMhinEAAAAjIIpxAAAAGw9U4gBAAAYDx1YAAAARsEUYgAAALadKcQAAACMhinEAAAAjIIpxAAAAGw9U4gBAAAYDx1YAAAARsEUYgAAALadKcQAAACMhinEAAAAjIIpxAAAAGw9U4gBAAAYDx1YAAAARsEUYgAAALadKcQAAACMhinEAAAAjIIpxAAAAGw9U4gBAAAYDx1YAAAARsEUYgAAALadKcQAAACMhinEAAAAjIIpxAAAAGw9U4gBAAAYj2EHVnAFAABgmyzaMU/bA7tYOQAAAGBbLJJcJ7nuAXYe4RUAAIDt0sPrVVqAnbcfrtprAAAA2AaLVFa9SHI1bT+ct8J1dGIBAADYvN59vUjLrNP2w1mSD0kuowsLAADA5vXu63laXp2mQutpkvepMGs/LAAAAJs2T2XU03Zc9iXEZ0lOWvEqAiwAAACb07uvZ0neZRBg56l27Nv2xofYCwsAAMDmzFNLh98lOU5rtk4Hb7xN8ibVib2MAAsAAMCfb5HKpO+TvE4F2A9JrmdZBtVJkp0kD5McJNlLMm11AAAAWLc+efg0yW9J/tXO79MC7PCD01Rw3U/yIBVoJxFiAQAAWL++Qvh1khftOE4bONwD7GJwniTZTQXYvSSzVLAFAACAdelTh4+T/DvJ8ySvUt3Y66TCabdoF/TnwO6kAuxOKsAKsQAAAKxDD68nSf6T5J9JXqaGOH18Us5s5aK+3riH2FkqwPYQazkxAAAA31IPr+9SofV5qgP7celw/+BtAbaH2Kv2wUkqvA47sUIsAAAAX6Nnz/5Y15epzuuL1B7Y/ojXj1YDbDdPBdjL3AyyPcxOohsLAADA/fXtq5ep/a1vUh3X1fA6X73wUwE2gxuep9q2V6n027u03eQTrwEAACC5udr3Msuu66tUaH2e2vvan/k6z83cmaSWBX/q5tep8NqD7Fn7BT8m+SHJUeqZsXupqcXDacWCLAAAwPetB9B5lttUL1LZ8iTVaf29HcepZ71eZmXZ8NBdguYkFU73khymguvjJE+SPGq1g9Rjd3YjxAIAALBcKnyVao6epZYMn6Sao8ftfNreHw4UvtVdQ2bf77qTCqn7qe7rQTv31w9SYXe4P7afP7XsWF1dXV1dXV1dXV1dXf2vV19kubK3h9d+Pk0tFb7IMrgOr73V5EsfuOXzk1RI7Y/Y2WtH78D2AHvb/Rfq6urq6urqG6nf9nf+5+qb+j7r/r1j/z7r/p73/b33/T7f6v7r/vPZ1Pcca33d/09s6veqf129v16drdTnK/VhwXcKrt3/AL4iTQH3qKEwAAAAAElFTkSuQmCC"/></defs></svg> \ No newline at end of file
diff --git a/src/doc/embedded-book/src/assets/verify.jpeg b/src/doc/embedded-book/src/assets/verify.jpeg
new file mode 100644
index 000000000..a6e9376c5
--- /dev/null
+++ b/src/doc/embedded-book/src/assets/verify.jpeg
Binary files differ
diff --git a/src/doc/embedded-book/src/c-tips/index.md b/src/doc/embedded-book/src/c-tips/index.md
new file mode 100644
index 000000000..0c67108e2
--- /dev/null
+++ b/src/doc/embedded-book/src/c-tips/index.md
@@ -0,0 +1,417 @@
+# Tips for embedded C developers
+
+This chapter collects a variety of tips that might be useful to experienced
+embedded C developers looking to start writing Rust. It will especially
+highlight how things you might already be used to in C are different in Rust.
+
+## Preprocessor
+
+In embedded C it is very common to use the preprocessor for a variety of
+purposes, such as:
+
+* Compile-time selection of code blocks with `#ifdef`
+* Compile-time array sizes and computations
+* Macros to simplify common patterns (to avoid function call overhead)
+
+In Rust there is no preprocessor, and so many of these use cases are addressed
+differently. In the rest of this section we cover various alternatives to
+using the preprocessor.
+
+### Compile-Time Code Selection
+
+The closest match to `#ifdef ... #endif` in Rust are [Cargo features]. These
+are a little more formal than the C preprocessor: all possible features are
+explicitly listed per crate, and can only be either on or off. Features are
+turned on when you list a crate as a dependency, and are additive: if any crate
+in your dependency tree enables a feature for another crate, that feature will
+be enabled for all users of that crate.
+
+[Cargo features]: https://doc.rust-lang.org/cargo/reference/manifest.html#the-features-section
+
+For example, you might have a crate which provides a library of signal
+processing primitives. Each one might take some extra time to compile or
+declare some large table of constants which you'd like to avoid. You could
+declare a Cargo feature for each component in your `Cargo.toml`:
+
+```toml
+[features]
+FIR = []
+IIR = []
+```
+
+Then, in your code, use `#[cfg(feature="FIR")]` to control what is included.
+
+```rust
+/// In your top-level lib.rs
+
+#[cfg(feature="FIR")]
+pub mod fir;
+
+#[cfg(feature="IIR")]
+pub mod iir;
+```
+
+You can similarly include code blocks only if a feature is _not_ enabled, or if
+any combination of features are or are not enabled.
+
+Additionally, Rust provides a number of automatically-set conditions you can
+use, such as `target_arch` to select different code based on architecture. For
+full details of the conditional compilation support, refer to the
+[conditional compilation] chapter of the Rust reference.
+
+[conditional compilation]: https://doc.rust-lang.org/reference/conditional-compilation.html
+
+The conditional compilation will only apply to the next statement or block. If
+a block can not be used in the current scope then the `cfg` attribute will
+need to be used multiple times. It's worth noting that most of the time it is
+better to simply include all the code and allow the compiler to remove dead
+code when optimising: it's simpler for you and your users, and in general the
+compiler will do a good job of removing unused code.
+
+### Compile-Time Sizes and Computation
+
+Rust supports `const fn`, functions which are guaranteed to be evaluable at
+compile-time and can therefore be used where constants are required, such as
+in the size of arrays. This can be used alongside features mentioned above,
+for example:
+
+```rust
+const fn array_size() -> usize {
+ #[cfg(feature="use_more_ram")]
+ { 1024 }
+ #[cfg(not(feature="use_more_ram"))]
+ { 128 }
+}
+
+static BUF: [u32; array_size()] = [0u32; array_size()];
+```
+
+These are new to stable Rust as of 1.31, so documentation is still sparse. The
+functionality available to `const fn` is also very limited at the time of
+writing; in future Rust releases it is expected to expand on what is permitted
+in a `const fn`.
+
+### Macros
+
+Rust provides an extremely powerful [macro system]. While the C preprocessor
+operates almost directly on the text of your source code, the Rust macro system
+operates at a higher level. There are two varieties of Rust macro: _macros by
+example_ and _procedural macros_. The former are simpler and most common; they
+look like function calls and can expand to a complete expression, statement,
+item, or pattern. Procedural macros are more complex but permit extremely
+powerful additions to the Rust language: they can transform arbitrary Rust
+syntax into new Rust syntax.
+
+[macro system]: https://doc.rust-lang.org/book/ch19-06-macros.html
+
+In general, where you might have used a C preprocessor macro, you probably want
+to see if a macro-by-example can do the job instead. They can be defined in
+your crate and easily used by your own crate or exported for other users. Be
+aware that since they must expand to complete expressions, statements, items,
+or patterns, some use cases of C preprocessor macros will not work, for example
+a macro that expands to part of a variable name or an incomplete set of items
+in a list.
+
+As with Cargo features, it is worth considering if you even need the macro. In
+many cases a regular function is easier to understand and will be inlined to
+the same code as a macro. The `#[inline]` and `#[inline(always)]` [attributes]
+give you further control over this process, although care should be taken here
+as well — the compiler will automatically inline functions from the same crate
+where appropriate, so forcing it to do so inappropriately might actually lead
+to decreased performance.
+
+[attributes]: https://doc.rust-lang.org/reference/attributes.html#inline-attribute
+
+Explaining the entire Rust macro system is out of scope for this tips page, so
+you are encouraged to consult the Rust documentation for full details.
+
+## Build System
+
+Most Rust crates are built using Cargo (although it is not required). This
+takes care of many difficult problems with traditional build systems. However,
+you may wish to customise the build process. Cargo provides [`build.rs`
+scripts] for this purpose. They are Rust scripts which can interact with the
+Cargo build system as required.
+
+[`build.rs` scripts]: https://doc.rust-lang.org/cargo/reference/build-scripts.html
+
+Common use cases for build scripts include:
+
+* provide build-time information, for example statically embedding the build
+ date or Git commit hash into your executable
+* generate linker scripts at build time depending on selected features or other
+ logic
+* change the Cargo build configuration
+* add extra static libraries to link against
+
+At present there is no support for post-build scripts, which you might
+traditionally have used for tasks like automatic generation of binaries from
+the build objects or printing build information.
+
+### Cross-Compiling
+
+Using Cargo for your build system also simplifies cross-compiling. In most
+cases it suffices to tell Cargo `--target thumbv6m-none-eabi` and find a
+suitable executable in `target/thumbv6m-none-eabi/debug/myapp`.
+
+For platforms not natively supported by Rust, you will need to build `libcore`
+for that target yourself. On such platforms, [Xargo] can be used as a stand-in
+for Cargo which automatically builds `libcore` for you.
+
+[Xargo]: https://github.com/japaric/xargo
+
+## Iterators vs Array Access
+
+In C you are probably used to accessing arrays directly by their index:
+
+```c
+int16_t arr[16];
+int i;
+for(i=0; i<sizeof(arr)/sizeof(arr[0]); i++) {
+ process(arr[i]);
+}
+```
+
+In Rust this is an anti-pattern: indexed access can be slower (as it needs to
+be bounds checked) and may prevent various compiler optimisations. This is an
+important distinction and worth repeating: Rust will check for out-of-bounds
+access on manual array indexing to guarantee memory safety, while C will
+happily index outside the array.
+
+Instead, use iterators:
+
+```rust,ignore
+let arr = [0u16; 16];
+for element in arr.iter() {
+ process(*element);
+}
+```
+
+Iterators provide a powerful array of functionality you would have to implement
+manually in C, such as chaining, zipping, enumerating, finding the min or max,
+summing, and more. Iterator methods can also be chained, giving very readable
+data processing code.
+
+See the [Iterators in the Book] and [Iterator documentation] for more details.
+
+[Iterators in the Book]: https://doc.rust-lang.org/book/ch13-02-iterators.html
+[Iterator documentation]: https://doc.rust-lang.org/core/iter/trait.Iterator.html
+
+## References vs Pointers
+
+In Rust, pointers (called [_raw pointers_]) exist but are only used in specific
+circumstances, as dereferencing them is always considered `unsafe` -- Rust
+cannot provide its usual guarantees about what might be behind the pointer.
+
+[_raw pointers_]: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#dereferencing-a-raw-pointer
+
+In most cases, we instead use _references_, indicated by the `&` symbol, or
+_mutable references_, indicated by `&mut`. References behave similarly to
+pointers, in that they can be dereferenced to access the underlying values, but
+they are a key part of Rust's ownership system: Rust will strictly enforce that
+you may only have one mutable reference _or_ multiple non-mutable references to
+the same value at any given time.
+
+In practice this means you have to be more careful about whether you need
+mutable access to data: where in C the default is mutable and you must be
+explicit about `const`, in Rust the opposite is true.
+
+One situation where you might still use raw pointers is interacting directly
+with hardware (for example, writing a pointer to a buffer into a DMA peripheral
+register), and they are also used under the hood for all peripheral access
+crates to allow you to read and write memory-mapped registers.
+
+## Volatile Access
+
+In C, individual variables may be marked `volatile`, indicating to the compiler
+that the value in the variable may change between accesses. Volatile variables
+are commonly used in an embedded context for memory-mapped registers.
+
+In Rust, instead of marking a variable as `volatile`, we use specific methods
+to perform volatile access: [`core::ptr::read_volatile`] and
+[`core::ptr::write_volatile`]. These methods take a `*const T` or a `*mut T`
+(_raw pointers_, as discussed above) and perform a volatile read or write.
+
+[`core::ptr::read_volatile`]: https://doc.rust-lang.org/core/ptr/fn.read_volatile.html
+[`core::ptr::write_volatile`]: https://doc.rust-lang.org/core/ptr/fn.write_volatile.html
+
+For example, in C you might write:
+
+```c
+volatile bool signalled = false;
+
+void ISR() {
+ // Signal that the interrupt has occurred
+ signalled = true;
+}
+
+void driver() {
+ while(true) {
+ // Sleep until signalled
+ while(!signalled) { WFI(); }
+ // Reset signalled indicator
+ signalled = false;
+ // Perform some task that was waiting for the interrupt
+ run_task();
+ }
+}
+```
+
+The equivalent in Rust would use volatile methods on each access:
+
+```rust,ignore
+static mut SIGNALLED: bool = false;
+
+#[interrupt]
+fn ISR() {
+ // Signal that the interrupt has occurred
+ // (In real code, you should consider a higher level primitive,
+ // such as an atomic type).
+ unsafe { core::ptr::write_volatile(&mut SIGNALLED, true) };
+}
+
+fn driver() {
+ loop {
+ // Sleep until signalled
+ while unsafe { !core::ptr::read_volatile(&SIGNALLED) } {}
+ // Reset signalled indicator
+ unsafe { core::ptr::write_volatile(&mut SIGNALLED, false) };
+ // Perform some task that was waiting for the interrupt
+ run_task();
+ }
+}
+```
+
+A few things are worth noting in the code sample:
+ * We can pass `&mut SIGNALLED` into the function requiring `*mut T`, since
+ `&mut T` automatically converts to a `*mut T` (and the same for `*const T`)
+ * We need `unsafe` blocks for the `read_volatile`/`write_volatile` methods,
+ since they are `unsafe` functions. It is the programmer's responsibility
+ to ensure safe use: see the methods' documentation for further details.
+
+It is rare to require these functions directly in your code, as they will
+usually be taken care of for you by higher-level libraries. For memory mapped
+peripherals, the peripheral access crates will implement volatile access
+automatically, while for concurrency primitives there are better abstractions
+available (see the [Concurrency chapter]).
+
+[Concurrency chapter]: ../concurrency/index.md
+
+## Packed and Aligned Types
+
+In embedded C it is common to tell the compiler a variable must have a certain
+alignment or a struct must be packed rather than aligned, usually to meet
+specific hardware or protocol requirements.
+
+In Rust this is controlled by the `repr` attribute on a struct or union. The
+default representation provides no guarantees of layout, so should not be used
+for code that interoperates with hardware or C. The compiler may re-order
+struct members or insert padding and the behaviour may change with future
+versions of Rust.
+
+```rust
+struct Foo {
+ x: u16,
+ y: u8,
+ z: u16,
+}
+
+fn main() {
+ let v = Foo { x: 0, y: 0, z: 0 };
+ println!("{:p} {:p} {:p}", &v.x, &v.y, &v.z);
+}
+
+// 0x7ffecb3511d0 0x7ffecb3511d4 0x7ffecb3511d2
+// Note ordering has been changed to x, z, y to improve packing.
+```
+
+To ensure layouts that are interoperable with C, use `repr(C)`:
+
+```rust
+#[repr(C)]
+struct Foo {
+ x: u16,
+ y: u8,
+ z: u16,
+}
+
+fn main() {
+ let v = Foo { x: 0, y: 0, z: 0 };
+ println!("{:p} {:p} {:p}", &v.x, &v.y, &v.z);
+}
+
+// 0x7fffd0d84c60 0x7fffd0d84c62 0x7fffd0d84c64
+// Ordering is preserved and the layout will not change over time.
+// `z` is two-byte aligned so a byte of padding exists between `y` and `z`.
+```
+
+To ensure a packed representation, use `repr(packed)`:
+
+```rust
+#[repr(packed)]
+struct Foo {
+ x: u16,
+ y: u8,
+ z: u16,
+}
+
+fn main() {
+ let v = Foo { x: 0, y: 0, z: 0 };
+ // References must always be aligned, so to check the addresses of the
+ // struct's fields, we use `std::ptr::addr_of!()` to get a raw pointer
+ // instead of just printing `&v.x`.
+ let px = std::ptr::addr_of!(v.x);
+ let py = std::ptr::addr_of!(v.y);
+ let pz = std::ptr::addr_of!(v.z);
+ println!("{:p} {:p} {:p}", px, py, pz);
+}
+
+// 0x7ffd33598490 0x7ffd33598492 0x7ffd33598493
+// No padding has been inserted between `y` and `z`, so now `z` is unaligned.
+```
+
+Note that using `repr(packed)` also sets the alignment of the type to `1`.
+
+Finally, to specify a specific alignment, use `repr(align(n))`, where `n` is
+the number of bytes to align to (and must be a power of two):
+
+```rust
+#[repr(C)]
+#[repr(align(4096))]
+struct Foo {
+ x: u16,
+ y: u8,
+ z: u16,
+}
+
+fn main() {
+ let v = Foo { x: 0, y: 0, z: 0 };
+ let u = Foo { x: 0, y: 0, z: 0 };
+ println!("{:p} {:p} {:p}", &v.x, &v.y, &v.z);
+ println!("{:p} {:p} {:p}", &u.x, &u.y, &u.z);
+}
+
+// 0x7ffec909a000 0x7ffec909a002 0x7ffec909a004
+// 0x7ffec909b000 0x7ffec909b002 0x7ffec909b004
+// The two instances `u` and `v` have been placed on 4096-byte alignments,
+// evidenced by the `000` at the end of their addresses.
+```
+
+Note we can combine `repr(C)` with `repr(align(n))` to obtain an aligned and
+C-compatible layout. It is not permissible to combine `repr(align(n))` with
+`repr(packed)`, since `repr(packed)` sets the alignment to `1`. It is also not
+permissible for a `repr(packed)` type to contain a `repr(align(n))` type.
+
+For further details on type layouts, refer to the [type layout] chapter of the
+Rust Reference.
+
+[type layout]: https://doc.rust-lang.org/reference/type-layout.html
+
+## Other Resources
+
+* In this book:
+ * [A little C with your Rust](../interoperability/c-with-rust.md)
+ * [A little Rust with your C](../interoperability/rust-with-c.md)
+* [The Rust Embedded FAQs](https://docs.rust-embedded.org/faq.html)
+* [Rust Pointers for C Programmers](http://blahg.josefsipek.net/?p=580)
+* [I used to use pointers - now what?](https://github.com/diwic/reffers-rs/blob/master/docs/Pointers.md)
diff --git a/src/doc/embedded-book/src/collections/index.md b/src/doc/embedded-book/src/collections/index.md
new file mode 100644
index 000000000..7319a397a
--- /dev/null
+++ b/src/doc/embedded-book/src/collections/index.md
@@ -0,0 +1,262 @@
+# Collections
+
+Eventually you'll want to use dynamic data structures (AKA collections) in your
+program. `std` provides a set of common collections: [`Vec`], [`String`],
+[`HashMap`], etc. All the collections implemented in `std` use a global dynamic
+memory allocator (AKA the heap).
+
+[`Vec`]: https://doc.rust-lang.org/std/vec/struct.Vec.html
+[`String`]: https://doc.rust-lang.org/std/string/struct.String.html
+[`HashMap`]: https://doc.rust-lang.org/std/collections/struct.HashMap.html
+
+As `core` is, by definition, free of memory allocations these implementations
+are not available there, but they can be found in the `alloc` crate
+that's shipped with the compiler.
+
+If you need collections, a heap allocated implementation is not your only
+option. You can also use *fixed capacity* collections; one such implementation
+can be found in the [`heapless`] crate.
+
+[`heapless`]: https://crates.io/crates/heapless
+
+In this section, we'll explore and compare these two implementations.
+
+## Using `alloc`
+
+The `alloc` crate is shipped with the standard Rust distribution. To import the
+crate you can directly `use` it *without* declaring it as a dependency in your
+`Cargo.toml` file.
+
+``` rust,ignore
+#![feature(alloc)]
+
+extern crate alloc;
+
+use alloc::vec::Vec;
+```
+
+To be able to use any collection you'll first need use the `global_allocator`
+attribute to declare the global allocator your program will use. It's required
+that the allocator you select implements the [`GlobalAlloc`] trait.
+
+[`GlobalAlloc`]: https://doc.rust-lang.org/core/alloc/trait.GlobalAlloc.html
+
+For completeness and to keep this section as self-contained as possible we'll
+implement a simple bump pointer allocator and use that as the global allocator.
+However, we *strongly* suggest you use a battle tested allocator from crates.io
+in your program instead of this allocator.
+
+``` rust,ignore
+// Bump pointer allocator implementation
+
+extern crate cortex_m;
+
+use core::alloc::GlobalAlloc;
+use core::ptr;
+
+use cortex_m::interrupt;
+
+// Bump pointer allocator for *single* core systems
+struct BumpPointerAlloc {
+ head: UnsafeCell<usize>,
+ end: usize,
+}
+
+unsafe impl Sync for BumpPointerAlloc {}
+
+unsafe impl GlobalAlloc for BumpPointerAlloc {
+ unsafe fn alloc(&self, layout: Layout) -> *mut u8 {
+ // `interrupt::free` is a critical section that makes our allocator safe
+ // to use from within interrupts
+ interrupt::free(|_| {
+ let head = self.head.get();
+ let size = layout.size();
+ let align = layout.align();
+ let align_mask = !(align - 1);
+
+ // move start up to the next alignment boundary
+ let start = (*head + align - 1) & align_mask;
+
+ if start + size > self.end {
+ // a null pointer signal an Out Of Memory condition
+ ptr::null_mut()
+ } else {
+ *head = start + size;
+ start as *mut u8
+ }
+ })
+ }
+
+ unsafe fn dealloc(&self, _: *mut u8, _: Layout) {
+ // this allocator never deallocates memory
+ }
+}
+
+// Declaration of the global memory allocator
+// NOTE the user must ensure that the memory region `[0x2000_0100, 0x2000_0200]`
+// is not used by other parts of the program
+#[global_allocator]
+static HEAP: BumpPointerAlloc = BumpPointerAlloc {
+ head: UnsafeCell::new(0x2000_0100),
+ end: 0x2000_0200,
+};
+```
+
+Apart from selecting a global allocator the user will also have to define how
+Out Of Memory (OOM) errors are handled using the *unstable*
+`alloc_error_handler` attribute.
+
+``` rust,ignore
+#![feature(alloc_error_handler)]
+
+use cortex_m::asm;
+
+#[alloc_error_handler]
+fn on_oom(_layout: Layout) -> ! {
+ asm::bkpt();
+
+ loop {}
+}
+```
+
+Once all that is in place, the user can finally use the collections in `alloc`.
+
+```rust,ignore
+#[entry]
+fn main() -> ! {
+ let mut xs = Vec::new();
+
+ xs.push(42);
+ assert!(xs.pop(), Some(42));
+
+ loop {
+ // ..
+ }
+}
+```
+
+If you have used the collections in the `std` crate then these will be familiar
+as they are exact same implementation.
+
+## Using `heapless`
+
+`heapless` requires no setup as its collections don't depend on a global memory
+allocator. Just `use` its collections and proceed to instantiate them:
+
+```rust,ignore
+extern crate heapless; // v0.4.x
+
+use heapless::Vec;
+use heapless::consts::*;
+
+#[entry]
+fn main() -> ! {
+ let mut xs: Vec<_, U8> = Vec::new();
+
+ xs.push(42).unwrap();
+ assert_eq!(xs.pop(), Some(42));
+}
+```
+
+You'll note two differences between these collections and the ones in `alloc`.
+
+First, you have to declare upfront the capacity of the collection. `heapless`
+collections never reallocate and have fixed capacities; this capacity is part of
+the type signature of the collection. In this case we have declared that `xs`
+has a capacity of 8 elements that is the vector can, at most, hold 8 elements.
+This is indicated by the `U8` (see [`typenum`]) in the type signature.
+
+[`typenum`]: https://crates.io/crates/typenum
+
+Second, the `push` method, and many other methods, return a `Result`. Since the
+`heapless` collections have fixed capacity all operations that insert elements
+into the collection can potentially fail. The API reflects this problem by
+returning a `Result` indicating whether the operation succeeded or not. In
+contrast, `alloc` collections will reallocate themselves on the heap to increase
+their capacity.
+
+As of version v0.4.x all `heapless` collections store all their elements inline.
+This means that an operation like `let x = heapless::Vec::new();` will allocate
+the collection on the stack, but it's also possible to allocate the collection
+on a `static` variable, or even on the heap (`Box<Vec<_, _>>`).
+
+## Trade-offs
+
+Keep these in mind when choosing between heap allocated, relocatable collections
+and fixed capacity collections.
+
+### Out Of Memory and error handling
+
+With heap allocations Out Of Memory is always a possibility and can occur in
+any place where a collection may need to grow: for example, all
+`alloc::Vec.push` invocations can potentially generate an OOM condition. Thus
+some operations can *implicitly* fail. Some `alloc` collections expose
+`try_reserve` methods that let you check for potential OOM conditions when
+growing the collection but you need be proactive about using them.
+
+If you exclusively use `heapless` collections and you don't use a memory
+allocator for anything else then an OOM condition is impossible. Instead, you'll
+have to deal with collections running out of capacity on a case by case basis.
+That is you'll have deal with *all* the `Result`s returned by methods like
+`Vec.push`.
+
+OOM failures can be harder to debug than say `unwrap`-ing on all `Result`s
+returned by `heapless::Vec.push` because the observed location of failure may
+*not* match with the location of the cause of the problem. For example, even
+`vec.reserve(1)` can trigger an OOM if the allocator is nearly exhausted because
+some other collection was leaking memory (memory leaks are possible in safe
+Rust).
+
+### Memory usage
+
+Reasoning about memory usage of heap allocated collections is hard because the
+capacity of long lived collections can change at runtime. Some operations may
+implicitly reallocate the collection increasing its memory usage, and some
+collections expose methods like `shrink_to_fit` that can potentially reduce the
+memory used by the collection -- ultimately, it's up to the allocator to decide
+whether to actually shrink the memory allocation or not. Additionally, the
+allocator may have to deal with memory fragmentation which can increase the
+*apparent* memory usage.
+
+On the other hand if you exclusively use fixed capacity collections, store
+most of them in `static` variables and set a maximum size for the call stack
+then the linker will detect if you try to use more memory than what's physically
+available.
+
+Furthermore, fixed capacity collections allocated on the stack will be reported
+by [`-Z emit-stack-sizes`] flag which means that tools that analyze stack usage
+(like [`stack-sizes`]) will include them in their analysis.
+
+[`-Z emit-stack-sizes`]: https://doc.rust-lang.org/beta/unstable-book/compiler-flags/emit-stack-sizes.html
+[`stack-sizes`]: https://crates.io/crates/stack-sizes
+
+However, fixed capacity collections can *not* be shrunk which can result in
+lower load factors (the ratio between the size of the collection and its
+capacity) than what relocatable collections can achieve.
+
+### Worst Case Execution Time (WCET)
+
+If you are building time sensitive applications or hard real time applications
+then you care, maybe a lot, about the worst case execution time of the different
+parts of your program.
+
+The `alloc` collections can reallocate so the WCET of operations that may grow
+the collection will also include the time it takes to reallocate the collection,
+which itself depends on the *runtime* capacity of the collection. This makes it
+hard to determine the WCET of, for example, the `alloc::Vec.push` operation as
+it depends on both the allocator being used and its runtime capacity.
+
+On the other hand fixed capacity collections never reallocate so all operations
+have a predictable execution time. For example, `heapless::Vec.push` executes in
+constant time.
+
+### Ease of use
+
+`alloc` requires setting up a global allocator whereas `heapless` does not.
+However, `heapless` requires you to pick the capacity of each collection that
+you instantiate.
+
+The `alloc` API will be familiar to virtually every Rust developer. The
+`heapless` API tries to closely mimic the `alloc` API but it will never be
+exactly the same due to its explicit error handling -- some developers may feel
+the explicit error handling is excessive or too cumbersome.
diff --git a/src/doc/embedded-book/src/concurrency/index.md b/src/doc/embedded-book/src/concurrency/index.md
new file mode 100644
index 000000000..fe30e235e
--- /dev/null
+++ b/src/doc/embedded-book/src/concurrency/index.md
@@ -0,0 +1,607 @@
+# Concurrency
+
+Concurrency happens whenever different parts of your program might execute
+at different times or out of order. In an embedded context, this includes:
+
+* interrupt handlers, which run whenever the associated interrupt happens,
+* various forms of multithreading, where your microprocessor regularly swaps
+ between parts of your program,
+* and in some systems, multiple-core microprocessors, where each core can be
+ independently running a different part of your program at the same time.
+
+Since many embedded programs need to deal with interrupts, concurrency will
+usually come up sooner or later, and it's also where many subtle and difficult
+bugs can occur. Luckily, Rust provides a number of abstractions and safety
+guarantees to help us write correct code.
+
+## No Concurrency
+
+The simplest concurrency for an embedded program is no concurrency: your
+software consists of a single main loop which just keeps running, and there
+are no interrupts at all. Sometimes this is perfectly suited to the problem
+at hand! Typically your loop will read some inputs, perform some processing,
+and write some outputs.
+
+```rust,ignore
+#[entry]
+fn main() {
+ let peripherals = setup_peripherals();
+ loop {
+ let inputs = read_inputs(&peripherals);
+ let outputs = process(inputs);
+ write_outputs(&peripherals, outputs);
+ }
+}
+```
+
+Since there's no concurrency, there's no need to worry about sharing data
+between parts of your program or synchronising access to peripherals. If
+you can get away with such a simple approach this can be a great solution.
+
+## Global Mutable Data
+
+Unlike non-embedded Rust, we will not usually have the luxury of creating
+heap allocations and passing references to that data into a newly-created
+thread. Instead, our interrupt handlers might be called at any time and must
+know how to access whatever shared memory we are using. At the lowest level,
+this means we must have _statically allocated_ mutable memory, which
+both the interrupt handler and the main code can refer to.
+
+In Rust, such [`static mut`] variables are always unsafe to read or write,
+because without taking special care, you might trigger a race condition,
+where your access to the variable is interrupted halfway through by an
+interrupt which also accesses that variable.
+
+[`static mut`]: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html#accessing-or-modifying-a-mutable-static-variable
+
+For an example of how this behaviour can cause subtle errors in your code,
+consider an embedded program which counts rising edges of some input signal
+in each one-second period (a frequency counter):
+
+```rust,ignore
+static mut COUNTER: u32 = 0;
+
+#[entry]
+fn main() -> ! {
+ set_timer_1hz();
+ let mut last_state = false;
+ loop {
+ let state = read_signal_level();
+ if state && !last_state {
+ // DANGER - Not actually safe! Could cause data races.
+ unsafe { COUNTER += 1 };
+ }
+ last_state = state;
+ }
+}
+
+#[interrupt]
+fn timer() {
+ unsafe { COUNTER = 0; }
+}
+```
+
+Each second, the timer interrupt sets the counter back to 0. Meanwhile, the
+main loop continually measures the signal, and incremements the counter when
+it sees a change from low to high. We've had to use `unsafe` to access
+`COUNTER`, as it's `static mut`, and that means we're promising the compiler
+we won't cause any undefined behaviour. Can you spot the race condition? The
+increment on `COUNTER` is _not_ guaranteed to be atomic — in fact, on most
+embedded platforms, it will be split into a load, then the increment, then
+a store. If the interrupt fired after the load but before the store, the
+reset back to 0 would be ignored after the interrupt returns — and we would
+count twice as many transitions for that period.
+
+## Critical Sections
+
+So, what can we do about data races? A simple approach is to use _critical
+sections_, a context where interrupts are disabled. By wrapping the access to
+`COUNTER` in `main` in a critical section, we can be sure the timer interrupt
+will not fire until we're finished incrementing `COUNTER`:
+
+```rust,ignore
+static mut COUNTER: u32 = 0;
+
+#[entry]
+fn main() -> ! {
+ set_timer_1hz();
+ let mut last_state = false;
+ loop {
+ let state = read_signal_level();
+ if state && !last_state {
+ // New critical section ensures synchronised access to COUNTER
+ cortex_m::interrupt::free(|_| {
+ unsafe { COUNTER += 1 };
+ });
+ }
+ last_state = state;
+ }
+}
+
+#[interrupt]
+fn timer() {
+ unsafe { COUNTER = 0; }
+}
+```
+
+In this example, we use `cortex_m::interrupt::free`, but other platforms will
+have similar mechanisms for executing code in a critical section. This is also
+the same as disabling interrupts, running some code, and then re-enabling
+interrupts.
+
+Note we didn't need to put a critical section inside the timer interrupt,
+for two reasons:
+
+ * Writing 0 to `COUNTER` can't be affected by a race since we don't read it
+ * It will never be interrupted by the `main` thread anyway
+
+If `COUNTER` was being shared by multiple interrupt handlers that might
+_preempt_ each other, then each one might require a critical section as well.
+
+This solves our immediate problem, but we're still left writing a lot of unsafe code which we need to carefully reason about, and we might be using critical sections needlessly. Since each critical section temporarily pauses interrupt processing, there is an associated cost of some extra code size and higher interrupt latency and jitter (interrupts may take longer to be processed, and the time until they are processed will be more variable). Whether this is a problem depends on your system, but in general, we'd like to avoid it.
+
+It's worth noting that while a critical section guarantees no interrupts will
+fire, it does not provide an exclusivity guarantee on multi-core systems! The
+other core could be happily accessing the same memory as your core, even
+without interrupts. You will need stronger synchronisation primitives if you
+are using multiple cores.
+
+## Atomic Access
+
+On some platforms, special atomic instructions are available, which provide
+guarantees about read-modify-write operations. Specifically for Cortex-M: `thumbv6`
+(Cortex-M0, Cortex-M0+) only provide atomic load and store instructions,
+while `thumbv7` (Cortex-M3 and above) provide full Compare and Swap (CAS)
+instructions. These CAS instructions give an alternative to the heavy-handed
+disabling of all interrupts: we can attempt the increment, it will succeed most
+of the time, but if it was interrupted it will automatically retry the entire
+increment operation. These atomic operations are safe even across multiple
+cores.
+
+```rust,ignore
+use core::sync::atomic::{AtomicUsize, Ordering};
+
+static COUNTER: AtomicUsize = AtomicUsize::new(0);
+
+#[entry]
+fn main() -> ! {
+ set_timer_1hz();
+ let mut last_state = false;
+ loop {
+ let state = read_signal_level();
+ if state && !last_state {
+ // Use `fetch_add` to atomically add 1 to COUNTER
+ COUNTER.fetch_add(1, Ordering::Relaxed);
+ }
+ last_state = state;
+ }
+}
+
+#[interrupt]
+fn timer() {
+ // Use `store` to write 0 directly to COUNTER
+ COUNTER.store(0, Ordering::Relaxed)
+}
+```
+
+This time `COUNTER` is a safe `static` variable. Thanks to the `AtomicUsize`
+type `COUNTER` can be safely modified from both the interrupt handler and the
+main thread without disabling interrupts. When possible, this is a better
+solution — but it may not be supported on your platform.
+
+A note on [`Ordering`]: this affects how the compiler and hardware may reorder
+instructions, and also has consequences on cache visibility. Assuming that the
+target is a single core platform `Relaxed` is sufficient and the most efficient
+choice in this particular case. Stricter ordering will cause the compiler to
+emit memory barriers around the atomic operations; depending on what you're
+using atomics for you may or may not need this! The precise details of the
+atomic model are complicated and best described elsewhere.
+
+For more details on atomics and ordering, see the [nomicon].
+
+[`Ordering`]: https://doc.rust-lang.org/core/sync/atomic/enum.Ordering.html
+[nomicon]: https://doc.rust-lang.org/nomicon/atomics.html
+
+
+## Abstractions, Send, and Sync
+
+None of the above solutions are especially satisfactory. They require `unsafe`
+blocks which must be very carefully checked and are not ergonomic. Surely we
+can do better in Rust!
+
+We can abstract our counter into a safe interface which can be safely used
+anywhere else in our code. For this example, we'll use the critical-section
+counter, but you could do something very similar with atomics.
+
+```rust,ignore
+use core::cell::UnsafeCell;
+use cortex_m::interrupt;
+
+// Our counter is just a wrapper around UnsafeCell<u32>, which is the heart
+// of interior mutability in Rust. By using interior mutability, we can have
+// COUNTER be `static` instead of `static mut`, but still able to mutate
+// its counter value.
+struct CSCounter(UnsafeCell<u32>);
+
+const CS_COUNTER_INIT: CSCounter = CSCounter(UnsafeCell::new(0));
+
+impl CSCounter {
+ pub fn reset(&self, _cs: &interrupt::CriticalSection) {
+ // By requiring a CriticalSection be passed in, we know we must
+ // be operating inside a CriticalSection, and so can confidently
+ // use this unsafe block (required to call UnsafeCell::get).
+ unsafe { *self.0.get() = 0 };
+ }
+
+ pub fn increment(&self, _cs: &interrupt::CriticalSection) {
+ unsafe { *self.0.get() += 1 };
+ }
+}
+
+// Required to allow static CSCounter. See explanation below.
+unsafe impl Sync for CSCounter {}
+
+// COUNTER is no longer `mut` as it uses interior mutability;
+// therefore it also no longer requires unsafe blocks to access.
+static COUNTER: CSCounter = CS_COUNTER_INIT;
+
+#[entry]
+fn main() -> ! {
+ set_timer_1hz();
+ let mut last_state = false;
+ loop {
+ let state = read_signal_level();
+ if state && !last_state {
+ // No unsafe here!
+ interrupt::free(|cs| COUNTER.increment(cs));
+ }
+ last_state = state;
+ }
+}
+
+#[interrupt]
+fn timer() {
+ // We do need to enter a critical section here just to obtain a valid
+ // cs token, even though we know no other interrupt could pre-empt
+ // this one.
+ interrupt::free(|cs| COUNTER.reset(cs));
+
+ // We could use unsafe code to generate a fake CriticalSection if we
+ // really wanted to, avoiding the overhead:
+ // let cs = unsafe { interrupt::CriticalSection::new() };
+}
+```
+
+We've moved our `unsafe` code to inside our carefully-planned abstraction,
+and now our application code does not contain any `unsafe` blocks.
+
+This design requires that the application pass a `CriticalSection` token in:
+these tokens are only safely generated by `interrupt::free`, so by requiring
+one be passed in, we ensure we are operating inside a critical section, without
+having to actually do the lock ourselves. This guarantee is provided statically
+by the compiler: there won't be any runtime overhead associated with `cs`.
+If we had multiple counters, they could all be given the same `cs`, without
+requiring multiple nested critical sections.
+
+This also brings up an important topic for concurrency in Rust: the
+[`Send` and `Sync`] traits. To summarise the Rust book, a type is Send
+when it can safely be moved to another thread, while it is Sync when
+it can be safely shared between multiple threads. In an embedded context,
+we consider interrupts to be executing in a separate thread to the application
+code, so variables accessed by both an interrupt and the main code must be
+Sync.
+
+[`Send` and `Sync`]: https://doc.rust-lang.org/nomicon/send-and-sync.html
+
+For most types in Rust, both of these traits are automatically derived for you
+by the compiler. However, because `CSCounter` contains an [`UnsafeCell`], it is
+not Sync, and therefore we could not make a `static CSCounter`: `static`
+variables _must_ be Sync, since they can be accessed by multiple threads.
+
+[`UnsafeCell`]: https://doc.rust-lang.org/core/cell/struct.UnsafeCell.html
+
+To tell the compiler we have taken care that the `CSCounter` is in fact safe
+to share between threads, we implement the Sync trait explicitly. As with the
+previous use of critical sections, this is only safe on single-core platforms:
+with multiple cores, you would need to go to greater lengths to ensure safety.
+
+## Mutexes
+
+We've created a useful abstraction specific to our counter problem, but
+there are many common abstractions used for concurrency.
+
+One such _synchronisation primitive_ is a mutex, short for mutual exclusion.
+These constructs ensure exclusive access to a variable, such as our counter. A
+thread can attempt to _lock_ (or _acquire_) the mutex, and either succeeds
+immediately, or blocks waiting for the lock to be acquired, or returns an error
+that the mutex could not be locked. While that thread holds the lock, it is
+granted access to the protected data. When the thread is done, it _unlocks_ (or
+_releases_) the mutex, allowing another thread to lock it. In Rust, we would
+usually implement the unlock using the [`Drop`] trait to ensure it is always
+released when the mutex goes out of scope.
+
+[`Drop`]: https://doc.rust-lang.org/core/ops/trait.Drop.html
+
+Using a mutex with interrupt handlers can be tricky: it is not normally
+acceptable for the interrupt handler to block, and it would be especially
+disastrous for it to block waiting for the main thread to release a lock,
+since we would then _deadlock_ (the main thread will never release the lock
+because execution stays in the interrupt handler). Deadlocking is not
+considered unsafe: it is possible even in safe Rust.
+
+To avoid this behaviour entirely, we could implement a mutex which requires
+a critical section to lock, just like our counter example. So long as the
+critical section must last as long as the lock, we can be sure we have
+exclusive access to the wrapped variable without even needing to track
+the lock/unlock state of the mutex.
+
+This is in fact done for us in the `cortex_m` crate! We could have written
+our counter using it:
+
+```rust,ignore
+use core::cell::Cell;
+use cortex_m::interrupt::Mutex;
+
+static COUNTER: Mutex<Cell<u32>> = Mutex::new(Cell::new(0));
+
+#[entry]
+fn main() -> ! {
+ set_timer_1hz();
+ let mut last_state = false;
+ loop {
+ let state = read_signal_level();
+ if state && !last_state {
+ interrupt::free(|cs|
+ COUNTER.borrow(cs).set(COUNTER.borrow(cs).get() + 1));
+ }
+ last_state = state;
+ }
+}
+
+#[interrupt]
+fn timer() {
+ // We still need to enter a critical section here to satisfy the Mutex.
+ interrupt::free(|cs| COUNTER.borrow(cs).set(0));
+}
+```
+
+We're now using [`Cell`], which along with its sibling `RefCell` is used to
+provide safe interior mutability. We've already seen `UnsafeCell` which is
+the bottom layer of interior mutability in Rust: it allows you to obtain
+multiple mutable references to its value, but only with unsafe code. A `Cell`
+is like an `UnsafeCell` but it provides a safe interface: it only permits
+taking a copy of the current value or replacing it, not taking a reference,
+and since it is not Sync, it cannot be shared between threads. These
+constraints mean it's safe to use, but we couldn't use it directly in a
+`static` variable as a `static` must be Sync.
+
+[`Cell`]: https://doc.rust-lang.org/core/cell/struct.Cell.html
+
+So why does the example above work? The `Mutex<T>` implements Sync for any
+`T` which is Send — such as a `Cell`. It can do this safely because it only
+gives access to its contents during a critical section. We're therefore able
+to get a safe counter with no unsafe code at all!
+
+This is great for simple types like the `u32` of our counter, but what about
+more complex types which are not Copy? An extremely common example in an
+embedded context is a peripheral struct, which generally is not Copy.
+For that, we can turn to `RefCell`.
+
+## Sharing Peripherals
+
+Device crates generated using `svd2rust` and similar abstractions provide
+safe access to peripherals by enforcing that only one instance of the
+peripheral struct can exist at a time. This ensures safety, but makes it
+difficult to access a peripheral from both the main thread and an interrupt
+handler.
+
+To safely share peripheral access, we can use the `Mutex` we saw before. We'll
+also need to use [`RefCell`], which uses a runtime check to ensure only one
+reference to a peripheral is given out at a time. This has more overhead than
+the plain `Cell`, but since we are giving out references rather than copies,
+we must be sure only one exists at a time.
+
+[`RefCell`]: https://doc.rust-lang.org/core/cell/struct.RefCell.html
+
+Finally, we'll also have to account for somehow moving the peripheral into
+the shared variable after it has been initialised in the main code. To do
+this we can use the `Option` type, initialised to `None` and later set to
+the instance of the peripheral.
+
+```rust,ignore
+use core::cell::RefCell;
+use cortex_m::interrupt::{self, Mutex};
+use stm32f4::stm32f405;
+
+static MY_GPIO: Mutex<RefCell<Option<stm32f405::GPIOA>>> =
+ Mutex::new(RefCell::new(None));
+
+#[entry]
+fn main() -> ! {
+ // Obtain the peripheral singletons and configure it.
+ // This example is from an svd2rust-generated crate, but
+ // most embedded device crates will be similar.
+ let dp = stm32f405::Peripherals::take().unwrap();
+ let gpioa = &dp.GPIOA;
+
+ // Some sort of configuration function.
+ // Assume it sets PA0 to an input and PA1 to an output.
+ configure_gpio(gpioa);
+
+ // Store the GPIOA in the mutex, moving it.
+ interrupt::free(|cs| MY_GPIO.borrow(cs).replace(Some(dp.GPIOA)));
+ // We can no longer use `gpioa` or `dp.GPIOA`, and instead have to
+ // access it via the mutex.
+
+ // Be careful to enable the interrupt only after setting MY_GPIO:
+ // otherwise the interrupt might fire while it still contains None,
+ // and as-written (with `unwrap()`), it would panic.
+ set_timer_1hz();
+ let mut last_state = false;
+ loop {
+ // We'll now read state as a digital input, via the mutex
+ let state = interrupt::free(|cs| {
+ let gpioa = MY_GPIO.borrow(cs).borrow();
+ gpioa.as_ref().unwrap().idr.read().idr0().bit_is_set()
+ });
+
+ if state && !last_state {
+ // Set PA1 high if we've seen a rising edge on PA0.
+ interrupt::free(|cs| {
+ let gpioa = MY_GPIO.borrow(cs).borrow();
+ gpioa.as_ref().unwrap().odr.modify(|_, w| w.odr1().set_bit());
+ });
+ }
+ last_state = state;
+ }
+}
+
+#[interrupt]
+fn timer() {
+ // This time in the interrupt we'll just clear PA0.
+ interrupt::free(|cs| {
+ // We can use `unwrap()` because we know the interrupt wasn't enabled
+ // until after MY_GPIO was set; otherwise we should handle the potential
+ // for a None value.
+ let gpioa = MY_GPIO.borrow(cs).borrow();
+ gpioa.as_ref().unwrap().odr.modify(|_, w| w.odr1().clear_bit());
+ });
+}
+```
+
+That's quite a lot to take in, so let's break down the important lines.
+
+```rust,ignore
+static MY_GPIO: Mutex<RefCell<Option<stm32f405::GPIOA>>> =
+ Mutex::new(RefCell::new(None));
+```
+
+Our shared variable is now a `Mutex` around a `RefCell` which contains an
+`Option`. The `Mutex` ensures we only have access during a critical section,
+and therefore makes the variable Sync, even though a plain `RefCell` would not
+be Sync. The `RefCell` gives us interior mutability with references, which
+we'll need to use our `GPIOA`. The `Option` lets us initialise this variable
+to something empty, and only later actually move the variable in. We cannot
+access the peripheral singleton statically, only at runtime, so this is
+required.
+
+```rust,ignore
+interrupt::free(|cs| MY_GPIO.borrow(cs).replace(Some(dp.GPIOA)));
+```
+
+Inside a critical section we can call `borrow()` on the mutex, which gives us
+a reference to the `RefCell`. We then call `replace()` to move our new value
+into the `RefCell`.
+
+```rust,ignore
+interrupt::free(|cs| {
+ let gpioa = MY_GPIO.borrow(cs).borrow();
+ gpioa.as_ref().unwrap().odr.modify(|_, w| w.odr1().set_bit());
+});
+```
+
+Finally, we use `MY_GPIO` in a safe and concurrent fashion. The critical section
+prevents the interrupt firing as usual, and lets us borrow the mutex. The
+`RefCell` then gives us an `&Option<GPIOA>`, and tracks how long it remains
+borrowed - once that reference goes out of scope, the `RefCell` will be updated
+to indicate it is no longer borrowed.
+
+Since we can't move the `GPIOA` out of the `&Option`, we need to convert it to
+an `&Option<&GPIOA>` with `as_ref()`, which we can finally `unwrap()` to obtain
+the `&GPIOA` which lets us modify the peripheral.
+
+If we need a mutable reference to a shared resource, then `borrow_mut` and `deref_mut`
+should be used instead. The following code shows an example using the TIM2 timer.
+
+```rust,ignore
+use core::cell::RefCell;
+use core::ops::DerefMut;
+use cortex_m::interrupt::{self, Mutex};
+use cortex_m::asm::wfi;
+use stm32f4::stm32f405;
+
+static G_TIM: Mutex<RefCell<Option<Timer<stm32::TIM2>>>> =
+ Mutex::new(RefCell::new(None));
+
+#[entry]
+fn main() -> ! {
+ let mut cp = cm::Peripherals::take().unwrap();
+ let dp = stm32f405::Peripherals::take().unwrap();
+
+ // Some sort of timer configuration function.
+ // Assume it configures the TIM2 timer, its NVIC interrupt,
+ // and finally starts the timer.
+ let tim = configure_timer_interrupt(&mut cp, dp);
+
+ interrupt::free(|cs| {
+ G_TIM.borrow(cs).replace(Some(tim));
+ });
+
+ loop {
+ wfi();
+ }
+}
+
+#[interrupt]
+fn timer() {
+ interrupt::free(|cs| {
+ if let Some(ref mut tim)) = G_TIM.borrow(cs).borrow_mut().deref_mut() {
+ tim.start(1.hz());
+ }
+ });
+}
+
+```
+
+Whew! This is safe, but it is also a little unwieldy. Is there anything else
+we can do?
+
+## RTIC
+
+One alternative is the [RTIC framework], short for Real Time Interrupt-driven Concurrency. It
+enforces static priorities and tracks accesses to `static mut` variables
+("resources") to statically ensure that shared resources are always accessed
+safely, without requiring the overhead of always entering critical sections and
+using reference counting (as in `RefCell`). This has a number of advantages such
+as guaranteeing no deadlocks and giving extremely low time and memory overhead.
+
+[RTIC framework]: https://github.com/rtic-rs/cortex-m-rtic
+
+The framework also includes other features like message passing, which reduces
+the need for explicit shared state, and the ability to schedule tasks to run at
+a given time, which can be used to implement periodic tasks. Check out [the
+documentation] for more information!
+
+[the documentation]: https://rtic.rs
+
+## Real Time Operating Systems
+
+Another common model for embedded concurrency is the real-time operating system
+(RTOS). While currently less well explored in Rust, they are widely used in
+traditional embedded development. Open source examples include [FreeRTOS] and
+[ChibiOS]. These RTOSs provide support for running multiple application threads
+which the CPU swaps between, either when the threads yield control (called
+cooperative multitasking) or based on a regular timer or interrupts (preemptive
+multitasking). The RTOS typically provide mutexes and other synchronisation
+primitives, and often interoperate with hardware features such as DMA engines.
+
+[FreeRTOS]: https://freertos.org/
+[ChibiOS]: http://chibios.org/
+
+At the time of writing, there are not many Rust RTOS examples to point to,
+but it's an interesting area so watch this space!
+
+## Multiple Cores
+
+It is becoming more common to have two or more cores in embedded processors,
+which adds an extra layer of complexity to concurrency. All the examples using
+a critical section (including the `cortex_m::interrupt::Mutex`) assume the only
+other execution thread is the interrupt thread, but on a multi-core system
+that's no longer true. Instead, we'll need synchronisation primitives designed
+for multiple cores (also called SMP, for symmetric multi-processing).
+
+These typically use the atomic instructions we saw earlier, since the
+processing system will ensure that atomicity is maintained over all cores.
+
+Covering these topics in detail is currently beyond the scope of this book,
+but the general patterns are the same as for the single-core case.
diff --git a/src/doc/embedded-book/src/design-patterns/hal/checklist.md b/src/doc/embedded-book/src/design-patterns/hal/checklist.md
new file mode 100644
index 000000000..6fdf98b79
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/hal/checklist.md
@@ -0,0 +1,26 @@
+# HAL Design Patterns Checklist
+
+- **Naming** *(crate aligns with Rust naming conventions)*
+ - [ ] The crate is named appropriately ([C-CRATE-NAME])
+- **Interoperability** *(crate interacts nicely with other library functionality)*
+ - [ ] Wrapper types provide a destructor method ([C-FREE])
+ - [ ] HALs reexport their register access crate ([C-REEXPORT-PAC])
+ - [ ] Types implement the `embedded-hal` traits ([C-HAL-TRAITS])
+- **Predictability** *(crate enables legible code that acts how it looks)*
+ - [ ] Constructors are used instead of extension traits ([C-CTOR])
+- **GPIO Interfaces** *(GPIO Interfaces follow a common pattern)*
+ - [ ] Pin types are zero-sized by default ([C-ZST-PIN])
+ - [ ] Pin types provide methods to erase pin and port ([C-ERASED-PIN])
+ - [ ] Pin state should be encoded as type parameters ([C-PIN-STATE])
+
+[C-CRATE-NAME]: naming.html#c-crate-name
+
+[C-FREE]: interoperability.html#c-free
+[C-REEXPORT-PAC]: interoperability.html#c-reexport-pac
+[C-HAL-TRAITS]: interoperability.html#c-hal-traits
+
+[C-CTOR]: predictability.html#c-ctor
+
+[C-ZST-PIN]: gpio.md#c-zst-pin
+[C-ERASED-PIN]: gpio.md#c-erased-pin
+[C-PIN-STATE]: gpio.md#c-pin-state
diff --git a/src/doc/embedded-book/src/design-patterns/hal/gpio.md b/src/doc/embedded-book/src/design-patterns/hal/gpio.md
new file mode 100644
index 000000000..6582070c9
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/hal/gpio.md
@@ -0,0 +1,205 @@
+# Recommendations for GPIO Interfaces
+
+<a id="c-zst-pin"></a>
+## Pin types are zero-sized by default (C-ZST-PIN)
+
+GPIO Interfaces exposed by the HAL should provide dedicated zero-sized types for
+each pin on every interface or port, resulting in a zero-cost GPIO abstraction
+when all pin assignments are statically known.
+
+Each GPIO Interface or Port should implement a `split` method returning a
+struct with every pin.
+
+Example:
+
+```rust
+pub struct PA0;
+pub struct PA1;
+// ...
+
+pub struct PortA;
+
+impl PortA {
+ pub fn split(self) -> PortAPins {
+ PortAPins {
+ pa0: PA0,
+ pa1: PA1,
+ // ...
+ }
+ }
+}
+
+pub struct PortAPins {
+ pub pa0: PA0,
+ pub pa1: PA1,
+ // ...
+}
+```
+
+<a id="c-erased-pin"></a>
+## Pin types provide methods to erase pin and port (C-ERASED-PIN)
+
+Pins should provide type erasure methods that move their properties from
+compile time to runtime, and allow more flexibility in applications.
+
+Example:
+
+```rust
+/// Port A, pin 0.
+pub struct PA0;
+
+impl PA0 {
+ pub fn erase_pin(self) -> PA {
+ PA { pin: 0 }
+ }
+}
+
+/// A pin on port A.
+pub struct PA {
+ /// The pin number.
+ pin: u8,
+}
+
+impl PA {
+ pub fn erase_port(self) -> Pin {
+ Pin {
+ port: Port::A,
+ pin: self.pin,
+ }
+ }
+}
+
+pub struct Pin {
+ port: Port,
+ pin: u8,
+ // (these fields can be packed to reduce the memory footprint)
+}
+
+enum Port {
+ A,
+ B,
+ C,
+ D,
+}
+```
+
+<a id="c-pin-state"></a>
+## Pin state should be encoded as type parameters (C-PIN-STATE)
+
+Pins may be configured as input or output with different characteristics
+depending on the chip or family. This state should be encoded in the type system
+to prevent use of pins in incorrect states.
+
+Additional, chip-specific state (eg. drive strength) may also be encoded in this
+way, using additional type parameters.
+
+Methods for changing the pin state should be provided as `into_input` and
+`into_output` methods.
+
+Additionally, `with_{input,output}_state` methods should be provided that
+temporarily reconfigure a pin in a different state without moving it.
+
+The following methods should be provided for every pin type (that is, both
+erased and non-erased pin types should provide the same API):
+
+* `pub fn into_input<N: InputState>(self, input: N) -> Pin<N>`
+* `pub fn into_output<N: OutputState>(self, output: N) -> Pin<N>`
+* ```ignore
+ pub fn with_input_state<N: InputState, R>(
+ &mut self,
+ input: N,
+ f: impl FnOnce(&mut PA1<N>) -> R,
+ ) -> R
+ ```
+* ```ignore
+ pub fn with_output_state<N: OutputState, R>(
+ &mut self,
+ output: N,
+ f: impl FnOnce(&mut PA1<N>) -> R,
+ ) -> R
+ ```
+
+
+Pin state should be bounded by sealed traits. Users of the HAL should have no
+need to add their own state. The traits can provide HAL-specific methods
+required to implement the pin state API.
+
+Example:
+
+```rust
+# use std::marker::PhantomData;
+mod sealed {
+ pub trait Sealed {}
+}
+
+pub trait PinState: sealed::Sealed {}
+pub trait OutputState: sealed::Sealed {}
+pub trait InputState: sealed::Sealed {
+ // ...
+}
+
+pub struct Output<S: OutputState> {
+ _p: PhantomData<S>,
+}
+
+impl<S: OutputState> PinState for Output<S> {}
+impl<S: OutputState> sealed::Sealed for Output<S> {}
+
+pub struct PushPull;
+pub struct OpenDrain;
+
+impl OutputState for PushPull {}
+impl OutputState for OpenDrain {}
+impl sealed::Sealed for PushPull {}
+impl sealed::Sealed for OpenDrain {}
+
+pub struct Input<S: InputState> {
+ _p: PhantomData<S>,
+}
+
+impl<S: InputState> PinState for Input<S> {}
+impl<S: InputState> sealed::Sealed for Input<S> {}
+
+pub struct Floating;
+pub struct PullUp;
+pub struct PullDown;
+
+impl InputState for Floating {}
+impl InputState for PullUp {}
+impl InputState for PullDown {}
+impl sealed::Sealed for Floating {}
+impl sealed::Sealed for PullUp {}
+impl sealed::Sealed for PullDown {}
+
+pub struct PA1<S: PinState> {
+ _p: PhantomData<S>,
+}
+
+impl<S: PinState> PA1<S> {
+ pub fn into_input<N: InputState>(self, input: N) -> PA1<Input<N>> {
+ todo!()
+ }
+
+ pub fn into_output<N: OutputState>(self, output: N) -> PA1<Output<N>> {
+ todo!()
+ }
+
+ pub fn with_input_state<N: InputState, R>(
+ &mut self,
+ input: N,
+ f: impl FnOnce(&mut PA1<N>) -> R,
+ ) -> R {
+ todo!()
+ }
+
+ pub fn with_output_state<N: OutputState, R>(
+ &mut self,
+ output: N,
+ f: impl FnOnce(&mut PA1<N>) -> R,
+ ) -> R {
+ todo!()
+ }
+}
+
+// Same for `PA` and `Pin`, and other pin types.
+```
diff --git a/src/doc/embedded-book/src/design-patterns/hal/index.md b/src/doc/embedded-book/src/design-patterns/hal/index.md
new file mode 100644
index 000000000..c493a8731
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/hal/index.md
@@ -0,0 +1,15 @@
+# HAL Design Patterns
+
+This is a set of common and recommended patterns for writing hardware
+abstraction layers (HALs) for microcontrollers in Rust. These patterns are
+intended to be used in addition to the existing [Rust API Guidelines] when
+writing HALs for microcontrollers.
+
+[Rust API Guidelines]: https://rust-lang.github.io/api-guidelines/
+
+[Checklist](checklist.md)
+
+- [Naming](naming.md)
+- [Interoperability](interoperability.md)
+- [Predictability](predictability.md)
+- [GPIO](gpio.md)
diff --git a/src/doc/embedded-book/src/design-patterns/hal/interoperability.md b/src/doc/embedded-book/src/design-patterns/hal/interoperability.md
new file mode 100644
index 000000000..12049020d
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/hal/interoperability.md
@@ -0,0 +1,57 @@
+# Interoperability
+
+
+<a id="c-free"></a>
+## Wrapper types provide a destructor method (C-FREE)
+
+Any non-`Copy` wrapper type provided by the HAL should provide a `free` method
+that consumes the wrapper and returns back the raw peripheral (and possibly
+other objects) it was created from.
+
+The method should shut down and reset the peripheral if necessary. Calling `new`
+with the raw peripheral returned by `free` should not fail due to an unexpected
+state of the peripheral.
+
+If the HAL type requires other non-`Copy` objects to be constructed (for example
+I/O pins), any such object should be released and returned by `free` as well.
+`free` should return a tuple in that case.
+
+For example:
+
+```rust
+# pub struct TIMER0;
+pub struct Timer(TIMER0);
+
+impl Timer {
+ pub fn new(periph: TIMER0) -> Self {
+ Self(periph)
+ }
+
+ pub fn free(self) -> TIMER0 {
+ self.0
+ }
+}
+```
+
+<a id="c-reexport-pac"></a>
+## HALs reexport their register access crate (C-REEXPORT-PAC)
+
+HALs can be written on top of [svd2rust]-generated PACs, or on top of other
+crates that provide raw register access. HALs should always reexport the
+register access crate they are based on in their crate root.
+
+A PAC should be reexported under the name `pac`, regardless of the actual name
+of the crate, as the name of the HAL should already make it clear what PAC is
+being accessed.
+
+[svd2rust]: https://github.com/rust-embedded/svd2rust
+
+<a id="c-hal-traits"></a>
+## Types implement the `embedded-hal` traits (C-HAL-TRAITS)
+
+Types provided by the HAL should implement all applicable traits provided by the
+[`embedded-hal`] crate.
+
+Multiple traits may be implemented for the same type.
+
+[`embedded-hal`]: https://github.com/rust-embedded/embedded-hal
diff --git a/src/doc/embedded-book/src/design-patterns/hal/naming.md b/src/doc/embedded-book/src/design-patterns/hal/naming.md
new file mode 100644
index 000000000..65877d3e9
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/hal/naming.md
@@ -0,0 +1,9 @@
+# Naming
+
+
+<a id="c-crate-name"></a>
+## The crate is named appropriately (C-CRATE-NAME)
+
+HAL crates should be named after the chip or family of chips they aim to
+support. Their name should end with `-hal` to distinguish them from register
+access crates. The name should not contain underscores (use dashes instead).
diff --git a/src/doc/embedded-book/src/design-patterns/hal/predictability.md b/src/doc/embedded-book/src/design-patterns/hal/predictability.md
new file mode 100644
index 000000000..e3181856a
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/hal/predictability.md
@@ -0,0 +1,24 @@
+# Predictability
+
+
+<a id="c-ctor"></a>
+## Constructors are used instead of extension traits (C-CTOR)
+
+All peripherals to which the HAL adds functionality should be wrapped in a new
+type, even if no additional fields are required for that functionality.
+
+Extension traits implemented for the raw peripheral should be avoided.
+
+<a id="c-inline"></a>
+## Methods are decorated with `#[inline]` where appropriate (C-INLINE)
+
+The Rust compiler does not by default perform full inlining across crate
+boundaries. As embedded applications are sensitive to unexpected code size
+increases, `#[inline]` should be used to guide the compiler as follows:
+
+* All "small" functions should be marked `#[inline]`. What qualifies as "small"
+ is subjective, but generally all functions that are expected to compile down
+ to single-digit instruction sequences qualify as small.
+* Functions that are very likely to take constant values as parameters should be
+ marked as `#[inline]`. This enables the compiler to compute even complicated
+ initialization logic at compile time, provided the function inputs are known.
diff --git a/src/doc/embedded-book/src/design-patterns/index.md b/src/doc/embedded-book/src/design-patterns/index.md
new file mode 100644
index 000000000..32153fafe
--- /dev/null
+++ b/src/doc/embedded-book/src/design-patterns/index.md
@@ -0,0 +1,3 @@
+# Design Patterns
+
+This chapter aims to collect various useful design patterns for embedded Rust.
diff --git a/src/doc/embedded-book/src/interoperability/c-with-rust.md b/src/doc/embedded-book/src/interoperability/c-with-rust.md
new file mode 100644
index 000000000..d5d8db39b
--- /dev/null
+++ b/src/doc/embedded-book/src/interoperability/c-with-rust.md
@@ -0,0 +1,135 @@
+# A little C with your Rust
+
+Using C or C++ inside of a Rust project consists of two major parts:
+
+- Wrapping the exposed C API for use with Rust
+- Building your C or C++ code to be integrated with the Rust code
+
+As C++ does not have a stable ABI for the Rust compiler to target, it is recommended to use the `C` ABI when combining Rust with C or C++.
+
+## Defining the interface
+
+Before consuming C or C++ code from Rust, it is necessary to define (in Rust) what data types and function signatures exist in the linked code. In C or C++, you would include a header (`.h` or `.hpp`) file which defines this data. In Rust, it is necessary to either manually translate these definitions to Rust, or use a tool to generate these definitions.
+
+First, we will cover manually translating these definitions from C/C++ to Rust.
+
+### Wrapping C functions and Datatypes
+
+Typically, libraries written in C or C++ will provide a header file defining all types and functions used in public interfaces. An example file may look like this:
+
+```C
+/* File: cool.h */
+typedef struct CoolStruct {
+ int x;
+ int y;
+} CoolStruct;
+
+void cool_function(int i, char c, CoolStruct* cs);
+```
+
+When translated to Rust, this interface would look as such:
+
+```rust,ignore
+/* File: cool_bindings.rs */
+#[repr(C)]
+pub struct CoolStruct {
+ pub x: cty::c_int,
+ pub y: cty::c_int,
+}
+
+extern "C" {
+ pub fn cool_function(
+ i: cty::c_int,
+ c: cty::c_char,
+ cs: *mut CoolStruct
+ );
+}
+```
+
+Let's take a look at this definition one piece at a time, to explain each of the parts.
+
+```rust,ignore
+#[repr(C)]
+pub struct CoolStruct { ... }
+```
+
+By default, Rust does not guarantee order, padding, or the size of data included in a `struct`. In order to guarantee compatibility with C code, we include the `#[repr(C)]` attribute, which instructs the Rust compiler to always use the same rules C does for organizing data within a struct.
+
+```rust,ignore
+pub x: cty::c_int,
+pub y: cty::c_int,
+```
+
+Due to the flexibility of how C or C++ defines an `int` or `char`, it is recommended to use primitive data types defined in `cty`, which will map types from C to types in Rust.
+
+```rust,ignore
+extern "C" { pub fn cool_function( ... ); }
+```
+
+This statement defines the signature of a function that uses the C ABI, called `cool_function`. By defining the signature without defining the body of the function, the definition of this function will need to be provided elsewhere, or linked into the final library or binary from a static library.
+
+```rust,ignore
+ i: cty::c_int,
+ c: cty::c_char,
+ cs: *mut CoolStruct
+```
+
+Similar to our datatype above, we define the datatypes of the function arguments using C-compatible definitions. We also retain the same argument names, for clarity.
+
+We have one new type here, `*mut CoolStruct`. As C does not have a concept of Rust's references, which would look like this: `&mut CoolStruct`, we instead have a raw pointer. As dereferencing this pointer is `unsafe`, and the pointer may in fact be a `null` pointer, care must be taken to ensure the guarantees typical of Rust when interacting with C or C++ code.
+
+### Automatically generating the interface
+
+Rather than manually generating these interfaces, which may be tedious and error prone, there is a tool called [bindgen] which will perform these conversions automatically. For instructions of the usage of [bindgen], please refer to the [bindgen user's manual], however the typical process consists of the following:
+
+1. Gather all C or C++ headers defining interfaces or datatypes you would like to use with Rust.
+2. Write a `bindings.h` file, which `#include "..."`'s each of the files you gathered in step one.
+3. Feed this `bindings.h` file, along with any compilation flags used to compile
+ your code into `bindgen`. Tip: use `Builder.ctypes_prefix("cty")` /
+ `--ctypes-prefix=cty` and `Builder.use_core()` / `--use-core` to make the generated code `#![no_std]` compatible.
+4. `bindgen` will produce the generated Rust code to the output of the terminal window. This file may be piped to a file in your project, such as `bindings.rs`. You may use this file in your Rust project to interact with C/C++ code compiled and linked as an external library. Tip: don't forget to use the [`cty`](https://crates.io/crates/cty) crate if your types in the generated bindings are prefixed with `cty`.
+
+[bindgen]: https://github.com/rust-lang/rust-bindgen
+[bindgen user's manual]: https://rust-lang.github.io/rust-bindgen/
+
+## Building your C/C++ code
+
+As the Rust compiler does not directly know how to compile C or C++ code (or code from any other language, which presents a C interface), it is necessary to compile your non-Rust code ahead of time.
+
+For embedded projects, this most commonly means compiling the C/C++ code to a static archive (such as `cool-library.a`), which can then be combined with your Rust code at the final linking step.
+
+If the library you would like to use is already distributed as a static archive, it is not necessary to rebuild your code. Just convert the provided interface header file as described above, and include the static archive at compile/link time.
+
+If your code exists as a source project, it will be necessary to compile your C/C++ code to a static library, either by triggering your existing build system (such as `make`, `CMake`, etc.), or by porting the necessary compilation steps to use a tool called the `cc` crate. For both of these steps, it is necessary to use a `build.rs` script.
+
+### Rust `build.rs` build scripts
+
+A `build.rs` script is a file written in Rust syntax, that is executed on your compilation machine, AFTER dependencies of your project have been built, but BEFORE your project is built.
+
+The full reference may be found [here](https://doc.rust-lang.org/cargo/reference/build-scripts.html). `build.rs` scripts are useful for generating code (such as via [bindgen]), calling out to external build systems such as `Make`, or directly compiling C/C++ through use of the `cc` crate.
+
+### Triggering external build systems
+
+For projects with complex external projects or build systems, it may be easiest to use [`std::process::Command`] to "shell out" to your other build systems by traversing relative paths, calling a fixed command (such as `make library`), and then copying the resulting static library to the proper location in the `target` build directory.
+
+While your crate may be targeting a `no_std` embedded platform, your `build.rs` executes only on machines compiling your crate. This means you may use any Rust crates which will run on your compilation host.
+
+[`std::process::Command`]: https://doc.rust-lang.org/std/process/struct.Command.html
+
+### Building C/C++ code with the `cc` crate
+
+For projects with limited dependencies or complexity, or for projects where it is difficult to modify the build system to produce a static library (rather than a final binary or executable), it may be easier to instead utilize the [`cc` crate], which provides an idiomatic Rust interface to the compiler provided by the host.
+
+[`cc` crate]: https://github.com/alexcrichton/cc-rs
+
+In the simplest case of compiling a single C file as a dependency to a static library, an example `build.rs` script using the [`cc` crate] would look like this:
+
+```rust,ignore
+extern crate cc;
+
+fn main() {
+ cc::Build::new()
+ .file("foo.c")
+ .compile("libfoo.a");
+}
+```
diff --git a/src/doc/embedded-book/src/interoperability/index.md b/src/doc/embedded-book/src/interoperability/index.md
new file mode 100644
index 000000000..4ff5fd9df
--- /dev/null
+++ b/src/doc/embedded-book/src/interoperability/index.md
@@ -0,0 +1,63 @@
+# Interoperability
+
+Interoperability between Rust and C code is always dependent
+on transforming data between the two languages.
+For this purposes there are two dedicated modules
+in the `stdlib` called
+[`std::ffi`](https://doc.rust-lang.org/std/ffi/index.html) and
+[`std::os::raw`](https://doc.rust-lang.org/std/os/raw/index.html).
+
+`std::os::raw` deals with low-level primitive types that can
+be converted implicitly by the compiler
+because the memory layout between Rust and C
+is similar enough or the same.
+
+`std::ffi` provides some utility for converting more complex
+types such as Strings, mapping both `&str` and `String`
+to C-types that are easier and safer to handle.
+
+Neither of these modules are available in `core`, but you can find a `#![no_std]`
+compatible version of `std::ffi::{CStr,CString}` in the [`cstr_core`] crate, and
+most of the `std::os::raw` types in the [`cty`] crate.
+
+[`cstr_core`]: https://crates.io/crates/cstr_core
+[`cty`]: https://crates.io/crates/cty
+
+| Rust type | Intermediate | C type |
+|------------|--------------|--------------|
+| String | CString | *char |
+| &str | CStr | *const char |
+| () | c_void | void |
+| u32 or u64 | c_uint | unsigned int |
+| etc | ... | ... |
+
+As mentioned above, primitive types can be converted
+by the compiler implicitly.
+
+```rust,ignore
+unsafe fn foo(num: u32) {
+ let c_num: c_uint = num;
+ let r_num: u32 = c_num;
+}
+```
+
+## Interoperability with other build systems
+
+A common requirement for including Rust in your embedded project is combining
+Cargo with your existing build system, such as make or cmake.
+
+We are collecting examples and use cases for this on our issue tracker in
+[issue #61].
+
+[issue #61]: https://github.com/rust-embedded/book/issues/61
+
+
+## Interoperability with RTOSs
+
+Integrating Rust with an RTOS such as FreeRTOS or ChibiOS is still a work in
+progress; especially calling RTOS functions from Rust can be tricky.
+
+We are collecting examples and use cases for this on our issue tracker in
+[issue #62].
+
+[issue #62]: https://github.com/rust-embedded/book/issues/62
diff --git a/src/doc/embedded-book/src/interoperability/rust-with-c.md b/src/doc/embedded-book/src/interoperability/rust-with-c.md
new file mode 100644
index 000000000..5e596f027
--- /dev/null
+++ b/src/doc/embedded-book/src/interoperability/rust-with-c.md
@@ -0,0 +1,105 @@
+# A little Rust with your C
+
+Using Rust code inside a C or C++ project mostly consists of two parts.
+
+- Creating a C-friendly API in Rust
+- Embedding your Rust project into an external build system
+
+Apart from `cargo` and `meson`, most build systems don't have native Rust support.
+So you're most likely best off just using `cargo` for compiling your crate and
+any dependencies.
+
+## Setting up a project
+
+Create a new `cargo` project as usual.
+
+There are flags to tell `cargo` to emit a systems library, instead of
+its regular rust target.
+This also allows you to set a different output name for your library,
+if you want it to differ from the rest of your crate.
+
+```toml
+[lib]
+name = "your_crate"
+crate-type = ["cdylib"] # Creates dynamic lib
+# crate-type = ["staticlib"] # Creates static lib
+```
+
+## Building a `C` API
+
+Because C++ has no stable ABI for the Rust compiler to target, we use `C` for
+any interoperability between different languages. This is no exception when using Rust
+inside of C and C++ code.
+
+### `#[no_mangle]`
+
+The Rust compiler mangles symbol names differently than native code linkers expect.
+As such, any function that Rust exports to be used outside of Rust needs to be told
+not to be mangled by the compiler.
+
+### `extern "C"`
+
+By default, any function you write in Rust will use the
+Rust ABI (which is also not stabilized).
+Instead, when building outwards facing FFI APIs we need to
+tell the compiler to use the system ABI.
+
+Depending on your platform, you might want to target a specific ABI version, which are
+documented [here](https://doc.rust-lang.org/reference/items/external-blocks.html).
+
+---
+
+Putting these parts together, you get a function that looks roughly like this.
+
+```rust,ignore
+#[no_mangle]
+pub extern "C" fn rust_function() {
+
+}
+```
+
+Just as when using `C` code in your Rust project you now need to transform data
+from and to a form that the rest of the application will understand.
+
+## Linking and greater project context.
+
+So then, that's one half of the problem solved.
+How do you use this now?
+
+**This very much depends on your project and/or build system**
+
+`cargo` will create a `my_lib.so`/`my_lib.dll` or `my_lib.a` file,
+depending on your platform and settings. This library can simply be linked
+by your build system.
+
+However, calling a Rust function from C requires a header file to declare
+the function signatures.
+
+Every function in your Rust-ffi API needs to have a corresponding header function.
+
+```rust,ignore
+#[no_mangle]
+pub extern "C" fn rust_function() {}
+```
+
+would then become
+
+```C
+void rust_function();
+```
+
+etc.
+
+There is a tool to automate this process,
+called [cbindgen] which analyses your Rust code
+and then generates headers for your C and C++ projects from it.
+
+[cbindgen]: https://github.com/eqrion/cbindgen
+
+At this point, using the Rust functions from C
+is as simple as including the header and calling them!
+
+```C
+#include "my-rust-project.h"
+rust_function();
+```
diff --git a/src/doc/embedded-book/src/intro/hardware.md b/src/doc/embedded-book/src/intro/hardware.md
new file mode 100644
index 000000000..b458aa19c
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/hardware.md
@@ -0,0 +1,39 @@
+# Meet Your Hardware
+
+Let's get familiar with the hardware we'll be working with.
+
+## STM32F3DISCOVERY (the "F3")
+
+<p align="center">
+<img title="F3" src="../assets/f3.jpg">
+</p>
+
+What does this board contain?
+
+- A [STM32F303VCT6](https://www.st.com/en/microcontrollers/stm32f303vc.html) microcontroller. This microcontroller has
+ - A single-core ARM Cortex-M4F processor with hardware support for single-precision floating point
+ operations and a maximum clock frequency of 72 MHz.
+
+ - 256 KiB of "Flash" memory. (1 KiB = 10**24** bytes)
+
+ - 48 KiB of RAM.
+
+ - A variety of integrated peripherals such as timers, I2C, SPI and USART.
+
+ - General purpose Input Output (GPIO) and other types of pins accessible through the two rows of headers along side the board.
+
+ - A USB interface accessible through the USB port labeled "USB USER".
+
+- An [accelerometer](https://en.wikipedia.org/wiki/Accelerometer) as part of the [LSM303DLHC](https://www.st.com/en/mems-and-sensors/lsm303dlhc.html) chip.
+
+- A [magnetometer](https://en.wikipedia.org/wiki/Magnetometer) as part of the [LSM303DLHC](https://www.st.com/en/mems-and-sensors/lsm303dlhc.html) chip.
+
+- A [gyroscope](https://en.wikipedia.org/wiki/Gyroscope) as part of the [L3GD20](https://www.pololu.com/file/0J563/L3GD20.pdf) chip.
+
+- 8 user LEDs arranged in the shape of a compass.
+
+- A second microcontroller: a [STM32F103](https://www.st.com/en/microcontrollers/stm32f103cb.html). This microcontroller is actually part of an on-board programmer / debugger and is connected to the USB port named "USB ST-LINK".
+
+For a more detailed list of features and further specifications of the board take a look at the [STMicroelectronics](https://www.st.com/en/evaluation-tools/stm32f3discovery.html) website.
+
+A word of caution: be careful if you want to apply external signals to the board. The microcontroller STM32F303VCT6 pins take a nominal voltage of 3.3 volts. For further information consult the [6.2 Absolute maximum ratings section in the manual](https://www.st.com/resource/en/datasheet/stm32f303vc.pdf)
diff --git a/src/doc/embedded-book/src/intro/index.md b/src/doc/embedded-book/src/intro/index.md
new file mode 100644
index 000000000..7a600fee0
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/index.md
@@ -0,0 +1,130 @@
+# Introduction
+
+Welcome to The Embedded Rust Book: An introductory book about using the Rust
+Programming Language on "Bare Metal" embedded systems, such as Microcontrollers.
+
+## Who Embedded Rust is For
+Embedded Rust is for everyone who wants to do embedded programming while taking advantage of the higher-level concepts and safety guarantees the Rust language provides.
+(See also [Who Rust Is For](https://doc.rust-lang.org/book/ch00-00-introduction.html))
+
+## Scope
+
+The goals of this book are:
+
+* Get developers up to speed with embedded Rust development. i.e. How to set
+ up a development environment.
+
+* Share *current* best practices about using Rust for embedded development. i.e.
+ How to best use Rust language features to write more correct embedded
+ software.
+
+* Serve as a cookbook in some cases. e.g. How do I mix C and Rust in a single
+ project?
+
+This book tries to be as general as possible but to make things easier for both
+the readers and the writers it uses the ARM Cortex-M architecture in all its
+examples. However, the book doesn't assume that the reader is familiar with this
+particular architecture and explains details particular to this architecture
+where required.
+
+## Who This Book is For
+This book caters towards people with either some embedded background or some Rust background, however we believe
+everybody curious about embedded Rust programming can get something out of this book. For those without any prior knowledge
+we suggest you read the "Assumptions and Prerequisites" section and catch up on missing knowledge to get more out of the book
+and improve your reading experience. You can check out the "Other Resources" section to find resources on topics
+you might want to catch up on.
+
+### Assumptions and Prerequisites
+
+* You are comfortable using the Rust Programming Language, and have written,
+ run, and debugged Rust applications on a desktop environment. You should also
+ be familiar with the idioms of the [2018 edition] as this book targets
+ Rust 2018.
+
+[2018 edition]: https://doc.rust-lang.org/edition-guide/
+
+* You are comfortable developing and debugging embedded systems in another
+ language such as C, C++, or Ada, and are familiar with concepts such as:
+ * Cross Compilation
+ * Memory Mapped Peripherals
+ * Interrupts
+ * Common interfaces such as I2C, SPI, Serial, etc.
+
+### Other Resources
+If you are unfamiliar with anything mentioned above or if you want more information about a specific topic mentioned in this book you might find some of these resources helpful.
+
+| Topic | Resource | Description |
+|--------------|----------|-------------|
+| Rust | [Rust Book](https://doc.rust-lang.org/book/) | If you are not yet comfortable with Rust, we highly suggest reading this book. |
+| Rust, Embedded | [Discovery Book](https://docs.rust-embedded.org/discovery/) | If you have never done any embedded programming, this book might be a better start |
+| Rust, Embedded | [Embedded Rust Bookshelf](https://docs.rust-embedded.org) | Here you can find several other resources provided by Rust's Embedded Working Group. |
+| Rust, Embedded | [Embedonomicon](https://docs.rust-embedded.org/embedonomicon/) | The nitty gritty details when doing embedded programming in Rust. |
+| Rust, Embedded | [embedded FAQ](https://docs.rust-embedded.org/faq.html) | Frequently asked questions about Rust in an embedded context. |
+| Interrupts | [Interrupt](https://en.wikipedia.org/wiki/Interrupt) | - |
+| Memory-mapped IO/Peripherals | [Memory-mapped I/O](https://en.wikipedia.org/wiki/Memory-mapped_I/O) | - |
+| SPI, UART, RS232, USB, I2C, TTL | [Stack Exchange about SPI, UART, and other interfaces](https://electronics.stackexchange.com/questions/37814/usart-uart-rs232-usb-spi-i2c-ttl-etc-what-are-all-of-these-and-how-do-th) | - |
+
+### Translations
+
+This book has been translated by generous volunteers. If you would like your
+translation listed here, please open a PR to add it.
+
+* [Japanese](https://tomoyuki-nakabayashi.github.io/book/)
+ ([repository](https://github.com/tomoyuki-nakabayashi/book))
+
+* [Chinese](https://xxchang.github.io/book/)
+ ([repository](https://github.com/XxChang/book))
+
+## How to Use This Book
+
+This book generally assumes that you’re reading it front-to-back. Later
+chapters build on concepts in earlier chapters, and earlier chapters may
+not dig into details on a topic, revisiting the topic in a later chapter.
+
+This book will be using the [STM32F3DISCOVERY] development board from
+STMicroelectronics for the majority of the examples contained within. This board
+is based on the ARM Cortex-M architecture, and while basic functionality is
+the same across most CPUs based on this architecture, peripherals and other
+implementation details of Microcontrollers are different between different
+vendors, and often even different between Microcontroller families from the same
+vendor.
+
+For this reason, we suggest purchasing the [STM32F3DISCOVERY] development board
+for the purpose of following the examples in this book.
+
+[STM32F3DISCOVERY]: http://www.st.com/en/evaluation-tools/stm32f3discovery.html
+
+## Contributing to This Book
+
+The work on this book is coordinated in [this repository] and is mainly
+developed by the [resources team].
+
+[this repository]: https://github.com/rust-embedded/book
+[resources team]: https://github.com/rust-embedded/wg#the-resources-team
+
+If you have trouble following the instructions in this book or find that some
+section of the book is not clear enough or hard to follow then that's a bug and
+it should be reported in [the issue tracker] of this book.
+
+[the issue tracker]: https://github.com/rust-embedded/book/issues/
+
+Pull requests fixing typos and adding new content are very welcome!
+
+## Re-using this material
+
+This book is distributed under the following licenses:
+
+* The code samples and free-standing Cargo projects contained within this book are licensed under the terms of both the [MIT License] and the [Apache License v2.0].
+* The written prose, pictures and diagrams contained within this book are licensed under the terms of the Creative Commons [CC-BY-SA v4.0] license.
+
+[MIT License]: https://opensource.org/licenses/MIT
+[Apache License v2.0]: http://www.apache.org/licenses/LICENSE-2.0
+[CC-BY-SA v4.0]: https://creativecommons.org/licenses/by-sa/4.0/legalcode
+
+TL;DR: If you want to use our text or images in your work, you need to:
+
+* Give the appropriate credit (i.e. mention this book on your slide, and provide a link to the relevant page)
+* Provide a link to the [CC-BY-SA v4.0] licence
+* Indicate if you have changed the material in any way, and make any changes to our material available under the same licence
+
+Also, please do let us know if you find this book useful!
diff --git a/src/doc/embedded-book/src/intro/install.md b/src/doc/embedded-book/src/intro/install.md
new file mode 100644
index 000000000..f8c4aa4e9
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/install.md
@@ -0,0 +1,82 @@
+# Installing the tools
+
+This page contains OS-agnostic installation instructions for a few of the tools:
+
+### Rust Toolchain
+
+Install rustup by following the instructions at [https://rustup.rs](https://rustup.rs).
+
+**NOTE** Make sure you have a compiler version equal to or newer than `1.31`. `rustc
+-V` should return a date newer than the one shown below.
+
+``` text
+$ rustc -V
+rustc 1.31.1 (b6c32da9b 2018-12-18)
+```
+
+For bandwidth and disk usage concerns the default installation only supports
+native compilation. To add cross compilation support for the ARM Cortex-M
+architectures choose one of the following compilation targets. For the STM32F3DISCOVERY
+board used for the examples in this book, use the `thumbv7em-none-eabihf` target.
+
+Cortex-M0, M0+, and M1 (ARMv6-M architecture):
+``` console
+rustup target add thumbv6m-none-eabi
+```
+
+Cortex-M3 (ARMv7-M architecture):
+``` console
+rustup target add thumbv7m-none-eabi
+```
+
+Cortex-M4 and M7 without hardware floating point (ARMv7E-M architecture):
+``` console
+rustup target add thumbv7em-none-eabi
+```
+
+Cortex-M4F and M7F with hardware floating point (ARMv7E-M architecture):
+``` console
+rustup target add thumbv7em-none-eabihf
+```
+
+Cortex-M23 (ARMv8-M architecture):
+``` console
+rustup target add thumbv8m.base-none-eabi
+```
+
+Cortex-M33 and M35P (ARMv8-M architecture):
+``` console
+rustup target add thumbv8m.main-none-eabi
+```
+
+Cortex-M33F and M35PF with hardware floating point (ARMv8-M architecture):
+``` console
+rustup target add thumbv8m.main-none-eabihf
+```
+
+
+### `cargo-binutils`
+
+``` text
+cargo install cargo-binutils
+
+rustup component add llvm-tools-preview
+```
+WINDOWS: prerequisite C++ Build Tools for Visual Studio 2019 is installed. https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
+### `cargo-generate`
+
+We'll use this later to generate a project from a template.
+
+``` console
+cargo install cargo-generate
+```
+
+Note: on some Linux distros (e.g. Ubuntu) you may need to install the packages `libssl-dev` and `pkg-config` prior to installing cargo-generate.
+
+### OS-Specific Instructions
+
+Now follow the instructions specific to the OS you are using:
+
+- [Linux](install/linux.md)
+- [Windows](install/windows.md)
+- [macOS](install/macos.md)
diff --git a/src/doc/embedded-book/src/intro/install/linux.md b/src/doc/embedded-book/src/intro/install/linux.md
new file mode 100644
index 000000000..f8684d0a8
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/install/linux.md
@@ -0,0 +1,125 @@
+# Linux
+
+Here are the installation commands for a few Linux distributions.
+
+## Packages
+
+- Ubuntu 18.04 or newer / Debian stretch or newer
+
+> **NOTE** `gdb-multiarch` is the GDB command you'll use to debug your ARM
+> Cortex-M programs
+
+<!-- Debian stretch -->
+<!-- GDB 7.12 -->
+<!-- OpenOCD 0.9.0 -->
+<!-- QEMU 2.8.1 -->
+
+<!-- Ubuntu 18.04 -->
+<!-- GDB 8.1 -->
+<!-- OpenOCD 0.10.0 -->
+<!-- QEMU 2.11.1 -->
+
+``` console
+sudo apt install gdb-multiarch openocd qemu-system-arm
+```
+
+- Ubuntu 14.04 and 16.04
+
+> **NOTE** `arm-none-eabi-gdb` is the GDB command you'll use to debug your ARM
+> Cortex-M programs
+
+<!-- Ubuntu 14.04 -->
+<!-- GDB 7.6 (!) -->
+<!-- OpenOCD 0.7.0 (?) -->
+<!-- QEMU 2.0.0 (?) -->
+
+``` console
+sudo apt install gdb-arm-none-eabi openocd qemu-system-arm
+```
+
+- Fedora 27 or newer
+
+> **NOTE** `arm-none-eabi-gdb` is the GDB command you'll use to debug your ARM
+> Cortex-M programs
+
+<!-- Fedora 27 -->
+<!-- GDB 7.6 (!) -->
+<!-- OpenOCD 0.10.0 -->
+<!-- QEMU 2.10.2 -->
+
+``` console
+sudo dnf install arm-none-eabi-gdb openocd qemu-system-arm
+```
+
+- Arch Linux
+
+> **NOTE** `arm-none-eabi-gdb` is the GDB command you'll use to debug ARM
+> Cortex-M programs
+
+``` console
+sudo pacman -S arm-none-eabi-gdb qemu-arch-extra openocd
+```
+
+## udev rules
+
+This rule lets you use OpenOCD with the Discovery board without root privilege.
+
+Create the file `/etc/udev/rules.d/70-st-link.rules` with the contents shown below.
+
+``` text
+# STM32F3DISCOVERY rev A/B - ST-LINK/V2
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="3748", TAG+="uaccess"
+
+# STM32F3DISCOVERY rev C+ - ST-LINK/V2-1
+ATTRS{idVendor}=="0483", ATTRS{idProduct}=="374b", TAG+="uaccess"
+```
+
+Then reload all the udev rules with:
+
+``` console
+sudo udevadm control --reload-rules
+```
+
+If you had the board plugged to your laptop, unplug it and then plug it again.
+
+You can check the permissions by running this command:
+
+``` console
+lsusb
+```
+
+Which should show something like
+
+```text
+(..)
+Bus 001 Device 018: ID 0483:374b STMicroelectronics ST-LINK/V2.1
+(..)
+```
+
+Take note of the bus and device numbers. Use those numbers to create a path like
+`/dev/bus/usb/<bus>/<device>`. Then use this path like so:
+
+``` console
+ls -l /dev/bus/usb/001/018
+```
+
+```text
+crw-------+ 1 root root 189, 17 Sep 13 12:34 /dev/bus/usb/001/018
+```
+
+```console
+getfacl /dev/bus/usb/001/018 | grep user
+```
+
+```text
+user::rw-
+user:you:rw-
+```
+
+The `+` appended to permissions indicates the existence of an extended
+permission. The `getfacl` command tells the user `you` can make use of
+this device.
+
+Now, go to the [next section].
+
+[next section]: verify.md
diff --git a/src/doc/embedded-book/src/intro/install/macos.md b/src/doc/embedded-book/src/intro/install/macos.md
new file mode 100644
index 000000000..b3e51bcf1
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/install/macos.md
@@ -0,0 +1,25 @@
+# macOS
+
+All the tools can be install using [Homebrew]:
+
+[Homebrew]: http://brew.sh/
+
+``` text
+$ # GDB
+$ brew install armmbed/formulae/arm-none-eabi-gcc
+
+$ # OpenOCD
+$ brew install openocd
+
+$ # QEMU
+$ brew install qemu
+```
+
+> **NOTE** If OpenOCD crashes you may need to install the latest version using:
+```text
+$ brew install --HEAD openocd
+```
+
+That's all! Go to the [next section].
+
+[next section]: verify.md
diff --git a/src/doc/embedded-book/src/intro/install/verify.md b/src/doc/embedded-book/src/intro/install/verify.md
new file mode 100644
index 000000000..921db8cc7
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/install/verify.md
@@ -0,0 +1,78 @@
+# Verify Installation
+
+In this section we check that some of the required tools / drivers have been
+correctly installed and configured.
+
+Connect your laptop / PC to the discovery board using a micro USB cable. The
+discovery board has two USB connectors; use the one labeled "USB ST-LINK" that
+sits on the center of the edge of the board.
+
+Also check that the ST-LINK header is populated. See the picture below; the
+ST-LINK header is circled in red.
+
+<p align="center">
+<img title="Connected discovery board" src="../../assets/verify.jpeg">
+</p>
+
+Now run the following command:
+
+``` console
+openocd -f interface/stlink.cfg -f target/stm32f3x.cfg
+```
+
+> **NOTE**: Old versions of openocd, including the 0.10.0 release from 2017, do
+> not contain the new (and preferable) `interface/stlink.cfg` file; instead you
+> may need to use `interface/stlink-v2.cfg` or `interface/stlink-v2-1.cfg`.
+
+You should get the following output and the program should block the console:
+
+``` text
+Open On-Chip Debugger 0.10.0
+Licensed under GNU GPL v2
+For bug reports, read
+ http://openocd.org/doc/doxygen/bugs.html
+Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
+adapter speed: 1000 kHz
+adapter_nsrst_delay: 100
+Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
+none separate
+Info : Unable to match requested speed 1000 kHz, using 950 kHz
+Info : Unable to match requested speed 1000 kHz, using 950 kHz
+Info : clock speed 950 kHz
+Info : STLINK v2 JTAG v27 API v2 SWIM v15 VID 0x0483 PID 0x374B
+Info : using stlink api v2
+Info : Target voltage: 2.919881
+Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints
+```
+
+The contents may not match exactly but you should get the last line about
+breakpoints and watchpoints. If you got it then terminate the OpenOCD process
+and move to the [next section].
+
+[next section]: ../../start/index.md
+
+If you didn't get the "breakpoints" line then try one of the following commands.
+
+``` console
+openocd -f interface/stlink-v2.cfg -f target/stm32f3x.cfg
+```
+
+``` console
+openocd -f interface/stlink-v2-1.cfg -f target/stm32f3x.cfg
+```
+
+If one of those commands works it means you got an old hardware revision of the
+discovery board. That won't be a problem but commit that fact to memory as
+you'll need to configure things a bit differently later on. You can move to the
+[next section].
+
+If none of the commands work as a normal user then try to run them with root
+permission (e.g. `sudo openocd ..`). If the commands do work with root
+permission then check that the [udev rules] have been correctly set.
+
+[udev rules]: linux.md#udev-rules
+
+If you have reached this point and OpenOCD is not working please open [an issue]
+and we'll help you out!
+
+[an issue]: https://github.com/rust-embedded/book/issues
diff --git a/src/doc/embedded-book/src/intro/install/windows.md b/src/doc/embedded-book/src/intro/install/windows.md
new file mode 100644
index 000000000..e00740352
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/install/windows.md
@@ -0,0 +1,50 @@
+# Windows
+
+## `arm-none-eabi-gdb`
+
+ARM provides `.exe` installers for Windows. Grab one from [here][gcc], and follow the instructions.
+Just before the installation process finishes tick/select the "Add path to environment variable"
+option. Then verify that the tools are in your `%PATH%`:
+
+``` text
+$ arm-none-eabi-gdb -v
+GNU gdb (GNU Tools for Arm Embedded Processors 7-2018-q2-update) 8.1.0.20180315-git
+(..)
+```
+
+[gcc]: https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
+
+## OpenOCD
+
+There's no official binary release of OpenOCD for Windows but if you're not in the mood to compile
+it yourself, the xPack project provides a binary distribution, [here][openocd]. Follow the
+provided installation instructions. Then update your `%PATH%` environment variable to
+include the path where the binaries were installed. (`C:\Users\USERNAME\AppData\Roaming\xPacks\@xpack-dev-tools\openocd\0.10.0-13.1\.content\bin\`,
+if you've been using the easy install)
+
+[openocd]: https://xpack.github.io/openocd/
+
+Verify that OpenOCD is in your `%PATH%` with:
+
+``` text
+$ openocd -v
+Open On-Chip Debugger 0.10.0
+(..)
+```
+
+## QEMU
+
+Grab QEMU from [the official website][qemu].
+
+[qemu]: https://www.qemu.org/download/#windows
+
+## ST-LINK USB driver
+
+You'll also need to install [this USB driver] or OpenOCD won't work. Follow the installer
+instructions and make sure you install the right version (32-bit or 64-bit) of the driver.
+
+[this USB driver]: http://www.st.com/en/embedded-software/stsw-link009.html
+
+That's all! Go to the [next section].
+
+[next section]: verify.md
diff --git a/src/doc/embedded-book/src/intro/no-std.md b/src/doc/embedded-book/src/intro/no-std.md
new file mode 100644
index 000000000..35bfc1adc
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/no-std.md
@@ -0,0 +1,64 @@
+# A `no_std` Rust Environment
+
+The term Embedded Programming is used for a wide range of different classes of programming.
+Ranging from programming 8-Bit MCUs (like the [ST72325xx](https://www.st.com/resource/en/datasheet/st72325j6.pdf))
+with just a few KB of RAM and ROM, up to systems like the Raspberry Pi
+([Model B 3+](https://en.wikipedia.org/wiki/Raspberry_Pi#Specifications)) which has a 32/64-bit
+4-core Cortex-A53 @ 1.4 GHz and 1GB of RAM. Different restrictions/limitations will apply when writing code
+depending on what kind of target and use case you have.
+
+There are two general Embedded Programming classifications:
+
+## Hosted Environments
+These kinds of environments are close to a normal PC environment.
+What this means is that you are provided with a System Interface [E.G. POSIX](https://en.wikipedia.org/wiki/POSIX)
+that provides you with primitives to interact with various systems, such as file systems, networking, memory management, threads, etc.
+Standard libraries in turn usually depend on these primitives to implement their functionality.
+You may also have some sort of sysroot and restrictions on RAM/ROM-usage, and perhaps some
+special HW or I/Os. Overall it feels like coding on a special-purpose PC environment.
+
+## Bare Metal Environments
+In a bare metal environment no code has been loaded before your program.
+Without the software provided by an OS we can not load the standard library.
+Instead the program, along with the crates it uses, can only use the hardware (bare metal) to run.
+To prevent rust from loading the standard library use `no_std`.
+The platform-agnostic parts of the standard library are available through [libcore](https://doc.rust-lang.org/core/).
+libcore also excludes things which are not always desirable in an embedded environment.
+One of these things is a memory allocator for dynamic memory allocation.
+If you require this or any other functionalities there are often crates which provide these.
+
+### The libstd Runtime
+As mentioned before using [libstd](https://doc.rust-lang.org/std/) requires some sort of system integration, but this is not only because
+[libstd](https://doc.rust-lang.org/std/) is just providing a common way of accessing OS abstractions, it also provides a runtime.
+This runtime, among other things, takes care of setting up stack overflow protection, processing command line arguments,
+and spawning the main thread before a program's main function is invoked. This runtime also won't be available in a `no_std` environment.
+
+## Summary
+`#![no_std]` is a crate-level attribute that indicates that the crate will link to the core-crate instead of the std-crate.
+The [libcore](https://doc.rust-lang.org/core/) crate in turn is a platform-agnostic subset of the std crate
+which makes no assumptions about the system the program will run on.
+As such, it provides APIs for language primitives like floats, strings and slices, as well as APIs that expose processor features
+like atomic operations and SIMD instructions. However it lacks APIs for anything that involves platform integration.
+Because of these properties no\_std and [libcore](https://doc.rust-lang.org/core/) code can be used for any kind of
+bootstrapping (stage 0) code like bootloaders, firmware or kernels.
+
+### Overview
+
+| feature | no\_std | std |
+|-----------------------------------------------------------|--------|-----|
+| heap (dynamic memory) | * | ✓ |
+| collections (Vec, HashMap, etc) | ** | ✓ |
+| stack overflow protection | ✘ | ✓ |
+| runs init code before main | ✘ | ✓ |
+| libstd available | ✘ | ✓ |
+| libcore available | ✓ | ✓ |
+| writing firmware, kernel, or bootloader code | ✓ | ✘ |
+
+\* Only if you use the `alloc` crate and use a suitable allocator like [alloc-cortex-m].
+
+\** Only if you use the `collections` crate and configure a global default allocator.
+
+[alloc-cortex-m]: https://github.com/rust-embedded/alloc-cortex-m
+
+## See Also
+* [RFC-1184](https://github.com/rust-lang/rfcs/blob/master/text/1184-stabilize-no_std.md)
diff --git a/src/doc/embedded-book/src/intro/tooling.md b/src/doc/embedded-book/src/intro/tooling.md
new file mode 100644
index 000000000..88adc2d1f
--- /dev/null
+++ b/src/doc/embedded-book/src/intro/tooling.md
@@ -0,0 +1,84 @@
+# Tooling
+
+Dealing with microcontrollers involves using several different tools as we'll be
+dealing with an architecture different than your laptop's and we'll have to run
+and debug programs on a *remote* device.
+
+We'll use all the tools listed below. Any recent version should work when a
+minimum version is not specified, but we have listed the versions we have
+tested.
+
+- Rust 1.31, 1.31-beta, or a newer toolchain PLUS ARM Cortex-M compilation
+ support.
+- [`cargo-binutils`](https://github.com/rust-embedded/cargo-binutils) ~0.1.4
+- [`qemu-system-arm`](https://www.qemu.org/). Tested versions: 3.0.0
+- OpenOCD >=0.8. Tested versions: v0.9.0 and v0.10.0
+- GDB with ARM support. Version 7.12 or newer highly recommended. Tested
+ versions: 7.10, 7.11, 7.12 and 8.1
+- [`cargo-generate`](https://github.com/ashleygwilliams/cargo-generate) or `git`.
+ These tools are optional but will make it easier to follow along with the book.
+
+The text below explains why we are using these tools. Installation instructions
+can be found on the next page.
+
+## `cargo-generate` OR `git`
+
+Bare metal programs are non-standard (`no_std`) Rust programs that require some
+adjustments to the linking process in order to get the memory layout of the program
+right. This requires some additional files (like linker scripts) and
+settings (like linker flags). We have packaged those for you in a template
+such that you only need to fill in the missing information (such as the project name and the
+characteristics of your target hardware).
+
+Our template is compatible with `cargo-generate`: a Cargo subcommand for
+creating new Cargo projects from templates. You can also download the
+template using `git`, `curl`, `wget`, or your web browser.
+
+## `cargo-binutils`
+
+`cargo-binutils` is a collection of Cargo subcommands that make it easy to use
+the LLVM tools that are shipped with the Rust toolchain. These tools include the
+LLVM versions of `objdump`, `nm` and `size` and are used for inspecting
+binaries.
+
+The advantage of using these tools over GNU binutils is that (a) installing the
+LLVM tools is the same one-command installation (`rustup component add
+llvm-tools-preview`) regardless of your OS and (b) tools like `objdump` support
+all the architectures that `rustc` supports -- from ARM to x86_64 -- because
+they both share the same LLVM backend.
+
+## `qemu-system-arm`
+
+QEMU is an emulator. In this case we use the variant that can fully emulate ARM
+systems. We use QEMU to run embedded programs on the host. Thanks to this you
+can follow some parts of this book even if you don't have any hardware with you!
+
+## GDB
+
+A debugger is a very important component of embedded development as you may not
+always have the luxury to log stuff to the host console. In some cases, you may
+not even have LEDs to blink on your hardware!
+
+In general, LLDB works as well as GDB when it comes to debugging but we haven't
+found an LLDB counterpart to GDB's `load` command, which uploads the program to
+the target hardware, so currently we recommend that you use GDB.
+
+## OpenOCD
+
+GDB isn't able to communicate directly with the ST-Link debugging hardware on
+your STM32F3DISCOVERY development board. It needs a translator and the Open
+On-Chip Debugger, OpenOCD, is that translator. OpenOCD is a program that runs
+on your laptop/PC and translates between GDB's TCP/IP based remote debug
+protocol and ST-Link's USB based protocol.
+
+OpenOCD also performs other important work as part of its translation for the
+debugging of the ARM Cortex-M based microcontroller on your STM32F3DISCOVERY
+development board:
+* It knows how to interact with the memory mapped registers used by the ARM
+ CoreSight debug peripheral. It is these CoreSight registers that allow for:
+ * Breakpoint/Watchpoint manipulation
+ * Reading and writing of the CPU registers
+ * Detecting when the CPU has been halted for a debug event
+ * Continuing CPU execution after a debug event has been encountered
+ * etc.
+* It also knows how to erase and write to the microcontroller's FLASH
diff --git a/src/doc/embedded-book/src/peripherals/a-first-attempt.md b/src/doc/embedded-book/src/peripherals/a-first-attempt.md
new file mode 100644
index 000000000..59b656088
--- /dev/null
+++ b/src/doc/embedded-book/src/peripherals/a-first-attempt.md
@@ -0,0 +1,139 @@
+# A First Attempt
+
+## The Registers
+
+Let's look at the 'SysTick' peripheral - a simple timer which comes with every Cortex-M processor core. Typically you'll be looking these up in the chip manufacturer's data sheet or *Technical Reference Manual*, but this example is common to all ARM Cortex-M cores, let's look in the [ARM reference manual]. We see there are four registers:
+
+[ARM reference manual]: http://infocenter.arm.com/help/topic/com.arm.doc.dui0553a/Babieigh.html
+
+| Offset | Name | Description | Width |
+|--------|-------------|-----------------------------|--------|
+| 0x00 | SYST_CSR | Control and Status Register | 32 bits|
+| 0x04 | SYST_RVR | Reload Value Register | 32 bits|
+| 0x08 | SYST_CVR | Current Value Register | 32 bits|
+| 0x0C | SYST_CALIB | Calibration Value Register | 32 bits|
+
+## The C Approach
+
+In Rust, we can represent a collection of registers in exactly the same way as we do in C - with a `struct`.
+
+```rust,ignore
+#[repr(C)]
+struct SysTick {
+ pub csr: u32,
+ pub rvr: u32,
+ pub cvr: u32,
+ pub calib: u32,
+}
+```
+
+The qualifier `#[repr(C)]` tells the Rust compiler to lay this structure out like a C compiler would. That's very important, as Rust allows structure fields to be re-ordered, while C does not. You can imagine the debugging we'd have to do if these fields were silently re-arranged by the compiler! With this qualifier in place, we have our four 32-bit fields which correspond to the table above. But of course, this `struct` is of no use by itself - we need a variable.
+
+```rust,ignore
+let systick = 0xE000_E010 as *mut SysTick;
+let time = unsafe { (*systick).cvr };
+```
+
+## Volatile Accesses
+
+Now, there are a couple of problems with the approach above.
+
+1. We have to use unsafe every time we want to access our Peripheral.
+2. We've got no way of specifying which registers are read-only or read-write.
+3. Any piece of code anywhere in your program could access the hardware
+ through this structure.
+4. Most importantly, it doesn't actually work...
+
+Now, the problem is that compilers are clever. If you make two writes to the same piece of RAM, one after the other, the compiler can notice this and just skip the first write entirely. In C, we can mark variables as `volatile` to ensure that every read or write occurs as intended. In Rust, we instead mark the *accesses* as volatile, not the variable.
+
+```rust,ignore
+let systick = unsafe { &mut *(0xE000_E010 as *mut SysTick) };
+let time = unsafe { core::ptr::read_volatile(&mut systick.cvr) };
+```
+
+So, we've fixed one of our four problems, but now we have even more `unsafe` code! Fortunately, there's a third party crate which can help - [`volatile_register`].
+
+[`volatile_register`]: https://crates.io/crates/volatile_register
+
+```rust,ignore
+use volatile_register::{RW, RO};
+
+#[repr(C)]
+struct SysTick {
+ pub csr: RW<u32>,
+ pub rvr: RW<u32>,
+ pub cvr: RW<u32>,
+ pub calib: RO<u32>,
+}
+
+fn get_systick() -> &'static mut SysTick {
+ unsafe { &mut *(0xE000_E010 as *mut SysTick) }
+}
+
+fn get_time() -> u32 {
+ let systick = get_systick();
+ systick.cvr.read()
+}
+```
+
+Now, the volatile accesses are performed automatically through the `read` and `write` methods. It's still `unsafe` to perform writes, but to be fair, hardware is a bunch of mutable state and there's no way for the compiler to know whether these writes are actually safe, so this is a good default position.
+
+## The Rusty Wrapper
+
+We need to wrap this `struct` up into a higher-layer API that is safe for our users to call. As the driver author, we manually verify the unsafe code is correct, and then present a safe API for our users so they don't have to worry about it (provided they trust us to get it right!).
+
+One example might be:
+
+```rust,ignore
+use volatile_register::{RW, RO};
+
+pub struct SystemTimer {
+ p: &'static mut RegisterBlock
+}
+
+#[repr(C)]
+struct RegisterBlock {
+ pub csr: RW<u32>,
+ pub rvr: RW<u32>,
+ pub cvr: RW<u32>,
+ pub calib: RO<u32>,
+}
+
+impl SystemTimer {
+ pub fn new() -> SystemTimer {
+ SystemTimer {
+ p: unsafe { &mut *(0xE000_E010 as *mut RegisterBlock) }
+ }
+ }
+
+ pub fn get_time(&self) -> u32 {
+ self.p.cvr.read()
+ }
+
+ pub fn set_reload(&mut self, reload_value: u32) {
+ unsafe { self.p.rvr.write(reload_value) }
+ }
+}
+
+pub fn example_usage() -> String {
+ let mut st = SystemTimer::new();
+ st.set_reload(0x00FF_FFFF);
+ format!("Time is now 0x{:08x}", st.get_time())
+}
+```
+
+Now, the problem with this approach is that the following code is perfectly acceptable to the compiler:
+
+```rust,ignore
+fn thread1() {
+ let mut st = SystemTimer::new();
+ st.set_reload(2000);
+}
+
+fn thread2() {
+ let mut st = SystemTimer::new();
+ st.set_reload(1000);
+}
+```
+
+Our `&mut self` argument to the `set_reload` function checks that there are no other references to *that* particular `SystemTimer` struct, but they don't stop the user creating a second `SystemTimer` which points to the exact same peripheral! Code written in this fashion will work if the author is diligent enough to spot all of these 'duplicate' driver instances, but once the code is spread out over multiple modules, drivers, developers, and days, it gets easier and easier to make these kinds of mistakes.
diff --git a/src/doc/embedded-book/src/peripherals/borrowck.md b/src/doc/embedded-book/src/peripherals/borrowck.md
new file mode 100644
index 000000000..fb817b2d9
--- /dev/null
+++ b/src/doc/embedded-book/src/peripherals/borrowck.md
@@ -0,0 +1,19 @@
+## Mutable Global State
+
+Unfortunately, hardware is basically nothing but mutable global state, which can feel very frightening for a Rust developer. Hardware exists independently from the structures of the code we write, and can be modified at any time by the real world.
+
+## What should our rules be?
+
+How can we reliably interact with these peripherals?
+
+1. Always use `volatile` methods to read or write to peripheral memory, as it can change at any time
+2. In software, we should be able to share any number of read-only accesses to these peripherals
+3. If some software should have read-write access to a peripheral, it should hold the only reference to that peripheral
+
+## The Borrow Checker
+
+The last two of these rules sound suspiciously similar to what the Borrow Checker does already!
+
+Imagine if we could pass around ownership of these peripherals, or offer immutable or mutable references to them?
+
+Well, we can, but for the Borrow Checker, we need to have exactly one instance of each peripheral, so Rust can handle this correctly. Well, luckily in the hardware, there is only one instance of any given peripheral, but how can we expose that in the structure of our code?
diff --git a/src/doc/embedded-book/src/peripherals/index.md b/src/doc/embedded-book/src/peripherals/index.md
new file mode 100644
index 000000000..23731c564
--- /dev/null
+++ b/src/doc/embedded-book/src/peripherals/index.md
@@ -0,0 +1,44 @@
+# Peripherals
+
+## What are Peripherals?
+
+Most Microcontrollers have more than just a CPU, RAM, or Flash Memory - they contain sections of silicon which are used for interacting with systems outside of the microcontroller, as well as directly and indirectly interacting with their surroundings in the world via sensors, motor controllers, or human interfaces such as a display or keyboard. These components are collectively known as Peripherals.
+
+These peripherals are useful because they allow a developer to offload processing to them, avoiding having to handle everything in software. Similar to how a desktop developer would offload graphics processing to a video card, embedded developers can offload some tasks to peripherals allowing the CPU to spend its time doing something else important, or doing nothing in order to save power.
+
+If you look at the main circuit board in an old-fashioned home computer from the 1970s or 1980s (and actually, the desktop PCs of yesterday are not so far removed from the embedded systems of today) you would expect to see:
+
+* A processor
+* A RAM chip
+* A ROM chip
+* An I/O controller
+
+The RAM chip, ROM chip and I/O controller (the peripheral in this system) would be joined to the processor through a series of parallel traces known as a 'bus'. This bus carries address information, which selects which device on the bus the processor wishes to communicate with, and a data bus which carries the actual data. In our embedded microcontrollers, the same principles apply - it's just that everything is packed on to a single piece of silicon.
+
+However, unlike graphics cards, which typically have a Software API like Vulkan, Metal, or OpenGL, peripherals are exposed to our Microcontroller with a hardware interface, which is mapped to a chunk of the memory.
+
+## Linear and Real Memory Space
+
+On a microcontroller, writing some data to some other arbitrary address, such as `0x4000_0000` or `0x0000_0000`, may also be a completely valid action.
+
+On a desktop system, access to memory is tightly controlled by the MMU, or Memory Management Unit. This component has two major responsibilities: enforcing access permission to sections of memory (preventing one process from reading or modifying the memory of another process); and re-mapping segments of the physical memory to virtual memory ranges used in software. Microcontrollers do not typically have an MMU, and instead only use real physical addresses in software.
+
+Although 32 bit microcontrollers have a real and linear address space from `0x0000_0000`, and `0xFFFF_FFFF`, they generally only use a few hundred kilobytes of that range for actual memory. This leaves a significant amount of address space remaining. In earlier chapters, we were talking about RAM being located at address `0x2000_0000`. If our RAM was 64 KiB long (i.e. with a maximum address of 0xFFFF) then addresses `0x2000_0000` to `0x2000_FFFF` would correspond to our RAM. When we write to a variable which lives at address `0x2000_1234`, what happens internally is that some logic detects the upper portion of the address (0x2000 in this example) and then activates the RAM so that it can act upon the lower portion of the address (0x1234 in this case). On a Cortex-M we also have our Flash ROM mapped in at address `0x0000_0000` up to, say, address `0x0007_FFFF` (if we have a 512 KiB Flash ROM). Rather than ignore all remaining space between these two regions, Microcontroller designers instead mapped the interface for peripherals in certain memory locations. This ends up looking something like this:
+
+![](../assets/nrf52-memory-map.png)
+
+[Nordic nRF52832 Datasheet (pdf)]
+
+## Memory Mapped Peripherals
+
+Interaction with these peripherals is simple at a first glance - write the right data to the correct address. For example, sending a 32 bit word over a serial port could be as direct as writing that 32 bit word to a certain memory address. The Serial Port Peripheral would then take over and send out the data automatically.
+
+Configuration of these peripherals works similarly. Instead of calling a function to configure a peripheral, a chunk of memory is exposed which serves as the hardware API. Write `0x8000_0000` to a SPI Frequency Configuration Register, and the SPI port will send data at 8 Megabits per second. Write `0x0200_0000` to the same address, and the SPI port will send data at 125 Kilobits per second. These configuration registers look a little bit like this:
+
+![](../assets/nrf52-spi-frequency-register.png)
+
+[Nordic nRF52832 Datasheet (pdf)]
+
+This interface is how interactions with the hardware are made, no matter what language is used, whether that language is Assembly, C, or Rust.
+
+[Nordic nRF52832 Datasheet (pdf)]: http://infocenter.nordicsemi.com/pdf/nRF52832_PS_v1.1.pdf
diff --git a/src/doc/embedded-book/src/peripherals/singletons.md b/src/doc/embedded-book/src/peripherals/singletons.md
new file mode 100644
index 000000000..840a98665
--- /dev/null
+++ b/src/doc/embedded-book/src/peripherals/singletons.md
@@ -0,0 +1,155 @@
+# Singletons
+
+> In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one object.
+>
+> *Wikipedia: [Singleton Pattern]*
+
+[Singleton Pattern]: https://en.wikipedia.org/wiki/Singleton_pattern
+
+
+## But why can't we just use global variable(s)?
+
+We could make everything a public static, like this
+
+```rust,ignore
+static mut THE_SERIAL_PORT: SerialPort = SerialPort;
+
+fn main() {
+ let _ = unsafe {
+ THE_SERIAL_PORT.read_speed();
+ };
+}
+```
+
+But this has a few problems. It is a mutable global variable, and in Rust, these are always unsafe to interact with. These variables are also visible across your whole program, which means the borrow checker is unable to help you track references and ownership of these variables.
+
+## How do we do this in Rust?
+
+Instead of just making our peripheral a global variable, we might instead decide to make a global variable, in this case called `PERIPHERALS`, which contains an `Option<T>` for each of our peripherals.
+
+```rust,ignore
+struct Peripherals {
+ serial: Option<SerialPort>,
+}
+impl Peripherals {
+ fn take_serial(&mut self) -> SerialPort {
+ let p = replace(&mut self.serial, None);
+ p.unwrap()
+ }
+}
+static mut PERIPHERALS: Peripherals = Peripherals {
+ serial: Some(SerialPort),
+};
+```
+
+This structure allows us to obtain a single instance of our peripheral. If we try to call `take_serial()` more than once, our code will panic!
+
+```rust,ignore
+fn main() {
+ let serial_1 = unsafe { PERIPHERALS.take_serial() };
+ // This panics!
+ // let serial_2 = unsafe { PERIPHERALS.take_serial() };
+}
+```
+
+Although interacting with this structure is `unsafe`, once we have the `SerialPort` it contained, we no longer need to use `unsafe`, or the `PERIPHERALS` structure at all.
+
+This has a small runtime overhead because we must wrap the `SerialPort` structure in an option, and we'll need to call `take_serial()` once, however this small up-front cost allows us to leverage the borrow checker throughout the rest of our program.
+
+## Existing library support
+
+Although we created our own `Peripherals` structure above, it is not necessary to do this for your code. the `cortex_m` crate contains a macro called `singleton!()` that will perform this action for you.
+
+```rust,ignore
+#[macro_use(singleton)]
+extern crate cortex_m;
+
+fn main() {
+ // OK if `main` is executed only once
+ let x: &'static mut bool =
+ singleton!(: bool = false).unwrap();
+}
+```
+
+[cortex_m docs](https://docs.rs/cortex-m/latest/cortex_m/macro.singleton.html)
+
+Additionally, if you use [`cortex-m-rtic`](https://github.com/rtic-rs/cortex-m-rtic), the entire process of defining and obtaining these peripherals are abstracted for you, and you are instead handed a `Peripherals` structure that contains a non-`Option<T>` version of all of the items you define.
+
+```rust,ignore
+// cortex-m-rtic v0.5.x
+#[rtic::app(device = lm3s6965, peripherals = true)]
+const APP: () = {
+ #[init]
+ fn init(cx: init::Context) {
+ static mut X: u32 = 0;
+
+ // Cortex-M peripherals
+ let core: cortex_m::Peripherals = cx.core;
+
+ // Device specific peripherals
+ let device: lm3s6965::Peripherals = cx.device;
+ }
+}
+```
+
+## But why?
+
+But how do these Singletons make a noticeable difference in how our Rust code works?
+
+```rust,ignore
+impl SerialPort {
+ const SER_PORT_SPEED_REG: *mut u32 = 0x4000_1000 as _;
+
+ fn read_speed(
+ &self // <------ This is really, really important
+ ) -> u32 {
+ unsafe {
+ ptr::read_volatile(Self::SER_PORT_SPEED_REG)
+ }
+ }
+}
+```
+
+There are two important factors in play here:
+
+* Because we are using a singleton, there is only one way or place to obtain a `SerialPort` structure
+* To call the `read_speed()` method, we must have ownership or a reference to a `SerialPort` structure
+
+These two factors put together means that it is only possible to access the hardware if we have appropriately satisfied the borrow checker, meaning that at no point do we have multiple mutable references to the same hardware!
+
+```rust,ignore
+fn main() {
+ // missing reference to `self`! Won't work.
+ // SerialPort::read_speed();
+
+ let serial_1 = unsafe { PERIPHERALS.take_serial() };
+
+ // you can only read what you have access to
+ let _ = serial_1.read_speed();
+}
+```
+
+## Treat your hardware like data
+
+Additionally, because some references are mutable, and some are immutable, it becomes possible to see whether a function or method could potentially modify the state of the hardware. For example,
+
+This is allowed to change hardware settings:
+
+```rust,ignore
+fn setup_spi_port(
+ spi: &mut SpiPort,
+ cs_pin: &mut GpioPin
+) -> Result<()> {
+ // ...
+}
+```
+
+This isn't:
+
+```rust,ignore
+fn read_button(gpio: &GpioPin) -> bool {
+ // ...
+}
+```
+
+This allows us to enforce whether code should or should not make changes to hardware at **compile time**, rather than at runtime. As a note, this generally only works across one application, but for bare metal systems, our software will be compiled into a single application, so this is not usually a restriction.
diff --git a/src/doc/embedded-book/src/portability/index.md b/src/doc/embedded-book/src/portability/index.md
new file mode 100644
index 000000000..1e1f03bc4
--- /dev/null
+++ b/src/doc/embedded-book/src/portability/index.md
@@ -0,0 +1,62 @@
+# Portability
+
+In embedded environments portability is a very important topic: Every vendor and even each family from a single manufacturer offers different peripherals and capabilities and similarly the ways to interact with the peripherals will vary.
+
+A common way to equalize such differences is via a layer called Hardware Abstraction layer or **HAL**.
+
+> Hardware abstractions are sets of routines in software that emulate some platform-specific details, giving programs direct access to the hardware resources.
+>
+> They often allow programmers to write device-independent, high performance applications by providing standard operating system (OS) calls to hardware.
+>
+> *Wikipedia: [Hardware Abstraction Layer]*
+
+[Hardware Abstraction Layer]: https://en.wikipedia.org/wiki/Hardware_abstraction
+
+Embedded systems are a bit special in this regard since we typically do not have operating systems and user installable software but firmware images which are compiled as a whole as well as a number of other constraints. So while the traditional approach as defined by Wikipedia could potentially work it is likely not the most productive approach to ensure portability.
+
+How do we do this in Rust? Enter **embedded-hal**...
+
+## What is embedded-hal?
+
+In a nutshell it is a set of traits which define implementation contracts between **HAL implementations**, **drivers** and **applications (or firmwares)**. Those contracts include both capabilities (i.e. if a trait is implemented for a certain type, the **HAL implementation** provides a certain capability) and methods (i.e. if you can construct a type implementing a trait it is guaranteed that you have the methods specified in the trait available).
+
+A typical layering might look like this:
+
+![](../assets/rust_layers.svg)
+
+Some of the defined traits in **embedded-hal** are:
+* GPIO (input and output pins)
+* Serial communication
+* I2C
+* SPI
+* Timers/Countdowns
+* Analog Digital Conversion
+
+The main reason for having the **embedded-hal** traits and crates implementing and using them is to keep complexity in check. If you consider that an application might have to implement the use of the peripheral in the hardware as well as the application and potentially drivers for additional hardware components, then it should be easy to see that the re-usability is very limited. Expressed mathematically, if **M** is the number of peripheral HAL implementations and **N** the number of drivers then if we were to reinvent the wheel for every application then we would end up with **M*N** implementations while by using the *API* provided by the **embedded-hal** traits will make the implementation complexity approach **M+N**. Of course there're additional benefits to be had, such as less trial-and-error due to a well-defined and ready-to-use APIs.
+
+## Users of the embedded-hal
+
+As said above there are three main users of the HAL:
+
+### HAL implementation
+
+A HAL implementation provides the interfacing between the hardware and the users of the HAL traits. Typical implementations consist of three parts:
+* One or more hardware specific types
+* Functions to create and initialize such a type, often providing various configuration options (speed, operation mode, use pins, etc.)
+* one or more `trait` `impl` of **embedded-hal** traits for that type
+
+Such a **HAL implementation** can come in various flavours:
+* Via low-level hardware access, e.g. via registers
+* Via operating system, e.g. by using the `sysfs` under Linux
+* Via adapter, e.g. a mock of types for unit testing
+* Via driver for hardware adapters, e.g. I2C multiplexer or GPIO expander
+
+### Driver
+
+A driver implements a set of custom functionality for an internal or external component, connected to a peripheral implementing the embedded-hal traits. Typical examples for such drivers include various sensors (temperature, magnetometer, accelerometer, light), display devices (LED arrays, LCD displays) and actuators (motors, transmitters).
+
+A driver has to be initialized with an instance of type that implements a certain `trait` of the embedded-hal which is ensured via trait bound and provides its own type instance with a custom set of methods allowing to interact with the driven device.
+
+### Application
+
+The application binds the various parts together and ensures that the desired functionality is achieved. When porting between different systems, this is the part which requires the most adaptation efforts, since the application needs to correctly initialize the real hardware via the HAL implementation and the initialisation of different hardware differs, sometimes drastically so. Also the user choice often plays a big role, since components can be physically connected to different terminals, hardware buses sometimes need external hardware to match the configuration or there are different trade-offs to be made in the use of internal peripherals (e.g. multiple timers with different capabilities are available or peripherals conflict with others).
diff --git a/src/doc/embedded-book/src/start/exceptions.md b/src/doc/embedded-book/src/start/exceptions.md
new file mode 100644
index 000000000..b15717da9
--- /dev/null
+++ b/src/doc/embedded-book/src/start/exceptions.md
@@ -0,0 +1,264 @@
+# Exceptions
+
+Exceptions, and interrupts, are a hardware mechanism by which the processor
+handles asynchronous events and fatal errors (e.g. executing an invalid
+instruction). Exceptions imply preemption and involve exception handlers,
+subroutines executed in response to the signal that triggered the event.
+
+The `cortex-m-rt` crate provides an [`exception`] attribute to declare exception
+handlers.
+
+[`exception`]: https://docs.rs/cortex-m-rt-macros/latest/cortex_m_rt_macros/attr.exception.html
+
+``` rust,ignore
+// Exception handler for the SysTick (System Timer) exception
+#[exception]
+fn SysTick() {
+ // ..
+}
+```
+
+Other than the `exception` attribute exception handlers look like plain
+functions but there's one more difference: `exception` handlers can *not* be
+called by software. Following the previous example, the statement `SysTick();`
+would result in a compilation error.
+
+This behavior is pretty much intended and it's required to provide a feature:
+`static mut` variables declared *inside* `exception` handlers are *safe* to use.
+
+``` rust,ignore
+#[exception]
+fn SysTick() {
+ static mut COUNT: u32 = 0;
+
+ // `COUNT` has transformed to type `&mut u32` and it's safe to use
+ *COUNT += 1;
+}
+```
+
+As you may know, using `static mut` variables in a function makes it
+[*non-reentrant*](https://en.wikipedia.org/wiki/Reentrancy_(computing)). It's undefined behavior to call a non-reentrant function,
+directly or indirectly, from more than one exception / interrupt handler or from
+`main` and one or more exception / interrupt handlers.
+
+Safe Rust must never result in undefined behavior so non-reentrant functions
+must be marked as `unsafe`. Yet I just told that `exception` handlers can safely
+use `static mut` variables. How is this possible? This is possible because
+`exception` handlers can *not* be called by software thus reentrancy is not
+possible.
+
+> Note that the `exception` attribute transforms definitions of static variables
+> inside the function by wrapping them into `unsafe` blocks and providing us
+> with new appropriate variables of type `&mut` of the same name.
+> Thus we can derefence the reference via `*` to access the values of the variables without
+> needing to wrap them in an `unsafe` block.
+
+## A complete example
+
+Here's an example that uses the system timer to raise a `SysTick` exception
+roughly every second. The `SysTick` exception handler keeps track of how many
+times it has been called in the `COUNT` variable and then prints the value of
+`COUNT` to the host console using semihosting.
+
+> **NOTE**: You can run this example on any Cortex-M device; you can also run it
+> on QEMU
+
+```rust,ignore
+#![deny(unsafe_code)]
+#![no_main]
+#![no_std]
+
+use panic_halt as _;
+
+use core::fmt::Write;
+
+use cortex_m::peripheral::syst::SystClkSource;
+use cortex_m_rt::{entry, exception};
+use cortex_m_semihosting::{
+ debug,
+ hio::{self, HStdout},
+};
+
+#[entry]
+fn main() -> ! {
+ let p = cortex_m::Peripherals::take().unwrap();
+ let mut syst = p.SYST;
+
+ // configures the system timer to trigger a SysTick exception every second
+ syst.set_clock_source(SystClkSource::Core);
+ // this is configured for the LM3S6965 which has a default CPU clock of 12 MHz
+ syst.set_reload(12_000_000);
+ syst.clear_current();
+ syst.enable_counter();
+ syst.enable_interrupt();
+
+ loop {}
+}
+
+#[exception]
+fn SysTick() {
+ static mut COUNT: u32 = 0;
+ static mut STDOUT: Option<HStdout> = None;
+
+ *COUNT += 1;
+
+ // Lazy initialization
+ if STDOUT.is_none() {
+ *STDOUT = hio::hstdout().ok();
+ }
+
+ if let Some(hstdout) = STDOUT.as_mut() {
+ write!(hstdout, "{}", *COUNT).ok();
+ }
+
+ // IMPORTANT omit this `if` block if running on real hardware or your
+ // debugger will end in an inconsistent state
+ if *COUNT == 9 {
+ // This will terminate the QEMU process
+ debug::exit(debug::EXIT_SUCCESS);
+ }
+}
+```
+
+``` console
+tail -n5 Cargo.toml
+```
+
+``` toml
+[dependencies]
+cortex-m = "0.5.7"
+cortex-m-rt = "0.6.3"
+panic-halt = "0.2.0"
+cortex-m-semihosting = "0.3.1"
+```
+
+``` text
+$ cargo run --release
+ Running `qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb (..)
+123456789
+```
+
+If you run this on the Discovery board you'll see the output on the OpenOCD
+console. Also, the program will *not* stop when the count reaches 9.
+
+## The default exception handler
+
+What the `exception` attribute actually does is *override* the default exception
+handler for a specific exception. If you don't override the handler for a
+particular exception it will be handled by the `DefaultHandler` function, which
+defaults to:
+
+``` rust,ignore
+fn DefaultHandler() {
+ loop {}
+}
+```
+
+This function is provided by the `cortex-m-rt` crate and marked as
+`#[no_mangle]` so you can put a breakpoint on "DefaultHandler" and catch
+*unhandled* exceptions.
+
+It's possible to override this `DefaultHandler` using the `exception` attribute:
+
+``` rust,ignore
+#[exception]
+fn DefaultHandler(irqn: i16) {
+ // custom default handler
+}
+```
+
+The `irqn` argument indicates which exception is being serviced. A negative
+value indicates that a Cortex-M exception is being serviced; and zero or a
+positive value indicate that a device specific exception, AKA interrupt, is
+being serviced.
+
+## The hard fault handler
+
+The `HardFault` exception is a bit special. This exception is fired when the
+program enters an invalid state so its handler can *not* return as that could
+result in undefined behavior. Also, the runtime crate does a bit of work before
+the user defined `HardFault` handler is invoked to improve debuggability.
+
+The result is that the `HardFault` handler must have the following signature:
+`fn(&ExceptionFrame) -> !`. The argument of the handler is a pointer to
+registers that were pushed into the stack by the exception. These registers are
+a snapshot of the processor state at the moment the exception was triggered and
+are useful to diagnose a hard fault.
+
+Here's an example that performs an illegal operation: a read to a nonexistent
+memory location.
+
+> **NOTE**: This program won't work, i.e. it won't crash, on QEMU because
+> `qemu-system-arm -machine lm3s6965evb` doesn't check memory loads and will
+> happily return `0 `on reads to invalid memory.
+
+```rust,ignore
+#![no_main]
+#![no_std]
+
+use panic_halt as _;
+
+use core::fmt::Write;
+use core::ptr;
+
+use cortex_m_rt::{entry, exception, ExceptionFrame};
+use cortex_m_semihosting::hio;
+
+#[entry]
+fn main() -> ! {
+ // read a nonexistent memory location
+ unsafe {
+ ptr::read_volatile(0x3FFF_FFFE as *const u32);
+ }
+
+ loop {}
+}
+
+#[exception]
+fn HardFault(ef: &ExceptionFrame) -> ! {
+ if let Ok(mut hstdout) = hio::hstdout() {
+ writeln!(hstdout, "{:#?}", ef).ok();
+ }
+
+ loop {}
+}
+```
+
+The `HardFault` handler prints the `ExceptionFrame` value. If you run this
+you'll see something like this on the OpenOCD console.
+
+``` text
+$ openocd
+(..)
+ExceptionFrame {
+ r0: 0x3ffffffe,
+ r1: 0x00f00000,
+ r2: 0x20000000,
+ r3: 0x00000000,
+ r12: 0x00000000,
+ lr: 0x080008f7,
+ pc: 0x0800094a,
+ xpsr: 0x61000000
+}
+```
+
+The `pc` value is the value of the Program Counter at the time of the exception
+and it points to the instruction that triggered the exception.
+
+If you look at the disassembly of the program:
+
+
+``` text
+$ cargo objdump --bin app --release -- -d --no-show-raw-insn --print-imm-hex
+(..)
+ResetTrampoline:
+ 8000942: movw r0, #0xfffe
+ 8000946: movt r0, #0x3fff
+ 800094a: ldr r0, [r0]
+ 800094c: b #-0x4 <ResetTrampoline+0xa>
+```
+
+You can lookup the value of the program counter `0x0800094a` in the dissassembly.
+You'll see that a load operation (`ldr r0, [r0]` ) caused the exception.
+The `r0` field of `ExceptionFrame` will tell you the value of register `r0`
+was `0x3fff_fffe` at that time.
diff --git a/src/doc/embedded-book/src/start/hardware.md b/src/doc/embedded-book/src/start/hardware.md
new file mode 100644
index 000000000..f1eee3163
--- /dev/null
+++ b/src/doc/embedded-book/src/start/hardware.md
@@ -0,0 +1,333 @@
+# Hardware
+
+By now you should be somewhat familiar with the tooling and the development
+process. In this section we'll switch to real hardware; the process will remain
+largely the same. Let's dive in.
+
+## Know your hardware
+
+Before we begin you need to identify some characteristics of the target device
+as these will be used to configure the project:
+
+- The ARM core. e.g. Cortex-M3.
+
+- Does the ARM core include an FPU? Cortex-M4**F** and Cortex-M7**F** cores do.
+
+- How much Flash memory and RAM does the target device have? e.g. 256 KiB of
+ Flash and 32 KiB of RAM.
+
+- Where are Flash memory and RAM mapped in the address space? e.g. RAM is
+ commonly located at address `0x2000_0000`.
+
+You can find this information in the data sheet or the reference manual of your
+device.
+
+In this section we'll be using our reference hardware, the STM32F3DISCOVERY.
+This board contains an STM32F303VCT6 microcontroller. This microcontroller has:
+
+- A Cortex-M4F core that includes a single precision FPU
+
+- 256 KiB of Flash located at address 0x0800_0000.
+
+- 40 KiB of RAM located at address 0x2000_0000. (There's another RAM region but
+ for simplicity we'll ignore it).
+
+## Configuring
+
+We'll start from scratch with a fresh template instance. Refer to the
+[previous section on QEMU] for a refresher on how to do this without
+`cargo-generate`.
+
+[previous section on QEMU]: qemu.md
+
+``` text
+$ cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart
+ Project Name: app
+ Creating project called `app`...
+ Done! New project created /tmp/app
+
+$ cd app
+```
+
+Step number one is to set a default compilation target in `.cargo/config.toml`.
+
+``` console
+tail -n5 .cargo/config.toml
+```
+
+``` toml
+# Pick ONE of these compilation targets
+# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
+# target = "thumbv7m-none-eabi" # Cortex-M3
+# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
+target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
+```
+
+We'll use `thumbv7em-none-eabihf` as that covers the Cortex-M4F core.
+
+The second step is to enter the memory region information into the `memory.x`
+file.
+
+``` text
+$ cat memory.x
+/* Linker script for the STM32F303VCT6 */
+MEMORY
+{
+ /* NOTE 1 K = 1 KiBi = 1024 bytes */
+ FLASH : ORIGIN = 0x08000000, LENGTH = 256K
+ RAM : ORIGIN = 0x20000000, LENGTH = 40K
+}
+```
+> **NOTE**: If you for some reason changed the `memory.x` file after you had made
+> the first build of a specific build target, then do `cargo clean` before
+> `cargo build`, because `cargo build` may not track updates of `memory.x`.
+
+We'll start with the hello example again, but first we have to make a small
+change.
+
+In `examples/hello.rs`, make sure the `debug::exit()` call is commented out or
+removed. It is used only for running in QEMU.
+
+```rust,ignore
+#[entry]
+fn main() -> ! {
+ hprintln!("Hello, world!").unwrap();
+
+ // exit QEMU
+ // NOTE do not run this on hardware; it can corrupt OpenOCD state
+ // debug::exit(debug::EXIT_SUCCESS);
+
+ loop {}
+}
+```
+
+You can now cross compile programs using `cargo build`
+and inspect the binaries using `cargo-binutils` as you did before. The
+`cortex-m-rt` crate handles all the magic required to get your chip running,
+as helpfully, pretty much all Cortex-M CPUs boot in the same fashion.
+
+``` console
+cargo build --example hello
+```
+
+## Debugging
+
+Debugging will look a bit different. In fact, the first steps can look different
+depending on the target device. In this section we'll show the steps required to
+debug a program running on the STM32F3DISCOVERY. This is meant to serve as a
+reference; for device specific information about debugging check out [the
+Debugonomicon](https://github.com/rust-embedded/debugonomicon).
+
+As before we'll do remote debugging and the client will be a GDB process. This
+time, however, the server will be OpenOCD.
+
+As done during the [verify] section connect the discovery board to your laptop /
+PC and check that the ST-LINK header is populated.
+
+[verify]: ../intro/install/verify.md
+
+On a terminal run `openocd` to connect to the ST-LINK on the discovery board.
+Run this command from the root of the template; `openocd` will pick up the
+`openocd.cfg` file which indicates which interface file and target file to use.
+
+``` console
+cat openocd.cfg
+```
+
+``` text
+# Sample OpenOCD configuration for the STM32F3DISCOVERY development board
+
+# Depending on the hardware revision you got you'll have to pick ONE of these
+# interfaces. At any time only one interface should be commented out.
+
+# Revision C (newer revision)
+source [find interface/stlink.cfg]
+
+# Revision A and B (older revisions)
+# source [find interface/stlink-v2.cfg]
+
+source [find target/stm32f3x.cfg]
+```
+
+> **NOTE** If you found out that you have an older revision of the discovery
+> board during the [verify] section then you should modify the `openocd.cfg`
+> file at this point to use `interface/stlink-v2.cfg`.
+
+``` text
+$ openocd
+Open On-Chip Debugger 0.10.0
+Licensed under GNU GPL v2
+For bug reports, read
+ http://openocd.org/doc/doxygen/bugs.html
+Info : auto-selecting first available session transport "hla_swd". To override use 'transport select <transport>'.
+adapter speed: 1000 kHz
+adapter_nsrst_delay: 100
+Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
+none separate
+Info : Unable to match requested speed 1000 kHz, using 950 kHz
+Info : Unable to match requested speed 1000 kHz, using 950 kHz
+Info : clock speed 950 kHz
+Info : STLINK v2 JTAG v27 API v2 SWIM v15 VID 0x0483 PID 0x374B
+Info : using stlink api v2
+Info : Target voltage: 2.913879
+Info : stm32f3x.cpu: hardware has 6 breakpoints, 4 watchpoints
+```
+
+On another terminal run GDB, also from the root of the template.
+
+``` text
+gdb-multiarch -q target/thumbv7em-none-eabihf/debug/examples/hello
+```
+
+**NOTE**: like before you might need another version of gdb instead of `gdb-multiarch` depending
+on which one you installed in the installation chapter. This could also be
+`arm-none-eabi-gdb` or just `gdb`.
+
+Next connect GDB to OpenOCD, which is waiting for a TCP connection on port 3333.
+
+``` console
+(gdb) target remote :3333
+Remote debugging using :3333
+0x00000000 in ?? ()
+```
+
+Now proceed to *flash* (load) the program onto the microcontroller using the
+`load` command.
+
+``` console
+(gdb) load
+Loading section .vector_table, size 0x400 lma 0x8000000
+Loading section .text, size 0x1518 lma 0x8000400
+Loading section .rodata, size 0x414 lma 0x8001918
+Start address 0x08000400, load size 7468
+Transfer rate: 13 KB/sec, 2489 bytes/write.
+```
+
+The program is now loaded. This program uses semihosting so before we do any
+semihosting call we have to tell OpenOCD to enable semihosting. You can send
+commands to OpenOCD using the `monitor` command.
+
+``` console
+(gdb) monitor arm semihosting enable
+semihosting is enabled
+```
+
+> You can see all the OpenOCD commands by invoking the `monitor help` command.
+
+Like before we can skip all the way to `main` using a breakpoint and the
+`continue` command.
+
+``` console
+(gdb) break main
+Breakpoint 1 at 0x8000490: file examples/hello.rs, line 11.
+Note: automatically using hardware breakpoints for read-only addresses.
+
+(gdb) continue
+Continuing.
+
+Breakpoint 1, hello::__cortex_m_rt_main_trampoline () at examples/hello.rs:11
+11 #[entry]
+```
+
+> **NOTE** If GDB blocks the terminal instead of hitting the breakpoint after
+> you issue the `continue` command above, you might want to double check that
+> the memory region information in the `memory.x` file is correctly set up
+> for your device (both the starts *and* lengths).
+
+Step into the main function with `step`.
+
+``` console
+(gdb) step
+halted: PC: 0x08000496
+hello::__cortex_m_rt_main () at examples/hello.rs:13
+13 hprintln!("Hello, world!").unwrap();
+```
+
+After advancing the program with `next` you should see "Hello, world!" printed on the OpenOCD console,
+among other stuff.
+
+``` console
+$ openocd
+(..)
+Info : halted: PC: 0x08000502
+Hello, world!
+Info : halted: PC: 0x080004ac
+Info : halted: PC: 0x080004ae
+Info : halted: PC: 0x080004b0
+Info : halted: PC: 0x080004b4
+Info : halted: PC: 0x080004b8
+Info : halted: PC: 0x080004bc
+```
+The message is only displayed once as the program is about to enter the infinite loop defined in line 19: `loop {}`
+
+You can now exit GDB using the `quit` command.
+
+``` console
+(gdb) quit
+A debugging session is active.
+
+ Inferior 1 [Remote target] will be detached.
+
+Quit anyway? (y or n)
+```
+
+Debugging now requires a few more steps so we have packed all those steps into a
+single GDB script named `openocd.gdb`. The file was created during the `cargo generate` step, and should work without any modifications. Let's have a peak:
+
+``` console
+cat openocd.gdb
+```
+
+``` text
+target extended-remote :3333
+
+# print demangled symbols
+set print asm-demangle on
+
+# detect unhandled exceptions, hard faults and panics
+break DefaultHandler
+break HardFault
+break rust_begin_unwind
+
+monitor arm semihosting enable
+
+load
+
+# start the process but immediately halt the processor
+stepi
+```
+
+Now running `<gdb> -x openocd.gdb target/thumbv7em-none-eabihf/debug/examples/hello` will immediately connect GDB to
+OpenOCD, enable semihosting, load the program and start the process.
+
+Alternatively, you can turn `<gdb> -x openocd.gdb` into a custom runner to make
+`cargo run` build a program *and* start a GDB session. This runner is included
+in `.cargo/config.toml` but it's commented out.
+
+``` console
+head -n10 .cargo/config.toml
+```
+
+``` toml
+[target.thumbv7m-none-eabi]
+# uncomment this to make `cargo run` execute programs on QEMU
+# runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"
+
+[target.'cfg(all(target_arch = "arm", target_os = "none"))']
+# uncomment ONE of these three option to make `cargo run` start a GDB session
+# which option to pick depends on your system
+runner = "arm-none-eabi-gdb -x openocd.gdb"
+# runner = "gdb-multiarch -x openocd.gdb"
+# runner = "gdb -x openocd.gdb"
+```
+
+``` text
+$ cargo run --example hello
+(..)
+Loading section .vector_table, size 0x400 lma 0x8000000
+Loading section .text, size 0x1e70 lma 0x8000400
+Loading section .rodata, size 0x61c lma 0x8002270
+Start address 0x800144e, load size 10380
+Transfer rate: 17 KB/sec, 3460 bytes/write.
+(gdb)
+```
diff --git a/src/doc/embedded-book/src/start/index.md b/src/doc/embedded-book/src/start/index.md
new file mode 100644
index 000000000..2684955d3
--- /dev/null
+++ b/src/doc/embedded-book/src/start/index.md
@@ -0,0 +1,10 @@
+# Getting Started
+
+In this section we'll walk you through the process of writing, building,
+flashing and debugging embedded programs. You will be able to try most of the
+examples without any special hardware as we will show you the basics using
+QEMU, a popular open-source hardware emulator. The only section where hardware
+is required is, naturally enough, the [Hardware](./hardware.md) section,
+where we use OpenOCD to program an [STM32F3DISCOVERY].
+
+[STM32F3DISCOVERY]: http://www.st.com/en/evaluation-tools/stm32f3discovery.html
diff --git a/src/doc/embedded-book/src/start/interrupts.md b/src/doc/embedded-book/src/start/interrupts.md
new file mode 100644
index 000000000..a898708b1
--- /dev/null
+++ b/src/doc/embedded-book/src/start/interrupts.md
@@ -0,0 +1,60 @@
+# Interrupts
+
+Interrupts differ from exceptions in a variety of ways but their operation and
+use is largely similar and they are also handled by the same interrupt
+controller. Whereas exceptions are defined by the Cortex-M architecture,
+interrupts are always vendor (and often even chip) specific implementations,
+both in naming and functionality.
+
+Interrupts do allow for a lot of flexibility which needs to be accounted for
+when attempting to use them in an advanced way. We will not cover those uses in
+this book, however it is a good idea to keep the following in mind:
+
+* Interrupts have programmable priorities which determine their handlers' execution order
+* Interrupts can nest and preempt, i.e. execution of an interrupt handler might be interrupted by another higher-priority interrupt
+* In general the reason causing the interrupt to trigger needs to be cleared to prevent re-entering the interrupt handler endlessly
+
+The general initialization steps at runtime are always the same:
+* Setup the peripheral(s) to generate interrupts requests at the desired occasions
+* Set the desired priority of the interrupt handler in the interrupt controller
+* Enable the interrupt handler in the interrupt controller
+
+Similarly to exceptions, the `cortex-m-rt` crate provides an [`interrupt`]
+attribute to declare interrupt handlers. The available interrupts (and
+their position in the interrupt handler table) are usually automatically
+generated via `svd2rust` from a SVD description.
+
+[`interrupt`]: https://docs.rs/cortex-m-rt-macros/0.1.5/cortex_m_rt_macros/attr.interrupt.html
+
+``` rust,ignore
+// Interrupt handler for the Timer2 interrupt
+#[interrupt]
+fn TIM2() {
+ // ..
+ // Clear reason for the generated interrupt request
+}
+```
+
+Interrupt handlers look like plain functions (except for the lack of arguments)
+similar to exception handlers. However they can not be called directly by other
+parts of the firmware due to the special calling conventions. It is however
+possible to generate interrupt requests in software to trigger a diversion to
+the interrupt handler.
+
+Similar to exception handlers it is also possible to declare `static mut`
+variables inside the interrupt handlers for *safe* state keeping.
+
+``` rust,ignore
+#[interrupt]
+fn TIM2() {
+ static mut COUNT: u32 = 0;
+
+ // `COUNT` has type `&mut u32` and it's safe to use
+ *COUNT += 1;
+}
+```
+
+For a more detailed description about the mechanisms demonstrated here please
+refer to the [exceptions section].
+
+[exceptions section]: ./exceptions.md
diff --git a/src/doc/embedded-book/src/start/io.md b/src/doc/embedded-book/src/start/io.md
new file mode 100644
index 000000000..7febc026d
--- /dev/null
+++ b/src/doc/embedded-book/src/start/io.md
@@ -0,0 +1,3 @@
+# IO
+
+> **TODO** Cover memory mapped I/O using registers.
diff --git a/src/doc/embedded-book/src/start/panicking.md b/src/doc/embedded-book/src/start/panicking.md
new file mode 100644
index 000000000..10f7318bb
--- /dev/null
+++ b/src/doc/embedded-book/src/start/panicking.md
@@ -0,0 +1,107 @@
+# Panicking
+
+Panicking is a core part of the Rust language. Built-in operations like indexing
+are runtime checked for memory safety. When out of bounds indexing is attempted
+this results in a panic.
+
+In the standard library panicking has a defined behavior: it unwinds the stack
+of the panicking thread, unless the user opted for aborting the program on
+panics.
+
+In programs without standard library, however, the panicking behavior is left
+undefined. A behavior can be chosen by declaring a `#[panic_handler]` function.
+This function must appear exactly *once* in the dependency graph of a program,
+and must have the following signature: `fn(&PanicInfo) -> !`, where [`PanicInfo`]
+is a struct containing information about the location of the panic.
+
+[`PanicInfo`]: https://doc.rust-lang.org/core/panic/struct.PanicInfo.html
+
+Given that embedded systems range from user facing to safety critical (cannot
+crash) there's no one size fits all panicking behavior but there are plenty of
+commonly used behaviors. These common behaviors have been packaged into crates
+that define the `#[panic_handler]` function. Some examples include:
+
+- [`panic-abort`]. A panic causes the abort instruction to be executed.
+- [`panic-halt`]. A panic causes the program, or the current thread, to halt by
+ entering an infinite loop.
+- [`panic-itm`]. The panicking message is logged using the ITM, an ARM Cortex-M
+ specific peripheral.
+- [`panic-semihosting`]. The panicking message is logged to the host using the
+ semihosting technique.
+
+[`panic-abort`]: https://crates.io/crates/panic-abort
+[`panic-halt`]: https://crates.io/crates/panic-halt
+[`panic-itm`]: https://crates.io/crates/panic-itm
+[`panic-semihosting`]: https://crates.io/crates/panic-semihosting
+
+You may be able to find even more crates searching for the [`panic-handler`]
+keyword on crates.io.
+
+[`panic-handler`]: https://crates.io/keywords/panic-handler
+
+A program can pick one of these behaviors simply by linking to the corresponding
+crate. The fact that the panicking behavior is expressed in the source of
+an application as a single line of code is not only useful as documentation but
+can also be used to change the panicking behavior according to the compilation
+profile. For example:
+
+``` rust,ignore
+#![no_main]
+#![no_std]
+
+// dev profile: easier to debug panics; can put a breakpoint on `rust_begin_unwind`
+#[cfg(debug_assertions)]
+use panic_halt as _;
+
+// release profile: minimize the binary size of the application
+#[cfg(not(debug_assertions))]
+use panic_abort as _;
+
+// ..
+```
+
+In this example the crate links to the `panic-halt` crate when built with the
+dev profile (`cargo build`), but links to the `panic-abort` crate when built
+with the release profile (`cargo build --release`).
+
+> The `use panic_abort as _;` form of the `use` statement is used to ensure the `panic_abort` panic handler is
+> included in our final executable while making it clear to the compiler that we won't explicitly use anything from
+> the crate. Without the `as _` rename, the compiler would warn that we have an unused import.
+> Sometimes you might see `extern crate panic_abort` instead, which is an older style used before the
+> 2018 edition of Rust, and should now only be used for "sysroot" crates (those distributed with Rust itself) such
+> as `proc_macro`, `alloc`, `std`, and `test`.
+
+## An example
+
+Here's an example that tries to index an array beyond its length. The operation
+results in a panic.
+
+```rust,ignore
+#![no_main]
+#![no_std]
+
+use panic_semihosting as _;
+
+use cortex_m_rt::entry;
+
+#[entry]
+fn main() -> ! {
+ let xs = [0, 1, 2];
+ let i = xs.len() + 1;
+ let _y = xs[i]; // out of bounds access
+
+ loop {}
+}
+```
+
+This example chose the `panic-semihosting` behavior which prints the panic
+message to the host console using semihosting.
+
+``` text
+$ cargo run
+ Running `qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb (..)
+panicked at 'index out of bounds: the len is 3 but the index is 4', src/main.rs:12:13
+```
+
+You can try changing the behavior to `panic-halt` and confirm that no message is
+printed in that case.
diff --git a/src/doc/embedded-book/src/start/qemu.md b/src/doc/embedded-book/src/start/qemu.md
new file mode 100644
index 000000000..d4dfc361d
--- /dev/null
+++ b/src/doc/embedded-book/src/start/qemu.md
@@ -0,0 +1,577 @@
+# QEMU
+
+We'll start writing a program for the [LM3S6965], a Cortex-M3 microcontroller.
+We have chosen this as our initial target because it [can be emulated](https://wiki.qemu.org/Documentation/Platforms/ARM#Supported_in_qemu-system-arm) using QEMU
+so you don't need to fiddle with hardware in this section and we can focus on
+the tooling and the development process.
+
+[LM3S6965]: http://www.ti.com/product/LM3S6965
+
+**IMPORTANT**
+We'll use the name "app" for the project name in this tutorial.
+Whenever you see the word "app" you should replace it with the name you selected
+for your project. Or, you could also name your project "app" and avoid the
+substitutions.
+
+## Creating a non standard Rust program
+
+We'll use the [`cortex-m-quickstart`] project template to generate a new
+project from it. The created project will contain a barebone application: a good
+starting point for a new embedded rust application. In addition, the project will
+contain an `examples` directory, with several separate applications, highlighting
+some of the key embedded rust functionality.
+
+[`cortex-m-quickstart`]: https://github.com/rust-embedded/cortex-m-quickstart
+
+### Using `cargo-generate`
+First install cargo-generate
+```console
+cargo install cargo-generate
+```
+Then generate a new project
+```console
+cargo generate --git https://github.com/rust-embedded/cortex-m-quickstart
+```
+
+```text
+ Project Name: app
+ Creating project called `app`...
+ Done! New project created /tmp/app
+```
+
+```console
+cd app
+```
+
+### Using `git`
+
+Clone the repository
+
+```console
+git clone https://github.com/rust-embedded/cortex-m-quickstart app
+cd app
+```
+
+And then fill in the placeholders in the `Cargo.toml` file
+
+```toml
+[package]
+authors = ["{{authors}}"] # "{{authors}}" -> "John Smith"
+edition = "2018"
+name = "{{project-name}}" # "{{project-name}}" -> "app"
+version = "0.1.0"
+
+# ..
+
+[[bin]]
+name = "{{project-name}}" # "{{project-name}}" -> "app"
+test = false
+bench = false
+```
+
+### Using neither
+
+Grab the latest snapshot of the `cortex-m-quickstart` template and extract it.
+
+```console
+curl -LO https://github.com/rust-embedded/cortex-m-quickstart/archive/master.zip
+unzip master.zip
+mv cortex-m-quickstart-master app
+cd app
+```
+
+Or you can browse to [`cortex-m-quickstart`], click the green "Clone or
+download" button and then click "Download ZIP".
+
+Then fill in the placeholders in the `Cargo.toml` file as done in the second
+part of the "Using `git`" version.
+
+## Program Overview
+
+For convenience here are the most important parts of the source code in `src/main.rs`:
+
+```rust,ignore
+#![no_std]
+#![no_main]
+
+use panic_halt as _;
+
+use cortex_m_rt::entry;
+
+#[entry]
+fn main() -> ! {
+ loop {
+ // your code goes here
+ }
+}
+```
+
+This program is a bit different from a standard Rust program so let's take a
+closer look.
+
+`#![no_std]` indicates that this program will *not* link to the standard crate,
+`std`. Instead it will link to its subset: the `core` crate.
+
+`#![no_main]` indicates that this program won't use the standard `main`
+interface that most Rust programs use. The main (no pun intended) reason to go
+with `no_main` is that using the `main` interface in `no_std` context requires
+nightly.
+
+`use panic_halt as _;`. This crate provides a `panic_handler` that defines
+the panicking behavior of the program. We will cover this in more detail in the
+[Panicking](panicking.md) chapter of the book.
+
+[`#[entry]`][entry] is an attribute provided by the [`cortex-m-rt`] crate that's used
+to mark the entry point of the program. As we are not using the standard `main`
+interface we need another way to indicate the entry point of the program and
+that'd be `#[entry]`.
+
+[entry]: https://docs.rs/cortex-m-rt-macros/latest/cortex_m_rt_macros/attr.entry.html
+[`cortex-m-rt`]: https://crates.io/crates/cortex-m-rt
+
+`fn main() -> !`. Our program will be the *only* process running on the target
+hardware so we don't want it to end! We use a [divergent function](https://doc.rust-lang.org/rust-by-example/fn/diverging.html) (the `-> !`
+bit in the function signature) to ensure at compile time that'll be the case.
+
+## Cross compiling
+
+The next step is to *cross* compile the program for the Cortex-M3 architecture.
+That's as simple as running `cargo build --target $TRIPLE` if you know what the
+compilation target (`$TRIPLE`) should be. Luckily, the `.cargo/config.toml` in the
+template has the answer:
+
+```console
+tail -n6 .cargo/config.toml
+```
+
+```toml
+[build]
+# Pick ONE of these compilation targets
+# target = "thumbv6m-none-eabi" # Cortex-M0 and Cortex-M0+
+target = "thumbv7m-none-eabi" # Cortex-M3
+# target = "thumbv7em-none-eabi" # Cortex-M4 and Cortex-M7 (no FPU)
+# target = "thumbv7em-none-eabihf" # Cortex-M4F and Cortex-M7F (with FPU)
+```
+
+To cross compile for the Cortex-M3 architecture we have to use
+`thumbv7m-none-eabi`. That target is not automatically installed when installing
+the Rust toolchain, it would now be a good time to add that target to the toolchain,
+if you haven't done it yet:
+``` console
+rustup target add thumbv7m-none-eabi
+```
+ Since the `thumbv7m-none-eabi` compilation target has been set as the default in
+ your `.cargo/config.toml` file, the two commands below do the same:
+
+```console
+cargo build --target thumbv7m-none-eabi
+cargo build
+```
+
+## Inspecting
+
+Now we have a non-native ELF binary in `target/thumbv7m-none-eabi/debug/app`. We
+can inspect it using `cargo-binutils`.
+
+With `cargo-readobj` we can print the ELF headers to confirm that this is an ARM
+binary.
+
+``` console
+cargo readobj --bin app -- --file-headers
+```
+
+Note that:
+* `--bin app` is sugar for inspect the binary at `target/$TRIPLE/debug/app`
+* `--bin app` will also (re)compile the binary, if necessary
+
+
+``` text
+ELF Header:
+ Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
+ Class: ELF32
+ Data: 2's complement, little endian
+ Version: 1 (current)
+ OS/ABI: UNIX - System V
+ ABI Version: 0x0
+ Type: EXEC (Executable file)
+ Machine: ARM
+ Version: 0x1
+ Entry point address: 0x405
+ Start of program headers: 52 (bytes into file)
+ Start of section headers: 153204 (bytes into file)
+ Flags: 0x5000200
+ Size of this header: 52 (bytes)
+ Size of program headers: 32 (bytes)
+ Number of program headers: 2
+ Size of section headers: 40 (bytes)
+ Number of section headers: 19
+ Section header string table index: 18
+```
+
+`cargo-size` can print the size of the linker sections of the binary.
+
+
+```console
+cargo size --bin app --release -- -A
+```
+we use `--release` to inspect the optimized version
+
+``` text
+app :
+section size addr
+.vector_table 1024 0x0
+.text 92 0x400
+.rodata 0 0x45c
+.data 0 0x20000000
+.bss 0 0x20000000
+.debug_str 2958 0x0
+.debug_loc 19 0x0
+.debug_abbrev 567 0x0
+.debug_info 4929 0x0
+.debug_ranges 40 0x0
+.debug_macinfo 1 0x0
+.debug_pubnames 2035 0x0
+.debug_pubtypes 1892 0x0
+.ARM.attributes 46 0x0
+.debug_frame 100 0x0
+.debug_line 867 0x0
+Total 14570
+```
+
+> A refresher on ELF linker sections
+>
+> - `.text` contains the program instructions
+> - `.rodata` contains constant values like strings
+> - `.data` contains statically allocated variables whose initial values are
+> *not* zero
+> - `.bss` also contains statically allocated variables whose initial values
+> *are* zero
+> - `.vector_table` is a *non*-standard section that we use to store the vector
+> (interrupt) table
+> - `.ARM.attributes` and the `.debug_*` sections contain metadata and will
+> *not* be loaded onto the target when flashing the binary.
+
+**IMPORTANT**: ELF files contain metadata like debug information so their *size
+on disk* does *not* accurately reflect the space the program will occupy when
+flashed on a device. *Always* use `cargo-size` to check how big a binary really
+is.
+
+`cargo-objdump` can be used to disassemble the binary.
+
+```console
+cargo objdump --bin app --release -- --disassemble --no-show-raw-insn --print-imm-hex
+```
+
+> **NOTE** if the above command complains about `Unknown command line argument` see
+> the following bug report: https://github.com/rust-embedded/book/issues/269
+
+> **NOTE** this output can differ on your system. New versions of rustc, LLVM
+> and libraries can generate different assembly. We truncated some of the instructions
+> to keep the snippet small.
+
+```text
+app: file format ELF32-arm-little
+
+Disassembly of section .text:
+main:
+ 400: bl #0x256
+ 404: b #-0x4 <main+0x4>
+
+Reset:
+ 406: bl #0x24e
+ 40a: movw r0, #0x0
+ < .. truncated any more instructions .. >
+
+DefaultHandler_:
+ 656: b #-0x4 <DefaultHandler_>
+
+UsageFault:
+ 657: strb r7, [r4, #0x3]
+
+DefaultPreInit:
+ 658: bx lr
+
+__pre_init:
+ 659: strb r7, [r0, #0x1]
+
+__nop:
+ 65a: bx lr
+
+HardFaultTrampoline:
+ 65c: mrs r0, msp
+ 660: b #-0x2 <HardFault_>
+
+HardFault_:
+ 662: b #-0x4 <HardFault_>
+
+HardFault:
+ 663: <unknown>
+```
+
+## Running
+
+Next, let's see how to run an embedded program on QEMU! This time we'll use the
+`hello` example which actually does something.
+
+For convenience here's the source code of `examples/hello.rs`:
+
+```rust,ignore
+//! Prints "Hello, world!" on the host console using semihosting
+
+#![no_main]
+#![no_std]
+
+use panic_halt as _;
+
+use cortex_m_rt::entry;
+use cortex_m_semihosting::{debug, hprintln};
+
+#[entry]
+fn main() -> ! {
+ hprintln!("Hello, world!").unwrap();
+
+ // exit QEMU
+ // NOTE do not run this on hardware; it can corrupt OpenOCD state
+ debug::exit(debug::EXIT_SUCCESS);
+
+ loop {}
+}
+```
+
+This program uses something called semihosting to print text to the *host*
+console. When using real hardware this requires a debug session but when using
+QEMU this Just Works.
+
+Let's start by compiling the example:
+
+```console
+cargo build --example hello
+```
+
+The output binary will be located at
+`target/thumbv7m-none-eabi/debug/examples/hello`.
+
+To run this binary on QEMU run the following command:
+
+```console
+qemu-system-arm \
+ -cpu cortex-m3 \
+ -machine lm3s6965evb \
+ -nographic \
+ -semihosting-config enable=on,target=native \
+ -kernel target/thumbv7m-none-eabi/debug/examples/hello
+```
+
+```text
+Hello, world!
+```
+
+The command should successfully exit (exit code = 0) after printing the text. On
+*nix you can check that with the following command:
+
+```console
+echo $?
+```
+
+```text
+0
+```
+
+Let's break down that QEMU command:
+
+- `qemu-system-arm`. This is the QEMU emulator. There are a few variants of
+ these QEMU binaries; this one does full *system* emulation of *ARM* machines
+ hence the name.
+
+- `-cpu cortex-m3`. This tells QEMU to emulate a Cortex-M3 CPU. Specifying the
+ CPU model lets us catch some miscompilation errors: for example, running a
+ program compiled for the Cortex-M4F, which has a hardware FPU, will make QEMU
+ error during its execution.
+
+- `-machine lm3s6965evb`. This tells QEMU to emulate the LM3S6965EVB, a
+ evaluation board that contains a LM3S6965 microcontroller.
+
+- `-nographic`. This tells QEMU to not launch its GUI.
+
+- `-semihosting-config (..)`. This tells QEMU to enable semihosting. Semihosting
+ lets the emulated device, among other things, use the host stdout, stderr and
+ stdin and create files on the host.
+
+- `-kernel $file`. This tells QEMU which binary to load and run on the emulated
+ machine.
+
+Typing out that long QEMU command is too much work! We can set a custom runner
+to simplify the process. `.cargo/config.toml` has a commented out runner that invokes
+QEMU; let's uncomment it:
+
+```console
+head -n3 .cargo/config.toml
+```
+
+```toml
+[target.thumbv7m-none-eabi]
+# uncomment this to make `cargo run` execute programs on QEMU
+runner = "qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel"
+```
+
+This runner only applies to the `thumbv7m-none-eabi` target, which is our
+default compilation target. Now `cargo run` will compile the program and run it
+on QEMU:
+
+```console
+cargo run --example hello --release
+```
+
+```text
+ Compiling app v0.1.0 (file:///tmp/app)
+ Finished release [optimized + debuginfo] target(s) in 0.26s
+ Running `qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -semihosting-config enable=on,target=native -kernel target/thumbv7m-none-eabi/release/examples/hello`
+Hello, world!
+```
+
+## Debugging
+
+Debugging is critical to embedded development. Let's see how it's done.
+
+Debugging an embedded device involves *remote* debugging as the program that we
+want to debug won't be running on the machine that's running the debugger
+program (GDB or LLDB).
+
+Remote debugging involves a client and a server. In a QEMU setup, the client
+will be a GDB (or LLDB) process and the server will be the QEMU process that's
+also running the embedded program.
+
+In this section we'll use the `hello` example we already compiled.
+
+The first debugging step is to launch QEMU in debugging mode:
+
+```console
+qemu-system-arm \
+ -cpu cortex-m3 \
+ -machine lm3s6965evb \
+ -nographic \
+ -semihosting-config enable=on,target=native \
+ -gdb tcp::3333 \
+ -S \
+ -kernel target/thumbv7m-none-eabi/debug/examples/hello
+```
+
+This command won't print anything to the console and will block the terminal. We
+have passed two extra flags this time:
+
+- `-gdb tcp::3333`. This tells QEMU to wait for a GDB connection on TCP
+ port 3333.
+
+- `-S`. This tells QEMU to freeze the machine at startup. Without this the
+ program would have reached the end of main before we had a chance to launch
+ the debugger!
+
+Next we launch GDB in another terminal and tell it to load the debug symbols of
+the example:
+
+```console
+gdb-multiarch -q target/thumbv7m-none-eabi/debug/examples/hello
+```
+
+**NOTE**: you might need another version of gdb instead of `gdb-multiarch` depending
+on which one you installed in the installation chapter. This could also be
+`arm-none-eabi-gdb` or just `gdb`.
+
+Then within the GDB shell we connect to QEMU, which is waiting for a connection
+on TCP port 3333.
+
+```console
+target remote :3333
+```
+
+```text
+Remote debugging using :3333
+Reset () at $REGISTRY/cortex-m-rt-0.6.1/src/lib.rs:473
+473 pub unsafe extern "C" fn Reset() -> ! {
+```
+
+
+You'll see that the process is halted and that the program counter is pointing
+to a function named `Reset`. That is the reset handler: what Cortex-M cores
+execute upon booting.
+
+> Note that on some setup, instead of displaying the line `Reset () at $REGISTRY/cortex-m-rt-0.6.1/src/lib.rs:473` as shown above, gdb may print some warnings like :
+>
+>`core::num::bignum::Big32x40::mul_small () at src/libcore/num/bignum.rs:254`
+> ` src/libcore/num/bignum.rs: No such file or directory.`
+>
+> That's a known glitch. You can safely ignore those warnings, you're most likely at Reset().
+
+
+This reset handler will eventually call our main function. Let's skip all the
+way there using a breakpoint and the `continue` command. To set the breakpoint, let's first take a look where we would like to break in our code, with the `list` command.
+
+```console
+list main
+```
+This will show the source code, from the file examples/hello.rs.
+
+```text
+6 use panic_halt as _;
+7
+8 use cortex_m_rt::entry;
+9 use cortex_m_semihosting::{debug, hprintln};
+10
+11 #[entry]
+12 fn main() -> ! {
+13 hprintln!("Hello, world!").unwrap();
+14
+15 // exit QEMU
+```
+We would like to add a breakpoint just before the "Hello, world!", which is on line 13. We do that with the `break` command:
+
+```console
+break 13
+```
+We can now instruct gdb to run up to our main function, with the `continue` command:
+
+```console
+continue
+```
+
+```text
+Continuing.
+
+Breakpoint 1, hello::__cortex_m_rt_main () at examples\hello.rs:13
+13 hprintln!("Hello, world!").unwrap();
+```
+
+We are now close to the code that prints "Hello, world!". Let's move forward
+using the `next` command.
+
+``` console
+next
+```
+
+```text
+16 debug::exit(debug::EXIT_SUCCESS);
+```
+
+At this point you should see "Hello, world!" printed on the terminal that's
+running `qemu-system-arm`.
+
+```text
+$ qemu-system-arm (..)
+Hello, world!
+```
+
+Calling `next` again will terminate the QEMU process.
+
+```console
+next
+```
+
+```text
+[Inferior 1 (Remote target) exited normally]
+```
+
+You can now exit the GDB session.
+
+``` console
+quit
+```
diff --git a/src/doc/embedded-book/src/start/registers.md b/src/doc/embedded-book/src/start/registers.md
new file mode 100644
index 000000000..09f695a0a
--- /dev/null
+++ b/src/doc/embedded-book/src/start/registers.md
@@ -0,0 +1,201 @@
+# Memory Mapped Registers
+
+Embedded systems can only get so far by executing normal Rust code and moving data around in RAM. If we want to get any information into or out of our system (be that blinking an LED, detecting a button press or communicating with an off-chip peripheral on some sort of bus) we're going to have to dip into the world of Peripherals and their 'memory mapped registers'.
+
+You may well find that the code you need to access the peripherals in your micro-controller has already been written, at one of the following levels:
+<p align="center">
+<img title="Common crates" src="../assets/crates.png">
+</p>
+
+* Micro-architecture Crate - This sort of crate handles any useful routines common to the processor core your microcontroller is using, as well as any peripherals that are common to all micro-controllers that use that particular type of processor core. For example the [cortex-m] crate gives you functions to enable and disable interrupts, which are the same for all Cortex-M based micro-controllers. It also gives you access to the 'SysTick' peripheral included with all Cortex-M based micro-controllers.
+* Peripheral Access Crate (PAC) - This sort of crate is a thin wrapper over the various memory-wrapper registers defined for your particular part-number of micro-controller you are using. For example, [tm4c123x] for the Texas Instruments Tiva-C TM4C123 series, or [stm32f30x] for the ST-Micro STM32F30x series. Here, you'll be interacting with the registers directly, following each peripheral's operating instructions given in your micro-controller's Technical Reference Manual.
+* HAL Crate - These crates offer a more user-friendly API for your particular processor, often by implementing some common traits defined in [embedded-hal]. For example, this crate might offer a `Serial` struct, with a constructor that takes an appropriate set of GPIO pins and a baud rate, and offers some sort of `write_byte` function for sending data. See the chapter on [Portability] for more information on [embedded-hal].
+* Board Crate - These crates go one step further than a HAL Crate by pre-configuring various peripherals and GPIO pins to suit the specific developer kit or board you are using, such as [stm32f3-discovery] for the STM32F3DISCOVERY board.
+
+[cortex-m]: https://crates.io/crates/cortex-m
+[tm4c123x]: https://crates.io/crates/tm4c123x
+[stm32f30x]: https://crates.io/crates/stm32f30x
+[embedded-hal]: https://crates.io/crates/embedded-hal
+[Portability]: ../portability/index.md
+[stm32f3-discovery]: https://crates.io/crates/stm32f3-discovery
+[Discovery]: https://rust-embedded.github.io/discovery/
+
+## Board Crate
+
+A board crate is the perfect starting point, if you're new to embedded Rust. They nicely abstract the HW details that might be overwelming when starting studying this subject, and makes standard tasks easy, like turning a LED on or off. The functionality it exposes varies a lot between boards. Since this book aims at staying hardware agnostic, the board crates won't be covered by this book.
+
+If you want to experiment with the STM32F3DISCOVERY board, it is highly recommmand to take a look at the [stm32f3-discovery] board crate, which provides functionality to blink the board LEDs, access its compass, bluetooth and more. The [Discovery] book offers a great introduction to the use of a board crate.
+
+But if you're working on a system that doesn't yet have dedicated board crate, or you need functionality not provided by existing crates, read on as we start from the bottom, with the micro-architecture crates.
+
+## Micro-architecture crate
+
+Let's look at the SysTick peripheral that's common to all Cortex-M based micro-controllers. We can find a pretty low-level API in the [cortex-m] crate, and we can use it like this:
+
+```rust,ignore
+#![no_std]
+#![no_main]
+use cortex_m::peripheral::{syst, Peripherals};
+use cortex_m_rt::entry;
+use panic_halt as _;
+
+#[entry]
+fn main() -> ! {
+ let peripherals = Peripherals::take().unwrap();
+ let mut systick = peripherals.SYST;
+ systick.set_clock_source(syst::SystClkSource::Core);
+ systick.set_reload(1_000);
+ systick.clear_current();
+ systick.enable_counter();
+ while !systick.has_wrapped() {
+ // Loop
+ }
+
+ loop {}
+}
+```
+The functions on the `SYST` struct map pretty closely to the functionality defined by the ARM Technical Reference Manual for this peripheral. There's nothing in this API about 'delaying for X milliseconds' - we have to crudely implement that ourselves using a `while` loop. Note that we can't access our `SYST` struct until we have called `Peripherals::take()` - this is a special routine that guarantees that there is only one `SYST` structure in our entire program. For more on that, see the [Peripherals] section.
+
+[Peripherals]: ../peripherals/index.md
+
+## Using a Peripheral Access Crate (PAC)
+
+We won't get very far with our embedded software development if we restrict ourselves to only the basic peripherals included with every Cortex-M. At some point, we're going to need to write some code that's specific to the particular micro-controller we're using. In this example, let's assume we have an Texas Instruments TM4C123 - a middling 80MHz Cortex-M4 with 256 KiB of Flash. We're going to pull in the [tm4c123x] crate to make use of this chip.
+
+```rust,ignore
+#![no_std]
+#![no_main]
+
+use panic_halt as _; // panic handler
+
+use cortex_m_rt::entry;
+use tm4c123x;
+
+#[entry]
+pub fn init() -> (Delay, Leds) {
+ let cp = cortex_m::Peripherals::take().unwrap();
+ let p = tm4c123x::Peripherals::take().unwrap();
+
+ let pwm = p.PWM0;
+ pwm.ctl.write(|w| w.globalsync0().clear_bit());
+ // Mode = 1 => Count up/down mode
+ pwm._2_ctl.write(|w| w.enable().set_bit().mode().set_bit());
+ pwm._2_gena.write(|w| w.actcmpau().zero().actcmpad().one());
+ // 528 cycles (264 up and down) = 4 loops per video line (2112 cycles)
+ pwm._2_load.write(|w| unsafe { w.load().bits(263) });
+ pwm._2_cmpa.write(|w| unsafe { w.compa().bits(64) });
+ pwm.enable.write(|w| w.pwm4en().set_bit());
+}
+
+```
+
+We've accessed the `PWM0` peripheral in exactly the same way as we accessed the `SYST` peripheral earlier, except we called `tm4c123x::Peripherals::take()`. As this crate was auto-generated using [svd2rust], the access functions for our register fields take a closure, rather than a numeric argument. While this looks like a lot of code, the Rust compiler can use it to perform a bunch of checks for us, but then generate machine-code which is pretty close to hand-written assembler! Where the auto-generated code isn't able to determine that all possible arguments to a particular accessor function are valid (for example, if the SVD defines the register as 32-bit but doesn't say if some of those 32-bit values have a special meaning), then the function is marked as `unsafe`. We can see this in the example above when setting the `load` and `compa` sub-fields using the `bits()` function.
+
+### Reading
+
+The `read()` function returns an object which gives read-only access to the various sub-fields within this register, as defined by the manufacturer's SVD file for this chip. You can find all the functions available on special `R` return type for this particular register, in this particular peripheral, on this particular chip, in the [tm4c123x documentation][tm4c123x documentation R].
+
+```rust,ignore
+if pwm.ctl.read().globalsync0().is_set() {
+ // Do a thing
+}
+```
+
+### Writing
+
+The `write()` function takes a closure with a single argument. Typically we call this `w`. This argument then gives read-write access to the various sub-fields within this register, as defined by the manufacturer's SVD file for this chip. Again, you can find all the functions available on the 'w' for this particular register, in this particular peripheral, on this particular chip, in the [tm4c123x documentation][tm4c123x Documentation W]. Note that all of the sub-fields that we do not set will be set to a default value for us - any existing content in the register will be lost.
+
+```rust,ignore
+pwm.ctl.write(|w| w.globalsync0().clear_bit());
+```
+
+### Modifying
+
+If we wish to change only one particular sub-field in this register and leave the other sub-fields unchanged, we can use the `modify` function. This function takes a closure with two arguments - one for reading and one for writing. Typically we call these `r` and `w` respectively. The `r` argument can be used to inspect the current contents of the register, and the `w` argument can be used to modify the register contents.
+
+```rust,ignore
+pwm.ctl.modify(|r, w| w.globalsync0().clear_bit());
+```
+
+The `modify` function really shows the power of closures here. In C, we'd have to read into some temporary value, modify the correct bits and then write the value back. This means there's considerable scope for error:
+
+```C
+uint32_t temp = pwm0.ctl.read();
+temp |= PWM0_CTL_GLOBALSYNC0;
+pwm0.ctl.write(temp);
+uint32_t temp2 = pwm0.enable.read();
+temp2 |= PWM0_ENABLE_PWM4EN;
+pwm0.enable.write(temp); // Uh oh! Wrong variable!
+```
+
+[svd2rust]: https://crates.io/crates/svd2rust
+[tm4c123x documentation R]: https://docs.rs/tm4c123x/0.7.0/tm4c123x/pwm0/ctl/struct.R.html
+[tm4c123x documentation W]: https://docs.rs/tm4c123x/0.7.0/tm4c123x/pwm0/ctl/struct.W.html
+
+## Using a HAL crate
+
+The HAL crate for a chip typically works by implementing a custom Trait for the raw structures exposed by the PAC. Often this trait will define a function called `constrain()` for single peripherals or `split()` for things like GPIO ports with multiple pins. This function will consume the underlying raw peripheral structure and return a new object with a higher-level API. This API may also do things like have the Serial port `new` function require a borrow on some `Clock` structure, which can only be generated by calling the function which configures the PLLs and sets up all the clock frequencies. In this way, it is statically impossible to create a Serial port object without first having configured the clock rates, or for the Serial port object to mis-convert the baud rate into clock ticks. Some crates even define special traits for the states each GPIO pin can be in, requiring the user to put a pin into the correct state (say, by selecting the appropriate Alternate Function Mode) before passing the pin into Peripheral. All with no run-time cost!
+
+Let's see an example:
+
+```rust,ignore
+#![no_std]
+#![no_main]
+
+use panic_halt as _; // panic handler
+
+use cortex_m_rt::entry;
+use tm4c123x_hal as hal;
+use tm4c123x_hal::prelude::*;
+use tm4c123x_hal::serial::{NewlineMode, Serial};
+use tm4c123x_hal::sysctl;
+
+#[entry]
+fn main() -> ! {
+ let p = hal::Peripherals::take().unwrap();
+ let cp = hal::CorePeripherals::take().unwrap();
+
+ // Wrap up the SYSCTL struct into an object with a higher-layer API
+ let mut sc = p.SYSCTL.constrain();
+ // Pick our oscillation settings
+ sc.clock_setup.oscillator = sysctl::Oscillator::Main(
+ sysctl::CrystalFrequency::_16mhz,
+ sysctl::SystemClock::UsePll(sysctl::PllOutputFrequency::_80_00mhz),
+ );
+ // Configure the PLL with those settings
+ let clocks = sc.clock_setup.freeze();
+
+ // Wrap up the GPIO_PORTA struct into an object with a higher-layer API.
+ // Note it needs to borrow `sc.power_control` so it can power up the GPIO
+ // peripheral automatically.
+ let mut porta = p.GPIO_PORTA.split(&sc.power_control);
+
+ // Activate the UART.
+ let uart = Serial::uart0(
+ p.UART0,
+ // The transmit pin
+ porta
+ .pa1
+ .into_af_push_pull::<hal::gpio::AF1>(&mut porta.control),
+ // The receive pin
+ porta
+ .pa0
+ .into_af_push_pull::<hal::gpio::AF1>(&mut porta.control),
+ // No RTS or CTS required
+ (),
+ (),
+ // The baud rate
+ 115200_u32.bps(),
+ // Output handling
+ NewlineMode::SwapLFtoCRLF,
+ // We need the clock rates to calculate the baud rate divisors
+ &clocks,
+ // We need this to power up the UART peripheral
+ &sc.power_control,
+ );
+
+ loop {
+ writeln!(uart, "Hello, World!\r\n").unwrap();
+ }
+}
+```
diff --git a/src/doc/embedded-book/src/start/semihosting.md b/src/doc/embedded-book/src/start/semihosting.md
new file mode 100644
index 000000000..cf4626f44
--- /dev/null
+++ b/src/doc/embedded-book/src/start/semihosting.md
@@ -0,0 +1,145 @@
+# Semihosting
+
+Semihosting is a mechanism that lets embedded devices do I/O on the host and is
+mainly used to log messages to the host console. Semihosting requires a debug
+session and pretty much nothing else (no extra wires!) so it's super convenient
+to use. The downside is that it's super slow: each write operation can take
+several milliseconds depending on the hardware debugger (e.g. ST-Link) you use.
+
+The [`cortex-m-semihosting`] crate provides an API to do semihosting operations
+on Cortex-M devices. The program below is the semihosting version of "Hello,
+world!":
+
+[`cortex-m-semihosting`]: https://crates.io/crates/cortex-m-semihosting
+
+```rust,ignore
+#![no_main]
+#![no_std]
+
+use panic_halt as _;
+
+use cortex_m_rt::entry;
+use cortex_m_semihosting::hprintln;
+
+#[entry]
+fn main() -> ! {
+ hprintln!("Hello, world!").unwrap();
+
+ loop {}
+}
+```
+
+If you run this program on hardware you'll see the "Hello, world!" message
+within the OpenOCD logs.
+
+``` text
+$ openocd
+(..)
+Hello, world!
+(..)
+```
+
+You do need to enable semihosting in OpenOCD from GDB first:
+``` console
+(gdb) monitor arm semihosting enable
+semihosting is enabled
+```
+
+QEMU understands semihosting operations so the above program will also work with
+`qemu-system-arm` without having to start a debug session. Note that you'll
+need to pass the `-semihosting-config` flag to QEMU to enable semihosting
+support; these flags are already included in the `.cargo/config.toml` file of the
+template.
+
+``` text
+$ # this program will block the terminal
+$ cargo run
+ Running `qemu-system-arm (..)
+Hello, world!
+```
+
+There's also an `exit` semihosting operation that can be used to terminate the
+QEMU process. Important: do **not** use `debug::exit` on hardware; this function
+can corrupt your OpenOCD session and you will not be able to debug more programs
+until you restart it.
+
+```rust,ignore
+#![no_main]
+#![no_std]
+
+use panic_halt as _;
+
+use cortex_m_rt::entry;
+use cortex_m_semihosting::debug;
+
+#[entry]
+fn main() -> ! {
+ let roses = "blue";
+
+ if roses == "red" {
+ debug::exit(debug::EXIT_SUCCESS);
+ } else {
+ debug::exit(debug::EXIT_FAILURE);
+ }
+
+ loop {}
+}
+```
+
+``` text
+$ cargo run
+ Running `qemu-system-arm (..)
+
+$ echo $?
+1
+```
+
+One last tip: you can set the panicking behavior to `exit(EXIT_FAILURE)`. This
+will let you write `no_std` run-pass tests that you can run on QEMU.
+
+For convenience, the `panic-semihosting` crate has an "exit" feature that when
+enabled invokes `exit(EXIT_FAILURE)` after logging the panic message to the host
+stderr.
+
+```rust,ignore
+#![no_main]
+#![no_std]
+
+use panic_semihosting as _; // features = ["exit"]
+
+use cortex_m_rt::entry;
+use cortex_m_semihosting::debug;
+
+#[entry]
+fn main() -> ! {
+ let roses = "blue";
+
+ assert_eq!(roses, "red");
+
+ loop {}
+}
+```
+
+``` text
+$ cargo run
+ Running `qemu-system-arm (..)
+panicked at 'assertion failed: `(left == right)`
+ left: `"blue"`,
+ right: `"red"`', examples/hello.rs:15:5
+
+$ echo $?
+1
+```
+
+**NOTE**: To enable this feature on `panic-semihosting`, edit your
+`Cargo.toml` dependencies section where `panic-semihosting` is specified with:
+
+``` toml
+panic-semihosting = { version = "VERSION", features = ["exit"] }
+```
+
+where `VERSION` is the version desired. For more information on dependencies
+features check the [`specifying dependencies`] section of the Cargo book.
+
+[`specifying dependencies`]:
+https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
diff --git a/src/doc/embedded-book/src/static-guarantees/design-contracts.md b/src/doc/embedded-book/src/static-guarantees/design-contracts.md
new file mode 100644
index 000000000..56fec45be
--- /dev/null
+++ b/src/doc/embedded-book/src/static-guarantees/design-contracts.md
@@ -0,0 +1,254 @@
+# Design Contracts
+
+In our last chapter, we wrote an interface that *didn't* enforce design contracts. Let's take another look at our imaginary GPIO configuration register:
+
+| Name | Bit Number(s) | Value | Meaning | Notes |
+| ---: | ------------: | ----: | ------: | ----: |
+| enable | 0 | 0 | disabled | Disables the GPIO |
+| | | 1 | enabled | Enables the GPIO |
+| direction | 1 | 0 | input | Sets the direction to Input |
+| | | 1 | output | Sets the direction to Output |
+| input_mode | 2..3 | 00 | hi-z | Sets the input as high resistance |
+| | | 01 | pull-low | Input pin is pulled low |
+| | | 10 | pull-high | Input pin is pulled high |
+| | | 11 | n/a | Invalid state. Do not set |
+| output_mode | 4 | 0 | set-low | Output pin is driven low |
+| | | 1 | set-high | Output pin is driven high |
+| input_status | 5 | x | in-val | 0 if input is < 1.5v, 1 if input >= 1.5v |
+
+If we instead checked the state before making use of the underlying hardware, enforcing our design contracts at runtime, we might write code that looks like this instead:
+
+```rust,ignore
+/// GPIO interface
+struct GpioConfig {
+ /// GPIO Configuration structure generated by svd2rust
+ periph: GPIO_CONFIG,
+}
+
+impl GpioConfig {
+ pub fn set_enable(&mut self, is_enabled: bool) {
+ self.periph.modify(|_r, w| {
+ w.enable().set_bit(is_enabled)
+ });
+ }
+
+ pub fn set_direction(&mut self, is_output: bool) -> Result<(), ()> {
+ if self.periph.read().enable().bit_is_clear() {
+ // Must be enabled to set direction
+ return Err(());
+ }
+
+ self.periph.modify(|r, w| {
+ w.direction().set_bit(is_output)
+ });
+
+ Ok(())
+ }
+
+ pub fn set_input_mode(&mut self, variant: InputMode) -> Result<(), ()> {
+ if self.periph.read().enable().bit_is_clear() {
+ // Must be enabled to set input mode
+ return Err(());
+ }
+
+ if self.periph.read().direction().bit_is_set() {
+ // Direction must be input
+ return Err(());
+ }
+
+ self.periph.modify(|_r, w| {
+ w.input_mode().variant(variant)
+ });
+
+ Ok(())
+ }
+
+ pub fn set_output_status(&mut self, is_high: bool) -> Result<(), ()> {
+ if self.periph.read().enable().bit_is_clear() {
+ // Must be enabled to set output status
+ return Err(());
+ }
+
+ if self.periph.read().direction().bit_is_clear() {
+ // Direction must be output
+ return Err(());
+ }
+
+ self.periph.modify(|_r, w| {
+ w.output_mode.set_bit(is_high)
+ });
+
+ Ok(())
+ }
+
+ pub fn get_input_status(&self) -> Result<bool, ()> {
+ if self.periph.read().enable().bit_is_clear() {
+ // Must be enabled to get status
+ return Err(());
+ }
+
+ if self.periph.read().direction().bit_is_set() {
+ // Direction must be input
+ return Err(());
+ }
+
+ Ok(self.periph.read().input_status().bit_is_set())
+ }
+}
+```
+
+Because we need to enforce the restrictions on the hardware, we end up doing a lot of runtime checking which wastes time and resources, and this code will be much less pleasant for the developer to use.
+
+## Type States
+
+But what if instead, we used Rust's type system to enforce the state transition rules? Take this example:
+
+```rust,ignore
+/// GPIO interface
+struct GpioConfig<ENABLED, DIRECTION, MODE> {
+ /// GPIO Configuration structure generated by svd2rust
+ periph: GPIO_CONFIG,
+ enabled: ENABLED,
+ direction: DIRECTION,
+ mode: MODE,
+}
+
+// Type states for MODE in GpioConfig
+struct Disabled;
+struct Enabled;
+struct Output;
+struct Input;
+struct PulledLow;
+struct PulledHigh;
+struct HighZ;
+struct DontCare;
+
+/// These functions may be used on any GPIO Pin
+impl<EN, DIR, IN_MODE> GpioConfig<EN, DIR, IN_MODE> {
+ pub fn into_disabled(self) -> GpioConfig<Disabled, DontCare, DontCare> {
+ self.periph.modify(|_r, w| w.enable.disabled());
+ GpioConfig {
+ periph: self.periph,
+ enabled: Disabled,
+ direction: DontCare,
+ mode: DontCare,
+ }
+ }
+
+ pub fn into_enabled_input(self) -> GpioConfig<Enabled, Input, HighZ> {
+ self.periph.modify(|_r, w| {
+ w.enable.enabled()
+ .direction.input()
+ .input_mode.high_z()
+ });
+ GpioConfig {
+ periph: self.periph,
+ enabled: Enabled,
+ direction: Input,
+ mode: HighZ,
+ }
+ }
+
+ pub fn into_enabled_output(self) -> GpioConfig<Enabled, Output, DontCare> {
+ self.periph.modify(|_r, w| {
+ w.enable.enabled()
+ .direction.output()
+ .input_mode.set_high()
+ });
+ GpioConfig {
+ periph: self.periph,
+ enabled: Enabled,
+ direction: Output,
+ mode: DontCare,
+ }
+ }
+}
+
+/// This function may be used on an Output Pin
+impl GpioConfig<Enabled, Output, DontCare> {
+ pub fn set_bit(&mut self, set_high: bool) {
+ self.periph.modify(|_r, w| w.output_mode.set_bit(set_high));
+ }
+}
+
+/// These methods may be used on any enabled input GPIO
+impl<IN_MODE> GpioConfig<Enabled, Input, IN_MODE> {
+ pub fn bit_is_set(&self) -> bool {
+ self.periph.read().input_status.bit_is_set()
+ }
+
+ pub fn into_input_high_z(self) -> GpioConfig<Enabled, Input, HighZ> {
+ self.periph.modify(|_r, w| w.input_mode().high_z());
+ GpioConfig {
+ periph: self.periph,
+ enabled: Enabled,
+ direction: Input,
+ mode: HighZ,
+ }
+ }
+
+ pub fn into_input_pull_down(self) -> GpioConfig<Enabled, Input, PulledLow> {
+ self.periph.modify(|_r, w| w.input_mode().pull_low());
+ GpioConfig {
+ periph: self.periph,
+ enabled: Enabled,
+ direction: Input,
+ mode: PulledLow,
+ }
+ }
+
+ pub fn into_input_pull_up(self) -> GpioConfig<Enabled, Input, PulledHigh> {
+ self.periph.modify(|_r, w| w.input_mode().pull_high());
+ GpioConfig {
+ periph: self.periph,
+ enabled: Enabled,
+ direction: Input,
+ mode: PulledHigh,
+ }
+ }
+}
+```
+
+Now let's see what the code using this would look like:
+
+```rust,ignore
+/*
+ * Example 1: Unconfigured to High-Z input
+ */
+let pin: GpioConfig<Disabled, _, _> = get_gpio();
+
+// Can't do this, pin isn't enabled!
+// pin.into_input_pull_down();
+
+// Now turn the pin from unconfigured to a high-z input
+let input_pin = pin.into_enabled_input();
+
+// Read from the pin
+let pin_state = input_pin.bit_is_set();
+
+// Can't do this, input pins don't have this interface!
+// input_pin.set_bit(true);
+
+/*
+ * Example 2: High-Z input to Pulled Low input
+ */
+let pulled_low = input_pin.into_input_pull_down();
+let pin_state = pulled_low.bit_is_set();
+
+/*
+ * Example 3: Pulled Low input to Output, set high
+ */
+let output_pin = pulled_low.into_enabled_output();
+output_pin.set_bit(true);
+
+// Can't do this, output pins don't have this interface!
+// output_pin.into_input_pull_down();
+```
+
+This is definitely a convenient way to store the state of the pin, but why do it this way? Why is this better than storing the state as an `enum` inside of our `GpioConfig` structure?
+
+## Compile Time Functional Safety
+
+Because we are enforcing our design constraints entirely at compile time, this incurs no runtime cost. It is impossible to set an output mode when you have a pin in an input mode. Instead, you must walk through the states by converting it to an output pin, and then setting the output mode. Because of this, there is no runtime penalty due to checking the current state before executing a function.
+
+Also, because these states are enforced by the type system, there is no longer room for errors by consumers of this interface. If they try to perform an illegal state transition, the code will not compile!
diff --git a/src/doc/embedded-book/src/static-guarantees/index.md b/src/doc/embedded-book/src/static-guarantees/index.md
new file mode 100644
index 000000000..a5bb8fa3a
--- /dev/null
+++ b/src/doc/embedded-book/src/static-guarantees/index.md
@@ -0,0 +1,23 @@
+# Static Guarantees
+
+Rust's type system prevents data races at compile time (see [`Send`] and
+[`Sync`] traits). The type system can also be used to check other properties at
+compile time; reducing the need for runtime checks in some cases.
+
+[`Send`]: https://doc.rust-lang.org/core/marker/trait.Send.html
+[`Sync`]: https://doc.rust-lang.org/core/marker/trait.Sync.html
+
+When applied to embedded programs these *static checks* can be used, for
+example, to enforce that configuration of I/O interfaces is done properly. For
+instance, one can design an API where it is only possible to initialize a serial
+interface by first configuring the pins that will be used by the interface.
+
+One can also statically check that operations, like setting a pin low, can only
+be performed on correctly configured peripherals. For example, trying to change
+the output state of a pin configured in floating input mode would raise a
+compile error.
+
+And, as seen in the previous chapter, the concept of ownership can be applied
+to peripherals to ensure that only certain parts of a program can modify a
+peripheral. This *access control* makes software easier to reason about
+compared to the alternative of treating peripherals as global mutable state.
diff --git a/src/doc/embedded-book/src/static-guarantees/state-machines.md b/src/doc/embedded-book/src/static-guarantees/state-machines.md
new file mode 100644
index 000000000..842079117
--- /dev/null
+++ b/src/doc/embedded-book/src/static-guarantees/state-machines.md
@@ -0,0 +1,98 @@
+# Peripherals as State Machines
+
+The peripherals of a microcontroller can be thought of as set of state machines. For example, the configuration of a simplified [GPIO pin] could be represented as the following tree of states:
+
+[GPIO pin]: https://en.wikipedia.org/wiki/General-purpose_input/output
+
+* Disabled
+* Enabled
+ * Configured as Output
+ * Output: High
+ * Output: Low
+ * Configured as Input
+ * Input: High Resistance
+ * Input: Pulled Low
+ * Input: Pulled High
+
+If the peripheral starts in the `Disabled` mode, to move to the `Input: High Resistance` mode, we must perform the following steps:
+
+1. Disabled
+2. Enabled
+3. Configured as Input
+4. Input: High Resistance
+
+If we wanted to move from `Input: High Resistance` to `Input: Pulled Low`, we must perform the following steps:
+
+1. Input: High Resistance
+2. Input: Pulled Low
+
+Similarly, if we want to move a GPIO pin from configured as `Input: Pulled Low` to `Output: High`, we must perform the following steps:
+
+1. Input: Pulled Low
+2. Configured as Input
+3. Configured as Output
+4. Output: High
+
+## Hardware Representation
+
+Typically the states listed above are set by writing values to given registers mapped to a GPIO peripheral. Let's define an imaginary GPIO Configuration Register to illustrate this:
+
+| Name | Bit Number(s) | Value | Meaning | Notes |
+| ---: | ------------: | ----: | ------: | ----: |
+| enable | 0 | 0 | disabled | Disables the GPIO |
+| | | 1 | enabled | Enables the GPIO |
+| direction | 1 | 0 | input | Sets the direction to Input |
+| | | 1 | output | Sets the direction to Output |
+| input_mode | 2..3 | 00 | hi-z | Sets the input as high resistance |
+| | | 01 | pull-low | Input pin is pulled low |
+| | | 10 | pull-high | Input pin is pulled high |
+| | | 11 | n/a | Invalid state. Do not set |
+| output_mode | 4 | 0 | set-low | Output pin is driven low |
+| | | 1 | set-high | Output pin is driven high |
+| input_status | 5 | x | in-val | 0 if input is < 1.5v, 1 if input >= 1.5v |
+
+We _could_ expose the following structure in Rust to control this GPIO:
+
+```rust,ignore
+/// GPIO interface
+struct GpioConfig {
+ /// GPIO Configuration structure generated by svd2rust
+ periph: GPIO_CONFIG,
+}
+
+impl GpioConfig {
+ pub fn set_enable(&mut self, is_enabled: bool) {
+ self.periph.modify(|_r, w| {
+ w.enable().set_bit(is_enabled)
+ });
+ }
+
+ pub fn set_direction(&mut self, is_output: bool) {
+ self.periph.modify(|_r, w| {
+ w.direction().set_bit(is_output)
+ });
+ }
+
+ pub fn set_input_mode(&mut self, variant: InputMode) {
+ self.periph.modify(|_r, w| {
+ w.input_mode().variant(variant)
+ });
+ }
+
+ pub fn set_output_mode(&mut self, is_high: bool) {
+ self.periph.modify(|_r, w| {
+ w.output_mode.set_bit(is_high)
+ });
+ }
+
+ pub fn get_input_status(&self) -> bool {
+ self.periph.read().input_status().bit_is_set()
+ }
+}
+```
+
+However, this would allow us to modify certain registers that do not make sense. For example, what happens if we set the `output_mode` field when our GPIO is configured as an input?
+
+In general, use of this structure would allow us to reach states not defined by our state machine above: e.g. an output that is pulled low, or an input that is set high. For some hardware, this may not matter. On other hardware, it could cause unexpected or undefined behavior!
+
+Although this interface is convenient to write, it doesn't enforce the design contracts set out by our hardware implementation.
diff --git a/src/doc/embedded-book/src/static-guarantees/typestate-programming.md b/src/doc/embedded-book/src/static-guarantees/typestate-programming.md
new file mode 100644
index 000000000..9bd70f40d
--- /dev/null
+++ b/src/doc/embedded-book/src/static-guarantees/typestate-programming.md
@@ -0,0 +1,65 @@
+# Typestate Programming
+
+The concept of [typestates] describes the encoding of information about the current state of an object into the type of that object. Although this can sound a little arcane, if you have used the [Builder Pattern] in Rust, you have already started using Typestate Programming!
+
+[typestates]: https://en.wikipedia.org/wiki/Typestate_analysis
+[Builder Pattern]: https://doc.rust-lang.org/1.0.0/style/ownership/builders.html
+
+```rust
+pub mod foo_module {
+ #[derive(Debug)]
+ pub struct Foo {
+ inner: u32,
+ }
+
+ pub struct FooBuilder {
+ a: u32,
+ b: u32,
+ }
+
+ impl FooBuilder {
+ pub fn new(starter: u32) -> Self {
+ Self {
+ a: starter,
+ b: starter,
+ }
+ }
+
+ pub fn double_a(self) -> Self {
+ Self {
+ a: self.a * 2,
+ b: self.b,
+ }
+ }
+
+ pub fn into_foo(self) -> Foo {
+ Foo {
+ inner: self.a + self.b,
+ }
+ }
+ }
+}
+
+fn main() {
+ let x = foo_module::FooBuilder::new(10)
+ .double_a()
+ .into_foo();
+
+ println!("{:#?}", x);
+}
+```
+
+In this example, there is no direct way to create a `Foo` object. We must create a `FooBuilder`, and properly initialize it before we can obtain the `Foo` object we want.
+
+This minimal example encodes two states:
+
+* `FooBuilder`, which represents an "unconfigured", or "configuration in process" state
+* `Foo`, which represents a "configured", or "ready to use" state.
+
+## Strong Types
+
+Because Rust has a [Strong Type System], there is no easy way to magically create an instance of `Foo`, or to turn a `FooBuilder` into a `Foo` without calling the `into_foo()` method. Additionally, calling the `into_foo()` method consumes the original `FooBuilder` structure, meaning it can not be reused without the creation of a new instance.
+
+[Strong Type System]: https://en.wikipedia.org/wiki/Strong_and_weak_typing
+
+This allows us to represent the states of our system as types, and to include the necessary actions for state transitions into the methods that exchange one type for another. By creating a `FooBuilder`, and exchanging it for a `Foo` object, we have walked through the steps of a basic state machine.
diff --git a/src/doc/embedded-book/src/static-guarantees/zero-cost-abstractions.md b/src/doc/embedded-book/src/static-guarantees/zero-cost-abstractions.md
new file mode 100644
index 000000000..f7defd185
--- /dev/null
+++ b/src/doc/embedded-book/src/static-guarantees/zero-cost-abstractions.md
@@ -0,0 +1,42 @@
+# Zero Cost Abstractions
+
+Type states are also an excellent example of Zero Cost Abstractions - the ability to move certain behaviors to compile time execution or analysis. These type states contain no actual data, and are instead used as markers. Since they contain no data, they have no actual representation in memory at runtime:
+
+```rust,ignore
+use core::mem::size_of;
+
+let _ = size_of::<Enabled>(); // == 0
+let _ = size_of::<Input>(); // == 0
+let _ = size_of::<PulledHigh>(); // == 0
+let _ = size_of::<GpioConfig<Enabled, Input, PulledHigh>>(); // == 0
+```
+
+## Zero Sized Types
+
+```rust,ignore
+struct Enabled;
+```
+
+Structures defined like this are called Zero Sized Types, as they contain no actual data. Although these types act "real" at compile time - you can copy them, move them, take references to them, etc., however the optimizer will completely strip them away.
+
+In this snippet of code:
+
+```rust,ignore
+pub fn into_input_high_z(self) -> GpioConfig<Enabled, Input, HighZ> {
+ self.periph.modify(|_r, w| w.input_mode().high_z());
+ GpioConfig {
+ periph: self.periph,
+ enabled: Enabled,
+ direction: Input,
+ mode: HighZ,
+ }
+}
+```
+
+The GpioConfig we return never exists at runtime. Calling this function will generally boil down to a single assembly instruction - storing a constant register value to a register location. This means that the type state interface we've developed is a zero cost abstraction - it uses no more CPU, RAM, or code space tracking the state of `GpioConfig`, and renders to the same machine code as a direct register access.
+
+## Nesting
+
+In general, these abstractions may be nested as deeply as you would like. As long as all components used are zero sized types, the whole structure will not exist at runtime.
+
+For complex or deeply nested structures, it may be tedious to define all possible combinations of state. In these cases, macros may be used to generate all implementations.
diff --git a/src/doc/embedded-book/src/unsorted/index.md b/src/doc/embedded-book/src/unsorted/index.md
new file mode 100644
index 000000000..4be665496
--- /dev/null
+++ b/src/doc/embedded-book/src/unsorted/index.md
@@ -0,0 +1 @@
+# Unsorted topics
diff --git a/src/doc/embedded-book/src/unsorted/math.md b/src/doc/embedded-book/src/unsorted/math.md
new file mode 100644
index 000000000..91271710e
--- /dev/null
+++ b/src/doc/embedded-book/src/unsorted/math.md
@@ -0,0 +1,75 @@
+# Performing math functionality with `#[no_std]`
+
+If you want to perform math related functionality like calculating the squareroot or
+the exponential of a number and you have the full standard library available, your code
+might look like this:
+
+```rs
+//! Some mathematical functions with standard support available
+
+fn main() {
+ let float: f32 = 4.82832;
+ let floored_float = float.floor();
+
+ let sqrt_of_four = floored_float.sqrt();
+
+ let sinus_of_four = floored_float.sin();
+
+ let exponential_of_four = floored_float.exp();
+ println!("Floored test float {} to {}", float, floored_float);
+ println!("The square root of {} is {}", floored_float, sqrt_of_four);
+ println!("The sinus of four is {}", sinus_of_four);
+ println!(
+ "The exponential of four to the base e is {}",
+ exponential_of_four
+ )
+}
+```
+
+Without standard library support, these functions are not available.
+An external crate like [`libm`](https://crates.io/crates/libm) can be used instead. The example code
+would then look like this:
+
+```rs
+#![no_main]
+#![no_std]
+
+use panic_halt as _;
+
+use cortex_m_rt::entry;
+use cortex_m_semihosting::{debug, hprintln};
+use libm::{exp, floorf, sin, sqrtf};
+
+#[entry]
+fn main() -> ! {
+ let float = 4.82832;
+ let floored_float = floorf(float);
+
+ let sqrt_of_four = sqrtf(floored_float);
+
+ let sinus_of_four = sin(floored_float.into());
+
+ let exponential_of_four = exp(floored_float.into());
+ hprintln!("Floored test float {} to {}", float, floored_float).unwrap();
+ hprintln!("The square root of {} is {}", floored_float, sqrt_of_four).unwrap();
+ hprintln!("The sinus of four is {}", sinus_of_four).unwrap();
+ hprintln!(
+ "The exponential of four to the base e is {}",
+ exponential_of_four
+ )
+ .unwrap();
+ // exit QEMU
+ // NOTE do not run this on hardware; it can corrupt OpenOCD state
+ // debug::exit(debug::EXIT_SUCCESS);
+
+ loop {}
+}
+```
+
+If you need to perform more complex operations like DSP signal processing or advanced linear
+algebra on your MCU, the following crates might help you
+
+- [CMSIS DSP library binding](https://github.com/jacobrosenthal/cmsis-dsp-sys)
+- [`micromath`](https://github.com/tarcieri/micromath)
+- [`microfft`](https://crates.io/crates/microfft)
+- [`nalgebra`](https://github.com/dimforge/nalgebra)
diff --git a/src/doc/embedded-book/src/unsorted/speed-vs-size.md b/src/doc/embedded-book/src/unsorted/speed-vs-size.md
new file mode 100644
index 000000000..6538d94ba
--- /dev/null
+++ b/src/doc/embedded-book/src/unsorted/speed-vs-size.md
@@ -0,0 +1,173 @@
+# Optimizations: the speed size tradeoff
+
+Everyone wants their program to be super fast and super small but it's usually
+not possible to have both characteristics. This section discusses the
+different optimization levels that `rustc` provides and how they affect the
+execution time and binary size of a program.
+
+## No optimizations
+
+This is the default. When you call `cargo build` you use the development (AKA
+`dev`) profile. This profile is optimized for debugging so it enables debug
+information and does *not* enable any optimizations, i.e. it uses `-C opt-level
+= 0`.
+
+At least for bare metal development, debuginfo is zero cost in the sense that it
+won't occupy space in Flash / ROM so we actually recommend that you enable
+debuginfo in the release profile -- it is disabled by default. That will let you
+use breakpoints when debugging release builds.
+
+``` toml
+[profile.release]
+# symbols are nice and they don't increase the size on Flash
+debug = true
+```
+
+No optimizations is great for debugging because stepping through the code feels
+like you are executing the program statement by statement, plus you can `print`
+stack variables and function arguments in GDB. When the code is optimized, trying
+to print variables results in `$0 = <value optimized out>` being printed.
+
+The biggest downside of the `dev` profile is that the resulting binary will be
+huge and slow. The size is usually more of a problem because unoptimized
+binaries can occupy dozens of KiB of Flash, which your target device may not
+have -- the result: your unoptimized binary doesn't fit in your device!
+
+Can we have smaller, debugger friendly binaries? Yes, there's a trick.
+
+### Optimizing dependencies
+
+There's a Cargo feature named [`profile-overrides`] that lets you
+override the optimization level of dependencies. You can use that feature to
+optimize all dependencies for size while keeping the top crate unoptimized and
+debugger friendly.
+
+[`profile-overrides`]: https://doc.rust-lang.org/cargo/reference/profiles.html#overrides
+
+Here's an example:
+
+``` toml
+# Cargo.toml
+[package]
+name = "app"
+# ..
+
+[profile.dev.package."*"] # +
+opt-level = "z" # +
+```
+
+Without the override:
+
+``` text
+$ cargo size --bin app -- -A
+app :
+section size addr
+.vector_table 1024 0x8000000
+.text 9060 0x8000400
+.rodata 1708 0x8002780
+.data 0 0x20000000
+.bss 4 0x20000000
+```
+
+With the override:
+
+``` text
+$ cargo size --bin app -- -A
+app :
+section size addr
+.vector_table 1024 0x8000000
+.text 3490 0x8000400
+.rodata 1100 0x80011c0
+.data 0 0x20000000
+.bss 4 0x20000000
+```
+
+That's a 6 KiB reduction in Flash usage without any loss in the debuggability of
+the top crate. If you step into a dependency then you'll start seeing those
+`<value optimized out>` messages again but it's usually the case that you want
+to debug the top crate and not the dependencies. And if you *do* need to debug a
+dependency then you can use the `profile-overrides` feature to exclude a
+particular dependency from being optimized. See example below:
+
+``` toml
+# ..
+
+# don't optimize the `cortex-m-rt` crate
+[profile.dev.package.cortex-m-rt] # +
+opt-level = 0 # +
+
+# but do optimize all the other dependencies
+[profile.dev.package."*"]
+codegen-units = 1 # better optimizations
+opt-level = "z"
+```
+
+Now the top crate and `cortex-m-rt` are debugger friendly!
+
+## Optimize for speed
+
+As of 2018-09-18 `rustc` supports three "optimize for speed" levels: `opt-level
+= 1`, `2` and `3`. When you run `cargo build --release` you are using the release
+profile which defaults to `opt-level = 3`.
+
+Both `opt-level = 2` and `3` optimize for speed at the expense of binary size,
+but level `3` does more vectorization and inlining than level `2`. In
+particular, you'll see that at `opt-level` equal to or greater than `2` LLVM will
+unroll loops. Loop unrolling has a rather high cost in terms of Flash / ROM
+(e.g. from 26 bytes to 194 for a zero this array loop) but can also halve the
+execution time given the right conditions (e.g. number of iterations is big
+enough).
+
+Currently there's no way to disable loop unrolling in `opt-level = 2` and `3` so
+if you can't afford its cost you should optimize your program for size.
+
+## Optimize for size
+
+As of 2018-09-18 `rustc` supports two "optimize for size" levels: `opt-level =
+"s"` and `"z"`. These names were inherited from clang / LLVM and are not too
+descriptive but `"z"` is meant to give the idea that it produces smaller
+binaries than `"s"`.
+
+If you want your release binaries to be optimized for size then change the
+`profile.release.opt-level` setting in `Cargo.toml` as shown below.
+
+``` toml
+[profile.release]
+# or "z"
+opt-level = "s"
+```
+
+These two optimization levels greatly reduce LLVM's inline threshold, a metric
+used to decide whether to inline a function or not. One of Rust principles are
+zero cost abstractions; these abstractions tend to use a lot of newtypes and
+small functions to hold invariants (e.g. functions that borrow an inner value
+like `deref`, `as_ref`) so a low inline threshold can make LLVM miss
+optimization opportunities (e.g. eliminate dead branches, inline calls to
+closures).
+
+When optimizing for size you may want to try increasing the inline threshold to
+see if that has any effect on the binary size. The recommended way to change the
+inline threshold is to append the `-C inline-threshold` flag to the other
+rustflags in `.cargo/config.toml`.
+
+``` toml
+# .cargo/config.toml
+# this assumes that you are using the cortex-m-quickstart template
+[target.'cfg(all(target_arch = "arm", target_os = "none"))']
+rustflags = [
+ # ..
+ "-C", "inline-threshold=123", # +
+]
+```
+
+What value to use? [As of 1.29.0 these are the inline thresholds that the
+different optimization levels use][inline-threshold]:
+
+[inline-threshold]: https://github.com/rust-lang/rust/blob/1.29.0/src/librustc_codegen_llvm/back/write.rs#L2105-L2122
+
+- `opt-level = 3` uses 275
+- `opt-level = 2` uses 225
+- `opt-level = "s"` uses 75
+- `opt-level = "z"` uses 25
+
+You should try `225` and `275` when optimizing for size.
diff --git a/src/doc/embedded-book/triagebot.toml b/src/doc/embedded-book/triagebot.toml
new file mode 100644
index 000000000..fa0824ac5
--- /dev/null
+++ b/src/doc/embedded-book/triagebot.toml
@@ -0,0 +1 @@
+[assign]
diff --git a/src/doc/favicon.inc b/src/doc/favicon.inc
new file mode 100644
index 000000000..9c3306852
--- /dev/null
+++ b/src/doc/favicon.inc
@@ -0,0 +1 @@
+<link rel="icon" href="https://www.rust-lang.org/favicon.ico">
diff --git a/src/doc/footer.inc b/src/doc/footer.inc
new file mode 100644
index 000000000..77e151235
--- /dev/null
+++ b/src/doc/footer.inc
@@ -0,0 +1,7 @@
+<footer><p>
+Copyright &copy; 2011 The Rust Project Developers. Licensed under the
+<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>
+or the <a href="https://opensource.org/licenses/MIT">MIT license</a>, at your option.
+</p><p>
+This file may not be copied, modified, or distributed except according to those terms.
+</p></footer>
diff --git a/src/doc/full-toc.inc b/src/doc/full-toc.inc
new file mode 100644
index 000000000..604a65dc8
--- /dev/null
+++ b/src/doc/full-toc.inc
@@ -0,0 +1,15 @@
+<style>
+ /* Display the full TOC */
+ nav {
+ column-count: auto;
+ -moz-column-count: auto;
+ -webkit-column-count: auto;
+ }
+ nav ul ul {
+ display: block;
+ padding-left: 2em;
+ }
+ #influences blockquote p:last-child {
+ color: #999;
+ }
+</style>
diff --git a/src/doc/grammar.md b/src/doc/grammar.md
new file mode 100644
index 000000000..4501d7407
--- /dev/null
+++ b/src/doc/grammar.md
@@ -0,0 +1,7 @@
+% Grammar
+
+The Rust grammar may now be found in the [reference]. Additionally, the [grammar
+working group] is working on producing a testable grammar.
+
+[reference]: https://doc.rust-lang.org/reference/
+[grammar working group]: https://github.com/rust-lang/wg-grammar
diff --git a/src/doc/guide-crates.md b/src/doc/guide-crates.md
new file mode 100644
index 000000000..85badc11d
--- /dev/null
+++ b/src/doc/guide-crates.md
@@ -0,0 +1,4 @@
+% The (old) Rust Crates and Modules Guide
+
+This content has moved into
+[the Rust Programming Language book](book/crates-and-modules.html).
diff --git a/src/doc/guide-error-handling.md b/src/doc/guide-error-handling.md
new file mode 100644
index 000000000..fd71d3e3c
--- /dev/null
+++ b/src/doc/guide-error-handling.md
@@ -0,0 +1,4 @@
+% Error Handling in Rust
+
+This content has moved into
+[the Rust Programming Language book](book/ch09-00-error-handling.html).
diff --git a/src/doc/guide-ffi.md b/src/doc/guide-ffi.md
new file mode 100644
index 000000000..1130a10bd
--- /dev/null
+++ b/src/doc/guide-ffi.md
@@ -0,0 +1,4 @@
+% The (old) Rust Foreign Function Interface Guide
+
+This content has moved into
+[the Rust Programming Language book](book/ffi.html).
diff --git a/src/doc/guide-macros.md b/src/doc/guide-macros.md
new file mode 100644
index 000000000..228cb3c62
--- /dev/null
+++ b/src/doc/guide-macros.md
@@ -0,0 +1,4 @@
+% The (old) Rust Macros Guide
+
+This content has moved into
+[the Rust Programming Language book](book/macros.html).
diff --git a/src/doc/guide-ownership.md b/src/doc/guide-ownership.md
new file mode 100644
index 000000000..767dafc5b
--- /dev/null
+++ b/src/doc/guide-ownership.md
@@ -0,0 +1,4 @@
+% The (old) Rust Ownership Guide
+
+This content has moved into
+[the Rust Programming Language book](book/ch04-00-understanding-ownership.html).
diff --git a/src/doc/guide-plugins.md b/src/doc/guide-plugins.md
new file mode 100644
index 000000000..6c5115487
--- /dev/null
+++ b/src/doc/guide-plugins.md
@@ -0,0 +1,4 @@
+% The (old) Rust Compiler Plugins Guide
+
+This content has moved into
+[the Unstable Book](unstable-book/language-features/plugin.html).
diff --git a/src/doc/guide-pointers.md b/src/doc/guide-pointers.md
new file mode 100644
index 000000000..bafdb2fe0
--- /dev/null
+++ b/src/doc/guide-pointers.md
@@ -0,0 +1,7 @@
+% The Rust Pointer Guide
+
+This content has been removed, with no direct replacement. Rust only
+has two built-in pointer types now,
+[references](book/ch04-02-references-and-borrowing.html) and [raw
+pointers](book/raw-pointers.html). Older Rusts had many more pointer
+types, they’re gone now.
diff --git a/src/doc/guide-strings.md b/src/doc/guide-strings.md
new file mode 100644
index 000000000..d03061448
--- /dev/null
+++ b/src/doc/guide-strings.md
@@ -0,0 +1,4 @@
+% The (old) Guide to Rust Strings
+
+This content has moved into
+[the Rust Programming Language book](book/strings.html).
diff --git a/src/doc/guide-tasks.md b/src/doc/guide-tasks.md
new file mode 100644
index 000000000..21217bf54
--- /dev/null
+++ b/src/doc/guide-tasks.md
@@ -0,0 +1,4 @@
+% The (old) Rust Threads and Communication Guide
+
+This content has moved into
+[the Rust Programming Language book](book/concurrency.html).
diff --git a/src/doc/guide-testing.md b/src/doc/guide-testing.md
new file mode 100644
index 000000000..28d9fb48b
--- /dev/null
+++ b/src/doc/guide-testing.md
@@ -0,0 +1,4 @@
+% The (old) Rust Testing Guide
+
+This content has moved into
+[the Rust Programming Language book](book/ch11-00-testing.html).
diff --git a/src/doc/guide-unsafe.md b/src/doc/guide-unsafe.md
new file mode 100644
index 000000000..3c1a82d01
--- /dev/null
+++ b/src/doc/guide-unsafe.md
@@ -0,0 +1,4 @@
+% Writing Safe Low-level and Unsafe Code in Rust
+
+This content has moved into
+[the Rust Programming Language book](book/unsafe.html).
diff --git a/src/doc/guide.md b/src/doc/guide.md
new file mode 100644
index 000000000..b9e70e7cf
--- /dev/null
+++ b/src/doc/guide.md
@@ -0,0 +1,4 @@
+% The (old) Rust Guide
+
+This content has moved into
+[the Rust Programming Language book](book/README.html).
diff --git a/src/doc/index.md b/src/doc/index.md
new file mode 100644
index 000000000..b77790e33
--- /dev/null
+++ b/src/doc/index.md
@@ -0,0 +1,146 @@
+% Rust Documentation
+
+<style>
+nav {
+ display: none;
+}
+#search-input {
+ width: calc(100% - 58px);
+}
+#search-but {
+ cursor: pointer;
+}
+#search-but, #search-input {
+ padding: 4px;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ outline: none;
+ font-size: 0.7em;
+ background-color: #fff;
+}
+#search-but:hover, #search-input:focus {
+ border-color: #55a9ff;
+}
+h2 {
+ font-size: 18px;
+}
+</style>
+
+Welcome to an overview of the documentation provided by the [Rust project].
+All of these projects are managed by the Docs Team; there are other
+unofficial documentation resources as well!
+
+Many of these resources take the form of "books"; we collectively call these
+"The Rust Bookshelf." Some are large, some are small.
+
+# Learn Rust
+
+If you'd like to learn Rust, this is the spot for you! All of these resources
+assume that you have programmed before, but not in any specific language:
+
+## The Rust Programming Language
+
+Affectionately nicknamed "the book," [The Rust Programming
+Language](book/index.html) will give you an overview of the language from
+first principles. You'll build a few projects along the way, and by the end,
+you'll have a solid grasp of the language.
+
+## Rust By Example
+
+If reading multiple hundreds of pages about a language isn't your style, then
+[Rust By Example](rust-by-example/index.html) has you covered. While the book talks about code with
+a lot of words, RBE shows off a bunch of code, and keeps the talking to a
+minimum. It also includes exercises!
+
+## Rustlings
+
+[Rustlings](https://github.com/rust-lang/rustlings) guides you through downloading and setting up the Rust toolchain,
+and teaches you the basics of reading and writing Rust syntax. It's an
+alternative to Rust by Example that works with your own environment.
+
+# Use Rust
+
+Once you've gotten familiar with the language, these resources can help you
+when you're actually using it day-to-day.
+
+## The Standard Library
+
+Rust's standard library has [extensive API documentation](std/index.html),
+with explanations of how to use various things, as well as example code for
+accomplishing various tasks.
+
+<div>
+ <form action="std/index.html" method="get">
+ <input id="search-input" type="search" name="search"
+ placeholder="Search through the standard library"/>
+ <button id="search-but">Search</button>
+ </form>
+</div>
+
+## The Edition Guide
+
+[The Edition Guide](edition-guide/index.html) describes the Rust editions.
+
+## The Rustc Book
+
+[The Rustc Book](rustc/index.html) describes the Rust compiler, `rustc`.
+
+## The Cargo Book
+
+[The Cargo Book](cargo/index.html) is a guide to Cargo, Rust's build tool and dependency manager.
+
+## The Rustdoc Book
+
+[The Rustdoc Book](rustdoc/index.html) describes our documentation tool, `rustdoc`.
+
+## The Clippy Book
+
+[The Clippy Book](clippy/index.html) describes our static analyzer, Clippy.
+
+## Extended Error Listing
+
+Many of Rust's errors come with error codes, and you can request extended
+diagnostics from the compiler on those errors. You can also [read them
+here](error-index.html), if you prefer to read them that way.
+
+# Master Rust
+
+Once you're quite familiar with the language, you may find these advanced
+resources useful.
+
+## The Reference
+
+[The Reference](reference/index.html) is not a formal spec, but is more detailed and
+comprehensive than the book.
+
+## The Rustonomicon
+
+[The Rustonomicon](nomicon/index.html) is your guidebook to the dark arts of unsafe
+Rust. It's also sometimes called "the 'nomicon."
+
+## The Unstable Book
+
+[The Unstable Book](unstable-book/index.html) has documentation for unstable features.
+
+## The `rustc` Contribution Guide
+
+[The `rustc` Guide](https://rustc-dev-guide.rust-lang.org/) documents how
+the compiler works and how to contribute to it. This is useful if you want to build
+or modify the Rust compiler from source (e.g. to target something non-standard).
+
+# Specialize Rust
+
+When using Rust in specific domain areas, consider using the following resources tailored to each domain.
+
+## Embedded Systems
+
+When developing for Bare Metal or Embedded Linux systems, you may find these resources maintained by the [Embedded Working Group] useful.
+
+[Embedded Working Group]: https://github.com/rust-embedded
+
+### The Embedded Rust Book
+
+[The Embedded Rust Book] is targeted at developers familiar with embedded development and familiar with Rust, but have not used Rust for embedded development.
+
+[The Embedded Rust Book]: embedded-book/index.html
+[Rust project]: https://www.rust-lang.org
diff --git a/src/doc/intro.md b/src/doc/intro.md
new file mode 100644
index 000000000..48712d8d4
--- /dev/null
+++ b/src/doc/intro.md
@@ -0,0 +1,5 @@
+% A 30-minute Introduction to Rust
+
+This introduction is now deprecated. Please see [the introduction to the book][intro].
+
+[intro]: book/README.html
diff --git a/src/doc/man/rustc.1 b/src/doc/man/rustc.1
new file mode 100644
index 000000000..534af3f85
--- /dev/null
+++ b/src/doc/man/rustc.1
@@ -0,0 +1,314 @@
+.TH RUSTC "1" "April 2019" "rustc <INSERT VERSION HERE>" "User Commands"
+.SH NAME
+rustc \- The Rust compiler
+.SH SYNOPSIS
+.B rustc
+[\fIOPTIONS\fR] \fIINPUT\fR
+
+.SH DESCRIPTION
+This program is a compiler for the Rust language, available at https://www.rust\-lang.org.
+
+.SH OPTIONS
+
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Display the help message.
+.TP
+\fB\-\-cfg\fR \fISPEC\fR
+Configure the compilation environment.
+.TP
+\fB\-L\fR [\fIKIND\fR=]\fIPATH\fR
+Add a directory to the library search path.
+The optional \fIKIND\fR can be one of:
+.RS
+.TP
+\fBdependency\fR
+only lookup transitive dependencies here
+.TP
+.B crate
+only lookup local `extern crate` directives here
+.TP
+.B native
+only lookup native libraries here
+.TP
+.B framework
+only look for OSX frameworks here
+.TP
+.B all
+look for anything here (the default)
+.RE
+.TP
+\fB\-l\fR [\fIKIND\fR=]\fINAME\fR
+Link the generated crate(s) to the specified library \fINAME\fR.
+The optional \fIKIND\fR can be one of \fIstatic\fR, \fIdylib\fR, or
+\fIframework\fR.
+If omitted, \fIdylib\fR is assumed.
+.TP
+\fB\-\-crate\-type\fR [bin|lib|rlib|dylib|cdylib|staticlib|proc\-macro]
+Comma separated list of types of crates for the compiler to emit.
+.TP
+\fB\-\-crate\-name\fR \fINAME\fR
+Specify the name of the crate being built.
+.TP
+\fB\-\-emit\fR [asm|llvm\-bc|llvm\-ir|obj|metadata|link|dep\-info|mir][=\fIPATH\fR]
+Configure the output that \fBrustc\fR will produce. Each emission may also have
+an optional explicit output \fIPATH\fR specified for that particular emission
+kind. This path takes precedence over the \fB-o\fR option.
+.TP
+\fB\-\-print\fR [crate\-name|\:file\-names|\:sysroot|\:target\-libdir|\:cfg|\:target\-list|\:target\-cpus|\:target\-features|\:relocation\-models|\:code\-models|\:tls\-models|\:target\-spec\-json|\:native\-static\-libs|\:stack\-protector\-strategies|\:link\-args]
+Comma separated list of compiler information to print on stdout.
+.TP
+\fB\-g\fR
+Equivalent to \fI\-C\ debuginfo=2\fR.
+.TP
+\fB\-O\fR
+Equivalent to \fI\-C\ opt\-level=2\fR.
+.TP
+\fB\-o\fR \fIFILENAME\fR
+Write output to \fIFILENAME\fR. Ignored if multiple \fI\-\-emit\fR outputs are specified which
+don't have an explicit path otherwise.
+.TP
+\fB\-\-out\-dir\fR \fIDIR\fR
+Write output to compiler\[hy]chosen filename in \fIDIR\fR. Ignored if \fI\-o\fR is specified.
+Defaults to the current directory.
+.TP
+\fB\-\-explain\fR \fIOPT\fR
+Provide a detailed explanation of an error message.
+.TP
+\fB\-\-test\fR
+Build a test harness.
+.TP
+\fB\-\-target\fR \fITARGET\fR
+Target triple for which the code is compiled. This option defaults to the host’s target
+triple. The target triple has the general format <arch><sub>\-<vendor>\-<sys>\-<abi>, where:
+.RS
+.TP
+.B <arch>
+x86, arm, thumb, mips, etc.
+.TP
+.B <sub>
+for example on ARM: v5, v6m, v7a, v7m, etc.
+.TP
+.B <vendor>
+pc, apple, nvidia, ibm, etc.
+.TP
+.B <sys>
+none, linux, win32, darwin, cuda, etc.
+.TP
+.B <abi>
+eabi, gnu, android, macho, elf, etc.
+.RE
+.TP
+\fB\-W help\fR
+Print 'lint' options and default settings.
+.TP
+\fB\-W\fR \fIOPT\fR, \fB\-\-warn\fR \fIOPT\fR
+Set lint warnings.
+.TP
+\fB\-A\fR \fIOPT\fR, \fB\-\-allow\fR \fIOPT\fR
+Set lint allowed.
+.TP
+\fB\-D\fR \fIOPT\fR, \fB\-\-deny\fR \fIOPT\fR
+Set lint denied.
+.TP
+\fB\-F\fR \fIOPT\fR, \fB\-\-forbid\fR \fIOPT\fR
+Set lint forbidden.
+.TP
+\fB\-C\fR \fIFLAG\fR[=\fIVAL\fR], \fB\-\-codegen\fR \fIFLAG\fR[=\fIVAL\fR]
+Set a codegen\[hy]related flag to the value specified.
+Use \fI\-C help\fR to print available flags.
+See CODEGEN OPTIONS below.
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Print version info and exit.
+.TP
+\fB\-v\fR, \fB\-\-verbose\fR
+Use verbose output.
+.TP
+\fB\-\-remap\-path\-prefix\fR \fIfrom\fR=\fIto\fR
+Remap source path prefixes in all output, including compiler diagnostics, debug information,
+macro expansions, etc. The \fIfrom\fR=\fIto\fR parameter is scanned from right to left, so \fIfrom\fR
+may contain '=', but \fIto\fR may not.
+
+This is useful for normalizing build products, for example by removing the current directory out of
+pathnames emitted into the object files. The replacement is purely textual, with no consideration of
+the current system's pathname syntax. For example \fI\-\-remap\-path\-prefix foo=bar\fR will
+match \fBfoo/lib.rs\fR but not \fB./foo/lib.rs\fR.
+.TP
+\fB\-\-extern\fR \fINAME\fR=\fIPATH\fR
+Specify where an external rust library is located. These should match
+\fIextern\fR declarations in the crate's source code.
+.TP
+\fB\-\-sysroot\fR \fIPATH\fR
+Override the system root.
+.TP
+\fB\-Z\fR \fIFLAG\fR
+Set unstable / perma-unstable options.
+Use \fI\-Z help\fR to print available options.
+.TP
+\fB\-\-color\fR auto|always|never
+Configure coloring of output:
+.RS
+.TP
+.B auto
+colorize, if output goes to a tty (default);
+.TP
+.B always
+always colorize output;
+.TP
+.B never
+never colorize output.
+.RE
+
+.SH CODEGEN OPTIONS
+
+.TP
+\fBlinker\fR=\fI/path/to/cc\fR
+Path to the linker utility to use when linking libraries, executables, and
+objects.
+.TP
+\fBlink\-args\fR='\fI\-flag1 \-flag2\fR'
+A space\[hy]separated list of extra arguments to pass to the linker when the linker
+is invoked.
+.TP
+\fBlto\fR
+Perform LLVM link\[hy]time optimizations.
+.TP
+\fBtarget\-cpu\fR=\fIhelp\fR
+Selects a target processor.
+If the value is 'help', then a list of available CPUs is printed.
+.TP
+\fBtarget\-feature\fR='\fI+feature1\fR,\fI\-feature2\fR'
+A comma\[hy]separated list of features to enable or disable for the target.
+A preceding '+' enables a feature while a preceding '\-' disables it.
+Available features can be discovered through \fIllc -mcpu=help\fR.
+.TP
+\fBpasses\fR=\fIval\fR
+A space\[hy]separated list of extra LLVM passes to run.
+A value of 'list' will cause \fBrustc\fR to print all known passes and
+exit.
+The passes specified are appended at the end of the normal pass manager.
+.TP
+\fBllvm\-args\fR='\fI\-arg1\fR \fI\-arg2\fR'
+A space\[hy]separated list of arguments to pass through to LLVM.
+.TP
+\fBsave\-temps\fR
+If specified, the compiler will save more files (.bc, .o, .no\-opt.bc) generated
+throughout compilation in the output directory.
+.TP
+\fBrpath\fR
+If specified, then the rpath value for dynamic libraries will be set in
+either dynamic library or executable outputs.
+.TP
+\fBno\-prepopulate\-passes\fR
+Suppresses pre\[hy]population of the LLVM pass manager that is run over the module.
+.TP
+\fBno\-vectorize\-loops\fR
+Suppresses running the loop vectorization LLVM pass, regardless of optimization
+level.
+.TP
+\fBno\-vectorize\-slp\fR
+Suppresses running the LLVM SLP vectorization pass, regardless of optimization
+level.
+.TP
+\fBsoft\-float\fR
+Generates software floating point library calls instead of hardware
+instructions.
+.TP
+\fBprefer\-dynamic\fR
+Prefers dynamic linking to static linking.
+.TP
+\fBno\-integrated\-as\fR
+Force usage of an external assembler rather than LLVM's integrated one.
+.TP
+\fBno\-redzone\fR
+Disable the use of the redzone.
+.TP
+\fBrelocation\-model\fR=[pic,static,dynamic\-no\-pic]
+The relocation model to use.
+(Default: \fIpic\fR)
+.TP
+\fBcode\-model\fR=[small,kernel,medium,large]
+Choose the code model to use.
+.TP
+\fBmetadata\fR=\fIval\fR
+Metadata to mangle symbol names with.
+.TP
+\fBextra\-filename\fR=\fIval\fR
+Extra data to put in each output filename.
+.TP
+\fBcodegen\-units\fR=\fIn\fR
+Divide crate into \fIn\fR units to optimize in parallel.
+.TP
+\fBremark\fR=\fIval\fR
+Print remarks for these optimization passes (space separated, or "all").
+.TP
+\fBno\-stack\-check\fR
+Disable checks for stack exhaustion (a memory\[hy]safety hazard!).
+.TP
+\fBdebuginfo\fR=\fIval\fR
+Debug info emission level:
+.RS
+.TP
+.B 0
+no debug info;
+.TP
+.B 1
+line\[hy]tables only (for stacktraces and breakpoints);
+.TP
+.B 2
+full debug info with variable and type information.
+.RE
+.TP
+\fBopt\-level\fR=\fIVAL\fR
+Optimize with possible levels 0\[en]3, s (optimize for size), or z (for minimal size)
+
+.SH ENVIRONMENT
+
+Some of these affect only test harness programs (generated via rustc --test);
+others affect all programs which link to the Rust standard library.
+
+.TP
+\fBRUST_TEST_THREADS\fR
+The test framework Rust provides executes tests in parallel. This variable sets
+the maximum number of threads used for this purpose. This setting is overridden
+by the --test-threads option.
+
+.TP
+\fBRUST_TEST_NOCAPTURE\fR
+If set to a value other than "0", a synonym for the --nocapture flag.
+
+.TP
+\fBRUST_MIN_STACK\fR
+Sets the minimum stack size for new threads.
+
+.TP
+\fBRUST_BACKTRACE\fR
+If set to a value different than "0", produces a backtrace in the output of a program which panics.
+
+.SH "EXAMPLES"
+To build an executable from a source file with a main function:
+ $ rustc \-o hello hello.rs
+
+To build a library from a source file:
+ $ rustc \-\-crate\-type=lib hello\-lib.rs
+
+To build either with a crate (.rs) file:
+ $ rustc hello.rs
+
+To build an executable with debug info:
+ $ rustc \-g \-o hello hello.rs
+
+.SH "SEE ALSO"
+
+.BR rustdoc (1)
+
+.SH "BUGS"
+See https://github.com/rust\-lang/rust/issues for issues.
+
+.SH "AUTHOR"
+See https://github.com/rust\-lang/rust/graphs/contributors or use `git log --all --format='%cN <%cE>' | sort -u` in the rust source distribution.
+
+.SH "COPYRIGHT"
+This work is dual\[hy]licensed under Apache\ 2.0 and MIT terms.
+See \fICOPYRIGHT\fR file in the rust source distribution.
diff --git a/src/doc/man/rustdoc.1 b/src/doc/man/rustdoc.1
new file mode 100644
index 000000000..e61853479
--- /dev/null
+++ b/src/doc/man/rustdoc.1
@@ -0,0 +1,126 @@
+.TH RUSTDOC "1" "July 2018" "rustdoc <INSERT VERSION HERE>" "User Commands"
+.SH NAME
+rustdoc \- generate documentation from Rust source code
+.SH SYNOPSIS
+.B rustdoc
+[\fIOPTIONS\fR] \fIINPUT\fR
+
+.SH DESCRIPTION
+This tool generates API reference documentation by extracting comments from
+source code written in the Rust language, available at
+<\fBhttps://www.rust-lang.org\fR>. It accepts several input formats and
+provides several output formats for the generated documentation.
+
+.SH OPTIONS
+
+.TP
+\fB\-r\fR, \fB\-\-input\-format\fR \fIFORMAT\fR
+rust
+.TP
+\fB\-w\fR, \fB\-\-output\-format\fR \fIFORMAT\fR
+html
+.TP
+\fB\-o\fR, \fB\-\-output\fR \fIOUTPUT\fR,
+where to place the output (default: \fIdoc/\fR for html)
+.TP
+\fB\-\-passes\fR \fILIST\fR
+space\[hy]separated list of passes to run (default: '')
+.TP
+\fB\-\-no\-defaults\fR
+don't run the default passes
+.TP
+\fB\-\-plugins\fR \fILIST\fR
+space-separated list of plugins to run (default: '')
+.TP
+\fB\-\-plugin\-path\fR \fIDIR\fR
+directory to load plugins from (default: \fI/tmp/rustdoc_ng/plugins\fR)
+.TP
+\fB\-\-target\fR \fITRIPLE\fR
+target triple to document
+.TP
+\fB\-\-crate\-name\fR \fINAME\fR
+specify the name of this crate
+.TP
+\fB\-L\fR, \fB\-\-library\-path\fR \fIDIR\fR
+directory to add to crate search path
+.TP
+\fB\-\-cfg\fR \fISPEC\fR
+pass a \fI\-\-cfg\fR to rustc
+.TP
+\fB\-\-extern\fR \fIVAL\fR
+pass an \fI\-\-extern\fR to rustc
+.TP
+\fB\-\-test\fR
+run code examples as tests
+.TP
+\fB\-\-test\-args\fR \fIARGS\fR
+pass arguments to the test runner
+.TP
+\fB\-\-html\-in\-header\fR \fIFILE\fR
+file to add to <head>
+.TP
+\fB\-\-html\-before\-content\fR \fIFILES\fR
+files to include inline between <body> and the content of a rendered Markdown
+file or generated documentation
+.TP
+\fB\-\-markdown\-before\-content\fR \fIFILES\fR
+files to include inline between <body> and the content of a rendered
+Markdown file or generated documentation
+.TP
+\fB\-\-html\-after\-content\fR \fIFILES\fR
+files to include inline between the content and </body> of a rendered
+Markdown file or generated documentation
+.TP
+\fB\-\-markdown\-after\-content\fR \fIFILES\fR
+files to include inline between the content and </body> of a rendered
+Markdown file or generated documentation
+.TP
+\fB\-\-markdown\-css\fR \fIFILES\fR
+CSS files to include via <link> in a rendered Markdown file Markdown file or
+generated documentation
+.TP
+\fB\-\-markdown\-playground\-url\fR \fIURL\fR
+URL to send code snippets to
+.TP
+\fB\-\-markdown\-no\-toc\fR
+don't include table of contents
+.TP
+\fB\-h\fR, \fB\-\-extend\-css\fR
+to redefine some css rules with a given file to generate doc with your own theme
+.TP
+\fB\-V\fR, \fB\-\-version\fR
+Print rustdoc's version
+
+.SH "OUTPUT FORMATS"
+
+The rustdoc tool can generate output in an HTML format.
+
+If using an HTML format, then the specified output destination will be the root
+directory of an HTML structure for all the documentation.
+Pages will be placed into this directory, and source files will also
+possibly be rendered into it as well.
+
+.SH "EXAMPLES"
+
+To generate documentation for the source in the current directory:
+ $ rustdoc hello.rs
+
+List all available passes that rustdoc has, along with default passes:
+ $ rustdoc \-\-passes list
+
+The generated HTML can be viewed with any standard web browser.
+
+.SH "SEE ALSO"
+
+.BR rustc (1)
+
+.SH "BUGS"
+See <\fBhttps://github.com/rust\-lang/rust/issues\fR>
+for issues.
+
+.SH "AUTHOR"
+See the version control history or <\fBhttps://thanks.rust\-lang.org\fR>
+
+.SH "COPYRIGHT"
+This work is dual\[hy]licensed under Apache\ 2.0 and MIT terms.
+See \fICOPYRIGHT\fR file in the rust source distribution.
diff --git a/src/doc/nomicon/.github/workflows/main.yml b/src/doc/nomicon/.github/workflows/main.yml
new file mode 100644
index 000000000..7ace896eb
--- /dev/null
+++ b/src/doc/nomicon/.github/workflows/main.yml
@@ -0,0 +1,35 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Update rustup
+ run: rustup self update
+ - name: Install Rust
+ run: |
+ rustup set profile minimal
+ rustup toolchain install nightly -c rust-docs
+ rustup default nightly
+ - name: Install mdbook
+ env:
+ MDBOOK_VER: v0.4.3
+ run: |
+ mkdir bin
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/${{ env.MDBOOK_VER }}/mdbook-${{ env.MDBOOK_VER }}-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
+ echo "$(pwd)/bin" >> $GITHUB_PATH
+ - name: Report versions
+ run: |
+ rustup --version
+ rustc -Vv
+ mdbook --version
+ - name: Run tests
+ run: mdbook test
+ - name: Check for broken links
+ run: |
+ curl -sSLo linkcheck.sh \
+ https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+ sh linkcheck.sh --all nomicon
diff --git a/src/doc/nomicon/LICENSE-APACHE b/src/doc/nomicon/LICENSE-APACHE
new file mode 100644
index 000000000..16fe87b06
--- /dev/null
+++ b/src/doc/nomicon/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/doc/nomicon/LICENSE-MIT b/src/doc/nomicon/LICENSE-MIT
new file mode 100644
index 000000000..25597d583
--- /dev/null
+++ b/src/doc/nomicon/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2010 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/src/doc/nomicon/README.md b/src/doc/nomicon/README.md
new file mode 100644
index 000000000..8b61a3de6
--- /dev/null
+++ b/src/doc/nomicon/README.md
@@ -0,0 +1,71 @@
+# The Rustonomicon
+
+The Dark Arts of Advanced and Unsafe Rust Programming
+
+Nicknamed "the Nomicon."
+
+## NOTE: This is a draft document, and may contain serious errors
+
+> Instead of the programs I had hoped for, there came only a shuddering
+blackness and ineffable loneliness; and I saw at last a fearful truth which no
+one had ever dared to breathe before — the unwhisperable secret of secrets — The
+fact that this language of stone and stridor is not a sentient perpetuation of
+Rust as London is of Old London and Paris of Old Paris, but that it is in fact
+quite unsafe, its sprawling body imperfectly embalmed and infested with queer
+animate things which have nothing to do with it as it was in compilation.
+
+This book digs into all the awful details that are necessary to understand in
+order to write correct Unsafe Rust programs. Due to the nature of this problem,
+it may lead to unleashing untold horrors that shatter your psyche into a billion
+infinitesimal fragments of despair.
+
+## Requirements
+
+Building the Nomicon requires [mdBook]. To get it:
+
+[mdBook]: https://github.com/rust-lang/mdBook
+
+```bash
+cargo install mdbook
+```
+
+### `mdbook` usage
+
+To build the Nomicon use the `build` sub-command:
+
+```bash
+mdbook build
+```
+
+The output will be placed in the `book` subdirectory. To check it out, open the
+`index.html` file in your web browser. You can pass the `--open` flag to `mdbook
+build` and it'll open the index page in your default browser (if the process is
+successful) just like with `cargo doc --open`:
+
+```bash
+mdbook build --open
+```
+
+There is also a `test` sub-command to test all code samples contained in the book:
+
+```bash
+mdbook test
+```
+
+### `linkcheck`
+
+We use the `linkcheck` tool to find broken links.
+To run it locally:
+
+```sh
+curl -sSLo linkcheck.sh https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+sh linkcheck.sh --all nomicon
+```
+
+## Contributing
+
+Given that the Nomicon is still in a draft state, we'd love your help! Please
+feel free to open issues about anything, and send in PRs for things you'd like
+to fix or change. If your change is large, please open an issue first, so we can
+make sure that it's something we'd accept before you go through the work of
+getting a PR together.
diff --git a/src/doc/nomicon/book.toml b/src/doc/nomicon/book.toml
new file mode 100644
index 000000000..a2011c61f
--- /dev/null
+++ b/src/doc/nomicon/book.toml
@@ -0,0 +1,35 @@
+[book]
+author = "The Rust Project Developers"
+title = "The Rustonomicon"
+description = "The Dark Arts of Advanced and Unsafe Rust Programming"
+
+[output.html]
+additional-css = ["theme/nomicon.css"]
+git-repository-url = "https://github.com/rust-lang/nomicon"
+
+[output.html.redirect]
+# Vec-related chapters.
+"./vec-alloc.html" = "./vec/vec-alloc.html"
+"./vec-dealloc.html" = "./vec/vec-dealloc.html"
+"./vec-deref.html" = "./vec/vec-deref.html"
+"./vec-drain.html" = "./vec/vec-drain.html"
+"./vec-final.html" = "./vec/vec-final.html"
+"./vec-insert-remove.html" = "./vec/vec-insert-remove.html"
+"./vec-into-iter.html" = "./vec/vec-into-iter.html"
+"./vec-layout.html" = "./vec/vec-layout.html"
+"./vec-push-pop.html" = "./vec/vec-push-pop.html"
+"./vec-raw.html" = "./vec/vec-raw.html"
+"./vec-zsts.html" = "./vec/vec-zsts.html"
+"./vec.html" = "./vec/vec.html"
+
+# Arc and Mutex related chapters.
+"./arc-and-mutex.html" = "./arc-mutex/arc-and-mutex.html"
+"./arc-base.html" = "./arc-mutex/arc-base.html"
+"./arc-clone.html" = "./arc-mutex/arc-clone.html"
+"./arc-drop.html" = "./arc-mutex/arc-drop.html"
+"./arc-final.html" = "./arc-mutex/arc-final.html"
+"./arc-layout.html" = "./arc-mutex/arc-layout.html"
+"./arc.html" = "./arc-mutex/arc.html"
+
+[rust]
+edition = "2018"
diff --git a/src/doc/nomicon/src/SUMMARY.md b/src/doc/nomicon/src/SUMMARY.md
new file mode 100644
index 000000000..f1d15a71d
--- /dev/null
+++ b/src/doc/nomicon/src/SUMMARY.md
@@ -0,0 +1,66 @@
+# Summary
+
+[Introduction](intro.md)
+
+* [Meet Safe and Unsafe](meet-safe-and-unsafe.md)
+ * [How Safe and Unsafe Interact](safe-unsafe-meaning.md)
+ * [What Unsafe Can Do](what-unsafe-does.md)
+ * [Working with Unsafe](working-with-unsafe.md)
+* [Data Layout](data.md)
+ * [repr(Rust)](repr-rust.md)
+ * [Exotically Sized Types](exotic-sizes.md)
+ * [Other reprs](other-reprs.md)
+* [Ownership](ownership.md)
+ * [References](references.md)
+ * [Aliasing](aliasing.md)
+ * [Lifetimes](lifetimes.md)
+ * [Limits of Lifetimes](lifetime-mismatch.md)
+ * [Lifetime Elision](lifetime-elision.md)
+ * [Unbounded Lifetimes](unbounded-lifetimes.md)
+ * [Higher-Rank Trait Bounds](hrtb.md)
+ * [Subtyping and Variance](subtyping.md)
+ * [Drop Check](dropck.md)
+ * [PhantomData](phantom-data.md)
+ * [Splitting Borrows](borrow-splitting.md)
+* [Type Conversions](conversions.md)
+ * [Coercions](coercions.md)
+ * [The Dot Operator](dot-operator.md)
+ * [Casts](casts.md)
+ * [Transmutes](transmutes.md)
+* [Uninitialized Memory](uninitialized.md)
+ * [Checked](checked-uninit.md)
+ * [Drop Flags](drop-flags.md)
+ * [Unchecked](unchecked-uninit.md)
+* [Ownership Based Resource Management](obrm.md)
+ * [Constructors](constructors.md)
+ * [Destructors](destructors.md)
+ * [Leaking](leaking.md)
+* [Unwinding](unwinding.md)
+ * [Exception Safety](exception-safety.md)
+ * [Poisoning](poisoning.md)
+* [Concurrency](concurrency.md)
+ * [Races](races.md)
+ * [Send and Sync](send-and-sync.md)
+ * [Atomics](atomics.md)
+* [Implementing Vec](./vec/vec.md)
+ * [Layout](./vec/vec-layout.md)
+ * [Allocating](./vec/vec-alloc.md)
+ * [Push and Pop](./vec/vec-push-pop.md)
+ * [Deallocating](./vec/vec-dealloc.md)
+ * [Deref](./vec/vec-deref.md)
+ * [Insert and Remove](./vec/vec-insert-remove.md)
+ * [IntoIter](./vec/vec-into-iter.md)
+ * [RawVec](./vec/vec-raw.md)
+ * [Drain](./vec/vec-drain.md)
+ * [Handling Zero-Sized Types](./vec/vec-zsts.md)
+ * [Final Code](./vec/vec-final.md)
+* [Implementing Arc and Mutex](./arc-mutex/arc-and-mutex.md)
+ * [Arc](./arc-mutex/arc.md)
+ * [Layout](./arc-mutex/arc-layout.md)
+ * [Base Code](./arc-mutex/arc-base.md)
+ * [Cloning](./arc-mutex/arc-clone.md)
+ * [Dropping](./arc-mutex/arc-drop.md)
+ * [Final Code](./arc-mutex/arc-final.md)
+* [FFI](ffi.md)
+* [Beneath `std`](beneath-std.md)
+ * [#[panic_handler]](panic-handler.md)
diff --git a/src/doc/nomicon/src/aliasing.md b/src/doc/nomicon/src/aliasing.md
new file mode 100644
index 000000000..ec32da2e5
--- /dev/null
+++ b/src/doc/nomicon/src/aliasing.md
@@ -0,0 +1,134 @@
+# Aliasing
+
+First off, let's get some important caveats out of the way:
+
+* We will be using the broadest possible definition of aliasing for the sake
+of discussion. Rust's definition will probably be more restricted to factor
+in mutations and liveness.
+
+* We will be assuming a single-threaded, interrupt-free, execution. We will also
+be ignoring things like memory-mapped hardware. Rust assumes these things
+don't happen unless you tell it otherwise. For more details, see the
+[Concurrency Chapter](concurrency.html).
+
+With that said, here's our working definition: variables and pointers *alias*
+if they refer to overlapping regions of memory.
+
+## Why Aliasing Matters
+
+So why should we care about aliasing?
+
+Consider this simple function:
+
+```rust
+fn compute(input: &u32, output: &mut u32) {
+ if *input > 10 {
+ *output = 1;
+ }
+ if *input > 5 {
+ *output *= 2;
+ }
+ // remember that `output` will be `2` if `input > 10`
+}
+```
+
+We would *like* to be able to optimize it to the following function:
+
+```rust
+fn compute(input: &u32, output: &mut u32) {
+ let cached_input = *input; // keep `*input` in a register
+ if cached_input > 10 {
+ // If the input is greater than 10, the previous code would set the output to 1 and then double it,
+ // resulting in an output of 2 (because `>10` implies `>5`).
+ // Here, we avoid the double assignment and just set it directly to 2.
+ *output = 2;
+ } else if cached_input > 5 {
+ *output *= 2;
+ }
+}
+```
+
+In Rust, this optimization should be sound. For almost any other language, it
+wouldn't be (barring global analysis). This is because the optimization relies
+on knowing that aliasing doesn't occur, which most languages are fairly liberal
+with. Specifically, we need to worry about function arguments that make `input`
+and `output` overlap, such as `compute(&x, &mut x)`.
+
+With that input, we could get this execution:
+
+<!-- ignore: expanded code -->
+```rust,ignore
+ // input == output == 0xabad1dea
+ // *input == *output == 20
+if *input > 10 { // true (*input == 20)
+ *output = 1; // also overwrites *input, because they are the same
+}
+if *input > 5 { // false (*input == 1)
+ *output *= 2;
+}
+ // *input == *output == 1
+```
+
+Our optimized function would produce `*output == 2` for this input, so the
+correctness of our optimization relies on this input being impossible.
+
+In Rust we know this input should be impossible because `&mut` isn't allowed to be
+aliased. So we can safely reject its possibility and perform this optimization.
+In most other languages, this input would be entirely possible, and must be considered.
+
+This is why alias analysis is important: it lets the compiler perform useful
+optimizations! Some examples:
+
+* keeping values in registers by proving no pointers access the value's memory
+* eliminating reads by proving some memory hasn't been written to since last we read it
+* eliminating writes by proving some memory is never read before the next write to it
+* moving or reordering reads and writes by proving they don't depend on each other
+
+These optimizations also tend to prove the soundness of bigger optimizations
+such as loop vectorization, constant propagation, and dead code elimination.
+
+In the previous example, we used the fact that `&mut u32` can't be aliased to prove
+that writes to `*output` can't possibly affect `*input`. This lets us cache `*input`
+in a register, eliminating a read.
+
+By caching this read, we knew that the write in the `> 10` branch couldn't
+affect whether we take the `> 5` branch, allowing us to also eliminate a
+read-modify-write (doubling `*output`) when `*input > 10`.
+
+The key thing to remember about alias analysis is that writes are the primary
+hazard for optimizations. That is, the only thing that prevents us
+from moving a read to any other part of the program is the possibility of us
+re-ordering it with a write to the same location.
+
+For instance, we have no concern for aliasing in the following modified version
+of our function, because we've moved the only write to `*output` to the very
+end of our function. This allows us to freely reorder the reads of `*input` that
+occur before it:
+
+```rust
+fn compute(input: &u32, output: &mut u32) {
+ let mut temp = *output;
+ if *input > 10 {
+ temp = 1;
+ }
+ if *input > 5 {
+ temp *= 2;
+ }
+ *output = temp;
+}
+```
+
+We're still relying on alias analysis to assume that `input` doesn't alias
+`temp`, but the proof is much simpler: the value of a local variable can't be
+aliased by things that existed before it was declared. This is an assumption
+every language freely makes, and so this version of the function could be
+optimized the way we want in any language.
+
+This is why the definition of "alias" that Rust will use likely involves some
+notion of liveness and mutation: we don't actually care if aliasing occurs if
+there aren't any actual writes to memory happening.
+
+Of course, a full aliasing model for Rust must also take into consideration things like
+function calls (which may mutate things we don't see), raw pointers (which have
+no aliasing requirements on their own), and UnsafeCell (which lets the referent
+of an `&` be mutated).
diff --git a/src/doc/nomicon/src/arc-mutex/arc-and-mutex.md b/src/doc/nomicon/src/arc-mutex/arc-and-mutex.md
new file mode 100644
index 000000000..41a4d7c7b
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc-and-mutex.md
@@ -0,0 +1,7 @@
+# Implementing Arc and Mutex
+
+Knowing the theory is all fine and good, but the *best* way to understand
+something is to use it. To better understand atomics and interior mutability,
+we'll be implementing versions of the standard library's `Arc` and `Mutex` types.
+
+TODO: Write `Mutex` chapters.
diff --git a/src/doc/nomicon/src/arc-mutex/arc-base.md b/src/doc/nomicon/src/arc-mutex/arc-base.md
new file mode 100644
index 000000000..ee35d8676
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc-base.md
@@ -0,0 +1,146 @@
+# Base Code
+
+Now that we've decided the layout for our implementation of `Arc`, let's create
+some basic code.
+
+## Constructing the Arc
+
+We'll first need a way to construct an `Arc<T>`.
+
+This is pretty simple, as we just need to box the `ArcInner<T>` and get a
+`NonNull<T>` pointer to it.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Arc<T> {
+ pub fn new(data: T) -> Arc<T> {
+ // We start the reference count at 1, as that first reference is the
+ // current pointer.
+ let boxed = Box::new(ArcInner {
+ rc: AtomicUsize::new(1),
+ data,
+ });
+ Arc {
+ // It is okay to call `.unwrap()` here as we get a pointer from
+ // `Box::into_raw` which is guaranteed to not be null.
+ ptr: NonNull::new(Box::into_raw(boxed)).unwrap(),
+ phantom: PhantomData,
+ }
+ }
+}
+```
+
+## Send and Sync
+
+Since we're building a concurrency primitive, we'll need to be able to send it
+across threads. Thus, we can implement the `Send` and `Sync` marker traits. For
+more information on these, see [the section on `Send` and
+`Sync`](../send-and-sync.md).
+
+This is okay because:
+* You can only get a mutable reference to the value inside an `Arc` if and only
+ if it is the only `Arc` referencing that data (which only happens in `Drop`)
+* We use atomics for the shared mutable reference counting
+
+<!-- ignore: simplified code -->
+```rust,ignore
+unsafe impl<T: Sync + Send> Send for Arc<T> {}
+unsafe impl<T: Sync + Send> Sync for Arc<T> {}
+```
+
+We need to have the bound `T: Sync + Send` because if we did not provide those
+bounds, it would be possible to share values that are thread-unsafe across a
+thread boundary via an `Arc`, which could possibly cause data races or
+unsoundness.
+
+For example, if those bounds were not present, `Arc<Rc<u32>>` would be `Sync` or
+`Send`, meaning that you could clone the `Rc` out of the `Arc` to send it across
+a thread (without creating an entirely new `Rc`), which would create data races
+as `Rc` is not thread-safe.
+
+## Getting the `ArcInner`
+
+To dereference the `NonNull<T>` pointer into a `&T`, we can call
+`NonNull::as_ref`. This is unsafe, unlike the typical `as_ref` function, so we
+must call it like this:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+unsafe { self.ptr.as_ref() }
+```
+
+We'll be using this snippet a few times in this code (usually with an associated
+`let` binding).
+
+This unsafety is okay because while this `Arc` is alive, we're guaranteed that
+the inner pointer is valid.
+
+## Deref
+
+Alright. Now we can make `Arc`s (and soon will be able to clone and destroy them correctly), but how do we get
+to the data inside?
+
+What we need now is an implementation of `Deref`.
+
+We'll need to import the trait:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::ops::Deref;
+```
+
+And here's the implementation:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Deref for Arc<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ let inner = unsafe { self.ptr.as_ref() };
+ &inner.data
+ }
+}
+```
+
+Pretty simple, eh? This simply dereferences the `NonNull` pointer to the
+`ArcInner<T>`, then gets a reference to the data inside.
+
+## Code
+
+Here's all the code from this section:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::ops::Deref;
+
+impl<T> Arc<T> {
+ pub fn new(data: T) -> Arc<T> {
+ // We start the reference count at 1, as that first reference is the
+ // current pointer.
+ let boxed = Box::new(ArcInner {
+ rc: AtomicUsize::new(1),
+ data,
+ });
+ Arc {
+ // It is okay to call `.unwrap()` here as we get a pointer from
+ // `Box::into_raw` which is guaranteed to not be null.
+ ptr: NonNull::new(Box::into_raw(boxed)).unwrap(),
+ phantom: PhantomData,
+ }
+ }
+}
+
+unsafe impl<T: Sync + Send> Send for Arc<T> {}
+unsafe impl<T: Sync + Send> Sync for Arc<T> {}
+
+
+impl<T> Deref for Arc<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ let inner = unsafe { self.ptr.as_ref() };
+ &inner.data
+ }
+}
+```
diff --git a/src/doc/nomicon/src/arc-mutex/arc-clone.md b/src/doc/nomicon/src/arc-mutex/arc-clone.md
new file mode 100644
index 000000000..1adc6c9e6
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc-clone.md
@@ -0,0 +1,108 @@
+# Cloning
+
+Now that we've got some basic code set up, we'll need a way to clone the `Arc`.
+
+Basically, we need to:
+
+1. Increment the atomic reference count
+2. Construct a new instance of the `Arc` from the inner pointer
+
+First, we need to get access to the `ArcInner`:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let inner = unsafe { self.ptr.as_ref() };
+```
+
+We can update the atomic reference count as follows:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let old_rc = inner.rc.fetch_add(1, Ordering::???);
+```
+
+But what ordering should we use here? We don't really have any code that will
+need atomic synchronization when cloning, as we do not modify the internal value
+while cloning. Thus, we can use a Relaxed ordering here, which implies no
+happens-before relationship but is atomic. When `Drop`ping the Arc, however,
+we'll need to atomically synchronize when decrementing the reference count. This
+is described more in [the section on the `Drop` implementation for
+`Arc`](arc-drop.md). For more information on atomic relationships and Relaxed
+ordering, see [the section on atomics](../atomics.md).
+
+Thus, the code becomes this:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let old_rc = inner.rc.fetch_add(1, Ordering::Relaxed);
+```
+
+We'll need to add another import to use `Ordering`:
+
+```rust
+use std::sync::atomic::Ordering;
+```
+
+However, we have one problem with this implementation right now. What if someone
+decides to `mem::forget` a bunch of Arcs? The code we have written so far (and
+will write) assumes that the reference count accurately portrays how many Arcs
+are in memory, but with `mem::forget` this is false. Thus, when more and more
+Arcs are cloned from this one without them being `Drop`ped and the reference
+count being decremented, we can overflow! This will cause use-after-free which
+is **INCREDIBLY BAD!**
+
+To handle this, we need to check that the reference count does not go over some
+arbitrary value (below `usize::MAX`, as we're storing the reference count as an
+`AtomicUsize`), and do *something*.
+
+The standard library's implementation decides to just abort the program (as it
+is an incredibly unlikely case in normal code and if it happens, the program is
+probably incredibly degenerate) if the reference count reaches `isize::MAX`
+(about half of `usize::MAX`) on any thread, on the assumption that there are
+probably not about 2 billion threads (or about **9 quintillion** on some 64-bit
+machines) incrementing the reference count at once. This is what we'll do.
+
+It's pretty simple to implement this behavior:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+if old_rc >= isize::MAX as usize {
+ std::process::abort();
+}
+```
+
+Then, we need to return a new instance of the `Arc`:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+Self {
+ ptr: self.ptr,
+ phantom: PhantomData
+}
+```
+
+Now, let's wrap this all up inside the `Clone` implementation:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::sync::atomic::Ordering;
+
+impl<T> Clone for Arc<T> {
+ fn clone(&self) -> Arc<T> {
+ let inner = unsafe { self.ptr.as_ref() };
+ // Using a relaxed ordering is alright here as we don't need any atomic
+ // synchronization here as we're not modifying or accessing the inner
+ // data.
+ let old_rc = inner.rc.fetch_add(1, Ordering::Relaxed);
+
+ if old_rc >= isize::MAX as usize {
+ std::process::abort();
+ }
+
+ Self {
+ ptr: self.ptr,
+ phantom: PhantomData,
+ }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/arc-mutex/arc-drop.md b/src/doc/nomicon/src/arc-mutex/arc-drop.md
new file mode 100644
index 000000000..3dd9f03d1
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc-drop.md
@@ -0,0 +1,104 @@
+# Dropping
+
+We now need a way to decrease the reference count and drop the data once it is
+low enough, otherwise the data will live forever on the heap.
+
+To do this, we can implement `Drop`.
+
+Basically, we need to:
+
+1. Decrement the reference count
+2. If there is only one reference remaining to the data, then:
+3. Atomically fence the data to prevent reordering of the use and deletion of
+ the data
+4. Drop the inner data
+
+First, we'll need to get access to the `ArcInner`:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let inner = unsafe { self.ptr.as_ref() };
+```
+
+Now, we need to decrement the reference count. To streamline our code, we can
+also return if the returned value from `fetch_sub` (the value of the reference
+count before decrementing it) is not equal to `1` (which happens when we are not
+the last reference to the data).
+
+<!-- ignore: simplified code -->
+```rust,ignore
+if inner.rc.fetch_sub(1, Ordering::Release) != 1 {
+ return;
+}
+```
+
+We then need to create an atomic fence to prevent reordering of the use of the
+data and deletion of the data. As described in [the standard library's
+implementation of `Arc`][3]:
+> This fence is needed to prevent reordering of use of the data and deletion of
+> the data. Because it is marked `Release`, the decreasing of the reference
+> count synchronizes with this `Acquire` fence. This means that use of the data
+> happens before decreasing the reference count, which happens before this
+> fence, which happens before the deletion of the data.
+>
+> As explained in the [Boost documentation][1],
+>
+> > It is important to enforce any possible access to the object in one
+> > thread (through an existing reference) to *happen before* deleting
+> > the object in a different thread. This is achieved by a "release"
+> > operation after dropping a reference (any access to the object
+> > through this reference must obviously happened before), and an
+> > "acquire" operation before deleting the object.
+>
+> In particular, while the contents of an Arc are usually immutable, it's
+> possible to have interior writes to something like a Mutex<T>. Since a Mutex
+> is not acquired when it is deleted, we can't rely on its synchronization logic
+> to make writes in thread A visible to a destructor running in thread B.
+>
+> Also note that the Acquire fence here could probably be replaced with an
+> Acquire load, which could improve performance in highly-contended situations.
+> See [2].
+>
+> [1]: https://www.boost.org/doc/libs/1_55_0/doc/html/atomic/usage_examples.html
+> [2]: https://github.com/rust-lang/rust/pull/41714
+[3]: https://github.com/rust-lang/rust/blob/e1884a8e3c3e813aada8254edfa120e85bf5ffca/library/alloc/src/sync.rs#L1440-L1467
+
+To do this, we do the following:
+
+```rust
+# use std::sync::atomic::Ordering;
+use std::sync::atomic;
+atomic::fence(Ordering::Acquire);
+```
+
+Finally, we can drop the data itself. We use `Box::from_raw` to drop the boxed
+`ArcInner<T>` and its data. This takes a `*mut T` and not a `NonNull<T>`, so we
+must convert using `NonNull::as_ptr`.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+unsafe { Box::from_raw(self.ptr.as_ptr()); }
+```
+
+This is safe as we know we have the last pointer to the `ArcInner` and that its
+pointer is valid.
+
+Now, let's wrap this all up inside the `Drop` implementation:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Drop for Arc<T> {
+ fn drop(&mut self) {
+ let inner = unsafe { self.ptr.as_ref() };
+ if inner.rc.fetch_sub(1, Ordering::Release) != 1 {
+ return;
+ }
+ // This fence is needed to prevent reordering of the use and deletion
+ // of the data.
+ atomic::fence(Ordering::Acquire);
+ // This is safe as we know we have the last pointer to the `ArcInner`
+ // and that its pointer is valid.
+ unsafe { Box::from_raw(self.ptr.as_ptr()); }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/arc-mutex/arc-final.md b/src/doc/nomicon/src/arc-mutex/arc-final.md
new file mode 100644
index 000000000..b9c362d13
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc-final.md
@@ -0,0 +1,83 @@
+# Final Code
+
+Here's the final code, with some added comments and re-ordered imports:
+
+```rust
+use std::marker::PhantomData;
+use std::ops::Deref;
+use std::ptr::NonNull;
+use std::sync::atomic::{self, AtomicUsize, Ordering};
+
+pub struct Arc<T> {
+ ptr: NonNull<ArcInner<T>>,
+ phantom: PhantomData<ArcInner<T>>,
+}
+
+pub struct ArcInner<T> {
+ rc: AtomicUsize,
+ data: T,
+}
+
+impl<T> Arc<T> {
+ pub fn new(data: T) -> Arc<T> {
+ // We start the reference count at 1, as that first reference is the
+ // current pointer.
+ let boxed = Box::new(ArcInner {
+ rc: AtomicUsize::new(1),
+ data,
+ });
+ Arc {
+ // It is okay to call `.unwrap()` here as we get a pointer from
+ // `Box::into_raw` which is guaranteed to not be null.
+ ptr: NonNull::new(Box::into_raw(boxed)).unwrap(),
+ phantom: PhantomData,
+ }
+ }
+}
+
+unsafe impl<T: Sync + Send> Send for Arc<T> {}
+unsafe impl<T: Sync + Send> Sync for Arc<T> {}
+
+impl<T> Deref for Arc<T> {
+ type Target = T;
+
+ fn deref(&self) -> &T {
+ let inner = unsafe { self.ptr.as_ref() };
+ &inner.data
+ }
+}
+
+impl<T> Clone for Arc<T> {
+ fn clone(&self) -> Arc<T> {
+ let inner = unsafe { self.ptr.as_ref() };
+ // Using a relaxed ordering is alright here as we don't need any atomic
+ // synchronization here as we're not modifying or accessing the inner
+ // data.
+ let old_rc = inner.rc.fetch_add(1, Ordering::Relaxed);
+
+ if old_rc >= isize::MAX as usize {
+ std::process::abort();
+ }
+
+ Self {
+ ptr: self.ptr,
+ phantom: PhantomData,
+ }
+ }
+}
+
+impl<T> Drop for Arc<T> {
+ fn drop(&mut self) {
+ let inner = unsafe { self.ptr.as_ref() };
+ if inner.rc.fetch_sub(1, Ordering::Release) != 1 {
+ return;
+ }
+ // This fence is needed to prevent reordering of the use and deletion
+ // of the data.
+ atomic::fence(Ordering::Acquire);
+ // This is safe as we know we have the last pointer to the `ArcInner`
+ // and that its pointer is valid.
+ unsafe { Box::from_raw(self.ptr.as_ptr()); }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/arc-mutex/arc-layout.md b/src/doc/nomicon/src/arc-mutex/arc-layout.md
new file mode 100644
index 000000000..fabfdca31
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc-layout.md
@@ -0,0 +1,73 @@
+# Layout
+
+Let's start by making the layout for our implementation of `Arc`.
+
+An `Arc<T>` provides thread-safe shared ownership of a value of type `T`,
+allocated in the heap. Sharing implies immutability in Rust, so we don't need to
+design anything that manages access to that value, right? Although interior
+mutability types like Mutex allow Arc's users to create shared mutability, Arc
+itself doesn't need to concern itself with these issues.
+
+However there _is_ one place where Arc needs to concern itself with mutation:
+destruction. When all the owners of the Arc go away, we need to be able to
+`drop` its contents and free its allocation. So we need a way for an owner to
+know if it's the _last_ owner, and the simplest way to do that is with a count
+of the owners -- Reference Counting.
+
+Unfortunately, this reference count is inherently shared mutable state, so Arc
+_does_ need to think about synchronization. We _could_ use a Mutex for this, but
+that's overkill. Instead, we'll use atomics. And since everyone already needs a
+pointer to the T's allocation, we might as well put the reference count in that
+same allocation.
+
+Naively, it would look something like this:
+
+```rust
+use std::sync::atomic;
+
+pub struct Arc<T> {
+ ptr: *mut ArcInner<T>,
+}
+
+pub struct ArcInner<T> {
+ rc: atomic::AtomicUsize,
+ data: T,
+}
+```
+
+This would compile, however it would be incorrect. First of all, the compiler
+will give us too strict variance. For example, an `Arc<&'static str>` couldn't
+be used where an `Arc<&'a str>` was expected. More importantly, it will give
+incorrect ownership information to the drop checker, as it will assume we don't
+own any values of type `T`. As this is a structure providing shared ownership of
+a value, at some point there will be an instance of this structure that entirely
+owns its data. See [the chapter on ownership and lifetimes](../ownership.md) for
+all the details on variance and drop check.
+
+To fix the first problem, we can use `NonNull<T>`. Note that `NonNull<T>` is a
+wrapper around a raw pointer that declares that:
+
+* We are covariant over `T`
+* Our pointer is never null
+
+To fix the second problem, we can include a `PhantomData` marker containing an
+`ArcInner<T>`. This will tell the drop checker that we have some notion of
+ownership of a value of `ArcInner<T>` (which itself contains some `T`).
+
+With these changes we get our final structure:
+
+```rust
+use std::marker::PhantomData;
+use std::ptr::NonNull;
+use std::sync::atomic::AtomicUsize;
+
+pub struct Arc<T> {
+ ptr: NonNull<ArcInner<T>>,
+ phantom: PhantomData<ArcInner<T>>,
+}
+
+pub struct ArcInner<T> {
+ rc: AtomicUsize,
+ data: T,
+}
+```
diff --git a/src/doc/nomicon/src/arc-mutex/arc.md b/src/doc/nomicon/src/arc-mutex/arc.md
new file mode 100644
index 000000000..fd7800f5e
--- /dev/null
+++ b/src/doc/nomicon/src/arc-mutex/arc.md
@@ -0,0 +1,13 @@
+# Implementing Arc
+
+In this section, we'll be implementing a simpler version of `std::sync::Arc`.
+Similarly to [the implementation of `Vec` we made earlier](../vec/vec.md), we won't be
+taking advantage of as many optimizations, intrinsics, or unstable code as the
+standard library may.
+
+This implementation is loosely based on the standard library's implementation
+(technically taken from `alloc::sync` in 1.49, as that's where it's actually
+implemented), but it will not support weak references at the moment as they
+make the implementation slightly more complex.
+
+Please note that this section is very work-in-progress at the moment.
diff --git a/src/doc/nomicon/src/atomics.md b/src/doc/nomicon/src/atomics.md
new file mode 100644
index 000000000..6aef6aee6
--- /dev/null
+++ b/src/doc/nomicon/src/atomics.md
@@ -0,0 +1,239 @@
+# Atomics
+
+Rust pretty blatantly just inherits the memory model for atomics from C++20. This is not
+due to this model being particularly excellent or easy to understand. Indeed,
+this model is quite complex and known to have [several flaws][C11-busted].
+Rather, it is a pragmatic concession to the fact that *everyone* is pretty bad
+at modeling atomics. At very least, we can benefit from existing tooling and
+research around the C/C++ memory model.
+(You'll often see this model referred to as "C/C++11" or just "C11". C just copies
+the C++ memory model; and C++11 was the first version of the model but it has
+received some bugfixes since then.)
+
+Trying to fully explain the model in this book is fairly hopeless. It's defined
+in terms of madness-inducing causality graphs that require a full book to
+properly understand in a practical way. If you want all the nitty-gritty
+details, you should check out the [C++ specification][C++-model].
+Still, we'll try to cover the basics and some of the problems Rust developers
+face.
+
+The C++ memory model is fundamentally about trying to bridge the gap between the
+semantics we want, the optimizations compilers want, and the inconsistent chaos
+our hardware wants. *We* would like to just write programs and have them do
+exactly what we said but, you know, fast. Wouldn't that be great?
+
+## Compiler Reordering
+
+Compilers fundamentally want to be able to do all sorts of complicated
+transformations to reduce data dependencies and eliminate dead code. In
+particular, they may radically change the actual order of events, or make events
+never occur! If we write something like:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+x = 1;
+y = 3;
+x = 2;
+```
+
+The compiler may conclude that it would be best if your program did:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+x = 2;
+y = 3;
+```
+
+This has inverted the order of events and completely eliminated one event.
+From a single-threaded perspective this is completely unobservable: after all
+the statements have executed we are in exactly the same state. But if our
+program is multi-threaded, we may have been relying on `x` to actually be
+assigned to 1 before `y` was assigned. We would like the compiler to be
+able to make these kinds of optimizations, because they can seriously improve
+performance. On the other hand, we'd also like to be able to depend on our
+program *doing the thing we said*.
+
+## Hardware Reordering
+
+On the other hand, even if the compiler totally understood what we wanted and
+respected our wishes, our hardware might instead get us in trouble. Trouble
+comes from CPUs in the form of memory hierarchies. There is indeed a global
+shared memory space somewhere in your hardware, but from the perspective of each
+CPU core it is *so very far away* and *so very slow*. Each CPU would rather work
+with its local cache of the data and only go through all the anguish of
+talking to shared memory only when it doesn't actually have that memory in
+cache.
+
+After all, that's the whole point of the cache, right? If every read from the
+cache had to run back to shared memory to double check that it hadn't changed,
+what would the point be? The end result is that the hardware doesn't guarantee
+that events that occur in some order on *one* thread, occur in the same
+order on *another* thread. To guarantee this, we must issue special instructions
+to the CPU telling it to be a bit less smart.
+
+For instance, say we convince the compiler to emit this logic:
+
+```text
+initial state: x = 0, y = 1
+
+THREAD 1 THREAD2
+y = 3; if x == 1 {
+x = 1; y *= 2;
+ }
+```
+
+Ideally this program has 2 possible final states:
+
+* `y = 3`: (thread 2 did the check before thread 1 completed)
+* `y = 6`: (thread 2 did the check after thread 1 completed)
+
+However there's a third potential state that the hardware enables:
+
+* `y = 2`: (thread 2 saw `x = 1`, but not `y = 3`, and then overwrote `y = 3`)
+
+It's worth noting that different kinds of CPU provide different guarantees. It
+is common to separate hardware into two categories: strongly-ordered and weakly-ordered.
+Most notably x86/64 provides strong ordering guarantees, while ARM
+provides weak ordering guarantees. This has two consequences for concurrent
+programming:
+
+* Asking for stronger guarantees on strongly-ordered hardware may be cheap or
+ even free because they already provide strong guarantees unconditionally.
+ Weaker guarantees may only yield performance wins on weakly-ordered hardware.
+
+* Asking for guarantees that are too weak on strongly-ordered hardware is
+ more likely to *happen* to work, even though your program is strictly
+ incorrect. If possible, concurrent algorithms should be tested on
+ weakly-ordered hardware.
+
+## Data Accesses
+
+The C++ memory model attempts to bridge the gap by allowing us to talk about the
+*causality* of our program. Generally, this is by establishing a *happens
+before* relationship between parts of the program and the threads that are
+running them. This gives the hardware and compiler room to optimize the program
+more aggressively where a strict happens-before relationship isn't established,
+but forces them to be more careful where one is established. The way we
+communicate these relationships are through *data accesses* and *atomic
+accesses*.
+
+Data accesses are the bread-and-butter of the programming world. They are
+fundamentally unsynchronized and compilers are free to aggressively optimize
+them. In particular, data accesses are free to be reordered by the compiler on
+the assumption that the program is single-threaded. The hardware is also free to
+propagate the changes made in data accesses to other threads as lazily and
+inconsistently as it wants. Most critically, data accesses are how data races
+happen. Data accesses are very friendly to the hardware and compiler, but as
+we've seen they offer *awful* semantics to try to write synchronized code with.
+Actually, that's too weak.
+
+**It is literally impossible to write correct synchronized code using only data
+accesses.**
+
+Atomic accesses are how we tell the hardware and compiler that our program is
+multi-threaded. Each atomic access can be marked with an *ordering* that
+specifies what kind of relationship it establishes with other accesses. In
+practice, this boils down to telling the compiler and hardware certain things
+they *can't* do. For the compiler, this largely revolves around re-ordering of
+instructions. For the hardware, this largely revolves around how writes are
+propagated to other threads. The set of orderings Rust exposes are:
+
+* Sequentially Consistent (SeqCst)
+* Release
+* Acquire
+* Relaxed
+
+(Note: We explicitly do not expose the C++ *consume* ordering)
+
+TODO: negative reasoning vs positive reasoning? TODO: "can't forget to
+synchronize"
+
+## Sequentially Consistent
+
+Sequentially Consistent is the most powerful of all, implying the restrictions
+of all other orderings. Intuitively, a sequentially consistent operation
+cannot be reordered: all accesses on one thread that happen before and after a
+SeqCst access stay before and after it. A data-race-free program that uses
+only sequentially consistent atomics and data accesses has the very nice
+property that there is a single global execution of the program's instructions
+that all threads agree on. This execution is also particularly nice to reason
+about: it's just an interleaving of each thread's individual executions. This
+does not hold if you start using the weaker atomic orderings.
+
+The relative developer-friendliness of sequential consistency doesn't come for
+free. Even on strongly-ordered platforms sequential consistency involves
+emitting memory fences.
+
+In practice, sequential consistency is rarely necessary for program correctness.
+However sequential consistency is definitely the right choice if you're not
+confident about the other memory orders. Having your program run a bit slower
+than it needs to is certainly better than it running incorrectly! It's also
+mechanically trivial to downgrade atomic operations to have a weaker
+consistency later on. Just change `SeqCst` to `Relaxed` and you're done! Of
+course, proving that this transformation is *correct* is a whole other matter.
+
+## Acquire-Release
+
+Acquire and Release are largely intended to be paired. Their names hint at their
+use case: they're perfectly suited for acquiring and releasing locks, and
+ensuring that critical sections don't overlap.
+
+Intuitively, an acquire access ensures that every access after it stays after
+it. However operations that occur before an acquire are free to be reordered to
+occur after it. Similarly, a release access ensures that every access before it
+stays before it. However operations that occur after a release are free to be
+reordered to occur before it.
+
+When thread A releases a location in memory and then thread B subsequently
+acquires *the same* location in memory, causality is established. Every write
+(including non-atomic and relaxed atomic writes) that happened before A's
+release will be observed by B after its acquisition. However no causality is
+established with any other threads. Similarly, no causality is established
+if A and B access *different* locations in memory.
+
+Basic use of release-acquire is therefore simple: you acquire a location of
+memory to begin the critical section, and then release that location to end it.
+For instance, a simple spinlock might look like:
+
+```rust
+use std::sync::Arc;
+use std::sync::atomic::{AtomicBool, Ordering};
+use std::thread;
+
+fn main() {
+ let lock = Arc::new(AtomicBool::new(false)); // value answers "am I locked?"
+
+ // ... distribute lock to threads somehow ...
+
+ // Try to acquire the lock by setting it to true
+ while lock.compare_and_swap(false, true, Ordering::Acquire) { }
+ // broke out of the loop, so we successfully acquired the lock!
+
+ // ... scary data accesses ...
+
+ // ok we're done, release the lock
+ lock.store(false, Ordering::Release);
+}
+```
+
+On strongly-ordered platforms most accesses have release or acquire semantics,
+making release and acquire often totally free. This is not the case on
+weakly-ordered platforms.
+
+## Relaxed
+
+Relaxed accesses are the absolute weakest. They can be freely re-ordered and
+provide no happens-before relationship. Still, relaxed operations are still
+atomic. That is, they don't count as data accesses and any read-modify-write
+operations done to them occur atomically. Relaxed operations are appropriate for
+things that you definitely want to happen, but don't particularly otherwise care
+about. For instance, incrementing a counter can be safely done by multiple
+threads using a relaxed `fetch_add` if you're not using the counter to
+synchronize any other accesses.
+
+There's rarely a benefit in making an operation relaxed on strongly-ordered
+platforms, since they usually provide release-acquire semantics anyway. However
+relaxed operations can be cheaper on weakly-ordered platforms.
+
+[C11-busted]: http://plv.mpi-sws.org/c11comp/popl15.pdf
+[C++-model]: https://en.cppreference.com/w/cpp/atomic/memory_order
diff --git a/src/doc/nomicon/src/beneath-std.md b/src/doc/nomicon/src/beneath-std.md
new file mode 100644
index 000000000..6f05182b2
--- /dev/null
+++ b/src/doc/nomicon/src/beneath-std.md
@@ -0,0 +1,10 @@
+# Beneath std
+
+This section documents (or will document) features that are provided by the standard library and
+that `#![no_std]` developers have to deal with (i.e. provide) to build `#![no_std]` binary crates. A
+(likely incomplete) list of such features is shown below:
+
+- `#[lang = "eh_personality"]`
+- `#[lang = "start"]`
+- `#[lang = "termination"]`
+- `#[panic_implementation]`
diff --git a/src/doc/nomicon/src/borrow-splitting.md b/src/doc/nomicon/src/borrow-splitting.md
new file mode 100644
index 000000000..3d13ff954
--- /dev/null
+++ b/src/doc/nomicon/src/borrow-splitting.md
@@ -0,0 +1,296 @@
+# Splitting Borrows
+
+The mutual exclusion property of mutable references can be very limiting when
+working with a composite structure. The borrow checker (a.k.a. borrowck)
+understands some basic stuff, but will fall over pretty easily. It does
+understand structs sufficiently to know that it's possible to borrow disjoint
+fields of a struct simultaneously. So this works today:
+
+```rust
+struct Foo {
+ a: i32,
+ b: i32,
+ c: i32,
+}
+
+let mut x = Foo {a: 0, b: 0, c: 0};
+let a = &mut x.a;
+let b = &mut x.b;
+let c = &x.c;
+*b += 1;
+let c2 = &x.c;
+*a += 10;
+println!("{} {} {} {}", a, b, c, c2);
+```
+
+However borrowck doesn't understand arrays or slices in any way, so this doesn't
+work:
+
+```rust,compile_fail
+let mut x = [1, 2, 3];
+let a = &mut x[0];
+let b = &mut x[1];
+println!("{} {}", a, b);
+```
+
+```text
+error[E0499]: cannot borrow `x[..]` as mutable more than once at a time
+ --> src/lib.rs:4:18
+ |
+3 | let a = &mut x[0];
+ | ---- first mutable borrow occurs here
+4 | let b = &mut x[1];
+ | ^^^^ second mutable borrow occurs here
+5 | println!("{} {}", a, b);
+6 | }
+ | - first borrow ends here
+
+error: aborting due to previous error
+```
+
+While it was plausible that borrowck could understand this simple case, it's
+pretty clearly hopeless for borrowck to understand disjointness in general
+container types like a tree, especially if distinct keys actually *do* map
+to the same value.
+
+In order to "teach" borrowck that what we're doing is ok, we need to drop down
+to unsafe code. For instance, mutable slices expose a `split_at_mut` function
+that consumes the slice and returns two mutable slices. One for everything to
+the left of the index, and one for everything to the right. Intuitively we know
+this is safe because the slices don't overlap, and therefore alias. However
+the implementation requires some unsafety:
+
+```rust
+# use std::slice::from_raw_parts_mut;
+# struct FakeSlice<T>(T);
+# impl<T> FakeSlice<T> {
+# fn len(&self) -> usize { unimplemented!() }
+# fn as_mut_ptr(&mut self) -> *mut T { unimplemented!() }
+pub fn split_at_mut(&mut self, mid: usize) -> (&mut [T], &mut [T]) {
+ let len = self.len();
+ let ptr = self.as_mut_ptr();
+
+ unsafe {
+ assert!(mid <= len);
+
+ (from_raw_parts_mut(ptr, mid),
+ from_raw_parts_mut(ptr.add(mid), len - mid))
+ }
+}
+# }
+```
+
+This is actually a bit subtle. So as to avoid ever making two `&mut`'s to the
+same value, we explicitly construct brand-new slices through raw pointers.
+
+However more subtle is how iterators that yield mutable references work.
+The iterator trait is defined as follows:
+
+```rust
+trait Iterator {
+ type Item;
+
+ fn next(&mut self) -> Option<Self::Item>;
+}
+```
+
+Given this definition, Self::Item has *no* connection to `self`. This means that
+we can call `next` several times in a row, and hold onto all the results
+*concurrently*. This is perfectly fine for by-value iterators, which have
+exactly these semantics. It's also actually fine for shared references, as they
+admit arbitrarily many references to the same thing (although the iterator needs
+to be a separate object from the thing being shared).
+
+But mutable references make this a mess. At first glance, they might seem
+completely incompatible with this API, as it would produce multiple mutable
+references to the same object!
+
+However it actually *does* work, exactly because iterators are one-shot objects.
+Everything an IterMut yields will be yielded at most once, so we don't
+actually ever yield multiple mutable references to the same piece of data.
+
+Perhaps surprisingly, mutable iterators don't require unsafe code to be
+implemented for many types!
+
+For instance here's a singly linked list:
+
+```rust
+# fn main() {}
+type Link<T> = Option<Box<Node<T>>>;
+
+struct Node<T> {
+ elem: T,
+ next: Link<T>,
+}
+
+pub struct LinkedList<T> {
+ head: Link<T>,
+}
+
+pub struct IterMut<'a, T: 'a>(Option<&'a mut Node<T>>);
+
+impl<T> LinkedList<T> {
+ fn iter_mut(&mut self) -> IterMut<T> {
+ IterMut(self.head.as_mut().map(|node| &mut **node))
+ }
+}
+
+impl<'a, T> Iterator for IterMut<'a, T> {
+ type Item = &'a mut T;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ self.0.take().map(|node| {
+ self.0 = node.next.as_mut().map(|node| &mut **node);
+ &mut node.elem
+ })
+ }
+}
+```
+
+Here's a mutable slice:
+
+```rust
+# fn main() {}
+use std::mem;
+
+pub struct IterMut<'a, T: 'a>(&'a mut[T]);
+
+impl<'a, T> Iterator for IterMut<'a, T> {
+ type Item = &'a mut T;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ let slice = mem::replace(&mut self.0, &mut []);
+ if slice.is_empty() { return None; }
+
+ let (l, r) = slice.split_at_mut(1);
+ self.0 = r;
+ l.get_mut(0)
+ }
+}
+
+impl<'a, T> DoubleEndedIterator for IterMut<'a, T> {
+ fn next_back(&mut self) -> Option<Self::Item> {
+ let slice = mem::replace(&mut self.0, &mut []);
+ if slice.is_empty() { return None; }
+
+ let new_len = slice.len() - 1;
+ let (l, r) = slice.split_at_mut(new_len);
+ self.0 = l;
+ r.get_mut(0)
+ }
+}
+```
+
+And here's a binary tree:
+
+```rust
+# fn main() {}
+use std::collections::VecDeque;
+
+type Link<T> = Option<Box<Node<T>>>;
+
+struct Node<T> {
+ elem: T,
+ left: Link<T>,
+ right: Link<T>,
+}
+
+pub struct Tree<T> {
+ root: Link<T>,
+}
+
+struct NodeIterMut<'a, T: 'a> {
+ elem: Option<&'a mut T>,
+ left: Option<&'a mut Node<T>>,
+ right: Option<&'a mut Node<T>>,
+}
+
+enum State<'a, T: 'a> {
+ Elem(&'a mut T),
+ Node(&'a mut Node<T>),
+}
+
+pub struct IterMut<'a, T: 'a>(VecDeque<NodeIterMut<'a, T>>);
+
+impl<T> Tree<T> {
+ pub fn iter_mut(&mut self) -> IterMut<T> {
+ let mut deque = VecDeque::new();
+ self.root.as_mut().map(|root| deque.push_front(root.iter_mut()));
+ IterMut(deque)
+ }
+}
+
+impl<T> Node<T> {
+ pub fn iter_mut(&mut self) -> NodeIterMut<T> {
+ NodeIterMut {
+ elem: Some(&mut self.elem),
+ left: self.left.as_mut().map(|node| &mut **node),
+ right: self.right.as_mut().map(|node| &mut **node),
+ }
+ }
+}
+
+
+impl<'a, T> Iterator for NodeIterMut<'a, T> {
+ type Item = State<'a, T>;
+
+ fn next(&mut self) -> Option<Self::Item> {
+ match self.left.take() {
+ Some(node) => Some(State::Node(node)),
+ None => match self.elem.take() {
+ Some(elem) => Some(State::Elem(elem)),
+ None => match self.right.take() {
+ Some(node) => Some(State::Node(node)),
+ None => None,
+ }
+ }
+ }
+ }
+}
+
+impl<'a, T> DoubleEndedIterator for NodeIterMut<'a, T> {
+ fn next_back(&mut self) -> Option<Self::Item> {
+ match self.right.take() {
+ Some(node) => Some(State::Node(node)),
+ None => match self.elem.take() {
+ Some(elem) => Some(State::Elem(elem)),
+ None => match self.left.take() {
+ Some(node) => Some(State::Node(node)),
+ None => None,
+ }
+ }
+ }
+ }
+}
+
+impl<'a, T> Iterator for IterMut<'a, T> {
+ type Item = &'a mut T;
+ fn next(&mut self) -> Option<Self::Item> {
+ loop {
+ match self.0.front_mut().and_then(|node_it| node_it.next()) {
+ Some(State::Elem(elem)) => return Some(elem),
+ Some(State::Node(node)) => self.0.push_front(node.iter_mut()),
+ None => if let None = self.0.pop_front() { return None },
+ }
+ }
+ }
+}
+
+impl<'a, T> DoubleEndedIterator for IterMut<'a, T> {
+ fn next_back(&mut self) -> Option<Self::Item> {
+ loop {
+ match self.0.back_mut().and_then(|node_it| node_it.next_back()) {
+ Some(State::Elem(elem)) => return Some(elem),
+ Some(State::Node(node)) => self.0.push_back(node.iter_mut()),
+ None => if let None = self.0.pop_back() { return None },
+ }
+ }
+ }
+}
+```
+
+All of these are completely safe and work on stable Rust! This ultimately
+falls out of the simple struct case we saw before: Rust understands that you
+can safely split a mutable reference into subfields. We can then encode
+permanently consuming a reference via Options (or in the case of slices,
+replacing with an empty slice).
diff --git a/src/doc/nomicon/src/casts.md b/src/doc/nomicon/src/casts.md
new file mode 100644
index 000000000..e944809cc
--- /dev/null
+++ b/src/doc/nomicon/src/casts.md
@@ -0,0 +1,34 @@
+# Casts
+
+Casts are a superset of coercions: every coercion can be explicitly invoked via a cast.
+However some conversions require a cast.
+While coercions are pervasive and largely harmless, these "true casts" are rare and potentially dangerous.
+As such, casts must be explicitly invoked using the `as` keyword: `expr as Type`.
+
+You can find an exhaustive list of [all the true casts][cast list] and [casting semantics][semantics list] on the reference.
+
+## Safety of casting
+
+True casts generally revolve around raw pointers and the primitive numeric types.
+Even though they're dangerous, these casts are infallible at runtime.
+If a cast triggers some subtle corner case no indication will be given that this occurred.
+The cast will simply succeed.
+That said, casts must be valid at the type level, or else they will be prevented statically.
+For instance, `7u8 as bool` will not compile.
+
+That said, casts aren't `unsafe` because they generally can't violate memory safety *on their own*.
+For instance, converting an integer to a raw pointer can very easily lead to terrible things.
+However the act of creating the pointer itself is safe, because actually using a raw pointer is already marked as `unsafe`.
+
+## Some notes about casting
+
+### Lengths when casting raw slices
+
+Note that lengths are not adjusted when casting raw slices; `*const [u16] as *const [u8]` creates a slice that only includes half of the original memory.
+
+### Transitivity
+
+Casting is not transitive, that is, even if `e as U1 as U2` is a valid expression, `e as U2` is not necessarily so.
+
+[cast list]: ../reference/expressions/operator-expr.html#type-cast-expressions
+[semantics list]: ../reference/expressions/operator-expr.html#semantics
diff --git a/src/doc/nomicon/src/checked-uninit.md b/src/doc/nomicon/src/checked-uninit.md
new file mode 100644
index 000000000..37cbea21c
--- /dev/null
+++ b/src/doc/nomicon/src/checked-uninit.md
@@ -0,0 +1,121 @@
+# Checked Uninitialized Memory
+
+Like C, all stack variables in Rust are uninitialized until a value is
+explicitly assigned to them. Unlike C, Rust statically prevents you from ever
+reading them until you do:
+
+```rust,compile_fail
+fn main() {
+ let x: i32;
+ println!("{}", x);
+}
+```
+
+```text
+ |
+3 | println!("{}", x);
+ | ^ use of possibly uninitialized `x`
+```
+
+This is based off of a basic branch analysis: every branch must assign a value
+to `x` before it is first used. For short, we also say that "`x` is init" or
+"`x` is uninit".
+
+Interestingly, Rust doesn't require the variable
+to be mutable to perform a delayed initialization if every branch assigns
+exactly once. However the analysis does not take advantage of constant analysis
+or anything like that. So this compiles:
+
+```rust
+fn main() {
+ let x: i32;
+
+ if true {
+ x = 1;
+ } else {
+ x = 2;
+ }
+
+ println!("{}", x);
+}
+```
+
+but this doesn't:
+
+```rust,compile_fail
+fn main() {
+ let x: i32;
+ if true {
+ x = 1;
+ }
+ println!("{}", x);
+}
+```
+
+```text
+ |
+6 | println!("{}", x);
+ | ^ use of possibly uninitialized `x`
+```
+
+while this does:
+
+```rust
+fn main() {
+ let x: i32;
+ if true {
+ x = 1;
+ println!("{}", x);
+ }
+ // Don't care that there are branches where it's not initialized
+ // since we don't use the value in those branches
+}
+```
+
+Of course, while the analysis doesn't consider actual values, it does
+have a relatively sophisticated understanding of dependencies and control
+flow. For instance, this works:
+
+```rust
+let x: i32;
+
+loop {
+ // Rust doesn't understand that this branch will be taken unconditionally,
+ // because it relies on actual values.
+ if true {
+ // But it does understand that it will only be taken once because
+ // we unconditionally break out of it. Therefore `x` doesn't
+ // need to be marked as mutable.
+ x = 0;
+ break;
+ }
+}
+// It also knows that it's impossible to get here without reaching the break.
+// And therefore that `x` must be initialized here!
+println!("{}", x);
+```
+
+If a value is moved out of a variable, that variable becomes logically
+uninitialized if the type of the value isn't Copy. That is:
+
+```rust
+fn main() {
+ let x = 0;
+ let y = Box::new(0);
+ let z1 = x; // x is still valid because i32 is Copy
+ let z2 = y; // y is now logically uninitialized because Box isn't Copy
+}
+```
+
+However reassigning `y` in this example *would* require `y` to be marked as
+mutable, as a Safe Rust program could observe that the value of `y` changed:
+
+```rust
+fn main() {
+ let mut y = Box::new(0);
+ let z = y; // y is now logically uninitialized because Box isn't Copy
+ y = Box::new(1); // reinitialize y
+}
+```
+
+Otherwise it's like `y` is a brand new variable.
diff --git a/src/doc/nomicon/src/coercions.md b/src/doc/nomicon/src/coercions.md
new file mode 100644
index 000000000..ffff83f8e
--- /dev/null
+++ b/src/doc/nomicon/src/coercions.md
@@ -0,0 +1,44 @@
+# Coercions
+
+Types can implicitly be coerced to change in certain contexts.
+These changes are generally just *weakening* of types, largely focused around pointers and lifetimes.
+They mostly exist to make Rust "just work" in more cases, and are largely harmless.
+
+For an exhaustive list of all the types of coercions, see the [Coercion types] section on the reference.
+
+Note that we do not perform coercions when matching traits (except for receivers, see the [next page][dot-operator]).
+If there is an `impl` for some type `U` and `T` coerces to `U`, that does not constitute an implementation for `T`.
+For example, the following will not type check, even though it is OK to coerce `t` to `&T` and there is an `impl` for `&T`:
+
+```rust,compile_fail
+trait Trait {}
+
+fn foo<X: Trait>(t: X) {}
+
+impl<'a> Trait for &'a i32 {}
+
+fn main() {
+ let t: &mut i32 = &mut 0;
+ foo(t);
+}
+```
+
+which fails like as follows:
+
+```text
+error[E0277]: the trait bound `&mut i32: Trait` is not satisfied
+ --> src/main.rs:9:9
+ |
+3 | fn foo<X: Trait>(t: X) {}
+ | ----- required by this bound in `foo`
+...
+9 | foo(t);
+ | ^ the trait `Trait` is not implemented for `&mut i32`
+ |
+ = help: the following implementations were found:
+ <&'a i32 as Trait>
+ = note: `Trait` is implemented for `&i32`, but not for `&mut i32`
+```
+
+[Coercion types]: ../reference/type-coercions.html#coercion-types
+[dot-operator]: ./dot-operator.html
diff --git a/src/doc/nomicon/src/concurrency.md b/src/doc/nomicon/src/concurrency.md
new file mode 100644
index 000000000..6205199bf
--- /dev/null
+++ b/src/doc/nomicon/src/concurrency.md
@@ -0,0 +1,13 @@
+# Concurrency and Parallelism
+
+Rust as a language doesn't *really* have an opinion on how to do concurrency or
+parallelism. The standard library exposes OS threads and blocking sys-calls
+because everyone has those, and they're uniform enough that you can provide
+an abstraction over them in a relatively uncontroversial way. Message passing,
+green threads, and async APIs are all diverse enough that any abstraction over
+them tends to involve trade-offs that we weren't willing to commit to for 1.0.
+
+However the way Rust models concurrency makes it relatively easy to design your own
+concurrency paradigm as a library and have everyone else's code Just Work
+with yours. Just require the right lifetimes and Send and Sync where appropriate
+and you're off to the races. Or rather, off to the... not... having... races.
diff --git a/src/doc/nomicon/src/constructors.md b/src/doc/nomicon/src/constructors.md
new file mode 100644
index 000000000..b79e72dba
--- /dev/null
+++ b/src/doc/nomicon/src/constructors.md
@@ -0,0 +1,59 @@
+# Constructors
+
+There is exactly one way to create an instance of a user-defined type: name it,
+and initialize all its fields at once:
+
+```rust
+struct Foo {
+ a: u8,
+ b: u32,
+ c: bool,
+}
+
+enum Bar {
+ X(u32),
+ Y(bool),
+}
+
+struct Unit;
+
+let foo = Foo { a: 0, b: 1, c: false };
+let bar = Bar::X(0);
+let empty = Unit;
+```
+
+That's it. Every other way you make an instance of a type is just calling a
+totally vanilla function that does some stuff and eventually bottoms out to The
+One True Constructor.
+
+Unlike C++, Rust does not come with a slew of built-in kinds of constructor.
+There are no Copy, Default, Assignment, Move, or whatever constructors. The
+reasons for this are varied, but it largely boils down to Rust's philosophy of
+*being explicit*.
+
+Move constructors are meaningless in Rust because we don't enable types to
+"care" about their location in memory. Every type must be ready for it to be
+blindly memcopied to somewhere else in memory. This means pure on-the-stack-but-
+still-movable intrusive linked lists are simply not happening in Rust (safely).
+
+Assignment and copy constructors similarly don't exist because move semantics
+are the only semantics in Rust. At most `x = y` just moves the bits of y into
+the x variable. Rust does provide two facilities for providing C++'s copy-
+oriented semantics: `Copy` and `Clone`. Clone is our moral equivalent of a copy
+constructor, but it's never implicitly invoked. You have to explicitly call
+`clone` on an element you want to be cloned. Copy is a special case of Clone
+where the implementation is just "copy the bits". Copy types *are* implicitly
+cloned whenever they're moved, but because of the definition of Copy this just
+means not treating the old copy as uninitialized -- a no-op.
+
+While Rust provides a `Default` trait for specifying the moral equivalent of a
+default constructor, it's incredibly rare for this trait to be used. This is
+because variables [aren't implicitly initialized][uninit]. Default is basically
+only useful for generic programming. In concrete contexts, a type will provide a
+static `new` method for any kind of "default" constructor. This has no relation
+to `new` in other languages and has no special meaning. It's just a naming
+convention.
+
+TODO: talk about "placement new"?
+
+[uninit]: uninitialized.html
diff --git a/src/doc/nomicon/src/conversions.md b/src/doc/nomicon/src/conversions.md
new file mode 100644
index 000000000..4c29fd8b2
--- /dev/null
+++ b/src/doc/nomicon/src/conversions.md
@@ -0,0 +1,33 @@
+# Type Conversions
+
+At the end of the day, everything is just a pile of bits somewhere, and type
+systems are just there to help us use those bits right. There are two common
+problems with typing bits: needing to reinterpret those exact bits as a
+different type, and needing to change the bits to have equivalent meaning for
+a different type. Because Rust encourages encoding important properties in the
+type system, these problems are incredibly pervasive. As such, Rust
+consequently gives you several ways to solve them.
+
+First we'll look at the ways that Safe Rust gives you to reinterpret values.
+The most trivial way to do this is to just destructure a value into its
+constituent parts and then build a new type out of them. e.g.
+
+```rust
+struct Foo {
+ x: u32,
+ y: u16,
+}
+
+struct Bar {
+ a: u32,
+ b: u16,
+}
+
+fn reinterpret(foo: Foo) -> Bar {
+ let Foo { x, y } = foo;
+ Bar { a: x, b: y }
+}
+```
+
+But this is, at best, annoying. For common conversions, Rust provides
+more ergonomic alternatives.
diff --git a/src/doc/nomicon/src/data.md b/src/doc/nomicon/src/data.md
new file mode 100644
index 000000000..9f80b0cef
--- /dev/null
+++ b/src/doc/nomicon/src/data.md
@@ -0,0 +1,16 @@
+# Data Representation in Rust
+
+Low-level programming cares a lot about data layout. It's a big deal. It also
+pervasively influences the rest of the language, so we're going to start by
+digging into how data is represented in Rust.
+
+This chapter is ideally in agreement with, and rendered redundant by,
+the [Type Layout section of the Reference][ref-type-layout]. When this
+book was first written, the reference was in complete disrepair, and the
+Rustonomicon was attempting to serve as a partial replacement for the reference.
+This is no longer the case, so this whole chapter can ideally be deleted.
+
+We'll keep this chapter around for a bit longer, but ideally you should be
+contributing any new facts or improvements to the Reference instead.
+
+[ref-type-layout]: ../reference/type-layout.html
diff --git a/src/doc/nomicon/src/destructors.md b/src/doc/nomicon/src/destructors.md
new file mode 100644
index 000000000..e70c5e1d4
--- /dev/null
+++ b/src/doc/nomicon/src/destructors.md
@@ -0,0 +1,177 @@
+# Destructors
+
+What the language *does* provide is full-blown automatic destructors through the
+`Drop` trait, which provides the following method:
+
+<!-- ignore: function header -->
+```rust,ignore
+fn drop(&mut self);
+```
+
+This method gives the type time to somehow finish what it was doing.
+
+**After `drop` is run, Rust will recursively try to drop all of the fields
+of `self`.**
+
+This is a convenience feature so that you don't have to write "destructor
+boilerplate" to drop children. If a struct has no special logic for being
+dropped other than dropping its children, then it means `Drop` doesn't need to
+be implemented at all!
+
+**There is no stable way to prevent this behavior in Rust 1.0.**
+
+Note that taking `&mut self` means that even if you could suppress recursive
+Drop, Rust will prevent you from e.g. moving fields out of self. For most types,
+this is totally fine.
+
+For instance, a custom implementation of `Box` might write `Drop` like this:
+
+```rust
+#![feature(ptr_internals, allocator_api)]
+
+use std::alloc::{Allocator, Global, GlobalAlloc, Layout};
+use std::mem;
+use std::ptr::{drop_in_place, NonNull, Unique};
+
+struct Box<T>{ ptr: Unique<T> }
+
+impl<T> Drop for Box<T> {
+ fn drop(&mut self) {
+ unsafe {
+ drop_in_place(self.ptr.as_ptr());
+ let c: NonNull<T> = self.ptr.into();
+ Global.deallocate(c.cast(), Layout::new::<T>())
+ }
+ }
+}
+# fn main() {}
+```
+
+and this works fine because when Rust goes to drop the `ptr` field it just sees
+a [Unique] that has no actual `Drop` implementation. Similarly nothing can
+use-after-free the `ptr` because when drop exits, it becomes inaccessible.
+
+However this wouldn't work:
+
+```rust
+#![feature(allocator_api, ptr_internals)]
+
+use std::alloc::{Allocator, Global, GlobalAlloc, Layout};
+use std::ptr::{drop_in_place, Unique, NonNull};
+use std::mem;
+
+struct Box<T>{ ptr: Unique<T> }
+
+impl<T> Drop for Box<T> {
+ fn drop(&mut self) {
+ unsafe {
+ drop_in_place(self.ptr.as_ptr());
+ let c: NonNull<T> = self.ptr.into();
+ Global.deallocate(c.cast(), Layout::new::<T>());
+ }
+ }
+}
+
+struct SuperBox<T> { my_box: Box<T> }
+
+impl<T> Drop for SuperBox<T> {
+ fn drop(&mut self) {
+ unsafe {
+ // Hyper-optimized: deallocate the box's contents for it
+ // without `drop`ing the contents
+ let c: NonNull<T> = self.my_box.ptr.into();
+ Global.deallocate(c.cast::<u8>(), Layout::new::<T>());
+ }
+ }
+}
+# fn main() {}
+```
+
+After we deallocate the `box`'s ptr in SuperBox's destructor, Rust will
+happily proceed to tell the box to Drop itself and everything will blow up with
+use-after-frees and double-frees.
+
+Note that the recursive drop behavior applies to all structs and enums
+regardless of whether they implement Drop. Therefore something like
+
+```rust
+struct Boxy<T> {
+ data1: Box<T>,
+ data2: Box<T>,
+ info: u32,
+}
+```
+
+will have its data1 and data2's fields destructors whenever it "would" be
+dropped, even though it itself doesn't implement Drop. We say that such a type
+*needs Drop*, even though it is not itself Drop.
+
+Similarly,
+
+```rust
+enum Link {
+ Next(Box<Link>),
+ None,
+}
+```
+
+will have its inner Box field dropped if and only if an instance stores the
+Next variant.
+
+In general this works really nicely because you don't need to worry about
+adding/removing drops when you refactor your data layout. Still there's
+certainly many valid use cases for needing to do trickier things with
+destructors.
+
+The classic safe solution to overriding recursive drop and allowing moving out
+of Self during `drop` is to use an Option:
+
+```rust
+#![feature(allocator_api, ptr_internals)]
+
+use std::alloc::{Allocator, GlobalAlloc, Global, Layout};
+use std::ptr::{drop_in_place, Unique, NonNull};
+use std::mem;
+
+struct Box<T>{ ptr: Unique<T> }
+
+impl<T> Drop for Box<T> {
+ fn drop(&mut self) {
+ unsafe {
+ drop_in_place(self.ptr.as_ptr());
+ let c: NonNull<T> = self.ptr.into();
+ Global.deallocate(c.cast(), Layout::new::<T>());
+ }
+ }
+}
+
+struct SuperBox<T> { my_box: Option<Box<T>> }
+
+impl<T> Drop for SuperBox<T> {
+ fn drop(&mut self) {
+ unsafe {
+ // Hyper-optimized: deallocate the box's contents for it
+ // without `drop`ing the contents. Need to set the `box`
+ // field as `None` to prevent Rust from trying to Drop it.
+ let my_box = self.my_box.take().unwrap();
+ let c: NonNull<T> = my_box.ptr.into();
+ Global.deallocate(c.cast(), Layout::new::<T>());
+ mem::forget(my_box);
+ }
+ }
+}
+# fn main() {}
+```
+
+However this has fairly odd semantics: you're saying that a field that *should*
+always be Some *may* be None, just because that happens in the destructor. Of
+course this conversely makes a lot of sense: you can call arbitrary methods on
+self during the destructor, and this should prevent you from ever doing so after
+deinitializing the field. Not that it will prevent you from producing any other
+arbitrarily invalid state in there.
+
+On balance this is an ok choice. Certainly what you should reach for by default.
+However, in the future we expect there to be a first-class way to announce that
+a field shouldn't be automatically dropped.
+
+[Unique]: phantom-data.html
diff --git a/src/doc/nomicon/src/dot-operator.md b/src/doc/nomicon/src/dot-operator.md
new file mode 100644
index 000000000..16fbf0071
--- /dev/null
+++ b/src/doc/nomicon/src/dot-operator.md
@@ -0,0 +1,131 @@
+# The Dot Operator
+
+The dot operator will perform a lot of magic to convert types.
+It will perform auto-referencing, auto-dereferencing, and coercion until types
+match.
+The detailed mechanics of method lookup are defined [here][method_lookup],
+but here is a brief overview that outlines the main steps.
+
+Suppose we have a function `foo` that has a receiver (a `self`, `&self` or
+`&mut self` parameter).
+If we call `value.foo()`, the compiler needs to determine what type `Self` is before
+it can call the correct implementation of the function.
+For this example, we will say that `value` has type `T`.
+
+We will use [fully-qualified syntax][fqs] to be more clear about exactly which
+type we are calling a function on.
+
+- First, the compiler checks if it can call `T::foo(value)` directly.
+This is called a "by value" method call.
+- If it can't call this function (for example, if the function has the wrong type
+or a trait isn't implemented for `Self`), then the compiler tries to add in an
+automatic reference.
+This means that the compiler tries `<&T>::foo(value)` and `<&mut T>::foo(value)`.
+This is called an "autoref" method call.
+- If none of these candidates worked, it dereferences `T` and tries again.
+This uses the `Deref` trait - if `T: Deref<Target = U>` then it tries again with
+type `U` instead of `T`.
+If it can't dereference `T`, it can also try _unsizing_ `T`.
+This just means that if `T` has a size parameter known at compile time, it "forgets"
+it for the purpose of resolving methods.
+For instance, this unsizing step can convert `[i32; 2]` into `[i32]` by "forgetting"
+the size of the array.
+
+Here is an example of the method lookup algorithm:
+
+```rust,ignore
+let array: Rc<Box<[T; 3]>> = ...;
+let first_entry = array[0];
+```
+
+How does the compiler actually compute `array[0]` when the array is behind so
+many indirections?
+First, `array[0]` is really just syntax sugar for the [`Index`][index] trait -
+the compiler will convert `array[0]` into `array.index(0)`.
+Now, the compiler checks to see if `array` implements `Index`, so that it can call
+the function.
+
+Then, the compiler checks if `Rc<Box<[T; 3]>>` implements `Index`, but it
+does not, and neither do `&Rc<Box<[T; 3]>>` or `&mut Rc<Box<[T; 3]>>`.
+Since none of these worked, the compiler dereferences the `Rc<Box<[T; 3]>>` into
+`Box<[T; 3]>` and tries again.
+`Box<[T; 3]>`, `&Box<[T; 3]>`, and `&mut Box<[T; 3]>` do not implement `Index`,
+so it dereferences again.
+`[T; 3]` and its autorefs also do not implement `Index`.
+It can't dereference `[T; 3]`, so the compiler unsizes it, giving `[T]`.
+Finally, `[T]` implements `Index`, so it can now call the actual `index` function.
+
+Consider the following more complicated example of the dot operator at work:
+
+```rust
+fn do_stuff<T: Clone>(value: &T) {
+ let cloned = value.clone();
+}
+```
+
+What type is `cloned`?
+First, the compiler checks if it can call by value.
+The type of `value` is `&T`, and so the `clone` function has signature
+`fn clone(&T) -> T`.
+It knows that `T: Clone`, so the compiler finds that `cloned: T`.
+
+What would happen if the `T: Clone` restriction was removed? It would not be able
+to call by value, since there is no implementation of `Clone` for `T`.
+So the compiler tries to call by autoref.
+In this case, the function has the signature `fn clone(&&T) -> &T` since
+`Self = &T`.
+The compiler sees that `&T: Clone`, and then deduces that `cloned: &T`.
+
+Here is another example where the autoref behavior is used to create some subtle
+effects:
+
+```rust
+# use std::sync::Arc;
+#
+#[derive(Clone)]
+struct Container<T>(Arc<T>);
+
+fn clone_containers<T>(foo: &Container<i32>, bar: &Container<T>) {
+ let foo_cloned = foo.clone();
+ let bar_cloned = bar.clone();
+}
+```
+
+What types are `foo_cloned` and `bar_cloned`?
+We know that `Container<i32>: Clone`, so the compiler calls `clone` by value to give
+`foo_cloned: Container<i32>`.
+However, `bar_cloned` actually has type `&Container<T>`.
+Surely this doesn't make sense - we added `#[derive(Clone)]` to `Container`, so it
+must implement `Clone`!
+Looking closer, the code generated by the `derive` macro is (roughly):
+
+```rust,ignore
+impl<T> Clone for Container<T> where T: Clone {
+ fn clone(&self) -> Self {
+ Self(Arc::clone(&self.0))
+ }
+}
+```
+
+The derived `Clone` implementation is [only defined where `T: Clone`][clone],
+so there is no implementation for `Container<T>: Clone` for a generic `T`.
+The compiler then looks to see if `&Container<T>` implements `Clone`, which it does.
+So it deduces that `clone` is called by autoref, and so `bar_cloned` has type
+`&Container<T>`.
+
+We can fix this by implementing `Clone` manually without requiring `T: Clone`:
+
+```rust,ignore
+impl<T> Clone for Container<T> {
+ fn clone(&self) -> Self {
+ Self(Arc::clone(&self.0))
+ }
+}
+```
+
+Now, the type checker deduces that `bar_cloned: Container<T>`.
+
+[fqs]: ../book/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name
+[method_lookup]: https://rustc-dev-guide.rust-lang.org/method-lookup.html
+[index]: ../std/ops/trait.Index.html
+[clone]: ../std/clone/trait.Clone.html#derivable
diff --git a/src/doc/nomicon/src/drop-flags.md b/src/doc/nomicon/src/drop-flags.md
new file mode 100644
index 000000000..6a0236a0d
--- /dev/null
+++ b/src/doc/nomicon/src/drop-flags.md
@@ -0,0 +1,83 @@
+# Drop Flags
+
+The examples in the previous section introduce an interesting problem for Rust.
+We have seen that it's possible to conditionally initialize, deinitialize, and
+reinitialize locations of memory totally safely. For Copy types, this isn't
+particularly notable since they're just a random pile of bits. However types
+with destructors are a different story: Rust needs to know whether to call a
+destructor whenever a variable is assigned to, or a variable goes out of scope.
+How can it do this with conditional initialization?
+
+Note that this is not a problem that all assignments need worry about. In
+particular, assigning through a dereference unconditionally drops, and assigning
+in a `let` unconditionally doesn't drop:
+
+```rust
+let mut x = Box::new(0); // let makes a fresh variable, so never need to drop
+let y = &mut x;
+*y = Box::new(1); // Deref assumes the referent is initialized, so always drops
+```
+
+This is only a problem when overwriting a previously initialized variable or
+one of its subfields.
+
+It turns out that Rust actually tracks whether a type should be dropped or not
+*at runtime*. As a variable becomes initialized and uninitialized, a *drop flag*
+for that variable is toggled. When a variable might need to be dropped, this
+flag is evaluated to determine if it should be dropped.
+
+Of course, it is often the case that a value's initialization state can be
+statically known at every point in the program. If this is the case, then the
+compiler can theoretically generate more efficient code! For instance, straight-
+line code has such *static drop semantics*:
+
+```rust
+let mut x = Box::new(0); // x was uninit; just overwrite.
+let mut y = x; // y was uninit; just overwrite and make x uninit.
+x = Box::new(0); // x was uninit; just overwrite.
+y = x; // y was init; Drop y, overwrite it, and make x uninit!
+ // y goes out of scope; y was init; Drop y!
+ // x goes out of scope; x was uninit; do nothing.
+```
+
+Similarly, branched code where all branches have the same behavior with respect
+to initialization has static drop semantics:
+
+```rust
+# let condition = true;
+let mut x = Box::new(0); // x was uninit; just overwrite.
+if condition {
+ drop(x) // x gets moved out; make x uninit.
+} else {
+ println!("{}", x);
+ drop(x) // x gets moved out; make x uninit.
+}
+x = Box::new(0); // x was uninit; just overwrite.
+ // x goes out of scope; x was init; Drop x!
+```
+
+However code like this *requires* runtime information to correctly Drop:
+
+```rust
+# let condition = true;
+let x;
+if condition {
+ x = Box::new(0); // x was uninit; just overwrite.
+ println!("{}", x);
+}
+ // x goes out of scope; x might be uninit;
+ // check the flag!
+```
+
+Of course, in this case it's trivial to retrieve static drop semantics:
+
+```rust
+# let condition = true;
+if condition {
+ let x = Box::new(0);
+ println!("{}", x);
+}
+```
+
+The drop flags are tracked on the stack.
+In old Rust versions, drop flags were stashed in a hidden field of types that implement `Drop`.
diff --git a/src/doc/nomicon/src/dropck.md b/src/doc/nomicon/src/dropck.md
new file mode 100644
index 000000000..75940219c
--- /dev/null
+++ b/src/doc/nomicon/src/dropck.md
@@ -0,0 +1,346 @@
+# Drop Check
+
+We have seen how lifetimes provide us some fairly simple rules for ensuring
+that we never read dangling references. However up to this point we have only ever
+interacted with the _outlives_ relationship in an inclusive manner. That is,
+when we talked about `'a: 'b`, it was ok for `'a` to live _exactly_ as long as
+`'b`. At first glance, this seems to be a meaningless distinction. Nothing ever
+gets dropped at the same time as another, right? This is why we used the
+following desugaring of `let` statements:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let x;
+let y;
+```
+
+desugaring to:
+
+<!-- ignore: desugared code -->
+```rust,ignore
+{
+ let x;
+ {
+ let y;
+ }
+}
+```
+
+There are some more complex situations which are not possible to desugar using
+scopes, but the order is still defined ‒ variables are dropped in the reverse
+order of their definition, fields of structs and tuples in order of their
+definition. There are some more details about order of drop in [RFC 1857][rfc1857].
+
+Let's do this:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let tuple = (vec![], vec![]);
+```
+
+The left vector is dropped first. But does it mean the right one strictly
+outlives it in the eyes of the borrow checker? The answer to this question is
+_no_. The borrow checker could track fields of tuples separately, but it would
+still be unable to decide what outlives what in case of vector elements, which
+are dropped manually via pure-library code the borrow checker doesn't
+understand.
+
+So why do we care? We care because if the type system isn't careful, it could
+accidentally make dangling pointers. Consider the following simple program:
+
+```rust
+struct Inspector<'a>(&'a u8);
+
+struct World<'a> {
+ inspector: Option<Inspector<'a>>,
+ days: Box<u8>,
+}
+
+fn main() {
+ let mut world = World {
+ inspector: None,
+ days: Box::new(1),
+ };
+ world.inspector = Some(Inspector(&world.days));
+}
+```
+
+This program is totally sound and compiles today. The fact that `days` does not
+strictly outlive `inspector` doesn't matter. As long as the `inspector` is
+alive, so is `days`.
+
+However if we add a destructor, the program will no longer compile!
+
+```rust,compile_fail
+struct Inspector<'a>(&'a u8);
+
+impl<'a> Drop for Inspector<'a> {
+ fn drop(&mut self) {
+ println!("I was only {} days from retirement!", self.0);
+ }
+}
+
+struct World<'a> {
+ inspector: Option<Inspector<'a>>,
+ days: Box<u8>,
+}
+
+fn main() {
+ let mut world = World {
+ inspector: None,
+ days: Box::new(1),
+ };
+ world.inspector = Some(Inspector(&world.days));
+ // Let's say `days` happens to get dropped first.
+ // Then when Inspector is dropped, it will try to read free'd memory!
+}
+```
+
+```text
+error[E0597]: `world.days` does not live long enough
+ --> src/main.rs:19:38
+ |
+19 | world.inspector = Some(Inspector(&world.days));
+ | ^^^^^^^^^^^ borrowed value does not live long enough
+...
+22 | }
+ | -
+ | |
+ | `world.days` dropped here while still borrowed
+ | borrow might be used here, when `world` is dropped and runs the destructor for type `World<'_>`
+```
+
+You can try changing the order of fields or use a tuple instead of the struct,
+it'll still not compile.
+
+Implementing `Drop` lets the `Inspector` execute some arbitrary code during its
+death. This means it can potentially observe that types that are supposed to
+live as long as it does actually were destroyed first.
+
+Interestingly, only generic types need to worry about this. If they aren't
+generic, then the only lifetimes they can harbor are `'static`, which will truly
+live _forever_. This is why this problem is referred to as _sound generic drop_.
+Sound generic drop is enforced by the _drop checker_. As of this writing, some
+of the finer details of how the drop checker (also called dropck) validates
+types is totally up in the air. However The Big Rule is the subtlety that we
+have focused on this whole section:
+
+**For a generic type to soundly implement drop, its generics arguments must
+strictly outlive it.**
+
+Obeying this rule is (usually) necessary to satisfy the borrow
+checker; obeying it is sufficient but not necessary to be
+sound. That is, if your type obeys this rule then it's definitely
+sound to drop.
+
+The reason that it is not always necessary to satisfy the above rule
+is that some Drop implementations will not access borrowed data even
+though their type gives them the capability for such access, or because we know
+the specific drop order and the borrowed data is still fine even if the borrow
+checker doesn't know that.
+
+For example, this variant of the above `Inspector` example will never
+access borrowed data:
+
+```rust,compile_fail
+struct Inspector<'a>(&'a u8, &'static str);
+
+impl<'a> Drop for Inspector<'a> {
+ fn drop(&mut self) {
+ println!("Inspector(_, {}) knows when *not* to inspect.", self.1);
+ }
+}
+
+struct World<'a> {
+ inspector: Option<Inspector<'a>>,
+ days: Box<u8>,
+}
+
+fn main() {
+ let mut world = World {
+ inspector: None,
+ days: Box::new(1),
+ };
+ world.inspector = Some(Inspector(&world.days, "gadget"));
+ // Let's say `days` happens to get dropped first.
+ // Even when Inspector is dropped, its destructor will not access the
+ // borrowed `days`.
+}
+```
+
+Likewise, this variant will also never access borrowed data:
+
+```rust,compile_fail
+struct Inspector<T>(T, &'static str);
+
+impl<T> Drop for Inspector<T> {
+ fn drop(&mut self) {
+ println!("Inspector(_, {}) knows when *not* to inspect.", self.1);
+ }
+}
+
+struct World<T> {
+ inspector: Option<Inspector<T>>,
+ days: Box<u8>,
+}
+
+fn main() {
+ let mut world = World {
+ inspector: None,
+ days: Box::new(1),
+ };
+ world.inspector = Some(Inspector(&world.days, "gadget"));
+ // Let's say `days` happens to get dropped first.
+ // Even when Inspector is dropped, its destructor will not access the
+ // borrowed `days`.
+}
+```
+
+However, _both_ of the above variants are rejected by the borrow
+checker during the analysis of `fn main`, saying that `days` does not
+live long enough.
+
+The reason is that the borrow checking analysis of `main` does not
+know about the internals of each `Inspector`'s `Drop` implementation. As
+far as the borrow checker knows while it is analyzing `main`, the body
+of an inspector's destructor might access that borrowed data.
+
+Therefore, the drop checker forces all borrowed data in a value to
+strictly outlive that value.
+
+## An Escape Hatch
+
+The precise rules that govern drop checking may be less restrictive in
+the future.
+
+The current analysis is deliberately conservative and trivial; it forces all
+borrowed data in a value to outlive that value, which is certainly sound.
+
+Future versions of the language may make the analysis more precise, to
+reduce the number of cases where sound code is rejected as unsafe.
+This would help address cases such as the two `Inspector`s above that
+know not to inspect during destruction.
+
+In the meantime, there is an unstable attribute that one can use to
+assert (unsafely) that a generic type's destructor is _guaranteed_ to
+not access any expired data, even if its type gives it the capability
+to do so.
+
+That attribute is called `may_dangle` and was introduced in [RFC 1327][rfc1327].
+To deploy it on the `Inspector` from above, we would write:
+
+```rust
+#![feature(dropck_eyepatch)]
+
+struct Inspector<'a>(&'a u8, &'static str);
+
+unsafe impl<#[may_dangle] 'a> Drop for Inspector<'a> {
+ fn drop(&mut self) {
+ println!("Inspector(_, {}) knows when *not* to inspect.", self.1);
+ }
+}
+
+struct World<'a> {
+ days: Box<u8>,
+ inspector: Option<Inspector<'a>>,
+}
+
+fn main() {
+ let mut world = World {
+ inspector: None,
+ days: Box::new(1),
+ };
+ world.inspector = Some(Inspector(&world.days, "gatget"));
+}
+```
+
+Use of this attribute requires the `Drop` impl to be marked `unsafe` because the
+compiler is not checking the implicit assertion that no potentially expired data
+(e.g. `self.0` above) is accessed.
+
+The attribute can be applied to any number of lifetime and type parameters. In
+the following example, we assert that we access no data behind a reference of
+lifetime `'b` and that the only uses of `T` will be moves or drops, but omit
+the attribute from `'a` and `U`, because we do access data with that lifetime
+and that type:
+
+```rust
+#![feature(dropck_eyepatch)]
+use std::fmt::Display;
+
+struct Inspector<'a, 'b, T, U: Display>(&'a u8, &'b u8, T, U);
+
+unsafe impl<'a, #[may_dangle] 'b, #[may_dangle] T, U: Display> Drop for Inspector<'a, 'b, T, U> {
+ fn drop(&mut self) {
+ println!("Inspector({}, _, _, {})", self.0, self.3);
+ }
+}
+```
+
+It is sometimes obvious that no such access can occur, like the case above.
+However, when dealing with a generic type parameter, such access can
+occur indirectly. Examples of such indirect access are:
+
+- invoking a callback,
+- via a trait method call.
+
+(Future changes to the language, such as impl specialization, may add
+other avenues for such indirect access.)
+
+Here is an example of invoking a callback:
+
+```rust
+struct Inspector<T>(T, &'static str, Box<for <'r> fn(&'r T) -> String>);
+
+impl<T> Drop for Inspector<T> {
+ fn drop(&mut self) {
+ // The `self.2` call could access a borrow e.g. if `T` is `&'a _`.
+ println!("Inspector({}, {}) unwittingly inspects expired data.",
+ (self.2)(&self.0), self.1);
+ }
+}
+```
+
+Here is an example of a trait method call:
+
+```rust
+use std::fmt;
+
+struct Inspector<T: fmt::Display>(T, &'static str);
+
+impl<T: fmt::Display> Drop for Inspector<T> {
+ fn drop(&mut self) {
+ // There is a hidden call to `<T as Display>::fmt` below, which
+ // could access a borrow e.g. if `T` is `&'a _`
+ println!("Inspector({}, {}) unwittingly inspects expired data.",
+ self.0, self.1);
+ }
+}
+```
+
+And of course, all of these accesses could be further hidden within
+some other method invoked by the destructor, rather than being written
+directly within it.
+
+In all of the above cases where the `&'a u8` is accessed in the
+destructor, adding the `#[may_dangle]`
+attribute makes the type vulnerable to misuse that the borrow
+checker will not catch, inviting havoc. It is better to avoid adding
+the attribute.
+
+## A related side note about drop order
+
+While the drop order of fields inside a struct is defined, relying on it is
+fragile and subtle. When the order matters, it is better to use the
+[`ManuallyDrop`] wrapper.
+
+## Is that all about drop checker?
+
+It turns out that when writing unsafe code, we generally don't need to
+worry at all about doing the right thing for the drop checker. However there
+is one special case that you need to worry about, which we will look at in
+the next section.
+
+[rfc1327]: https://github.com/rust-lang/rfcs/blob/master/text/1327-dropck-param-eyepatch.md
+[rfc1857]: https://github.com/rust-lang/rfcs/blob/master/text/1857-stabilize-drop-order.md
+[`manuallydrop`]: ../std/mem/struct.ManuallyDrop.html
diff --git a/src/doc/nomicon/src/exception-safety.md b/src/doc/nomicon/src/exception-safety.md
new file mode 100644
index 000000000..ca1a39416
--- /dev/null
+++ b/src/doc/nomicon/src/exception-safety.md
@@ -0,0 +1,210 @@
+# Exception Safety
+
+Although programs should use unwinding sparingly, there's a lot of code that
+*can* panic. If you unwrap a None, index out of bounds, or divide by 0, your
+program will panic. On debug builds, every arithmetic operation can panic
+if it overflows. Unless you are very careful and tightly control what code runs,
+pretty much everything can unwind, and you need to be ready for it.
+
+Being ready for unwinding is often referred to as *exception safety*
+in the broader programming world. In Rust, there are two levels of exception
+safety that one may concern themselves with:
+
+* In unsafe code, we *must* be exception safe to the point of not violating
+ memory safety. We'll call this *minimal* exception safety.
+
+* In safe code, it is *good* to be exception safe to the point of your program
+ doing the right thing. We'll call this *maximal* exception safety.
+
+As is the case in many places in Rust, Unsafe code must be ready to deal with
+bad Safe code when it comes to unwinding. Code that transiently creates
+unsound states must be careful that a panic does not cause that state to be
+used. Generally this means ensuring that only non-panicking code is run while
+these states exist, or making a guard that cleans up the state in the case of
+a panic. This does not necessarily mean that the state a panic witnesses is a
+fully coherent state. We need only guarantee that it's a *safe* state.
+
+Most Unsafe code is leaf-like, and therefore fairly easy to make exception-safe.
+It controls all the code that runs, and most of that code can't panic. However
+it is not uncommon for Unsafe code to work with arrays of temporarily
+uninitialized data while repeatedly invoking caller-provided code. Such code
+needs to be careful and consider exception safety.
+
+## Vec::push_all
+
+`Vec::push_all` is a temporary hack to get extending a Vec by a slice reliably
+efficient without specialization. Here's a simple implementation:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T: Clone> Vec<T> {
+ fn push_all(&mut self, to_push: &[T]) {
+ self.reserve(to_push.len());
+ unsafe {
+ // can't overflow because we just reserved this
+ self.set_len(self.len() + to_push.len());
+
+ for (i, x) in to_push.iter().enumerate() {
+ self.ptr().add(i).write(x.clone());
+ }
+ }
+ }
+}
+```
+
+We bypass `push` in order to avoid redundant capacity and `len` checks on the
+Vec that we definitely know has capacity. The logic is totally correct, except
+there's a subtle problem with our code: it's not exception-safe! `set_len`,
+`add`, and `write` are all fine; `clone` is the panic bomb we over-looked.
+
+Clone is completely out of our control, and is totally free to panic. If it
+does, our function will exit early with the length of the Vec set too large. If
+the Vec is looked at or dropped, uninitialized memory will be read!
+
+The fix in this case is fairly simple. If we want to guarantee that the values
+we *did* clone are dropped, we can set the `len` every loop iteration. If we
+just want to guarantee that uninitialized memory can't be observed, we can set
+the `len` after the loop.
+
+## BinaryHeap::sift_up
+
+Bubbling an element up a heap is a bit more complicated than extending a Vec.
+The pseudocode is as follows:
+
+```text
+bubble_up(heap, index):
+ while index != 0 && heap[index] < heap[parent(index)]:
+ heap.swap(index, parent(index))
+ index = parent(index)
+```
+
+A literal transcription of this code to Rust is totally fine, but has an annoying
+performance characteristic: the `self` element is swapped over and over again
+uselessly. We would rather have the following:
+
+```text
+bubble_up(heap, index):
+ let elem = heap[index]
+ while index != 0 && elem < heap[parent(index)]:
+ heap[index] = heap[parent(index)]
+ index = parent(index)
+ heap[index] = elem
+```
+
+This code ensures that each element is copied as little as possible (it is in
+fact necessary that elem be copied twice in general). However it now exposes
+some exception safety trouble! At all times, there exists two copies of one
+value. If we panic in this function something will be double-dropped.
+Unfortunately, we also don't have full control of the code: that comparison is
+user-defined!
+
+Unlike Vec, the fix isn't as easy here. One option is to break the user-defined
+code and the unsafe code into two separate phases:
+
+```text
+bubble_up(heap, index):
+ let end_index = index;
+ while end_index != 0 && heap[end_index] < heap[parent(end_index)]:
+ end_index = parent(end_index)
+
+ let elem = heap[index]
+ while index != end_index:
+ heap[index] = heap[parent(index)]
+ index = parent(index)
+ heap[index] = elem
+```
+
+If the user-defined code blows up, that's no problem anymore, because we haven't
+actually touched the state of the heap yet. Once we do start messing with the
+heap, we're working with only data and functions that we trust, so there's no
+concern of panics.
+
+Perhaps you're not happy with this design. Surely it's cheating! And we have
+to do the complex heap traversal *twice*! Alright, let's bite the bullet. Let's
+intermix untrusted and unsafe code *for reals*.
+
+If Rust had `try` and `finally` like in Java, we could do the following:
+
+```text
+bubble_up(heap, index):
+ let elem = heap[index]
+ try:
+        while index != 0 && elem < heap[parent(index)]:
+ heap[index] = heap[parent(index)]
+ index = parent(index)
+ finally:
+ heap[index] = elem
+```
+
+The basic idea is simple: if the comparison panics, we just toss the loose
+element in the logically uninitialized index and bail out. Anyone who observes
+the heap will see a potentially *inconsistent* heap, but at least it won't
+cause any double-drops! If the algorithm terminates normally, then this
+operation happens to coincide precisely with how we finish up regardless.
+
+Sadly, Rust has no such construct, so we're going to need to roll our own! The
+way to do this is to store the algorithm's state in a separate struct with a
+destructor for the "finally" logic. Whether we panic or not, that destructor
+will run and clean up after us.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+struct Hole<'a, T: 'a> {
+ data: &'a mut [T],
+ /// `elt` is always `Some` from new until drop.
+ elt: Option<T>,
+ pos: usize,
+}
+
+impl<'a, T> Hole<'a, T> {
+ fn new(data: &'a mut [T], pos: usize) -> Self {
+ unsafe {
+ let elt = ptr::read(&data[pos]);
+ Hole {
+ data: data,
+ elt: Some(elt),
+ pos: pos,
+ }
+ }
+ }
+
+ fn pos(&self) -> usize { self.pos }
+
+ fn removed(&self) -> &T { self.elt.as_ref().unwrap() }
+
+ unsafe fn get(&self, index: usize) -> &T { &self.data[index] }
+
+ unsafe fn move_to(&mut self, index: usize) {
+ let index_ptr: *const _ = &self.data[index];
+ let hole_ptr = &mut self.data[self.pos];
+ ptr::copy_nonoverlapping(index_ptr, hole_ptr, 1);
+ self.pos = index;
+ }
+}
+
+impl<'a, T> Drop for Hole<'a, T> {
+ fn drop(&mut self) {
+ // fill the hole again
+ unsafe {
+ let pos = self.pos;
+ ptr::write(&mut self.data[pos], self.elt.take().unwrap());
+ }
+ }
+}
+
+impl<T: Ord> BinaryHeap<T> {
+ fn sift_up(&mut self, pos: usize) {
+ unsafe {
+ // Take out the value at `pos` and create a hole.
+ let mut hole = Hole::new(&mut self.data, pos);
+
+ while hole.pos() != 0 {
+ let parent = parent(hole.pos());
+ if hole.removed() <= hole.get(parent) { break }
+ hole.move_to(parent);
+ }
+ // Hole will be unconditionally filled here; panic or not!
+ }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/exotic-sizes.md b/src/doc/nomicon/src/exotic-sizes.md
new file mode 100644
index 000000000..c4a6d2401
--- /dev/null
+++ b/src/doc/nomicon/src/exotic-sizes.md
@@ -0,0 +1,181 @@
+# Exotically Sized Types
+
+Most of the time, we expect types to have a statically known and positive size.
+This isn't always the case in Rust.
+
+## Dynamically Sized Types (DSTs)
+
+Rust supports Dynamically Sized Types (DSTs): types without a statically
+known size or alignment. On the surface, this is a bit nonsensical: Rust *must*
+know the size and alignment of something in order to correctly work with it! In
+this regard, DSTs are not normal types. Because they lack a statically known
+size, these types can only exist behind a pointer. Any pointer to a
+DST consequently becomes a *wide* pointer consisting of the pointer and the
+information that "completes" them (more on this below).
+
+There are two major DSTs exposed by the language:
+
+* trait objects: `dyn MyTrait`
+* slices: [`[T]`][slice], [`str`], and others
+
+A trait object represents some type that implements the traits it specifies.
+The exact original type is *erased* in favor of runtime reflection
+with a vtable containing all the information necessary to use the type.
+The information that completes a trait object pointer is the vtable pointer.
+The runtime size of the pointee can be dynamically requested from the vtable.
+
+A slice is simply a view into some contiguous storage -- typically an array or
+`Vec`. The information that completes a slice pointer is just the number of elements
+it points to. The runtime size of the pointee is just the statically known size
+of an element multiplied by the number of elements.
+
+Structs can actually store a single DST directly as their last field, but this
+makes them a DST as well:
+
+```rust
+// Can't be stored on the stack directly
+struct MySuperSlice {
+ info: u32,
+ data: [u8],
+}
+```
+
+Although such a type is largely useless without a way to construct it. Currently the
+only properly supported way to create a custom DST is by making your type generic
+and performing an *unsizing coercion*:
+
+```rust
+struct MySuperSliceable<T: ?Sized> {
+ info: u32,
+ data: T,
+}
+
+fn main() {
+ let sized: MySuperSliceable<[u8; 8]> = MySuperSliceable {
+ info: 17,
+ data: [0; 8],
+ };
+
+ let dynamic: &MySuperSliceable<[u8]> = &sized;
+
+ // prints: "17 [0, 0, 0, 0, 0, 0, 0, 0]"
+ println!("{} {:?}", dynamic.info, &dynamic.data);
+}
+```
+
+(Yes, custom DSTs are a largely half-baked feature for now.)
+
+## Zero Sized Types (ZSTs)
+
+Rust also allows types to be specified that occupy no space:
+
+```rust
+struct Nothing; // No fields = no size
+
+// All fields have no size = no size
+struct LotsOfNothing {
+ foo: Nothing,
+ qux: (), // empty tuple has no size
+ baz: [u8; 0], // empty array has no size
+}
+```
+
+On their own, Zero Sized Types (ZSTs) are, for obvious reasons, pretty useless.
+However as with many curious layout choices in Rust, their potential is realized
+in a generic context: Rust largely understands that any operation that produces
+or stores a ZST can be reduced to a no-op. First off, storing it doesn't even
+make sense -- it doesn't occupy any space. Also there's only one value of that
+type, so anything that loads it can just produce it from the aether -- which is
+also a no-op since it doesn't occupy any space.
+
+One of the most extreme examples of this is Sets and Maps. Given a
+`Map<Key, Value>`, it is common to implement a `Set<Key>` as just a thin wrapper
+around `Map<Key, UselessJunk>`. In many languages, this would necessitate
+allocating space for UselessJunk and doing work to store and load UselessJunk
+only to discard it. Proving this unnecessary would be a difficult analysis for
+the compiler.
+
+However in Rust, we can just say that `Set<Key> = Map<Key, ()>`. Now Rust
+statically knows that every load and store is useless, and no allocation has any
+size. The result is that the monomorphized code is basically a custom
+implementation of a HashSet with none of the overhead that HashMap would have to
+support values.
+
+Safe code need not worry about ZSTs, but *unsafe* code must be careful about the
+consequence of types with no size. In particular, pointer offsets are no-ops,
+and allocators typically [require a non-zero size][alloc].
+
+Note that references to ZSTs (including empty slices), just like all other
+references, must be non-null and suitably aligned. Dereferencing a null or
+unaligned pointer to a ZST is [undefined behavior][ub], just like for any other
+type.
+
+[alloc]: ../std/alloc/trait.GlobalAlloc.html#tymethod.alloc
+[ub]: what-unsafe-does.html
+
+## Empty Types
+
+Rust also enables types to be declared that *cannot even be instantiated*. These
+types can only be talked about at the type level, and never at the value level.
+Empty types can be declared by specifying an enum with no variants:
+
+```rust
+enum Void {} // No variants = EMPTY
+```
+
+Empty types are even more marginal than ZSTs. The primary motivating example for
+an empty type is type-level unreachability. For instance, suppose an API needs to
+return a Result in general, but a specific case actually is infallible. It's
+actually possible to communicate this at the type level by returning a
+`Result<T, Void>`. Consumers of the API can confidently unwrap such a Result
+knowing that it's *statically impossible* for this value to be an `Err`, as
+this would require providing a value of type `Void`.
+
+In principle, Rust can do some interesting analyses and optimizations based
+on this fact. For instance, `Result<T, Void>` is represented as just `T`,
+because the `Err` case doesn't actually exist (strictly speaking, this is only
+an optimization that is not guaranteed, so for example transmuting one into the
+other is still Undefined Behavior).
+
+The following *could* also compile:
+
+```rust,compile_fail
+enum Void {}
+
+let res: Result<u32, Void> = Ok(0);
+
+// Err doesn't exist anymore, so Ok is actually irrefutable.
+let Ok(num) = res;
+```
+
+But this trick doesn't work yet.
+
+One final subtle detail about empty types is that raw pointers to them are
+actually valid to construct, but dereferencing them is Undefined Behavior
+because that wouldn't make sense.
+
+We recommend against modelling C's `void*` type with `*const Void`.
+A lot of people started doing that but quickly ran into trouble because
+Rust doesn't really have any safety guards against trying to instantiate
+empty types with unsafe code, and if you do it, it's Undefined Behavior.
+This was especially problematic because developers had a habit of converting
+raw pointers to references and `&Void` is *also* Undefined Behavior to
+construct.
+
+`*const ()` (or equivalent) works reasonably well for `void*`, and can be made
+into a reference without any safety problems. It still doesn't prevent you from
+trying to read or write values, but at least it compiles to a no-op instead
+of Undefined Behavior.
+
+## Extern Types
+
+There is [an accepted RFC][extern-types] to add proper types with an unknown size,
+called *extern types*, which would let Rust developers model things like C's `void*`
+and other "declared but never defined" types more accurately. However as of
+Rust 2018, [the feature is stuck in limbo over how `size_of_val::<MyExternType>()`
+should behave][extern-types-issue].
+
+[extern-types]: https://github.com/rust-lang/rfcs/blob/master/text/1861-extern-types.md
+[extern-types-issue]: https://github.com/rust-lang/rust/issues/43467
+[`str`]: ../std/primitive.str.html
+[slice]: ../std/primitive.slice.html
diff --git a/src/doc/nomicon/src/ffi.md b/src/doc/nomicon/src/ffi.md
new file mode 100644
index 000000000..9b0ff98e6
--- /dev/null
+++ b/src/doc/nomicon/src/ffi.md
@@ -0,0 +1,927 @@
+# Foreign Function Interface
+
+## Introduction
+
+This guide will use the [snappy](https://github.com/google/snappy)
+compression/decompression library as an introduction to writing bindings for
+foreign code. Rust is currently unable to call directly into a C++ library, but
+snappy includes a C interface (documented in
+[`snappy-c.h`](https://github.com/google/snappy/blob/master/snappy-c.h)).
+
+## A note about libc
+
+Many of these examples use [the `libc` crate][libc], which provides various
+type definitions for C types, among other things. If you’re trying these
+examples yourself, you’ll need to add `libc` to your `Cargo.toml`:
+
+```toml
+[dependencies]
+libc = "0.2.0"
+```
+
+[libc]: https://crates.io/crates/libc
+
+## Calling foreign functions
+
+The following is a minimal example of calling a foreign function which will
+compile if snappy is installed:
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+use libc::size_t;
+
+#[link(name = "snappy")]
+extern {
+ fn snappy_max_compressed_length(source_length: size_t) -> size_t;
+}
+
+fn main() {
+ let x = unsafe { snappy_max_compressed_length(100) };
+ println!("max compressed length of a 100 byte buffer: {}", x);
+}
+```
+
+The `extern` block is a list of function signatures in a foreign library, in
+this case with the platform's C ABI. The `#[link(...)]` attribute is used to
+instruct the linker to link against the snappy library so the symbols are
+resolved.
+
+Foreign functions are assumed to be unsafe so calls to them need to be wrapped
+with `unsafe {}` as a promise to the compiler that everything contained within
+truly is safe. C libraries often expose interfaces that aren't thread-safe, and
+almost any function that takes a pointer argument isn't valid for all possible
+inputs since the pointer could be dangling, and raw pointers fall outside of
+Rust's safe memory model.
+
+When declaring the argument types to a foreign function, the Rust compiler
+cannot check if the declaration is correct, so specifying it correctly is part
+of keeping the binding correct at runtime.
+
+The `extern` block can be extended to cover the entire snappy API:
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+use libc::{c_int, size_t};
+
+#[link(name = "snappy")]
+extern {
+ fn snappy_compress(input: *const u8,
+ input_length: size_t,
+ compressed: *mut u8,
+ compressed_length: *mut size_t) -> c_int;
+ fn snappy_uncompress(compressed: *const u8,
+ compressed_length: size_t,
+ uncompressed: *mut u8,
+ uncompressed_length: *mut size_t) -> c_int;
+ fn snappy_max_compressed_length(source_length: size_t) -> size_t;
+ fn snappy_uncompressed_length(compressed: *const u8,
+ compressed_length: size_t,
+ result: *mut size_t) -> c_int;
+ fn snappy_validate_compressed_buffer(compressed: *const u8,
+ compressed_length: size_t) -> c_int;
+}
+# fn main() {}
+```
+
+## Creating a safe interface
+
+The raw C API needs to be wrapped to provide memory safety and make use of higher-level concepts
+like vectors. A library can choose to expose only the safe, high-level interface and hide the unsafe
+internal details.
+
+Wrapping the functions which expect buffers involves using the `slice::raw` module to manipulate Rust
+vectors as pointers to memory. Rust's vectors are guaranteed to be a contiguous block of memory. The
+length is the number of elements currently contained, and the capacity is the total size in elements of
+the allocated memory. The length is less than or equal to the capacity.
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+# use libc::{c_int, size_t};
+# unsafe fn snappy_validate_compressed_buffer(_: *const u8, _: size_t) -> c_int { 0 }
+# fn main() {}
+pub fn validate_compressed_buffer(src: &[u8]) -> bool {
+ unsafe {
+ snappy_validate_compressed_buffer(src.as_ptr(), src.len() as size_t) == 0
+ }
+}
+```
+
+The `validate_compressed_buffer` wrapper above makes use of an `unsafe` block, but it makes the
+guarantee that calling it is safe for all inputs by leaving off `unsafe` from the function
+signature.
+
+The `snappy_compress` and `snappy_uncompress` functions are more complex, since a buffer has to be
+allocated to hold the output too.
+
+The `snappy_max_compressed_length` function can be used to allocate a vector with the maximum
+required capacity to hold the compressed output. The vector can then be passed to the
+`snappy_compress` function as an output parameter. An output parameter is also passed to retrieve
+the true length after compression for setting the length.
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+# use libc::{size_t, c_int};
+# unsafe fn snappy_compress(a: *const u8, b: size_t, c: *mut u8,
+# d: *mut size_t) -> c_int { 0 }
+# unsafe fn snappy_max_compressed_length(a: size_t) -> size_t { a }
+# fn main() {}
+pub fn compress(src: &[u8]) -> Vec<u8> {
+ unsafe {
+ let srclen = src.len() as size_t;
+ let psrc = src.as_ptr();
+
+ let mut dstlen = snappy_max_compressed_length(srclen);
+ let mut dst = Vec::with_capacity(dstlen as usize);
+ let pdst = dst.as_mut_ptr();
+
+ snappy_compress(psrc, srclen, pdst, &mut dstlen);
+ dst.set_len(dstlen as usize);
+ dst
+ }
+}
+```
+
+Decompression is similar, because snappy stores the uncompressed size as part of the compression
+format and `snappy_uncompressed_length` will retrieve the exact buffer size required.
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+# use libc::{size_t, c_int};
+# unsafe fn snappy_uncompress(compressed: *const u8,
+# compressed_length: size_t,
+# uncompressed: *mut u8,
+# uncompressed_length: *mut size_t) -> c_int { 0 }
+# unsafe fn snappy_uncompressed_length(compressed: *const u8,
+# compressed_length: size_t,
+# result: *mut size_t) -> c_int { 0 }
+# fn main() {}
+pub fn uncompress(src: &[u8]) -> Option<Vec<u8>> {
+ unsafe {
+ let srclen = src.len() as size_t;
+ let psrc = src.as_ptr();
+
+ let mut dstlen: size_t = 0;
+ snappy_uncompressed_length(psrc, srclen, &mut dstlen);
+
+ let mut dst = Vec::with_capacity(dstlen as usize);
+ let pdst = dst.as_mut_ptr();
+
+ if snappy_uncompress(psrc, srclen, pdst, &mut dstlen) == 0 {
+ dst.set_len(dstlen as usize);
+ Some(dst)
+ } else {
+ None // SNAPPY_INVALID_INPUT
+ }
+ }
+}
+```
+
+Then, we can add some tests to show how to use them.
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+# use libc::{c_int, size_t};
+# unsafe fn snappy_compress(input: *const u8,
+# input_length: size_t,
+# compressed: *mut u8,
+# compressed_length: *mut size_t)
+# -> c_int { 0 }
+# unsafe fn snappy_uncompress(compressed: *const u8,
+# compressed_length: size_t,
+# uncompressed: *mut u8,
+# uncompressed_length: *mut size_t)
+# -> c_int { 0 }
+# unsafe fn snappy_max_compressed_length(source_length: size_t) -> size_t { 0 }
+# unsafe fn snappy_uncompressed_length(compressed: *const u8,
+# compressed_length: size_t,
+# result: *mut size_t)
+# -> c_int { 0 }
+# unsafe fn snappy_validate_compressed_buffer(compressed: *const u8,
+# compressed_length: size_t)
+# -> c_int { 0 }
+# fn main() { }
+#
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn valid() {
+ let d = vec![0xde, 0xad, 0xd0, 0x0d];
+ let c: &[u8] = &compress(&d);
+ assert!(validate_compressed_buffer(c));
+ assert!(uncompress(c) == Some(d));
+ }
+
+ #[test]
+ fn invalid() {
+ let d = vec![0, 0, 0, 0];
+ assert!(!validate_compressed_buffer(&d));
+ assert!(uncompress(&d).is_none());
+ }
+
+ #[test]
+ fn empty() {
+ let d = vec![];
+ assert!(!validate_compressed_buffer(&d));
+ assert!(uncompress(&d).is_none());
+ let c = compress(&d);
+ assert!(validate_compressed_buffer(&c));
+ assert!(uncompress(&c) == Some(d));
+ }
+}
+```
+
+## Destructors
+
+Foreign libraries often hand off ownership of resources to the calling code.
+When this occurs, we must use Rust's destructors to provide safety and guarantee
+the release of these resources (especially in the case of panic).
+
+For more about destructors, see the [Drop trait](../std/ops/trait.Drop.html).
+
+## Calling Rust code from C
+
+You may wish to compile Rust code in a way so that it can be called from C.
+This is fairly easy, but requires a few things.
+
+### Rust side
+
+First, we assume you have a lib crate named as `rust_from_c`.
+`lib.rs` should have Rust code as following:
+
+```rust
+#[no_mangle]
+pub extern "C" fn hello_from_rust() {
+ println!("Hello from Rust!");
+}
+# fn main() {}
+```
+
+The `extern "C"` makes this function adhere to the C calling convention, as discussed above in "[Foreign Calling Conventions]".
+The `no_mangle` attribute turns off Rust's name mangling, so that it has a well defined symbol to link to.
+
+Then, to compile Rust code as a shared library that can be called from C, add the following to your `Cargo.toml`:
+
+```toml
+[lib]
+crate-type = ["cdylib"]
+```
+
+(NOTE: We could also use the `staticlib` crate type but it needs to tweak some linking flags.)
+
+Run `cargo build` and you're ready to go on the Rust side.
+
+[Foreign Calling Conventions]: ffi.md#foreign-calling-conventions
+
+### C side
+
+We'll create a C file to call the `hello_from_rust` function and compile it by `gcc`.
+
+C file should look like:
+
+```c
+extern void hello_from_rust();
+
+int main(void) {
+ hello_from_rust();
+ return 0;
+}
+```
+
+We name the file as `call_rust.c` and place it on the crate root.
+Run the following to compile:
+
+```sh
+gcc call_rust.c -o call_rust -lrust_from_c -L./target/debug
+```
+
+`-l` and `-L` tell gcc to find our Rust library.
+
+Finally, we can call Rust code from C with `LD_LIBRARY_PATH` specified:
+
+```sh
+$ LD_LIBRARY_PATH=./target/debug ./call_rust
+Hello from Rust!
+```
+
+That's it!
+For more realistic example, check the [`cbindgen`].
+
+[`cbindgen`]: https://github.com/eqrion/cbindgen
+
+## Callbacks from C code to Rust functions
+
+Some external libraries require the usage of callbacks to report back their
+current state or intermediate data to the caller.
+It is possible to pass functions defined in Rust to an external library.
+The requirement for this is that the callback function is marked as `extern`
+with the correct calling convention to make it callable from C code.
+
+The callback function can then be sent through a registration call
+to the C library and afterwards be invoked from there.
+
+A basic example is:
+
+Rust code:
+
+```rust,no_run
+extern fn callback(a: i32) {
+ println!("I'm called from C with value {0}", a);
+}
+
+#[link(name = "extlib")]
+extern {
+ fn register_callback(cb: extern fn(i32)) -> i32;
+ fn trigger_callback();
+}
+
+fn main() {
+ unsafe {
+ register_callback(callback);
+ trigger_callback(); // Triggers the callback.
+ }
+}
+```
+
+C code:
+
+```c
+typedef void (*rust_callback)(int32_t);
+rust_callback cb;
+
+int32_t register_callback(rust_callback callback) {
+ cb = callback;
+ return 1;
+}
+
+void trigger_callback() {
+ cb(7); // Will call callback(7) in Rust.
+}
+```
+
+In this example Rust's `main()` will call `trigger_callback()` in C,
+which would, in turn, call back to `callback()` in Rust.
+
+## Targeting callbacks to Rust objects
+
+The former example showed how a global function can be called from C code.
+However it is often desired that the callback is targeted to a special
+Rust object. This could be the object that represents the wrapper for the
+respective C object.
+
+This can be achieved by passing a raw pointer to the object down to the
+C library. The C library can then include the pointer to the Rust object in
+the notification. This will allow the callback to unsafely access the
+referenced Rust object.
+
+Rust code:
+
+```rust,no_run
+struct RustObject {
+ a: i32,
+ // Other members...
+}
+
+extern "C" fn callback(target: *mut RustObject, a: i32) {
+ println!("I'm called from C with value {0}", a);
+ unsafe {
+ // Update the value in RustObject with the value received from the callback:
+ (*target).a = a;
+ }
+}
+
+#[link(name = "extlib")]
+extern {
+ fn register_callback(target: *mut RustObject,
+ cb: extern fn(*mut RustObject, i32)) -> i32;
+ fn trigger_callback();
+}
+
+fn main() {
+ // Create the object that will be referenced in the callback:
+ let mut rust_object = Box::new(RustObject { a: 5 });
+
+ unsafe {
+ register_callback(&mut *rust_object, callback);
+ trigger_callback();
+ }
+}
+```
+
+C code:
+
+```c
+typedef void (*rust_callback)(void*, int32_t);
+void* cb_target;
+rust_callback cb;
+
+int32_t register_callback(void* callback_target, rust_callback callback) {
+ cb_target = callback_target;
+ cb = callback;
+ return 1;
+}
+
+void trigger_callback() {
+ cb(cb_target, 7); // Will call callback(&rustObject, 7) in Rust.
+}
+```
+
+## Asynchronous callbacks
+
+In the previously given examples the callbacks are invoked as a direct reaction
+to a function call to the external C library.
+The control over the current thread is switched from Rust to C to Rust for the
+execution of the callback, but in the end the callback is executed on the
+same thread that called the function which triggered the callback.
+
+Things get more complicated when the external library spawns its own threads
+and invokes callbacks from there.
+In these cases access to Rust data structures inside the callbacks is
+especially unsafe and proper synchronization mechanisms must be used.
+Besides classical synchronization mechanisms like mutexes, one possibility in
+Rust is to use channels (in `std::sync::mpsc`) to forward data from the C
+thread that invoked the callback into a Rust thread.
+
+If an asynchronous callback targets a special object in the Rust address space
+it is also absolutely necessary that no more callbacks are performed by the
+C library after the respective Rust object gets destroyed.
+This can be achieved by unregistering the callback in the object's
+destructor and designing the library in a way that guarantees that no
+callback will be performed after deregistration.
+
+## Linking
+
+The `link` attribute on `extern` blocks provides the basic building block for
+instructing rustc how it will link to native libraries. There are two accepted
+forms of the link attribute today:
+
+* `#[link(name = "foo")]`
+* `#[link(name = "foo", kind = "bar")]`
+
+In both of these cases, `foo` is the name of the native library that we're
+linking to, and in the second case `bar` is the type of native library that the
+compiler is linking to. There are currently three known types of native
+libraries:
+
+* Dynamic - `#[link(name = "readline")]`
+* Static - `#[link(name = "my_build_dependency", kind = "static")]`
+* Frameworks - `#[link(name = "CoreFoundation", kind = "framework")]`
+
+Note that frameworks are only available on macOS targets.
+
+The different `kind` values are meant to differentiate how the native library
+participates in linkage. From a linkage perspective, the Rust compiler creates
+two flavors of artifacts: partial (rlib/staticlib) and final (dylib/binary).
+Native dynamic library and framework dependencies are propagated to the final
+artifact boundary, while static library dependencies are not propagated at
+all, because the static libraries are integrated directly into the subsequent
+artifact.
+
+A few examples of how this model can be used are:
+
+* A native build dependency. Sometimes some C/C++ glue is needed when writing
+ some Rust code, but distribution of the C/C++ code in a library format is
+ a burden. In this case, the code will be archived into `libfoo.a` and then the
+ Rust crate would declare a dependency via `#[link(name = "foo", kind =
+ "static")]`.
+
+ Regardless of the flavor of output for the crate, the native static library
+ will be included in the output, meaning that distribution of the native static
+ library is not necessary.
+
+* A normal dynamic dependency. Common system libraries (like `readline`) are
+ available on a large number of systems, and often a static copy of these
+ libraries cannot be found. When this dependency is included in a Rust crate,
+ partial targets (like rlibs) will not link to the library, but when the rlib
+ is included in a final target (like a binary), the native library will be
+ linked in.
+
+On macOS, frameworks behave with the same semantics as a dynamic library.
+
+## Unsafe blocks
+
+Some operations, like dereferencing raw pointers or calling functions that have been marked
+unsafe are only allowed inside unsafe blocks. Unsafe blocks isolate unsafety and are a promise to
+the compiler that the unsafety does not leak out of the block.
+
+Unsafe functions, on the other hand, advertise it to the world. An unsafe function is written like
+this:
+
+```rust
+unsafe fn kaboom(ptr: *const i32) -> i32 { *ptr }
+```
+
+This function can only be called from an `unsafe` block or another `unsafe` function.
+
+## Accessing foreign globals
+
+Foreign APIs often export a global variable which could do something like track
+global state. In order to access these variables, you declare them in `extern`
+blocks with the `static` keyword:
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+#[link(name = "readline")]
+extern {
+ static rl_readline_version: libc::c_int;
+}
+
+fn main() {
+ println!("You have readline version {} installed.",
+ unsafe { rl_readline_version as i32 });
+}
+```
+
+Alternatively, you may need to alter global state provided by a foreign
+interface. To do this, statics can be declared with `mut` so we can mutate
+them.
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+use std::ffi::CString;
+use std::ptr;
+
+#[link(name = "readline")]
+extern {
+ static mut rl_prompt: *const libc::c_char;
+}
+
+fn main() {
+ let prompt = CString::new("[my-awesome-shell] $").unwrap();
+ unsafe {
+ rl_prompt = prompt.as_ptr();
+
+ println!("{:?}", rl_prompt);
+
+ rl_prompt = ptr::null();
+ }
+}
+```
+
+Note that all interaction with a `static mut` is unsafe, both reading and
+writing. Dealing with global mutable state requires a great deal of care.
+
+## Foreign calling conventions
+
+Most foreign code exposes a C ABI, and Rust uses the platform's C calling convention by default when
+calling foreign functions. Some foreign functions, most notably the Windows API, use other calling
+conventions. Rust provides a way to tell the compiler which convention to use:
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+#[cfg(all(target_os = "win32", target_arch = "x86"))]
+#[link(name = "kernel32")]
+#[allow(non_snake_case)]
+extern "stdcall" {
+ fn SetEnvironmentVariableA(n: *const u8, v: *const u8) -> libc::c_int;
+}
+# fn main() { }
+```
+
+This applies to the entire `extern` block. The list of supported ABI constraints
+are:
+
+* `stdcall`
+* `aapcs`
+* `cdecl`
+* `fastcall`
+* `vectorcall`
+This is currently hidden behind the `abi_vectorcall` gate and is subject to change.
+* `Rust`
+* `rust-intrinsic`
+* `system`
+* `C`
+* `win64`
+* `sysv64`
+
+Most of the abis in this list are self-explanatory, but the `system` abi may
+seem a little odd. This constraint selects whatever the appropriate ABI is for
+interoperating with the target's libraries. For example, on win32 with a x86
+architecture, this means that the abi used would be `stdcall`. On x86_64,
+however, windows uses the `C` calling convention, so `C` would be used. This
+means that in our previous example, we could have used `extern "system" { ... }`
+to define a block for all windows systems, not only x86 ones.
+
+## Interoperability with foreign code
+
+Rust guarantees that the layout of a `struct` is compatible with the platform's
+representation in C only if the `#[repr(C)]` attribute is applied to it.
+`#[repr(C, packed)]` can be used to lay out struct members without padding.
+`#[repr(C)]` can also be applied to an enum.
+
+Rust's owned boxes (`Box<T>`) use non-nullable pointers as handles which point
+to the contained object. However, they should not be manually created because
+they are managed by internal allocators. References can safely be assumed to be
+non-nullable pointers directly to the type. However, breaking the borrow
+checking or mutability rules is not guaranteed to be safe, so prefer using raw
+pointers (`*`) if that's needed because the compiler can't make as many
+assumptions about them.
+
+Vectors and strings share the same basic memory layout, and utilities are
+available in the `vec` and `str` modules for working with C APIs. However,
+strings are not terminated with `\0`. If you need a NUL-terminated string for
+interoperability with C, you should use the `CString` type in the `std::ffi`
+module.
+
+The [`libc` crate on crates.io][libc] includes type aliases and function
+definitions for the C standard library in the `libc` module, and Rust links
+against `libc` and `libm` by default.
+
+## Variadic functions
+
+In C, functions can be 'variadic', meaning they accept a variable number of arguments. This can
+be achieved in Rust by specifying `...` within the argument list of a foreign function declaration:
+
+```no_run
+extern {
+ fn foo(x: i32, ...);
+}
+
+fn main() {
+ unsafe {
+ foo(10, 20, 30, 40, 50);
+ }
+}
+```
+
+Normal Rust functions can *not* be variadic:
+
+```rust,compile_fail
+// This will not compile
+
+fn foo(x: i32, ...) {}
+```
+
+## The "nullable pointer optimization"
+
+Certain Rust types are defined to never be `null`. This includes references (`&T`,
+`&mut T`), boxes (`Box<T>`), and function pointers (`extern "abi" fn()`). When
+interfacing with C, pointers that might be `null` are often used, which would seem to
+require some messy `transmute`s and/or unsafe code to handle conversions to/from Rust types.
+However, the language provides a workaround.
+
+As a special case, an `enum` is eligible for the "nullable pointer optimization" if it contains
+exactly two variants, one of which contains no data and the other contains a field of one of the
+non-nullable types listed above. This means no extra space is required for a discriminant; rather,
+the empty variant is represented by putting a `null` value into the non-nullable field. This is
+called an "optimization", but unlike other optimizations it is guaranteed to apply to eligible
+types.
+
+The most common type that takes advantage of the nullable pointer optimization is `Option<T>`,
+where `None` corresponds to `null`. So `Option<extern "C" fn(c_int) -> c_int>` is a correct way
+to represent a nullable function pointer using the C ABI (corresponding to the C type
+`int (*)(int)`).
+
+Here is a contrived example. Let's say some C library has a facility for registering a
+callback, which gets called in certain situations. The callback is passed a function pointer
+and an integer and it is supposed to run the function with the integer as a parameter. So
+we have function pointers flying across the FFI boundary in both directions.
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+use libc::c_int;
+
+# #[cfg(hidden)]
+extern "C" {
+ /// Registers the callback.
+ fn register(cb: Option<extern "C" fn(Option<extern "C" fn(c_int) -> c_int>, c_int) -> c_int>);
+}
+# unsafe fn register(_: Option<extern "C" fn(Option<extern "C" fn(c_int) -> c_int>,
+# c_int) -> c_int>)
+# {}
+
+/// This fairly useless function receives a function pointer and an integer
+/// from C, and returns the result of calling the function with the integer.
+/// In case no function is provided, it squares the integer by default.
+extern "C" fn apply(process: Option<extern "C" fn(c_int) -> c_int>, int: c_int) -> c_int {
+ match process {
+ Some(f) => f(int),
+ None => int * int
+ }
+}
+
+fn main() {
+ unsafe {
+ register(Some(apply));
+ }
+}
+```
+
+And the code on the C side looks like this:
+
+```c
+void register(int (*f)(int (*)(int), int)) {
+ ...
+}
+```
+
+No `transmute` required!
+
+## FFI and unwinding
+
+It’s important to be mindful of unwinding when working with FFI. Each
+non-`Rust` ABI comes in two variants, one with `-unwind` suffix and one without. If
+you expect Rust `panic`s or foreign (e.g. C++) exceptions to cross an FFI
+boundary, that boundary must use the appropriate `-unwind` ABI string (note
+that compiling with `panic=abort` will still cause `panic!` to immediately
+abort the process, regardless of which ABI is specified by the function that
+`panic`s).
+
+Conversely, if you do not expect unwinding to cross an ABI boundary, use one of
+the non-`unwind` ABI strings (other than `Rust`, which always permits
+unwinding). If an unwinding operation does encounter an ABI boundary that is
+not permitted to unwind, the behavior depends on the source of the unwinding
+(Rust `panic` or a foreign exception):
+
+* `panic` will cause the process to safely abort.
+* A foreign exception entering Rust will cause undefined behavior.
+
+Note that the interaction of `catch_unwind` with foreign exceptions **is
+undefined**, as is the interaction of `panic` with foreign exception-catching
+mechanisms (notably C++'s `try`/`catch`).
+
+### Rust `panic` with `"C-unwind"`
+
+<!-- ignore: using unstable feature -->
+```rust,ignore
+#[no_mangle]
+extern "C-unwind" fn example() {
+ panic!("Uh oh");
+}
+```
+
+This function (when compiled with `panic=unwind`) is permitted to unwind C++
+stack frames.
+
+```text
+[Rust function with `catch_unwind`, which stops the unwinding]
+ |
+ ...
+ |
+[C++ frames]
+ | ^
+ | (calls) | (unwinding
+ v | goes this
+[Rust function `example`] | way)
+ | |
+ +--- rust function panics --+
+```
+
+If the C++ frames have objects, their destructors will be called.
+
+### C++ `throw` with `"C-unwind"`
+
+<!-- ignore: using unstable feature -->
+```rust,ignore
+#[link(...)]
+extern "C-unwind" {
+ // A C++ function that may throw an exception
+ fn may_throw();
+}
+
+#[no_mangle]
+extern "C-unwind" fn rust_passthrough() {
+ let b = Box::new(5);
+ unsafe { may_throw(); }
+ println!("{:?}", &b);
+}
+```
+
+A C++ function with a `try` block may invoke `rust_passthrough` and `catch` an
+exception thrown by `may_throw`.
+
+```text
+[C++ function with `try` block that invokes `rust_passthrough`]
+ |
+ ...
+ |
+[Rust function `rust_passthrough`]
+ | ^
+ | (calls) | (unwinding
+ v | goes this
+[C++ function `may_throw`] | way)
+ | |
+ +--- C++ function throws ----+
+```
+
+If `may_throw` does throw an exception, `b` will be dropped. Otherwise, `5`
+will be printed.
+
+### `panic` can be stopped at an ABI boundary
+
+```rust
+#[no_mangle]
+extern "C" fn assert_nonzero(input: u32) {
+ assert!(input != 0)
+}
+```
+
+If `assert_nonzero` is called with the argument `0`, the runtime is guaranteed
+to (safely) abort the process, whether or not compiled with `panic=abort`.
+
+### Catching `panic` preemptively
+
+If you are writing Rust code that may panic, and you don't wish to abort the
+process if it panics, you must use [`catch_unwind`]:
+
+```rust
+use std::panic::catch_unwind;
+
+#[no_mangle]
+pub extern "C" fn oh_no() -> i32 {
+ let result = catch_unwind(|| {
+ panic!("Oops!");
+ });
+ match result {
+ Ok(_) => 0,
+ Err(_) => 1,
+ }
+}
+
+fn main() {}
+```
+
+Please note that [`catch_unwind`] will only catch unwinding panics, not
+those that abort the process. See the documentation of [`catch_unwind`]
+for more information.
+
+[`catch_unwind`]: ../std/panic/fn.catch_unwind.html
+
+## Representing opaque structs
+
+Sometimes, a C library wants to provide a pointer to something, but not let you know the internal details of the thing it wants.
+A stable and simple way is to use a `void *` argument:
+
+```c
+void foo(void *arg);
+void bar(void *arg);
+```
+
+We can represent this in Rust with the `c_void` type:
+
+<!-- ignore: requires libc crate -->
+```rust,ignore
+extern "C" {
+ pub fn foo(arg: *mut libc::c_void);
+ pub fn bar(arg: *mut libc::c_void);
+}
+# fn main() {}
+```
+
+This is a perfectly valid way of handling the situation. However, we can do a bit
+better. To solve this, some C libraries will instead create a `struct`, where
+the details and memory layout of the struct are private. This gives some amount
+of type safety. These structures are called ‘opaque’. Here’s an example, in C:
+
+```c
+struct Foo; /* Foo is a structure, but its contents are not part of the public interface */
+struct Bar;
+void foo(struct Foo *arg);
+void bar(struct Bar *arg);
+```
+
+To do this in Rust, let’s create our own opaque types:
+
+```rust
+#[repr(C)]
+pub struct Foo {
+ _data: [u8; 0],
+ _marker:
+ core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
+}
+#[repr(C)]
+pub struct Bar {
+ _data: [u8; 0],
+ _marker:
+ core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
+}
+
+extern "C" {
+ pub fn foo(arg: *mut Foo);
+ pub fn bar(arg: *mut Bar);
+}
+# fn main() {}
+```
+
+By including at least one private field and no constructor,
+we create an opaque type that we can't instantiate outside of this module.
+(A struct with no field could be instantiated by anyone.)
+We also want to use this type in FFI, so we have to add `#[repr(C)]`.
+The marker ensures the compiler does not mark the struct as `Send`, `Sync` and `Unpin` are
+not applied to the struct. (`*mut u8` is not `Send` or `Sync`, `PhantomPinned` is not `Unpin`)
+
+But because our `Foo` and `Bar` types are
+different, we’ll get type safety between the two of them, so we cannot
+accidentally pass a pointer to `Foo` to `bar()`.
+
+Notice that it is a really bad idea to use an empty enum as FFI type.
+The compiler relies on empty enums being uninhabited, so handling values of type
+`&Empty` is a huge footgun and can lead to buggy program behavior (by triggering
+undefined behavior).
+
+> **NOTE:** The simplest way would use "extern types".
+But it's currently (as of June 2021) unstable and has some unresolved questions, see the [RFC page][extern-type-rfc] and the [tracking issue][extern-type-issue] for more details.
+
+[extern-type-issue]: https://github.com/rust-lang/rust/issues/43467
+[extern-type-rfc]: https://rust-lang.github.io/rfcs/1861-extern-types.html
diff --git a/src/doc/nomicon/src/hrtb.md b/src/doc/nomicon/src/hrtb.md
new file mode 100644
index 000000000..fb2c600f2
--- /dev/null
+++ b/src/doc/nomicon/src/hrtb.md
@@ -0,0 +1,109 @@
+# Higher-Rank Trait Bounds (HRTBs)
+
+Rust's `Fn` traits are a little bit magic. For instance, we can write the
+following code:
+
+```rust
+struct Closure<F> {
+ data: (u8, u16),
+ func: F,
+}
+
+impl<F> Closure<F>
+ where F: Fn(&(u8, u16)) -> &u8,
+{
+ fn call(&self) -> &u8 {
+ (self.func)(&self.data)
+ }
+}
+
+fn do_it(data: &(u8, u16)) -> &u8 { &data.0 }
+
+fn main() {
+ let clo = Closure { data: (0, 1), func: do_it };
+ println!("{}", clo.call());
+}
+```
+
+If we try to naively desugar this code in the same way that we did in the
+[lifetimes section][lt], we run into some trouble:
+
+<!-- ignore: desugared code -->
+```rust,ignore
+// NOTE: `&'b data.0` and `'x: {` is not valid syntax!
+struct Closure<F> {
+ data: (u8, u16),
+ func: F,
+}
+
+impl<F> Closure<F>
+ // where F: Fn(&'??? (u8, u16)) -> &'??? u8,
+{
+ fn call<'a>(&'a self) -> &'a u8 {
+ (self.func)(&self.data)
+ }
+}
+
+fn do_it<'b>(data: &'b (u8, u16)) -> &'b u8 { &'b data.0 }
+
+fn main() {
+ 'x: {
+ let clo = Closure { data: (0, 1), func: do_it };
+ println!("{}", clo.call());
+ }
+}
+```
+
+How on earth are we supposed to express the lifetimes on `F`'s trait bound? We
+need to provide some lifetime there, but the lifetime we care about can't be
+named until we enter the body of `call`! Also, that isn't some fixed lifetime;
+`call` works with *any* lifetime `&self` happens to have at that point.
+
+This job requires The Magic of Higher-Rank Trait Bounds (HRTBs). The way we
+desugar this is as follows:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+where for<'a> F: Fn(&'a (u8, u16)) -> &'a u8,
+```
+
+Alternatively:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+where F: for<'a> Fn(&'a (u8, u16)) -> &'a u8,
+```
+
+(Where `Fn(a, b, c) -> d` is itself just sugar for the unstable *real* `Fn`
+trait)
+
+`for<'a>` can be read as "for all choices of `'a`", and basically produces an
+*infinite list* of trait bounds that F must satisfy. Intense. There aren't many
+places outside of the `Fn` traits where we encounter HRTBs, and even for
+those we have a nice magic sugar for the common cases.
+
+In summary, we can rewrite the original code more explicitly as:
+
+```rust
+struct Closure<F> {
+ data: (u8, u16),
+ func: F,
+}
+
+impl<F> Closure<F>
+ where for<'a> F: Fn(&'a (u8, u16)) -> &'a u8,
+{
+ fn call(&self) -> &u8 {
+ (self.func)(&self.data)
+ }
+}
+
+fn do_it(data: &(u8, u16)) -> &u8 { &data.0 }
+
+fn main() {
+ let clo = Closure { data: (0, 1), func: do_it };
+ println!("{}", clo.call());
+}
+```
+
+[lt]: lifetimes.html
diff --git a/src/doc/nomicon/src/img/safeandunsafe.svg b/src/doc/nomicon/src/img/safeandunsafe.svg
new file mode 100644
index 000000000..72022b339
--- /dev/null
+++ b/src/doc/nomicon/src/img/safeandunsafe.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="900.044px" height="369px" viewBox="0 0 900.044 369" enable-background="new 0 0 900.044 369" xml:space="preserve">
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M289.044,71c6.51,5.823,8.749,15.918,11,26 c-7.535,1.868-7.312-4.021-14-3c1.554-7.221-4.69-6.644-5-12C282.917,77.54,285.958,74.247,289.044,71z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M655.044,74c2.784,3.633,0.027,17.653,1,26 C648.826,93.905,654.539,83.238,655.044,74z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M582.044,102c-3.516,1.736-6.348-1.096-6-6 C578.755,94.02,581.498,98.688,582.044,102z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M326.044,97c5.287,1.504-0.711,12.841,1,17 c-3.073-0.26-4.497-2.169-7-3C322.458,106.747,321.216,98.838,326.044,97z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M701.044,105c4.389,5.115-1.561,14.356-6,17 C697.001,116.29,699.538,111.161,701.044,105z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M746.044,106c4.941,3.282-3.616,7.668-5,11 C737.246,111.829,744.717,109.37,746.044,106z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M796.044,109c-8.729,14.938-25.278,22.055-37,34 c-1.422-2.781,3.504-6.37,6-9c8.041-8.472,18.343-19.907,29-26C795.206,107.837,795.823,108.221,796.044,109z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M831.044,115c1.987,0.013,1.271,2.729,4,2c-2.232,2.768-5.575,4.425-10,5 C825.541,118.164,828.836,117.125,831.044,115z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M644.044,125c4.017-0.017,2.779,5.22,3,9 C642.923,134.265,642.054,127.72,644.044,125z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M590.044,127c3.254,2.08,4.093,6.574,7,9 C594.062,137.607,591.045,130.696,590.044,127z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M352.044,128c4.447,0.577,0.159,7.586,0,10 c-2.054-0.279-1.996-2.671-3-4C349.06,131.016,351.644,130.6,352.044,128z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M538.044,141c2.655,1.012,5.689,1.644,6,5 C541.332,145.045,537.149,145.562,538.044,141z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M796.044,141c2.797,3.82-4.991,5.185-3,9 c-6.859-0.054-12.528,9.369-22,10C777.444,151.734,789.17,148.793,796.044,141z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M803.044,143c-1.912,2.421-4.432,4.235-8,5 C796.956,145.579,799.476,143.765,803.044,143z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M117.044,146c1.817,1.183,0.786,5.214,2,7c-2,0-4,0-6,0 C113.06,149.349,115.887,148.509,117.044,146z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M640.044,151c3.052,1.078,5.222,6.8,3,10 C641.981,157.932,636.923,155.099,640.044,151z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M547.044,165c2.462,2.205,7.666,1.667,8,6 C550.613,170.764,547.903,168.808,547.044,165z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M388.044,238c-12.048-9.045-4.335-28.66-6-44 c-1.116-10.288-6.615-13.98-11-21c3.649-8.472,17.084-7.661,19,2c0.743,3.748-2.39,9.737-3,15 C385.048,207.204,386.769,227.726,388.044,238z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M862.044,176c-4.029,4.024-11.437,2.435-18,2 C849,174.831,855.729,174.756,862.044,176z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M92.044,189c2.176,0.887,3.055,5.584-1,5 C90.725,191.681,91.205,190.161,92.044,189z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M769.044,192c1.53,3.073-6.53,3.073-5,0 C764.65,191.424,768.787,189.659,769.044,192z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M659.044,192c1.615-0.282,1.722,0.945,3,1 c-1.275,2.059-1.595,5.072-5,5C657.62,195.909,659.523,195.146,659.044,192z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M77.044,200c-1.314,5.02-4.126,8.54-6,13 c0.235,6.098,5.47,7.197,7,12c-1.651,8.851-1.715,21.539,2,28c-13.368,13.632-25.984,28.017-38,43c-7.028-4.106-3.754-10.481-4-18 c-0.958-29.265,6.279-62.763,18-83C63.276,191.322,71.642,196.113,77.044,200z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M111.044,198c-7.923,0.393-12.947,4.445-20,8 c5.067,2.968-3.171,1.28-3,5c-2.356,0.022-2.944-1.723-6-1C90.413,202.845,101.314,190.188,111.044,198z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M692.044,199c1.996,3.369-2.969,8.334-8,8 C685.136,202.759,690.508,202.797,692.044,199z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M850.044,207c-3.549,8.278-19.244,8.761-28,6 C826.087,206.284,843.509,207.923,850.044,207z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M311.044,220c-1.494,1.587-5.701,1.462-5-2 C307.538,216.413,311.745,216.538,311.044,220z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M725.044,226c-1.735,3.265-7.605,2.395-11,4 C714.822,225.778,721.029,226.985,725.044,226z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M620.044,231c3.954-2.309,7.732-1.625,9,3 C633.265,249.4,607.573,238.279,620.044,231z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M679.044,232c2.229,2.353,3.081,8.908,0,11 C668.813,245.309,668.582,229.513,679.044,232z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M257.044,240c-1.823,2.681-6.472,1.857-6-3 C254.068,235.571,256.815,236.169,257.044,240z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M710.044,252C715.128,246.077,718.032,257.875,710.044,252 L710.044,252z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M839.044,255c-2.071,0.595-6.569-1.236-7,1 C814.485,254.817,836.918,251.521,839.044,255z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M827.044,272c-4.256,1.112-11.931,2.613-13,0 C813.619,270.963,823.487,271.052,827.044,272z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M657.044,292c3.244,0.756,4.344,3.656,4,8c-5.333,0-10.667,0-16,0 c4.58-1.949,0.33-6.828,7-7c-0.279,2.279,0.241,3.759,2,4C657.168,297.458,657.241,294.863,657.044,292z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M674.044,294c5.287-0.287,5.289,4.711,9,6 c-2.038,2.295-8.305,0.362-12,1C670.662,297.284,675.097,298.386,674.044,294z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M643.044,301c-3.333,0-6.667,0-10,0 C633.427,296.937,642.529,296.924,643.044,301z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M252.044,299c2.647,2.604-2.126,7.378-5,5 C246.46,300.083,251.157,301.446,252.044,299z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M1.044,0c299.663,0,599.342,0,899,0c0,123.001,0,245.999,0,369 c-299.993,0-600.009,0-900,0c0-121.999,0-244.001,0-366C-0.042,1.581-0.121,0.168,1.044,0z M888.044,264 c-17.816-4.839-33.84-3.61-47-10c7.409-1.829,14.338-1.038,24-2c-0.725-2.275-0.892-5.108-2-7c-8.304-0.889-27.275,1.812-33-7 c8.627-1.271,17.815,1.168,22-6c7.724-0.943,17.404,0.07,21-5c-9.672-5.564-30.935,4.32-39-3c8.153-7.581,23.262-3.364,36-5 c-2.076-8.076,10.004-1.995,10-8c-4.569-5.79-13.496-0.902-21-1c1.427-4.427-3.384-2.616-3-6c2.279,0.279,3.759-0.241,4-2 c-16.713-2.066-38.939,5.97-58,4c13.014-2.084,27.887-8.055,41-4c1.602-3.936-4.318-0.348-4-3c3.861-2.139,11.249-0.751,12-6 c-4.375-9.348-21.712,1.966-29-1c2.489-4.256,23.02-7.789,27-4c3.777-1.223,5.646-4.354,11-4c1.446-9.606,14.852-8.963,18-14 c-8.61,0.116-13.754,1.275-21-1c-3.797,1.417-9.247,3.965-15,2c-2.87,3.463-8.625,4.042-15,4c-3.104,1.366-6.558,4.779-8,0 c7.438-5.896,18.567-8.099,26-14c-9.631,1.376-19.289,8.034-27,8c6.18-1.154,8.935-5.732,15-7c2.351-14.652,26.358-12.971,30-23 c-10.059,2.947-18.344,7.335-29,7c-2.257,5.87-11.739,10.512-17,5c6.692-5.382,20.012-9.22,17-21c-9.299,2.776-20.182,9.051-28,10 c5.29-11.257,10.678-11.434,18-17c-9.64-0.872-13.945,11.98-23,15c5.827-4.39,3.515-10.842,9-15c-8.414,0.596-12.732,10.587-20,9 c6.242-17.425,23.379-23.955,39-32c-5.847-12.413-17.328,9.787-26,7c0.743-7.59,10.566-6.1,13-12c-1.793-3.751-5.559,0.687-8-2 c1.603-8.406,15.35-9.972,14-18c-4.433,1.9-6.447,6.219-12,7c0-4.667-0.861-8.472-6-8c3.135,17.214-9.926,24.733-21,33 c-2.487-0.109-3.096-1.874-5,0c-5.465,8.207-14.227,18.433-21,22c4.799-10.539,16.679-19.316,21-27c-5.084,1.916-4.911,9.088-12,9 c6.046-7.955,13.503-14.497,19-23c4.642-2.186,13.517-10.265,10-14c-5.238-1.882-7.607,7.709-13,9 c-9.335,10.999-16.318,24.348-29,32c4.088-10.731,19.812-23.055,13-35c4.262-9.071,9.892-16.775,11-29c-4.732-2.809-5.631,2.602-9,4 c1.374,3.164,0.218,3.342,0,7c-8.024,11.643-14.339,24.995-24,35c-0.699-8.378,4.223-19.592-3-23c6.041-6.965,12.033-19.293,11-30 c-3.355,1.311-4.841,4.492-8,6c-3.399,15.019-14.018,22.619-22,34c-1.749,2.494-0.412,8.06-6,7c-3.032-17.43,8.1-31.965,10-45 c0.412-2.828,2.031-7.835-2-10c-7.627,8.039-7.972,23.361-14,33c-13.352-1.617-12.206,19.744-22,25c-7.219-14.836,7.022-37.354,0-55 c-11.66,2.168-3.155,21.518-14,26c3.168,8.371,0.475,24.867-3,35c-1.183-5.484,2.46-15.793-2-18c-0.833,10.869,2.866,33.932-3,43 c-3.97-25.25,8.038-60.471-6-80c-11.061,3.606-9.482,19.852-15,29c-2.57-7.62-1.047-22.889-5-26c-1.003,0.003-1.19-0.81-2-1 c-5.954,10.316,2.008,30.51-2,40c8.392,6.455,1.34,23.064-1,31c-6.294-3.698-3.936-22.516,0-28c-3.963-5.486-3.54-20.304-12-18 c-0.349,5.078,8.479,19.06,2,27c-9.888-17.778-16.293-39.041-28-55c-7.982,14.793,8.171,35.463,9,48c-2.418-0.672-6.292-5.626-8-1 c10.369,7.565,17.536,26.508,17,36c-6.571-5.288-5.811-18.133-11-27c-2.823-1.172-4.247-0.199-7,1c-4.171-6.162-7.446-13.221-12-19 c2.495,9.171,8.74,14.593,11,24c-2.696-1.971-4.783-4.55-6-8c-19.709-8.67-21-30.786-42-39c4.268,17.231,21.93,27.806,25,44 c0.868,4.579-1.802,9.055,0,13c0.803,1.757,3.989,2.806,5,4c3.439,4.065,5.631,9.007,9,14c-16.015-10.652-22.74-30.593-42-38 c0.807,5.877,8.046,10.598,8,14c-14.456-0.565-14.534-24.981-29-19c-1.079-3.948-7.02-8.277-12-5c7.852,10.817,24.323,18.34,29,29 c-4.885-3.128-11.404-9.912-17-9c11.138,9.195,26.926,13.741,33,28c-3.078-0.745-1.922,2.745-5,2c-6.681-5.381-19.085-14.996-25-12 c-2.2,3.1,5.018,0,6,2c-2.266,2.484,11.159,6.014,12,12c-3.188-0.854-3.796,0.871-5,2c-2.182-3.652-4.071-1.737-10-2 c-6.795-5.339-17.191-11.607-23-9c11.582,7.421,28.561,14.77,35,24c-14.378-4.824-28.738-13.016-48-17 c9.14,16.194,32.272,18.395,43,33c-3.213-0.88-1.37,3.296-4,3c-15.381-6.336-27.959-13.526-41-20c-4.14,11.201-16.235-4.855-21,3 c9.56,4.458,20.045,8.068,24,13c0.241-1.759,1.721-2.279,4-2c-3.377,3.198,0.479,5.871,4,3c-0.347,4.263,7.118,8.699,10,13 c-1.647,1.686-2.173,4.494-4,6c-4.756-2.577-11.989-2.677-18-4c9.051,12.282,33.83,8.837,47,17c-23.317-4.207-45.62-4.801-69-9 c6.696,7.971,22.307,7.026,32,12c-3.201,0.133-4.399,2.268-4,6c8.212,2.796,16.249,4.78,26,8c-5.922,0.895-13.936-1.361-17,0 c7.016,3.317,19.183,1.484,26,5c-18.191,2.437-36.593-6.423-52-7c1.382,4.049-2.171,3.163-2,6c12.844,1.865,26.031,3.943,36,6 c-3.744,5.083-7.999,4.19-13,4c2.21,1.79,4.307,3.693,5,7c7.865-0.198,12.844,2.489,18,5c-13.607,1.743-26.715,0.559-43,1 c13.606,7.394,31.496,10.504,46,17c-3.104,4.254-12.43-0.297-17-1c-0.078,8.255-12.702,3.965-20,5c0.319,2.319-0.16,3.839-1,5 c12.34-0.975,22.716,0.954,32,0c-0.309,2.338-1.958,4.132,0,6c12.535,2.833,24.372-5.175,30,0c-3.521,2.479-7.971,4.029-10,8 c5.152,0.711,8.572-0.723,10,2c-1.794,1.873-6.138,1.195-7,4c6.819,3.657,9.863-6.665,15-5c0.851,3.775-3.321,4.694-1,7 c6.44-0.893,9.411-5.256,17-5c-0.857,3.19,1.574,3.093,2,5c-2.059,1.275-5.072,1.595-5,5c8.575-0.714,14.229-11.299,22-4 c3.406-6.89,10.037,1.333,18-1c-1.283,1.313-1.283,3.687,0,5c3.166,0.108,7.873-3.384,9-2c-1.427,1.334-1.427,5.666,0,7 c28.446-0.683,64.148-0.221,91,4c-36.164-2.477-85.967,0.127-125-1c-2.909-0.084-8.775-3.651-11,1c65.643,3.693,140.018,3.979,206,4 c-7.449-5.503-20.54-5.441-32-6c-22.784-1.11-44.558-1.764-65-4c2.465-3.978,0.451-10.747-1-14c2.622,1.378,4.329,3.671,4,8 c5.023-0.023,6.696,3.304,13,2c0.726-3.059-1.726-2.941-1-6c2.77,3.744,8.91,1.629,10-2c1.925,4.075,3.074,8.926,8,10 c4.028-1.639,1.491-9.842,6-11c3.474,3.859,9.241,5.425,13,9c5.627-0.04,4.221-7.113,9-8c-0.013,4.317,1.838,5.605-1,8 c4.896-0.647,4.698-0.175,10,0c2.176-1.819-2.176-6.181,0-8c5.823-3.345,9.319,1.451,14,2c1.709,0.2,1.797-1.7,4-2 c23.052-3.133,41.55,7.56,65,6c-13.996-9.004-39.187-6.813-54-15c17.604,0.224,35.956,7.656,53,8c3.105,0.062,6.49-1.856,10-2 c6.325-0.258,15.526,4.443,20-2c-7.698-6.302-25.811-2.189-31-11c2.15-5.533,10.955-1.436,16-1c9.121-4.831,19.825-2.489,34-2 c0.521-0.955,4.486-3.318,2-4C886.886,268.857,886.886,264.386,888.044,264z M247.044,55c-24.801-12.67-31.071,17.658-42,31 c-9.58-8.397-21.643-18.596-37-18c-13.983,13.742-4.424,42.289-27,47c-5.539,1.156-11.837-0.332-18-1c-10.046,3.984-4.07,14.75-7,22 c-2.762,6.833-9.436,8.67-14,15c-2.667,0-5.333,0-8,0c-8.262,6.246-3.789,15.993-4,25c-7.779,2.221-5.634,14.365-11,19 c-6.703-2.992-11.969-11.722-21-10c-12.488,2.381-19.789,30.182-23,43c-4.046,16.147-7.313,39.027-7,51 c0.09,3.447,1.885,15.883,3,19c6.002,16.788,23.29,5.232,32-1c11.881-8.502,21.88-18.038,36-23c9.637,13.709,21.357,52.708,38,56 c10.856,2.147,11.776-27.354,13-42c13.488,9.188,31.461,7.329,46,13c3.179,1.24,7.472,5.279,12,8c4.626,2.779,10.43,4.494,14,7 c12.301,8.635,12.036,23.319,23,33c11.654,10.29,29.992,13.588,48,5c-3.477-9.856-11.813-14.854-16-24 c13.82-1.847,23.421-7.912,31-16c-9.303-10.364-17.98-21.353-35-24c31.12-9.547,59.188-22.146,78-44c-0.933,6.734-2.989,12.344-5,18 c-12.945,3.673-34.191,22.044-26,40c0.627,1.375,4.609,2.605,5,5c6.151,1.124,13.541-1.756,16-1c-1.331,7.65,0.528,14.915,1,20 c19.695-3.118,29.025-12.329,37-26c3.287-5.634,1.532-17.979-1-25c-2.505-6.947-12.007-14.976-2-22c9.722,0.231,11.197,13.076,20,11 c0.221-0.779,0.837-1.162,2-1c2.245-7.755,0.398-19.602,1-29c1.255-2.745,6.296-1.704,6-6c-5.59-19.51-8.603-33.387-7-57 c-4.066-4.267-7.27-9.397-13-12c-2.124-2.027-3.386,1.709-7,1c-1.921-0.377-19.613-12.508-20-14c0.063,0.243,2.666-4.714,3-7 c3.158-21.594-8.941-27.956-21-17c-0.266-14.151,3.193-41.248-17-35c-4.598,3.736-5.265,11.402-12,13 c-7.123-14.857-4.806-35.814-22-42c-11.913,5.42-15.737,18.93-28,24C255.165,75.546,252.935,63.442,247.044,55z M825.044,122 c4.425-0.575,7.768-2.232,10-5c-2.729,0.729-2.013-1.987-4-2C828.836,117.125,825.541,118.164,825.044,122z"/>
+<g opacity="0.7">
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M357.044,241c3.234,4.317,2.449,6.956,1,13 c-4.584,1.963-14.466,3.242-20,1c0-1.333,0-2.667,0-4c3.394-1.606,9.4-0.6,12-3C347.777,242.615,350.912,240.506,357.044,241z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M389.044,259c-1.539,5.461-11.664,2.336-17,4 c0-2.667,0-5.333,0-8C378.916,252.205,386.041,253.231,389.044,259z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M328.044,267c-10.306,12.694-26.136,19.864-42,27 c-4.146,1.146-3.896-2.104-7-2c-9.905,2.311-24.22,10.852-34,4c8.358-8.965,23.146-7.971,35-12c13.091-4.45,25.647-9.732,36-17 C321.6,269.302,323.65,264.737,328.044,267z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M137.044,277c3.125-0.458,3.197,2.137,3,5 c9.885-0.781,17.709-3.624,29-3c0.777,0.89,1.075,2.258,1,4c4.311-0.125,7.693-2.372,9,2c-6.061,7.938-18.081,9.92-32,10 c-1.283-1.313-1.283-3.687,0-5c-4.259,0.408-8.871,0.462-12,2C133.191,288.444,137.41,282.394,137.044,277z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M114.044,283c0.396,2.396-4.555-0.555-3,3 c2.095,2.331,6.901,3.281,12,5c-0.883,7.287-10.839,6.384-17,7c-18.937,1.894-41.359,3.539-60,6c-2.61-4.405,7.238-3.76,6-10 c18.559-5.774,38.848-9.818,58-15C112.392,279.319,112.282,282.095,114.044,283z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M239.044,289c-0.156,4.177-4.913,3.754-8,5 c-1.407-1.926-2.643-4.023-3-7C230.949,285.12,239.103,283.031,239.044,289z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M859.044,306c-49.414-3.994-100.06-4.423-152-1 c-50.922,3.356-102.565,4.959-151,11c68.004,10.369,148.493,9.111,215,22c-32.068,2.223-92.36-8.233-120,3 c3.351-9.315,18.029-7.305,30-8c-40.821-8.87-96.751-4.028-137-15c9.819-9.051,28.139-7.231,45-9 c47.246-4.955,101.543-7.541,151-10c-75.623-9.475-168.782-9.948-246-4c78.416-12.061,168.237-7.077,250-1 c33.261,2.473,65.966,0.202,96,3C847.034,297.651,855.811,297.636,859.044,306z"/>
+ <path opacity="0.7" fill-rule="evenodd" clip-rule="evenodd" fill="#00003F" d="M212.044,300c-12.166,4.586-24.9,6.229-37,10 c-11.594,3.614-22.257,12.13-35,10c-0.067-9.132,13.336-11.957,22-16C179.721,295.751,193.913,289.524,212.044,300z"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M582.044,106c4.036-0.037,0.878,7.122,4,8 C584.416,115.562,581.639,109.789,582.044,106z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M744.044,134c-0.311,6.368-8.902,13.089-13,19 C732.909,148.188,738.695,138.66,744.044,134z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M762.044,147c2.107,4.141-5.468,7.174-8,10 C752.372,153.295,759.648,149.962,762.044,147z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M604.044,166c-0.15,2.483,0.517,4.15,2,5 C605.448,172.914,597.091,166.066,604.044,166z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M318.044,190c-21.112,4.109,3.252,39.324,10,16c3.58,11.589-2.021,22.638-9,27 c-35.633,7.98-27.755-63.153,1-43C319.601,191.454,319.166,189.898,318.044,190z M306.044,218c-0.701,3.462,3.506,3.587,5,2 C311.745,216.538,307.538,216.413,306.044,218z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M652.044,193c2.056,1.8-2.672,5.271-2,9 c0.189,0.81,1.003,0.997,1,2c7.677-1.594,11.783,0.272,18-6c-3.171,4.387-1.207,8.062-5,11c6.164,1.932,9.494-7.002,15-9 c-3.128,5.538-8.948,8.386-12,14c9.274,3.149,16.235-4.439,22-1c-0.697,2.636-4.553,2.114-5,5c-0.154,2.487,1.571,3.096,2,5 c6.257-3.104,9.073,1.414,14,0c1.805,4.138-9.895,8.967-3,12c3.216-4.651,8.385-5.835,14-2c-3.106,4.894-11.789,4.211-15,9 c1.799,1.234,8.857-1.309,11,2c-0.389,5.364-4.354,4.383-1,9c-3.537,0.88-5.152-2.568-6,1c1.836,2.164,5.896,2.104,10,2 c-0.366,8.765-11.319,3.151-16,2c-0.934,0.732-1.515,1.818-2,3c2.375,1.625,6.058,1.942,9,3c-1.487,5.487,3.612,4.388,4,8 c-10.467-1.896-16.667,0.27-25-6c-2.052,2.197-3.284,1.24-5,5c-2.091-0.576-2.854-2.479-6-2c-1.388,5.388,3.809,4.191,3,9 c-0.629,1.704-3.021,1.646-4,3c-2.503-3.164-5.143-6.19-11-6c-1.666-1.334-0.334-5.666-2-7c-3.766,0.466-3.742,4.845-5,10 c-3.82,0.487-3.13-3.537-5-5c-3.767-0.433-4.554,2.112-6,4c-3.896-2.125-11.239-6.974-12,1c-3.896-1.008-0.154-3.442-1-7 c-6.459-8.403-12.537,4.912-15,10c-0.897-3.233-3.722-8.301-2-11c0.716-2.716-4.716,0.716-4-2c-3.965,3.035-6.074,7.926-14,7 c4.098-3.385,4.353-5.421,8-10c-5.03-2.357-0.813-3.869-1-9c-5.38-0.38-4.833,5.167-10,5c-0.46-3.207-4.54-2.793-5-6 c4.643-1.024,8.347-2.986,9-8c-3.073-3.261-10.604-2.063-13-6c2.209-3.124,12.241,1.574,13-3c0.169-2.169-3.547-0.453-5-1 c3.208-4.88-2.767-3.867-3-8c1.334,1.427,5.666,1.427,7,0c0.537-3.537-0.848-5.152-3-6c2.623-1.905,6.219,3.743,11,3 c-1.997-6.003-10.122-5.878-13-11c6.727,1.257,12.777,3.959,20,2c0.127-1.794-1.225-2.109-1-4c3.804-0.562,6.578-2.75,10-1 c0.375-4.375-3.192-4.808-6-6c0-2.667,0-5.333,0-8c3.135-0.468,2.819,2.515,4,4c1.69-1.977,0.703-6.631,6-5 c1.063,4.413-1.978,7.729,0,10c6.345,0.679,6.323-5.011,6-11c2.443-0.89,4.336-2.331,8-2c0.261,3.261-1.188,4.812-4,5 c0.869,2.908,1.497,1.125,4,1c0.271,4.146-1.313,3.896,0,7c6.91,0.91,6.361-5.639,9-9C647.269,198.225,649.604,195.561,652.044,193z M621.044,258c20.594,0.229,18.577-44.529-8-32C603.539,235.605,606.461,257.838,621.044,258z M671.044,260 c15.19,0.317,22.083-36.352,0-34C652.084,228.02,655.749,259.681,671.044,260z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M613.044,226c26.577-12.529,28.594,32.229,8,32 C606.461,257.838,603.539,235.605,613.044,226z M629.044,234c-1.268-4.625-5.046-5.309-9-3 C607.573,238.279,633.265,249.4,629.044,234z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M671.044,226c22.083-2.352,15.19,34.317,0,34 C655.749,259.681,652.084,228.02,671.044,226z M679.044,243c3.081-2.092,2.229-8.647,0-11 C668.582,229.513,668.813,245.309,679.044,243z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M888.044,266c2.486,0.682-1.479,3.045-2,4c-14.175-0.489-24.879-2.831-34,2 c-5.045-0.436-13.85-4.533-16,1c5.189,8.811,23.302,4.698,31,11c-4.474,6.443-13.675,1.742-20,2c-3.51,0.144-6.895,2.062-10,2 c-17.044-0.344-35.396-7.776-53-8c14.813,8.187,40.004,5.996,54,15c-23.45,1.56-41.948-9.133-65-6c-2.203,0.3-2.291,2.2-4,2 c-4.681-0.549-8.177-5.345-14-2c-2.176,1.819,2.176,6.181,0,8c-5.302-0.175-5.104-0.647-10,0c2.838-2.395,0.987-3.683,1-8 c-4.779,0.887-3.373,7.96-9,8c-3.759-3.575-9.526-5.141-13-9c-4.509,1.158-1.972,9.361-6,11c-4.926-1.074-6.075-5.925-8-10 c-1.09,3.629-7.23,5.744-10,2c-0.726,3.059,1.726,2.941,1,6c-6.304,1.304-7.977-2.023-13-2c0.329-4.329-1.378-6.622-4-8 c1.451,3.253,3.465,10.022,1,14c20.442,2.236,42.216,2.89,65,4c11.46,0.559,24.551,0.497,32,6c-65.982-0.021-140.357-0.307-206-4 c2.225-4.651,8.091-1.084,11-1c39.033,1.127,88.836-1.477,125,1c-26.852-4.221-62.554-4.683-91-4c-1.427-1.334-1.427-5.666,0-7 c-1.127-1.384-5.834,2.108-9,2c-1.283-1.313-1.283-3.687,0-5c-7.963,2.333-14.594-5.89-18,1c-7.771-7.299-13.425,3.286-22,4 c-0.072-3.405,2.941-3.725,5-5c-0.426-1.907-2.857-1.81-2-5c-7.589-0.256-10.56,4.107-17,5c-2.321-2.306,1.851-3.225,1-7 c-5.137-1.665-8.181,8.657-15,5c0.862-2.805,5.206-2.127,7-4c-1.428-2.723-4.848-1.289-10-2c2.029-3.971,6.479-5.521,10-8 c-5.628-5.175-17.465,2.833-30,0c-1.958-1.868-0.309-3.662,0-6c-9.284,0.954-19.66-0.975-32,0c0.84-1.161,1.319-2.681,1-5 c7.298-1.035,19.922,3.255,20-5c4.57,0.703,13.896,5.254,17,1c-14.504-6.496-32.394-9.606-46-17c16.285-0.441,29.393,0.743,43-1 c-5.156-2.511-10.135-5.198-18-5c-0.693-3.307-2.79-5.21-5-7c5.001,0.19,9.256,1.083,13-4c-9.969-2.057-23.156-4.135-36-6 c-0.171-2.837,3.382-1.951,2-6c15.407,0.577,33.809,9.437,52,7c-6.817-3.516-18.984-1.683-26-5c3.064-1.361,11.078,0.895,17,0 c-9.751-3.22-17.788-5.204-26-8c-0.399-3.732,0.799-5.867,4-6c-9.693-4.974-25.304-4.029-32-12c23.38,4.199,45.683,4.793,69,9 c-13.17-8.163-37.949-4.718-47-17c6.011,1.323,13.244,1.423,18,4c1.827-1.506,2.353-4.314,4-6c-2.882-4.301-10.347-8.737-10-13 c-3.521,2.871-7.377,0.198-4-3c-2.279-0.279-3.759,0.241-4,2c-3.955-4.932-14.44-8.542-24-13c4.765-7.855,16.86,8.201,21-3 c13.041,6.474,25.619,13.664,41,20c2.63,0.296,0.787-3.88,4-3c-10.728-14.605-33.86-16.806-43-33c19.262,3.984,33.622,12.176,48,17 c-6.439-9.23-23.418-16.579-35-24c5.809-2.607,16.205,3.661,23,9c5.929,0.263,7.818-1.652,10,2c1.204-1.129,1.812-2.854,5-2 c-0.841-5.986-14.266-9.516-12-12c-0.982-2-8.2,1.1-6-2c5.915-2.996,18.319,6.619,25,12c3.078,0.745,1.922-2.745,5-2 c-6.074-14.259-21.862-18.805-33-28c5.596-0.912,12.115,5.872,17,9c-4.677-10.66-21.148-18.183-29-29c4.98-3.277,10.921,1.052,12,5 c14.466-5.981,14.544,18.435,29,19c0.046-3.402-7.193-8.123-8-14c19.26,7.407,25.985,27.348,42,38c-3.369-4.993-5.561-9.935-9-14 c-1.011-1.194-4.197-2.243-5-4c-1.802-3.945,0.868-8.421,0-13c-3.07-16.194-20.732-26.769-25-44c21,8.214,22.291,30.33,42,39 c1.217,3.45,3.304,6.029,6,8c-2.26-9.407-8.505-14.829-11-24c4.554,5.779,7.829,12.838,12,19c2.753-1.199,4.177-2.172,7-1 c5.189,8.867,4.429,21.712,11,27c0.536-9.492-6.631-28.435-17-36c1.708-4.626,5.582,0.328,8,1c-0.829-12.537-16.982-33.207-9-48 c11.707,15.959,18.112,37.222,28,55c6.479-7.94-2.349-21.922-2-27c8.46-2.304,8.037,12.514,12,18c-3.936,5.484-6.294,24.302,0,28 c2.34-7.936,9.392-24.545,1-31c4.008-9.49-3.954-29.684,2-40c0.81,0.19,0.997,1.003,2,1c3.953,3.111,2.43,18.38,5,26 c5.518-9.148,3.939-25.394,15-29c14.038,19.529,2.03,54.75,6,80c5.866-9.068,2.167-32.131,3-43c4.46,2.207,0.817,12.516,2,18 c3.475-10.133,6.168-26.629,3-35c10.845-4.482,2.34-23.832,14-26c7.022,17.646-7.219,40.164,0,55c9.794-5.256,8.648-26.617,22-25 c6.028-9.639,6.373-24.961,14-33c4.031,2.165,2.412,7.172,2,10c-1.9,13.035-13.032,27.57-10,45c5.588,1.06,4.251-4.506,6-7 c7.982-11.381,18.601-18.981,22-34c3.159-1.508,4.645-4.689,8-6c1.033,10.707-4.959,23.035-11,30c7.223,3.408,2.301,14.622,3,23 c9.661-10.005,15.976-23.357,24-35c0.218-3.658,1.374-3.836,0-7c3.369-1.398,4.268-6.809,9-4c-1.108,12.225-6.738,19.929-11,29 c6.812,11.945-8.912,24.269-13,35c12.682-7.652,19.665-21.001,29-32c5.393-1.291,7.762-10.882,13-9c3.517,3.735-5.358,11.814-10,14 c-5.497,8.503-12.954,15.045-19,23c7.089,0.088,6.916-7.084,12-9c-4.321,7.684-16.201,16.461-21,27c6.773-3.567,15.535-13.793,21-22 c1.904-1.874,2.513-0.109,5,0c11.074-8.267,24.135-15.786,21-33c5.139-0.472,6,3.333,6,8c5.553-0.781,7.567-5.1,12-7 c1.35,8.028-12.397,9.594-14,18c2.441,2.687,6.207-1.751,8,2c-2.434,5.9-12.257,4.41-13,12c8.672,2.787,20.153-19.413,26-7 c-15.621,8.045-32.758,14.575-39,32c7.268,1.587,11.586-8.404,20-9c-5.485,4.158-3.173,10.61-9,15c9.055-3.02,13.36-15.872,23-15 c-7.322,5.566-12.71,5.743-18,17c7.818-0.949,18.701-7.224,28-10c3.012,11.78-10.308,15.618-17,21c5.261,5.512,14.743,0.87,17-5 c10.656,0.335,18.941-4.053,29-7c-3.642,10.029-27.649,8.348-30,23c-6.065,1.268-8.82,5.846-15,7c7.711,0.034,17.369-6.624,27-8 c-7.433,5.901-18.562,8.104-26,14c1.442,4.779,4.896,1.366,8,0c6.375,0.042,12.13-0.537,15-4c5.753,1.965,11.203-0.583,15-2 c7.246,2.275,12.39,1.116,21,1c-3.148,5.037-16.554,4.394-18,14c-5.354-0.354-7.223,2.777-11,4c-3.98-3.789-24.511-0.256-27,4 c7.288,2.966,24.625-8.348,29,1c-0.751,5.249-8.139,3.861-12,6c-0.318,2.652,5.602-0.936,4,3c-13.113-4.055-27.986,1.916-41,4 c19.061,1.97,41.287-6.066,58-4c-0.241,1.759-1.721,2.279-4,2c-0.384,3.384,4.427,1.573,3,6c7.504,0.098,16.431-4.79,21,1 c0.004,6.005-12.076-0.076-10,8c-12.738,1.636-27.847-2.581-36,5c8.065,7.32,29.328-2.564,39,3c-3.596,5.07-13.276,4.057-21,5 c-4.185,7.168-13.373,4.729-22,6c5.725,8.812,24.696,6.111,33,7c1.108,1.892,1.275,4.725,2,7c-9.662,0.962-16.591,0.171-24,2 c13.16,6.39,29.184,5.161,47,10C886.886,264.386,886.886,268.857,888.044,266z M656.044,100c-0.973-8.347,1.784-22.367-1-26 C654.539,83.238,648.826,93.905,656.044,100z M576.044,96c-0.348,4.904,2.484,7.736,6,6C581.498,98.688,578.755,94.02,576.044,96z M695.044,122c4.439-2.644,10.389-11.885,6-17C699.538,111.161,697.001,116.29,695.044,122z M586.044,114 c-3.122-0.878,0.036-8.037-4-8C581.639,109.789,584.416,115.562,586.044,114z M741.044,117c1.384-3.332,9.941-7.718,5-11 C744.717,109.37,737.246,111.829,741.044,117z M794.044,108c-10.657,6.093-20.959,17.528-29,26c-2.496,2.63-7.422,6.219-6,9 c11.722-11.945,28.271-19.062,37-34C795.823,108.221,795.206,107.837,794.044,108z M647.044,134c-0.221-3.78,1.017-9.017-3-9 C642.054,127.72,642.923,134.265,647.044,134z M597.044,136c-2.907-2.426-3.746-6.92-7-9 C591.045,130.696,594.062,137.607,597.044,136z M731.044,153c4.098-5.911,12.689-12.632,13-19 C738.695,138.66,732.909,148.188,731.044,153z M544.044,146c-0.311-3.356-3.345-3.988-6-5 C537.149,145.562,541.332,145.045,544.044,146z M771.044,160c9.472-0.631,15.141-10.054,22-10c-1.991-3.815,5.797-5.18,3-9 C789.17,148.793,777.444,151.734,771.044,160z M795.044,148c3.568-0.765,6.088-2.579,8-5 C799.476,143.765,796.956,145.579,795.044,148z M754.044,157c2.532-2.826,10.107-5.859,8-10 C759.648,149.962,752.372,153.295,754.044,157z M643.044,161c2.222-3.2,0.052-8.922-3-10 C636.923,155.099,641.981,157.932,643.044,161z M555.044,171c-0.334-4.333-5.538-3.795-8-6 C547.903,168.808,550.613,170.764,555.044,171z M606.044,171c-1.483-0.85-2.15-2.517-2-5 C597.091,166.066,605.448,172.914,606.044,171z M844.044,178c6.563,0.435,13.971,2.024,18-2 C855.729,174.756,849,174.831,844.044,178z M764.044,192c-1.53,3.073,6.53,3.073,5,0C768.787,189.659,764.65,191.424,764.044,192z M657.044,198c3.405,0.072,3.725-2.941,5-5c-1.278-0.055-1.385-1.282-3-1C659.523,195.146,657.62,195.909,657.044,198z M642.044,198 c-2.639,3.361-2.09,9.91-9,9c-1.313-3.104,0.271-2.854,0-7c-2.503,0.125-3.131,1.908-4-1c2.812-0.188,4.261-1.739,4-5 c-3.664-0.331-5.557,1.11-8,2c0.323,5.989,0.345,11.679-6,11c-1.978-2.271,1.063-5.587,0-10c-5.297-1.631-4.31,3.023-6,5 c-1.181-1.485-0.865-4.468-4-4c0,2.667,0,5.333,0,8c2.808,1.192,6.375,1.625,6,6c-3.422-1.75-6.196,0.438-10,1 c-0.225,1.891,1.127,2.206,1,4c-7.223,1.959-13.273-0.743-20-2c2.878,5.122,11.003,4.997,13,11c-4.781,0.743-8.377-4.905-11-3 c2.152,0.848,3.537,2.463,3,6c-1.334,1.427-5.666,1.427-7,0c0.233,4.133,6.208,3.12,3,8c1.453,0.547,5.169-1.169,5,1 c-0.759,4.574-10.791-0.124-13,3c2.396,3.937,9.927,2.739,13,6c-0.653,5.014-4.357,6.976-9,8c0.46,3.207,4.54,2.793,5,6 c5.167,0.167,4.62-5.38,10-5c0.187,5.131-4.03,6.643,1,9c-3.647,4.579-3.902,6.615-8,10c7.926,0.926,10.035-3.965,14-7 c-0.716,2.716,4.716-0.716,4,2c-1.722,2.699,1.103,7.767,2,11c2.463-5.088,8.541-18.403,15-10c0.846,3.558-2.896,5.992,1,7 c0.761-7.974,8.104-3.125,12-1c1.446-1.888,2.233-4.433,6-4c1.87,1.463,1.18,5.487,5,5c1.258-5.155,1.234-9.534,5-10 c1.666,1.334,0.334,5.666,2,7c5.857-0.19,8.497,2.836,11,6c0.979-1.354,3.371-1.296,4-3c0.809-4.809-4.388-3.612-3-9 c3.146-0.479,3.909,1.424,6,2c1.716-3.76,2.948-2.803,5-5c8.333,6.27,14.533,4.104,25,6c-0.388-3.612-5.487-2.513-4-8 c-2.942-1.058-6.625-1.375-9-3c0.485-1.182,1.066-2.268,2-3c4.681,1.151,15.634,6.765,16-2c-4.104,0.104-8.164,0.164-10-2 c0.848-3.568,2.463-0.12,6-1c-3.354-4.617,0.611-3.636,1-9c-2.143-3.309-9.201-0.766-11-2c3.211-4.789,11.894-4.106,15-9 c-5.615-3.835-10.784-2.651-14,2c-6.895-3.033,4.805-7.862,3-12c-4.927,1.414-7.743-3.104-14,0c-0.429-1.904-2.154-2.513-2-5 c0.447-2.886,4.303-2.364,5-5c-5.765-3.439-12.726,4.149-22,1c3.052-5.614,8.872-8.462,12-14c-5.506,1.998-8.836,10.932-15,9 c3.793-2.938,1.829-6.613,5-11c-6.217,6.272-10.323,4.406-18,6c0.003-1.003-0.811-1.19-1-2c-0.672-3.729,4.056-7.2,2-9 C649.604,195.561,647.269,198.225,642.044,198z M684.044,207c5.031,0.334,9.996-4.631,8-8 C690.508,202.797,685.136,202.759,684.044,207z M822.044,213c8.756,2.761,24.451,2.278,28-6 C843.509,207.923,826.087,206.284,822.044,213z M714.044,230c3.395-1.605,9.265-0.735,11-4 C721.029,226.985,714.822,225.778,714.044,230z M710.044,252C718.032,257.875,715.128,246.077,710.044,252L710.044,252z M832.044,256c0.431-2.236,4.929-0.405,7-1C836.918,251.521,814.485,254.817,832.044,256z M814.044,272 c1.069,2.613,8.744,1.112,13,0C823.487,271.052,813.619,270.963,814.044,272z M654.044,297c-1.759-0.241-2.279-1.721-2-4 c-6.67,0.172-2.42,5.051-7,7c5.333,0,10.667,0,16,0c0.344-4.344-0.756-7.244-4-8C657.241,294.863,657.168,297.458,654.044,297z M671.044,301c3.695-0.638,9.962,1.295,12-1c-3.711-1.289-3.713-6.287-9-6C675.097,298.386,670.662,297.284,671.044,301z M633.044,301c3.333,0,6.667,0,10,0C642.529,296.924,633.427,296.937,633.044,301z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M273.044,224c5.563,11.896-0.734,27.455-9,32c-29.517,5.174-30.603-39.11-14-49 c10.071-1.071,15.466,2.533,19,8c-2.674,0.727-5.609-3.926-10-3C238.249,216.386,269.236,253.189,273.044,224z M251.044,237 c-0.472,4.857,4.177,5.681,6,3C256.815,236.169,254.068,235.571,251.044,237z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M261.044,84c12.263-5.07,16.087-18.58,28-24c17.194,6.186,14.877,27.143,22,42 c6.735-1.598,7.402-9.264,12-13c20.193-6.248,16.734,20.849,17,35c12.059-10.956,24.158-4.594,21,17c-0.334,2.286-2.937,7.243-3,7 c0.387,1.492,18.079,13.623,20,14c3.614,0.709,4.876-3.027,7-1c5.73,2.603,8.934,7.733,13,12c-1.603,23.613,1.41,37.49,7,57 c0.296,4.296-4.745,3.255-6,6c-0.602,9.398,1.245,21.245-1,29c-1.163-0.162-1.779,0.221-2,1c-8.803,2.076-10.278-10.769-20-11 c-10.007,7.024-0.505,15.053,2,22c2.532,7.021,4.287,19.366,1,25c-7.975,13.671-17.305,22.882-37,26c-0.472-5.085-2.331-12.35-1-20 c-2.459-0.756-9.849,2.124-16,1c-0.391-2.395-4.373-3.625-5-5c-8.191-17.956,13.055-36.327,26-40c2.011-5.656,4.067-11.266,5-18 c-18.812,21.854-46.88,34.453-78,44c17.02,2.647,25.697,13.636,35,24c-7.579,8.088-17.18,14.153-31,16 c4.187,9.146,12.523,14.144,16,24c-18.008,8.588-36.346,5.29-48-5c-10.964-9.681-10.699-24.365-23-33c-3.57-2.506-9.374-4.221-14-7 c-4.528-2.721-8.821-6.76-12-8c-14.539-5.671-32.512-3.812-46-13c-1.224,14.646-2.144,44.147-13,42 c-16.643-3.292-28.363-42.291-38-56c-14.12,4.962-24.119,14.498-36,23c-8.71,6.232-25.998,17.788-32,1 c-1.115-3.117-2.91-15.553-3-19c-0.313-11.973,2.954-34.853,7-51c3.211-12.818,10.512-40.619,23-43c9.031-1.722,14.297,7.008,21,10 c5.366-4.635,3.221-16.779,11-19c0.211-9.007-4.262-18.754,4-25c2.667,0,5.333,0,8,0c4.564-6.33,11.238-8.167,14-15 c2.93-7.25-3.046-18.016,7-22c6.163,0.668,12.461,2.156,18,1c22.576-4.711,13.017-33.258,27-47c15.357-0.596,27.42,9.603,37,18 c10.929-13.342,17.199-43.67,42-31C252.935,63.442,255.165,75.546,261.044,84z M223.044,82c-0.307,3.974,6.99,0.343,5,6 c-5.008,3.999-16.852,5.345-22,6c-7.502-7.498-16.322-13.678-28-17c-8.637,5.376-4.678,18.443-8,30c3.506,2.16,9.124,2.21,10,7 c-6.738,4.596-11.69,10.977-18,16c-10.758-4.38-24.171-10.975-37-10c-3.313,12.897,7.81,19.339,8,32c5.271,0.73,11.115-3.272,14,1 c-3.648,6.826,1.458,11.189-6,15c-0.755-3.578-2.313-6.353-6-7c-13.703,2.296-26.646-6.587-37-1c4.854,10.15,16.282,22.382,30,27 c2.557,2.675-0.603,5.273,0,9c-1.413,1.512-4.857,3.158-7,1c15.321,11.03,35.784,22.191,43,38c-22.269-4.109-31.784-30.233-62-27 c-0.221,0.779-0.837,1.163-2,1c-3.93,5.035-5.481,12.548-4,21c3.149,17.968,15.84,41.814,24,62c4.163,10.297,5.658,20.142,13,25 c1.236-13.572-3.018-30.353-4-45c-0.978-14.584-1.476-39.777,11-38c-0.209,8.194,7.758,16.01,7,28c10.038,3.629,13.583,13.751,27,14 c2.1-4.233,2.812-9.855,9-10c1.175,12.811,20.947,32.045,34,40c9.802,5.975,22.285,9.021,25,16c2.864,7.362-0.749,13.827,4,19 c7.803,8.501,21.57,10.022,34,8c-6.066-8.601-11.323-18.011-17-27c6.373-8.294,26.745-2.588,34-10c-4.31-13.854-30.541-19.192-41-7 c-1.234,4.433-2.299,9.034-6,11c-5.429-4.534-14.518-11.446-22-20c-8.567-9.795-23.157-24.114-15-31c1.142,5.191,6.468,6.198,6,13 c50.136-1.111,93.952-20.715,126-46c1.514-10.567,11.312-32.396,21-19c-3.35,0.65-6.386,1.614-8,4c0.521,18.613,6.754,42.194-5,53 c-16.211,1.456-24.555,10.778-26,27c9.927-1.305,16.399-12.489,26-8c-0.973,10.693-4.206,19.127-5,30 c12.413,1.07,23.97-12.906,26-26c1.549-9.99-3.147-16.165-9-23c3.111-13.171,10.341-28.219,10-44c-0.411-19.028-6.767-36.275-10-50 c-11.568-17.765-26.172-32.495-40-48c-12.195-8.423-23.833-15.167-37-23c-13.84-8.233-26.872-11.685-41-20 c0.243-3.09,4.977-1.689,4-6c-3.128-6.538-4.451-14.882-9-20C227.536,58.408,229.438,72.643,223.044,82z M281.044,82 c0.31,5.356,6.554,4.779,5,12c6.688-1.021,6.465,4.868,14,3c-2.251-10.082-4.49-20.177-11-26 C285.958,74.247,282.917,77.54,281.044,82z M320.044,111c2.503,0.831,3.927,2.74,7,3c-1.711-4.159,4.287-15.496-1-17 C321.216,98.838,322.458,106.747,320.044,111z M349.044,134c1.004,1.329,0.946,3.721,3,4c0.159-2.414,4.447-9.423,0-10 C351.644,130.6,349.06,131.016,349.044,134z M113.044,153c2,0,4,0,6,0c-1.214-1.786-0.183-5.817-2-7 C115.887,148.509,113.06,149.349,113.044,153z M387.044,190c0.61-5.263,3.743-11.252,3-15c-1.916-9.661-15.351-10.472-19-2 c4.385,7.02,9.884,10.712,11,21c1.665,15.34-6.048,34.955,6,44C386.769,227.726,385.048,207.204,387.044,190z M91.044,194 c4.055,0.584,3.176-4.113,1-5C91.205,190.161,90.725,191.681,91.044,194z M56.044,195c-11.721,20.237-18.958,53.735-18,83 c0.246,7.519-3.028,13.894,4,18c12.016-14.983,24.632-29.368,38-43c-3.715-6.461-3.651-19.149-2-28c-1.53-4.803-6.765-5.902-7-12 c1.874-4.46,4.686-7.98,6-13C71.642,196.113,63.276,191.322,56.044,195z M82.044,210c3.056-0.723,3.644,1.022,6,1 c-0.171-3.72,8.067-2.032,3-5c7.053-3.555,12.077-7.607,20-8C101.314,190.188,90.413,202.845,82.044,210z M247.044,304 c2.874,2.378,7.647-2.396,5-5C251.157,301.446,246.46,300.083,247.044,304z"/>
+<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M242.044,59c4.549,5.118,5.872,13.462,9,20 c0.977,4.311-3.757,2.91-4,6c14.128,8.315,27.16,11.767,41,20c13.167,7.833,24.805,14.577,37,23c13.828,15.505,28.432,30.235,40,48 c3.233,13.725,9.589,30.972,10,50c0.341,15.781-6.889,30.829-10,44c5.853,6.835,10.549,13.01,9,23c-2.03,13.094-13.587,27.07-26,26 c0.794-10.873,4.027-19.307,5-30c-9.601-4.489-16.073,6.695-26,8c1.445-16.222,9.789-25.544,26-27c11.754-10.806,5.521-34.387,5-53 c1.614-2.386,4.65-3.35,8-4c-9.688-13.396-19.486,8.433-21,19c-32.048,25.285-75.864,44.889-126,46c0.468-6.802-4.858-7.809-6-13 c-8.157,6.886,6.433,21.205,15,31c7.482,8.554,16.571,15.466,22,20c3.701-1.966,4.766-6.567,6-11c10.459-12.192,36.69-6.854,41,7 c-7.255,7.412-27.627,1.706-34,10c5.677,8.989,10.934,18.399,17,27c-12.43,2.022-26.197,0.501-34-8c-4.749-5.173-1.136-11.638-4-19 c-2.715-6.979-15.198-10.025-25-16c-13.053-7.955-32.825-27.189-34-40c-6.188,0.145-6.9,5.767-9,10 c-13.417-0.249-16.962-10.371-27-14c0.758-11.99-7.209-19.806-7-28c-12.476-1.777-11.978,23.416-11,38 c0.982,14.647,5.236,31.428,4,45c-7.342-4.858-8.837-14.703-13-25c-8.16-20.186-20.851-44.032-24-62c-1.481-8.452,0.07-15.965,4-21 c1.163,0.163,1.779-0.221,2-1c30.216-3.233,39.731,22.891,62,27c-7.216-15.809-27.679-26.97-43-38c2.143,2.158,5.587,0.512,7-1 c-0.603-3.727,2.557-6.325,0-9c-13.718-4.618-25.146-16.85-30-27c10.354-5.587,23.297,3.296,37,1c3.687,0.647,5.245,3.422,6,7 c7.458-3.811,2.352-8.174,6-15c-2.885-4.272-8.729-0.27-14-1c-0.19-12.661-11.313-19.103-8-32c12.829-0.975,26.242,5.62,37,10 c6.31-5.023,11.262-11.404,18-16c-0.876-4.79-6.494-4.84-10-7c3.322-11.557-0.637-24.624,8-30c11.678,3.322,20.498,9.502,28,17 c5.148-0.655,16.992-2.001,22-6c1.99-5.657-5.307-2.026-5-6C229.438,72.643,227.536,58.408,242.044,59z M320.044,190 c-28.755-20.153-36.633,50.98-1,43c6.979-4.362,12.58-15.411,9-27c-6.748,23.324-31.112-11.891-10-16 C319.166,189.898,319.601,191.454,320.044,190z M259.044,212c4.391-0.926,7.326,3.727,10,3c-3.534-5.467-8.929-9.071-19-8 c-16.603,9.89-15.517,54.174,14,49c8.266-4.545,14.563-20.104,9-32C269.236,253.189,238.249,216.386,259.044,212z"/>
+</svg> \ No newline at end of file
diff --git a/src/doc/nomicon/src/intro.md b/src/doc/nomicon/src/intro.md
new file mode 100644
index 000000000..4e77ffafe
--- /dev/null
+++ b/src/doc/nomicon/src/intro.md
@@ -0,0 +1,45 @@
+# The Rustonomicon
+
+<div class="warning">
+
+Warning:
+This book is incomplete.
+Documenting everything and rewriting outdated parts take a while.
+See the [issue tracker] to check what's missing/outdated, and if there are any mistakes or ideas that haven't been reported, feel free to open a new issue there.
+
+</div>
+
+[issue tracker]: https://github.com/rust-lang/nomicon/issues
+
+## The Dark Arts of Unsafe Rust
+
+> THE KNOWLEDGE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF UNLEASHING INDESCRIBABLE HORRORS THAT SHATTER YOUR PSYCHE AND SET YOUR MIND ADRIFT IN THE UNKNOWABLY INFINITE COSMOS.
+
+The Rustonomicon digs into all the awful details that you need to understand when writing Unsafe Rust programs.
+
+Should you wish a long and happy career of writing Rust programs, you should turn back now and forget you ever saw this book.
+It is not necessary.
+However if you intend to write unsafe code — or just want to dig into the guts of the language — this book contains lots of useful information.
+
+Unlike *[The Rust Programming Language][trpl]*, we will be assuming considerable prior knowledge.
+In particular, you should be comfortable with basic systems programming and Rust.
+If you don't feel comfortable with these topics, you should consider reading [The Book][trpl] first.
+That said, we won't assume you have read it, and we will take care to occasionally give a refresher on the basics where appropriate.
+You can skip straight to this book if you want; just know that we won't be explaining everything from the ground up.
+
+This book exists primarily as a high-level companion to [The Reference][ref].
+Where The Reference exists to detail the syntax and semantics of every part of the language, The Rustonomicon exists to describe how to use those pieces together, and the issues that you will have in doing so.
+
+The Reference will tell you the syntax and semantics of references, destructors, and unwinding, but it won't tell you how combining them can lead to exception-safety issues, or how to deal with those issues.
+
+It should be noted that we haven't synced The Rustnomicon and The Reference well, so they may have duplicate content.
+In general, if the two documents disagree, The Reference should be assumed to be correct (it isn't yet considered normative, it's just better maintained).
+
+Topics that are within the scope of this book include: the meaning of (un)safety, unsafe primitives provided by the language and standard library, techniques for creating safe abstractions with those unsafe primitives, subtyping and variance, exception-safety (panic/unwind-safety), working with uninitialized memory, type punning, concurrency, interoperating with other languages (FFI), optimization tricks, how constructs lower to compiler/OS/hardware primitives, how to **not** make the memory model people angry, how you're **going** to make the memory model people angry, and more.
+
+The Rustonomicon is not a place to exhaustively describe the semantics and guarantees of every single API in the standard library, nor is it a place to exhaustively describe every feature of Rust.
+
+Unless otherwise noted, Rust code in this book uses the Rust 2018 edition.
+
+[trpl]: ../book/index.html
+[ref]: ../reference/index.html
diff --git a/src/doc/nomicon/src/leaking.md b/src/doc/nomicon/src/leaking.md
new file mode 100644
index 000000000..ea29595f4
--- /dev/null
+++ b/src/doc/nomicon/src/leaking.md
@@ -0,0 +1,254 @@
+# Leaking
+
+Ownership-based resource management is intended to simplify composition. You
+acquire resources when you create the object, and you release the resources when
+it gets destroyed. Since destruction is handled for you, it means you can't
+forget to release the resources, and it happens as soon as possible! Surely this
+is perfect and all of our problems are solved.
+
+Everything is terrible and we have new and exotic problems to try to solve.
+
+Many people like to believe that Rust eliminates resource leaks. In practice,
+this is basically true. You would be surprised to see a Safe Rust program
+leak resources in an uncontrolled way.
+
+However from a theoretical perspective this is absolutely not the case, no
+matter how you look at it. In the strictest sense, "leaking" is so abstract as
+to be unpreventable. It's quite trivial to initialize a collection at the start
+of a program, fill it with tons of objects with destructors, and then enter an
+infinite event loop that never refers to it. The collection will sit around
+uselessly, holding on to its precious resources until the program terminates (at
+which point all those resources would have been reclaimed by the OS anyway).
+
+We may consider a more restricted form of leak: failing to drop a value that is
+unreachable. Rust also doesn't prevent this. In fact Rust *has a function for
+doing this*: `mem::forget`. This function consumes the value it is passed *and
+then doesn't run its destructor*.
+
+In the past `mem::forget` was marked as unsafe as a sort of lint against using
+it, since failing to call a destructor is generally not a well-behaved thing to
+do (though useful for some special unsafe code). However this was generally
+determined to be an untenable stance to take: there are many ways to fail to
+call a destructor in safe code. The most famous example is creating a cycle of
+reference-counted pointers using interior mutability.
+
+It is reasonable for safe code to assume that destructor leaks do not happen, as
+any program that leaks destructors is probably wrong. However *unsafe* code
+cannot rely on destructors to be run in order to be safe. For most types this
+doesn't matter: if you leak the destructor then the type is by definition
+inaccessible, so it doesn't matter, right? For instance, if you leak a `Box<u8>`
+then you waste some memory but that's hardly going to violate memory-safety.
+
+However where we must be careful with destructor leaks are *proxy* types. These
+are types which manage access to a distinct object, but don't actually own it.
+Proxy objects are quite rare. Proxy objects you'll need to care about are even
+rarer. However we'll focus on three interesting examples in the standard
+library:
+
+* `vec::Drain`
+* `Rc`
+* `thread::scoped::JoinGuard`
+
+## Drain
+
+`drain` is a collections API that moves data out of the container without
+consuming the container. This enables us to reuse the allocation of a `Vec`
+after claiming ownership over all of its contents. It produces an iterator
+(Drain) that returns the contents of the Vec by-value.
+
+Now, consider Drain in the middle of iteration: some values have been moved out,
+and others haven't. This means that part of the Vec is now full of logically
+uninitialized data! We could backshift all the elements in the Vec every time we
+remove a value, but this would have pretty catastrophic performance
+consequences.
+
+Instead, we would like Drain to fix the Vec's backing storage when it is
+dropped. It should run itself to completion, backshift any elements that weren't
+removed (drain supports subranges), and then fix Vec's `len`. It's even
+unwinding-safe! Easy!
+
+Now consider the following:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let mut vec = vec![Box::new(0); 4];
+
+{
+ // start draining, vec can no longer be accessed
+ let mut drainer = vec.drain(..);
+
+ // pull out two elements and immediately drop them
+ drainer.next();
+ drainer.next();
+
+ // get rid of drainer, but don't call its destructor
+ mem::forget(drainer);
+}
+
+// Oops, vec[0] was dropped, we're reading a pointer into free'd memory!
+println!("{}", vec[0]);
+```
+
+This is pretty clearly Not Good. Unfortunately, we're kind of stuck between a
+rock and a hard place: maintaining consistent state at every step has an
+enormous cost (and would negate any benefits of the API). Failing to maintain
+consistent state gives us Undefined Behavior in safe code (making the API
+unsound).
+
+So what can we do? Well, we can pick a trivially consistent state: set the Vec's
+len to be 0 when we start the iteration, and fix it up if necessary in the
+destructor. That way, if everything executes like normal we get the desired
+behavior with minimal overhead. But if someone has the *audacity* to
+mem::forget us in the middle of the iteration, all that does is *leak even more*
+(and possibly leave the Vec in an unexpected but otherwise consistent state).
+Since we've accepted that mem::forget is safe, this is definitely safe. We call
+leaks causing more leaks a *leak amplification*.
+
+## Rc
+
+Rc is an interesting case because at first glance it doesn't appear to be a
+proxy value at all. After all, it manages the data it points to, and dropping
+all the Rcs for a value will drop that value. Leaking an Rc doesn't seem like it
+would be particularly dangerous. It will leave the refcount permanently
+incremented and prevent the data from being freed or dropped, but that seems
+just like Box, right?
+
+Nope.
+
+Let's consider a simplified implementation of Rc:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+struct Rc<T> {
+ ptr: *mut RcBox<T>,
+}
+
+struct RcBox<T> {
+ data: T,
+ ref_count: usize,
+}
+
+impl<T> Rc<T> {
+ fn new(data: T) -> Self {
+ unsafe {
+ // Wouldn't it be nice if heap::allocate worked like this?
+ let ptr = heap::allocate::<RcBox<T>>();
+ ptr::write(ptr, RcBox {
+ data: data,
+ ref_count: 1,
+ });
+ Rc { ptr: ptr }
+ }
+ }
+
+ fn clone(&self) -> Self {
+ unsafe {
+ (*self.ptr).ref_count += 1;
+ }
+ Rc { ptr: self.ptr }
+ }
+}
+
+impl<T> Drop for Rc<T> {
+ fn drop(&mut self) {
+ unsafe {
+ (*self.ptr).ref_count -= 1;
+ if (*self.ptr).ref_count == 0 {
+ // drop the data and then free it
+ ptr::read(self.ptr);
+ heap::deallocate(self.ptr);
+ }
+ }
+ }
+}
+```
+
+This code contains an implicit and subtle assumption: `ref_count` can fit in a
+`usize`, because there can't be more than `usize::MAX` Rcs in memory. However
+this itself assumes that the `ref_count` accurately reflects the number of Rcs
+in memory, which we know is false with `mem::forget`. Using `mem::forget` we can
+overflow the `ref_count`, and then get it down to 0 with outstanding Rcs. Then
+we can happily use-after-free the inner data. Bad Bad Not Good.
+
+This can be solved by just checking the `ref_count` and doing *something*. The
+standard library's stance is to just abort, because your program has become
+horribly degenerate. Also *oh my gosh* it's such a ridiculous corner case.
+
+## thread::scoped::JoinGuard
+
+> Note: This API has already been removed from std, for more information
+> you may refer [issue #24292](https://github.com/rust-lang/rust/issues/24292).
+>
+> This section remains here because we think this example is still
+> important, regardless of whether it is part of std or not.
+
+The thread::scoped API intended to allow threads to be spawned that reference
+data on their parent's stack without any synchronization over that data by
+ensuring the parent joins the thread before any of the shared data goes out
+of scope.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub fn scoped<'a, F>(f: F) -> JoinGuard<'a>
+ where F: FnOnce() + Send + 'a
+```
+
+Here `f` is some closure for the other thread to execute. Saying that
+`F: Send +'a` is saying that it closes over data that lives for `'a`, and it
+either owns that data or the data was Sync (implying `&data` is Send).
+
+Because JoinGuard has a lifetime, it keeps all the data it closes over
+borrowed in the parent thread. This means the JoinGuard can't outlive
+the data that the other thread is working on. When the JoinGuard *does* get
+dropped it blocks the parent thread, ensuring the child terminates before any
+of the closed-over data goes out of scope in the parent.
+
+Usage looked like:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let mut data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
+{
+ let mut guards = vec![];
+ for x in &mut data {
+ // Move the mutable reference into the closure, and execute
+ // it on a different thread. The closure has a lifetime bound
+ // by the lifetime of the mutable reference `x` we store in it.
+ // The guard that is returned is in turn assigned the lifetime
+ // of the closure, so it also mutably borrows `data` as `x` did.
+ // This means we cannot access `data` until the guard goes away.
+ let guard = thread::scoped(move || {
+ *x *= 2;
+ });
+ // store the thread's guard for later
+ guards.push(guard);
+ }
+ // All guards are dropped here, forcing the threads to join
+ // (this thread blocks here until the others terminate).
+ // Once the threads join, the borrow expires and the data becomes
+ // accessible again in this thread.
+}
+// data is definitely mutated here.
+```
+
+In principle, this totally works! Rust's ownership system perfectly ensures it!
+...except it relies on a destructor being called to be safe.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let mut data = Box::new(0);
+{
+ let guard = thread::scoped(|| {
+ // This is at best a data race. At worst, it's also a use-after-free.
+ *data += 1;
+ });
+ // Because the guard is forgotten, expiring the loan without blocking this
+ // thread.
+ mem::forget(guard);
+}
+// So the Box is dropped here while the scoped thread may or may not be trying
+// to access it.
+```
+
+Dang. Here the destructor running was pretty fundamental to the API, and it had
+to be scrapped in favor of a completely different design.
diff --git a/src/doc/nomicon/src/lifetime-elision.md b/src/doc/nomicon/src/lifetime-elision.md
new file mode 100644
index 000000000..9e210c7bf
--- /dev/null
+++ b/src/doc/nomicon/src/lifetime-elision.md
@@ -0,0 +1,68 @@
+# Lifetime Elision
+
+In order to make common patterns more ergonomic, Rust allows lifetimes to be
+*elided* in function signatures.
+
+A *lifetime position* is anywhere you can write a lifetime in a type:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+&'a T
+&'a mut T
+T<'a>
+```
+
+Lifetime positions can appear as either "input" or "output":
+
+* For `fn` definitions, `fn` types, and the traits `Fn`, `FnMut`, and `FnOnce`,
+ input refers to the types of the formal arguments, while output refers to
+ result types. So `fn foo(s: &str) -> (&str, &str)` has elided one lifetime in
+ input position and two lifetimes in output position. Note that the input
+ positions of a `fn` method definition do not include the lifetimes that occur
+ in the method's `impl` header (nor lifetimes that occur in the trait header,
+ for a default method).
+
+* For `impl` headers, all types are input. So `impl Trait<&T> for Struct<&T>`
+ has elided two lifetimes in input position, while `impl Struct<&T>` has elided
+ one.
+
+Elision rules are as follows:
+
+* Each elided lifetime in input position becomes a distinct lifetime
+ parameter.
+
+* If there is exactly one input lifetime position (elided or not), that lifetime
+ is assigned to *all* elided output lifetimes.
+
+* If there are multiple input lifetime positions, but one of them is `&self` or
+ `&mut self`, the lifetime of `self` is assigned to *all* elided output lifetimes.
+
+* Otherwise, it is an error to elide an output lifetime.
+
+Examples:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn print(s: &str); // elided
+fn print<'a>(s: &'a str); // expanded
+
+fn debug(lvl: usize, s: &str); // elided
+fn debug<'a>(lvl: usize, s: &'a str); // expanded
+
+fn substr(s: &str, until: usize) -> &str; // elided
+fn substr<'a>(s: &'a str, until: usize) -> &'a str; // expanded
+
+fn get_str() -> &str; // ILLEGAL
+
+fn frob(s: &str, t: &str) -> &str; // ILLEGAL
+
+fn get_mut(&mut self) -> &mut T; // elided
+fn get_mut<'a>(&'a mut self) -> &'a mut T; // expanded
+
+fn args<T: ToCStr>(&mut self, args: &[T]) -> &mut Command // elided
+fn args<'a, 'b, T: ToCStr>(&'a mut self, args: &'b [T]) -> &'a mut Command // expanded
+
+fn new(buf: &mut [u8]) -> BufWriter; // elided
+fn new(buf: &mut [u8]) -> BufWriter<'_>; // elided (with `rust_2018_idioms`)
+fn new<'a>(buf: &'a mut [u8]) -> BufWriter<'a> // expanded
+```
diff --git a/src/doc/nomicon/src/lifetime-mismatch.md b/src/doc/nomicon/src/lifetime-mismatch.md
new file mode 100644
index 000000000..0494d492a
--- /dev/null
+++ b/src/doc/nomicon/src/lifetime-mismatch.md
@@ -0,0 +1,123 @@
+# Limits of Lifetimes
+
+Given the following code:
+
+```rust,compile_fail
+#[derive(Debug)]
+struct Foo;
+
+impl Foo {
+ fn mutate_and_share(&mut self) -> &Self { &*self }
+ fn share(&self) {}
+}
+
+fn main() {
+ let mut foo = Foo;
+ let loan = foo.mutate_and_share();
+ foo.share();
+ println!("{:?}", loan);
+}
+```
+
+One might expect it to compile. We call `mutate_and_share`, which mutably
+borrows `foo` temporarily, but then returns only a shared reference. Therefore
+we would expect `foo.share()` to succeed as `foo` shouldn't be mutably borrowed.
+
+However when we try to compile it:
+
+```text
+error[E0502]: cannot borrow `foo` as immutable because it is also borrowed as mutable
+ --> src/main.rs:12:5
+ |
+11 | let loan = foo.mutate_and_share();
+ | --- mutable borrow occurs here
+12 | foo.share();
+ | ^^^ immutable borrow occurs here
+13 | println!("{:?}", loan);
+```
+
+What happened? Well, we got the exact same reasoning as we did for
+[Example 2 in the previous section][ex2]. We desugar the program and we get
+the following:
+
+<!-- ignore: desugared code -->
+```rust,ignore
+struct Foo;
+
+impl Foo {
+ fn mutate_and_share<'a>(&'a mut self) -> &'a Self { &'a *self }
+ fn share<'a>(&'a self) {}
+}
+
+fn main() {
+ 'b: {
+ let mut foo: Foo = Foo;
+ 'c: {
+ let loan: &'c Foo = Foo::mutate_and_share::<'c>(&'c mut foo);
+ 'd: {
+ Foo::share::<'d>(&'d foo);
+ }
+ println!("{:?}", loan);
+ }
+ }
+}
+```
+
+The lifetime system is forced to extend the `&mut foo` to have lifetime `'c`,
+due to the lifetime of `loan` and `mutate_and_share`'s signature. Then when we
+try to call `share`, and it sees we're trying to alias that `&'c mut foo` and
+blows up in our face!
+
+This program is clearly correct according to the reference semantics we actually
+care about, but the lifetime system is too coarse-grained to handle that.
+
+## Improperly reduced borrows
+
+The following code fails to compile, because Rust sees that a variable, `map`,
+is borrowed twice, and can not infer that the first borrow stops to be needed
+before the second one occurs. This is caused by Rust conservatively falling back
+to using a whole scope for the first borow. This will eventually get fixed.
+
+```rust,compile_fail
+# use std::collections::HashMap;
+# use std::hash::Hash;
+fn get_default<'m, K, V>(map: &'m mut HashMap<K, V>, key: K) -> &'m mut V
+where
+ K: Clone + Eq + Hash,
+ V: Default,
+{
+ match map.get_mut(&key) {
+ Some(value) => value,
+ None => {
+ map.insert(key.clone(), V::default());
+ map.get_mut(&key).unwrap()
+ }
+ }
+}
+```
+
+Because of the lifetime restrictions imposed, `&mut map`'s lifetime
+overlaps other mutable borrows, resulting in a compile error:
+
+```text
+error[E0499]: cannot borrow `*map` as mutable more than once at a time
+ --> src/main.rs:12:13
+ |
+4 | fn get_default<'m, K, V>(map: &'m mut HashMap<K, V>, key: K) -> &'m mut V
+ | -- lifetime `'m` defined here
+...
+9 | match map.get_mut(&key) {
+ | - --- first mutable borrow occurs here
+ | _____|
+ | |
+10 | | Some(value) => value,
+11 | | None => {
+12 | | map.insert(key.clone(), V::default());
+ | | ^^^ second mutable borrow occurs here
+13 | | map.get_mut(&key).unwrap()
+14 | | }
+15 | | }
+ | |_____- returning this value requires that `*map` is borrowed for `'m`
+```
+
+[ex2]: lifetimes.html#example-aliasing-a-mutable-reference
diff --git a/src/doc/nomicon/src/lifetimes.md b/src/doc/nomicon/src/lifetimes.md
new file mode 100644
index 000000000..ef86b7b53
--- /dev/null
+++ b/src/doc/nomicon/src/lifetimes.md
@@ -0,0 +1,302 @@
+# Lifetimes
+
+Rust enforces these rules through *lifetimes*. Lifetimes are named
+regions of code that a reference must be valid for. Those regions
+may be fairly complex, as they correspond to paths of execution
+in the program. There may even be holes in these paths of execution,
+as it's possible to invalidate a reference as long as it's reinitialized
+before it's used again. Types which contain references (or pretend to)
+may also be tagged with lifetimes so that Rust can prevent them from
+being invalidated as well.
+
+In most of our examples, the lifetimes will coincide with scopes. This is
+because our examples are simple. The more complex cases where they don't
+coincide are described below.
+
+Within a function body, Rust generally doesn't let you explicitly name the
+lifetimes involved. This is because it's generally not really necessary
+to talk about lifetimes in a local context; Rust has all the information and
+can work out everything as optimally as possible. Many anonymous scopes and
+temporaries that you would otherwise have to write are often introduced to
+make your code Just Work.
+
+However once you cross the function boundary, you need to start talking about
+lifetimes. Lifetimes are denoted with an apostrophe: `'a`, `'static`. To dip
+our toes with lifetimes, we're going to pretend that we're actually allowed
+to label scopes with lifetimes, and desugar the examples from the start of
+this chapter.
+
+Originally, our examples made use of *aggressive* sugar -- high fructose corn
+syrup even -- around scopes and lifetimes, because writing everything out
+explicitly is *extremely noisy*. All Rust code relies on aggressive inference
+and elision of "obvious" things.
+
+One particularly interesting piece of sugar is that each `let` statement
+implicitly introduces a scope. For the most part, this doesn't really matter.
+However it does matter for variables that refer to each other. As a simple
+example, let's completely desugar this simple piece of Rust code:
+
+```rust
+let x = 0;
+let y = &x;
+let z = &y;
+```
+
+The borrow checker always tries to minimize the extent of a lifetime, so it will
+likely desugar to the following:
+
+<!-- ignore: desugared code -->
+```rust,ignore
+// NOTE: `'a: {` and `&'b x` is not valid syntax!
+'a: {
+ let x: i32 = 0;
+ 'b: {
+ // lifetime used is 'b because that's good enough.
+ let y: &'b i32 = &'b x;
+ 'c: {
+ // ditto on 'c
+ let z: &'c &'b i32 = &'c y;
+ }
+ }
+}
+```
+
+Wow. That's... awful. Let's all take a moment to thank Rust for making this easier.
+
+Actually passing references to outer scopes will cause Rust to infer
+a larger lifetime:
+
+```rust
+let x = 0;
+let z;
+let y = &x;
+z = y;
+```
+
+<!-- ignore: desugared code -->
+```rust,ignore
+'a: {
+ let x: i32 = 0;
+ 'b: {
+ let z: &'b i32;
+ 'c: {
+ // Must use 'b here because the reference to x is
+ // being passed to the scope 'b.
+ let y: &'b i32 = &'b x;
+ z = y;
+ }
+ }
+}
+```
+
+## Example: references that outlive referents
+
+Alright, let's look at some of those examples from before:
+
+```rust,compile_fail
+fn as_str(data: &u32) -> &str {
+ let s = format!("{}", data);
+ &s
+}
+```
+
+desugars to:
+
+<!-- ignore: desugared code -->
+```rust,ignore
+fn as_str<'a>(data: &'a u32) -> &'a str {
+ 'b: {
+ let s = format!("{}", data);
+ return &'a s;
+ }
+}
+```
+
+This signature of `as_str` takes a reference to a u32 with *some* lifetime, and
+promises that it can produce a reference to a str that can live *just as long*.
+Already we can see why this signature might be trouble. That basically implies
+that we're going to find a str somewhere in the scope the reference
+to the u32 originated in, or somewhere *even earlier*. That's a bit of a tall
+order.
+
+We then proceed to compute the string `s`, and return a reference to it. Since
+the contract of our function says the reference must outlive `'a`, that's the
+lifetime we infer for the reference. Unfortunately, `s` was defined in the
+scope `'b`, so the only way this is sound is if `'b` contains `'a` -- which is
+clearly false since `'a` must contain the function call itself. We have therefore
+created a reference whose lifetime outlives its referent, which is *literally*
+the first thing we said that references can't do. The compiler rightfully blows
+up in our face.
+
+To make this more clear, we can expand the example:
+
+<!-- ignore: desugared code -->
+```rust,ignore
+fn as_str<'a>(data: &'a u32) -> &'a str {
+ 'b: {
+ let s = format!("{}", data);
+ return &'a s
+ }
+}
+
+fn main() {
+ 'c: {
+ let x: u32 = 0;
+ 'd: {
+ // An anonymous scope is introduced because the borrow does not
+ // need to last for the whole scope x is valid for. The return
+ // of as_str must find a str somewhere before this function
+ // call. Obviously not happening.
+ println!("{}", as_str::<'d>(&'d x));
+ }
+ }
+}
+```
+
+Shoot!
+
+Of course, the right way to write this function is as follows:
+
+```rust
+fn to_string(data: &u32) -> String {
+ format!("{}", data)
+}
+```
+
+We must produce an owned value inside the function to return it! The only way
+we could have returned an `&'a str` would have been if it was in a field of the
+`&'a u32`, which is obviously not the case.
+
+(Actually we could have also just returned a string literal, which as a global
+can be considered to reside at the bottom of the stack; though this limits
+our implementation *just a bit*.)
+
+## Example: aliasing a mutable reference
+
+How about the other example:
+
+```rust,compile_fail
+let mut data = vec![1, 2, 3];
+let x = &data[0];
+data.push(4);
+println!("{}", x);
+```
+
+<!-- ignore: desugared code -->
+```rust,ignore
+'a: {
+ let mut data: Vec<i32> = vec![1, 2, 3];
+ 'b: {
+ // 'b is as big as we need this borrow to be
+ // (just need to get to `println!`)
+ let x: &'b i32 = Index::index::<'b>(&'b data, 0);
+ 'c: {
+ // Temporary scope because we don't need the
+ // &mut to last any longer.
+ Vec::push(&'c mut data, 4);
+ }
+ println!("{}", x);
+ }
+}
+```
+
+The problem here is a bit more subtle and interesting. We want Rust to
+reject this program for the following reason: We have a live shared reference `x`
+to a descendant of `data` when we try to take a mutable reference to `data`
+to `push`. This would create an aliased mutable reference, which would
+violate the *second* rule of references.
+
+However this is *not at all* how Rust reasons that this program is bad. Rust
+doesn't understand that `x` is a reference to a subpath of `data`. It doesn't
+understand `Vec` at all. What it *does* see is that `x` has to live for `'b` in
+order to be printed. The signature of `Index::index` subsequently demands that
+the reference we take to `data` has to survive for `'b`. When we try to call
+`push`, it then sees us try to make an `&'c mut data`. Rust knows that `'c` is
+contained within `'b`, and rejects our program because the `&'b data` must still
+be alive!
+
+Here we see that the lifetime system is much more coarse than the reference
+semantics we're actually interested in preserving. For the most part, *that's
+totally ok*, because it keeps us from spending all day explaining our program
+to the compiler. However it does mean that several programs that are totally
+correct with respect to Rust's *true* semantics are rejected because lifetimes
+are too dumb.
+
+## The area covered by a lifetime
+
+A reference (sometimes called a *borrow*) is *alive* from the place it is
+created to its last use. The borrowed value needs to outlive only borrows that
+are alive. This looks simple, but there are a few subtleties.
+
+The following snippet compiles, because after printing `x`, it is no longer
+needed, so it doesn't matter if it is dangling or aliased (even though the
+variable `x` *technically* exists to the very end of the scope).
+
+```rust
+let mut data = vec![1, 2, 3];
+let x = &data[0];
+println!("{}", x);
+// This is OK, x is no longer needed
+data.push(4);
+```
+
+However, if the value has a destructor, the destructor is run at the end of the
+scope. And running the destructor is considered a use ‒ obviously the last one.
+So, this will *not* compile.
+
+```rust,compile_fail
+#[derive(Debug)]
+struct X<'a>(&'a i32);
+
+impl Drop for X<'_> {
+ fn drop(&mut self) {}
+}
+
+let mut data = vec![1, 2, 3];
+let x = X(&data[0]);
+println!("{:?}", x);
+data.push(4);
+// Here, the destructor is run and therefore this'll fail to compile.
+```
+
+One way to convince the compiler that `x` is no longer valid is by using `drop(x)` before `data.push(4)`.
+
+Furthermore, there might be multiple possible last uses of the borrow, for
+example in each branch of a condition.
+
+```rust
+# fn some_condition() -> bool { true }
+let mut data = vec![1, 2, 3];
+let x = &data[0];
+
+if some_condition() {
+ println!("{}", x); // This is the last use of `x` in this branch
+ data.push(4); // So we can push here
+} else {
+ // There's no use of `x` in here, so effectively the last use is the
+ // creation of x at the top of the example.
+ data.push(5);
+}
+```
+
+And a lifetime can have a pause in it. Or you might look at it as two distinct
+borrows just being tied to the same local variable. This often happens around
+loops (writing a new value of a variable at the end of the loop and using it for
+the last time at the top of the next iteration).
+
+```rust
+let mut data = vec![1, 2, 3];
+// This mut allows us to change where the reference points to
+let mut x = &data[0];
+
+println!("{}", x); // Last use of this borrow
+data.push(4);
+x = &data[3]; // We start a new borrow here
+println!("{}", x);
+```
+
+Historically, Rust kept the borrow alive until the end of scope, so these
+examples might fail to compile with older compilers. Also, there are still some
+corner cases where Rust fails to properly shorten the live part of the borrow
+and fails to compile even when it looks like it should. These'll be solved over
+time.
diff --git a/src/doc/nomicon/src/meet-safe-and-unsafe.md b/src/doc/nomicon/src/meet-safe-and-unsafe.md
new file mode 100644
index 000000000..49b0086e5
--- /dev/null
+++ b/src/doc/nomicon/src/meet-safe-and-unsafe.md
@@ -0,0 +1,68 @@
+# Meet Safe and Unsafe
+
+![safe and unsafe](img/safeandunsafe.svg)
+
+It would be great to not have to worry about low-level implementation details.
+Who could possibly care how much space the empty tuple occupies? Sadly, it
+sometimes matters and we need to worry about it. The most common reason
+developers start to care about implementation details is performance, but more
+importantly, these details can become a matter of correctness when interfacing
+directly with hardware, operating systems, or other languages.
+
+When implementation details start to matter in a safe programming language,
+programmers usually have three options:
+
+* fiddle with the code to encourage the compiler/runtime to perform an optimization
+* adopt a more unidiomatic or cumbersome design to get the desired implementation
+* rewrite the implementation in a language that lets you deal with those details
+
+For that last option, the language programmers tend to use is *C*. This is often
+necessary to interface with systems that only declare a C interface.
+
+Unfortunately, C is incredibly unsafe to use (sometimes for good reason),
+and this unsafety is magnified when trying to interoperate with another
+language. Care must be taken to ensure C and the other language agree on
+what's happening, and that they don't step on each other's toes.
+
+So what does this have to do with Rust?
+
+Well, unlike C, Rust is a safe programming language.
+
+But, like C, Rust is an unsafe programming language.
+
+More accurately, Rust *contains* both a safe and unsafe programming language.
+
+Rust can be thought of as a combination of two programming languages: *Safe
+Rust* and *Unsafe Rust*. Conveniently, these names mean exactly what they say:
+Safe Rust is Safe. Unsafe Rust is, well, not. In fact, Unsafe Rust lets us
+do some *really* unsafe things. Things the Rust authors will implore you not to
+do, but we'll do anyway.
+
+Safe Rust is the *true* Rust programming language. If all you do is write Safe
+Rust, you will never have to worry about type-safety or memory-safety. You will
+never endure a dangling pointer, a use-after-free, or any other kind of
+Undefined Behavior (a.k.a. UB).
+
+The standard library also gives you enough utilities out of the box that you'll
+be able to write high-performance applications and libraries in pure idiomatic
+Safe Rust.
+
+But maybe you want to talk to another language. Maybe you're writing a
+low-level abstraction not exposed by the standard library. Maybe you're
+*writing* the standard library (which is written entirely in Rust). Maybe you
+need to do something the type-system doesn't understand and just *frob some dang
+bits*. Maybe you need Unsafe Rust.
+
+Unsafe Rust is exactly like Safe Rust with all the same rules and semantics.
+It just lets you do some *extra* things that are Definitely Not Safe
+(which we will define in the next section).
+
+The value of this separation is that we gain the benefits of using an unsafe
+language like C — low level control over implementation details — without most
+of the problems that come with trying to integrate it with a completely
+different safe language.
+
+There are still some problems — most notably, we must become aware of properties
+that the type system assumes and audit them in any code that interacts with
+Unsafe Rust. That's the purpose of this book: to teach you about these assumptions
+and how to manage them.
diff --git a/src/doc/nomicon/src/obrm.md b/src/doc/nomicon/src/obrm.md
new file mode 100644
index 000000000..19e5ec382
--- /dev/null
+++ b/src/doc/nomicon/src/obrm.md
@@ -0,0 +1,14 @@
+# The Perils Of Ownership Based Resource Management (OBRM)
+
+OBRM (AKA RAII: Resource Acquisition Is Initialization) is something you'll
+interact with a lot in Rust. Especially if you use the standard library.
+
+Roughly speaking the pattern is as follows: to acquire a resource, you create an
+object that manages it. To release the resource, you simply destroy the object,
+and it cleans up the resource for you. The most common "resource" this pattern
+manages is simply *memory*. `Box`, `Rc`, and basically everything in
+`std::collections` is a convenience to enable correctly managing memory. This is
+particularly important in Rust because we have no pervasive GC to rely on for
+memory management. Which is the point, really: Rust is about control. However we
+are not limited to just memory. Pretty much every other system resource like a
+thread, file, or socket is exposed through this kind of API.
diff --git a/src/doc/nomicon/src/other-reprs.md b/src/doc/nomicon/src/other-reprs.md
new file mode 100644
index 000000000..93da7297e
--- /dev/null
+++ b/src/doc/nomicon/src/other-reprs.md
@@ -0,0 +1,161 @@
+# Alternative representations
+
+Rust allows you to specify alternative data layout strategies from the default.
+There's also the [unsafe code guidelines] (note that it's **NOT** normative).
+
+## repr(C)
+
+This is the most important `repr`. It has fairly simple intent: do what C does.
+The order, size, and alignment of fields is exactly what you would expect from C
+or C++. Any type you expect to pass through an FFI boundary should have
+`repr(C)`, as C is the lingua-franca of the programming world. This is also
+necessary to soundly do more elaborate tricks with data layout such as
+reinterpreting values as a different type.
+
+We strongly recommend using [rust-bindgen] and/or [cbindgen] to manage your FFI
+boundaries for you. The Rust team works closely with those projects to ensure
+that they work robustly and are compatible with current and future guarantees
+about type layouts and `repr`s.
+
+The interaction of `repr(C)` with Rust's more exotic data layout features must be
+kept in mind. Due to its dual purpose as "for FFI" and "for layout control",
+`repr(C)` can be applied to types that will be nonsensical or problematic if
+passed through the FFI boundary.
+
+* ZSTs are still zero-sized, even though this is not a standard behavior in
+C, and is explicitly contrary to the behavior of an empty type in C++, which
+says they should still consume a byte of space.
+
+* DST pointers (wide pointers) and tuples are not a concept
+ in C, and as such are never FFI-safe.
+
+* Enums with fields also aren't a concept in C or C++, but a valid bridging
+ of the types [is defined][really-tagged].
+
+* If `T` is an [FFI-safe non-nullable pointer
+ type](ffi.html#the-nullable-pointer-optimization),
+ `Option<T>` is guaranteed to have the same layout and ABI as `T` and is
+ therefore also FFI-safe. As of this writing, this covers `&`, `&mut`,
+ and function pointers, all of which can never be null.
+
+* Tuple structs are like structs with regards to `repr(C)`, as the only
+ difference from a struct is that the fields aren’t named.
+
+* `repr(C)` is equivalent to one of `repr(u*)` (see the next section) for
+fieldless enums. The chosen size is the default enum size for the target platform's C
+application binary interface (ABI). Note that enum representation in C is implementation
+defined, so this is really a "best guess". In particular, this may be incorrect
+when the C code of interest is compiled with certain flags.
+
+* Fieldless enums with `repr(C)` or `repr(u*)` still may not be set to an
+integer value without a corresponding variant, even though this is
+permitted behavior in C or C++. It is undefined behavior to (unsafely)
+construct an instance of an enum that does not match one of its
+variants. (This allows exhaustive matches to continue to be written and
+compiled as normal.)
+
+## repr(transparent)
+
+This can only be used on structs with a single non-zero-sized field (there may
+be additional zero-sized fields). The effect is that the layout and ABI of the
+whole struct is guaranteed to be the same as that one field.
+
+The goal is to make it possible to transmute between the single field and the
+struct. An example of that is [`UnsafeCell`], which can be transmuted into
+the type it wraps ([`UnsafeCell`] also uses the unstable [no_niche][no-niche-pull],
+so its ABI is not actually guaranteed to be the same when nested in other types).
+
+Also, passing the struct through FFI where the inner field type is expected on
+the other side is guaranteed to work. In particular, this is necessary for `struct
+Foo(f32)` to always have the same ABI as `f32`.
+
+This repr is only considered part of the public ABI of a type if either the single
+field is `pub`, or if its layout is documented in prose. Otherwise, the layout should
+not be relied upon by other crates.
+
+More details are in the [RFC][rfc-transparent].
+
+## repr(u*), repr(i*)
+
+These specify the size to make a fieldless enum. If the discriminant overflows
+the integer it has to fit in, it will produce a compile-time error. You can
+manually ask Rust to allow this by setting the overflowing element to explicitly
+be 0. However Rust will not allow you to create an enum where two variants have
+the same discriminant.
+
+The term "fieldless enum" only means that the enum doesn't have data in any
+of its variants. A fieldless enum without a `repr(u*)` or `repr(C)` is
+still a Rust native type, and does not have a stable ABI representation.
+Adding a `repr` causes it to be treated exactly like the specified
+integer size for ABI purposes.
+
+If the enum has fields, the effect is similar to the effect of `repr(C)`
+in that there is a defined layout of the type. This makes it possible to
+pass the enum to C code, or access the type's raw representation and directly
+manipulate its tag and fields. See [the RFC][really-tagged] for details.
+
+These `repr`s have no effect on a struct.
+
+Adding an explicit `repr(u*)`, `repr(i*)`, or `repr(C)` to an enum with fields suppresses the null-pointer optimization, like:
+
+```rust
+# use std::mem::size_of;
+enum MyOption<T> {
+ Some(T),
+ None,
+}
+
+#[repr(u8)]
+enum MyReprOption<T> {
+ Some(T),
+ None,
+}
+
+assert_eq!(8, size_of::<MyOption<&u16>>());
+assert_eq!(16, size_of::<MyReprOption<&u16>>());
+```
+
+This optimization still applies to fieldless enums with an explicit `repr(u*)`, `repr(i*)`, or `repr(C)`.
+
+## repr(packed)
+
+`repr(packed)` forces Rust to strip any padding, and only align the type to a
+byte. This may improve the memory footprint, but will likely have other negative
+side-effects.
+
+In particular, most architectures *strongly* prefer values to be aligned. This
+may mean the unaligned loads are penalized (x86), or even fault (some ARM
+chips). For simple cases like directly loading or storing a packed field, the
+compiler might be able to paper over alignment issues with shifts and masks.
+However if you take a reference to a packed field, it's unlikely that the
+compiler will be able to emit code to avoid an unaligned load.
+
+[As this can cause undefined behavior][ub loads], the lint has been implemented
+and it will become a hard error.
+
+`repr(packed)` is not to be used lightly. Unless you have extreme requirements,
+this should not be used.
+
+This repr is a modifier on `repr(C)` and `repr(Rust)`.
+
+## repr(align(n))
+
+`repr(align(n))` (where `n` is a power of two) forces the type to have an
+alignment of *at least* n.
+
+This enables several tricks, like making sure neighboring elements of an array
+never share the same cache line with each other (which may speed up certain
+kinds of concurrent code).
+
+This is a modifier on `repr(C)` and `repr(Rust)`. It is incompatible with
+`repr(packed)`.
+
+[unsafe code guidelines]: https://rust-lang.github.io/unsafe-code-guidelines/layout.html
+[drop flags]: drop-flags.html
+[ub loads]: https://github.com/rust-lang/rust/issues/27060
+[`UnsafeCell`]: ../std/cell/struct.UnsafeCell.html
+[rfc-transparent]: https://github.com/rust-lang/rfcs/blob/master/text/1758-repr-transparent.md
+[really-tagged]: https://github.com/rust-lang/rfcs/blob/master/text/2195-really-tagged-unions.md
+[rust-bindgen]: https://rust-lang.github.io/rust-bindgen/
+[cbindgen]: https://github.com/eqrion/cbindgen
+[no-niche-pull]: https://github.com/rust-lang/rust/pull/68491
diff --git a/src/doc/nomicon/src/ownership.md b/src/doc/nomicon/src/ownership.md
new file mode 100644
index 000000000..4cfac68c4
--- /dev/null
+++ b/src/doc/nomicon/src/ownership.md
@@ -0,0 +1,65 @@
+# Ownership and Lifetimes
+
+Ownership is the breakout feature of Rust. It allows Rust to be completely
+memory-safe and efficient, while avoiding garbage collection. Before getting
+into the ownership system in detail, we will consider the motivation of this
+design.
+
+We will assume that you accept that garbage collection (GC) is not always an
+optimal solution, and that it is desirable to manually manage memory in some
+contexts. If you do not accept this, might I interest you in a different
+language?
+
+Regardless of your feelings on GC, it is pretty clearly a *massive* boon to
+making code safe. You never have to worry about things going away *too soon*
+(although whether you still wanted to be pointing at that thing is a different
+issue...). This is a pervasive problem that C and C++ programs need to deal
+with. Consider this simple mistake that all of us who have used a non-GC'd
+language have made at one point:
+
+```rust,compile_fail
+fn as_str(data: &u32) -> &str {
+ // compute the string
+ let s = format!("{}", data);
+
+ // OH NO! We returned a reference to something that
+ // exists only in this function!
+ // Dangling pointer! Use after free! Alas!
+ // (this does not compile in Rust)
+ &s
+}
+```
+
+This is exactly what Rust's ownership system was built to solve.
+Rust knows the scope in which the `&s` lives, and as such can prevent it from
+escaping. However this is a simple case that even a C compiler could plausibly
+catch. Things get more complicated as code gets bigger and pointers get fed through
+various functions. Eventually, a C compiler will fall down and won't be able to
+perform sufficient escape analysis to prove your code unsound. It will consequently
+be forced to accept your program on the assumption that it is correct.
+
+This will never happen to Rust. It's up to the programmer to prove to the
+compiler that everything is sound.
+
+Of course, Rust's story around ownership is much more complicated than just
+verifying that references don't escape the scope of their referent. That's
+because ensuring pointers are always valid is much more complicated than this.
+For instance in this code,
+
+```rust,compile_fail
+let mut data = vec![1, 2, 3];
+// get an internal reference
+let x = &data[0];
+
+// OH NO! `push` causes the backing storage of `data` to be reallocated.
+// Dangling pointer! Use after free! Alas!
+// (this does not compile in Rust)
+data.push(4);
+
+println!("{}", x);
+```
+
+naive scope analysis would be insufficient to prevent this bug, because `data`
+does in fact live as long as we needed. However it was *changed* while we had
+a reference into it. This is why Rust requires any references to freeze the
+referent and its owners.
diff --git a/src/doc/nomicon/src/panic-handler.md b/src/doc/nomicon/src/panic-handler.md
new file mode 100644
index 000000000..cd3ce9593
--- /dev/null
+++ b/src/doc/nomicon/src/panic-handler.md
@@ -0,0 +1,84 @@
+# #[panic_handler]
+
+`#[panic_handler]` is used to define the behavior of `panic!` in `#![no_std]` applications.
+The `#[panic_handler]` attribute must be applied to a function with signature `fn(&PanicInfo)
+-> !` and such function must appear *once* in the dependency graph of a binary / dylib / cdylib
+crate. The API of `PanicInfo` can be found in the [API docs].
+
+[API docs]: ../core/panic/struct.PanicInfo.html
+
+Given that `#![no_std]` applications have no *standard* output and that some `#![no_std]`
+applications, e.g. embedded applications, need different panicking behaviors for development and for
+release it can be helpful to have panic crates, crate that only contain a `#[panic_handler]`.
+This way applications can easily swap the panicking behavior by simply linking to a different panic
+crate.
+
+Below is shown an example where an application has a different panicking behavior depending on
+whether is compiled using the dev profile (`cargo build`) or using the release profile (`cargo build
+--release`).
+
+`panic-semihosting` crate -- log panic messages to the host stderr using semihosting:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+#![no_std]
+
+use core::fmt::{Write, self};
+use core::panic::PanicInfo;
+
+struct HStderr {
+ // ..
+# _0: (),
+}
+#
+# impl HStderr {
+# fn new() -> HStderr { HStderr { _0: () } }
+# }
+#
+# impl fmt::Write for HStderr {
+# fn write_str(&mut self, _: &str) -> fmt::Result { Ok(()) }
+# }
+
+#[panic_handler]
+fn panic(info: &PanicInfo) -> ! {
+ let mut host_stderr = HStderr::new();
+
+ // logs "panicked at '$reason', src/main.rs:27:4" to the host stderr
+ writeln!(host_stderr, "{}", info).ok();
+
+ loop {}
+}
+```
+
+`panic-halt` crate -- halt the thread on panic; messages are discarded:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+#![no_std]
+
+use core::panic::PanicInfo;
+
+#[panic_handler]
+fn panic(_info: &PanicInfo) -> ! {
+ loop {}
+}
+```
+
+`app` crate:
+
+<!-- ignore: requires the above crates -->
+```rust,ignore
+#![no_std]
+
+// dev profile
+#[cfg(debug_assertions)]
+extern crate panic_semihosting;
+
+// release profile
+#[cfg(not(debug_assertions))]
+extern crate panic_halt;
+
+fn main() {
+ // ..
+}
+```
diff --git a/src/doc/nomicon/src/phantom-data.md b/src/doc/nomicon/src/phantom-data.md
new file mode 100644
index 000000000..ca1c2c21c
--- /dev/null
+++ b/src/doc/nomicon/src/phantom-data.md
@@ -0,0 +1,247 @@
+# PhantomData
+
+When working with unsafe code, we can often end up in a situation where
+types or lifetimes are logically associated with a struct, but not actually
+part of a field. This most commonly occurs with lifetimes. For instance, the
+`Iter` for `&'a [T]` is (approximately) defined as follows:
+
+```rust,compile_fail
+struct Iter<'a, T: 'a> {
+ ptr: *const T,
+ end: *const T,
+}
+```
+
+However because `'a` is unused within the struct's body, it's *unbounded*.
+[Because of the troubles this has historically caused][unused-param],
+unbounded lifetimes and types are *forbidden* in struct definitions.
+Therefore we must somehow refer to these types in the body.
+Correctly doing this is necessary to have correct variance and drop checking.
+
+[unused-param]: https://rust-lang.github.io/rfcs/0738-variance.html#the-corner-case-unused-parameters-and-parameters-that-are-only-used-unsafely
+
+We do this using `PhantomData`, which is a special marker type. `PhantomData`
+consumes no space, but simulates a field of the given type for the purpose of
+static analysis. This was deemed to be less error-prone than explicitly telling
+the type-system the kind of variance that you want, while also providing other
+useful things such as the information needed by drop check.
+
+Iter logically contains a bunch of `&'a T`s, so this is exactly what we tell
+the `PhantomData` to simulate:
+
+```rust
+use std::marker;
+
+struct Iter<'a, T: 'a> {
+ ptr: *const T,
+ end: *const T,
+ _marker: marker::PhantomData<&'a T>,
+}
+```
+
+and that's it. The lifetime will be bounded, and your iterator will be covariant
+over `'a` and `T`. Everything Just Works.
+
+## Generic parameters and drop-checking
+
+In the past, there used to be another thing to take into consideration.
+
+This very documentation used to say:
+
+> Another important example is Vec, which is (approximately) defined as follows:
+>
+> ```rust
+> struct Vec<T> {
+> data: *const T, // *const for variance!
+> len: usize,
+> cap: usize,
+> }
+> ```
+>
+> Unlike the previous example, it *appears* that everything is exactly as we
+> want. Every generic argument to Vec shows up in at least one field.
+> Good to go!
+>
+> Nope.
+>
+> The drop checker will generously determine that `Vec<T>` does not own any values
+> of type T. This will in turn make it conclude that it doesn't need to worry
+> about Vec dropping any T's in its destructor for determining drop check
+> soundness. This will in turn allow people to create unsoundness using
+> Vec's destructor.
+>
+> In order to tell the drop checker that we *do* own values of type T, and
+> therefore may drop some T's when *we* drop, we must add an extra `PhantomData`
+> saying exactly that:
+>
+> ```rust
+> use std::marker;
+>
+> struct Vec<T> {
+> data: *const T, // *const for variance!
+> len: usize,
+> cap: usize,
+> _owns_T: marker::PhantomData<T>,
+> }
+> ```
+
+But ever since [RFC 1238](https://rust-lang.github.io/rfcs/1238-nonparametric-dropck.html),
+**this is no longer true nor necessary**.
+
+If you were to write:
+
+```rust
+struct Vec<T> {
+ data: *const T, // `*const` for variance!
+ len: usize,
+ cap: usize,
+}
+
+# #[cfg(any())]
+impl<T> Drop for Vec<T> { /* … */ }
+```
+
+then the existence of that `impl<T> Drop for Vec<T>` makes it so Rust will consider
+that that `Vec<T>` _owns_ values of type `T` (more precisely: may use values of type `T`
+in its `Drop` implementation), and Rust will thus not allow them to _dangle_ should a
+`Vec<T>` be dropped.
+
+**Adding an extra `_owns_T: PhantomData<T>` field is thus _superfluous_ and accomplishes nothing**.
+
+___
+
+But this situation can sometimes lead to overly restrictive code. That's why the
+standard library uses an unstable and `unsafe` attribute to opt back into the old
+"unchecked" drop-checking behavior, that this very documentation warned about: the
+`#[may_dangle]` attribute.
+
+### An exception: the special case of the standard library and its unstable `#[may_dangle]`
+
+This section can be skipped if you are only writing your own library code; but if you are
+curious about what the standard library does with the actual `Vec` definition, you'll notice
+that it still needs to use a `_owns_T: PhantomData<T>` field for soundness.
+
+<details><summary>Click here to see why</summary>
+
+Consider the following example:
+
+```rust
+fn main() {
+ let mut v: Vec<&str> = Vec::new();
+ let s: String = "Short-lived".into();
+ v.push(&s);
+ drop(s);
+} // <- `v` is dropped here
+```
+
+with a classical `impl<T> Drop for Vec<T> {` definition, the above [is denied].
+
+[is denied]: https://rust.godbolt.org/z/ans15Kqz3
+
+Indeed, in this case we have a `Vec</* T = */ &'s str>` vector of `'s`-lived references
+to `str`ings, but in the case of `let s: String`, it is dropped before the `Vec` is, and
+thus `'s` **is expired** by the time the `Vec` is dropped, and the
+`impl<'s> Drop for Vec<&'s str> {` is used.
+
+This means that if such `Drop` were to be used, it would be dealing with an _expired_, or
+_dangling_ lifetime `'s`. But this is contrary to Rust principles, where by default all
+Rust references involved in a function signature are non-dangling and valid to dereference.
+
+Hence why Rust has to conservatively deny this snippet.
+
+And yet, in the case of the real `Vec`, the `Drop` impl does not care about `&'s str`,
+_since it has no drop glue of its own_: it only wants to deallocate the backing buffer.
+
+In other words, it would be nice if the above snippet was somehow accepted, by special
+casing `Vec`, or by relying on some special property of `Vec`: `Vec` could try to
+_promise not to use the `&'s str`s it holds when being dropped_.
+
+This is the kind of `unsafe` promise that can be expressed with `#[may_dangle]`:
+
+```rust ,ignore
+unsafe impl<#[may_dangle] 's> Drop for Vec<&'s str> { /* … */ }
+```
+
+or, more generally:
+
+```rust ,ignore
+unsafe impl<#[may_dangle] T> Drop for Vec<T> { /* … */ }
+```
+
+is the `unsafe` way to opt out of this conservative assumption that Rust's drop
+checker makes about type parameters of a dropped instance not being allowed to dangle.
+
+And when this is done, such as in the standard library, we need to be careful in the
+case where `T` has drop glue of its own. In this instance, imagine replacing the
+`&'s str`s with a `struct PrintOnDrop<'s> /* = */ (&'s str);` which would have a
+`Drop` impl wherein the inner `&'s str` would be dereferenced and printed to the screen.
+
+Indeed, `Drop for Vec<T> {`, before deallocating the backing buffer, does have to transitively
+drop each `T` item when it has drop glue; in the case of `PrintOnDrop<'s>`, it means that
+`Drop for Vec<PrintOnDrop<'s>>` has to transitively drop the `PrintOnDrop<'s>`s elements before
+deallocating the backing buffer.
+
+So when we said that `'s` `#[may_dangle]`, it was an excessively loose statement. We'd rather want
+to say: "`'s` may dangle provided it not be involved in some transitive drop glue". Or, more generally,
+"`T` may dangle provided it not be involved in some transitive drop glue". This "exception to the
+exception" is a pervasive situation whenever **we own a `T`**. That's why Rust's `#[may_dangle]` is
+smart enough to know of this opt-out, and will thus be disabled _when the generic parameter is held
+in an owned fashion_ by the fields of the struct.
+
+Hence why the standard library ends up with:
+
+```rust
+# #[cfg(any())]
+// we pinky-swear not to use `T` when dropping a `Vec`…
+unsafe impl<#[may_dangle] T> Drop for Vec<T> {
+ fn drop(&mut self) {
+ unsafe {
+ if mem::needs_drop::<T>() {
+ /* … except here, that is, … */
+ ptr::drop_in_place::<[T]>(/* … */);
+ }
+ // …
+ dealloc(/* … */)
+ // …
+ }
+ }
+}
+
+struct Vec<T> {
+ // … except for the fact that a `Vec` owns `T` items and
+ // may thus be dropping `T` items on drop!
+ _owns_T: core::marker::PhantomData<T>,
+
+ ptr: *const T, // `*const` for variance (but this does not express ownership of a `T` *per se*)
+ len: usize,
+ cap: usize,
+}
+```
+
+</details>
+
+___
+
+Raw pointers that own an allocation is such a pervasive pattern that the
+standard library made a utility for itself called `Unique<T>` which:
+
+* wraps a `*const T` for variance
+* includes a `PhantomData<T>`
+* auto-derives `Send`/`Sync` as if T was contained
+* marks the pointer as `NonZero` for the null-pointer optimization
+
+## Table of `PhantomData` patterns
+
+Here’s a table of all the wonderful ways `PhantomData` could be used:
+
+| Phantom type | `'a` | `T` |
+|-----------------------------|-----------|---------------------------|
+| `PhantomData<T>` | - | covariant (with drop check) |
+| `PhantomData<&'a T>` | covariant | covariant |
+| `PhantomData<&'a mut T>` | covariant | invariant |
+| `PhantomData<*const T>` | - | covariant |
+| `PhantomData<*mut T>` | - | invariant |
+| `PhantomData<fn(T)>` | - | contravariant |
+| `PhantomData<fn() -> T>` | - | covariant |
+| `PhantomData<fn(T) -> T>` | - | invariant |
+| `PhantomData<Cell<&'a ()>>` | invariant | - |
diff --git a/src/doc/nomicon/src/poisoning.md b/src/doc/nomicon/src/poisoning.md
new file mode 100644
index 000000000..9b5dec3ee
--- /dev/null
+++ b/src/doc/nomicon/src/poisoning.md
@@ -0,0 +1,35 @@
+# Poisoning
+
+Although all unsafe code *must* ensure it has minimal exception safety, not all
+types ensure *maximal* exception safety. Even if the type does, your code may
+ascribe additional meaning to it. For instance, an integer is certainly
+exception-safe, but has no semantics on its own. It's possible that code that
+panics could fail to correctly update the integer, producing an inconsistent
+program state.
+
+This is *usually* fine, because anything that witnesses an exception is about
+to get destroyed. For instance, if you send a Vec to another thread and that
+thread panics, it doesn't matter if the Vec is in a weird state. It will be
+dropped and go away forever. However some types are especially good at smuggling
+values across the panic boundary.
+
+These types may choose to explicitly *poison* themselves if they witness a panic.
+Poisoning doesn't entail anything in particular. Generally it just means
+preventing normal usage from proceeding. The most notable example of this is the
+standard library's Mutex type. A Mutex will poison itself if one of its
+MutexGuards (the thing it returns when a lock is obtained) is dropped during a
+panic. Any future attempts to lock the Mutex will return an `Err` or panic.
+
+Mutex poisons not for true safety in the sense that Rust normally cares about. It
+poisons as a safety-guard against blindly using the data that comes out of a Mutex
+that has witnessed a panic while locked. The data in such a Mutex was likely in the
+middle of being modified, and as such may be in an inconsistent or incomplete state.
+It is important to note that one cannot violate memory safety with such a type
+if it is correctly written. After all, it must be minimally exception-safe!
+
+However if the Mutex contained, say, a BinaryHeap that does not actually have the
+heap property, it's unlikely that any code that uses it will do
+what the author intended. As such, the program should not proceed normally.
+Still, if you're double-plus-sure that you can do *something* with the value,
+the Mutex exposes a method to get the lock anyway. It *is* safe, after all.
+Just maybe nonsense.
diff --git a/src/doc/nomicon/src/races.md b/src/doc/nomicon/src/races.md
new file mode 100644
index 000000000..cb78ac652
--- /dev/null
+++ b/src/doc/nomicon/src/races.md
@@ -0,0 +1,86 @@
+# Data Races and Race Conditions
+
+Safe Rust guarantees an absence of data races, which are defined as:
+
+* two or more threads concurrently accessing a location of memory
+* one or more of them is a write
+* one or more of them is unsynchronized
+
+A data race has Undefined Behavior, and is therefore impossible to perform
+in Safe Rust. Data races are *mostly* prevented through Rust's ownership system:
+it's impossible to alias a mutable reference, so it's impossible to perform a
+data race. Interior mutability makes this more complicated, which is largely why
+we have the Send and Sync traits (see below).
+
+**However Rust does not prevent general race conditions.**
+
+This is pretty fundamentally impossible, and probably honestly undesirable. Your
+hardware is racy, your OS is racy, the other programs on your computer are racy,
+and the world this all runs in is racy. Any system that could genuinely claim to
+prevent *all* race conditions would be pretty awful to use, if not just
+incorrect.
+
+So it's perfectly "fine" for a Safe Rust program to get deadlocked or do
+something nonsensical with incorrect synchronization. Obviously such a program
+isn't very good, but Rust can only hold your hand so far. Still, a race
+condition can't violate memory safety in a Rust program on its own. Only in
+conjunction with some other unsafe code can a race condition actually violate
+memory safety. For instance:
+
+```rust,no_run
+use std::thread;
+use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::Arc;
+
+let data = vec![1, 2, 3, 4];
+// Arc so that the memory the AtomicUsize is stored in still exists for
+// the other thread to increment, even if we completely finish executing
+// before it. Rust won't compile the program without it, because of the
+// lifetime requirements of thread::spawn!
+let idx = Arc::new(AtomicUsize::new(0));
+let other_idx = idx.clone();
+
+// `move` captures other_idx by-value, moving it into this thread
+thread::spawn(move || {
+ // It's ok to mutate idx because this value
+ // is an atomic, so it can't cause a Data Race.
+ other_idx.fetch_add(10, Ordering::SeqCst);
+});
+
+// Index with the value loaded from the atomic. This is safe because we
+// read the atomic memory only once, and then pass a copy of that value
+// to the Vec's indexing implementation. This indexing will be correctly
+// bounds checked, and there's no chance of the value getting changed
+// in the middle. However our program may panic if the thread we spawned
+// managed to increment before this ran. A race condition because correct
+// program execution (panicking is rarely correct) depends on order of
+// thread execution.
+println!("{}", data[idx.load(Ordering::SeqCst)]);
+```
+
+```rust,no_run
+use std::thread;
+use std::sync::atomic::{AtomicUsize, Ordering};
+use std::sync::Arc;
+
+let data = vec![1, 2, 3, 4];
+
+let idx = Arc::new(AtomicUsize::new(0));
+let other_idx = idx.clone();
+
+// `move` captures other_idx by-value, moving it into this thread
+thread::spawn(move || {
+ // It's ok to mutate idx because this value
+ // is an atomic, so it can't cause a Data Race.
+ other_idx.fetch_add(10, Ordering::SeqCst);
+});
+
+if idx.load(Ordering::SeqCst) < data.len() {
+ unsafe {
+ // Incorrectly loading the idx after we did the bounds check.
+ // It could have changed. This is a race condition, *and dangerous*
+ // because we decided to do `get_unchecked`, which is `unsafe`.
+ println!("{}", data.get_unchecked(idx.load(Ordering::SeqCst)));
+ }
+}
+```
diff --git a/src/doc/nomicon/src/references.md b/src/doc/nomicon/src/references.md
new file mode 100644
index 000000000..294fe1c8a
--- /dev/null
+++ b/src/doc/nomicon/src/references.md
@@ -0,0 +1,31 @@
+# References
+
+There are two kinds of reference:
+
+* Shared reference: `&`
+* Mutable reference: `&mut`
+
+Which obey the following rules:
+
+* A reference cannot outlive its referent
+* A mutable reference cannot be aliased
+
+That's it. That's the whole model references follow.
+
+Of course, we should probably define what *aliased* means.
+
+```text
+error[E0425]: cannot find value `aliased` in this scope
+ --> <rust.rs>:2:20
+ |
+2 | println!("{}", aliased);
+ | ^^^^^^^ not found in this scope
+
+error: aborting due to previous error
+```
+
+Unfortunately, Rust hasn't actually defined its aliasing model. 🙀
+
+While we wait for the Rust devs to specify the semantics of their language,
+let's use the next section to discuss what aliasing is in general, and why it
+matters.
diff --git a/src/doc/nomicon/src/repr-rust.md b/src/doc/nomicon/src/repr-rust.md
new file mode 100644
index 000000000..5275b2327
--- /dev/null
+++ b/src/doc/nomicon/src/repr-rust.md
@@ -0,0 +1,164 @@
+# repr(Rust)
+
+First and foremost, all types have an alignment specified in bytes. The
+alignment of a type specifies what addresses are valid to store the value at. A
+value with alignment `n` must only be stored at an address that is a multiple of
+`n`. So alignment 2 means you must be stored at an even address, and 1 means
+that you can be stored anywhere. Alignment is at least 1, and always a power
+of 2.
+
+Primitives are usually aligned to their size, although this is
+platform-specific behavior. For example, on x86 `u64` and `f64` are often
+aligned to 4 bytes (32 bits).
+
+A type's size must always be a multiple of its alignment (Zero being a valid size
+for any alignment). This ensures that an array of that type may always be indexed
+by offsetting by a multiple of its size. Note that the size and alignment of a
+type may not be known statically in the case of [dynamically sized types][dst].
+
+Rust gives you the following ways to lay out composite data:
+
+* structs (named product types)
+* tuples (anonymous product types)
+* arrays (homogeneous product types)
+* enums (named sum types -- tagged unions)
+* unions (untagged unions)
+
+An enum is said to be *field-less* if none of its variants have associated data.
+
+By default, composite structures have an alignment equal to the maximum
+of their fields' alignments. Rust will consequently insert padding where
+necessary to ensure that all fields are properly aligned and that the overall
+type's size is a multiple of its alignment. For instance:
+
+```rust
+struct A {
+ a: u8,
+ b: u32,
+ c: u16,
+}
+```
+
+will be 32-bit aligned on a target that aligns these primitives to their
+respective sizes. The whole struct will therefore have a size that is a multiple
+of 32-bits. It may become:
+
+```rust
+struct A {
+ a: u8,
+ _pad1: [u8; 3], // to align `b`
+ b: u32,
+ c: u16,
+ _pad2: [u8; 2], // to make overall size multiple of 4
+}
+```
+
+or maybe:
+
+```rust
+struct A {
+ b: u32,
+ c: u16,
+ a: u8,
+ _pad: u8,
+}
+```
+
+There is *no indirection* for these types; all data is stored within the struct,
+as you would expect in C. However with the exception of arrays (which are
+densely packed and in-order), the layout of data is not specified by default.
+Given the two following struct definitions:
+
+```rust
+struct A {
+ a: i32,
+ b: u64,
+}
+
+struct B {
+ a: i32,
+ b: u64,
+}
+```
+
+Rust *does* guarantee that two instances of A have their data laid out in
+exactly the same way. However Rust *does not* currently guarantee that an
+instance of A has the same field ordering or padding as an instance of B.
+
+With A and B as written, this point would seem to be pedantic, but several other
+features of Rust make it desirable for the language to play with data layout in
+complex ways.
+
+For instance, consider this struct:
+
+```rust
+struct Foo<T, U> {
+ count: u16,
+ data1: T,
+ data2: U,
+}
+```
+
+Now consider the monomorphizations of `Foo<u32, u16>` and `Foo<u16, u32>`. If
+Rust lays out the fields in the order specified, we expect it to pad the
+values in the struct to satisfy their alignment requirements. So if Rust
+didn't reorder fields, we would expect it to produce the following:
+
+<!-- ignore: explanation code -->
+```rust,ignore
+struct Foo<u16, u32> {
+ count: u16,
+ data1: u16,
+ data2: u32,
+}
+
+struct Foo<u32, u16> {
+ count: u16,
+ _pad1: u16,
+ data1: u32,
+ data2: u16,
+ _pad2: u16,
+}
+```
+
+The latter case quite simply wastes space. An optimal use of space
+requires different monomorphizations to have *different field orderings*.
+
+Enums make this consideration even more complicated. Naively, an enum such as:
+
+```rust
+enum Foo {
+ A(u32),
+ B(u64),
+ C(u8),
+}
+```
+
+might be laid out as:
+
+```rust
+struct FooRepr {
+ data: u64, // this is either a u64, u32, or u8 based on `tag`
+ tag: u8, // 0 = A, 1 = B, 2 = C
+}
+```
+
+And indeed this is approximately how it would be laid out (modulo the
+size and position of `tag`).
+
+However there are several cases where such a representation is inefficient. The
+classic case of this is Rust's "null pointer optimization": an enum consisting
+of a single outer unit variant (e.g. `None`) and a (potentially nested) non-
+nullable pointer variant (e.g. `Some(&T)`) makes the tag unnecessary. A null
+pointer can safely be interpreted as the unit (`None`) variant. The net
+result is that, for example, `size_of::<Option<&T>>() == size_of::<&T>()`.
+
+There are many types in Rust that are, or contain, non-nullable pointers such as
+`Box<T>`, `Vec<T>`, `String`, `&T`, and `&mut T`. Similarly, one can imagine
+nested enums pooling their tags into a single discriminant, as they are by
+definition known to have a limited range of valid values. In principle enums could
+use fairly elaborate algorithms to store bits throughout nested types with
+forbidden values. As such it is *especially* desirable that
+we leave enum layout unspecified today.
+
+[dst]: exotic-sizes.html#dynamically-sized-types-dsts
diff --git a/src/doc/nomicon/src/safe-unsafe-meaning.md b/src/doc/nomicon/src/safe-unsafe-meaning.md
new file mode 100644
index 000000000..f7cd68cf2
--- /dev/null
+++ b/src/doc/nomicon/src/safe-unsafe-meaning.md
@@ -0,0 +1,166 @@
+# How Safe and Unsafe Interact
+
+What's the relationship between Safe Rust and Unsafe Rust? How do they
+interact?
+
+The separation between Safe Rust and Unsafe Rust is controlled with the
+`unsafe` keyword, which acts as an interface from one to the other. This is
+why we can say Safe Rust is a safe language: all the unsafe parts are kept
+exclusively behind the `unsafe` boundary. If you wish, you can even toss
+`#![forbid(unsafe_code)]` into your code base to statically guarantee that
+you're only writing Safe Rust.
+
+The `unsafe` keyword has two uses: to declare the existence of contracts the
+compiler can't check, and to declare that a programmer has checked that these
+contracts have been upheld.
+
+You can use `unsafe` to indicate the existence of unchecked contracts on
+_functions_ and _trait declarations_. On functions, `unsafe` means that
+users of the function must check that function's documentation to ensure
+they are using it in a way that maintains the contracts the function
+requires. On trait declarations, `unsafe` means that implementors of the
+trait must check the trait documentation to ensure their implementation
+maintains the contracts the trait requires.
+
+You can use `unsafe` on a block to declare that all unsafe actions performed
+within are verified to uphold the contracts of those operations. For instance,
+the index passed to [`slice::get_unchecked`][get_unchecked] is in-bounds.
+
+You can use `unsafe` on a trait implementation to declare that the implementation
+upholds the trait's contract. For instance, that a type implementing [`Send`] is
+really safe to move to another thread.
+
+The standard library has a number of unsafe functions, including:
+
+* [`slice::get_unchecked`][get_unchecked], which performs unchecked indexing,
+ allowing memory safety to be freely violated.
+* [`mem::transmute`][transmute] reinterprets some value as having a given type,
+ bypassing type safety in arbitrary ways (see [conversions] for details).
+* Every raw pointer to a sized type has an [`offset`][ptr_offset] method that
+ invokes Undefined Behavior if the passed offset is not ["in bounds"][ptr_offset].
+* All FFI (Foreign Function Interface) functions are `unsafe` to call because the
+ other language can do arbitrary operations that the Rust compiler can't check.
+
+As of Rust 1.29.2 the standard library defines the following unsafe traits
+(there are others, but they are not stabilized yet and some of them may never
+be):
+
+* [`Send`] is a marker trait (a trait with no API) that promises implementors
+ are safe to send (move) to another thread.
+* [`Sync`] is a marker trait that promises threads can safely share implementors
+ through a shared reference.
+* [`GlobalAlloc`] allows customizing the memory allocator of the whole program.
+
+Much of the Rust standard library also uses Unsafe Rust internally. These
+implementations have generally been rigorously manually checked, so the Safe Rust
+interfaces built on top of these implementations can be assumed to be safe.
+
+The need for all of this separation boils down a single fundamental property
+of Safe Rust, the *soundness property*:
+
+**No matter what, Safe Rust can't cause Undefined Behavior.**
+
+The design of the safe/unsafe split means that there is an asymmetric trust
+relationship between Safe and Unsafe Rust. Safe Rust inherently has to
+trust that any Unsafe Rust it touches has been written correctly.
+On the other hand, Unsafe Rust cannot trust Safe Rust without care.
+
+As an example, Rust has the [`PartialOrd`] and [`Ord`] traits to differentiate
+between types which can "just" be compared, and those that provide a "total"
+ordering (which basically means that comparison behaves reasonably).
+
+[`BTreeMap`] doesn't really make sense for partially-ordered types, and so it
+requires that its keys implement `Ord`. However, `BTreeMap` has Unsafe Rust code
+inside of its implementation. Because it would be unacceptable for a sloppy `Ord`
+implementation (which is Safe to write) to cause Undefined Behavior, the Unsafe
+code in BTreeMap must be written to be robust against `Ord` implementations which
+aren't actually total — even though that's the whole point of requiring `Ord`.
+
+The Unsafe Rust code just can't trust the Safe Rust code to be written correctly.
+That said, `BTreeMap` will still behave completely erratically if you feed in
+values that don't have a total ordering. It just won't ever cause Undefined
+Behavior.
+
+One may wonder, if `BTreeMap` cannot trust `Ord` because it's Safe, why can it
+trust *any* Safe code? For instance `BTreeMap` relies on integers and slices to
+be implemented correctly. Those are safe too, right?
+
+The difference is one of scope. When `BTreeMap` relies on integers and slices,
+it's relying on one very specific implementation. This is a measured risk that
+can be weighed against the benefit. In this case there's basically zero risk;
+if integers and slices are broken, *everyone* is broken. Also, they're maintained
+by the same people who maintain `BTreeMap`, so it's easy to keep tabs on them.
+
+On the other hand, `BTreeMap`'s key type is generic. Trusting its `Ord` implementation
+means trusting every `Ord` implementation in the past, present, and future.
+Here the risk is high: someone somewhere is going to make a mistake and mess up
+their `Ord` implementation, or even just straight up lie about providing a total
+ordering because "it seems to work". When that happens, `BTreeMap` needs to be
+prepared.
+
+The same logic applies to trusting a closure that's passed to you to behave
+correctly.
+
+This problem of unbounded generic trust is the problem that `unsafe` traits
+exist to resolve. The `BTreeMap` type could theoretically require that keys
+implement a new trait called `UnsafeOrd`, rather than `Ord`, that might look
+like this:
+
+```rust
+use std::cmp::Ordering;
+
+unsafe trait UnsafeOrd {
+ fn cmp(&self, other: &Self) -> Ordering;
+}
+```
+
+Then, a type would use `unsafe` to implement `UnsafeOrd`, indicating that
+they've ensured their implementation maintains whatever contracts the
+trait expects. In this situation, the Unsafe Rust in the internals of
+`BTreeMap` would be justified in trusting that the key type's `UnsafeOrd`
+implementation is correct. If it isn't, it's the fault of the unsafe trait
+implementation, which is consistent with Rust's safety guarantees.
+
+The decision of whether to mark a trait `unsafe` is an API design choice. A
+safe trait is easier to implement, but any unsafe code that relies on it must
+defend against incorrect behavior. Marking a trait `unsafe` shifts this
+responsibility to the implementor. Rust has traditionally avoided marking
+traits `unsafe` because it makes Unsafe Rust pervasive, which isn't desirable.
+
+`Send` and `Sync` are marked unsafe because thread safety is a *fundamental
+property* that unsafe code can't possibly hope to defend against in the way it
+could defend against a buggy `Ord` implementation. Similarly, `GlobalAllocator`
+is keeping accounts of all the memory in the program and other things like
+`Box` or `Vec` build on top of it. If it does something weird (giving the same
+chunk of memory to another request when it is still in use), there's no chance
+to detect that and do anything about it.
+
+The decision of whether to mark your own traits `unsafe` depends on the same
+sort of consideration. If `unsafe` code can't reasonably expect to defend
+against a broken implementation of the trait, then marking the trait `unsafe` is
+a reasonable choice.
+
+As an aside, while `Send` and `Sync` are `unsafe` traits, they are *also*
+automatically implemented for types when such derivations are provably safe
+to do. `Send` is automatically derived for all types composed only of values
+whose types also implement `Send`. `Sync` is automatically derived for all
+types composed only of values whose types also implement `Sync`. This minimizes
+the pervasive unsafety of making these two traits `unsafe`. And not many people
+are going to *implement* memory allocators (or use them directly, for that
+matter).
+
+This is the balance between Safe and Unsafe Rust. The separation is designed to
+make using Safe Rust as ergonomic as possible, but requires extra effort and
+care when writing Unsafe Rust. The rest of this book is largely a discussion
+of the sort of care that must be taken, and what contracts Unsafe Rust must uphold.
+
+[`Send`]: ../std/marker/trait.Send.html
+[`Sync`]: ../std/marker/trait.Sync.html
+[`GlobalAlloc`]: ../std/alloc/trait.GlobalAlloc.html
+[conversions]: conversions.html
+[ptr_offset]: ../std/primitive.pointer.html#method.offset
+[get_unchecked]: ../std/primitive.slice.html#method.get_unchecked
+[transmute]: ../std/mem/fn.transmute.html
+[`PartialOrd`]: ../std/cmp/trait.PartialOrd.html
+[`Ord`]: ../std/cmp/trait.Ord.html
+[`BTreeMap`]: ../std/collections/struct.BTreeMap.html
diff --git a/src/doc/nomicon/src/send-and-sync.md b/src/doc/nomicon/src/send-and-sync.md
new file mode 100644
index 000000000..34539daa3
--- /dev/null
+++ b/src/doc/nomicon/src/send-and-sync.md
@@ -0,0 +1,257 @@
+# Send and Sync
+
+Not everything obeys inherited mutability, though. Some types allow you to
+have multiple aliases of a location in memory while mutating it. Unless these types use
+synchronization to manage this access, they are absolutely not thread-safe. Rust
+captures this through the `Send` and `Sync` traits.
+
+* A type is Send if it is safe to send it to another thread.
+* A type is Sync if it is safe to share between threads (T is Sync if and only if `&T` is Send).
+
+Send and Sync are fundamental to Rust's concurrency story. As such, a
+substantial amount of special tooling exists to make them work right. First and
+foremost, they're [unsafe traits]. This means that they are unsafe to
+implement, and other unsafe code can assume that they are correctly
+implemented. Since they're *marker traits* (they have no associated items like
+methods), correctly implemented simply means that they have the intrinsic
+properties an implementor should have. Incorrectly implementing Send or Sync can
+cause Undefined Behavior.
+
+Send and Sync are also automatically derived traits. This means that, unlike
+every other trait, if a type is composed entirely of Send or Sync types, then it
+is Send or Sync. Almost all primitives are Send and Sync, and as a consequence
+pretty much all types you'll ever interact with are Send and Sync.
+
+Major exceptions include:
+
+* raw pointers are neither Send nor Sync (because they have no safety guards).
+* `UnsafeCell` isn't Sync (and therefore `Cell` and `RefCell` aren't).
+* `Rc` isn't Send or Sync (because the refcount is shared and unsynchronized).
+
+`Rc` and `UnsafeCell` are very fundamentally not thread-safe: they enable
+unsynchronized shared mutable state. However raw pointers are, strictly
+speaking, marked as thread-unsafe as more of a *lint*. Doing anything useful
+with a raw pointer requires dereferencing it, which is already unsafe. In that
+sense, one could argue that it would be "fine" for them to be marked as thread
+safe.
+
+However it's important that they aren't thread-safe to prevent types that
+contain them from being automatically marked as thread-safe. These types have
+non-trivial untracked ownership, and it's unlikely that their author was
+necessarily thinking hard about thread safety. In the case of `Rc`, we have a nice
+example of a type that contains a `*mut` that is definitely not thread-safe.
+
+Types that aren't automatically derived can simply implement them if desired:
+
+```rust
+struct MyBox(*mut u8);
+
+unsafe impl Send for MyBox {}
+unsafe impl Sync for MyBox {}
+```
+
+In the *incredibly rare* case that a type is inappropriately automatically
+derived to be Send or Sync, then one can also unimplement Send and Sync:
+
+```rust
+#![feature(negative_impls)]
+
+// I have some magic semantics for some synchronization primitive!
+struct SpecialThreadToken(u8);
+
+impl !Send for SpecialThreadToken {}
+impl !Sync for SpecialThreadToken {}
+```
+
+Note that *in and of itself* it is impossible to incorrectly derive Send and
+Sync. Only types that are ascribed special meaning by other unsafe code can
+possibly cause trouble by being incorrectly Send or Sync.
+
+Most uses of raw pointers should be encapsulated behind a sufficient abstraction
+that Send and Sync can be derived. For instance all of Rust's standard
+collections are Send and Sync (when they contain Send and Sync types) in spite
+of their pervasive use of raw pointers to manage allocations and complex ownership.
+Similarly, most iterators into these collections are Send and Sync because they
+largely behave like an `&` or `&mut` into the collection.
+
+## Example
+
+[`Box`][box-doc] is implemented as its own special intrinsic type by the
+compiler for [various reasons][box-is-special], but we can implement something
+with similar-ish behavior ourselves to see an example of when it is sound to
+implement Send and Sync. Let's call it a `Carton`.
+
+We start by writing code to take a value allocated on the stack and transfer it
+to the heap.
+
+```rust
+# pub mod libc {
+# pub use ::std::os::raw::{c_int, c_void};
+# #[allow(non_camel_case_types)]
+# pub type size_t = usize;
+# extern "C" { pub fn posix_memalign(memptr: *mut *mut c_void, align: size_t, size: size_t) -> c_int; }
+# }
+use std::{
+ mem::{align_of, size_of},
+ ptr,
+};
+
+struct Carton<T>(ptr::NonNull<T>);
+
+impl<T> Carton<T> {
+ pub fn new(value: T) -> Self {
+ // Allocate enough memory on the heap to store one T.
+ assert_ne!(size_of::<T>(), 0, "Zero-sized types are out of the scope of this example");
+ let mut memptr: *mut T = ptr::null_mut();
+ unsafe {
+ let ret = libc::posix_memalign(
+ (&mut memptr).cast(),
+ align_of::<T>(),
+ size_of::<T>()
+ );
+ assert_eq!(ret, 0, "Failed to allocate or invalid alignment");
+ };
+
+ // NonNull is just a wrapper that enforces that the pointer isn't null.
+ let ptr = {
+ // Safety: memptr is dereferenceable because we created it from a
+ // reference and have exclusive access.
+ ptr::NonNull::new(memptr)
+ .expect("Guaranteed non-null if posix_memalign returns 0")
+ };
+
+ // Move value from the stack to the location we allocated on the heap.
+ unsafe {
+ // Safety: If non-null, posix_memalign gives us a ptr that is valid
+ // for writes and properly aligned.
+ ptr.as_ptr().write(value);
+ }
+
+ Self(ptr)
+ }
+}
+```
+
+This isn't very useful, because once our users give us a value they have no way
+to access it. [`Box`][box-doc] implements [`Deref`][deref-doc] and
+[`DerefMut`][deref-mut-doc] so that you can access the inner value. Let's do
+that.
+
+```rust
+use std::ops::{Deref, DerefMut};
+
+# struct Carton<T>(std::ptr::NonNull<T>);
+#
+impl<T> Deref for Carton<T> {
+ type Target = T;
+
+ fn deref(&self) -> &Self::Target {
+ unsafe {
+ // Safety: The pointer is aligned, initialized, and dereferenceable
+ // by the logic in [`Self::new`]. We require readers to borrow the
+ // Carton, and the lifetime of the return value is elided to the
+ // lifetime of the input. This means the borrow checker will
+ // enforce that no one can mutate the contents of the Carton until
+ // the reference returned is dropped.
+ self.0.as_ref()
+ }
+ }
+}
+
+impl<T> DerefMut for Carton<T> {
+ fn deref_mut(&mut self) -> &mut Self::Target {
+ unsafe {
+ // Safety: The pointer is aligned, initialized, and dereferenceable
+ // by the logic in [`Self::new`]. We require writers to mutably
+ // borrow the Carton, and the lifetime of the return value is
+ // elided to the lifetime of the input. This means the borrow
+ // checker will enforce that no one else can access the contents
+ // of the Carton until the mutable reference returned is dropped.
+ self.0.as_mut()
+ }
+ }
+}
+```
+
+Finally, let's think about whether our `Carton` is Send and Sync. Something can
+safely be Send unless it shares mutable state with something else without
+enforcing exclusive access to it. Each `Carton` has a unique pointer, so
+we're good.
+
+```rust
+# struct Carton<T>(std::ptr::NonNull<T>);
+// Safety: No one besides us has the raw pointer, so we can safely transfer the
+// Carton to another thread if T can be safely transferred.
+unsafe impl<T> Send for Carton<T> where T: Send {}
+```
+
+What about Sync? For `Carton` to be Sync we have to enforce that you can't
+write to something stored in a `&Carton` while that same something could be read
+or written to from another `&Carton`. Since you need an `&mut Carton` to
+write to the pointer, and the borrow checker enforces that mutable
+references must be exclusive, there are no soundness issues making `Carton`
+sync either.
+
+```rust
+# struct Carton<T>(std::ptr::NonNull<T>);
+// Safety: Since there exists a public way to go from a `&Carton<T>` to a `&T`
+// in an unsynchronized fashion (such as `Deref`), then `Carton<T>` can't be
+// `Sync` if `T` isn't.
+// Conversely, `Carton` itself does not use any interior mutability whatsoever:
+// all the mutations are performed through an exclusive reference (`&mut`). This
+// means it suffices that `T` be `Sync` for `Carton<T>` to be `Sync`:
+unsafe impl<T> Sync for Carton<T> where T: Sync {}
+```
+
+When we assert our type is Send and Sync we usually need to enforce that every
+contained type is Send and Sync. When writing custom types that behave like
+standard library types we can assert that we have the same requirements.
+For example, the following code asserts that a Carton is Send if the same
+sort of Box would be Send, which in this case is the same as saying T is Send.
+
+```rust
+# struct Carton<T>(std::ptr::NonNull<T>);
+unsafe impl<T> Send for Carton<T> where Box<T>: Send {}
+```
+
+Right now `Carton<T>` has a memory leak, as it never frees the memory it allocates.
+Once we fix that we have a new requirement we have to ensure we meet to be Send:
+we need to know `free` can be called on a pointer that was yielded by an
+allocation done on another thread. We can check this is true in the docs for
+[`libc::free`][libc-free-docs].
+
+```rust
+# struct Carton<T>(std::ptr::NonNull<T>);
+# mod libc {
+# pub use ::std::os::raw::c_void;
+# extern "C" { pub fn free(p: *mut c_void); }
+# }
+impl<T> Drop for Carton<T> {
+ fn drop(&mut self) {
+ unsafe {
+ libc::free(self.0.as_ptr().cast());
+ }
+ }
+}
+```
+
+A nice example where this does not happen is with a MutexGuard: notice how
+[it is not Send][mutex-guard-not-send-docs-rs]. The implementation of MutexGuard
+[uses libraries][mutex-guard-not-send-comment] that require you to ensure you
+don't try to free a lock that you acquired in a different thread. If you were
+able to Send a MutexGuard to another thread the destructor would run in the
+thread you sent it to, violating the requirement. MutexGuard can still be Sync
+because all you can send to another thread is an `&MutexGuard` and dropping a
+reference does nothing.
+
+TODO: better explain what can or can't be Send or Sync. Sufficient to appeal
+only to data races?
+
+[unsafe traits]: safe-unsafe-meaning.html
+[box-doc]: https://doc.rust-lang.org/std/boxed/struct.Box.html
+[box-is-special]: https://manishearth.github.io/blog/2017/01/10/rust-tidbits-box-is-special/
+[deref-doc]: https://doc.rust-lang.org/core/ops/trait.Deref.html
+[deref-mut-doc]: https://doc.rust-lang.org/core/ops/trait.DerefMut.html
+[mutex-guard-not-send-docs-rs]: https://doc.rust-lang.org/std/sync/struct.MutexGuard.html#impl-Send
+[mutex-guard-not-send-comment]: https://github.com/rust-lang/rust/issues/23465#issuecomment-82730326
+[libc-free-docs]: https://linux.die.net/man/3/free
diff --git a/src/doc/nomicon/src/subtyping.md b/src/doc/nomicon/src/subtyping.md
new file mode 100644
index 000000000..91e870e5e
--- /dev/null
+++ b/src/doc/nomicon/src/subtyping.md
@@ -0,0 +1,454 @@
+# Subtyping and Variance
+
+Subtyping is a relationship between types that allows statically typed
+languages to be a bit more flexible and permissive.
+
+Subtyping in Rust is a bit different from subtyping in other languages. This
+makes it harder to give simple examples, which is a problem since subtyping,
+and especially variance, is already hard to understand properly. As in,
+even compiler writers mess it up all the time.
+
+To keep things simple, this section will consider a small extension to the
+Rust language that adds a new and simpler subtyping relationship. After
+establishing concepts and issues under this simpler system,
+we will then relate it back to how subtyping actually occurs in Rust.
+
+So here's our simple extension, *Objective Rust*, featuring three new types:
+
+```rust
+trait Animal {
+ fn snuggle(&self);
+ fn eat(&mut self);
+}
+
+trait Cat: Animal {
+ fn meow(&self);
+}
+
+trait Dog: Animal {
+ fn bark(&self);
+}
+```
+
+But unlike normal traits, we can use them as concrete and sized types, just like structs.
+
+Now, say we have a very simple function that takes an Animal, like this:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn love(pet: Animal) {
+ pet.snuggle();
+}
+```
+
+By default, static types must match *exactly* for a program to compile. As such,
+this code won't compile:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let mr_snuggles: Cat = ...;
+love(mr_snuggles); // ERROR: expected Animal, found Cat
+```
+
+Mr. Snuggles is a Cat, and Cats aren't *exactly* Animals, so we can't love him! 😿
+
+This is annoying because Cats *are* Animals. They support every operation
+an Animal supports, so intuitively `love` shouldn't care if we pass it a `Cat`.
+We should be able to just **forget** the non-animal parts of our `Cat`, as they
+aren't necessary to love it.
+
+This is exactly the problem that *subtyping* is intended to fix. Because Cats are just
+Animals **and more**, we say Cat is a *subtype* of Animal (because Cats are a *subset*
+of all the Animals). Equivalently, we say that Animal is a *supertype* of Cat.
+With subtypes, we can tweak our overly strict static type system
+with a simple rule: anywhere a value of type `T` is expected, we will also
+accept values that are subtypes of `T`.
+
+Or more concretely: anywhere an Animal is expected, a Cat or Dog will also work.
+
+As we will see throughout the rest of this section, subtyping is a lot more complicated
+and subtle than this, but this simple rule is a very good 99% intuition. And unless you
+write unsafe code, the compiler will automatically handle all the corner cases for you.
+
+But this is the Rustonomicon. We're writing unsafe code, so we need to understand how
+this stuff really works, and how we can mess it up.
+
+The core problem is that this rule, naively applied, will lead to *meowing Dogs*. That is,
+we can convince someone that a Dog is actually a Cat. This completely destroys the fabric
+of our static type system, making it worse than useless (and leading to Undefined Behavior).
+
+Here's a simple example of this happening when we apply subtyping in a completely naive
+"find and replace" way.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn evil_feeder(pet: &mut Animal) {
+ let spike: Dog = ...;
+
+ // `pet` is an Animal, and Dog is a subtype of Animal,
+ // so this should be fine, right..?
+ *pet = spike;
+}
+
+fn main() {
+ let mut mr_snuggles: Cat = ...;
+ evil_feeder(&mut mr_snuggles); // Replaces mr_snuggles with a Dog
+ mr_snuggles.meow(); // OH NO, MEOWING DOG!
+}
+```
+
+Clearly, we need a more robust system than "find and replace". That system is *variance*,
+which is a set of rules governing how subtyping should compose. Most importantly, variance
+defines situations where subtyping should be disabled.
+
+But before we get into variance, let's take a quick peek at where subtyping actually occurs in
+Rust: *lifetimes*!
+
+> NOTE: The typed-ness of lifetimes is a fairly arbitrary construct that some
+> disagree with. However it simplifies our analysis to treat lifetimes
+> and types uniformly.
+
+Lifetimes are just regions of code, and regions can be partially ordered with the *contains*
+(outlives) relationship. Subtyping on lifetimes is in terms of that relationship:
+if `'big: 'small` ("big contains small" or "big outlives small"), then `'big` is a subtype
+of `'small`. This is a large source of confusion, because it seems backwards
+to many: the bigger region is a *subtype* of the smaller region. But it makes
+sense if you consider our Animal example: Cat is an Animal *and more*,
+just as `'big` is `'small` *and more*.
+
+Put another way, if someone wants a reference that lives for `'small`,
+usually what they actually mean is that they want a reference that lives
+for *at least* `'small`. They don't actually care if the lifetimes match
+exactly. So it should be ok for us to **forget** that something lives for
+`'big` and only remember that it lives for `'small`.
+
+The meowing dog problem for lifetimes will result in us being able to
+store a short-lived reference in a place that expects a longer-lived one,
+creating a dangling reference and letting us use-after-free.
+
+It will be useful to note that `'static`, the forever lifetime, is a subtype of
+every lifetime because by definition it outlives everything. We will be using
+this relationship in later examples to keep them as simple as possible.
+
+With all that said, we still have no idea how to actually *use* subtyping of lifetimes,
+because nothing ever has type `'a`. Lifetimes only occur as part of some larger type
+like `&'a u32` or `IterMut<'a, u32>`. To apply lifetime subtyping, we need to know
+how to compose subtyping. Once again, we need *variance*.
+
+## Variance
+
+Variance is where things get a bit complicated.
+
+Variance is a property that *type constructors* have with respect to their
+arguments. A type constructor in Rust is any generic type with unbound arguments.
+For instance `Vec` is a type constructor that takes a type `T` and returns
+`Vec<T>`. `&` and `&mut` are type constructors that take two inputs: a
+lifetime, and a type to point to.
+
+> NOTE: For convenience we will often refer to `F<T>` as a type constructor just so
+> that we can easily talk about `T`. Hopefully this is clear in context.
+
+A type constructor F's *variance* is how the subtyping of its inputs affects the
+subtyping of its outputs. There are three kinds of variance in Rust. Given two
+types `Sub` and `Super`, where `Sub` is a subtype of `Super`:
+
+* `F` is *covariant* if `F<Sub>` is a subtype of `F<Super>` (subtyping "passes through")
+* `F` is *contravariant* if `F<Super>` is a subtype of `F<Sub>` (subtyping is "inverted")
+* `F` is *invariant* otherwise (no subtyping relationship exists)
+
+If `F` has multiple type parameters, we can talk about the individual variances
+by saying that, for example, `F<T, U>` is covariant over `T` and invariant over `U`.
+
+It is very useful to keep in mind that covariance is, in practical terms, "the"
+variance. Almost all consideration of variance is in terms of whether something
+should be covariant or invariant. Actually witnessing contravariance is quite difficult
+in Rust, though it does in fact exist.
+
+Here is a table of important variances which the rest of this section will be devoted
+to trying to explain:
+
+| | | 'a | T | U |
+|---|-----------------|:---------:|:-----------------:|:---------:|
+| * | `&'a T ` | covariant | covariant | |
+| * | `&'a mut T` | covariant | invariant | |
+| * | `Box<T>` | | covariant | |
+| | `Vec<T>` | | covariant | |
+| * | `UnsafeCell<T>` | | invariant | |
+| | `Cell<T>` | | invariant | |
+| * | `fn(T) -> U` | | **contra**variant | covariant |
+| | `*const T` | | covariant | |
+| | `*mut T` | | invariant | |
+
+The types with \*'s are the ones we will be focusing on, as they are in
+some sense "fundamental". All the others can be understood by analogy to the others:
+
+* `Vec<T>` and all other owning pointers and collections follow the same logic as `Box<T>`
+* `Cell<T>` and all other interior mutability types follow the same logic as `UnsafeCell<T>`
+* `*const T` follows the logic of `&T`
+* `*mut T` follows the logic of `&mut T` (or `UnsafeCell<T>`)
+
+For more types, see the ["Variance" section][variance-table] on the reference.
+
+[variance-table]: ../reference/subtyping.html#variance
+
+> NOTE: the *only* source of contravariance in the language is the arguments to
+> a function, which is why it really doesn't come up much in practice. Invoking
+> contravariance involves higher-order programming with function pointers that
+> take references with specific lifetimes (as opposed to the usual "any lifetime",
+> which gets into higher rank lifetimes, which work independently of subtyping).
+
+Ok, that's enough type theory! Let's try to apply the concept of variance to Rust
+and look at some examples.
+
+First off, let's revisit the meowing dog example:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn evil_feeder(pet: &mut Animal) {
+ let spike: Dog = ...;
+
+ // `pet` is an Animal, and Dog is a subtype of Animal,
+ // so this should be fine, right..?
+ *pet = spike;
+}
+
+fn main() {
+ let mut mr_snuggles: Cat = ...;
+ evil_feeder(&mut mr_snuggles); // Replaces mr_snuggles with a Dog
+ mr_snuggles.meow(); // OH NO, MEOWING DOG!
+}
+```
+
+If we look at our table of variances, we see that `&mut T` is *invariant* over `T`.
+As it turns out, this completely fixes the issue! With invariance, the fact that
+Cat is a subtype of Animal doesn't matter; `&mut Cat` still won't be a subtype of
+`&mut Animal`. The static type checker will then correctly stop us from passing
+a Cat into `evil_feeder`.
+
+The soundness of subtyping is based on the idea that it's ok to forget unnecessary
+details. But with references, there's always someone that remembers those details:
+the value being referenced. That value expects those details to keep being true,
+and may behave incorrectly if its expectations are violated.
+
+The problem with making `&mut T` covariant over `T` is that it gives us the power
+to modify the original value *when we don't remember all of its constraints*.
+And so, we can make someone have a Dog when they're certain they still have a Cat.
+
+With that established, we can easily see why `&T` being covariant over `T` *is*
+sound: it doesn't let you modify the value, only look at it. Without any way to
+mutate, there's no way for us to mess with any details. We can also see why
+`UnsafeCell` and all the other interior mutability types must be invariant: they
+make `&T` work like `&mut T`!
+
+Now what about the lifetime on references? Why is it ok for both kinds of references
+to be covariant over their lifetimes? Well, here's a two-pronged argument:
+
+First and foremost, subtyping references based on their lifetimes is *the entire point
+of subtyping in Rust*. The only reason we have subtyping is so we can pass
+long-lived things where short-lived things are expected. So it better work!
+
+Second, and more seriously, lifetimes are only a part of the reference itself. The
+type of the referent is shared knowledge, which is why adjusting that type in only
+one place (the reference) can lead to issues. But if you shrink down a reference's
+lifetime when you hand it to someone, that lifetime information isn't shared in
+any way. There are now two independent references with independent lifetimes.
+There's no way to mess with original reference's lifetime using the other one.
+
+Or rather, the only way to mess with someone's lifetime is to build a meowing dog.
+But as soon as you try to build a meowing dog, the lifetime should be wrapped up
+in an invariant type, preventing the lifetime from being shrunk. To understand this
+better, let's port the meowing dog problem over to real Rust.
+
+In the meowing dog problem we take a subtype (Cat), convert it into a supertype
+(Animal), and then use that fact to overwrite the subtype with a value that satisfies
+the constraints of the supertype but not the subtype (Dog).
+
+So with lifetimes, we want to take a long-lived thing, convert it into a
+short-lived thing, and then use that to write something that doesn't live long
+enough into the place expecting something long-lived.
+
+Here it is:
+
+```rust,compile_fail
+fn evil_feeder<T>(input: &mut T, val: T) {
+ *input = val;
+}
+
+fn main() {
+ let mut mr_snuggles: &'static str = "meow! :3"; // mr. snuggles forever!!
+ {
+ let spike = String::from("bark! >:V");
+ let spike_str: &str = &spike; // Only lives for the block
+ evil_feeder(&mut mr_snuggles, spike_str); // EVIL!
+ }
+ println!("{}", mr_snuggles); // Use after free?
+}
+```
+
+And what do we get when we run this?
+
+```text
+error[E0597]: `spike` does not live long enough
+ --> src/main.rs:9:31
+ |
+6 | let mut mr_snuggles: &'static str = "meow! :3"; // mr. snuggles forever!!
+ | ------------ type annotation requires that `spike` is borrowed for `'static`
+...
+9 | let spike_str: &str = &spike; // Only lives for the block
+ | ^^^^^^ borrowed value does not live long enough
+10 | evil_feeder(&mut mr_snuggles, spike_str); // EVIL!
+11 | }
+ | - `spike` dropped here while still borrowed
+```
+
+Good, it doesn't compile! Let's break down what's happening here in detail.
+
+First let's look at the new `evil_feeder` function:
+
+```rust
+fn evil_feeder<T>(input: &mut T, val: T) {
+ *input = val;
+}
+```
+
+All it does is take a mutable reference and a value and overwrite the referent with it.
+What's important about this function is that it creates a type equality constraint. It
+clearly says in its signature the referent and the value must be the *exact same* type.
+
+Meanwhile, in the caller we pass in `&mut &'static str` and `&'spike_str str`.
+
+Because `&mut T` is invariant over `T`, the compiler concludes it can't apply any subtyping
+to the first argument, and so `T` must be exactly `&'static str`.
+
+The other argument is only an `&'a str`, which *is* covariant over `'a`. So the compiler
+adopts a constraint: `&'spike_str str` must be a subtype of `&'static str` (inclusive),
+which in turn implies `'spike_str` must be a subtype of `'static` (inclusive). Which is to say,
+`'spike_str` must contain `'static`. But only one thing contains `'static` -- `'static` itself!
+
+This is why we get an error when we try to assign `&spike` to `spike_str`. The
+compiler has worked backwards to conclude `spike_str` must live forever, and `&spike`
+simply can't live that long.
+
+So even though references are covariant over their lifetimes, they "inherit" invariance
+whenever they're put into a context that could do something bad with that. In this case,
+we inherited invariance as soon as we put our reference inside an `&mut T`.
+
+As it turns out, the argument for why it's ok for Box (and Vec, Hashmap, etc.) to
+be covariant is pretty similar to the argument for why it's ok for
+lifetimes to be covariant: as soon as you try to stuff them in something like a
+mutable reference, they inherit invariance and you're prevented from doing anything
+bad.
+
+However Box makes it easier to focus on by-value aspect of references that we
+partially glossed over.
+
+Unlike a lot of languages which allow values to be freely aliased at all times,
+Rust has a very strict rule: if you're allowed to mutate or move a value, you
+are guaranteed to be the only one with access to it.
+
+Consider the following code:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+let mr_snuggles: Box<Cat> = ..;
+let spike: Box<Dog> = ..;
+
+let mut pet: Box<Animal>;
+pet = mr_snuggles;
+pet = spike;
+```
+
+There is no problem at all with the fact that we have forgotten that `mr_snuggles` was a Cat,
+or that we overwrote him with a Dog, because as soon as we moved mr_snuggles to a variable
+that only knew he was an Animal, **we destroyed the only thing in the universe that
+remembered he was a Cat**!
+
+In contrast to the argument about immutable references being soundly covariant because they
+don't let you change anything, owned values can be covariant because they make you
+change *everything*. There is no connection between old locations and new locations.
+Applying by-value subtyping is an irreversible act of knowledge destruction, and
+without any memory of how things used to be, no one can be tricked into acting on
+that old information!
+
+Only one thing left to explain: function pointers.
+
+To see why `fn(T) -> U` should be covariant over `U`, consider the following signature:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn get_animal() -> Animal;
+```
+
+This function claims to produce an Animal. As such, it is perfectly valid to
+provide a function with the following signature instead:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn get_animal() -> Cat;
+```
+
+After all, Cats are Animals, so always producing a Cat is a perfectly valid way
+to produce Animals. Or to relate it back to real Rust: if we need a function
+that is supposed to produce something that lives for `'short`, it's perfectly
+fine for it to produce something that lives for `'long`. We don't care, we can
+just forget that fact.
+
+However, the same logic does not apply to *arguments*. Consider trying to satisfy:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn handle_animal(Animal);
+```
+
+with:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn handle_animal(Cat);
+```
+
+The first function can accept Dogs, but the second function absolutely can't.
+Covariance doesn't work here. But if we flip it around, it actually *does*
+work! If we need a function that can handle Cats, a function that can handle *any*
+Animal will surely work fine. Or to relate it back to real Rust: if we need a
+function that can handle anything that lives for at least `'long`, it's perfectly
+fine for it to be able to handle anything that lives for at least `'short`.
+
+And that's why function types, unlike anything else in the language, are
+**contra**variant over their arguments.
+
+Now, this is all well and good for the types the standard library provides, but
+how is variance determined for types that *you* define? A struct, informally
+speaking, inherits the variance of its fields. If a struct `MyType`
+has a generic argument `A` that is used in a field `a`, then MyType's variance
+over `A` is exactly `a`'s variance over `A`.
+
+However if `A` is used in multiple fields:
+
+* If all uses of `A` are covariant, then MyType is covariant over `A`
+* If all uses of `A` are contravariant, then MyType is contravariant over `A`
+* Otherwise, MyType is invariant over `A`
+
+```rust
+use std::cell::Cell;
+
+struct MyType<'a, 'b, A: 'a, B: 'b, C, D, E, F, G, H, In, Out, Mixed> {
+ a: &'a A, // covariant over 'a and A
+ b: &'b mut B, // covariant over 'b and invariant over B
+
+ c: *const C, // covariant over C
+ d: *mut D, // invariant over D
+
+ e: E, // covariant over E
+ f: Vec<F>, // covariant over F
+ g: Cell<G>, // invariant over G
+
+ h1: H, // would also be covariant over H except...
+ h2: Cell<H>, // invariant over H, because invariance wins all conflicts
+
+ i: fn(In) -> Out, // contravariant over In, covariant over Out
+
+ k1: fn(Mixed) -> usize, // would be contravariant over Mixed except..
+ k2: Mixed, // invariant over Mixed, because invariance wins all conflicts
+}
+```
diff --git a/src/doc/nomicon/src/transmutes.md b/src/doc/nomicon/src/transmutes.md
new file mode 100644
index 000000000..1f6d7d568
--- /dev/null
+++ b/src/doc/nomicon/src/transmutes.md
@@ -0,0 +1,59 @@
+# Transmutes
+
+Get out of our way type system! We're going to reinterpret these bits or die
+trying! Even though this book is all about doing things that are unsafe, I
+really can't emphasize that you should deeply think about finding Another Way
+than the operations covered in this section. This is really, truly, the most
+horribly unsafe thing you can do in Rust. The guardrails here are dental floss.
+
+[`mem::transmute<T, U>`][transmute] takes a value of type `T` and reinterprets
+it to have type `U`. The only restriction is that the `T` and `U` are verified
+to have the same size. The ways to cause Undefined Behavior with this are mind
+boggling.
+
+* First and foremost, creating an instance of *any* type with an invalid state
+ is going to cause arbitrary chaos that can't really be predicted. Do not
+ transmute `3` to `bool`. Even if you never *do* anything with the `bool`. Just
+ don't.
+
+* Transmute has an overloaded return type. If you do not specify the return type
+ it may produce a surprising type to satisfy inference.
+
+* Transmuting an `&` to `&mut` is Undefined Behavior. While certain usages may
+ *appear* safe, note that the Rust optimizer is free to assume that a shared
+ reference won't change through its lifetime and thus such transmutation will
+ run afoul of those assumptions. So:
+ * Transmuting an `&` to `&mut` is *always* Undefined Behavior.
+ * No you can't do it.
+ * No you're not special.
+
+* Transmuting to a reference without an explicitly provided lifetime
+ produces an [unbounded lifetime].
+
+* When transmuting between different compound types, you have to make sure they
+ are laid out the same way! If layouts differ, the wrong fields are going to
+ get filled with the wrong data, which will make you unhappy and can also be
+ Undefined Behavior (see above).
+
+ So how do you know if the layouts are the same? For `repr(C)` types and
+ `repr(transparent)` types, layout is precisely defined. But for your
+ run-of-the-mill `repr(Rust)`, it is not. Even different instances of the same
+ generic type can have wildly different layout. `Vec<i32>` and `Vec<u32>`
+ *might* have their fields in the same order, or they might not. The details of
+ what exactly is and is not guaranteed for data layout are still being worked
+ out over [at the UCG WG][ucg-layout].
+
+[`mem::transmute_copy<T, U>`][transmute_copy] somehow manages to be *even more*
+wildly unsafe than this. It copies `size_of<U>` bytes out of an `&T` and
+interprets them as a `U`. The size check that `mem::transmute` has is gone (as
+it may be valid to copy out a prefix), though it is Undefined Behavior for `U`
+to be larger than `T`.
+
+Also of course you can get all of the functionality of these functions using raw
+pointer casts or `union`s, but without any of the lints or other basic sanity
+checks. Raw pointer casts and `union`s do not magically avoid the above rules.
+
+[unbounded lifetime]: ./unbounded-lifetimes.md
+[transmute]: ../std/mem/fn.transmute.html
+[transmute_copy]: ../std/mem/fn.transmute_copy.html
+[ucg-layout]: https://rust-lang.github.io/unsafe-code-guidelines/layout.html
diff --git a/src/doc/nomicon/src/unbounded-lifetimes.md b/src/doc/nomicon/src/unbounded-lifetimes.md
new file mode 100644
index 000000000..03febd6ad
--- /dev/null
+++ b/src/doc/nomicon/src/unbounded-lifetimes.md
@@ -0,0 +1,36 @@
+# Unbounded Lifetimes
+
+Unsafe code can often end up producing references or lifetimes out of thin air.
+Such lifetimes come into the world as *unbounded*. The most common source of this
+is dereferencing a raw pointer, which produces a reference with an unbounded lifetime.
+Such a lifetime becomes as big as context demands. This is in fact more powerful
+than simply becoming `'static`, because for instance `&'static &'a T`
+will fail to typecheck, but the unbound lifetime will perfectly mold into
+`&'a &'a T` as needed. However for most intents and purposes, such an unbounded
+lifetime can be regarded as `'static`.
+
+Almost no reference is `'static`, so this is probably wrong. `transmute` and
+`transmute_copy` are the two other primary offenders. One should endeavor to
+bound an unbounded lifetime as quickly as possible, especially across function
+boundaries.
+
+Given a function, any output lifetimes that don't derive from inputs are
+unbounded. For instance:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn get_str<'a>() -> &'a str;
+```
+
+will produce an `&str` with an unbounded lifetime. The easiest way to avoid
+unbounded lifetimes is to use lifetime elision at the function boundary.
+If an output lifetime is elided, then it *must* be bounded by an input lifetime.
+Of course it might be bounded by the *wrong* lifetime, but this will usually
+just cause a compiler error, rather than allow memory safety to be trivially
+violated.
+
+Within a function, bounding lifetimes is more error-prone. The safest and easiest
+way to bound a lifetime is to return it from a function with a bound lifetime.
+However if this is unacceptable, the reference can be placed in a location with
+a specific lifetime. Unfortunately it's impossible to name all lifetimes involved
+in a function.
diff --git a/src/doc/nomicon/src/unchecked-uninit.md b/src/doc/nomicon/src/unchecked-uninit.md
new file mode 100644
index 000000000..c61415c97
--- /dev/null
+++ b/src/doc/nomicon/src/unchecked-uninit.md
@@ -0,0 +1,174 @@
+# Unchecked Uninitialized Memory
+
+One interesting exception to this rule is working with arrays. Safe Rust doesn't
+permit you to partially initialize an array. When you initialize an array, you
+can either set every value to the same thing with `let x = [val; N]`, or you can
+specify each member individually with `let x = [val1, val2, val3]`.
+Unfortunately this is pretty rigid, especially if you need to initialize your
+array in a more incremental or dynamic way.
+
+Unsafe Rust gives us a powerful tool to handle this problem:
+[`MaybeUninit`]. This type can be used to handle memory that has not been fully
+initialized yet.
+
+With `MaybeUninit`, we can initialize an array element-for-element as follows:
+
+```rust
+use std::mem::{self, MaybeUninit};
+
+// Size of the array is hard-coded but easy to change (meaning, changing just
+// the constant is sufficient). This means we can't use [a, b, c] syntax to
+// initialize the array, though, as we would have to keep that in sync
+// with `SIZE`!
+const SIZE: usize = 10;
+
+let x = {
+ // Create an uninitialized array of `MaybeUninit`. The `assume_init` is
+ // safe because the type we are claiming to have initialized here is a
+ // bunch of `MaybeUninit`s, which do not require initialization.
+ let mut x: [MaybeUninit<Box<u32>>; SIZE] = unsafe {
+ MaybeUninit::uninit().assume_init()
+ };
+
+ // Dropping a `MaybeUninit` does nothing. Thus using raw pointer
+ // assignment instead of `ptr::write` does not cause the old
+ // uninitialized value to be dropped.
+ // Exception safety is not a concern because Box can't panic
+ for i in 0..SIZE {
+ x[i] = MaybeUninit::new(Box::new(i as u32));
+ }
+
+ // Everything is initialized. Transmute the array to the
+ // initialized type.
+ unsafe { mem::transmute::<_, [Box<u32>; SIZE]>(x) }
+};
+
+dbg!(x);
+```
+
+This code proceeds in three steps:
+
+1. Create an array of `MaybeUninit<T>`. With current stable Rust, we have to use
+ unsafe code for this: we take some uninitialized piece of memory
+ (`MaybeUninit::uninit()`) and claim we have fully initialized it
+ ([`assume_init()`][assume_init]). This seems ridiculous, because we didn't!
+ The reason this is correct is that the array consists itself entirely of
+ `MaybeUninit`, which do not actually require initialization. For most other
+ types, doing `MaybeUninit::uninit().assume_init()` produces an invalid
+ instance of said type, so you got yourself some Undefined Behavior.
+
+2. Initialize the array. The subtle aspect of this is that usually, when we use
+ `=` to assign to a value that the Rust type checker considers to already be
+ initialized (like `x[i]`), the old value stored on the left-hand side gets
+ dropped. This would be a disaster. However, in this case, the type of the
+ left-hand side is `MaybeUninit<Box<u32>>`, and dropping that does not do
+ anything! See below for some more discussion of this `drop` issue.
+
+3. Finally, we have to change the type of our array to remove the
+ `MaybeUninit`. With current stable Rust, this requires a `transmute`.
+ This transmute is legal because in memory, `MaybeUninit<T>` looks the same as `T`.
+
+ However, note that in general, `Container<MaybeUninit<T>>>` does *not* look
+ the same as `Container<T>`! Imagine if `Container` was `Option`, and `T` was
+ `bool`, then `Option<bool>` exploits that `bool` only has two valid values,
+ but `Option<MaybeUninit<bool>>` cannot do that because the `bool` does not
+ have to be initialized.
+
+ So, it depends on `Container` whether transmuting away the `MaybeUninit` is
+ allowed. For arrays, it is (and eventually the standard library will
+ acknowledge that by providing appropriate methods).
+
+It's worth spending a bit more time on the loop in the middle, and in particular
+the assignment operator and its interaction with `drop`. If we would have
+written something like:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+*x[i].as_mut_ptr() = Box::new(i as u32); // WRONG!
+```
+
+we would actually overwrite a `Box<u32>`, leading to `drop` of uninitialized
+data, which will cause much sadness and pain.
+
+The correct alternative, if for some reason we cannot use `MaybeUninit::new`, is
+to use the [`ptr`] module. In particular, it provides three functions that allow
+us to assign bytes to a location in memory without dropping the old value:
+[`write`], [`copy`], and [`copy_nonoverlapping`].
+
+* `ptr::write(ptr, val)` takes a `val` and moves it into the address pointed
+ to by `ptr`.
+* `ptr::copy(src, dest, count)` copies the bits that `count` T's would occupy
+ from src to dest. (this is equivalent to C's memmove -- note that the argument
+ order is reversed!)
+* `ptr::copy_nonoverlapping(src, dest, count)` does what `copy` does, but a
+ little faster on the assumption that the two ranges of memory don't overlap.
+ (this is equivalent to C's memcpy -- note that the argument order is reversed!)
+
+It should go without saying that these functions, if misused, will cause serious
+havoc or just straight up Undefined Behavior. The only things that these
+functions *themselves* require is that the locations you want to read and write
+are allocated and properly aligned. However, the ways writing arbitrary bits to
+arbitrary locations of memory can break things are basically uncountable!
+
+It's worth noting that you don't need to worry about `ptr::write`-style
+shenanigans with types which don't implement `Drop` or contain `Drop` types,
+because Rust knows not to try to drop them. This is what we relied on in the
+above example.
+
+However when working with uninitialized memory you need to be ever-vigilant for
+Rust trying to drop values you make like this before they're fully initialized.
+Every control path through that variable's scope must initialize the value
+before it ends, if it has a destructor.
+*[This includes code panicking](unwinding.html)*. `MaybeUninit` helps a bit
+here, because it does not implicitly drop its content - but all this really
+means in case of a panic is that instead of a double-free of the not yet
+initialized parts, you end up with a memory leak of the already initialized
+parts.
+
+Note that, to use the `ptr` methods, you need to first obtain a *raw pointer* to
+the data you want to initialize. It is illegal to construct a *reference* to
+uninitialized data, which implies that you have to be careful when obtaining
+said raw pointer:
+
+* For an array of `T`, you can use `base_ptr.add(idx)` where `base_ptr: *mut T`
+to compute the address of array index `idx`. This relies on
+how arrays are laid out in memory.
+* For a struct, however, in general we do not know how it is laid out, and we
+also cannot use `&mut base_ptr.field` as that would be creating a
+reference. So, you must carefully use the [`addr_of_mut`] macro. This creates
+a raw pointer to the field without creating an intermediate reference:
+
+```rust
+use std::{ptr, mem::MaybeUninit};
+
+struct Demo {
+ field: bool,
+}
+
+let mut uninit = MaybeUninit::<Demo>::uninit();
+// `&uninit.as_mut().field` would create a reference to an uninitialized `bool`,
+// and thus be Undefined Behavior!
+let f1_ptr = unsafe { ptr::addr_of_mut!((*uninit.as_mut_ptr()).field) };
+unsafe { f1_ptr.write(true); }
+
+let init = unsafe { uninit.assume_init() };
+```
+
+One last remark: when reading old Rust code, you might stumble upon the
+deprecated `mem::uninitialized` function. That function used to be the only way
+to deal with uninitialized memory on the stack, but it turned out to be
+impossible to properly integrate with the rest of the language. Always use
+`MaybeUninit` instead in new code, and port old code over when you get the
+opportunity.
+
+And that's about it for working with uninitialized memory! Basically nothing
+anywhere expects to be handed uninitialized memory, so if you're going to pass
+it around at all, be sure to be *really* careful.
+
+[`MaybeUninit`]: ../core/mem/union.MaybeUninit.html
+[assume_init]: ../core/mem/union.MaybeUninit.html#method.assume_init
+[`ptr`]: ../core/ptr/index.html
+[`addr_of_mut`]: ../core/ptr/macro.addr_of_mut.html
+[`write`]: ../core/ptr/fn.write.html
+[`copy`]: ../std/ptr/fn.copy.html
+[`copy_nonoverlapping`]: ../std/ptr/fn.copy_nonoverlapping.html
diff --git a/src/doc/nomicon/src/uninitialized.md b/src/doc/nomicon/src/uninitialized.md
new file mode 100644
index 000000000..eafc67907
--- /dev/null
+++ b/src/doc/nomicon/src/uninitialized.md
@@ -0,0 +1,10 @@
+# Working With Uninitialized Memory
+
+All runtime-allocated memory in a Rust program begins its life as
+*uninitialized*. In this state the value of the memory is an indeterminate pile
+of bits that may or may not even reflect a valid state for the type that is
+supposed to inhabit that location of memory. Attempting to interpret this memory
+as a value of *any* type will cause Undefined Behavior. Do Not Do This.
+
+Rust provides mechanisms to work with uninitialized memory in checked (safe) and
+unchecked (unsafe) ways.
diff --git a/src/doc/nomicon/src/unwinding.md b/src/doc/nomicon/src/unwinding.md
new file mode 100644
index 000000000..aec2a68ce
--- /dev/null
+++ b/src/doc/nomicon/src/unwinding.md
@@ -0,0 +1,51 @@
+# Unwinding
+
+Rust has a *tiered* error-handling scheme:
+
+* If something might reasonably be absent, Option is used.
+* If something goes wrong and can reasonably be handled, Result is used.
+* If something goes wrong and cannot reasonably be handled, the thread panics.
+* If something catastrophic happens, the program aborts.
+
+Option and Result are overwhelmingly preferred in most situations, especially
+since they can be promoted into a panic or abort at the API user's discretion.
+Panics cause the thread to halt normal execution and unwind its stack, calling
+destructors as if every function instantly returned.
+
+As of 1.0, Rust is of two minds when it comes to panics. In the long-long-ago,
+Rust was much more like Erlang. Like Erlang, Rust had lightweight tasks,
+and tasks were intended to kill themselves with a panic when they reached an
+untenable state. Unlike an exception in Java or C++, a panic could not be
+caught at any time. Panics could only be caught by the owner of the task, at which
+point they had to be handled or *that* task would itself panic.
+
+Unwinding was important to this story because if a task's
+destructors weren't called, it would cause memory and other system resources to
+leak. Since tasks were expected to die during normal execution, this would make
+Rust very poor for long-running systems!
+
+As the Rust we know today came to be, this style of programming grew out of
+fashion in the push for less-and-less abstraction. Light-weight tasks were
+killed in the name of heavy-weight OS threads. Still, on stable Rust as of 1.0
+panics can only be caught by the parent thread. This means catching a panic
+requires spinning up an entire OS thread! This unfortunately stands in conflict
+to Rust's philosophy of zero-cost abstractions.
+
+There is an API called [`catch_unwind`] that enables catching a panic
+without spawning a thread. Still, we would encourage you to only do this
+sparingly. In particular, Rust's current unwinding implementation is heavily
+optimized for the "doesn't unwind" case. If a program doesn't unwind, there
+should be no runtime cost for the program being *ready* to unwind. As a
+consequence, actually unwinding will be more expensive than in e.g. Java.
+Don't build your programs to unwind under normal circumstances. Ideally, you
+should only panic for programming errors or *extreme* problems.
+
+Rust's unwinding strategy is not specified to be fundamentally compatible
+with any other language's unwinding. As such, unwinding into Rust from another
+language, or unwinding into another language from Rust is Undefined Behavior.
+You must *absolutely* catch any panics at the FFI boundary! What you do at that
+point is up to you, but *something* must be done. If you fail to do this,
+at best, your application will crash and burn. At worst, your application *won't*
+crash and burn, and will proceed with completely clobbered state.
+
+[`catch_unwind`]: https://doc.rust-lang.org/std/panic/fn.catch_unwind.html
diff --git a/src/doc/nomicon/src/vec/vec-alloc.md b/src/doc/nomicon/src/vec/vec-alloc.md
new file mode 100644
index 000000000..6c69c9379
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-alloc.md
@@ -0,0 +1,213 @@
+# Allocating Memory
+
+Using `NonNull` throws a wrench in an important feature of Vec (and indeed all of
+the std collections): creating an empty Vec doesn't actually allocate at all. This
+is not the same as allocating a zero-sized memory block, which is not allowed by
+the global allocator (it results in undefined behavior!). So if we can't allocate,
+but also can't put a null pointer in `ptr`, what do we do in `Vec::new`? Well, we
+just put some other garbage in there!
+
+This is perfectly fine because we already have `cap == 0` as our sentinel for no
+allocation. We don't even need to handle it specially in almost any code because
+we usually need to check if `cap > len` or `len > 0` anyway. The recommended
+Rust value to put here is `mem::align_of::<T>()`. `NonNull` provides a convenience
+for this: `NonNull::dangling()`. There are quite a few places where we'll
+want to use `dangling` because there's no real allocation to talk about but
+`null` would make the compiler do bad things.
+
+So:
+
+<!-- ignore: explanation code -->
+```rust,ignore
+use std::mem;
+
+impl<T> Vec<T> {
+ pub fn new() -> Self {
+ assert!(mem::size_of::<T>() != 0, "We're not ready to handle ZSTs");
+ Vec {
+ ptr: NonNull::dangling(),
+ len: 0,
+ cap: 0,
+ _marker: PhantomData,
+ }
+ }
+}
+# fn main() {}
+```
+
+I slipped in that assert there because zero-sized types will require some
+special handling throughout our code, and I want to defer the issue for now.
+Without this assert, some of our early drafts will do some Very Bad Things.
+
+Next we need to figure out what to actually do when we *do* want space. For that,
+we use the global allocation functions [`alloc`][alloc], [`realloc`][realloc],
+and [`dealloc`][dealloc] which are available in stable Rust in
+[`std::alloc`][std_alloc]. These functions are expected to become deprecated in
+favor of the methods of [`std::alloc::Global`][Global] after this type is stabilized.
+
+We'll also need a way to handle out-of-memory (OOM) conditions. The standard
+library provides a function [`alloc::handle_alloc_error`][handle_alloc_error],
+which will abort the program in a platform-specific manner.
+The reason we abort and don't panic is because unwinding can cause allocations
+to happen, and that seems like a bad thing to do when your allocator just came
+back with "hey I don't have any more memory".
+
+Of course, this is a bit silly since most platforms don't actually run out of
+memory in a conventional way. Your operating system will probably kill the
+application by another means if you legitimately start using up all the memory.
+The most likely way we'll trigger OOM is by just asking for ludicrous quantities
+of memory at once (e.g. half the theoretical address space). As such it's
+*probably* fine to panic and nothing bad will happen. Still, we're trying to be
+like the standard library as much as possible, so we'll just kill the whole
+program.
+
+Okay, now we can write growing. Roughly, we want to have this logic:
+
+```text
+if cap == 0:
+ allocate()
+ cap = 1
+else:
+ reallocate()
+ cap *= 2
+```
+
+But Rust's only supported allocator API is so low level that we'll need to do a
+fair bit of extra work. We also need to guard against some special
+conditions that can occur with really large allocations or empty allocations.
+
+In particular, `ptr::offset` will cause us a lot of trouble, because it has
+the semantics of LLVM's GEP inbounds instruction. If you're fortunate enough to
+not have dealt with this instruction, here's the basic story with GEP: alias
+analysis, alias analysis, alias analysis. It's super important to an optimizing
+compiler to be able to reason about data dependencies and aliasing.
+
+As a simple example, consider the following fragment of code:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+*x *= 7;
+*y *= 3;
+```
+
+If the compiler can prove that `x` and `y` point to different locations in
+memory, the two operations can in theory be executed in parallel (by e.g.
+loading them into different registers and working on them independently).
+However the compiler can't do this in general because if x and y point to
+the same location in memory, the operations need to be done to the same value,
+and they can't just be merged afterwards.
+
+When you use GEP inbounds, you are specifically telling LLVM that the offsets
+you're about to do are within the bounds of a single "allocated" entity. The
+ultimate payoff being that LLVM can assume that if two pointers are known to
+point to two disjoint objects, all the offsets of those pointers are *also*
+known to not alias (because you won't just end up in some random place in
+memory). LLVM is heavily optimized to work with GEP offsets, and inbounds
+offsets are the best of all, so it's important that we use them as much as
+possible.
+
+So that's what GEP's about, how can it cause us trouble?
+
+The first problem is that we index into arrays with unsigned integers, but
+GEP (and as a consequence `ptr::offset`) takes a signed integer. This means
+that half of the seemingly valid indices into an array will overflow GEP and
+actually go in the wrong direction! As such we must limit all allocations to
+`isize::MAX` elements. This actually means we only need to worry about
+byte-sized objects, because e.g. `> isize::MAX` `u16`s will truly exhaust all of
+the system's memory. However in order to avoid subtle corner cases where someone
+reinterprets some array of `< isize::MAX` objects as bytes, std limits all
+allocations to `isize::MAX` bytes.
+
+On all 64-bit targets that Rust currently supports we're artificially limited
+to significantly less than all 64 bits of the address space (modern x64
+platforms only expose 48-bit addressing), so we can rely on just running out of
+memory first. However on 32-bit targets, particularly those with extensions to
+use more of the address space (PAE x86 or x32), it's theoretically possible to
+successfully allocate more than `isize::MAX` bytes of memory.
+
+However since this is a tutorial, we're not going to be particularly optimal
+here, and just unconditionally check, rather than use clever platform-specific
+`cfg`s.
+
+The other corner-case we need to worry about is empty allocations. There will
+be two kinds of empty allocations we need to worry about: `cap = 0` for all T,
+and `cap > 0` for zero-sized types.
+
+These cases are tricky because they come
+down to what LLVM means by "allocated". LLVM's notion of an
+allocation is significantly more abstract than how we usually use it. Because
+LLVM needs to work with different languages' semantics and custom allocators,
+it can't really intimately understand allocation. Instead, the main idea behind
+allocation is "doesn't overlap with other stuff". That is, heap allocations,
+stack allocations, and globals don't randomly overlap. Yep, it's about alias
+analysis. As such, Rust can technically play a bit fast and loose with the notion of
+an allocation as long as it's *consistent*.
+
+Getting back to the empty allocation case, there are a couple of places where
+we want to offset by 0 as a consequence of generic code. The question is then:
+is it consistent to do so? For zero-sized types, we have concluded that it is
+indeed consistent to do a GEP inbounds offset by an arbitrary number of
+elements. This is a runtime no-op because every element takes up no space,
+and it's fine to pretend that there's infinite zero-sized types allocated
+at `0x01`. No allocator will ever allocate that address, because they won't
+allocate `0x00` and they generally allocate to some minimal alignment higher
+than a byte. Also generally the whole first page of memory is
+protected from being allocated anyway (a whole 4k, on many platforms).
+
+However what about for positive-sized types? That one's a bit trickier. In
+principle, you can argue that offsetting by 0 gives LLVM no information: either
+there's an element before the address or after it, but it can't know which.
+However we've chosen to conservatively assume that it may do bad things. As
+such we will guard against this case explicitly.
+
+*Phew*
+
+Ok with all the nonsense out of the way, let's actually allocate some memory:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::alloc::{self, Layout};
+
+impl<T> Vec<T> {
+ fn grow(&mut self) {
+ let (new_cap, new_layout) = if self.cap == 0 {
+ (1, Layout::array::<T>(1).unwrap())
+ } else {
+ // This can't overflow since self.cap <= isize::MAX.
+ let new_cap = 2 * self.cap;
+
+ // `Layout::array` checks that the number of bytes is <= usize::MAX,
+ // but this is redundant since old_layout.size() <= isize::MAX,
+ // so the `unwrap` should never fail.
+ let new_layout = Layout::array::<T>(new_cap).unwrap();
+ (new_cap, new_layout)
+ };
+
+ // Ensure that the new allocation doesn't exceed `isize::MAX` bytes.
+ assert!(new_layout.size() <= isize::MAX as usize, "Allocation too large");
+
+ let new_ptr = if self.cap == 0 {
+ unsafe { alloc::alloc(new_layout) }
+ } else {
+ let old_layout = Layout::array::<T>(self.cap).unwrap();
+ let old_ptr = self.ptr.as_ptr() as *mut u8;
+ unsafe { alloc::realloc(old_ptr, old_layout, new_layout.size()) }
+ };
+
+ // If allocation fails, `new_ptr` will be null, in which case we abort.
+ self.ptr = match NonNull::new(new_ptr as *mut T) {
+ Some(p) => p,
+ None => alloc::handle_alloc_error(new_layout),
+ };
+ self.cap = new_cap;
+ }
+}
+# fn main() {}
+```
+
+[Global]: ../../std/alloc/struct.Global.html
+[handle_alloc_error]: ../../alloc/alloc/fn.handle_alloc_error.html
+[alloc]: ../../alloc/alloc/fn.alloc.html
+[realloc]: ../../alloc/alloc/fn.realloc.html
+[dealloc]: ../../alloc/alloc/fn.dealloc.html
+[std_alloc]: ../../alloc/alloc/index.html
diff --git a/src/doc/nomicon/src/vec/vec-dealloc.md b/src/doc/nomicon/src/vec/vec-dealloc.md
new file mode 100644
index 000000000..d403f92d2
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-dealloc.md
@@ -0,0 +1,26 @@
+# Deallocating
+
+Next we should implement Drop so that we don't massively leak tons of resources.
+The easiest way is to just call `pop` until it yields None, and then deallocate
+our buffer. Note that calling `pop` is unneeded if `T: !Drop`. In theory we can
+ask Rust if `T` `needs_drop` and omit the calls to `pop`. However in practice
+LLVM is *really* good at removing simple side-effect free code like this, so I
+wouldn't bother unless you notice it's not being stripped (in this case it is).
+
+We must not call `alloc::dealloc` when `self.cap == 0`, as in this case we
+haven't actually allocated any memory.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Drop for Vec<T> {
+ fn drop(&mut self) {
+ if self.cap != 0 {
+ while let Some(_) = self.pop() { }
+ let layout = Layout::array::<T>(self.cap).unwrap();
+ unsafe {
+ alloc::dealloc(self.ptr.as_ptr() as *mut u8, layout);
+ }
+ }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/vec/vec-deref.md b/src/doc/nomicon/src/vec/vec-deref.md
new file mode 100644
index 000000000..3021cb08b
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-deref.md
@@ -0,0 +1,44 @@
+# Deref
+
+Alright! We've got a decent minimal stack implemented. We can push, we can
+pop, and we can clean up after ourselves. However there's a whole mess of
+functionality we'd reasonably want. In particular, we have a proper array, but
+none of the slice functionality. That's actually pretty easy to solve: we can
+implement `Deref<Target=[T]>`. This will magically make our Vec coerce to, and
+behave like, a slice in all sorts of conditions.
+
+All we need is `slice::from_raw_parts`. It will correctly handle empty slices
+for us. Later once we set up zero-sized type support it will also Just Work
+for those too.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::ops::Deref;
+
+impl<T> Deref for Vec<T> {
+ type Target = [T];
+ fn deref(&self) -> &[T] {
+ unsafe {
+ std::slice::from_raw_parts(self.ptr.as_ptr(), self.len)
+ }
+ }
+}
+```
+
+And let's do DerefMut too:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::ops::DerefMut;
+
+impl<T> DerefMut for Vec<T> {
+ fn deref_mut(&mut self) -> &mut [T] {
+ unsafe {
+ std::slice::from_raw_parts_mut(self.ptr.as_ptr(), self.len)
+ }
+ }
+}
+```
+
+Now we have `len`, `first`, `last`, indexing, slicing, sorting, `iter`,
+`iter_mut`, and all other sorts of bells and whistles provided by slice. Sweet!
diff --git a/src/doc/nomicon/src/vec/vec-drain.md b/src/doc/nomicon/src/vec/vec-drain.md
new file mode 100644
index 000000000..7a0e7f81a
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-drain.md
@@ -0,0 +1,158 @@
+# Drain
+
+Let's move on to Drain. Drain is largely the same as IntoIter, except that
+instead of consuming the Vec, it borrows the Vec and leaves its allocation
+untouched. For now we'll only implement the "basic" full-range version.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::marker::PhantomData;
+
+struct Drain<'a, T: 'a> {
+ // Need to bound the lifetime here, so we do it with `&'a mut Vec<T>`
+ // because that's semantically what we contain. We're "just" calling
+ // `pop()` and `remove(0)`.
+ vec: PhantomData<&'a mut Vec<T>>,
+ start: *const T,
+ end: *const T,
+}
+
+impl<'a, T> Iterator for Drain<'a, T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+```
+
+-- wait, this is seeming familiar. Let's do some more compression. Both
+IntoIter and Drain have the exact same structure, let's just factor it out.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+struct RawValIter<T> {
+ start: *const T,
+ end: *const T,
+}
+
+impl<T> RawValIter<T> {
+ // unsafe to construct because it has no associated lifetimes.
+ // This is necessary to store a RawValIter in the same struct as
+ // its actual allocation. OK since it's a private implementation
+ // detail.
+ unsafe fn new(slice: &[T]) -> Self {
+ RawValIter {
+ start: slice.as_ptr(),
+ end: if slice.len() == 0 {
+ // if `len = 0`, then this is not actually allocated memory.
+ // Need to avoid offsetting because that will give wrong
+ // information to LLVM via GEP.
+ slice.as_ptr()
+ } else {
+ slice.as_ptr().add(slice.len())
+ }
+ }
+ }
+}
+
+// Iterator and DoubleEndedIterator impls identical to IntoIter.
+```
+
+And IntoIter becomes the following:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub struct IntoIter<T> {
+ _buf: RawVec<T>, // we don't actually care about this. Just need it to live.
+ iter: RawValIter<T>,
+}
+
+impl<T> Iterator for IntoIter<T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> { self.iter.next() }
+ fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
+}
+
+impl<T> DoubleEndedIterator for IntoIter<T> {
+ fn next_back(&mut self) -> Option<T> { self.iter.next_back() }
+}
+
+impl<T> Drop for IntoIter<T> {
+ fn drop(&mut self) {
+ for _ in &mut *self {}
+ }
+}
+
+impl<T> IntoIterator for Vec<T> {
+ type Item = T;
+ type IntoIter = IntoIter<T>;
+ fn into_iter(self) -> IntoIter<T> {
+ unsafe {
+ let iter = RawValIter::new(&self);
+
+ let buf = ptr::read(&self.buf);
+ mem::forget(self);
+
+ IntoIter {
+ iter: iter,
+ _buf: buf,
+ }
+ }
+ }
+}
+```
+
+Note that I've left a few quirks in this design to make upgrading Drain to work
+with arbitrary subranges a bit easier. In particular we *could* have RawValIter
+drain itself on drop, but that won't work right for a more complex Drain.
+We also take a slice to simplify Drain initialization.
+
+Alright, now Drain is really easy:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+use std::marker::PhantomData;
+
+pub struct Drain<'a, T: 'a> {
+ vec: PhantomData<&'a mut Vec<T>>,
+ iter: RawValIter<T>,
+}
+
+impl<'a, T> Iterator for Drain<'a, T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> { self.iter.next() }
+ fn size_hint(&self) -> (usize, Option<usize>) { self.iter.size_hint() }
+}
+
+impl<'a, T> DoubleEndedIterator for Drain<'a, T> {
+ fn next_back(&mut self) -> Option<T> { self.iter.next_back() }
+}
+
+impl<'a, T> Drop for Drain<'a, T> {
+ fn drop(&mut self) {
+ for _ in &mut *self {}
+ }
+}
+
+impl<T> Vec<T> {
+ pub fn drain(&mut self) -> Drain<T> {
+ unsafe {
+ let iter = RawValIter::new(&self);
+
+ // this is a mem::forget safety thing. If Drain is forgotten, we just
+ // leak the whole Vec's contents. Also we need to do this *eventually*
+ // anyway, so why not do it now?
+ self.len = 0;
+
+ Drain {
+ iter: iter,
+ vec: PhantomData,
+ }
+ }
+ }
+}
+```
+
+For more details on the `mem::forget` problem, see the
+[section on leaks][leaks].
+
+[leaks]: ../leaking.html
diff --git a/src/doc/nomicon/src/vec/vec-final.md b/src/doc/nomicon/src/vec/vec-final.md
new file mode 100644
index 000000000..1f8af37ad
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-final.md
@@ -0,0 +1,409 @@
+# The Final Code
+
+```rust
+use std::alloc::{self, Layout};
+use std::marker::PhantomData;
+use std::mem;
+use std::ops::{Deref, DerefMut};
+use std::ptr::{self, NonNull};
+
+struct RawVec<T> {
+ ptr: NonNull<T>,
+ cap: usize,
+ _marker: PhantomData<T>,
+}
+
+unsafe impl<T: Send> Send for RawVec<T> {}
+unsafe impl<T: Sync> Sync for RawVec<T> {}
+
+impl<T> RawVec<T> {
+ fn new() -> Self {
+ // !0 is usize::MAX. This branch should be stripped at compile time.
+ let cap = if mem::size_of::<T>() == 0 { !0 } else { 0 };
+
+ // `NonNull::dangling()` doubles as "unallocated" and "zero-sized allocation"
+ RawVec {
+ ptr: NonNull::dangling(),
+ cap: cap,
+ _marker: PhantomData,
+ }
+ }
+
+ fn grow(&mut self) {
+ // since we set the capacity to usize::MAX when T has size 0,
+ // getting to here necessarily means the Vec is overfull.
+ assert!(mem::size_of::<T>() != 0, "capacity overflow");
+
+ let (new_cap, new_layout) = if self.cap == 0 {
+ (1, Layout::array::<T>(1).unwrap())
+ } else {
+ // This can't overflow because we ensure self.cap <= isize::MAX.
+ let new_cap = 2 * self.cap;
+
+ // `Layout::array` checks that the number of bytes is <= usize::MAX,
+ // but this is redundant since old_layout.size() <= isize::MAX,
+ // so the `unwrap` should never fail.
+ let new_layout = Layout::array::<T>(new_cap).unwrap();
+ (new_cap, new_layout)
+ };
+
+ // Ensure that the new allocation doesn't exceed `isize::MAX` bytes.
+ assert!(
+ new_layout.size() <= isize::MAX as usize,
+ "Allocation too large"
+ );
+
+ let new_ptr = if self.cap == 0 {
+ unsafe { alloc::alloc(new_layout) }
+ } else {
+ let old_layout = Layout::array::<T>(self.cap).unwrap();
+ let old_ptr = self.ptr.as_ptr() as *mut u8;
+ unsafe { alloc::realloc(old_ptr, old_layout, new_layout.size()) }
+ };
+
+ // If allocation fails, `new_ptr` will be null, in which case we abort.
+ self.ptr = match NonNull::new(new_ptr as *mut T) {
+ Some(p) => p,
+ None => alloc::handle_alloc_error(new_layout),
+ };
+ self.cap = new_cap;
+ }
+}
+
+impl<T> Drop for RawVec<T> {
+ fn drop(&mut self) {
+ let elem_size = mem::size_of::<T>();
+
+ if self.cap != 0 && elem_size != 0 {
+ unsafe {
+ alloc::dealloc(
+ self.ptr.as_ptr() as *mut u8,
+ Layout::array::<T>(self.cap).unwrap(),
+ );
+ }
+ }
+ }
+}
+
+pub struct Vec<T> {
+ buf: RawVec<T>,
+ len: usize,
+}
+
+impl<T> Vec<T> {
+ fn ptr(&self) -> *mut T {
+ self.buf.ptr.as_ptr()
+ }
+
+ fn cap(&self) -> usize {
+ self.buf.cap
+ }
+
+ pub fn new() -> Self {
+ Vec {
+ buf: RawVec::new(),
+ len: 0,
+ }
+ }
+ pub fn push(&mut self, elem: T) {
+ if self.len == self.cap() {
+ self.buf.grow();
+ }
+
+ unsafe {
+ ptr::write(self.ptr().add(self.len), elem);
+ }
+
+ // Can't overflow, we'll OOM first.
+ self.len += 1;
+ }
+
+ pub fn pop(&mut self) -> Option<T> {
+ if self.len == 0 {
+ None
+ } else {
+ self.len -= 1;
+ unsafe { Some(ptr::read(self.ptr().add(self.len))) }
+ }
+ }
+
+ pub fn insert(&mut self, index: usize, elem: T) {
+ assert!(index <= self.len, "index out of bounds");
+ if self.cap() == self.len {
+ self.buf.grow();
+ }
+
+ unsafe {
+ ptr::copy(
+ self.ptr().add(index),
+ self.ptr().add(index + 1),
+ self.len - index,
+ );
+ ptr::write(self.ptr().add(index), elem);
+ self.len += 1;
+ }
+ }
+
+ pub fn remove(&mut self, index: usize) -> T {
+ assert!(index < self.len, "index out of bounds");
+ unsafe {
+ self.len -= 1;
+ let result = ptr::read(self.ptr().add(index));
+ ptr::copy(
+ self.ptr().add(index + 1),
+ self.ptr().add(index),
+ self.len - index,
+ );
+ result
+ }
+ }
+
+ pub fn drain(&mut self) -> Drain<T> {
+ unsafe {
+ let iter = RawValIter::new(&self);
+
+ // this is a mem::forget safety thing. If Drain is forgotten, we just
+ // leak the whole Vec's contents. Also we need to do this *eventually*
+ // anyway, so why not do it now?
+ self.len = 0;
+
+ Drain {
+ iter: iter,
+ vec: PhantomData,
+ }
+ }
+ }
+}
+
+impl<T> Drop for Vec<T> {
+ fn drop(&mut self) {
+ while let Some(_) = self.pop() {}
+ // deallocation is handled by RawVec
+ }
+}
+
+impl<T> Deref for Vec<T> {
+ type Target = [T];
+ fn deref(&self) -> &[T] {
+ unsafe { std::slice::from_raw_parts(self.ptr(), self.len) }
+ }
+}
+
+impl<T> DerefMut for Vec<T> {
+ fn deref_mut(&mut self) -> &mut [T] {
+ unsafe { std::slice::from_raw_parts_mut(self.ptr(), self.len) }
+ }
+}
+
+impl<T> IntoIterator for Vec<T> {
+ type Item = T;
+ type IntoIter = IntoIter<T>;
+ fn into_iter(self) -> IntoIter<T> {
+ unsafe {
+ let iter = RawValIter::new(&self);
+ let buf = ptr::read(&self.buf);
+ mem::forget(self);
+
+ IntoIter {
+ iter: iter,
+ _buf: buf,
+ }
+ }
+ }
+}
+
+struct RawValIter<T> {
+ start: *const T,
+ end: *const T,
+}
+
+impl<T> RawValIter<T> {
+ unsafe fn new(slice: &[T]) -> Self {
+ RawValIter {
+ start: slice.as_ptr(),
+ end: if mem::size_of::<T>() == 0 {
+ ((slice.as_ptr() as usize) + slice.len()) as *const _
+ } else if slice.len() == 0 {
+ slice.as_ptr()
+ } else {
+ slice.as_ptr().add(slice.len())
+ },
+ }
+ }
+}
+
+impl<T> Iterator for RawValIter<T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ if mem::size_of::<T>() == 0 {
+ self.start = (self.start as usize + 1) as *const _;
+ Some(ptr::read(NonNull::<T>::dangling().as_ptr()))
+ } else {
+ let old_ptr = self.start;
+ self.start = self.start.offset(1);
+ Some(ptr::read(old_ptr))
+ }
+ }
+ }
+ }
+
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ let elem_size = mem::size_of::<T>();
+ let len = (self.end as usize - self.start as usize)
+ / if elem_size == 0 { 1 } else { elem_size };
+ (len, Some(len))
+ }
+}
+
+impl<T> DoubleEndedIterator for RawValIter<T> {
+ fn next_back(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ if mem::size_of::<T>() == 0 {
+ self.end = (self.end as usize - 1) as *const _;
+ Some(ptr::read(NonNull::<T>::dangling().as_ptr()))
+ } else {
+ self.end = self.end.offset(-1);
+ Some(ptr::read(self.end))
+ }
+ }
+ }
+ }
+}
+
+pub struct IntoIter<T> {
+ _buf: RawVec<T>, // we don't actually care about this. Just need it to live.
+ iter: RawValIter<T>,
+}
+
+impl<T> Iterator for IntoIter<T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> {
+ self.iter.next()
+ }
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ self.iter.size_hint()
+ }
+}
+
+impl<T> DoubleEndedIterator for IntoIter<T> {
+ fn next_back(&mut self) -> Option<T> {
+ self.iter.next_back()
+ }
+}
+
+impl<T> Drop for IntoIter<T> {
+ fn drop(&mut self) {
+ for _ in &mut *self {}
+ }
+}
+
+pub struct Drain<'a, T: 'a> {
+ vec: PhantomData<&'a mut Vec<T>>,
+ iter: RawValIter<T>,
+}
+
+impl<'a, T> Iterator for Drain<'a, T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> {
+ self.iter.next()
+ }
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ self.iter.size_hint()
+ }
+}
+
+impl<'a, T> DoubleEndedIterator for Drain<'a, T> {
+ fn next_back(&mut self) -> Option<T> {
+ self.iter.next_back()
+ }
+}
+
+impl<'a, T> Drop for Drain<'a, T> {
+ fn drop(&mut self) {
+ // pre-drain the iter
+ for _ in &mut *self {}
+ }
+}
+#
+# fn main() {
+# tests::create_push_pop();
+# tests::iter_test();
+# tests::test_drain();
+# tests::test_zst();
+# println!("All tests finished OK");
+# }
+#
+# mod tests {
+# use super::*;
+#
+# pub fn create_push_pop() {
+# let mut v = Vec::new();
+# v.push(1);
+# assert_eq!(1, v.len());
+# assert_eq!(1, v[0]);
+# for i in v.iter_mut() {
+# *i += 1;
+# }
+# v.insert(0, 5);
+# let x = v.pop();
+# assert_eq!(Some(2), x);
+# assert_eq!(1, v.len());
+# v.push(10);
+# let x = v.remove(0);
+# assert_eq!(5, x);
+# assert_eq!(1, v.len());
+# }
+#
+# pub fn iter_test() {
+# let mut v = Vec::new();
+# for i in 0..10 {
+# v.push(Box::new(i))
+# }
+# let mut iter = v.into_iter();
+# let first = iter.next().unwrap();
+# let last = iter.next_back().unwrap();
+# drop(iter);
+# assert_eq!(0, *first);
+# assert_eq!(9, *last);
+# }
+#
+# pub fn test_drain() {
+# let mut v = Vec::new();
+# for i in 0..10 {
+# v.push(Box::new(i))
+# }
+# {
+# let mut drain = v.drain();
+# let first = drain.next().unwrap();
+# let last = drain.next_back().unwrap();
+# assert_eq!(0, *first);
+# assert_eq!(9, *last);
+# }
+# assert_eq!(0, v.len());
+# v.push(Box::new(1));
+# assert_eq!(1, *v.pop().unwrap());
+# }
+#
+# pub fn test_zst() {
+# let mut v = Vec::new();
+# for _i in 0..10 {
+# v.push(())
+# }
+#
+# let mut count = 0;
+#
+# for _ in v.into_iter() {
+# count += 1
+# }
+#
+# assert_eq!(10, count);
+# }
+# }
+```
diff --git a/src/doc/nomicon/src/vec/vec-insert-remove.md b/src/doc/nomicon/src/vec/vec-insert-remove.md
new file mode 100644
index 000000000..57283f990
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-insert-remove.md
@@ -0,0 +1,51 @@
+# Insert and Remove
+
+Something *not* provided by slice is `insert` and `remove`, so let's do those
+next.
+
+Insert needs to shift all the elements at the target index to the right by one.
+To do this we need to use `ptr::copy`, which is our version of C's `memmove`.
+This copies some chunk of memory from one location to another, correctly
+handling the case where the source and destination overlap (which will
+definitely happen here).
+
+If we insert at index `i`, we want to shift the `[i .. len]` to `[i+1 .. len+1]`
+using the old len.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub fn insert(&mut self, index: usize, elem: T) {
+ // Note: `<=` because it's valid to insert after everything
+ // which would be equivalent to push.
+ assert!(index <= self.len, "index out of bounds");
+ if self.cap == self.len { self.grow(); }
+
+ unsafe {
+ // ptr::copy(src, dest, len): "copy from src to dest len elems"
+ ptr::copy(self.ptr.as_ptr().add(index),
+ self.ptr.as_ptr().add(index + 1),
+ self.len - index);
+ ptr::write(self.ptr.as_ptr().add(index), elem);
+ self.len += 1;
+ }
+}
+```
+
+Remove behaves in the opposite manner. We need to shift all the elements from
+`[i+1 .. len + 1]` to `[i .. len]` using the *new* len.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub fn remove(&mut self, index: usize) -> T {
+ // Note: `<` because it's *not* valid to remove after everything
+ assert!(index < self.len, "index out of bounds");
+ unsafe {
+ self.len -= 1;
+ let result = ptr::read(self.ptr.as_ptr().add(index));
+ ptr::copy(self.ptr.as_ptr().add(index + 1),
+ self.ptr.as_ptr().add(index),
+ self.len - index);
+ result
+ }
+}
+```
diff --git a/src/doc/nomicon/src/vec/vec-into-iter.md b/src/doc/nomicon/src/vec/vec-into-iter.md
new file mode 100644
index 000000000..61782e3b8
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-into-iter.md
@@ -0,0 +1,152 @@
+# IntoIter
+
+Let's move on to writing iterators. `iter` and `iter_mut` have already been
+written for us thanks to The Magic of Deref. However there's two interesting
+iterators that Vec provides that slices can't: `into_iter` and `drain`.
+
+IntoIter consumes the Vec by-value, and can consequently yield its elements
+by-value. In order to enable this, IntoIter needs to take control of Vec's
+allocation.
+
+IntoIter needs to be DoubleEnded as well, to enable reading from both ends.
+Reading from the back could just be implemented as calling `pop`, but reading
+from the front is harder. We could call `remove(0)` but that would be insanely
+expensive. Instead we're going to just use ptr::read to copy values out of
+either end of the Vec without mutating the buffer at all.
+
+To do this we're going to use a very common C idiom for array iteration. We'll
+make two pointers; one that points to the start of the array, and one that
+points to one-element past the end. When we want an element from one end, we'll
+read out the value pointed to at that end and move the pointer over by one. When
+the two pointers are equal, we know we're done.
+
+Note that the order of read and offset are reversed for `next` and `next_back`
+For `next_back` the pointer is always after the element it wants to read next,
+while for `next` the pointer is always at the element it wants to read next.
+To see why this is, consider the case where every element but one has been
+yielded.
+
+The array looks like this:
+
+```text
+ S E
+[X, X, X, O, X, X, X]
+```
+
+If E pointed directly at the element it wanted to yield next, it would be
+indistinguishable from the case where there are no more elements to yield.
+
+Although we don't actually care about it during iteration, we also need to hold
+onto the Vec's allocation information in order to free it once IntoIter is
+dropped.
+
+So we're going to use the following struct:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub struct IntoIter<T> {
+ buf: NonNull<T>,
+ cap: usize,
+ start: *const T,
+ end: *const T,
+ _marker: PhantomData<T>,
+}
+```
+
+And this is what we end up with for initialization:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> IntoIterator for Vec<T> {
+ type Item = T;
+ type IntoIter = IntoIter<T>;
+ fn into_iter(self) -> IntoIter<T> {
+ // Can't destructure Vec since it's Drop
+ let ptr = self.ptr;
+ let cap = self.cap;
+ let len = self.len;
+
+ // Make sure not to drop Vec since that would free the buffer
+ mem::forget(self);
+
+ unsafe {
+ IntoIter {
+ buf: ptr,
+ cap: cap,
+ start: ptr.as_ptr(),
+ end: if cap == 0 {
+ // can't offset off this pointer, it's not allocated!
+ ptr.as_ptr()
+ } else {
+ ptr.as_ptr().add(len)
+ },
+ _marker: PhantomData,
+ }
+ }
+ }
+}
+```
+
+Here's iterating forward:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Iterator for IntoIter<T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ let result = ptr::read(self.start);
+ self.start = self.start.offset(1);
+ Some(result)
+ }
+ }
+ }
+
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ let len = (self.end as usize - self.start as usize)
+ / mem::size_of::<T>();
+ (len, Some(len))
+ }
+}
+```
+
+And here's iterating backwards.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> DoubleEndedIterator for IntoIter<T> {
+ fn next_back(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ self.end = self.end.offset(-1);
+ Some(ptr::read(self.end))
+ }
+ }
+ }
+}
+```
+
+Because IntoIter takes ownership of its allocation, it needs to implement Drop
+to free it. However it also wants to implement Drop to drop any elements it
+contains that weren't yielded.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Drop for IntoIter<T> {
+ fn drop(&mut self) {
+ if self.cap != 0 {
+ // drop any remaining elements
+ for _ in &mut *self {}
+ let layout = Layout::array::<T>(self.cap).unwrap();
+ unsafe {
+ alloc::dealloc(self.buf.as_ptr() as *mut u8, layout);
+ }
+ }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/vec/vec-layout.md b/src/doc/nomicon/src/vec/vec-layout.md
new file mode 100644
index 000000000..c1c1afcc7
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-layout.md
@@ -0,0 +1,61 @@
+# Layout
+
+First off, we need to come up with the struct layout. A Vec has three parts:
+a pointer to the allocation, the size of the allocation, and the number of
+elements that have been initialized.
+
+Naively, this means we just want this design:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub struct Vec<T> {
+ ptr: *mut T,
+ cap: usize,
+ len: usize,
+}
+```
+
+And indeed this would compile. Unfortunately, it would be incorrect. First, the
+compiler will give us too strict variance. So a `&Vec<&'static str>`
+couldn't be used where an `&Vec<&'a str>` was expected. More importantly, it
+will give incorrect ownership information to the drop checker, as it will
+conservatively assume we don't own any values of type `T`. See [the chapter
+on ownership and lifetimes][ownership] for all the details on variance and
+drop check.
+
+As we saw in the ownership chapter, the standard library uses `Unique<T>` in place of
+`*mut T` when it has a raw pointer to an allocation that it owns. Unique is unstable,
+so we'd like to not use it if possible, though.
+
+As a recap, Unique is a wrapper around a raw pointer that declares that:
+
+* We are covariant over `T`
+* We may own a value of type `T` (for drop check)
+* We are Send/Sync if `T` is Send/Sync
+* Our pointer is never null (so `Option<Vec<T>>` is null-pointer-optimized)
+
+We can implement all of the above requirements in stable Rust. To do this, instead
+of using `Unique<T>` we will use [`NonNull<T>`][NonNull], another wrapper around a
+raw pointer, which gives us two of the above properties, namely it is covariant
+over `T` and is declared to never be null. By adding a `PhantomData<T>` (for drop
+check) and implementing Send/Sync if `T` is, we get the same results as using
+`Unique<T>`:
+
+```rust
+use std::ptr::NonNull;
+use std::marker::PhantomData;
+
+pub struct Vec<T> {
+ ptr: NonNull<T>,
+ cap: usize,
+ len: usize,
+ _marker: PhantomData<T>,
+}
+
+unsafe impl<T: Send> Send for Vec<T> {}
+unsafe impl<T: Sync> Sync for Vec<T> {}
+# fn main() {}
+```
+
+[ownership]: ../ownership.html
+[NonNull]: ../../std/ptr/struct.NonNull.html
diff --git a/src/doc/nomicon/src/vec/vec-push-pop.md b/src/doc/nomicon/src/vec/vec-push-pop.md
new file mode 100644
index 000000000..df083b9d1
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-push-pop.md
@@ -0,0 +1,57 @@
+# Push and Pop
+
+Alright. We can initialize. We can allocate. Let's actually implement some
+functionality! Let's start with `push`. All it needs to do is check if we're
+full to grow, unconditionally write to the next index, and then increment our
+length.
+
+To do the write we have to be careful not to evaluate the memory we want to write
+to. At worst, it's truly uninitialized memory from the allocator. At best it's the
+bits of some old value we popped off. Either way, we can't just index to the memory
+and dereference it, because that will evaluate the memory as a valid instance of
+T. Worse, `foo[idx] = x` will try to call `drop` on the old value of `foo[idx]`!
+
+The correct way to do this is with `ptr::write`, which just blindly overwrites the
+target address with the bits of the value we provide. No evaluation involved.
+
+For `push`, if the old len (before push was called) is 0, then we want to write
+to the 0th index. So we should offset by the old len.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub fn push(&mut self, elem: T) {
+ if self.len == self.cap { self.grow(); }
+
+ unsafe {
+ ptr::write(self.ptr.as_ptr().add(self.len), elem);
+ }
+
+ // Can't fail, we'll OOM first.
+ self.len += 1;
+}
+```
+
+Easy! How about `pop`? Although this time the index we want to access is
+initialized, Rust won't just let us dereference the location of memory to move
+the value out, because that would leave the memory uninitialized! For this we
+need `ptr::read`, which just copies out the bits from the target address and
+interprets it as a value of type T. This will leave the memory at this address
+logically uninitialized, even though there is in fact a perfectly good instance
+of T there.
+
+For `pop`, if the old len is 1, for example, we want to read out of the 0th
+index. So we should offset by the new len.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub fn pop(&mut self) -> Option<T> {
+ if self.len == 0 {
+ None
+ } else {
+ self.len -= 1;
+ unsafe {
+ Some(ptr::read(self.ptr.as_ptr().add(self.len)))
+ }
+ }
+}
+```
diff --git a/src/doc/nomicon/src/vec/vec-raw.md b/src/doc/nomicon/src/vec/vec-raw.md
new file mode 100644
index 000000000..e86537b81
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-raw.md
@@ -0,0 +1,163 @@
+# RawVec
+
+We've actually reached an interesting situation here: we've duplicated the logic
+for specifying a buffer and freeing its memory in Vec and IntoIter. Now that
+we've implemented it and identified *actual* logic duplication, this is a good
+time to perform some logic compression.
+
+We're going to abstract out the `(ptr, cap)` pair and give them the logic for
+allocating, growing, and freeing:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+struct RawVec<T> {
+ ptr: NonNull<T>,
+ cap: usize,
+ _marker: PhantomData<T>,
+}
+
+unsafe impl<T: Send> Send for RawVec<T> {}
+unsafe impl<T: Sync> Sync for RawVec<T> {}
+
+impl<T> RawVec<T> {
+ fn new() -> Self {
+ assert!(mem::size_of::<T>() != 0, "TODO: implement ZST support");
+ RawVec {
+ ptr: NonNull::dangling(),
+ cap: 0,
+ _marker: PhantomData,
+ }
+ }
+
+ fn grow(&mut self) {
+ let (new_cap, new_layout) = if self.cap == 0 {
+ (1, Layout::array::<T>(1).unwrap())
+ } else {
+ // This can't overflow because we ensure self.cap <= isize::MAX.
+ let new_cap = 2 * self.cap;
+
+ // Layout::array checks that the number of bytes is <= usize::MAX,
+ // but this is redundant since old_layout.size() <= isize::MAX,
+ // so the `unwrap` should never fail.
+ let new_layout = Layout::array::<T>(new_cap).unwrap();
+ (new_cap, new_layout)
+ };
+
+ // Ensure that the new allocation doesn't exceed `isize::MAX` bytes.
+ assert!(new_layout.size() <= isize::MAX as usize, "Allocation too large");
+
+ let new_ptr = if self.cap == 0 {
+ unsafe { alloc::alloc(new_layout) }
+ } else {
+ let old_layout = Layout::array::<T>(self.cap).unwrap();
+ let old_ptr = self.ptr.as_ptr() as *mut u8;
+ unsafe { alloc::realloc(old_ptr, old_layout, new_layout.size()) }
+ };
+
+ // If allocation fails, `new_ptr` will be null, in which case we abort.
+ self.ptr = match NonNull::new(new_ptr as *mut T) {
+ Some(p) => p,
+ None => alloc::handle_alloc_error(new_layout),
+ };
+ self.cap = new_cap;
+ }
+}
+
+impl<T> Drop for RawVec<T> {
+ fn drop(&mut self) {
+ if self.cap != 0 {
+ let layout = Layout::array::<T>(self.cap).unwrap();
+ unsafe {
+ alloc::dealloc(self.ptr.as_ptr() as *mut u8, layout);
+ }
+ }
+ }
+}
+```
+
+And change Vec as follows:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub struct Vec<T> {
+ buf: RawVec<T>,
+ len: usize,
+}
+
+impl<T> Vec<T> {
+ fn ptr(&self) -> *mut T {
+ self.buf.ptr.as_ptr()
+ }
+
+ fn cap(&self) -> usize {
+ self.buf.cap
+ }
+
+ pub fn new() -> Self {
+ Vec {
+ buf: RawVec::new(),
+ len: 0,
+ }
+ }
+
+ // push/pop/insert/remove largely unchanged:
+ // * `self.ptr.as_ptr() -> self.ptr()`
+ // * `self.cap -> self.cap()`
+ // * `self.grow() -> self.buf.grow()`
+}
+
+impl<T> Drop for Vec<T> {
+ fn drop(&mut self) {
+ while let Some(_) = self.pop() {}
+ // deallocation is handled by RawVec
+ }
+}
+```
+
+And finally we can really simplify IntoIter:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+pub struct IntoIter<T> {
+ _buf: RawVec<T>, // we don't actually care about this. Just need it to live.
+ start: *const T,
+ end: *const T,
+}
+
+// next and next_back literally unchanged since they never referred to the buf
+
+impl<T> Drop for IntoIter<T> {
+ fn drop(&mut self) {
+ // only need to ensure all our elements are read;
+ // buffer will clean itself up afterwards.
+ for _ in &mut *self {}
+ }
+}
+
+impl<T> IntoIterator for Vec<T> {
+ type Item = T;
+ type IntoIter = IntoIter<T>;
+ fn into_iter(self) -> IntoIter<T> {
+ unsafe {
+ // need to use ptr::read to unsafely move the buf out since it's
+ // not Copy, and Vec implements Drop (so we can't destructure it).
+ let buf = ptr::read(&self.buf);
+ let len = self.len;
+ mem::forget(self);
+
+ IntoIter {
+ start: buf.ptr.as_ptr(),
+ end: if buf.cap == 0 {
+ // can't offset off of a pointer unless it's part of an allocation
+ buf.ptr.as_ptr()
+ } else {
+ buf.ptr.as_ptr().add(len)
+ },
+ _buf: buf,
+ }
+ }
+ }
+}
+```
+
+Much better.
diff --git a/src/doc/nomicon/src/vec/vec-zsts.md b/src/doc/nomicon/src/vec/vec-zsts.md
new file mode 100644
index 000000000..73a97ba49
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec-zsts.md
@@ -0,0 +1,217 @@
+# Handling Zero-Sized Types
+
+It's time. We're going to fight the specter that is zero-sized types. Safe Rust
+*never* needs to care about this, but Vec is very intensive on raw pointers and
+raw allocations, which are exactly the two things that care about
+zero-sized types. We need to be careful of two things:
+
+* The raw allocator API has undefined behavior if you pass in 0 for an
+ allocation size.
+* raw pointer offsets are no-ops for zero-sized types, which will break our
+ C-style pointer iterator.
+
+Thankfully we abstracted out pointer-iterators and allocating handling into
+`RawValIter` and `RawVec` respectively. How mysteriously convenient.
+
+## Allocating Zero-Sized Types
+
+So if the allocator API doesn't support zero-sized allocations, what on earth
+do we store as our allocation? `NonNull::dangling()` of course! Almost every operation
+with a ZST is a no-op since ZSTs have exactly one value, and therefore no state needs
+to be considered to store or load them. This actually extends to `ptr::read` and
+`ptr::write`: they won't actually look at the pointer at all. As such we never need
+to change the pointer.
+
+Note however that our previous reliance on running out of memory before overflow is
+no longer valid with zero-sized types. We must explicitly guard against capacity
+overflow for zero-sized types.
+
+Due to our current architecture, all this means is writing 3 guards, one in each
+method of `RawVec`.
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> RawVec<T> {
+ fn new() -> Self {
+ // !0 is usize::MAX. This branch should be stripped at compile time.
+ let cap = if mem::size_of::<T>() == 0 { !0 } else { 0 };
+
+ // `NonNull::dangling()` doubles as "unallocated" and "zero-sized allocation"
+ RawVec {
+ ptr: NonNull::dangling(),
+ cap: cap,
+ _marker: PhantomData,
+ }
+ }
+
+ fn grow(&mut self) {
+ // since we set the capacity to usize::MAX when T has size 0,
+ // getting to here necessarily means the Vec is overfull.
+ assert!(mem::size_of::<T>() != 0, "capacity overflow");
+
+ let (new_cap, new_layout) = if self.cap == 0 {
+ (1, Layout::array::<T>(1).unwrap())
+ } else {
+ // This can't overflow because we ensure self.cap <= isize::MAX.
+ let new_cap = 2 * self.cap;
+
+ // `Layout::array` checks that the number of bytes is <= usize::MAX,
+ // but this is redundant since old_layout.size() <= isize::MAX,
+ // so the `unwrap` should never fail.
+ let new_layout = Layout::array::<T>(new_cap).unwrap();
+ (new_cap, new_layout)
+ };
+
+ // Ensure that the new allocation doesn't exceed `isize::MAX` bytes.
+ assert!(new_layout.size() <= isize::MAX as usize, "Allocation too large");
+
+ let new_ptr = if self.cap == 0 {
+ unsafe { alloc::alloc(new_layout) }
+ } else {
+ let old_layout = Layout::array::<T>(self.cap).unwrap();
+ let old_ptr = self.ptr.as_ptr() as *mut u8;
+ unsafe { alloc::realloc(old_ptr, old_layout, new_layout.size()) }
+ };
+
+ // If allocation fails, `new_ptr` will be null, in which case we abort.
+ self.ptr = match NonNull::new(new_ptr as *mut T) {
+ Some(p) => p,
+ None => alloc::handle_alloc_error(new_layout),
+ };
+ self.cap = new_cap;
+ }
+}
+
+impl<T> Drop for RawVec<T> {
+ fn drop(&mut self) {
+ let elem_size = mem::size_of::<T>();
+
+ if self.cap != 0 && elem_size != 0 {
+ unsafe {
+ alloc::dealloc(
+ self.ptr.as_ptr() as *mut u8,
+ Layout::array::<T>(self.cap).unwrap(),
+ );
+ }
+ }
+ }
+}
+```
+
+That's it. We support pushing and popping zero-sized types now. Our iterators
+(that aren't provided by slice Deref) are still busted, though.
+
+## Iterating Zero-Sized Types
+
+Zero-sized offsets are no-ops. This means that our current design will always
+initialize `start` and `end` as the same value, and our iterators will yield
+nothing. The current solution to this is to cast the pointers to integers,
+increment, and then cast them back:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> RawValIter<T> {
+ unsafe fn new(slice: &[T]) -> Self {
+ RawValIter {
+ start: slice.as_ptr(),
+ end: if mem::size_of::<T>() == 0 {
+ ((slice.as_ptr() as usize) + slice.len()) as *const _
+ } else if slice.len() == 0 {
+ slice.as_ptr()
+ } else {
+ slice.as_ptr().add(slice.len())
+ },
+ }
+ }
+}
+```
+
+Now we have a different bug. Instead of our iterators not running at all, our
+iterators now run *forever*. We need to do the same trick in our iterator impls.
+Also, our size_hint computation code will divide by 0 for ZSTs. Since we'll
+basically be treating the two pointers as if they point to bytes, we'll just
+map size 0 to divide by 1. Here's what `next` will be:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn next(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ let result = ptr::read(self.start);
+ self.start = if mem::size_of::<T>() == 0 {
+ (self.start as usize + 1) as *const _
+ } else {
+ self.start.offset(1)
+ };
+ Some(result)
+ }
+ }
+}
+```
+
+Do you see the "bug"? No one else did! The original author only noticed the
+problem when linking to this page years later. This code is kind of dubious
+because abusing the iterator pointers to be *counters* makes them unaligned!
+Our *one job* when using ZSTs is to keep pointers aligned! *forehead slap*
+
+Raw pointers don't need to be aligned at all times, so the basic trick of
+using pointers as counters is *fine*, but they *should* definitely be aligned
+when passed to `ptr::read`! This is *possibly* needless pedantry
+because `ptr::read` is a noop for a ZST, but let's be a *little* more
+responsible and read from `NonNull::dangling` on the ZST path.
+
+(Alternatively you could call `read_unaligned` on the ZST path. Either is fine,
+because either way we're making up a value from nothing and it all compiles
+to doing nothing.)
+
+<!-- ignore: simplified code -->
+```rust,ignore
+impl<T> Iterator for RawValIter<T> {
+ type Item = T;
+ fn next(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ if mem::size_of::<T>() == 0 {
+ self.start = (self.start as usize + 1) as *const _;
+ Some(ptr::read(NonNull::<T>::dangling().as_ptr()))
+ } else {
+ let old_ptr = self.start;
+ self.start = self.start.offset(1);
+ Some(ptr::read(old_ptr))
+ }
+ }
+ }
+ }
+
+ fn size_hint(&self) -> (usize, Option<usize>) {
+ let elem_size = mem::size_of::<T>();
+ let len = (self.end as usize - self.start as usize)
+ / if elem_size == 0 { 1 } else { elem_size };
+ (len, Some(len))
+ }
+}
+
+impl<T> DoubleEndedIterator for RawValIter<T> {
+ fn next_back(&mut self) -> Option<T> {
+ if self.start == self.end {
+ None
+ } else {
+ unsafe {
+ if mem::size_of::<T>() == 0 {
+ self.end = (self.end as usize - 1) as *const _;
+ Some(ptr::read(NonNull::<T>::dangling().as_ptr()))
+ } else {
+ self.end = self.end.offset(-1);
+ Some(ptr::read(self.end))
+ }
+ }
+ }
+ }
+}
+```
+
+And that's it. Iteration works!
diff --git a/src/doc/nomicon/src/vec/vec.md b/src/doc/nomicon/src/vec/vec.md
new file mode 100644
index 000000000..b03386331
--- /dev/null
+++ b/src/doc/nomicon/src/vec/vec.md
@@ -0,0 +1,14 @@
+# Example: Implementing Vec
+
+To bring everything together, we're going to write `std::Vec` from scratch.
+We will limit ourselves to stable Rust. In particular we won't use any
+intrinsics that could make our code a little bit nicer or efficient because
+intrinsics are permanently unstable. Although many intrinsics *do* become
+stabilized elsewhere (`std::ptr` and `std::mem` consist of many intrinsics).
+
+Ultimately this means our implementation may not take advantage of all
+possible optimizations, though it will be by no means *naive*. We will
+definitely get into the weeds over nitty-gritty details, even
+when the problem doesn't *really* merit it.
+
+You wanted advanced. We're gonna go advanced.
diff --git a/src/doc/nomicon/src/what-unsafe-does.md b/src/doc/nomicon/src/what-unsafe-does.md
new file mode 100644
index 000000000..64694ee4d
--- /dev/null
+++ b/src/doc/nomicon/src/what-unsafe-does.md
@@ -0,0 +1,87 @@
+# What Unsafe Rust Can Do
+
+The only things that are different in Unsafe Rust are that you can:
+
+* Dereference raw pointers
+* Call `unsafe` functions (including C functions, compiler intrinsics, and the raw allocator)
+* Implement `unsafe` traits
+* Mutate statics
+* Access fields of `union`s
+
+That's it. The reason these operations are relegated to Unsafe is that misusing
+any of these things will cause the ever dreaded Undefined Behavior. Invoking
+Undefined Behavior gives the compiler full rights to do arbitrarily bad things
+to your program. You definitely *should not* invoke Undefined Behavior.
+
+Unlike C, Undefined Behavior is pretty limited in scope in Rust. All the core
+language cares about is preventing the following things:
+
+* Dereferencing (using the `*` operator on) dangling or unaligned pointers (see below)
+* Breaking the [pointer aliasing rules][]
+* Calling a function with the wrong call ABI or unwinding from a function with the wrong unwind ABI.
+* Causing a [data race][race]
+* Executing code compiled with [target features][] that the current thread of execution does
+ not support
+* Producing invalid values (either alone or as a field of a compound type such
+ as `enum`/`struct`/array/tuple):
+ * a `bool` that isn't 0 or 1
+ * an `enum` with an invalid discriminant
+ * a null `fn` pointer
+ * a `char` outside the ranges [0x0, 0xD7FF] and [0xE000, 0x10FFFF]
+ * a `!` (all values are invalid for this type)
+ * an integer (`i*`/`u*`), floating point value (`f*`), or raw pointer read from
+ [uninitialized memory][], or uninitialized memory in a `str`.
+ * a reference/`Box` that is dangling, unaligned, or points to an invalid value.
+ * a wide reference, `Box`, or raw pointer that has invalid metadata:
+ * `dyn Trait` metadata is invalid if it is not a pointer to a vtable for
+ `Trait` that matches the actual dynamic trait the pointer or reference points to
+ * slice metadata is invalid if the length is not a valid `usize`
+ (i.e., it must not be read from uninitialized memory)
+ * a type with custom invalid values that is one of those values, such as a
+ [`NonNull`] that is null. (Requesting custom invalid values is an unstable
+ feature, but some stable libstd types, like `NonNull`, make use of it.)
+
+"Producing" a value happens any time a value is assigned, passed to a
+function/primitive operation or returned from a function/primitive operation.
+
+A reference/pointer is "dangling" if it is null or not all of the bytes it
+points to are part of the same allocation (so in particular they all have to be
+part of *some* allocation). The span of bytes it points to is determined by the
+pointer value and the size of the pointee type. As a consequence, if the span is
+empty, "dangling" is the same as "null". Note that slices and strings point
+to their entire range, so it's important that the length metadata is never too
+large (in particular, allocations and therefore slices and strings cannot be
+bigger than `isize::MAX` bytes). If for some reason this is too cumbersome,
+consider using raw pointers.
+
+That's it. That's all the causes of Undefined Behavior baked into Rust. Of
+course, unsafe functions and traits are free to declare arbitrary other
+constraints that a program must maintain to avoid Undefined Behavior. For
+instance, the allocator APIs declare that deallocating unallocated memory is
+Undefined Behavior.
+
+However, violations of these constraints generally will just transitively lead to one of
+the above problems. Some additional constraints may also derive from compiler
+intrinsics that make special assumptions about how code can be optimized. For instance,
+Vec and Box make use of intrinsics that require their pointers to be non-null at all times.
+
+Rust is otherwise quite permissive with respect to other dubious operations.
+Rust considers it "safe" to:
+
+* Deadlock
+* Have a [race condition][race]
+* Leak memory
+* Fail to call destructors
+* Overflow integers
+* Abort the program
+* Delete the production database
+
+However any program that actually manages to do such a thing is *probably*
+incorrect. Rust provides lots of tools to make these things rare, but
+these problems are considered impractical to categorically prevent.
+
+[pointer aliasing rules]: references.html
+[uninitialized memory]: uninitialized.html
+[race]: races.html
+[target features]: ../reference/attributes/codegen.html#the-target_feature-attribute
+[`NonNull`]: ../std/ptr/struct.NonNull.html
diff --git a/src/doc/nomicon/src/working-with-unsafe.md b/src/doc/nomicon/src/working-with-unsafe.md
new file mode 100644
index 000000000..b4b47a172
--- /dev/null
+++ b/src/doc/nomicon/src/working-with-unsafe.md
@@ -0,0 +1,120 @@
+# Working with Unsafe
+
+Rust generally only gives us the tools to talk about Unsafe Rust in a scoped and
+binary manner. Unfortunately, reality is significantly more complicated than
+that. For instance, consider the following toy function:
+
+```rust
+fn index(idx: usize, arr: &[u8]) -> Option<u8> {
+ if idx < arr.len() {
+ unsafe {
+ Some(*arr.get_unchecked(idx))
+ }
+ } else {
+ None
+ }
+}
+```
+
+This function is safe and correct. We check that the index is in bounds, and if
+it is, index into the array in an unchecked manner. We say that such a correct
+unsafely implemented function is *sound*, meaning that safe code cannot cause
+Undefined Behavior through it (which, remember, is the single fundamental
+property of Safe Rust).
+
+But even in such a trivial function, the scope of the unsafe block is
+questionable. Consider changing the `<` to a `<=`:
+
+```rust
+fn index(idx: usize, arr: &[u8]) -> Option<u8> {
+ if idx <= arr.len() {
+ unsafe {
+ Some(*arr.get_unchecked(idx))
+ }
+ } else {
+ None
+ }
+}
+```
+
+This program is now *unsound*, Safe Rust can cause Undefined Behavior, and yet
+*we only modified safe code*. This is the fundamental problem of safety: it's
+non-local. The soundness of our unsafe operations necessarily depends on the
+state established by otherwise "safe" operations.
+
+Safety is modular in the sense that opting into unsafety doesn't require you
+to consider arbitrary other kinds of badness. For instance, doing an unchecked
+index into a slice doesn't mean you suddenly need to worry about the slice being
+null or containing uninitialized memory. Nothing fundamentally changes. However
+safety *isn't* modular in the sense that programs are inherently stateful and
+your unsafe operations may depend on arbitrary other state.
+
+This non-locality gets much worse when we incorporate actual persistent state.
+Consider a simple implementation of `Vec`:
+
+```rust
+use std::ptr;
+
+// Note: This definition is naive. See the chapter on implementing Vec.
+pub struct Vec<T> {
+ ptr: *mut T,
+ len: usize,
+ cap: usize,
+}
+
+// Note this implementation does not correctly handle zero-sized types.
+// See the chapter on implementing Vec.
+impl<T> Vec<T> {
+ pub fn push(&mut self, elem: T) {
+ if self.len == self.cap {
+ // not important for this example
+ self.reallocate();
+ }
+ unsafe {
+ ptr::write(self.ptr.add(self.len), elem);
+ self.len += 1;
+ }
+ }
+ # fn reallocate(&mut self) { }
+}
+
+# fn main() {}
+```
+
+This code is simple enough to reasonably audit and informally verify. Now consider
+adding the following method:
+
+<!-- ignore: simplified code -->
+```rust,ignore
+fn make_room(&mut self) {
+ // grow the capacity
+ self.cap += 1;
+}
+```
+
+This code is 100% Safe Rust but it is also completely unsound. Changing the
+capacity violates the invariants of Vec (that `cap` reflects the allocated space
+in the Vec). This is not something the rest of Vec can guard against. It *has*
+to trust the capacity field because there's no way to verify it.
+
+Because it relies on invariants of a struct field, this `unsafe` code
+does more than pollute a whole function: it pollutes a whole *module*.
+Generally, the only bullet-proof way to limit the scope of unsafe code is at the
+module boundary with privacy.
+
+However this works *perfectly*. The existence of `make_room` is *not* a
+problem for the soundness of Vec because we didn't mark it as public. Only the
+module that defines this function can call it. Also, `make_room` directly
+accesses the private fields of Vec, so it can only be written in the same module
+as Vec.
+
+It is therefore possible for us to write a completely safe abstraction that
+relies on complex invariants. This is *critical* to the relationship between
+Safe Rust and Unsafe Rust.
+
+We have already seen that Unsafe code must trust *some* Safe code, but shouldn't
+trust *generic* Safe code. Privacy is important to unsafe code for similar reasons:
+it prevents us from having to trust all the safe code in the universe from messing
+with our trusted state.
+
+Safety lives!
diff --git a/src/doc/nomicon/theme/nomicon.css b/src/doc/nomicon/theme/nomicon.css
new file mode 100644
index 000000000..1b8c77f4d
--- /dev/null
+++ b/src/doc/nomicon/theme/nomicon.css
@@ -0,0 +1,40 @@
+/*
+Taken from the reference.
+Warnings and notes:
+Write the <div>s on their own line. E.g.
+<div class="warning">
+Warning: This is bad!
+</div>
+*/
+main .warning p {
+ padding: 10px 20px;
+ margin: 20px 0;
+}
+
+main .warning p::before {
+ content: "⚠️ ";
+}
+
+.light main .warning p,
+.rust main .warning p {
+ border: 2px solid red;
+ background: #ffcece;
+}
+
+.rust main .warning p {
+ /* overrides previous declaration */
+ border-color: #961717;
+}
+
+.coal main .warning p,
+.navy main .warning p,
+.ayu main .warning p {
+ background: #542626
+}
+
+/* Make the links higher contrast on dark themes */
+.coal main .warning p a,
+.navy main .warning p a,
+.ayu main .warning p a {
+ color: #80d0d0
+}
diff --git a/src/doc/not_found.md b/src/doc/not_found.md
new file mode 100644
index 000000000..f0794fc0b
--- /dev/null
+++ b/src/doc/not_found.md
@@ -0,0 +1,102 @@
+% Not Found
+
+<!-- Completely hide the TOC and the section numbers -->
+<style type="text/css">
+#TOC { display: none; }
+.header-section-number { display: none; }
+li {list-style-type: none; }
+#search-input {
+ width: calc(100% - 100px);
+}
+#search-but {
+ cursor: pointer;
+}
+#search-but, #search-input {
+ padding: 4px;
+ border: 1px solid #ccc;
+ border-radius: 3px;
+ outline: none;
+ font-size: 0.7em;
+ background-color: #fff;
+}
+#search-but:hover, #search-input:focus {
+ border-color: #55a9ff;
+}
+#search-from {
+ border: none;
+ padding: 0;
+ font-size: 0.7em;
+}
+</style>
+
+Looks like you've taken a wrong turn.
+
+Some things that might be helpful to you though:
+
+# Search
+
+<div>
+ <form id="search-form" action="https://duckduckgo.com/">
+ <input id="search-input" type="search" name="q"></input>
+ <input type="submit" value="Search" id="search-but">
+ <!--
+ Don't show the options by default,
+ since "From the Standary Library" doesn't work without JavaScript
+ -->
+ <fieldset id="search-from" style="display:none">
+ <label><input name="from" value="library" type="radio"> From the Standard Library</label>
+ <label><input name="from" value="duckduckgo" type="radio" checked> From DuckDuckGo</label>
+ </fieldset>
+ </form>
+</div>
+
+# Reference
+
+ * [The Rust official site](https://www.rust-lang.org)
+ * [The Rust reference](https://doc.rust-lang.org/reference/index.html)
+
+# Docs
+
+[The standard library](https://doc.rust-lang.org/std/)
+
+<script>
+function get_url_fragments() {
+ var last = document.URL.split("/").pop();
+ var tokens = last.split(".");
+ var op = [];
+ for (var i=0; i < tokens.length; i++) {
+ var t = tokens[i];
+ if (t == 'html' || t.indexOf("#") != -1) {
+ // no html or anchors
+ } else {
+ op.push(t);
+ }
+ }
+ return op;
+}
+
+function on_submit(event) {
+ var form = event.target;
+ var q = form['q'].value;
+
+ event.preventDefault();
+
+ if (form['from'].value === 'duckduckgo') {
+ document.location.href = form.action + '?q=' + encodeURIComponent(q + ' site:doc.rust-lang.org');
+ } else if (form['from'].value === 'library') {
+ document.location.href = '/std/index.html?search=' + encodeURIComponent(q);
+ }
+}
+
+function populate_search() {
+ var form = document.getElementById('search-form');
+ form.addEventListener('submit', on_submit);
+ document.getElementById('search-from').style.display = '';
+
+ form['from'].value = 'library';
+
+ var op = get_url_fragments();
+ document.getElementById('search-input').value = op.join(' ');
+}
+populate_search();
+</script>
diff --git a/src/doc/redirect.inc b/src/doc/redirect.inc
new file mode 100644
index 000000000..2fb44be01
--- /dev/null
+++ b/src/doc/redirect.inc
@@ -0,0 +1,2 @@
+<meta name="robots" content="noindex,follow">
+<link rel="icon" href="https://www.rust-lang.org/favicon.ico">
diff --git a/src/doc/reference.md b/src/doc/reference.md
new file mode 100644
index 000000000..5e09cdc5c
--- /dev/null
+++ b/src/doc/reference.md
@@ -0,0 +1,4 @@
+% The Rust Reference has moved
+
+We've split up the reference into chapters. Please find it at its new
+home [here](https://doc.rust-lang.org/stable/reference/introduction.html).
diff --git a/src/doc/reference/.github/workflows/main.yml b/src/doc/reference/.github/workflows/main.yml
new file mode 100644
index 000000000..4456c3c9c
--- /dev/null
+++ b/src/doc/reference/.github/workflows/main.yml
@@ -0,0 +1,35 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Update rustup
+ run: rustup self update
+ - name: Install Rust
+ run: |
+ rustup set profile minimal
+ rustup toolchain install nightly -c rust-docs
+ rustup default nightly
+ - name: Install mdbook
+ run: |
+ mkdir bin
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.14/mdbook-v0.4.14-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
+ echo "$(pwd)/bin" >> $GITHUB_PATH
+ - name: Report versions
+ run: |
+ rustup --version
+ rustc -Vv
+ mdbook --version
+ - name: Run tests
+ run: mdbook test
+ - name: Style checks
+ run: (cd style-check && cargo run -- ../src)
+ - name: Check for broken links
+ run: |
+ curl -sSLo linkcheck.sh \
+ https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+ sh linkcheck.sh --all reference
diff --git a/src/doc/reference/CONTRIBUTING.md b/src/doc/reference/CONTRIBUTING.md
new file mode 100644
index 000000000..8cf73c1fd
--- /dev/null
+++ b/src/doc/reference/CONTRIBUTING.md
@@ -0,0 +1,76 @@
+Thank you for your interest in contributing to the Rust Reference!
+
+There are a few ways of helping with the reference: critiquing the reference,
+editing the reference, fixing incorrect information, adding examples and
+glossary entries, and documenting new or otherwise undocumented features in
+Rust.
+
+For a while, the Reference was basically ignored, and Rust continued gaining new
+features or changing old ones. It was also basically the introduction document
+before the first edition of the Rust book, and constantly in flux from the huge
+churn of the language design before v1.0.0. So there's a lot that's wrong, too
+teachy for people who should have basic understanding of Rust, or is too shallow
+for the Reference. As such, we have the warning saying there's work that needs
+to be done. Eventually, we plan to make sure everything is well documented
+enough that we can remove the warning.
+
+It is encouraged for you to read the [introduction] to familiarize yourself
+with the kind of content the reference is expected to contain and the
+conventions it uses. Also, the [style guide] provides more detailed guidelines
+for formatting and content.
+
+## Critiquing the Reference
+
+This is the easiest way to contribute. Basically, as you read the reference, if
+you find something confusing, incorrect, or missing, then you can file an issue
+against the reference explaining your concerns.
+
+## Editing the Reference
+
+Typos and incorrect links get through from time to time. Should you find them,
+we welcome PRs to fix them. Additionally, larger editing jobs that help remove
+the number of parentheticals, remove comma splices, italicize term definitions
+and other similar tasks are helpful.
+
+## Adding Examples and Glossary Entries
+
+Examples are great. Many people will only read examples and ignore the prose.
+Ideally, every facet of every feature will have an example.
+
+Likewise, the reference has a glossary. It doesn't need to explain every facet
+of every feature nor contain every definition, but it does need to be expanded
+upon. Ideally entries in the glossary link to the associated documentation.
+
+## Adding Documentation
+
+There are a lot of features that are not documented at all or are documented
+poorly. This is the hardest, but definitely most valuable. Pick an unassigned
+issue from the [issue tracker], and write about it.
+
+While writing, you may find it handy to have a [playpen] open to test out what
+you are documenting.
+
+Feel free to take information from the standard library and Rustonomicon as
+appropriate.
+
+Note that we don't write documentation for purely library features such as
+threads and IO and we don't write about Rust in the future. Documentation is
+written as if the current stable release of Rust is the last release. The
+`master` branch of the reference corresponds to what is **stable** on the
+`master` branch ("nightly") of [rust-lang/rust]. If you want to write about
+Rust in the future, you want [the Unstable book][unstable].
+
+## Stabilization
+
+When something that alters the language is stabilized, an issue should be
+opened on the reference [issue tracker] to track the documentation process.
+This should include links to any relevant information, such as the
+stabilization PR, the RFC, the tracking issue, and anything else that would be
+helpful for writing the documentation.
+
+[introduction]: src/introduction.md
+[issue tracker]: https://github.com/rust-lang/reference/issues
+[playpen]: https://play.rust-lang.org/
+[rust-lang/rust]: https://github.com/rust-lang/rust/
+[style guide]: STYLE.md
+[unstable]: https://doc.rust-lang.org/nightly/unstable-book/
diff --git a/src/doc/reference/LICENSE-APACHE b/src/doc/reference/LICENSE-APACHE
new file mode 100644
index 000000000..16fe87b06
--- /dev/null
+++ b/src/doc/reference/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/doc/reference/LICENSE-MIT b/src/doc/reference/LICENSE-MIT
new file mode 100644
index 000000000..25597d583
--- /dev/null
+++ b/src/doc/reference/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2010 The Rust Project Developers
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/src/doc/reference/README.md b/src/doc/reference/README.md
new file mode 100644
index 000000000..65030a32c
--- /dev/null
+++ b/src/doc/reference/README.md
@@ -0,0 +1,60 @@
+# The Rust Language Reference
+
+This document is the primary reference for the Rust programming language.
+
+This document is not normative. It may include details that are specific
+to `rustc` itself, and should not be taken as a specification for the
+Rust language. We intend to produce such a document someday, but this is
+what we have for now.
+
+## Dependencies
+
+- rustc (the Rust compiler).
+- [mdbook](https://rust-lang.github.io/mdBook/) (use `cargo install mdbook` to install it).
+- rust nightly (you would be required to set your Rust version to the nightly version to make sure all tests pass)
+
+## Build steps
+
+To build the project, follow the steps given below :
+
+Clone the project by downloading the ZIP from the [GitHub page](https://github.com/rust-lang/reference) or
+run the following command:
+
+```
+git clone https://github.com/rust-lang/reference
+```
+
+Change the directory to the downloaded repository:
+
+```sh
+cd reference
+```
+
+To run the tests, you would need to set the Rust version to the nightly release. You can do this by executing the following command:
+
+```shell
+rustup override set nightly
+```
+
+This will set the nightly version only for your the current project.
+
+If you wish to set Rust nightly for all your projects, you can run the command:
+
+```shell
+rustup default nightly
+```
+
+Now, run the following command to test the code snippets to catch compilation errors:
+
+```shell
+mdbook test
+```
+
+
+To generate a local instance of the book, run:
+
+```sh
+mdbook build
+```
+
+The generated HTML will be in the `book` folder.
diff --git a/src/doc/reference/STYLE.md b/src/doc/reference/STYLE.md
new file mode 100644
index 000000000..f51cba3d4
--- /dev/null
+++ b/src/doc/reference/STYLE.md
@@ -0,0 +1,71 @@
+# Rust reference style guide
+
+Some conventions and content guidelines are specified in the [introduction].
+This document serves as a guide for editors and reviewers.
+
+There is a [`style-check`](style-check/) tool which is run in CI to check some of these. To use it locally, run `cargo run --manifest-path=style-check/Cargo.toml src`.
+
+## Markdown formatting
+
+* Use ATX-style heading with sentence case.
+* Use one line per sentence to make diffs nicer.
+ Do not wrap long lines.
+* Use reference links, with shortcuts if appropriate.
+ Place the sorted link reference definitions at the bottom of the file, or at the bottom of a section if there is an unusually large number of links that are specific to the section.
+
+ ```
+ Example of shortcut link: [enumerations]
+ Example of reference link with label: [block expression][block]
+
+ [block]: expressions/block-expr.md
+ [enumerations]: types/enum.md
+ ```
+
+* Links should be relative with the `.md` extension.
+ Links to other rust-lang books that are published with the reference or the standard library API should also be relative so that the linkchecker can validate them.
+* See the [Conventions] section for formatting callouts such as notes, edition differences, and warnings.
+* Formatting to avoid:
+ * Avoid trailing spaces.
+ * Avoid double blank lines.
+
+### Code examples
+
+Code examples should use code blocks with triple backticks.
+The language should always be specified (such as `rust`).
+
+```rust
+println!("Hello!");
+```
+
+See https://highlightjs.org/ for a list of supported languages.
+
+Rust examples are tested via rustdoc, and should include the appropriate annotations when tests are expected to fail:
+
+* `edition2015` or `edition2018` — If it is edition-specific (see `book.toml` for the default).
+* `no_run` — The example should compile successfully, but should not be executed.
+* `should_panic` — The example should compile and run, but produce a panic.
+* `compile_fail` — The example is expected to fail to compile.
+* `ignore` — The example shouldn't be built or tested.
+ This should be avoided if possible.
+ Usually this is only necessary when the testing framework does not support it (such as external crates or modules, or a proc-macro), or it contains pseudo-code which is not valid Rust.
+ An HTML comment such as `<!-- ignore: requires extern crate -->` should be placed before the example to explain why it is ignored.
+
+See the [rustdoc documentation] for more detail.
+
+## Language and grammar
+
+* Use American English spelling.
+* Use Oxford commas.
+* Idioms and styling to avoid:
+ * Avoid slashes for alternatives ("program/binary"), use conjunctions or rewrite it ("program or binary").
+ * Avoid qualifying something as "in Rust", the entire reference is about Rust.
+
+## Content
+
+* Whenever there is a difference between editions, the differences should be called out with an "Edition Differences" block.
+ The main text should stick to what is common between the editions.
+ However, for large differences (such as "async"), the main text may contain edition-specific content as long as it is made clear which editions it applies to.
+
+[conventions]: src/introduction.md#conventions
+[introduction]: src/introduction.md
+[rustdoc documentation]: https://doc.rust-lang.org/rustdoc/documentation-tests.html
diff --git a/src/doc/reference/book.toml b/src/doc/reference/book.toml
new file mode 100644
index 000000000..2bc218fe4
--- /dev/null
+++ b/src/doc/reference/book.toml
@@ -0,0 +1,14 @@
+[book]
+
+title = "The Rust Reference"
+author = "The Rust Project Developers"
+
+[output.html]
+additional-css = ["theme/reference.css"]
+git-repository-url = "https://github.com/rust-lang/reference/"
+
+[output.html.redirect]
+"/expressions/enum-variant-expr.html" = "struct-expr.html"
+
+[rust]
+edition = "2021"
diff --git a/src/doc/reference/reference.md b/src/doc/reference/reference.md
new file mode 100644
index 000000000..fdeea17ed
--- /dev/null
+++ b/src/doc/reference/reference.md
@@ -0,0 +1,4 @@
+% The Rust Reference has moved
+
+We've split up the reference into chapters. Please find it at its new
+home [here](reference/index.html).
diff --git a/src/doc/reference/src/SUMMARY.md b/src/doc/reference/src/SUMMARY.md
new file mode 100644
index 000000000..82d70d043
--- /dev/null
+++ b/src/doc/reference/src/SUMMARY.md
@@ -0,0 +1,135 @@
+# The Rust Reference
+
+[Introduction](introduction.md)
+
+- [Notation](notation.md)
+
+- [Lexical structure](lexical-structure.md)
+ - [Input format](input-format.md)
+ - [Keywords](keywords.md)
+ - [Identifiers](identifiers.md)
+ - [Comments](comments.md)
+ - [Whitespace](whitespace.md)
+ - [Tokens](tokens.md)
+
+- [Macros](macros.md)
+ - [Macros By Example](macros-by-example.md)
+ - [Procedural Macros](procedural-macros.md)
+
+- [Crates and source files](crates-and-source-files.md)
+
+- [Conditional compilation](conditional-compilation.md)
+
+- [Items](items.md)
+ - [Modules](items/modules.md)
+ - [Extern crates](items/extern-crates.md)
+ - [Use declarations](items/use-declarations.md)
+ - [Functions](items/functions.md)
+ - [Type aliases](items/type-aliases.md)
+ - [Structs](items/structs.md)
+ - [Enumerations](items/enumerations.md)
+ - [Unions](items/unions.md)
+ - [Constant items](items/constant-items.md)
+ - [Static items](items/static-items.md)
+ - [Traits](items/traits.md)
+ - [Implementations](items/implementations.md)
+ - [External blocks](items/external-blocks.md)
+ - [Generic parameters](items/generics.md)
+ - [Associated Items](items/associated-items.md)
+
+- [Attributes](attributes.md)
+ - [Testing](attributes/testing.md)
+ - [Derive](attributes/derive.md)
+ - [Diagnostics](attributes/diagnostics.md)
+ - [Code generation](attributes/codegen.md)
+ - [Limits](attributes/limits.md)
+ - [Type System](attributes/type_system.md)
+
+- [Statements and expressions](statements-and-expressions.md)
+ - [Statements](statements.md)
+ - [Expressions](expressions.md)
+ - [Literal expressions](expressions/literal-expr.md)
+ - [Path expressions](expressions/path-expr.md)
+ - [Block expressions](expressions/block-expr.md)
+ - [Operator expressions](expressions/operator-expr.md)
+ - [Grouped expressions](expressions/grouped-expr.md)
+ - [Array and index expressions](expressions/array-expr.md)
+ - [Tuple and index expressions](expressions/tuple-expr.md)
+ - [Struct expressions](expressions/struct-expr.md)
+ - [Call expressions](expressions/call-expr.md)
+ - [Method call expressions](expressions/method-call-expr.md)
+ - [Field access expressions](expressions/field-expr.md)
+ - [Closure expressions](expressions/closure-expr.md)
+ - [Loop expressions](expressions/loop-expr.md)
+ - [Range expressions](expressions/range-expr.md)
+ - [If and if let expressions](expressions/if-expr.md)
+ - [Match expressions](expressions/match-expr.md)
+ - [Return expressions](expressions/return-expr.md)
+ - [Await expressions](expressions/await-expr.md)
+ - [Underscore expressions](expressions/underscore-expr.md)
+
+- [Patterns](patterns.md)
+
+- [Type system](type-system.md)
+ - [Types](types.md)
+ - [Boolean type](types/boolean.md)
+ - [Numeric types](types/numeric.md)
+ - [Textual types](types/textual.md)
+ - [Never type](types/never.md)
+ - [Tuple types](types/tuple.md)
+ - [Array types](types/array.md)
+ - [Slice types](types/slice.md)
+ - [Struct types](types/struct.md)
+ - [Enumerated types](types/enum.md)
+ - [Union types](types/union.md)
+ - [Function item types](types/function-item.md)
+ - [Closure types](types/closure.md)
+ - [Pointer types](types/pointer.md)
+ - [Function pointer types](types/function-pointer.md)
+ - [Trait object types](types/trait-object.md)
+ - [Impl trait type](types/impl-trait.md)
+ - [Type parameters](types/parameters.md)
+ - [Inferred type](types/inferred.md)
+ - [Dynamically Sized Types](dynamically-sized-types.md)
+ - [Type layout](type-layout.md)
+ - [Interior mutability](interior-mutability.md)
+ - [Subtyping and Variance](subtyping.md)
+ - [Trait and lifetime bounds](trait-bounds.md)
+ - [Type coercions](type-coercions.md)
+ - [Destructors](destructors.md)
+ - [Lifetime elision](lifetime-elision.md)
+
+- [Special types and traits](special-types-and-traits.md)
+
+- [Names](names.md)
+ - [Namespaces](names/namespaces.md)
+ - [Scopes](names/scopes.md)
+ - [Preludes](names/preludes.md)
+ - [Paths](paths.md)
+ - [Name resolution](names/name-resolution.md)
+ - [Visibility and privacy](visibility-and-privacy.md)
+
+- [Memory model](memory-model.md)
+ - [Memory allocation and lifetime](memory-allocation-and-lifetime.md)
+ - [Variables](variables.md)
+
+- [Linkage](linkage.md)
+
+- [Inline assembly](inline-assembly.md)
+
+- [Unsafety](unsafety.md)
+ - [Unsafe functions](unsafe-functions.md)
+ - [Unsafe blocks](unsafe-blocks.md)
+ - [Behavior considered undefined](behavior-considered-undefined.md)
+ - [Behavior not considered unsafe](behavior-not-considered-unsafe.md)
+
+- [Constant Evaluation](const_eval.md)
+
+- [Application Binary Interface](abi.md)
+
+- [The Rust runtime](runtime.md)
+
+- [Appendices](appendices.md)
+ - [Macro Follow-Set Ambiguity Formal Specification](macro-ambiguity.md)
+ - [Influences](influences.md)
+ - [Glossary](glossary.md)
diff --git a/src/doc/reference/src/abi.md b/src/doc/reference/src/abi.md
new file mode 100644
index 000000000..374dd6d45
--- /dev/null
+++ b/src/doc/reference/src/abi.md
@@ -0,0 +1,100 @@
+# Application Binary Interface (ABI)
+
+This section documents features that affect the ABI of the compiled output of
+a crate.
+
+See *[extern functions]* for information on specifying the ABI for exporting
+functions. See *[external blocks]* for information on specifying the ABI for
+linking external libraries.
+
+## The `used` attribute
+
+The *`used` attribute* can only be applied to [`static` items]. This [attribute] forces the
+compiler to keep the variable in the output object file (.o, .rlib, etc. excluding final binaries)
+even if the variable is not used, or referenced, by any other item in the crate.
+However, the linker is still free to remove such an item.
+
+Below is an example that shows under what conditions the compiler keeps a `static` item in the
+output object file.
+
+``` rust
+// foo.rs
+
+// This is kept because of `#[used]`:
+#[used]
+static FOO: u32 = 0;
+
+// This is removable because it is unused:
+#[allow(dead_code)]
+static BAR: u32 = 0;
+
+// This is kept because it is publicly reachable:
+pub static BAZ: u32 = 0;
+
+// This is kept because it is referenced by a public, reachable function:
+static QUUX: u32 = 0;
+
+pub fn quux() -> &'static u32 {
+ &QUUX
+}
+
+// This is removable because it is referenced by a private, unused (dead) function:
+static CORGE: u32 = 0;
+
+#[allow(dead_code)]
+fn corge() -> &'static u32 {
+ &CORGE
+}
+```
+
+``` console
+$ rustc -O --emit=obj --crate-type=rlib foo.rs
+
+$ nm -C foo.o
+0000000000000000 R foo::BAZ
+0000000000000000 r foo::FOO
+0000000000000000 R foo::QUUX
+0000000000000000 T foo::quux
+```
+
+## The `no_mangle` attribute
+
+The *`no_mangle` attribute* may be used on any [item] to disable standard
+symbol name mangling. The symbol for the item will be the identifier of the
+item's name.
+
+Additionally, the item will be publicly exported from the produced library or
+object file, similar to the [`used` attribute](#the-used-attribute).
+
+## The `link_section` attribute
+
+The *`link_section` attribute* specifies the section of the object file that a
+[function] or [static]'s content will be placed into. It uses the
+[_MetaNameValueStr_] syntax to specify the section name.
+
+<!-- no_run: don't link. The format of the section name is platform-specific. -->
+```rust,no_run
+#[no_mangle]
+#[link_section = ".example_section"]
+pub static VAR1: u32 = 1;
+```
+
+## The `export_name` attribute
+
+The *`export_name` attribute* specifies the name of the symbol that will be
+exported on a [function] or [static]. It uses the [_MetaNameValueStr_] syntax
+to specify the symbol name.
+
+```rust
+#[export_name = "exported_symbol_name"]
+pub fn name_in_rust() { }
+```
+
+[_MetaNameValueStr_]: attributes.md#meta-item-attribute-syntax
+[`static` items]: items/static-items.md
+[attribute]: attributes.md
+[extern functions]: items/functions.md#extern-function-qualifier
+[external blocks]: items/external-blocks.md
+[function]: items/functions.md
+[item]: items.md
+[static]: items/static-items.md
diff --git a/src/doc/reference/src/appendices.md b/src/doc/reference/src/appendices.md
new file mode 100644
index 000000000..28acb81ce
--- /dev/null
+++ b/src/doc/reference/src/appendices.md
@@ -0,0 +1 @@
+# Appendices
diff --git a/src/doc/reference/src/attributes-redirect.html b/src/doc/reference/src/attributes-redirect.html
new file mode 100644
index 000000000..a0548cc49
--- /dev/null
+++ b/src/doc/reference/src/attributes-redirect.html
@@ -0,0 +1,29 @@
+<script>
+(function() {
+ var fragments = {
+ "#cold-attribute": "attributes/codegen.html#the-cold-attribute",
+ "#conditional-compilation": "conditional-compilation.html",
+ "#deprecation": "attributes/diagnostics.html#the-deprecated-attribute",
+ "#derive": "attributes/derive.html",
+ "#documentation": "../rustdoc/the-doc-attribute.html",
+ "#ffi-attributes": "attributes.html#built-in-attributes-index",
+ "#inline-attribute": "attributes/codegen.html#the-inline-attribute",
+ "#lint-check-attributes": "attributes/diagnostics.html#lint-check-attributes",
+ "#macro-related-attributes": "attributes.html#built-in-attributes-index",
+ "#miscellaneous-attributes": "attributes.html#built-in-attributes-index",
+ "#must_use": "attributes/diagnostics.html#the-must_use-attribute",
+ "#optimization-hints": "attributes/codegen.html#optimization-hints",
+ "#path": "items/modules.html#the-path-attribute",
+ "#preludes": "crates-and-source-files.html#preludes-and-no_std",
+ "#testing": "attributes/testing.html",
+ "#tool-lint-attributes": "attributes/diagnostics.html#tool-lint-attributes",
+ "#crate-only-attributes": "attributes.html#built-in-attributes-index",
+ };
+ var target = fragments[window.location.hash];
+ if (target) {
+ var url = window.location.toString();
+ var base = url.substring(0, url.lastIndexOf('/'));
+ window.location.replace(base + "/" + target);
+ }
+})();
+</script>
diff --git a/src/doc/reference/src/attributes.md b/src/doc/reference/src/attributes.md
new file mode 100644
index 000000000..857cd7d72
--- /dev/null
+++ b/src/doc/reference/src/attributes.md
@@ -0,0 +1,346 @@
+{{#include attributes-redirect.html}}
+# Attributes
+
+> **<sup>Syntax</sup>**\
+> _InnerAttribute_ :\
+> &nbsp;&nbsp; `#` `!` `[` _Attr_ `]`
+>
+> _OuterAttribute_ :\
+> &nbsp;&nbsp; `#` `[` _Attr_ `]`
+>
+> _Attr_ :\
+> &nbsp;&nbsp; [_SimplePath_] _AttrInput_<sup>?</sup>
+>
+> _AttrInput_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_DelimTokenTree_]\
+> &nbsp;&nbsp; | `=` [_Expression_]
+
+An _attribute_ is a general, free-form metadatum that is interpreted according
+to name, convention, language, and compiler version. Attributes are modeled
+on Attributes in [ECMA-335], with the syntax coming from [ECMA-334] \(C#).
+
+_Inner attributes_, written with a bang (`!`) after the hash (`#`), apply to the
+item that the attribute is declared within. _Outer attributes_, written without
+the bang after the hash, apply to the thing that follows the attribute.
+
+The attribute consists of a path to the attribute, followed by an optional
+delimited token tree whose interpretation is defined by the attribute.
+Attributes other than macro attributes also allow the input to be an equals
+sign (`=`) followed by an expression. See the [meta item
+syntax](#meta-item-attribute-syntax) below for more details.
+
+Attributes can be classified into the following kinds:
+
+* [Built-in attributes]
+* [Macro attributes][attribute macros]
+* [Derive macro helper attributes]
+* [Tool attributes](#tool-attributes)
+
+Attributes may be applied to many things in the language:
+
+* All [item declarations] accept outer attributes while [external blocks],
+ [functions], [implementations], and [modules] accept inner attributes.
+* Most [statements] accept outer attributes (see [Expression Attributes] for
+ limitations on expression statements).
+* [Block expressions] accept outer and inner attributes, but only when they are
+ the outer expression of an [expression statement] or the final expression of
+ another block expression.
+* [Enum] variants and [struct] and [union] fields accept outer attributes.
+* [Match expression arms][match expressions] accept outer attributes.
+* [Generic lifetime or type parameter][generics] accept outer attributes.
+* Expressions accept outer attributes in limited situations, see [Expression
+ Attributes] for details.
+* [Function][functions], [closure] and [function pointer]
+ parameters accept outer attributes. This includes attributes on variadic parameters
+ denoted with `...` in function pointers and [external blocks][variadic functions].
+
+Some examples of attributes:
+
+```rust
+// General metadata applied to the enclosing module or crate.
+#![crate_type = "lib"]
+
+// A function marked as a unit test
+#[test]
+fn test_foo() {
+ /* ... */
+}
+
+// A conditionally-compiled module
+#[cfg(target_os = "linux")]
+mod bar {
+ /* ... */
+}
+
+// A lint attribute used to suppress a warning/error
+#[allow(non_camel_case_types)]
+type int8_t = i8;
+
+// Inner attribute applies to the entire function.
+fn some_unused_variables() {
+ #![allow(unused_variables)]
+
+ let x = ();
+ let y = ();
+ let z = ();
+}
+```
+
+## Meta Item Attribute Syntax
+
+A "meta item" is the syntax used for the _Attr_ rule by most [built-in
+attributes]. It has the following grammar:
+
+> **<sup>Syntax</sup>**\
+> _MetaItem_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_SimplePath_]\
+> &nbsp;&nbsp; | [_SimplePath_] `=` [_Expression_]\
+> &nbsp;&nbsp; | [_SimplePath_] `(` _MetaSeq_<sup>?</sup> `)`
+>
+> _MetaSeq_ :\
+> &nbsp;&nbsp; _MetaItemInner_ ( `,` MetaItemInner )<sup>\*</sup> `,`<sup>?</sup>
+>
+> _MetaItemInner_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _MetaItem_\
+> &nbsp;&nbsp; | [_Expression_]
+
+Expressions in meta items must macro-expand to literal expressions, which must not
+include integer or float type suffixes. Expressions which are not literal expressions
+will be syntactically accepted (and can be passed to proc-macros), but will be rejected after parsing.
+
+Note that if the attribute appears within another macro, it will be expanded
+after that outer macro. For example, the following code will expand the
+`Serialize` proc-macro first, which must preserve the `include_str!` call in
+order for it to be expanded:
+
+```rust ignore
+#[derive(Serialize)]
+struct Foo {
+ #[doc = include_str!("x.md")]
+ x: u32
+}
+```
+
+Additionally, macros in attributes will be expanded only after all other attributes applied to the item:
+
+```rust ignore
+#[macro_attr1] // expanded first
+#[doc = mac!()] // `mac!` is expanded fourth.
+#[macro_attr2] // expanded second
+#[derive(MacroDerive1, MacroDerive2)] // expanded third
+fn foo() {}
+```
+
+Various built-in attributes use different subsets of the meta item syntax to
+specify their inputs. The following grammar rules show some commonly used
+forms:
+
+> **<sup>Syntax</sup>**\
+> _MetaWord_:\
+> &nbsp;&nbsp; [IDENTIFIER]
+>
+> _MetaNameValueStr_:\
+> &nbsp;&nbsp; [IDENTIFIER] `=` ([STRING_LITERAL] | [RAW_STRING_LITERAL])
+>
+> _MetaListPaths_:\
+> &nbsp;&nbsp; [IDENTIFIER] `(` ( [_SimplePath_] (`,` [_SimplePath_])* `,`<sup>?</sup> )<sup>?</sup> `)`
+>
+> _MetaListIdents_:\
+> &nbsp;&nbsp; [IDENTIFIER] `(` ( [IDENTIFIER] (`,` [IDENTIFIER])* `,`<sup>?</sup> )<sup>?</sup> `)`
+>
+> _MetaListNameValueStr_:\
+> &nbsp;&nbsp; [IDENTIFIER] `(` ( _MetaNameValueStr_ (`,` _MetaNameValueStr_)* `,`<sup>?</sup> )<sup>?</sup> `)`
+
+Some examples of meta items are:
+
+Style | Example
+------|--------
+_MetaWord_ | `no_std`
+_MetaNameValueStr_ | `doc = "example"`
+_MetaListPaths_ | `allow(unused, clippy::inline_always)`
+_MetaListIdents_ | `macro_use(foo, bar)`
+_MetaListNameValueStr_ | `link(name = "CoreFoundation", kind = "framework")`
+
+## Active and inert attributes
+
+An attribute is either active or inert. During attribute processing, *active
+attributes* remove themselves from the thing they are on while *inert attributes*
+stay on.
+
+The [`cfg`] and [`cfg_attr`] attributes are active. The [`test`] attribute is
+inert when compiling for tests and active otherwise. [Attribute macros] are
+active. All other attributes are inert.
+
+## Tool attributes
+
+The compiler may allow attributes for external tools where each tool resides
+in its own namespace in the [tool prelude]. The first segment of the attribute
+path is the name of the tool, with one or more additional segments whose
+interpretation is up to the tool.
+
+When a tool is not in use, the tool's attributes are accepted without a
+warning. When the tool is in use, the tool is responsible for processing and
+interpretation of its attributes.
+
+Tool attributes are not available if the [`no_implicit_prelude`] attribute is
+used.
+
+```rust
+// Tells the rustfmt tool to not format the following element.
+#[rustfmt::skip]
+struct S {
+}
+
+// Controls the "cyclomatic complexity" threshold for the clippy tool.
+#[clippy::cyclomatic_complexity = "100"]
+pub fn f() {}
+```
+
+> Note: `rustc` currently recognizes the tools "clippy" and "rustfmt".
+
+## Built-in attributes index
+
+The following is an index of all built-in attributes.
+
+- Conditional compilation
+ - [`cfg`] — Controls conditional compilation.
+ - [`cfg_attr`] — Conditionally includes attributes.
+- Testing
+ - [`test`] — Marks a function as a test.
+ - [`ignore`] — Disables a test function.
+ - [`should_panic`] — Indicates a test should generate a panic.
+- Derive
+ - [`derive`] — Automatic trait implementations.
+ - [`automatically_derived`] — Marker for implementations created by
+ `derive`.
+- Macros
+ - [`macro_export`] — Exports a `macro_rules` macro for cross-crate usage.
+ - [`macro_use`] — Expands macro visibility, or imports macros from other
+ crates.
+ - [`proc_macro`] — Defines a function-like macro.
+ - [`proc_macro_derive`] — Defines a derive macro.
+ - [`proc_macro_attribute`] — Defines an attribute macro.
+- Diagnostics
+ - [`allow`], [`warn`], [`deny`], [`forbid`] — Alters the default lint level.
+ - [`deprecated`] — Generates deprecation notices.
+ - [`must_use`] — Generates a lint for unused values.
+- ABI, linking, symbols, and FFI
+ - [`link`] — Specifies a native library to link with an `extern` block.
+ - [`link_name`] — Specifies the name of the symbol for functions or statics
+ in an `extern` block.
+ - [`no_link`] — Prevents linking an extern crate.
+ - [`repr`] — Controls type layout.
+ - [`crate_type`] — Specifies the type of crate (library, executable, etc.).
+ - [`no_main`] — Disables emitting the `main` symbol.
+ - [`export_name`] — Specifies the exported symbol name for a function or
+ static.
+ - [`link_section`] — Specifies the section of an object file to use for a
+ function or static.
+ - [`no_mangle`] — Disables symbol name encoding.
+ - [`used`] — Forces the compiler to keep a static item in the output
+ object file.
+ - [`crate_name`] — Specifies the crate name.
+- Code generation
+ - [`inline`] — Hint to inline code.
+ - [`cold`] — Hint that a function is unlikely to be called.
+ - [`no_builtins`] — Disables use of certain built-in functions.
+ - [`target_feature`] — Configure platform-specific code generation.
+ - [`track_caller`] - Pass the parent call location to `std::panic::Location::caller()`.
+- Documentation
+ - `doc` — Specifies documentation. See [The Rustdoc Book] for more
+ information. [Doc comments] are transformed into `doc` attributes.
+- Preludes
+ - [`no_std`] — Removes std from the prelude.
+ - [`no_implicit_prelude`] — Disables prelude lookups within a module.
+- Modules
+ - [`path`] — Specifies the filename for a module.
+- Limits
+ - [`recursion_limit`] — Sets the maximum recursion limit for certain
+ compile-time operations.
+ - [`type_length_limit`] — Sets the maximum size of a polymorphic type.
+- Runtime
+ - [`panic_handler`] — Sets the function to handle panics.
+ - [`global_allocator`] — Sets the global memory allocator.
+ - [`windows_subsystem`] — Specifies the windows subsystem to link with.
+- Features
+ - `feature` — Used to enable unstable or experimental compiler features. See
+ [The Unstable Book] for features implemented in `rustc`.
+- Type System
+ - [`non_exhaustive`] — Indicate that a type will have more fields/variants
+ added in future.
+
+[Doc comments]: comments.md#doc-comments
+[ECMA-334]: https://www.ecma-international.org/publications/standards/Ecma-334.htm
+[ECMA-335]: https://www.ecma-international.org/publications/standards/Ecma-335.htm
+[Expression Attributes]: expressions.md#expression-attributes
+[IDENTIFIER]: identifiers.md
+[RAW_STRING_LITERAL]: tokens.md#raw-string-literals
+[STRING_LITERAL]: tokens.md#string-literals
+[The Rustdoc Book]: ../rustdoc/the-doc-attribute.html
+[The Unstable Book]: ../unstable-book/index.html
+[_DelimTokenTree_]: macros.md
+[_Expression_]: expressions.md
+[_SimplePath_]: paths.md#simple-paths
+[`allow`]: attributes/diagnostics.md#lint-check-attributes
+[`automatically_derived`]: attributes/derive.md#the-automatically_derived-attribute
+[`cfg_attr`]: conditional-compilation.md#the-cfg_attr-attribute
+[`cfg`]: conditional-compilation.md#the-cfg-attribute
+[`cold`]: attributes/codegen.md#the-cold-attribute
+[`crate_name`]: crates-and-source-files.md#the-crate_name-attribute
+[`crate_type`]: linkage.md
+[`deny`]: attributes/diagnostics.md#lint-check-attributes
+[`deprecated`]: attributes/diagnostics.md#the-deprecated-attribute
+[`derive`]: attributes/derive.md
+[`export_name`]: abi.md#the-export_name-attribute
+[`forbid`]: attributes/diagnostics.md#lint-check-attributes
+[`global_allocator`]: runtime.md#the-global_allocator-attribute
+[`ignore`]: attributes/testing.md#the-ignore-attribute
+[`inline`]: attributes/codegen.md#the-inline-attribute
+[`link_name`]: items/external-blocks.md#the-link_name-attribute
+[`link_section`]: abi.md#the-link_section-attribute
+[`link`]: items/external-blocks.md#the-link-attribute
+[`macro_export`]: macros-by-example.md#path-based-scope
+[`macro_use`]: macros-by-example.md#the-macro_use-attribute
+[`must_use`]: attributes/diagnostics.md#the-must_use-attribute
+[`no_builtins`]: attributes/codegen.md#the-no_builtins-attribute
+[`no_implicit_prelude`]: names/preludes.md#the-no_implicit_prelude-attribute
+[`no_link`]: items/extern-crates.md#the-no_link-attribute
+[`no_main`]: crates-and-source-files.md#the-no_main-attribute
+[`no_mangle`]: abi.md#the-no_mangle-attribute
+[`no_std`]: names/preludes.md#the-no_std-attribute
+[`non_exhaustive`]: attributes/type_system.md#the-non_exhaustive-attribute
+[`panic_handler`]: runtime.md#the-panic_handler-attribute
+[`path`]: items/modules.md#the-path-attribute
+[`proc_macro_attribute`]: procedural-macros.md#attribute-macros
+[`proc_macro_derive`]: procedural-macros.md#derive-macros
+[`proc_macro`]: procedural-macros.md#function-like-procedural-macros
+[`recursion_limit`]: attributes/limits.md#the-recursion_limit-attribute
+[`repr`]: type-layout.md#representations
+[`should_panic`]: attributes/testing.md#the-should_panic-attribute
+[`target_feature`]: attributes/codegen.md#the-target_feature-attribute
+[`test`]: attributes/testing.md#the-test-attribute
+[`track_caller`]: attributes/codegen.md#the-track_caller-attribute
+[`type_length_limit`]: attributes/limits.md#the-type_length_limit-attribute
+[`used`]: abi.md#the-used-attribute
+[`warn`]: attributes/diagnostics.md#lint-check-attributes
+[`windows_subsystem`]: runtime.md#the-windows_subsystem-attribute
+[attribute macros]: procedural-macros.md#attribute-macros
+[block expressions]: expressions/block-expr.md
+[built-in attributes]: #built-in-attributes-index
+[derive macro helper attributes]: procedural-macros.md#derive-macro-helper-attributes
+[enum]: items/enumerations.md
+[expression statement]: statements.md#expression-statements
+[external blocks]: items/external-blocks.md
+[functions]: items/functions.md
+[generics]: items/generics.md
+[implementations]: items/implementations.md
+[item declarations]: items.md
+[match expressions]: expressions/match-expr.md
+[modules]: items/modules.md
+[statements]: statements.md
+[struct]: items/structs.md
+[tool prelude]: names/preludes.md#tool-prelude
+[union]: items/unions.md
+[closure]: expressions/closure-expr.md
+[function pointer]: types/function-pointer.md
+[variadic functions]: items/external-blocks.html#variadic-functions
diff --git a/src/doc/reference/src/attributes/codegen.md b/src/doc/reference/src/attributes/codegen.md
new file mode 100644
index 000000000..4ebabaccf
--- /dev/null
+++ b/src/doc/reference/src/attributes/codegen.md
@@ -0,0 +1,354 @@
+# Code generation attributes
+
+The following [attributes] are used for controlling code generation.
+
+## Optimization hints
+
+The `cold` and `inline` [attributes] give suggestions to generate code in a
+way that may be faster than what it would do without the hint. The attributes
+are only hints, and may be ignored.
+
+Both attributes can be used on [functions]. When applied to a function in a
+[trait], they apply only to that function when used as a default function for
+a trait implementation and not to all trait implementations. The attributes
+have no effect on a trait function without a body.
+
+### The `inline` attribute
+
+The *`inline` [attribute]* suggests that a copy of the attributed function
+should be placed in the caller, rather than generating code to call the
+function where it is defined.
+
+> ***Note***: The `rustc` compiler automatically inlines functions based on
+> internal heuristics. Incorrectly inlining functions can make the program
+> slower, so this attribute should be used with care.
+
+There are three ways to use the inline attribute:
+
+* `#[inline]` *suggests* performing an inline expansion.
+* `#[inline(always)]` *suggests* that an inline expansion should always be
+ performed.
+* `#[inline(never)]` *suggests* that an inline expansion should never be
+ performed.
+
+> ***Note***: `#[inline]` in every form is a hint, with no *requirements*
+> on the language to place a copy of the attributed function in the caller.
+
+### The `cold` attribute
+
+The *`cold` [attribute]* suggests that the attributed function is unlikely to
+be called.
+
+## The `no_builtins` attribute
+
+The *`no_builtins` [attribute]* may be applied at the crate level to disable
+optimizing certain code patterns to invocations of library functions that are
+assumed to exist.
+
+## The `target_feature` attribute
+
+The *`target_feature` [attribute]* may be applied to a function to
+enable code generation of that function for specific platform architecture
+features. It uses the [_MetaListNameValueStr_] syntax with a single key of
+`enable` whose value is a string of comma-separated feature names to enable.
+
+```rust
+# #[cfg(target_feature = "avx2")]
+#[target_feature(enable = "avx2")]
+unsafe fn foo_avx2() {}
+```
+
+Each [target architecture] has a set of features that may be enabled. It is an
+error to specify a feature for a target architecture that the crate is not
+being compiled for.
+
+It is [undefined behavior] to call a function that is compiled with a feature
+that is not supported on the current platform the code is running on, *except*
+if the platform explicitly documents this to be safe.
+
+Functions marked with `target_feature` are not inlined into a context that
+does not support the given features. The `#[inline(always)]` attribute may not
+be used with a `target_feature` attribute.
+
+### Available features
+
+The following is a list of the available feature names.
+
+#### `x86` or `x86_64`
+
+Executing code with unsupported features is undefined behavior on this platform.
+Hence this platform requires that `#[target_feature]` is only applied to [`unsafe`
+functions][unsafe function].
+
+Feature | Implicitly Enables | Description
+------------|--------------------|-------------------
+`adx` | | [ADX] — Multi-Precision Add-Carry Instruction Extensions
+`aes` | `sse2` | [AES] — Advanced Encryption Standard
+`avx` | `sse4.2` | [AVX] — Advanced Vector Extensions
+`avx2` | `avx` | [AVX2] — Advanced Vector Extensions 2
+`bmi1` | | [BMI1] — Bit Manipulation Instruction Sets
+`bmi2` | | [BMI2] — Bit Manipulation Instruction Sets 2
+`fma` | `avx` | [FMA3] — Three-operand fused multiply-add
+`fxsr` | | [`fxsave`] and [`fxrstor`] — Save and restore x87 FPU, MMX Technology, and SSE State
+`lzcnt` | | [`lzcnt`] — Leading zeros count
+`pclmulqdq` | `sse2` | [`pclmulqdq`] — Packed carry-less multiplication quadword
+`popcnt` | | [`popcnt`] — Count of bits set to 1
+`rdrand` | | [`rdrand`] — Read random number
+`rdseed` | | [`rdseed`] — Read random seed
+`sha` | `sse2` | [SHA] — Secure Hash Algorithm
+`sse` | | [SSE] — Streaming <abbr title="Single Instruction Multiple Data">SIMD</abbr> Extensions
+`sse2` | `sse` | [SSE2] — Streaming SIMD Extensions 2
+`sse3` | `sse2` | [SSE3] — Streaming SIMD Extensions 3
+`sse4.1` | `ssse3` | [SSE4.1] — Streaming SIMD Extensions 4.1
+`sse4.2` | `sse4.1` | [SSE4.2] — Streaming SIMD Extensions 4.2
+`ssse3` | `sse3` | [SSSE3] — Supplemental Streaming SIMD Extensions 3
+`xsave` | | [`xsave`] — Save processor extended states
+`xsavec` | | [`xsavec`] — Save processor extended states with compaction
+`xsaveopt` | | [`xsaveopt`] — Save processor extended states optimized
+`xsaves` | | [`xsaves`] — Save processor extended states supervisor
+
+<!-- Keep links near each table to make it easier to move and update. -->
+
+[ADX]: https://en.wikipedia.org/wiki/Intel_ADX
+[AES]: https://en.wikipedia.org/wiki/AES_instruction_set
+[AVX]: https://en.wikipedia.org/wiki/Advanced_Vector_Extensions
+[AVX2]: https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#AVX2
+[BMI1]: https://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets
+[BMI2]: https://en.wikipedia.org/wiki/Bit_Manipulation_Instruction_Sets#BMI2
+[FMA3]: https://en.wikipedia.org/wiki/FMA_instruction_set
+[`fxsave`]: https://www.felixcloutier.com/x86/fxsave
+[`fxrstor`]: https://www.felixcloutier.com/x86/fxrstor
+[`lzcnt`]: https://www.felixcloutier.com/x86/lzcnt
+[`pclmulqdq`]: https://www.felixcloutier.com/x86/pclmulqdq
+[`popcnt`]: https://www.felixcloutier.com/x86/popcnt
+[`rdrand`]: https://en.wikipedia.org/wiki/RdRand
+[`rdseed`]: https://en.wikipedia.org/wiki/RdRand
+[SHA]: https://en.wikipedia.org/wiki/Intel_SHA_extensions
+[SSE]: https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions
+[SSE2]: https://en.wikipedia.org/wiki/SSE2
+[SSE3]: https://en.wikipedia.org/wiki/SSE3
+[SSE4.1]: https://en.wikipedia.org/wiki/SSE4#SSE4.1
+[SSE4.2]: https://en.wikipedia.org/wiki/SSE4#SSE4.2
+[SSSE3]: https://en.wikipedia.org/wiki/SSSE3
+[`xsave`]: https://www.felixcloutier.com/x86/xsave
+[`xsavec`]: https://www.felixcloutier.com/x86/xsavec
+[`xsaveopt`]: https://www.felixcloutier.com/x86/xsaveopt
+[`xsaves`]: https://www.felixcloutier.com/x86/xsaves
+
+#### `aarch64`
+
+This platform requires that `#[target_feature]` is only applied to [`unsafe`
+functions][unsafe function].
+
+Further documentation on these features can be found in the [ARM Architecture
+Reference Manual], or elsewhere on [developer.arm.com].
+
+[ARM Architecture Reference Manual]: https://developer.arm.com/documentation/ddi0487/latest
+[developer.arm.com]: https://developer.arm.com
+
+> ***Note***: The following pairs of features should both be marked as enabled
+> or disabled together if used:
+> - `paca` and `pacg`, which LLVM currently implements as one feature.
+
+
+Feature | Implicitly Enables | Feature Name
+---------------|--------------------|-------------------
+`aes` | `neon` | FEAT_AES - Advanced <abbr title="Single Instruction Multiple Data">SIMD</abbr> AES instructions
+`bf16` | | FEAT_BF16 - BFloat16 instructions
+`bti` | | FEAT_BTI - Branch Target Identification
+`crc` | | FEAT_CRC - CRC32 checksum instructions
+`dit` | | FEAT_DIT - Data Independent Timing instructions
+`dotprod` | | FEAT_DotProd - Advanced SIMD Int8 dot product instructions
+`dpb` | | FEAT_DPB - Data cache clean to point of persistence
+`dpb2` | | FEAT_DPB2 - Data cache clean to point of deep persistence
+`f32mm` | `sve` | FEAT_F32MM - SVE single-precision FP matrix multiply instruction
+`f64mm` | `sve` | FEAT_F64MM - SVE double-precision FP matrix multiply instruction
+`fcma` | `neon` | FEAT_FCMA - Floating point complex number support
+`fhm` | `fp16` | FEAT_FHM - Half-precision FP FMLAL instructions
+`flagm` | | FEAT_FlagM - Conditional flag manipulation
+`fp16` | `neon` | FEAT_FP16 - Half-precision FP data processing
+`frintts` | | FEAT_FRINTTS - Floating-point to int helper instructions
+`i8mm` | | FEAT_I8MM - Int8 Matrix Multiplication
+`jsconv` | `neon` | FEAT_JSCVT - JavaScript conversion instruction
+`lse` | | FEAT_LSE - Large System Extension
+`lor` | | FEAT_LOR - Limited Ordering Regions extension
+`mte` | | FEAT_MTE - Memory Tagging Extension
+`neon` | | FEAT_FP & FEAT_AdvSIMD - Floating Point and Advanced SIMD extension
+`pan` | | FEAT_PAN - Privileged Access-Never extension
+`paca` | | FEAT_PAuth - Pointer Authentication (address authentication)
+`pacg` | | FEAT_PAuth - Pointer Authentication (generic authentication)
+`pmuv3` | | FEAT_PMUv3 - Performance Monitors extension (v3)
+`rand` | | FEAT_RNG - Random Number Generator
+`ras` | | FEAT_RAS - Reliability, Availability and Serviceability extension
+`rcpc` | | FEAT_LRCPC - Release consistent Processor Consistent
+`rcpc2` | `rcpc` | FEAT_LRCPC2 - RcPc with immediate offsets
+`rdm` | | FEAT_RDM - Rounding Double Multiply accumulate
+`sb` | | FEAT_SB - Speculation Barrier
+`sha2` | `neon` | FEAT_SHA1 & FEAT_SHA256 - Advanced SIMD SHA instructions
+`sha3` | `sha2` | FEAT_SHA512 & FEAT_SHA3 - Advanced SIMD SHA instructions
+`sm4` | `neon` | FEAT_SM3 & FEAT_SM4 - Advanced SIMD SM3/4 instructions
+`spe` | | FEAT_SPE - Statistical Profiling Extension
+`ssbs` | | FEAT_SSBS - Speculative Store Bypass Safe
+`sve` | `fp16` | FEAT_SVE - Scalable Vector Extension
+`sve2` | `sve` | FEAT_SVE2 - Scalable Vector Extension 2
+`sve2-aes` | `sve2`, `aes` | FEAT_SVE_AES - SVE AES instructions
+`sve2-sm4` | `sve2`, `sm4` | FEAT_SVE_SM4 - SVE SM4 instructions
+`sve2-sha3` | `sve2`, `sha3` | FEAT_SVE_SHA3 - SVE SHA3 instructions
+`sve2-bitperm` | `sve2` | FEAT_SVE_BitPerm - SVE Bit Permute
+`tme` | | FEAT_TME - Transactional Memory Extension
+`vh` | | FEAT_VHE - Virtualization Host Extensions
+
+#### `wasm32` or `wasm64`
+
+`#[target_feature]` may be used with both safe and
+[`unsafe` functions][unsafe function] on Wasm platforms. It is impossible to
+cause undefined behavior via the `#[target_feature]` attribute because
+attempting to use instructions unsupported by the Wasm engine will fail at load
+time without the risk of being interpreted in a way different from what the
+compiler expected.
+
+Feature | Description
+------------|-------------------
+`simd128` | [WebAssembly simd proposal][simd128]
+
+[simd128]: https://github.com/webassembly/simd
+
+### Additional information
+
+See the [`target_feature` conditional compilation option] for selectively
+enabling or disabling compilation of code based on compile-time settings. Note
+that this option is not affected by the `target_feature` attribute, and is
+only driven by the features enabled for the entire crate.
+
+See the [`is_x86_feature_detected`] or [`is_aarch64_feature_detected`] macros
+in the standard library for runtime feature detection on these platforms.
+
+> Note: `rustc` has a default set of features enabled for each target and CPU.
+> The CPU may be chosen with the [`-C target-cpu`] flag. Individual features
+> may be enabled or disabled for an entire crate with the
+> [`-C target-feature`] flag.
+
+## The `track_caller` attribute
+
+The `track_caller` attribute may be applied to any function with [`"Rust"` ABI][rust-abi]
+with the exception of the entry point `fn main`. When applied to functions and methods in
+trait declarations, the attribute applies to all implementations. If the trait provides a
+default implementation with the attribute, then the attribute also applies to override implementations.
+
+When applied to a function in an `extern` block the attribute must also be applied to any linked
+implementations, otherwise undefined behavior results. When applied to a function which is made
+available to an `extern` block, the declaration in the `extern` block must also have the attribute,
+otherwise undefined behavior results.
+
+### Behavior
+
+Applying the attribute to a function `f` allows code within `f` to get a hint of the [`Location`] of
+the "topmost" tracked call that led to `f`'s invocation. At the point of observation, an
+implementation behaves as if it walks up the stack from `f`'s frame to find the nearest frame of an
+*unattributed* function `outer`, and it returns the [`Location`] of the tracked call in `outer`.
+
+```rust
+#[track_caller]
+fn f() {
+ println!("{}", std::panic::Location::caller());
+}
+```
+
+> Note: `core` provides [`core::panic::Location::caller`] for observing caller locations. It wraps
+> the [`core::intrinsics::caller_location`] intrinsic implemented by `rustc`.
+
+> Note: because the resulting `Location` is a hint, an implementation may halt its walk up the stack
+> early. See [Limitations](#limitations) for important caveats.
+
+#### Examples
+
+When `f` is called directly by `calls_f`, code in `f` observes its callsite within `calls_f`:
+
+```rust
+# #[track_caller]
+# fn f() {
+# println!("{}", std::panic::Location::caller());
+# }
+fn calls_f() {
+ f(); // <-- f() prints this location
+}
+```
+
+When `f` is called by another attributed function `g` which is in turn called by `calls_g`, code in
+both `f` and `g` observes `g`'s callsite within `calls_g`:
+
+```rust
+# #[track_caller]
+# fn f() {
+# println!("{}", std::panic::Location::caller());
+# }
+#[track_caller]
+fn g() {
+ println!("{}", std::panic::Location::caller());
+ f();
+}
+
+fn calls_g() {
+ g(); // <-- g() prints this location twice, once itself and once from f()
+}
+```
+
+When `g` is called by another attributed function `h` which is in turn called by `calls_h`, all code
+in `f`, `g`, and `h` observes `h`'s callsite within `calls_h`:
+
+```rust
+# #[track_caller]
+# fn f() {
+# println!("{}", std::panic::Location::caller());
+# }
+# #[track_caller]
+# fn g() {
+# println!("{}", std::panic::Location::caller());
+# f();
+# }
+#[track_caller]
+fn h() {
+ println!("{}", std::panic::Location::caller());
+ g();
+}
+
+fn calls_h() {
+ h(); // <-- prints this location three times, once itself, once from g(), once from f()
+}
+```
+
+And so on.
+
+### Limitations
+
+This information is a hint and implementations are not required to preserve it.
+
+In particular, coercing a function with `#[track_caller]` to a function pointer creates a shim which
+appears to observers to have been called at the attributed function's definition site, losing actual
+caller information across virtual calls. A common example of this coercion is the creation of a
+trait object whose methods are attributed.
+
+> Note: The aforementioned shim for function pointers is necessary because `rustc` implements
+> `track_caller` in a codegen context by appending an implicit parameter to the function ABI, but
+> this would be unsound for an indirect call because the parameter is not a part of the function's
+> type and a given function pointer type may or may not refer to a function with the attribute. The
+> creation of a shim hides the implicit parameter from callers of the function pointer, preserving
+> soundness.
+
+[_MetaListNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[`-C target-cpu`]: ../../rustc/codegen-options/index.html#target-cpu
+[`-C target-feature`]: ../../rustc/codegen-options/index.html#target-feature
+[`is_x86_feature_detected`]: ../../std/arch/macro.is_x86_feature_detected.html
+[`is_aarch64_feature_detected`]: ../../std/arch/macro.is_aarch64_feature_detected.html
+[`target_feature` conditional compilation option]: ../conditional-compilation.md#target_feature
+[attribute]: ../attributes.md
+[attributes]: ../attributes.md
+[functions]: ../items/functions.md
+[target architecture]: ../conditional-compilation.md#target_arch
+[trait]: ../items/traits.md
+[undefined behavior]: ../behavior-considered-undefined.md
+[unsafe function]: ../unsafe-functions.md
+[rust-abi]: ../items/external-blocks.md#abi
+[`core::intrinsics::caller_location`]: ../../core/intrinsics/fn.caller_location.html
+[`core::panic::Location::caller`]: ../../core/panic/struct.Location.html#method.caller
+[`Location`]: ../../core/panic/struct.Location.html
diff --git a/src/doc/reference/src/attributes/derive.md b/src/doc/reference/src/attributes/derive.md
new file mode 100644
index 000000000..b8909ac71
--- /dev/null
+++ b/src/doc/reference/src/attributes/derive.md
@@ -0,0 +1,51 @@
+# Derive
+
+The *`derive` attribute* allows new [items] to be automatically generated for
+data structures. It uses the [_MetaListPaths_] syntax to specify a list of
+traits to implement or paths to [derive macros] to process.
+
+For example, the following will create an [`impl` item] for the
+[`PartialEq`] and [`Clone`] traits for `Foo`, and the type parameter `T` will be
+given the `PartialEq` or `Clone` constraints for the appropriate `impl`:
+
+```rust
+#[derive(PartialEq, Clone)]
+struct Foo<T> {
+ a: i32,
+ b: T,
+}
+```
+
+The generated `impl` for `PartialEq` is equivalent to
+
+```rust
+# struct Foo<T> { a: i32, b: T }
+impl<T: PartialEq> PartialEq for Foo<T> {
+ fn eq(&self, other: &Foo<T>) -> bool {
+ self.a == other.a && self.b == other.b
+ }
+
+ fn ne(&self, other: &Foo<T>) -> bool {
+ self.a != other.a || self.b != other.b
+ }
+}
+```
+
+You can implement `derive` for your own traits through [procedural macros].
+
+## The `automatically_derived` attribute
+
+The *`automatically_derived` attribute* is automatically added to
+[implementations] created by the `derive` attribute for built-in traits. It
+has no direct effect, but it may be used by tools and diagnostic lints to
+detect these automatically generated implementations.
+
+[_MetaListPaths_]: ../attributes.md#meta-item-attribute-syntax
+[`Clone`]: ../../std/clone/trait.Clone.html
+[`PartialEq`]: ../../std/cmp/trait.PartialEq.html
+[`impl` item]: ../items/implementations.md
+[items]: ../items.md
+[derive macros]: ../procedural-macros.md#derive-macros
+[implementations]: ../items/implementations.md
+[items]: ../items.md
+[procedural macros]: ../procedural-macros.md#derive-macros
diff --git a/src/doc/reference/src/attributes/diagnostics.md b/src/doc/reference/src/attributes/diagnostics.md
new file mode 100644
index 000000000..1dd9363d8
--- /dev/null
+++ b/src/doc/reference/src/attributes/diagnostics.md
@@ -0,0 +1,335 @@
+# Diagnostic attributes
+
+The following [attributes] are used for controlling or generating diagnostic
+messages during compilation.
+
+## Lint check attributes
+
+A lint check names a potentially undesirable coding pattern, such as
+unreachable code or omitted documentation. The lint attributes `allow`,
+`warn`, `deny`, and `forbid` use the [_MetaListPaths_] syntax to specify a
+list of lint names to change the lint level for the entity to which the
+attribute applies.
+
+For any lint check `C`:
+
+* `allow(C)` overrides the check for `C` so that violations will go
+ unreported,
+* `warn(C)` warns about violations of `C` but continues compilation.
+* `deny(C)` signals an error after encountering a violation of `C`,
+* `forbid(C)` is the same as `deny(C)`, but also forbids changing the lint
+ level afterwards,
+
+> Note: The lint checks supported by `rustc` can be found via `rustc -W help`,
+> along with their default settings and are documented in the [rustc book].
+
+```rust
+pub mod m1 {
+ // Missing documentation is ignored here
+ #[allow(missing_docs)]
+ pub fn undocumented_one() -> i32 { 1 }
+
+ // Missing documentation signals a warning here
+ #[warn(missing_docs)]
+ pub fn undocumented_too() -> i32 { 2 }
+
+ // Missing documentation signals an error here
+ #[deny(missing_docs)]
+ pub fn undocumented_end() -> i32 { 3 }
+}
+```
+
+Lint attributes can override the level specified from a previous attribute, as
+long as the level does not attempt to change a forbidden lint. Previous
+attributes are those from a higher level in the syntax tree, or from a
+previous attribute on the same entity as listed in left-to-right source order.
+
+This example shows how one can use `allow` and `warn` to toggle a particular
+check on and off:
+
+```rust
+#[warn(missing_docs)]
+pub mod m2{
+ #[allow(missing_docs)]
+ pub mod nested {
+ // Missing documentation is ignored here
+ pub fn undocumented_one() -> i32 { 1 }
+
+ // Missing documentation signals a warning here,
+ // despite the allow above.
+ #[warn(missing_docs)]
+ pub fn undocumented_two() -> i32 { 2 }
+ }
+
+ // Missing documentation signals a warning here
+ pub fn undocumented_too() -> i32 { 3 }
+}
+```
+
+This example shows how one can use `forbid` to disallow uses of `allow` for
+that lint check:
+
+```rust,compile_fail
+#[forbid(missing_docs)]
+pub mod m3 {
+ // Attempting to toggle warning signals an error here
+ #[allow(missing_docs)]
+ /// Returns 2.
+ pub fn undocumented_too() -> i32 { 2 }
+}
+```
+
+> Note: `rustc` allows setting lint levels on the
+> [command-line][rustc-lint-cli], and also supports [setting
+> caps][rustc-lint-caps] on the lints that are reported.
+
+### Lint groups
+
+Lints may be organized into named groups so that the level of related lints
+can be adjusted together. Using a named group is equivalent to listing out the
+lints within that group.
+
+```rust,compile_fail
+// This allows all lints in the "unused" group.
+#[allow(unused)]
+// This overrides the "unused_must_use" lint from the "unused"
+// group to deny.
+#[deny(unused_must_use)]
+fn example() {
+ // This does not generate a warning because the "unused_variables"
+ // lint is in the "unused" group.
+ let x = 1;
+ // This generates an error because the result is unused and
+ // "unused_must_use" is marked as "deny".
+ std::fs::remove_file("some_file"); // ERROR: unused `Result` that must be used
+}
+```
+
+There is a special group named "warnings" which includes all lints at the
+"warn" level. The "warnings" group ignores attribute order and applies to all
+lints that would otherwise warn within the entity.
+
+```rust,compile_fail
+# unsafe fn an_unsafe_fn() {}
+// The order of these two attributes does not matter.
+#[deny(warnings)]
+// The unsafe_code lint is normally "allow" by default.
+#[warn(unsafe_code)]
+fn example_err() {
+ // This is an error because the `unsafe_code` warning has
+ // been lifted to "deny".
+ unsafe { an_unsafe_fn() } // ERROR: usage of `unsafe` block
+}
+```
+
+### Tool lint attributes
+
+Tool lints allows using scoped lints, to `allow`, `warn`, `deny` or `forbid`
+lints of certain tools.
+
+Tool lints only get checked when the associated tool is active. If a lint
+attribute, such as `allow`, references a nonexistent tool lint, the compiler
+will not warn about the nonexistent lint until you use the tool.
+
+Otherwise, they work just like regular lint attributes:
+
+```rust
+// set the entire `pedantic` clippy lint group to warn
+#![warn(clippy::pedantic)]
+// silence warnings from the `filter_map` clippy lint
+#![allow(clippy::filter_map)]
+
+fn main() {
+ // ...
+}
+
+// silence the `cmp_nan` clippy lint just for this function
+#[allow(clippy::cmp_nan)]
+fn foo() {
+ // ...
+}
+```
+
+> Note: `rustc` currently recognizes the tool lints for "[clippy]" and "[rustdoc]".
+
+## The `deprecated` attribute
+
+The *`deprecated` attribute* marks an item as deprecated. `rustc` will issue
+warnings on usage of `#[deprecated]` items. `rustdoc` will show item
+deprecation, including the `since` version and `note`, if available.
+
+The `deprecated` attribute has several forms:
+
+- `deprecated` — Issues a generic message.
+- `deprecated = "message"` — Includes the given string in the deprecation
+ message.
+- [_MetaListNameValueStr_] syntax with two optional fields:
+ - `since` — Specifies a version number when the item was deprecated. `rustc`
+ does not currently interpret the string, but external tools like [Clippy]
+ may check the validity of the value.
+ - `note` — Specifies a string that should be included in the deprecation
+ message. This is typically used to provide an explanation about the
+ deprecation and preferred alternatives.
+
+The `deprecated` attribute may be applied to any [item], [trait item], [enum
+variant], [struct field], [external block item], or [macro definition]. It
+cannot be applied to [trait implementation items]. When applied to an item
+containing other items, such as a [module] or [implementation], all child
+items inherit the deprecation attribute.
+<!-- NOTE: It is only rejected for trait impl items
+(AnnotationKind::Prohibited). In all other locations, it is silently ignored.
+Tuple struct fields are ignored.
+-->
+
+Here is an example:
+
+```rust
+#[deprecated(since = "5.2", note = "foo was rarely used. Users should instead use bar")]
+pub fn foo() {}
+
+pub fn bar() {}
+```
+
+The [RFC][1270-deprecation.md] contains motivations and more details.
+
+[1270-deprecation.md]: https://github.com/rust-lang/rfcs/blob/master/text/1270-deprecation.md
+
+## The `must_use` attribute
+
+The *`must_use` attribute* is used to issue a diagnostic warning when a value
+is not "used". It can be applied to user-defined composite types
+([`struct`s][struct], [`enum`s][enum], and [`union`s][union]), [functions],
+and [traits].
+
+The `must_use` attribute may include a message by using the
+[_MetaNameValueStr_] syntax such as `#[must_use = "example message"]`. The
+message will be given alongside the warning.
+
+When used on user-defined composite types, if the [expression] of an
+[expression statement] has that type, then the `unused_must_use` lint is
+violated.
+
+```rust
+#[must_use]
+struct MustUse {
+ // some fields
+}
+
+# impl MustUse {
+# fn new() -> MustUse { MustUse {} }
+# }
+#
+// Violates the `unused_must_use` lint.
+MustUse::new();
+```
+
+When used on a function, if the [expression] of an [expression statement] is a
+[call expression] to that function, then the `unused_must_use` lint is
+violated.
+
+```rust
+#[must_use]
+fn five() -> i32 { 5i32 }
+
+// Violates the unused_must_use lint.
+five();
+```
+
+When used on a [trait declaration], a [call expression] of an [expression
+statement] to a function that returns an [impl trait] or a [dyn trait] of that trait violates
+the `unused_must_use` lint.
+
+```rust
+#[must_use]
+trait Critical {}
+impl Critical for i32 {}
+
+fn get_critical() -> impl Critical {
+ 4i32
+}
+
+// Violates the `unused_must_use` lint.
+get_critical();
+```
+
+When used on a function in a trait declaration, then the behavior also applies
+when the call expression is a function from an implementation of the trait.
+
+```rust
+trait Trait {
+ #[must_use]
+ fn use_me(&self) -> i32;
+}
+
+impl Trait for i32 {
+ fn use_me(&self) -> i32 { 0i32 }
+}
+
+// Violates the `unused_must_use` lint.
+5i32.use_me();
+```
+
+When used on a function in a trait implementation, the attribute does nothing.
+
+> Note: Trivial no-op expressions containing the value will not violate the
+> lint. Examples include wrapping the value in a type that does not implement
+> [`Drop`] and then not using that type and being the final expression of a
+> [block expression] that is not used.
+>
+> ```rust
+> #[must_use]
+> fn five() -> i32 { 5i32 }
+>
+> // None of these violate the unused_must_use lint.
+> (five(),);
+> Some(five());
+> { five() };
+> if true { five() } else { 0i32 };
+> match true {
+> _ => five()
+> };
+> ```
+
+> Note: It is idiomatic to use a [let statement] with a pattern of `_`
+> when a must-used value is purposely discarded.
+>
+> ```rust
+> #[must_use]
+> fn five() -> i32 { 5i32 }
+>
+> // Does not violate the unused_must_use lint.
+> let _ = five();
+> ```
+
+[Clippy]: https://github.com/rust-lang/rust-clippy
+[_MetaListNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[_MetaListPaths_]: ../attributes.md#meta-item-attribute-syntax
+[_MetaNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[`Drop`]: ../special-types-and-traits.md#drop
+[attributes]: ../attributes.md
+[block expression]: ../expressions/block-expr.md
+[call expression]: ../expressions/call-expr.md
+[dyn trait]: ../types/trait-object.md
+[enum variant]: ../items/enumerations.md
+[enum]: ../items/enumerations.md
+[expression statement]: ../statements.md#expression-statements
+[expression]: ../expressions.md
+[external block item]: ../items/external-blocks.md
+[functions]: ../items/functions.md
+[impl trait]: ../types/impl-trait.md
+[implementation]: ../items/implementations.md
+[item]: ../items.md
+[let statement]: ../statements.md#let-statements
+[macro definition]: ../macros-by-example.md
+[module]: ../items/modules.md
+[rustc book]: ../../rustc/lints/index.html
+[rustc-lint-caps]: ../../rustc/lints/levels.html#capping-lints
+[rustc-lint-cli]: ../../rustc/lints/levels.html#via-compiler-flag
+[rustdoc]: ../../rustdoc/lints.html
+[struct field]: ../items/structs.md
+[struct]: ../items/structs.md
+[trait declaration]: ../items/traits.md
+[trait implementation items]: ../items/implementations.md#trait-implementations
+[trait item]: ../items/traits.md
+[traits]: ../items/traits.md
+[union]: ../items/unions.md
diff --git a/src/doc/reference/src/attributes/limits.md b/src/doc/reference/src/attributes/limits.md
new file mode 100644
index 000000000..65cb55b43
--- /dev/null
+++ b/src/doc/reference/src/attributes/limits.md
@@ -0,0 +1,57 @@
+# Limits
+
+The following [attributes] affect compile-time limits.
+
+## The `recursion_limit` attribute
+
+The *`recursion_limit` attribute* may be applied at the [crate] level to set the
+maximum depth for potentially infinitely-recursive compile-time operations
+like macro expansion or auto-dereference. It uses the [_MetaNameValueStr_]
+syntax to specify the recursion depth.
+
+> Note: The default in `rustc` is 128.
+
+```rust,compile_fail
+#![recursion_limit = "4"]
+
+macro_rules! a {
+ () => { a!(1); };
+ (1) => { a!(2); };
+ (2) => { a!(3); };
+ (3) => { a!(4); };
+ (4) => { };
+}
+
+// This fails to expand because it requires a recursion depth greater than 4.
+a!{}
+```
+
+```rust,compile_fail
+#![recursion_limit = "1"]
+
+// This fails because it requires two recursive steps to auto-dereference.
+(|_: &u8| {})(&&&1);
+```
+
+## The `type_length_limit` attribute
+
+The *`type_length_limit` attribute* limits the maximum number of type
+substitutions made when constructing a concrete type during monomorphization.
+It is applied at the [crate] level, and uses the [_MetaNameValueStr_] syntax
+to set the limit based on the number of type substitutions.
+
+> Note: The default in `rustc` is 1048576.
+
+```rust,compile_fail
+#![type_length_limit = "4"]
+
+fn f<T>(x: T) {}
+
+// This fails to compile because monomorphizing to
+// `f::<((((i32,), i32), i32), i32)>` requires more than 4 type elements.
+f(((((1,), 2), 3), 4));
+```
+
+[_MetaNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[attributes]: ../attributes.md
+[crate]: ../crates-and-source-files.md
diff --git a/src/doc/reference/src/attributes/testing.md b/src/doc/reference/src/attributes/testing.md
new file mode 100644
index 000000000..63df999ad
--- /dev/null
+++ b/src/doc/reference/src/attributes/testing.md
@@ -0,0 +1,90 @@
+# Testing attributes
+
+The following [attributes] are used for specifying functions for performing
+tests. Compiling a crate in "test" mode enables building the test functions
+along with a test harness for executing the tests. Enabling the test mode also
+enables the [`test` conditional compilation option].
+
+## The `test` attribute
+
+The *`test` attribute* marks a function to be executed as a test. These
+functions are only compiled when in test mode. Test functions must be free,
+monomorphic functions that take no arguments, and the return type must implement the [`Termination`] trait, for example:
+
+* `()`
+* `Result<(), E> where E: Debug`
+* `!`
+<!-- * Result<!, E> where E: Debug` -->
+
+<!-- If the previous section needs updating (from "must take no arguments"
+ onwards, also update it in the crates-and-source-files.md file -->
+
+> Note: The test mode is enabled by passing the `--test` argument to `rustc`
+> or using `cargo test`.
+
+The test harness calls the returned value's [`report`] method, and classifies the test as passed or failed depending on whether the resulting [`ExitCode`] represents successful termination.
+In particular:
+* Tests that return `()` pass as long as they terminate and do not panic.
+* Tests that return a `Result<(), E>` pass as long as they return `Ok(())`.
+* Tests that return `ExitCode::SUCCESS` pass, and tests that return `ExitCode::FAILURE` fail.
+* Tests that do not terminate neither pass nor fail.
+
+```rust
+# use std::io;
+# fn setup_the_thing() -> io::Result<i32> { Ok(1) }
+# fn do_the_thing(s: &i32) -> io::Result<()> { Ok(()) }
+#[test]
+fn test_the_thing() -> io::Result<()> {
+ let state = setup_the_thing()?; // expected to succeed
+ do_the_thing(&state)?; // expected to succeed
+ Ok(())
+}
+```
+
+## The `ignore` attribute
+
+A function annotated with the `test` attribute can also be annotated with the
+`ignore` attribute. The *`ignore` attribute* tells the test harness to not
+execute that function as a test. It will still be compiled when in test mode.
+
+The `ignore` attribute may optionally be written with the [_MetaNameValueStr_]
+syntax to specify a reason why the test is ignored.
+
+```rust
+#[test]
+#[ignore = "not yet implemented"]
+fn mytest() {
+ // …
+}
+```
+
+> **Note**: The `rustc` test harness supports the `--include-ignored` flag to
+> force ignored tests to be run.
+
+## The `should_panic` attribute
+
+A function annotated with the `test` attribute that returns `()` can also be
+annotated with the `should_panic` attribute. The *`should_panic` attribute*
+makes the test only pass if it actually panics.
+
+The `should_panic` attribute may optionally take an input string that must
+appear within the panic message. If the string is not found in the message,
+then the test will fail. The string may be passed using the
+[_MetaNameValueStr_] syntax or the [_MetaListNameValueStr_] syntax with an
+`expected` field.
+
+```rust
+#[test]
+#[should_panic(expected = "values don't match")]
+fn mytest() {
+ assert_eq!(1, 2, "values don't match");
+}
+```
+
+[_MetaListNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[_MetaNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[`Termination`]: ../../std/process/trait.Termination.html
+[`report`]: ../../std/process/trait.Termination.html#tymethod.report
+[`test` conditional compilation option]: ../conditional-compilation.md#test
+[attributes]: ../attributes.md
+[`ExitCode`]: ../../std/process/struct.ExitCode.html
diff --git a/src/doc/reference/src/attributes/type_system.md b/src/doc/reference/src/attributes/type_system.md
new file mode 100644
index 000000000..729069d26
--- /dev/null
+++ b/src/doc/reference/src/attributes/type_system.md
@@ -0,0 +1,141 @@
+# Type system attributes
+
+The following [attributes] are used for changing how a type can be used.
+
+## The `non_exhaustive` attribute
+
+The *`non_exhaustive` attribute* indicates that a type or variant may have
+more fields or variants added in the future. It can be applied to
+[`struct`s][struct], [`enum`s][enum], and `enum` variants.
+
+The `non_exhaustive` attribute uses the [_MetaWord_] syntax and thus does not
+take any inputs.
+
+Within the defining crate, `non_exhaustive` has no effect.
+
+```rust
+#[non_exhaustive]
+pub struct Config {
+ pub window_width: u16,
+ pub window_height: u16,
+}
+
+#[non_exhaustive]
+pub enum Error {
+ Message(String),
+ Other,
+}
+
+pub enum Message {
+ #[non_exhaustive] Send { from: u32, to: u32, contents: String },
+ #[non_exhaustive] Reaction(u32),
+ #[non_exhaustive] Quit,
+}
+
+// Non-exhaustive structs can be constructed as normal within the defining crate.
+let config = Config { window_width: 640, window_height: 480 };
+
+// Non-exhaustive structs can be matched on exhaustively within the defining crate.
+if let Config { window_width, window_height } = config {
+ // ...
+}
+
+let error = Error::Other;
+let message = Message::Reaction(3);
+
+// Non-exhaustive enums can be matched on exhaustively within the defining crate.
+match error {
+ Error::Message(ref s) => { },
+ Error::Other => { },
+}
+
+match message {
+ // Non-exhaustive variants can be matched on exhaustively within the defining crate.
+ Message::Send { from, to, contents } => { },
+ Message::Reaction(id) => { },
+ Message::Quit => { },
+}
+```
+
+Outside of the defining crate, types annotated with `non_exhaustive` have limitations that
+preserve backwards compatibility when new fields or variants are added.
+
+Non-exhaustive types cannot be constructed outside of the defining crate:
+
+- Non-exhaustive variants ([`struct`][struct] or [`enum` variant][enum]) cannot be constructed
+ with a [_StructExpression_] \(including with [functional update syntax]).
+- [`enum`][enum] instances can be constructed.
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+// `Config`, `Error`, and `Message` are types defined in an upstream crate that have been
+// annotated as `#[non_exhaustive]`.
+use upstream::{Config, Error, Message};
+
+// Cannot construct an instance of `Config`, if new fields were added in
+// a new version of `upstream` then this would fail to compile, so it is
+// disallowed.
+let config = Config { window_width: 640, window_height: 480 };
+
+// Can construct an instance of `Error`, new variants being introduced would
+// not result in this failing to compile.
+let error = Error::Message("foo".to_string());
+
+// Cannot construct an instance of `Message::Send` or `Message::Reaction`,
+// if new fields were added in a new version of `upstream` then this would
+// fail to compile, so it is disallowed.
+let message = Message::Send { from: 0, to: 1, contents: "foo".to_string(), };
+let message = Message::Reaction(0);
+
+// Cannot construct an instance of `Message::Quit`, if this were converted to
+// a tuple-variant `upstream` then this would fail to compile.
+let message = Message::Quit;
+```
+
+There are limitations when matching on non-exhaustive types outside of the defining crate:
+
+- When pattern matching on a non-exhaustive variant ([`struct`][struct] or [`enum` variant][enum]),
+ a [_StructPattern_] must be used which must include a `..`. Tuple variant constructor visibility
+ is lowered to `min($vis, pub(crate))`.
+- When pattern matching on a non-exhaustive [`enum`][enum], matching on a variant does not
+ contribute towards the exhaustiveness of the arms.
+
+<!-- ignore: requires external crates -->
+```rust, ignore
+// `Config`, `Error`, and `Message` are types defined in an upstream crate that have been
+// annotated as `#[non_exhaustive]`.
+use upstream::{Config, Error, Message};
+
+// Cannot match on a non-exhaustive enum without including a wildcard arm.
+match error {
+ Error::Message(ref s) => { },
+ Error::Other => { },
+ // would compile with: `_ => {},`
+}
+
+// Cannot match on a non-exhaustive struct without a wildcard.
+if let Ok(Config { window_width, window_height }) = config {
+ // would compile with: `..`
+}
+
+match message {
+ // Cannot match on a non-exhaustive struct enum variant without including a wildcard.
+ Message::Send { from, to, contents } => { },
+ // Cannot match on a non-exhaustive tuple or unit enum variant.
+ Message::Reaction(type) => { },
+ Message::Quit => { },
+}
+```
+
+Non-exhaustive types are always considered inhabited in downstream crates.
+
+[_MetaWord_]: ../attributes.md#meta-item-attribute-syntax
+[_StructExpression_]: ../expressions/struct-expr.md
+[_StructPattern_]: ../patterns.md#struct-patterns
+[_TupleStructPattern_]: ../patterns.md#tuple-struct-patterns
+[`if let`]: ../expressions/if-expr.md#if-let-expressions
+[`match`]: ../expressions/match-expr.md
+[attributes]: ../attributes.md
+[enum]: ../items/enumerations.md
+[functional update syntax]: ../expressions/struct-expr.md#functional-update-syntax
+[struct]: ../items/structs.md
diff --git a/src/doc/reference/src/behavior-considered-undefined.md b/src/doc/reference/src/behavior-considered-undefined.md
new file mode 100644
index 000000000..e810e8c0d
--- /dev/null
+++ b/src/doc/reference/src/behavior-considered-undefined.md
@@ -0,0 +1,104 @@
+## Behavior considered undefined
+
+Rust code is incorrect if it exhibits any of the behaviors in the following
+list. This includes code within `unsafe` blocks and `unsafe` functions.
+`unsafe` only means that avoiding undefined behavior is on the programmer; it
+does not change anything about the fact that Rust programs must never cause
+undefined behavior.
+
+It is the programmer's responsibility when writing `unsafe` code to ensure that
+any safe code interacting with the `unsafe` code cannot trigger these
+behaviors. `unsafe` code that satisfies this property for any safe client is
+called *sound*; if `unsafe` code can be misused by safe code to exhibit
+undefined behavior, it is *unsound*.
+
+<div class="warning">
+
+***Warning:*** The following list is not exhaustive. There is no formal model of
+Rust's semantics for what is and is not allowed in unsafe code, so there may be
+more behavior considered unsafe. The following list is just what we know for
+sure is undefined behavior. Please read the [Rustonomicon] before writing unsafe
+code.
+
+</div>
+
+* Data races.
+* Evaluating a [dereference expression] (`*expr`) on a raw pointer that is
+ [dangling] or unaligned, even in [place expression context]
+ (e.g. `addr_of!(&*expr)`).
+* Breaking the [pointer aliasing rules]. `&mut T` and `&T` follow LLVM’s scoped
+ [noalias] model, except if the `&T` contains an [`UnsafeCell<U>`].
+* Mutating immutable data. All data inside a [`const`] item is immutable. Moreover, all
+ data reached through a shared reference or data owned by an immutable binding
+ is immutable, unless that data is contained within an [`UnsafeCell<U>`].
+* Invoking undefined behavior via compiler intrinsics.
+* Executing code compiled with platform features that the current platform
+ does not support (see [`target_feature`]), *except* if the platform explicitly documents this to be safe.
+* Calling a function with the wrong call ABI or unwinding from a function with the wrong unwind ABI.
+* Producing an invalid value, even in private fields and locals. "Producing" a
+ value happens any time a value is assigned to or read from a place, passed to
+ a function/primitive operation or returned from a function/primitive
+ operation.
+ The following values are invalid (at their respective type):
+ * A value other than `false` (`0`) or `true` (`1`) in a [`bool`].
+ * A discriminant in an `enum` not included in the type definition.
+ * A null `fn` pointer.
+ * A value in a `char` which is a surrogate or above `char::MAX`.
+ * A `!` (all values are invalid for this type).
+ * An integer (`i*`/`u*`), floating point value (`f*`), or raw pointer obtained
+ from [uninitialized memory][undef], or uninitialized memory in a `str`.
+ * A reference or `Box<T>` that is [dangling], unaligned, or points to an invalid value.
+ * Invalid metadata in a wide reference, `Box<T>`, or raw pointer:
+ * `dyn Trait` metadata is invalid if it is not a pointer to a vtable for
+ `Trait` that matches the actual dynamic trait the pointer or reference points to.
+ * Slice metadata is invalid if the length is not a valid `usize`
+ (i.e., it must not be read from uninitialized memory).
+ * Invalid values for a type with a custom definition of invalid values.
+ In the standard library, this affects [`NonNull<T>`] and [`NonZero*`].
+
+ > **Note**: `rustc` achieves this with the unstable
+ > `rustc_layout_scalar_valid_range_*` attributes.
+* Incorrect use of inline assembly. For more details, refer to the [rules] to
+ follow when writing code that uses inline assembly.
+
+**Note:** Uninitialized memory is also implicitly invalid for any type that has
+a restricted set of valid values. In other words, the only cases in which
+reading uninitialized memory is permitted are inside `union`s and in "padding"
+(the gaps between the fields/elements of a type).
+
+> **Note**: Undefined behavior affects the entire program. For example, calling
+> a function in C that exhibits undefined behavior of C means your entire
+> program contains undefined behaviour that can also affect the Rust code. And
+> vice versa, undefined behavior in Rust can cause adverse affects on code
+> executed by any FFI calls to other languages.
+
+### Dangling pointers
+[dangling]: #dangling-pointers
+
+A reference/pointer is "dangling" if it is null or not all of the bytes it
+points to are part of the same live allocation (so in particular they all have to be
+part of *some* allocation). The span of bytes it points to is determined by the
+pointer value and the size of the pointee type (using `size_of_val`).
+
+If the size is 0, then the pointer must either point inside of a live allocation
+(including pointing just after the last byte of the allocation), or it must be
+directly constructed from a non-zero integer literal.
+
+Note that dynamically sized types (such as slices and strings) point to their
+entire range, so it is important that the length metadata is never too large. In
+particular, the dynamic size of a Rust value (as determined by `size_of_val`)
+must never exceed `isize::MAX`.
+
+[`bool`]: types/boolean.md
+[`const`]: items/constant-items.md
+[noalias]: http://llvm.org/docs/LangRef.html#noalias
+[pointer aliasing rules]: http://llvm.org/docs/LangRef.html#pointer-aliasing-rules
+[undef]: http://llvm.org/docs/LangRef.html#undefined-values
+[`target_feature`]: attributes/codegen.md#the-target_feature-attribute
+[`UnsafeCell<U>`]: ../std/cell/struct.UnsafeCell.html
+[Rustonomicon]: ../nomicon/index.html
+[`NonNull<T>`]: ../core/ptr/struct.NonNull.html
+[`NonZero*`]: ../core/num/index.html
+[dereference expression]: expressions/operator-expr.md#the-dereference-operator
+[place expression context]: expressions.md#place-expressions-and-value-expressions
+[rules]: inline-assembly.md#rules-for-inline-assembly
diff --git a/src/doc/reference/src/behavior-not-considered-unsafe.md b/src/doc/reference/src/behavior-not-considered-unsafe.md
new file mode 100644
index 000000000..4128d7f23
--- /dev/null
+++ b/src/doc/reference/src/behavior-not-considered-unsafe.md
@@ -0,0 +1,56 @@
+## Behavior not considered `unsafe`
+
+The Rust compiler does not consider the following behaviors _unsafe_,
+though a programmer may (should) find them undesirable, unexpected,
+or erroneous.
+
+##### Deadlocks
+##### Leaks of memory and other resources
+##### Exiting without calling destructors
+##### Exposing randomized base addresses through pointer leaks
+##### Integer overflow
+
+If a program contains arithmetic overflow, the programmer has made an
+error. In the following discussion, we maintain a distinction between
+arithmetic overflow and wrapping arithmetic. The first is erroneous,
+while the second is intentional.
+
+When the programmer has enabled `debug_assert!` assertions (for
+example, by enabling a non-optimized build), implementations must
+insert dynamic checks that `panic` on overflow. Other kinds of builds
+may result in `panics` or silently wrapped values on overflow, at the
+implementation's discretion.
+
+In the case of implicitly-wrapped overflow, implementations must
+provide well-defined (even if still considered erroneous) results by
+using two's complement overflow conventions.
+
+The integral types provide inherent methods to allow programmers
+explicitly to perform wrapping arithmetic. For example,
+`i32::wrapping_add` provides two's complement, wrapping addition.
+
+The standard library also provides a `Wrapping<T>` newtype which
+ensures all standard arithmetic operations for `T` have wrapping
+semantics.
+
+See [RFC 560] for error conditions, rationale, and more details about
+integer overflow.
+
+##### Logic errors
+
+Safe code may impose extra logical constraints that can be checked
+at neither compile-time nor runtime. If a program breaks such
+a constraint, the behavior may be unspecified but will not result in
+undefined behavior. This could include panics, incorrect results,
+aborts, and non-termination. The behavior may also differ between
+runs, builds, or kinds of build.
+
+For example, implementing both `Hash` and `Eq` requires that values
+considered equal have equal hashes. Another example are data structures
+like `BinaryHeap`, `BTreeMap`, `BTreeSet`, `HashMap` and `HashSet`
+which describe constraints on the modification of their keys while
+they are in the data structure. Violating such constraints is not
+considered unsafe, yet the program is considered erroneous and
+its behavior unpredictable.
+
+[RFC 560]: https://github.com/rust-lang/rfcs/blob/master/text/0560-integer-overflow.md
diff --git a/src/doc/reference/src/comments.md b/src/doc/reference/src/comments.md
new file mode 100644
index 000000000..46074b45c
--- /dev/null
+++ b/src/doc/reference/src/comments.md
@@ -0,0 +1,125 @@
+# Comments
+
+> **<sup>Lexer</sup>**\
+> LINE_COMMENT :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `//` (~\[`/` `!`] | `//`) ~`\n`<sup>\*</sup>\
+> &nbsp;&nbsp; | `//`
+>
+> BLOCK_COMMENT :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `/*` (~\[`*` `!`] | `**` | _BlockCommentOrDoc_)
+> (_BlockCommentOrDoc_ | ~`*/`)<sup>\*</sup> `*/`\
+> &nbsp;&nbsp; | `/**/`\
+> &nbsp;&nbsp; | `/***/`
+>
+> INNER_LINE_DOC :\
+> &nbsp;&nbsp; `//!` ~\[`\n` _IsolatedCR_]<sup>\*</sup>
+>
+> INNER_BLOCK_DOC :\
+> &nbsp;&nbsp; `/*!` ( _BlockCommentOrDoc_ | ~\[`*/` _IsolatedCR_] )<sup>\*</sup> `*/`
+>
+> OUTER_LINE_DOC :\
+> &nbsp;&nbsp; `///` (~`/` ~\[`\n` _IsolatedCR_]<sup>\*</sup>)<sup>?</sup>
+>
+> OUTER_BLOCK_DOC :\
+> &nbsp;&nbsp; `/**` (~`*` | _BlockCommentOrDoc_ )
+> (_BlockCommentOrDoc_ | ~\[`*/` _IsolatedCR_])<sup>\*</sup> `*/`
+>
+> _BlockCommentOrDoc_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; BLOCK_COMMENT\
+> &nbsp;&nbsp; | OUTER_BLOCK_DOC\
+> &nbsp;&nbsp; | INNER_BLOCK_DOC
+>
+> _IsolatedCR_ :\
+> &nbsp;&nbsp; _A `\r` not followed by a `\n`_
+
+## Non-doc comments
+
+Comments follow the general C++ style of line (`//`) and
+block (`/* ... */`) comment forms. Nested block comments are supported.
+
+Non-doc comments are interpreted as a form of whitespace.
+
+## Doc comments
+
+Line doc comments beginning with exactly _three_ slashes (`///`), and block
+doc comments (`/** ... */`), both inner doc comments, are interpreted as a
+special syntax for [`doc` attributes]. That is, they are equivalent to writing
+`#[doc="..."]` around the body of the comment, i.e., `/// Foo` turns into
+`#[doc="Foo"]` and `/** Bar */` turns into `#[doc="Bar"]`.
+
+Line comments beginning with `//!` and block comments `/*! ... */` are
+doc comments that apply to the parent of the comment, rather than the item
+that follows. That is, they are equivalent to writing `#![doc="..."]` around
+the body of the comment. `//!` comments are usually used to document
+modules that occupy a source file.
+
+Isolated CRs (`\r`), i.e. not followed by LF (`\n`), are not allowed in doc
+comments.
+
+## Examples
+
+```rust
+//! A doc comment that applies to the implicit anonymous module of this crate
+
+pub mod outer_module {
+
+ //! - Inner line doc
+ //!! - Still an inner line doc (but with a bang at the beginning)
+
+ /*! - Inner block doc */
+ /*!! - Still an inner block doc (but with a bang at the beginning) */
+
+ // - Only a comment
+ /// - Outer line doc (exactly 3 slashes)
+ //// - Only a comment
+
+ /* - Only a comment */
+ /** - Outer block doc (exactly) 2 asterisks */
+ /*** - Only a comment */
+
+ pub mod inner_module {}
+
+ pub mod nested_comments {
+ /* In Rust /* we can /* nest comments */ */ */
+
+ // All three types of block comments can contain or be nested inside
+ // any other type:
+
+ /* /* */ /** */ /*! */ */
+ /*! /* */ /** */ /*! */ */
+ /** /* */ /** */ /*! */ */
+ pub mod dummy_item {}
+ }
+
+ pub mod degenerate_cases {
+ // empty inner line doc
+ //!
+
+ // empty inner block doc
+ /*!*/
+
+ // empty line comment
+ //
+
+ // empty outer line doc
+ ///
+
+ // empty block comment
+ /**/
+
+ pub mod dummy_item {}
+
+ // empty 2-asterisk block isn't a doc block, it is a block comment
+ /***/
+
+ }
+
+ /* The next one isn't allowed because outer doc comments
+ require an item that will receive the doc */
+
+ /// Where is my item?
+# mod boo {}
+}
+```
+
+[`doc` attributes]: ../rustdoc/the-doc-attribute.html
diff --git a/src/doc/reference/src/conditional-compilation.md b/src/doc/reference/src/conditional-compilation.md
new file mode 100644
index 000000000..6966cec4f
--- /dev/null
+++ b/src/doc/reference/src/conditional-compilation.md
@@ -0,0 +1,356 @@
+# Conditional compilation
+
+> **<sup>Syntax</sup>**\
+> _ConfigurationPredicate_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _ConfigurationOption_\
+> &nbsp;&nbsp; | _ConfigurationAll_\
+> &nbsp;&nbsp; | _ConfigurationAny_\
+> &nbsp;&nbsp; | _ConfigurationNot_
+>
+> _ConfigurationOption_ :\
+> &nbsp;&nbsp; [IDENTIFIER]&nbsp;(`=` ([STRING_LITERAL] | [RAW_STRING_LITERAL]))<sup>?</sup>
+>
+> _ConfigurationAll_\
+> &nbsp;&nbsp; `all` `(` _ConfigurationPredicateList_<sup>?</sup> `)`
+>
+> _ConfigurationAny_\
+> &nbsp;&nbsp; `any` `(` _ConfigurationPredicateList_<sup>?</sup> `)`
+>
+> _ConfigurationNot_\
+> &nbsp;&nbsp; `not` `(` _ConfigurationPredicate_ `)`
+>
+> _ConfigurationPredicateList_\
+> &nbsp;&nbsp; _ConfigurationPredicate_ (`,` _ConfigurationPredicate_)<sup>\*</sup> `,`<sup>?</sup>
+
+*Conditionally compiled source code* is source code that may or may not be
+considered a part of the source code depending on certain conditions. <!-- This
+definition is sort of vacuous --> Source code can be conditionally compiled
+using the [attributes] [`cfg`] and [`cfg_attr`] and the built-in [`cfg` macro].
+These conditions are based on the target architecture of the compiled crate,
+arbitrary values passed to the compiler, and a few other miscellaneous things
+further described below in detail.
+
+Each form of conditional compilation takes a _configuration predicate_ that
+evaluates to true or false. The predicate is one of the following:
+
+* A configuration option. It is true if the option is set and false if it is
+ unset.
+* `all()` with a comma separated list of configuration predicates. It is false
+ if at least one predicate is false. If there are no predicates, it is true.
+* `any()` with a comma separated list of configuration predicates. It is true
+ if at least one predicate is true. If there are no predicates, it is false.
+* `not()` with a configuration predicate. It is true if its predicate is false
+ and false if its predicate is true.
+
+_Configuration options_ are names and key-value pairs that are either set or
+unset. Names are written as a single identifier such as, for example, `unix`.
+Key-value pairs are written as an identifier, `=`, and then a string. For
+example, `target_arch = "x86_64"` is a configuration option.
+
+> **Note**: Whitespace around the `=` is ignored. `foo="bar"` and `foo = "bar"`
+> are equivalent configuration options.
+
+Keys are not unique in the set of key-value configuration options. For example,
+both `feature = "std"` and `feature = "serde"` can be set at the same time.
+
+## Set Configuration Options
+
+Which configuration options are set is determined statically during the
+compilation of the crate. Certain options are _compiler-set_ based on data
+about the compilation. Other options are _arbitrarily-set_, set based on input
+passed to the compiler outside of the code. It is not possible to set a
+configuration option from within the source code of the crate being compiled.
+
+> **Note**: For `rustc`, arbitrary-set configuration options are set using the
+> [`--cfg`] flag.
+
+> **Note**: Configuration options with the key `feature` are a convention used
+> by [Cargo][cargo-feature] for specifying compile-time options and optional
+> dependencies.
+
+<div class="warning">
+
+Warning: It is possible for arbitrarily-set configuration options to have the
+same value as compiler-set configuration options. For example, it is possible
+to do `rustc --cfg "unix" program.rs` while compiling to a Windows target, and
+have both `unix` and `windows` configuration options set at the same time. It
+is unwise to actually do this.
+
+</div>
+
+### `target_arch`
+
+Key-value option set once with the target's CPU architecture. The value is
+similar to the first element of the platform's target triple, but not
+identical.
+
+Example values:
+
+* `"x86"`
+* `"x86_64"`
+* `"mips"`
+* `"powerpc"`
+* `"powerpc64"`
+* `"arm"`
+* `"aarch64"`
+
+### `target_feature`
+
+Key-value option set for each platform feature available for the current
+compilation target.
+
+Example values:
+
+* `"avx"`
+* `"avx2"`
+* `"crt-static"`
+* `"rdrand"`
+* `"sse"`
+* `"sse2"`
+* `"sse4.1"`
+
+See the [`target_feature` attribute] for more details on the available
+features. An additional feature of `crt-static` is available to the
+`target_feature` option to indicate that a [static C runtime] is available.
+
+### `target_os`
+
+Key-value option set once with the target's operating system. This value is
+similar to the second and third element of the platform's target triple.
+
+Example values:
+
+* `"windows"`
+* `"macos"`
+* `"ios"`
+* `"linux"`
+* `"android"`
+* `"freebsd"`
+* `"dragonfly"`
+* `"openbsd"`
+* `"netbsd"`
+
+### `target_family`
+
+Key-value option providing a more generic description of a target, such as the family of the
+operating systems or architectures that the target generally falls into. Any number of
+`target_family` key-value pairs can be set.
+
+Example values:
+
+* `"unix"`
+* `"windows"`
+* `"wasm"`
+
+### `unix` and `windows`
+
+`unix` is set if `target_family = "unix"` is set and `windows` is set if
+`target_family = "windows"` is set.
+
+### `target_env`
+
+Key-value option set with further disambiguating information about the target
+platform with information about the ABI or `libc` used. For historical reasons,
+this value is only defined as not the empty-string when actually needed for
+disambiguation. Thus, for example, on many GNU platforms, this value will be
+empty. This value is similar to the fourth element of the platform's target
+triple. One difference is that embedded ABIs such as `gnueabihf` will simply
+define `target_env` as `"gnu"`.
+
+Example values:
+
+* `""`
+* `"gnu"`
+* `"msvc"`
+* `"musl"`
+* `"sgx"`
+
+### `target_endian`
+
+Key-value option set once with either a value of "little" or "big" depending
+on the endianness of the target's CPU.
+
+### `target_pointer_width`
+
+Key-value option set once with the target's pointer width in bits.
+
+Example values:
+
+* `"16"`
+* `"32"`
+* `"64"`
+
+### `target_vendor`
+
+Key-value option set once with the vendor of the target.
+
+Example values:
+
+* `"apple"`
+* `"fortanix"`
+* `"pc"`
+* `"unknown"`
+
+### `test`
+
+Enabled when compiling the test harness. Done with `rustc` by using the
+[`--test`] flag. See [Testing] for more on testing support.
+
+### `debug_assertions`
+
+Enabled by default when compiling without optimizations.
+This can be used to enable extra debugging code in development but not in
+production. For example, it controls the behavior of the standard library's
+[`debug_assert!`] macro.
+
+### `proc_macro`
+
+Set when the crate being compiled is being compiled with the `proc_macro`
+[crate type].
+
+### `panic`
+
+Key-value option set depending on the panic strategy. Note that more values may be added in the future.
+
+Example values:
+
+* `"abort"`
+* `"unwind"`
+
+## Forms of conditional compilation
+
+### The `cfg` attribute
+
+> **<sup>Syntax</sup>**\
+> _CfgAttrAttribute_ :\
+> &nbsp;&nbsp; `cfg` `(` _ConfigurationPredicate_ `)`
+
+<!-- should we say they're active attributes here? -->
+
+The `cfg` [attribute] conditionally includes the thing it is attached to based
+on a configuration predicate.
+
+It is written as `cfg`, `(`, a configuration predicate, and finally `)`.
+
+If the predicate is true, the thing is rewritten to not have the `cfg` attribute
+on it. If the predicate is false, the thing is removed from the source code.
+
+Some examples on functions:
+
+```rust
+// The function is only included in the build when compiling for macOS
+#[cfg(target_os = "macos")]
+fn macos_only() {
+ // ...
+}
+
+// This function is only included when either foo or bar is defined
+#[cfg(any(foo, bar))]
+fn needs_foo_or_bar() {
+ // ...
+}
+
+// This function is only included when compiling for a unixish OS with a 32-bit
+// architecture
+#[cfg(all(unix, target_pointer_width = "32"))]
+fn on_32bit_unix() {
+ // ...
+}
+
+// This function is only included when foo is not defined
+#[cfg(not(foo))]
+fn needs_not_foo() {
+ // ...
+}
+
+// This function is only included when the panic strategy is set to unwind
+#[cfg(panic = "unwind")]
+fn when_unwinding() {
+ // ...
+}
+
+```
+
+The `cfg` attribute is allowed anywhere attributes are allowed.
+
+### The `cfg_attr` attribute
+
+> **<sup>Syntax</sup>**\
+> _CfgAttrAttribute_ :\
+> &nbsp;&nbsp; `cfg_attr` `(` _ConfigurationPredicate_ `,` _CfgAttrs_<sup>?</sup> `)`
+>
+> _CfgAttrs_ :\
+> &nbsp;&nbsp; [_Attr_]&nbsp;(`,` [_Attr_])<sup>\*</sup> `,`<sup>?</sup>
+
+The `cfg_attr` [attribute] conditionally includes [attributes] based on a
+configuration predicate.
+
+When the configuration predicate is true, this attribute expands out to the
+attributes listed after the predicate. For example, the following module will
+either be found at `linux.rs` or `windows.rs` based on the target.
+
+<!-- ignore: `mod` needs multiple files -->
+```rust,ignore
+#[cfg_attr(target_os = "linux", path = "linux.rs")]
+#[cfg_attr(windows, path = "windows.rs")]
+mod os;
+```
+
+Zero, one, or more attributes may be listed. Multiple attributes will each be
+expanded into separate attributes. For example:
+
+<!-- ignore: fake attributes -->
+```rust,ignore
+#[cfg_attr(feature = "magic", sparkles, crackles)]
+fn bewitched() {}
+
+// When the `magic` feature flag is enabled, the above will expand to:
+#[sparkles]
+#[crackles]
+fn bewitched() {}
+```
+
+> **Note**: The `cfg_attr` can expand to another `cfg_attr`. For example,
+> `#[cfg_attr(target_os = "linux", cfg_attr(feature = "multithreaded", some_other_attribute))]`
+> is valid. This example would be equivalent to
+> `#[cfg_attr(all(target_os = "linux", feature ="multithreaded"), some_other_attribute)]`.
+
+The `cfg_attr` attribute is allowed anywhere attributes are allowed.
+
+### The `cfg` macro
+
+The built-in `cfg` macro takes in a single configuration predicate and evaluates
+to the `true` literal when the predicate is true and the `false` literal when
+it is false.
+
+For example:
+
+```rust
+let machine_kind = if cfg!(unix) {
+ "unix"
+} else if cfg!(windows) {
+ "windows"
+} else {
+ "unknown"
+};
+
+println!("I'm running on a {} machine!", machine_kind);
+```
+
+[IDENTIFIER]: identifiers.md
+[RAW_STRING_LITERAL]: tokens.md#raw-string-literals
+[STRING_LITERAL]: tokens.md#string-literals
+[Testing]: attributes/testing.md
+[_Attr_]: attributes.md
+[`--cfg`]: ../rustc/command-line-arguments.html#--cfg-configure-the-compilation-environment
+[`--test`]: ../rustc/command-line-arguments.html#--test-build-a-test-harness
+[`cfg`]: #the-cfg-attribute
+[`cfg` macro]: #the-cfg-macro
+[`cfg_attr`]: #the-cfg_attr-attribute
+[`debug_assert!`]: ../std/macro.debug_assert.html
+[`target_feature` attribute]: attributes/codegen.md#the-target_feature-attribute
+[attribute]: attributes.md
+[attributes]: attributes.md
+[cargo-feature]: ../cargo/reference/features.html
+[crate type]: linkage.md
+[static C runtime]: linkage.md#static-and-dynamic-c-runtimes
diff --git a/src/doc/reference/src/const_eval.md b/src/doc/reference/src/const_eval.md
new file mode 100644
index 000000000..c0560376c
--- /dev/null
+++ b/src/doc/reference/src/const_eval.md
@@ -0,0 +1,141 @@
+# Constant evaluation
+
+Constant evaluation is the process of computing the result of
+[expressions] during compilation. Only a subset of all expressions
+can be evaluated at compile-time.
+
+## Constant expressions
+
+Certain forms of expressions, called constant expressions, can be evaluated at
+compile time. In [const contexts](#const-context), these are the only allowed
+expressions, and are always evaluated at compile time. In other places, such as
+[let statements], constant expressions *may*
+be, but are not guaranteed to be, evaluated at compile time. Behaviors such as
+out of bounds [array indexing] or [overflow] are compiler errors if the value
+must be evaluated at compile time (i.e. in const contexts). Otherwise, these
+behaviors are warnings, but will likely panic at run-time.
+
+The following expressions are constant expressions, so long as any operands are
+also constant expressions and do not cause any [`Drop::drop`][destructors] calls
+to be run.
+
+* [Literals].
+* [Const parameters].
+* [Paths] to [functions] and [constants].
+ Recursively defining constants is not allowed.
+* Paths to [statics]. These are only allowed within the initializer of a static.
+* [Tuple expressions].
+* [Array expressions].
+* [Struct] expressions.
+* [Block expressions], including `unsafe` blocks.
+ * [let statements] and thus irrefutable [patterns], including mutable bindings
+ * [assignment expressions]
+ * [compound assignment expressions]
+ * [expression statements]
+* [Field] expressions.
+* Index expressions, [array indexing] or [slice] with a `usize`.
+* [Range expressions].
+* [Closure expressions] which don't capture variables from the environment.
+* Built-in [negation], [arithmetic], [logical], [comparison] or [lazy boolean]
+ operators used on integer and floating point types, `bool`, and `char`.
+* Shared [borrow]s, except if applied to a type with [interior mutability].
+* The [dereference operator] except for raw pointers.
+* [Grouped] expressions.
+* [Cast] expressions, except
+ * pointer to address casts and
+ * function pointer to address casts.
+* Calls of [const functions] and const methods.
+* [loop], [while] and [`while let`] expressions.
+* [if], [`if let`] and [match] expressions.
+
+## Const context
+
+A _const context_ is one of the following:
+
+* [Array type length expressions]
+* [Array repeat length expressions][array expressions]
+* The initializer of
+ * [constants]
+ * [statics]
+ * [enum discriminants]
+* A [const generic argument]
+
+## Const Functions
+
+A _const fn_ is a function that one is permitted to call from a const context. Declaring a function
+`const` has no effect on any existing uses, it only restricts the types that arguments and the
+return type may use, as well as prevent various expressions from being used within it. You can freely
+do anything with a const function that you can do with a regular function.
+
+When called from a const context, the function is interpreted by the
+compiler at compile time. The interpretation happens in the
+environment of the compilation target and not the host. So `usize` is
+`32` bits if you are compiling against a `32` bit system, irrelevant
+of whether you are building on a `64` bit or a `32` bit system.
+
+Const functions have various restrictions to make sure that they can be
+evaluated at compile-time. It is, for example, not possible to write a random
+number generator as a const function. Calling a const function at compile-time
+will always yield the same result as calling it at runtime, even when called
+multiple times. There's one exception to this rule: if you are doing complex
+floating point operations in extreme situations, then you might get (very
+slightly) different results. It is advisable to not make array lengths and enum
+discriminants depend on floating point computations.
+
+
+Notable features that are allowed in const contexts but not in const functions include:
+
+* floating point operations
+ * floating point values are treated just like generic parameters without trait bounds beyond
+ `Copy`. So you cannot do anything with them but copy/move them around.
+
+Conversely, the following are possible in a const function, but not in a const context:
+
+* Use of generic type and lifetime parameters.
+ * Const contexts do allow limited use of [const generic parameters].
+
+[arithmetic]: expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[array expressions]: expressions/array-expr.md
+[array indexing]: expressions/array-expr.md#array-and-slice-indexing-expressions
+[array indexing]: expressions/array-expr.md#array-and-slice-indexing-expressions
+[array type length expressions]: types/array.md
+[assignment expressions]: expressions/operator-expr.md#assignment-expressions
+[compound assignment expressions]: expressions/operator-expr.md#compound-assignment-expressions
+[block expressions]: expressions/block-expr.md
+[borrow]: expressions/operator-expr.md#borrow-operators
+[cast]: expressions/operator-expr.md#type-cast-expressions
+[closure expressions]: expressions/closure-expr.md
+[comparison]: expressions/operator-expr.md#comparison-operators
+[const functions]: items/functions.md#const-functions
+[const generic argument]: items/generics.md#const-generics
+[const generic parameters]: items/generics.md#const-generics
+[constants]: items/constant-items.md
+[Const parameters]: items/generics.md
+[dereference operator]: expressions/operator-expr.md#the-dereference-operator
+[destructors]: destructors.md
+[enum discriminants]: items/enumerations.md#custom-discriminant-values-for-fieldless-enumerations
+[expression statements]: statements.md#expression-statements
+[expressions]: expressions.md
+[field]: expressions/field-expr.md
+[functions]: items/functions.md
+[grouped]: expressions/grouped-expr.md
+[interior mutability]: interior-mutability.md
+[if]: expressions/if-expr.md#if-expressions
+[`if let`]: expressions/if-expr.md#if-let-expressions
+[lazy boolean]: expressions/operator-expr.md#lazy-boolean-operators
+[let statements]: statements.md#let-statements
+[literals]: expressions/literal-expr.md
+[logical]: expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[loop]: expressions/loop-expr.md#infinite-loops
+[match]: expressions/match-expr.md
+[negation]: expressions/operator-expr.md#negation-operators
+[overflow]: expressions/operator-expr.md#overflow
+[paths]: expressions/path-expr.md
+[patterns]: patterns.md
+[range expressions]: expressions/range-expr.md
+[slice]: types/slice.md
+[statics]: items/static-items.md
+[struct]: expressions/struct-expr.md
+[tuple expressions]: expressions/tuple-expr.md
+[while]: expressions/loop-expr.md#predicate-loops
+[`while let`]: expressions/loop-expr.md#predicate-pattern-loops
diff --git a/src/doc/reference/src/crates-and-source-files.md b/src/doc/reference/src/crates-and-source-files.md
new file mode 100644
index 000000000..6922b0ee3
--- /dev/null
+++ b/src/doc/reference/src/crates-and-source-files.md
@@ -0,0 +1,191 @@
+# Crates and source files
+
+> **<sup>Syntax</sup>**\
+> _Crate_ :\
+> &nbsp;&nbsp; UTF8BOM<sup>?</sup>\
+> &nbsp;&nbsp; SHEBANG<sup>?</sup>\
+> &nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; [_Item_]<sup>\*</sup>
+
+> **<sup>Lexer</sup>**\
+> UTF8BOM : `\uFEFF`\
+> SHEBANG : `#!` \~`\n`<sup>\+</sup>[†](#shebang)
+
+
+> Note: Although Rust, like any other language, can be implemented by an
+> interpreter as well as a compiler, the only existing implementation is a
+> compiler, and the language has always been designed to be compiled. For these
+> reasons, this section assumes a compiler.
+
+Rust's semantics obey a *phase distinction* between compile-time and
+run-time.[^phase-distinction] Semantic rules that have a *static
+interpretation* govern the success or failure of compilation, while
+semantic rules that have a *dynamic interpretation* govern the behavior of the
+program at run-time.
+
+The compilation model centers on artifacts called _crates_. Each compilation
+processes a single crate in source form, and if successful, produces a single
+crate in binary form: either an executable or some sort of
+library.[^cratesourcefile]
+
+A _crate_ is a unit of compilation and linking, as well as versioning,
+distribution, and runtime loading. A crate contains a _tree_ of nested
+[module] scopes. The top level of this tree is a module that is
+anonymous (from the point of view of paths within the module) and any item
+within a crate has a canonical [module path] denoting its location
+within the crate's module tree.
+
+The Rust compiler is always invoked with a single source file as input, and
+always produces a single output crate. The processing of that source file may
+result in other source files being loaded as modules. Source files have the
+extension `.rs`.
+
+A Rust source file describes a module, the name and location of which &mdash;
+in the module tree of the current crate &mdash; are defined from outside the
+source file: either by an explicit [_Module_][module] item in a referencing
+source file, or by the name of the crate itself. Every source file is a
+module, but not every module needs its own source file: [module
+definitions][module] can be nested within one file.
+
+Each source file contains a sequence of zero or more [_Item_] definitions, and
+may optionally begin with any number of [attributes]
+that apply to the containing module, most of which influence the behavior of
+the compiler. The anonymous crate module can have additional attributes that
+apply to the crate as a whole.
+
+```rust
+// Specify the crate name.
+#![crate_name = "projx"]
+
+// Specify the type of output artifact.
+#![crate_type = "lib"]
+
+// Turn on a warning.
+// This can be done in any module, not just the anonymous crate module.
+#![warn(non_camel_case_types)]
+```
+
+## Byte order mark
+
+The optional [_UTF8 byte order mark_] (UTF8BOM production) indicates that the
+file is encoded in UTF8. It can only occur at the beginning of the file and
+is ignored by the compiler.
+
+## Shebang
+
+A source file can have a [_shebang_] (SHEBANG production), which indicates
+to the operating system what program to use to execute this file. It serves
+essentially to treat the source file as an executable script. The shebang
+can only occur at the beginning of the file (but after the optional
+_UTF8BOM_). It is ignored by the compiler. For example:
+
+<!-- ignore: tests don't like shebang -->
+```rust,ignore
+#!/usr/bin/env rustx
+
+fn main() {
+ println!("Hello!");
+}
+```
+
+A restriction is imposed on the shebang syntax to avoid confusion with an
+[attribute]. The `#!` characters must not be followed by a `[` token, ignoring
+intervening [comments] or [whitespace]. If this restriction fails, then it is
+not treated as a shebang, but instead as the start of an attribute.
+
+## Preludes and `no_std`
+
+This section has been moved to the [Preludes chapter](names/preludes.md).
+<!-- this is to appease the linkchecker, will remove once other books are updated -->
+
+## Main Functions
+
+A crate that contains a `main` [function] can be compiled to an executable. If a
+`main` function is present, it must take no arguments, must not declare any
+[trait or lifetime bounds], must not have any [where clauses], and its return
+type must implement the [`Termination`] trait.
+
+```rust
+fn main() {}
+```
+```rust
+fn main() -> ! {
+ std::process::exit(0);
+}
+```
+```rust
+fn main() -> impl std::process::Termination {
+ std::process::ExitCode::SUCCESS
+}
+```
+
+> **Note**: Types with implementations of [`Termination`] in the standard library include:
+>
+> * `()`
+> * [`!`]
+> * [`ExitCode`]
+> * `Result<(), E> where E: Debug`
+> * `Result<Infallible, E> where E: Debug`
+<!-- > * Result<!, E> where E: Debug` -->
+
+<!-- If the previous section needs updating (from "must take no arguments"
+ onwards, also update it in the testing.md file -->
+
+### The `no_main` attribute
+
+The *`no_main` [attribute]* may be applied at the crate level to disable
+emitting the `main` symbol for an executable binary. This is useful when some
+other object being linked to defines `main`.
+
+## The `crate_name` attribute
+
+The *`crate_name` [attribute]* may be applied at the crate level to specify the
+name of the crate with the [_MetaNameValueStr_] syntax.
+
+```rust
+#![crate_name = "mycrate"]
+```
+
+The crate name must not be empty, and must only contain [Unicode alphanumeric]
+or `_` (U+005F) characters.
+
+[^phase-distinction]: This distinction would also exist in an interpreter.
+ Static checks like syntactic analysis, type checking, and lints should
+ happen before the program is executed regardless of when it is executed.
+
+[^cratesourcefile]: A crate is somewhat analogous to an *assembly* in the
+ ECMA-335 CLI model, a *library* in the SML/NJ Compilation Manager, a *unit*
+ in the Owens and Flatt module system, or a *configuration* in Mesa.
+
+[Unicode alphanumeric]: ../std/primitive.char.html#method.is_alphanumeric
+[`!`]: types/never.md
+[_InnerAttribute_]: attributes.md
+[_Item_]: items.md
+[_MetaNameValueStr_]: attributes.md#meta-item-attribute-syntax
+[_shebang_]: https://en.wikipedia.org/wiki/Shebang_(Unix)
+[_utf8 byte order mark_]: https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
+[`ExitCode`]: ../std/process/struct.ExitCode.html
+[`Termination`]: ../std/process/trait.Termination.html
+[attribute]: attributes.md
+[attributes]: attributes.md
+[comments]: comments.md
+[function]: items/functions.md
+[module]: items/modules.md
+[module path]: paths.md
+[trait or lifetime bounds]: trait-bounds.md
+[where clauses]: items/generics.md#where-clauses
+[whitespace]: whitespace.md
+
+<script>
+(function() {
+ var fragments = {
+ "#preludes-and-no_std": "names/preludes.html",
+ };
+ var target = fragments[window.location.hash];
+ if (target) {
+ var url = window.location.toString();
+ var base = url.substring(0, url.lastIndexOf('/'));
+ window.location.replace(base + "/" + target);
+ }
+})();
+</script>
diff --git a/src/doc/reference/src/destructors.md b/src/doc/reference/src/destructors.md
new file mode 100644
index 000000000..6d616b3e7
--- /dev/null
+++ b/src/doc/reference/src/destructors.md
@@ -0,0 +1,402 @@
+# Destructors
+
+When an [initialized]&#32;[variable] or [temporary] goes out of
+[scope](#drop-scopes), its *destructor* is run, or it is *dropped*. [Assignment]
+also runs the destructor of its left-hand operand, if it's initialized. If a
+variable has been partially initialized, only its initialized fields are
+dropped.
+
+The destructor of a type `T` consists of:
+
+1. If `T: Drop`, calling [`<T as std::ops::Drop>::drop`]
+2. Recursively running the destructor of all of its fields.
+ * The fields of a [struct] are dropped in declaration order.
+ * The fields of the active [enum variant] are dropped in declaration order.
+ * The fields of a [tuple] are dropped in order.
+ * The elements of an [array] or owned [slice] are dropped from the
+ first element to the last.
+ * The variables that a [closure] captures by move are dropped in an
+ unspecified order.
+ * [Trait objects] run the destructor of the underlying type.
+ * Other types don't result in any further drops.
+
+If a destructor must be run manually, such as when implementing your own smart
+pointer, [`std::ptr::drop_in_place`] can be used.
+
+Some examples:
+
+```rust
+struct PrintOnDrop(&'static str);
+
+impl Drop for PrintOnDrop {
+ fn drop(&mut self) {
+ println!("{}", self.0);
+ }
+}
+
+let mut overwritten = PrintOnDrop("drops when overwritten");
+overwritten = PrintOnDrop("drops when scope ends");
+
+let tuple = (PrintOnDrop("Tuple first"), PrintOnDrop("Tuple second"));
+
+let moved;
+// No destructor run on assignment.
+moved = PrintOnDrop("Drops when moved");
+// Drops now, but is then uninitialized.
+moved;
+
+// Uninitialized does not drop.
+let uninitialized: PrintOnDrop;
+
+// After a partial move, only the remaining fields are dropped.
+let mut partial_move = (PrintOnDrop("first"), PrintOnDrop("forgotten"));
+// Perform a partial move, leaving only `partial_move.0` initialized.
+core::mem::forget(partial_move.1);
+// When partial_move's scope ends, only the first field is dropped.
+```
+
+## Drop scopes
+
+Each variable or temporary is associated to a *drop scope*. When control flow
+leaves a drop scope all variables associated to that scope are dropped in
+reverse order of declaration (for variables) or creation (for temporaries).
+
+Drop scopes are determined after replacing [`for`], [`if let`], and
+[`while let`] expressions with the equivalent expressions using [`match`].
+Overloaded operators are not distinguished from built-in operators and [binding
+modes] are not considered.
+
+Given a function, or closure, there are drop scopes for:
+
+* The entire function
+* Each [statement]
+* Each [expression]
+* Each block, including the function body
+ * In the case of a [block expression], the scope for the block and the
+ expression are the same scope.
+* Each arm of a `match` expression
+
+Drop scopes are nested within one another as follows. When multiple scopes are
+left at once, such as when returning from a function, variables are dropped
+from the inside outwards.
+
+* The entire function scope is the outer most scope.
+* The function body block is contained within the scope of the entire function.
+* The parent of the expression in an expression statement is the scope of the
+ statement.
+* The parent of the initializer of a [`let` statement] is the `let` statement's
+ scope.
+* The parent of a statement scope is the scope of the block that contains the
+ statement.
+* The parent of the expression for a `match` guard is the scope of the arm that
+ the guard is for.
+* The parent of the expression after the `=>` in a `match` expression is the
+ scope of the arm that it's in.
+* The parent of the arm scope is the scope of the `match` expression that it
+ belongs to.
+* The parent of all other scopes is the scope of the immediately enclosing
+ expression.
+
+### Scopes of function parameters
+
+All function parameters are in the scope of the entire function body, so are
+dropped last when evaluating the function. Each actual function parameter is
+dropped after any bindings introduced in that parameter's pattern.
+
+```rust
+# struct PrintOnDrop(&'static str);
+# impl Drop for PrintOnDrop {
+# fn drop(&mut self) {
+# println!("drop({})", self.0);
+# }
+# }
+// Drops `y`, then the second parameter, then `x`, then the first parameter
+fn patterns_in_parameters(
+ (x, _): (PrintOnDrop, PrintOnDrop),
+ (_, y): (PrintOnDrop, PrintOnDrop),
+) {}
+
+// drop order is 3 2 0 1
+patterns_in_parameters(
+ (PrintOnDrop("0"), PrintOnDrop("1")),
+ (PrintOnDrop("2"), PrintOnDrop("3")),
+);
+```
+
+### Scopes of local variables
+
+Local variables declared in a `let` statement are associated to the scope of
+the block that contains the `let` statement. Local variables declared in a
+`match` expression are associated to the arm scope of the `match` arm that they
+are declared in.
+
+```rust
+# struct PrintOnDrop(&'static str);
+# impl Drop for PrintOnDrop {
+# fn drop(&mut self) {
+# println!("drop({})", self.0);
+# }
+# }
+let declared_first = PrintOnDrop("Dropped last in outer scope");
+{
+ let declared_in_block = PrintOnDrop("Dropped in inner scope");
+}
+let declared_last = PrintOnDrop("Dropped first in outer scope");
+```
+
+If multiple patterns are used in the same arm for a `match` expression, then an
+unspecified pattern will be used to determine the drop order.
+
+### Temporary scopes
+
+The *temporary scope* of an expression is the scope that is used for the
+temporary variable that holds the result of that expression when used in a
+[place context], unless it is [promoted].
+
+Apart from lifetime extension, the temporary scope of an expression is the
+smallest scope that contains the expression and is one of the following:
+
+* The entire function body.
+* A statement.
+* The body of a [`if`], [`while`] or [`loop`] expression.
+* The `else` block of an `if` expression.
+* The condition expression of an `if` or `while` expression, or a `match`
+ guard.
+* The expression for a match arm.
+* The second operand of a [lazy boolean expression].
+
+> **Notes**:
+>
+> Temporaries that are created in the final expression of a function
+> body are dropped *after* any named variables bound in the function body, as
+> there is no smaller enclosing temporary scope.
+>
+> The [scrutinee] of a `match` expression is not a temporary scope, so
+> temporaries in the scrutinee can be dropped after the `match` expression. For
+> example, the temporary for `1` in `match 1 { ref mut z => z };` lives until
+> the end of the statement.
+
+Some examples:
+
+```rust
+# struct PrintOnDrop(&'static str);
+# impl Drop for PrintOnDrop {
+# fn drop(&mut self) {
+# println!("drop({})", self.0);
+# }
+# }
+let local_var = PrintOnDrop("local var");
+
+// Dropped once the condition has been evaluated
+if PrintOnDrop("If condition").0 == "If condition" {
+ // Dropped at the end of the block
+ PrintOnDrop("If body").0
+} else {
+ unreachable!()
+};
+
+// Dropped at the end of the statement
+(PrintOnDrop("first operand").0 == ""
+// Dropped at the )
+|| PrintOnDrop("second operand").0 == "")
+// Dropped at the end of the expression
+|| PrintOnDrop("third operand").0 == "";
+
+// Dropped at the end of the function, after local variables.
+// Changing this to a statement containing a return expression would make the
+// temporary be dropped before the local variables. Binding to a variable
+// which is then returned would also make the temporary be dropped first.
+match PrintOnDrop("Matched value in final expression") {
+ // Dropped once the condition has been evaluated
+ _ if PrintOnDrop("guard condition").0 == "" => (),
+ _ => (),
+}
+```
+
+### Operands
+
+Temporaries are also created to hold the result of operands to an expression
+while the other operands are evaluated. The temporaries are associated to the
+scope of the expression with that operand. Since the temporaries are moved from
+once the expression is evaluated, dropping them has no effect unless one of the
+operands to an expression breaks out of the expression, returns, or panics.
+
+```rust
+# struct PrintOnDrop(&'static str);
+# impl Drop for PrintOnDrop {
+# fn drop(&mut self) {
+# println!("drop({})", self.0);
+# }
+# }
+loop {
+ // Tuple expression doesn't finish evaluating so operands drop in reverse order
+ (
+ PrintOnDrop("Outer tuple first"),
+ PrintOnDrop("Outer tuple second"),
+ (
+ PrintOnDrop("Inner tuple first"),
+ PrintOnDrop("Inner tuple second"),
+ break,
+ ),
+ PrintOnDrop("Never created"),
+ );
+}
+```
+
+### Constant promotion
+
+Promotion of a value expression to a `'static` slot occurs when the expression
+could be written in a constant and borrowed, and that borrow could be dereferenced
+where
+the expression was originally written, without changing the runtime behavior.
+That is, the promoted expression can be evaluated at compile-time and the
+resulting value does not contain [interior mutability] or [destructors] (these
+properties are determined based on the value where possible, e.g. `&None`
+always has the type `&'static Option<_>`, as it contains nothing disallowed).
+
+### Temporary lifetime extension
+
+> **Note**: The exact rules for temporary lifetime extension are subject to
+> change. This is describing the current behavior only.
+
+The temporary scopes for expressions in `let` statements are sometimes
+*extended* to the scope of the block containing the `let` statement. This is
+done when the usual temporary scope would be too small, based on certain
+syntactic rules. For example:
+
+```rust
+let x = &mut 0;
+// Usually a temporary would be dropped by now, but the temporary for `0` lives
+// to the end of the block.
+println!("{}", x);
+```
+
+If a borrow, dereference, field, or tuple indexing expression has an extended
+temporary scope then so does its operand. If an indexing expression has an
+extended temporary scope then the indexed expression also has an extended
+temporary scope.
+
+#### Extending based on patterns
+
+An *extending pattern* is either
+
+* An [identifier pattern] that binds by reference or mutable reference.
+* A [struct][struct pattern], [tuple][tuple pattern], [tuple struct][tuple
+ struct pattern], or [slice][slice pattern] pattern where at least one of the
+ direct subpatterns is a extending pattern.
+
+So `ref x`, `V(ref x)` and `[ref x, y]` are all extending patterns, but `x`,
+`&ref x` and `&(ref x,)` are not.
+
+If the pattern in a `let` statement is an extending pattern then the temporary
+scope of the initializer expression is extended.
+
+#### Extending based on expressions
+
+For a let statement with an initializer, an *extending expression* is an
+expression which is one of the following:
+
+* The initializer expression.
+* The operand of an extending [borrow expression].
+* The operand(s) of an extending [array][array expression], [cast][cast
+ expression], [braced struct][struct expression], or [tuple][tuple expression]
+ expression.
+* The final expression of any extending [block expression].
+
+So the borrow expressions in `&mut 0`, `(&1, &mut 2)`, and `Some { 0: &mut 3 }`
+are all extending expressions. The borrows in `&0 + &1` and `Some(&mut 0)` are
+not: the latter is syntactically a function call expression.
+
+The operand of any extending borrow expression has its temporary scope
+extended.
+
+#### Examples
+
+Here are some examples where expressions have extended temporary scopes:
+
+```rust
+# fn temp() {}
+# trait Use { fn use_temp(&self) -> &Self { self } }
+# impl Use for () {}
+// The temporary that stores the result of `temp()` lives in the same scope
+// as x in these cases.
+let x = &temp();
+let x = &temp() as &dyn Send;
+let x = (&*&temp(),);
+let x = { [Some { 0: &temp(), }] };
+let ref x = temp();
+let ref x = *&temp();
+# x;
+```
+
+Here are some examples where expressions don't have extended temporary scopes:
+
+```rust,compile_fail
+# fn temp() {}
+# trait Use { fn use_temp(&self) -> &Self { self } }
+# impl Use for () {}
+// The temporary that stores the result of `temp()` only lives until the
+// end of the let statement in these cases.
+
+let x = Some(&temp()); // ERROR
+let x = (&temp()).use_temp(); // ERROR
+# x;
+```
+
+## Not running destructors
+
+[`std::mem::forget`] can be used to prevent the destructor of a variable from being run,
+and [`std::mem::ManuallyDrop`] provides a wrapper to prevent a
+variable or field from being dropped automatically.
+
+> Note: Preventing a destructor from being run via [`std::mem::forget`] or other means is safe even if it has a type that isn't `'static`.
+> Besides the places where destructors are guaranteed to run as defined by this document, types may *not* safely rely on a destructor being run for soundness.
+
+[Assignment]: expressions/operator-expr.md#assignment-expressions
+[binding modes]: patterns.md#binding-modes
+[closure]: types/closure.md
+[destructors]: destructors.md
+[expression]: expressions.md
+[identifier pattern]: patterns.md#identifier-patterns
+[initialized]: glossary.md#initialized
+[interior mutability]: interior-mutability.md
+[lazy boolean expression]: expressions/operator-expr.md#lazy-boolean-operators
+[place context]: expressions.md#place-expressions-and-value-expressions
+[promoted]: destructors.md#constant-promotion
+[scrutinee]: glossary.md#scrutinee
+[statement]: statements.md
+[temporary]: expressions.md#temporaries
+[variable]: variables.md
+
+[array]: types/array.md
+[enum variant]: types/enum.md
+[slice]: types/slice.md
+[struct]: types/struct.md
+[Trait objects]: types/trait-object.md
+[tuple]: types/tuple.md
+
+[slice pattern]: patterns.md#slice-patterns
+[struct pattern]: patterns.md#struct-patterns
+[tuple pattern]: patterns.md#tuple-patterns
+[tuple struct pattern]: patterns.md#tuple-struct-patterns
+
+[array expression]: expressions/array-expr.md#array-expressions
+[block expression]: expressions/block-expr.md
+[borrow expression]: expressions/operator-expr.md#borrow-operators
+[cast expression]: expressions/operator-expr.md#type-cast-expressions
+[struct expression]: expressions/struct-expr.md
+[tuple expression]: expressions/tuple-expr.md#tuple-expressions
+
+[`for`]: expressions/loop-expr.md#iterator-loops
+[`if let`]: expressions/if-expr.md#if-let-expressions
+[`if`]: expressions/if-expr.md#if-expressions
+[`let` statement]: statements.md#let-statements
+[`loop`]: expressions/loop-expr.md#infinite-loops
+[`match`]: expressions/match-expr.md
+[`while let`]: expressions/loop-expr.md#predicate-pattern-loops
+[`while`]: expressions/loop-expr.md#predicate-loops
+
+[`<T as std::ops::Drop>::drop`]: ../std/ops/trait.Drop.html#tymethod.drop
+[`std::ptr::drop_in_place`]: ../std/ptr/fn.drop_in_place.html
+[`std::mem::forget`]: ../std/mem/fn.forget.html
+[`std::mem::ManuallyDrop`]: ../std/mem/struct.ManuallyDrop.html
diff --git a/src/doc/reference/src/dynamically-sized-types.md b/src/doc/reference/src/dynamically-sized-types.md
new file mode 100644
index 000000000..cab1ec510
--- /dev/null
+++ b/src/doc/reference/src/dynamically-sized-types.md
@@ -0,0 +1,33 @@
+# Dynamically Sized Types
+
+Most types have a fixed size that is known at compile time and implement the
+trait [`Sized`][sized]. A type with a size that is known only at run-time is
+called a _dynamically sized type_ (_DST_) or, informally, an unsized type.
+[Slices] and [trait objects] are two examples of <abbr title="dynamically sized
+types">DSTs</abbr>. Such types can only be used in certain cases:
+
+* [Pointer types] to <abbr title="dynamically sized types">DSTs</abbr> are
+ sized but have twice the size of pointers to sized types
+ * Pointers to slices also store the number of elements of the slice.
+ * Pointers to trait objects also store a pointer to a vtable.
+* <abbr title="dynamically sized types">DSTs</abbr> can be provided as
+ type arguments to generic type parameters having the special `?Sized` bound.
+ They can also be used for associated type definitions when the corresponding associated type declaration has a `?Sized` bound.
+ By default, any type parameter or associated type has a `Sized` bound, unless it is relaxed using `?Sized`.
+* Traits may be implemented for <abbr title="dynamically sized
+ types">DSTs</abbr>.
+ Unlike with generic type parameters, `Self: ?Sized` is the default in trait definitions.
+* Structs may contain a <abbr title="dynamically sized type">DST</abbr> as the
+ last field; this makes the struct itself a
+ <abbr title="dynamically sized type">DST</abbr>.
+
+> **Note**: [variables], function parameters, [const] items, and [static] items must be
+`Sized`.
+
+[sized]: special-types-and-traits.md#sized
+[Slices]: types/slice.md
+[trait objects]: types/trait-object.md
+[Pointer types]: types/pointer.md
+[variables]: variables.md
+[const]: items/constant-items.md
+[static]: items/static-items.md
diff --git a/src/doc/reference/src/expressions.md b/src/doc/reference/src/expressions.md
new file mode 100644
index 000000000..32ee658ff
--- /dev/null
+++ b/src/doc/reference/src/expressions.md
@@ -0,0 +1,369 @@
+# Expressions
+
+> **<sup>Syntax</sup>**\
+> _Expression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _ExpressionWithoutBlock_\
+> &nbsp;&nbsp; | _ExpressionWithBlock_
+>
+> _ExpressionWithoutBlock_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup>[†](#expression-attributes)\
+> &nbsp;&nbsp; (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [_LiteralExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_PathExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_OperatorExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_GroupedExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ArrayExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_AwaitExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_IndexExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_TupleExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_TupleIndexingExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_StructExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_CallExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_MethodCallExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_FieldExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ClosureExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ContinueExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_BreakExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_RangeExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ReturnExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_UnderscoreExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_MacroInvocation_]\
+> &nbsp;&nbsp; )
+>
+> _ExpressionWithBlock_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup>[†](#expression-attributes)\
+> &nbsp;&nbsp; (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [_BlockExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_AsyncBlockExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_UnsafeBlockExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_LoopExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_IfExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_IfLetExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_MatchExpression_]\
+> &nbsp;&nbsp; )
+
+An expression may have two roles: it always produces a *value*, and it may have
+*effects* (otherwise known as "side effects"). An expression *evaluates to* a
+value, and has effects during *evaluation*. Many expressions contain
+sub-expressions, called the *operands* of the expression. The meaning of each
+kind of expression dictates several things:
+
+* Whether or not to evaluate the operands when evaluating the expression
+* The order in which to evaluate the operands
+* How to combine the operands' values to obtain the value of the expression
+
+In this way, the structure of expressions dictates the structure of execution.
+Blocks are just another kind of expression, so blocks, statements, expressions,
+and blocks again can recursively nest inside each other to an arbitrary depth.
+
+> **Note**: We give names to the operands of expressions so that we may discuss
+> them, but these names are not stable and may be changed.
+
+## Expression precedence
+
+The precedence of Rust operators and expressions is ordered as follows, going
+from strong to weak. Binary Operators at the same precedence level are grouped
+in the order given by their associativity.
+
+| Operator/Expression | Associativity |
+|-----------------------------|---------------------|
+| Paths | |
+| Method calls | |
+| Field expressions | left to right |
+| Function calls, array indexing | |
+| `?` | |
+| Unary `-` `*` `!` `&` `&mut` | |
+| `as` | left to right |
+| `*` `/` `%` | left to right |
+| `+` `-` | left to right |
+| `<<` `>>` | left to right |
+| `&` | left to right |
+| `^` | left to right |
+| <code>&#124;</code> | left to right |
+| `==` `!=` `<` `>` `<=` `>=` | Require parentheses |
+| `&&` | left to right |
+| <code>&#124;&#124;</code> | left to right |
+| `..` `..=` | Require parentheses |
+| `=` `+=` `-=` `*=` `/=` `%=` <br> `&=` <code>&#124;=</code> `^=` `<<=` `>>=` | right to left |
+| `return` `break` closures | |
+
+## Evaluation order of operands
+
+The following list of expressions all evaluate their operands the same way, as
+described after the list. Other expressions either don't take operands or
+evaluate them conditionally as described on their respective pages.
+
+* Dereference expression
+* Error propagation expression
+* Negation expression
+* Arithmetic and logical binary operators
+* Comparison operators
+* Type cast expression
+* Grouped expression
+* Array expression
+* Await expression
+* Index expression
+* Tuple expression
+* Tuple index expression
+* Struct expression
+* Call expression
+* Method call expression
+* Field expression
+* Break expression
+* Range expression
+* Return expression
+
+The operands of these expressions are evaluated prior to applying the effects of
+the expression. Expressions taking multiple operands are evaluated left to right
+as written in the source code.
+
+> **Note**: Which subexpressions are the operands of an expression is
+> determined by expression precedence as per the previous section.
+
+For example, the two `next` method calls will always be called in the same
+order:
+
+```rust
+# // Using vec instead of array to avoid references
+# // since there is no stable owned array iterator
+# // at the time this example was written.
+let mut one_two = vec![1, 2].into_iter();
+assert_eq!(
+ (1, 2),
+ (one_two.next().unwrap(), one_two.next().unwrap())
+);
+```
+
+> **Note**: Since this is applied recursively, these expressions are also
+> evaluated from innermost to outermost, ignoring siblings until there are no
+> inner subexpressions.
+
+## Place Expressions and Value Expressions
+
+Expressions are divided into two main categories: place expressions and value
+expressions; there is also a third, minor category of expressions called
+assignee expressions. Within each expression, operands may likewise occur in
+either place context or value context. The evaluation of an expression depends
+both on its own category and the context it occurs within.
+
+A *place expression* is an expression that represents a memory location. These
+expressions are [paths] which refer to local variables, [static variables],
+[dereferences][deref] (`*expr`), [array indexing] expressions (`expr[expr]`),
+[field] references (`expr.f`) and parenthesized place expressions. All other
+expressions are value expressions.
+
+A *value expression* is an expression that represents an actual value.
+
+The following contexts are *place expression* contexts:
+
+* The left operand of a [compound assignment] expression.
+* The operand of a unary [borrow], [address-of][addr-of] or [dereference][deref] operator.
+* The operand of a field expression.
+* The indexed operand of an array indexing expression.
+* The operand of any [implicit borrow].
+* The initializer of a [let statement].
+* The [scrutinee] of an [`if let`], [`match`][match], or [`while let`]
+ expression.
+* The base of a [functional update] struct expression.
+
+> Note: Historically, place expressions were called *lvalues* and value
+> expressions were called *rvalues*.
+
+An *assignee expression* is an expression that appears in the left operand of an
+[assignment][assign] expression. Explicitly, the assignee expressions are:
+
+- Place expressions.
+- [Underscores][_UnderscoreExpression_].
+- [Tuples][_TupleExpression_] of assignee expressions.
+- [Slices][_ArrayExpression_] of assingee expressions.
+- [Tuple structs][_StructExpression_] of assignee expressions.
+- [Structs][_StructExpression_] of assignee expressions (with optionally named
+ fields).
+- [Unit structs][_StructExpression_].
+
+Arbitrary parenthesisation is permitted inside assignee expressions.
+
+### Moved and copied types
+
+When a place expression is evaluated in a value expression context, or is bound
+by value in a pattern, it denotes the value held _in_ that memory location. If
+the type of that value implements [`Copy`], then the value will be copied. In
+the remaining situations, if that type is [`Sized`], then it may be possible to
+move the value. Only the following place expressions may be moved out of:
+
+* [Variables] which are not currently borrowed.
+* [Temporary values](#temporaries).
+* [Fields][field] of a place expression which can be moved out of and
+ don't implement [`Drop`].
+* The result of [dereferencing][deref] an expression with type [`Box<T>`] and
+ that can also be moved out of.
+
+After moving out of a place expression that evaluates to a local variable, the
+location is deinitialized and cannot be read from again until it is
+reinitialized. In all other cases, trying to use a place expression in a value
+expression context is an error.
+
+### Mutability
+
+For a place expression to be [assigned][assign] to, mutably [borrowed][borrow],
+[implicitly mutably borrowed], or bound to a pattern containing `ref mut`, it
+must be _mutable_. We call these *mutable place expressions*. In contrast,
+other place expressions are called *immutable place expressions*.
+
+The following expressions can be mutable place expression contexts:
+
+* Mutable [variables] which are not currently borrowed.
+* [Mutable `static` items].
+* [Temporary values].
+* [Fields][field]: this evaluates the subexpression in a mutable place
+ expression context.
+* [Dereferences][deref] of a `*mut T` pointer.
+* Dereference of a variable, or field of a variable, with type `&mut T`. Note:
+ This is an exception to the requirement of the next rule.
+* Dereferences of a type that implements `DerefMut`: this then requires that
+ the value being dereferenced is evaluated in a mutable place expression context.
+* [Array indexing] of a type that implements `IndexMut`: this
+ then evaluates the value being indexed, but not the index, in mutable place
+ expression context.
+
+### Temporaries
+
+When using a value expression in most place expression contexts, a temporary
+unnamed memory location is created and initialized to that value. The expression
+evaluates to that location instead, except if [promoted] to a `static`. The
+[drop scope] of the temporary is usually the end of the enclosing statement.
+
+### Implicit Borrows
+
+Certain expressions will treat an expression as a place expression by implicitly
+borrowing it. For example, it is possible to compare two unsized [slices][slice] for
+equality directly, because the `==` operator implicitly borrows its operands:
+
+```rust
+# let c = [1, 2, 3];
+# let d = vec![1, 2, 3];
+let a: &[i32];
+let b: &[i32];
+# a = &c;
+# b = &d;
+// ...
+*a == *b;
+// Equivalent form:
+::std::cmp::PartialEq::eq(&*a, &*b);
+```
+
+Implicit borrows may be taken in the following expressions:
+
+* Left operand in [method-call] expressions.
+* Left operand in [field] expressions.
+* Left operand in [call expressions].
+* Left operand in [array indexing] expressions.
+* Operand of the [dereference operator][deref] (`*`).
+* Operands of [comparison].
+* Left operands of the [compound assignment].
+
+## Overloading Traits
+
+Many of the following operators and expressions can also be overloaded for
+other types using traits in `std::ops` or `std::cmp`. These traits also
+exist in `core::ops` and `core::cmp` with the same names.
+
+## Expression Attributes
+
+[Outer attributes][_OuterAttribute_] before an expression are allowed only in
+a few specific cases:
+
+* Before an expression used as a [statement].
+* Elements of [array expressions], [tuple expressions], [call expressions],
+ and tuple-style [struct] expressions.
+ <!--
+ These were likely stabilized inadvertently.
+ See https://github.com/rust-lang/rust/issues/32796 and
+ https://github.com/rust-lang/rust/issues/15701
+ -->
+* The tail expression of [block expressions].
+<!-- Keep list in sync with block-expr.md -->
+
+They are never allowed before:
+* [Range][_RangeExpression_] expressions.
+* Binary operator expressions ([_ArithmeticOrLogicalExpression_],
+ [_ComparisonExpression_], [_LazyBooleanExpression_], [_TypeCastExpression_],
+ [_AssignmentExpression_], [_CompoundAssignmentExpression_]).
+
+
+[block expressions]: expressions/block-expr.md
+[call expressions]: expressions/call-expr.md
+[field]: expressions/field-expr.md
+[functional update]: expressions/struct-expr.md#functional-update-syntax
+[`if let`]: expressions/if-expr.md#if-let-expressions
+[match]: expressions/match-expr.md
+[method-call]: expressions/method-call-expr.md
+[paths]: expressions/path-expr.md
+[struct]: expressions/struct-expr.md
+[tuple expressions]: expressions/tuple-expr.md
+[`while let`]: expressions/loop-expr.md#predicate-pattern-loops
+
+[array expressions]: expressions/array-expr.md
+[array indexing]: expressions/array-expr.md#array-and-slice-indexing-expressions
+
+[assign]: expressions/operator-expr.md#assignment-expressions
+[borrow]: expressions/operator-expr.md#borrow-operators
+[addr-of]: expressions/operator-expr.md#raw-address-of-operators
+[comparison]: expressions/operator-expr.md#comparison-operators
+[compound assignment]: expressions/operator-expr.md#compound-assignment-expressions
+[deref]: expressions/operator-expr.md#the-dereference-operator
+
+[destructors]: destructors.md
+[drop scope]: destructors.md#drop-scopes
+
+[`Box<T>`]: ../std/boxed/struct.Box.html
+[`Copy`]: special-types-and-traits.md#copy
+[`Drop`]: special-types-and-traits.md#drop
+[`Sized`]: special-types-and-traits.md#sized
+[implicit borrow]: #implicit-borrows
+[implicitly mutably borrowed]: #implicit-borrows
+[interior mutability]: interior-mutability.md
+[let statement]: statements.md#let-statements
+[Mutable `static` items]: items/static-items.md#mutable-statics
+[scrutinee]: glossary.md#scrutinee
+[promoted]: destructors.md#constant-promotion
+[slice]: types/slice.md
+[statement]: statements.md
+[static variables]: items/static-items.md
+[Temporary values]: #temporaries
+[Variables]: variables.md
+
+[_ArithmeticOrLogicalExpression_]: expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[_ArrayExpression_]: expressions/array-expr.md
+[_AsyncBlockExpression_]: expressions/block-expr.md#async-blocks
+[_AwaitExpression_]: expressions/await-expr.md
+[_AssignmentExpression_]: expressions/operator-expr.md#assignment-expressions
+[_BlockExpression_]: expressions/block-expr.md
+[_BreakExpression_]: expressions/loop-expr.md#break-expressions
+[_CallExpression_]: expressions/call-expr.md
+[_ClosureExpression_]: expressions/closure-expr.md
+[_ComparisonExpression_]: expressions/operator-expr.md#comparison-operators
+[_CompoundAssignmentExpression_]: expressions/operator-expr.md#compound-assignment-expressions
+[_ContinueExpression_]: expressions/loop-expr.md#continue-expressions
+[_FieldExpression_]: expressions/field-expr.md
+[_GroupedExpression_]: expressions/grouped-expr.md
+[_IfExpression_]: expressions/if-expr.md#if-expressions
+[_IfLetExpression_]: expressions/if-expr.md#if-let-expressions
+[_IndexExpression_]: expressions/array-expr.md#array-and-slice-indexing-expressions
+[_LazyBooleanExpression_]: expressions/operator-expr.md#lazy-boolean-operators
+[_LiteralExpression_]: expressions/literal-expr.md
+[_LoopExpression_]: expressions/loop-expr.md
+[_MacroInvocation_]: macros.md#macro-invocation
+[_MatchExpression_]: expressions/match-expr.md
+[_MethodCallExpression_]: expressions/method-call-expr.md
+[_OperatorExpression_]: expressions/operator-expr.md
+[_OuterAttribute_]: attributes.md
+[_PathExpression_]: expressions/path-expr.md
+[_RangeExpression_]: expressions/range-expr.md
+[_ReturnExpression_]: expressions/return-expr.md
+[_StructExpression_]: expressions/struct-expr.md
+[_TupleExpression_]: expressions/tuple-expr.md
+[_TupleIndexingExpression_]: expressions/tuple-expr.md#tuple-indexing-expressions
+[_TypeCastExpression_]: expressions/operator-expr.md#type-cast-expressions
+[_UnderscoreExpression_]: expressions/underscore-expr.md
+[_UnsafeBlockExpression_]: expressions/block-expr.md#unsafe-blocks
diff --git a/src/doc/reference/src/expressions/array-expr.md b/src/doc/reference/src/expressions/array-expr.md
new file mode 100644
index 000000000..fd7e2d378
--- /dev/null
+++ b/src/doc/reference/src/expressions/array-expr.md
@@ -0,0 +1,88 @@
+# Array and array index expressions
+
+## Array expressions
+
+> **<sup>Syntax</sup>**\
+> _ArrayExpression_ :\
+> &nbsp;&nbsp; `[` _ArrayElements_<sup>?</sup> `]`
+>
+> _ArrayElements_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Expression_] ( `,` [_Expression_] )<sup>\*</sup> `,`<sup>?</sup>\
+> &nbsp;&nbsp; | [_Expression_] `;` [_Expression_]
+
+*Array expressions* construct [arrays][array].
+Array expressions come in two forms.
+
+The first form lists out every value in the array.
+The syntax for this form is a comma-separated list of expressions of uniform type enclosed in square brackets.
+This produces an array containing each of these values in the order they are written.
+
+The syntax for the second form is two expressions separated by a semicolon (`;`) enclosed in square brackets.
+The expression before the `;` is called the *repeat operand*.
+The expression after the `;` is called the *length operand*.
+It must have type `usize` and be a [constant expression], such as a [literal] or a [constant item].
+An array expression of this form creates an array with the length of the value of the length operand with each element being a copy of the repeat operand.
+That is, `[a; b]` creates an array containing `b` copies of the value of `a`.
+If the length operand has a value greater than 1 then this requires that the type of the repeat operand is [`Copy`] or that it must be a [path] to a constant item.
+
+When the repeat operand is a constant item, it is evaluated the length operand's value times.
+If that value is `0`, then the constant item is not evaluated at all.
+For expressions that are not a constant item, it is evaluated exactly once, and then the result is copied the length operand's value times.
+
+```rust
+[1, 2, 3, 4];
+["a", "b", "c", "d"];
+[0; 128]; // array with 128 zeros
+[0u8, 0u8, 0u8, 0u8,];
+[[1, 0, 0], [0, 1, 0], [0, 0, 1]]; // 2D array
+const EMPTY: Vec<i32> = Vec::new();
+[EMPTY; 2];
+```
+
+## Array and slice indexing expressions
+
+> **<sup>Syntax</sup>**\
+> _IndexExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `[` [_Expression_] `]`
+
+[Array] and [slice]-typed values can be indexed by writing a square-bracket-enclosed expression of type `usize` (the index) after them.
+When the array is mutable, the resulting [memory location] can be assigned to.
+
+For other types an index expression `a[b]` is equivalent to `*std::ops::Index::index(&a, b)`, or `*std::ops::IndexMut::index_mut(&mut a, b)` in a mutable place expression context.
+Just as with methods, Rust will also insert dereference operations on `a` repeatedly to find an implementation.
+
+Indices are zero-based for arrays and slices.
+Array access is a [constant expression], so bounds can be checked at compile-time with a constant index value.
+Otherwise a check will be performed at run-time that will put the thread in a _panicked state_ if it fails.
+
+```rust,should_panic
+// lint is deny by default.
+#![warn(unconditional_panic)]
+
+([1, 2, 3, 4])[2]; // Evaluates to 3
+
+let b = [[1, 0, 0], [0, 1, 0], [0, 0, 1]];
+b[1][2]; // multidimensional array indexing
+
+let x = (["a", "b"])[10]; // warning: index out of bounds
+
+let n = 10;
+let y = (["a", "b"])[n]; // panics
+
+let arr = ["a", "b"];
+arr[10]; // warning: index out of bounds
+```
+
+The array index expression can be implemented for types other than arrays and slices by implementing the [Index] and [IndexMut] traits.
+
+[`Copy`]: ../special-types-and-traits.md#copy
+[IndexMut]: ../../std/ops/trait.IndexMut.html
+[Index]: ../../std/ops/trait.Index.html
+[_Expression_]: ../expressions.md
+[array]: ../types/array.md
+[constant expression]: ../const_eval.md#constant-expressions
+[constant item]: ../items/constant-items.md
+[literal]: ../tokens.md#literals
+[memory location]: ../expressions.md#place-expressions-and-value-expressions
+[path]: path-expr.md
+[slice]: ../types/slice.md
diff --git a/src/doc/reference/src/expressions/await-expr.md b/src/doc/reference/src/expressions/await-expr.md
new file mode 100644
index 000000000..feea1a368
--- /dev/null
+++ b/src/doc/reference/src/expressions/await-expr.md
@@ -0,0 +1,60 @@
+# Await expressions
+
+> **<sup>Syntax</sup>**\
+> _AwaitExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `.` `await`
+
+An `await` expression is a syntactic construct for suspending a computation
+provided by an implementation of `std::future::IntoFuture` until the given
+future is ready to produce a value.
+The syntax for an await expression is an expression with a type that implements the [`IntoFuture`] trait, called the *future operand*, then the token `.`, and then the `await` keyword.
+Await expressions are legal only within an [async context], like an [`async fn`] or an [`async` block].
+
+More specifically, an await expression has the following effect.
+
+1. Create a future by calling [`IntoFuture::into_future`] on the future operand.
+2. Evaluate the future to a [future] `tmp`;
+3. Pin `tmp` using [`Pin::new_unchecked`];
+4. This pinned future is then polled by calling the [`Future::poll`] method and passing it the current [task context](#task-context);
+5. If the call to `poll` returns [`Poll::Pending`], then the future returns `Poll::Pending`, suspending its state so that, when the surrounding async context is re-polled,execution returns to step 3;
+6. Otherwise the call to `poll` must have returned [`Poll::Ready`], in which case the value contained in the [`Poll::Ready`] variant is used as the result of the `await` expression itself.
+
+> **Edition differences**: Await expressions are only available beginning with Rust 2018.
+
+## Task context
+
+The task context refers to the [`Context`] which was supplied to the current [async context] when the async context itself was polled.
+Because `await` expressions are only legal in an async context, there must be some task context available.
+
+## Approximate desugaring
+
+Effectively, an await expression is roughly equivalent to the following non-normative desugaring:
+
+<!-- ignore: example expansion -->
+```rust,ignore
+match operand.into_future() {
+ mut pinned => loop {
+ let mut pin = unsafe { Pin::new_unchecked(&mut pinned) };
+ match Pin::future::poll(Pin::borrow(&mut pin), &mut current_context) {
+ Poll::Ready(r) => break r,
+ Poll::Pending => yield Poll::Pending,
+ }
+ }
+}
+```
+
+where the `yield` pseudo-code returns `Poll::Pending` and, when re-invoked, resumes execution from that point.
+The variable `current_context` refers to the context taken from the async environment.
+
+[_Expression_]: ../expressions.md
+[`async fn`]: ../items/functions.md#async-functions
+[`async` block]: block-expr.md#async-blocks
+[`context`]: ../../std/task/struct.Context.html
+[`future::poll`]: ../../std/future/trait.Future.html#tymethod.poll
+[`pin::new_unchecked`]: ../../std/pin/struct.Pin.html#method.new_unchecked
+[`poll::Pending`]: ../../std/task/enum.Poll.html#variant.Pending
+[`poll::Ready`]: ../../std/task/enum.Poll.html#variant.Ready
+[async context]: ../expressions/block-expr.md#async-context
+[future]: ../../std/future/trait.Future.html
+[`IntoFuture`]: ../../std/future/trait.IntoFuture.html
+[`IntoFuture::into_future`]: ../../std/future/trait.IntoFuture.html#tymethod.into_future
diff --git a/src/doc/reference/src/expressions/block-expr.md b/src/doc/reference/src/expressions/block-expr.md
new file mode 100644
index 000000000..a68b27e56
--- /dev/null
+++ b/src/doc/reference/src/expressions/block-expr.md
@@ -0,0 +1,191 @@
+# Block expressions
+
+> **<sup>Syntax</sup>**\
+> _BlockExpression_ :\
+> &nbsp;&nbsp; `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; _Statements_<sup>?</sup>\
+> &nbsp;&nbsp; `}`
+>
+> _Statements_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Statement_]<sup>\+</sup>\
+> &nbsp;&nbsp; | [_Statement_]<sup>\+</sup> [_ExpressionWithoutBlock_]\
+> &nbsp;&nbsp; | [_ExpressionWithoutBlock_]
+
+A *block expression*, or *block*, is a control flow expression and anonymous namespace scope for items and variable declarations.
+As a control flow expression, a block sequentially executes its component non-item declaration statements and then its final optional expression.
+As an anonymous namespace scope, item declarations are only in scope inside the block itself and variables declared by `let` statements are in scope from the next statement until the end of the block.
+
+The syntax for a block is `{`, then any [inner attributes], then any number of [statements], then an optional expression, called the final operand, and finally a `}`.
+
+Statements are usually required to be followed by a semicolon, with two exceptions:
+
+1. Item declaration statements do not need to be followed by a semicolon.
+2. Expression statements usually require a following semicolon except if its outer expression is a flow control expression.
+
+Furthermore, extra semicolons between statements are allowed, but these semicolons do not affect semantics.
+
+When evaluating a block expression, each statement, except for item declaration statements, is executed sequentially.
+Then the final operand is executed, if given.
+
+The type of a block is the type of the final operand, or `()` if the final operand is omitted.
+
+```rust
+# fn fn_call() {}
+let _: () = {
+ fn_call();
+};
+
+let five: i32 = {
+ fn_call();
+ 5
+};
+
+assert_eq!(5, five);
+```
+
+> Note: As a control flow expression, if a block expression is the outer expression of an expression statement, the expected type is `()` unless it is followed immediately by a semicolon.
+
+Blocks are always [value expressions] and evaluate the last operand in value expression context.
+
+> **Note**: This can be used to force moving a value if really needed.
+> For example, the following example fails on the call to `consume_self` because the struct was moved out of `s` in the block expression.
+>
+> ```rust,compile_fail
+> struct Struct;
+>
+> impl Struct {
+> fn consume_self(self) {}
+> fn borrow_self(&self) {}
+> }
+>
+> fn move_by_block_expression() {
+> let s = Struct;
+>
+> // Move the value out of `s` in the block expression.
+> (&{ s }).borrow_self();
+>
+> // Fails to execute because `s` is moved out of.
+> s.consume_self();
+> }
+> ```
+
+## `async` blocks
+
+> **<sup>Syntax</sup>**\
+> _AsyncBlockExpression_ :\
+> &nbsp;&nbsp; `async` `move`<sup>?</sup> _BlockExpression_
+
+An *async block* is a variant of a block expression which evaluates to a future.
+The final expression of the block, if present, determines the result value of the future.
+
+Executing an async block is similar to executing a closure expression:
+its immediate effect is to produce and return an anonymous type.
+Whereas closures return a type that implements one or more of the [`std::ops::Fn`] traits, however, the type returned for an async block implements the [`std::future::Future`] trait.
+The actual data format for this type is unspecified.
+
+> **Note:** The future type that rustc generates is roughly equivalent to an enum with one variant per `await` point, where each variant stores the data needed to resume from its corresponding point.
+
+> **Edition differences**: Async blocks are only available beginning with Rust 2018.
+
+### Capture modes
+
+Async blocks capture variables from their environment using the same [capture modes] as closures.
+Like closures, when written `async { .. }` the capture mode for each variable will be inferred from the content of the block.
+`async move { .. }` blocks however will move all referenced variables into the resulting future.
+
+### Async context
+
+Because async blocks construct a future, they define an **async context** which can in turn contain [`await` expressions].
+Async contexts are established by async blocks as well as the bodies of async functions, whose semantics are defined in terms of async blocks.
+
+### Control-flow operators
+
+Async blocks act like a function boundary, much like closures.
+Therefore, the `?` operator and `return` expressions both affect the output of the future, not the enclosing function or other context.
+That is, `return <expr>` from within a closure will return the result of `<expr>` as the output of the future.
+Similarly, if `<expr>?` propagates an error, that error is propagated as the result of the future.
+
+Finally, the `break` and `continue` keywords cannot be used to branch out from an async block.
+Therefore the following is illegal:
+
+```rust,compile_fail
+loop {
+ async move {
+ break; // This would break out of the loop.
+ }
+}
+```
+
+## `unsafe` blocks
+
+> **<sup>Syntax</sup>**\
+> _UnsafeBlockExpression_ :\
+> &nbsp;&nbsp; `unsafe` _BlockExpression_
+
+_See [`unsafe` block](../unsafe-blocks.md) for more information on when to use `unsafe`_
+
+A block of code can be prefixed with the `unsafe` keyword to permit [unsafe operations].
+Examples:
+
+```rust
+unsafe {
+ let b = [13u8, 17u8];
+ let a = &b[0] as *const u8;
+ assert_eq!(*a, 13);
+ assert_eq!(*a.offset(1), 17);
+}
+
+# unsafe fn an_unsafe_fn() -> i32 { 10 }
+let a = unsafe { an_unsafe_fn() };
+```
+
+## Attributes on block expressions
+
+[Inner attributes] are allowed directly after the opening brace of a block expression in the following situations:
+
+* [Function] and [method] bodies.
+* Loop bodies ([`loop`], [`while`], [`while let`], and [`for`]).
+* Block expressions used as a [statement].
+* Block expressions as elements of [array expressions], [tuple expressions],
+ [call expressions], and tuple-style [struct] expressions.
+* A block expression as the tail expression of another block expression.
+<!-- Keep list in sync with expressions.md -->
+
+The attributes that have meaning on a block expression are [`cfg`] and [the lint check attributes].
+
+For example, this function returns `true` on unix platforms and `false` on other platforms.
+
+```rust
+fn is_unix_platform() -> bool {
+ #[cfg(unix)] { true }
+ #[cfg(not(unix))] { false }
+}
+```
+
+[_ExpressionWithoutBlock_]: ../expressions.md
+[_InnerAttribute_]: ../attributes.md
+[_Statement_]: ../statements.md
+[`await` expressions]: await-expr.md
+[`cfg`]: ../conditional-compilation.md
+[`for`]: loop-expr.md#iterator-loops
+[`loop`]: loop-expr.md#infinite-loops
+[`std::ops::Fn`]: ../../std/ops/trait.Fn.html
+[`std::future::Future`]: ../../std/future/trait.Future.html
+[`while let`]: loop-expr.md#predicate-pattern-loops
+[`while`]: loop-expr.md#predicate-loops
+[array expressions]: array-expr.md
+[call expressions]: call-expr.md
+[capture modes]: ../types/closure.md#capture-modes
+[function]: ../items/functions.md
+[inner attributes]: ../attributes.md
+[method]: ../items/associated-items.md#methods
+[mutable reference]: ../types/pointer.md#mutables-references-
+[shared references]: ../types/pointer.md#shared-references-
+[statement]: ../statements.md
+[statements]: ../statements.md
+[struct]: struct-expr.md
+[the lint check attributes]: ../attributes/diagnostics.md#lint-check-attributes
+[tuple expressions]: tuple-expr.md
+[unsafe operations]: ../unsafety.md
+[value expressions]: ../expressions.md#place-expressions-and-value-expressions
diff --git a/src/doc/reference/src/expressions/call-expr.md b/src/doc/reference/src/expressions/call-expr.md
new file mode 100644
index 000000000..577f3f432
--- /dev/null
+++ b/src/doc/reference/src/expressions/call-expr.md
@@ -0,0 +1,97 @@
+# Call expressions
+
+> **<sup>Syntax</sup>**\
+> _CallExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `(` _CallParams_<sup>?</sup> `)`
+>
+> _CallParams_ :\
+> &nbsp;&nbsp; [_Expression_]&nbsp;( `,` [_Expression_] )<sup>\*</sup> `,`<sup>?</sup>
+
+A *call expression* calls a function.
+The syntax of a call expression is an expression, called the *function operand*, followed by a parenthesized comma-separated list of expression, called the *argument operands*.
+If the function eventually returns, then the expression completes.
+For [non-function types], the expression `f(...)` uses the method on one of the [`std::ops::Fn`], [`std::ops::FnMut`] or [`std::ops::FnOnce`] traits, which differ in whether they take the type by reference, mutable reference, or take ownership respectively.
+An automatic borrow will be taken if needed.
+The function operand will also be [automatically dereferenced] as required.
+
+Some examples of call expressions:
+
+```rust
+# fn add(x: i32, y: i32) -> i32 { 0 }
+let three: i32 = add(1i32, 2i32);
+let name: &'static str = (|| "Rust")();
+```
+
+## Disambiguating Function Calls
+
+All function calls are sugar for a more explicit [fully-qualified syntax].
+Function calls may need to be fully qualified, depending on the ambiguity of a call in light of in-scope items.
+
+> **Note**: In the past, the terms "Unambiguous Function Call Syntax", "Universal Function Call Syntax", or "UFCS", have been used in documentation, issues, RFCs, and other community writings.
+> However, these terms lack descriptive power and potentially confuse the issue at hand.
+> We mention them here for searchability's sake.
+
+Several situations often occur which result in ambiguities about the receiver or referent of method or associated function calls.
+These situations may include:
+
+* Multiple in-scope traits define methods with the same name for the same types
+* Auto-`deref` is undesirable; for example, distinguishing between methods on a smart pointer itself and the pointer's referent
+* Methods which take no arguments, like [`default()`], and return properties of a type, like [`size_of()`]
+
+To resolve the ambiguity, the programmer may refer to their desired method or function using more specific paths, types, or traits.
+
+For example,
+
+```rust
+trait Pretty {
+ fn print(&self);
+}
+
+trait Ugly {
+ fn print(&self);
+}
+
+struct Foo;
+impl Pretty for Foo {
+ fn print(&self) {}
+}
+
+struct Bar;
+impl Pretty for Bar {
+ fn print(&self) {}
+}
+impl Ugly for Bar {
+ fn print(&self) {}
+}
+
+fn main() {
+ let f = Foo;
+ let b = Bar;
+
+ // we can do this because we only have one item called `print` for `Foo`s
+ f.print();
+ // more explicit, and, in the case of `Foo`, not necessary
+ Foo::print(&f);
+ // if you're not into the whole brevity thing
+ <Foo as Pretty>::print(&f);
+
+ // b.print(); // Error: multiple 'print' found
+ // Bar::print(&b); // Still an error: multiple `print` found
+
+ // necessary because of in-scope items defining `print`
+ <Bar as Pretty>::print(&b);
+}
+```
+
+Refer to [RFC 132] for further details and motivations.
+
+[RFC 132]: https://github.com/rust-lang/rfcs/blob/master/text/0132-ufcs.md
+[_Expression_]: ../expressions.md
+[`default()`]: ../../std/default/trait.Default.html#tymethod.default
+[`size_of()`]: ../../std/mem/fn.size_of.html
+[`std::ops::FnMut`]: ../../std/ops/trait.FnMut.html
+[`std::ops::FnOnce`]: ../../std/ops/trait.FnOnce.html
+[`std::ops::Fn`]: ../../std/ops/trait.Fn.html
+[automatically dereferenced]: field-expr.md#automatic-dereferencing
+[fully-qualified syntax]: ../paths.md#qualified-paths
+[non-function types]: ../types/function-item.md
diff --git a/src/doc/reference/src/expressions/closure-expr.md b/src/doc/reference/src/expressions/closure-expr.md
new file mode 100644
index 000000000..bdc177bb5
--- /dev/null
+++ b/src/doc/reference/src/expressions/closure-expr.md
@@ -0,0 +1,73 @@
+# Closure expressions
+
+> **<sup>Syntax</sup>**\
+> _ClosureExpression_ :\
+> &nbsp;&nbsp; `move`<sup>?</sup>\
+> &nbsp;&nbsp; ( `||` | `|` _ClosureParameters_<sup>?</sup> `|` )\
+> &nbsp;&nbsp; ([_Expression_] | `->` [_TypeNoBounds_]&nbsp;[_BlockExpression_])
+>
+> _ClosureParameters_ :\
+> &nbsp;&nbsp; _ClosureParam_ (`,` _ClosureParam_)<sup>\*</sup> `,`<sup>?</sup>
+>
+> _ClosureParam_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> [_PatternNoTopAlt_]&nbsp;( `:` [_Type_] )<sup>?</sup>
+
+A *closure expression*, also know as a lambda expression or a lambda, defines a [closure type] and evaluates to a value of that type.
+The syntax for a closure expression is an optional `move` keyword, then a pipe-symbol-delimited (`|`) comma-separated list of [patterns], called the *closure parameters* each optionally followed by a `:` and a type, then an optional `->` and type, called the *return type*, and then an expression, called the *closure body operand*.
+The optional type after each pattern is a type annotation for the pattern.
+If there is a return type, the closure body must be a [block].
+
+A closure expression denotes a function that maps a list of parameters onto the expression that follows the parameters.
+Just like a [`let` binding], the closure parameters are irrefutable [patterns], whose type annotation is optional and will be inferred from context if not given.
+Each closure expression has a unique, anonymous type.
+
+Significantly, closure expressions _capture their environment_, which regular [function definitions] do not.
+Without the `move` keyword, the closure expression [infers how it captures each variable from its environment](../types/closure.md#capture-modes), preferring to capture by shared reference, effectively borrowing all outer variables mentioned inside the closure's body.
+If needed the compiler will infer that instead mutable references should be taken, or that the values should be moved or copied (depending on their type) from the environment.
+A closure can be forced to capture its environment by copying or moving values by prefixing it with the `move` keyword.
+This is often used to ensure that the closure's lifetime is `'static`.
+
+## Closure trait implementations
+
+Which traits the closure type implement depends on how variables are captured and the types of the captured variables.
+See the [call traits and coercions] chapter for how and when a closure implements `Fn`, `FnMut`, and `FnOnce`.
+The closure type implements [`Send`] and [`Sync`] if the type of every captured variable also implements the trait.
+
+## Example
+
+In this example, we define a function `ten_times` that takes a higher-order function argument, and we then call it with a closure expression as an argument, followed by a closure expression that moves values from its environment.
+
+```rust
+fn ten_times<F>(f: F) where F: Fn(i32) {
+ for index in 0..10 {
+ f(index);
+ }
+}
+
+ten_times(|j| println!("hello, {}", j));
+// With type annotations
+ten_times(|j: i32| -> () { println!("hello, {}", j) });
+
+let word = "konnichiwa".to_owned();
+ten_times(move |j| println!("{}, {}", word, j));
+```
+
+## Attributes on closure parameters
+
+Attributes on closure parameters follow the same rules and restrictions as [regular function parameters].
+
+[_Expression_]: ../expressions.md
+[_BlockExpression_]: block-expr.md
+[_TypeNoBounds_]: ../types.md#type-expressions
+[_PatternNoTopAlt_]: ../patterns.md
+[_Type_]: ../types.md#type-expressions
+[`let` binding]: ../statements.md#let-statements
+[`Send`]: ../special-types-and-traits.md#send
+[`Sync`]: ../special-types-and-traits.md#sync
+[_OuterAttribute_]: ../attributes.md
+[block]: block-expr.md
+[call traits and coercions]: ../types/closure.md#call-traits-and-coercions
+[closure type]: ../types/closure.md
+[function definitions]: ../items/functions.md
+[patterns]: ../patterns.md
+[regular function parameters]: ../items/functions.md#attributes-on-function-parameters
diff --git a/src/doc/reference/src/expressions/field-expr.md b/src/doc/reference/src/expressions/field-expr.md
new file mode 100644
index 000000000..93777b3a7
--- /dev/null
+++ b/src/doc/reference/src/expressions/field-expr.md
@@ -0,0 +1,73 @@
+# Field access expressions
+
+> **<sup>Syntax</sup>**\
+> _FieldExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `.` [IDENTIFIER]
+
+A *field expression* is a [place expression] that evaluates to the location of a field of a [struct] or [union].
+When the operand is [mutable], the field expression is also mutable.
+
+The syntax for a field expression is an expression, called the *container operand*, then a `.`, and finally an [identifier].
+Field expressions cannot be followed by a parenthetical comma-separated list of expressions, as that is instead parsed as a [method call expression].
+That is, they cannot be the function operand of a [call expression].
+
+> **Note**: Wrap the field expression in a [parenthesized expression] to use it in a call expression.
+>
+> ```rust
+> # struct HoldsCallable<F: Fn()> { callable: F }
+> let holds_callable = HoldsCallable { callable: || () };
+>
+> // Invalid: Parsed as calling the method "callable"
+> // holds_callable.callable();
+>
+> // Valid
+> (holds_callable.callable)();
+> ```
+
+Examples:
+
+<!-- ignore: needs lots of support code -->
+```rust,ignore
+mystruct.myfield;
+foo().x;
+(Struct {a: 10, b: 20}).a;
+(mystruct.function_field)() // Call expression containing a field expression
+```
+
+## Automatic dereferencing
+
+If the type of the container operand implements [`Deref`] or [`DerefMut`][`Deref`] depending on whether the operand is [mutable], it is *automatically dereferenced* as many times as necessary to make the field access possible.
+This processes is also called *autoderef* for short.
+
+## Borrowing
+
+The fields of a struct or a reference to a struct are treated as separate entities when borrowing.
+If the struct does not implement [`Drop`] and is stored in a local variable, this also applies to moving out of each of its fields.
+This also does not apply if automatic dereferencing is done though user-defined types other than [`Box`].
+
+```rust
+struct A { f1: String, f2: String, f3: String }
+let mut x: A;
+# x = A {
+# f1: "f1".to_string(),
+# f2: "f2".to_string(),
+# f3: "f3".to_string()
+# };
+let a: &mut String = &mut x.f1; // x.f1 borrowed mutably
+let b: &String = &x.f2; // x.f2 borrowed immutably
+let c: &String = &x.f2; // Can borrow again
+let d: String = x.f3; // Move out of x.f3
+```
+
+[_Expression_]: ../expressions.md
+[`Box`]: ../special-types-and-traits.md#boxt
+[`Deref`]: ../special-types-and-traits.md#deref-and-derefmut
+[`drop`]: ../special-types-and-traits.md#drop
+[IDENTIFIER]: ../identifiers.md
+[call expression]: call-expr.md
+[method call expression]: method-call-expr.md
+[mutable]: ../expressions.md#mutability
+[parenthesized expression]: grouped-expr.md
+[place expression]: ../expressions.md#place-expressions-and-value-expressions
+[struct]: ../items/structs.md
+[union]: ../items/unions.md
diff --git a/src/doc/reference/src/expressions/grouped-expr.md b/src/doc/reference/src/expressions/grouped-expr.md
new file mode 100644
index 000000000..0ff7e2c90
--- /dev/null
+++ b/src/doc/reference/src/expressions/grouped-expr.md
@@ -0,0 +1,43 @@
+# Grouped expressions
+
+> **<sup>Syntax</sup>**\
+> _GroupedExpression_ :\
+> &nbsp;&nbsp; `(` [_Expression_] `)`
+
+A *parenthesized expression* wraps a single expression, evaluating to that expression.
+The syntax for a parenthesized expression is a `(`, then an expression, called the *enclosed operand*, and then a `)`.
+
+Parenthesized expressions evaluate to the value of the enclosed operand.
+Unlike other expressions, parenthesized expressions are both [place expressions and value expressions][place].
+When the enclosed operand is a place expression, it is a place expression and when the enclosed operand is a value expression, it is a value expression.
+
+Parentheses can be used to explicitly modify the precedence order of subexpressions within an expression.
+
+An example of a parenthesized expression:
+
+```rust
+let x: i32 = 2 + 3 * 4;
+let y: i32 = (2 + 3) * 4;
+assert_eq!(x, 14);
+assert_eq!(y, 20);
+```
+
+An example of a necessary use of parentheses is when calling a function pointer that is a member of a struct:
+
+```rust
+# struct A {
+# f: fn() -> &'static str
+# }
+# impl A {
+# fn f(&self) -> &'static str {
+# "The method f"
+# }
+# }
+# let a = A{f: || "The field f"};
+#
+assert_eq!( a.f (), "The method f");
+assert_eq!((a.f)(), "The field f");
+```
+
+[_Expression_]: ../expressions.md
+[place]: ../expressions.md#place-expressions-and-value-expressions
diff --git a/src/doc/reference/src/expressions/if-expr.md b/src/doc/reference/src/expressions/if-expr.md
new file mode 100644
index 000000000..591437fc9
--- /dev/null
+++ b/src/doc/reference/src/expressions/if-expr.md
@@ -0,0 +1,155 @@
+# `if` and `if let` expressions
+
+## `if` expressions
+
+> **<sup>Syntax</sup>**\
+> _IfExpression_ :\
+> &nbsp;&nbsp; `if` [_Expression_]<sub>_except struct expression_</sub> [_BlockExpression_]\
+> &nbsp;&nbsp; (`else` (
+> [_BlockExpression_]
+> | _IfExpression_
+> | _IfLetExpression_ ) )<sup>\?</sup>
+
+An `if` expression is a conditional branch in program control.
+The syntax of an `if` expression is a condition operand, followed by a consequent block, any number of `else if` conditions and blocks, and an optional trailing `else` block.
+The condition operands must have the [boolean type].
+If a condition operand evaluates to `true`, the consequent block is executed and any subsequent `else if` or `else` block is skipped.
+If a condition operand evaluates to `false`, the consequent block is skipped and any subsequent `else if` condition is evaluated.
+If all `if` and `else if` conditions evaluate to `false` then any `else` block is executed.
+An if expression evaluates to the same value as the executed block, or `()` if no block is evaluated.
+An `if` expression must have the same type in all situations.
+
+```rust
+# let x = 3;
+if x == 4 {
+ println!("x is four");
+} else if x == 3 {
+ println!("x is three");
+} else {
+ println!("x is something else");
+}
+
+let y = if 12 * 15 > 150 {
+ "Bigger"
+} else {
+ "Smaller"
+};
+assert_eq!(y, "Bigger");
+```
+
+## `if let` expressions
+
+> **<sup>Syntax</sup>**\
+> _IfLetExpression_ :\
+> &nbsp;&nbsp; `if` `let` [_Pattern_] `=` [_Scrutinee_]<sub>_except lazy boolean operator expression_</sub>
+> [_BlockExpression_]\
+> &nbsp;&nbsp; (`else` (
+> [_BlockExpression_]
+> | _IfExpression_
+> | _IfLetExpression_ ) )<sup>\?</sup>
+
+An `if let` expression is semantically similar to an `if` expression but in place of a condition operand it expects the keyword `let` followed by a pattern, an `=` and a [scrutinee] operand.
+If the value of the scrutinee matches the pattern, the corresponding block will execute.
+Otherwise, flow proceeds to the following `else` block if it exists.
+Like `if` expressions, `if let` expressions have a value determined by the block that is evaluated.
+
+```rust
+let dish = ("Ham", "Eggs");
+
+// this body will be skipped because the pattern is refuted
+if let ("Bacon", b) = dish {
+ println!("Bacon is served with {}", b);
+} else {
+ // This block is evaluated instead.
+ println!("No bacon will be served");
+}
+
+// this body will execute
+if let ("Ham", b) = dish {
+ println!("Ham is served with {}", b);
+}
+
+if let _ = 5 {
+ println!("Irrefutable patterns are always true");
+}
+```
+
+`if` and `if let` expressions can be intermixed:
+
+```rust
+let x = Some(3);
+let a = if let Some(1) = x {
+ 1
+} else if x == Some(2) {
+ 2
+} else if let Some(y) = x {
+ y
+} else {
+ -1
+};
+assert_eq!(a, 3);
+```
+
+An `if let` expression is equivalent to a [`match` expression] as follows:
+
+<!-- ignore: expansion example -->
+```rust,ignore
+if let PATS = EXPR {
+ /* body */
+} else {
+ /*else */
+}
+```
+
+is equivalent to
+
+<!-- ignore: expansion example -->
+```rust,ignore
+match EXPR {
+ PATS => { /* body */ },
+ _ => { /* else */ }, // () if there is no else
+}
+```
+
+Multiple patterns may be specified with the `|` operator. This has the same semantics as with `|` in `match` expressions:
+
+```rust
+enum E {
+ X(u8),
+ Y(u8),
+ Z(u8),
+}
+let v = E::Y(12);
+if let E::X(n) | E::Y(n) = v {
+ assert_eq!(n, 12);
+}
+```
+
+The expression cannot be a [lazy boolean operator expression][_LazyBooleanOperatorExpression_].
+Use of a lazy boolean operator is ambiguous with a planned feature change of the language (the implementation of if-let chains - see [eRFC 2947][_eRFCIfLetChain_]).
+When lazy boolean operator expression is desired, this can be achieved by using parenthesis as below:
+
+<!-- ignore: psuedo code -->
+```rust,ignore
+// Before...
+if let PAT = EXPR && EXPR { .. }
+
+// After...
+if let PAT = ( EXPR && EXPR ) { .. }
+
+// Before...
+if let PAT = EXPR || EXPR { .. }
+
+// After...
+if let PAT = ( EXPR || EXPR ) { .. }
+```
+
+[_BlockExpression_]: block-expr.md
+[_Expression_]: ../expressions.md
+[_LazyBooleanOperatorExpression_]: operator-expr.md#lazy-boolean-operators
+[_Pattern_]: ../patterns.md
+[_Scrutinee_]: match-expr.md
+[_eRFCIfLetChain_]: https://github.com/rust-lang/rfcs/blob/master/text/2497-if-let-chains.md#rollout-plan-and-transitioning-to-rust-2018
+[`match` expression]: match-expr.md
+[boolean type]: ../types/boolean.md
+[scrutinee]: ../glossary.md#scrutinee
diff --git a/src/doc/reference/src/expressions/literal-expr.md b/src/doc/reference/src/expressions/literal-expr.md
new file mode 100644
index 000000000..4eec37dcb
--- /dev/null
+++ b/src/doc/reference/src/expressions/literal-expr.md
@@ -0,0 +1,182 @@
+# Literal expressions
+
+> **<sup>Syntax</sup>**\
+> _LiteralExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [CHAR_LITERAL]\
+> &nbsp;&nbsp; | [STRING_LITERAL]\
+> &nbsp;&nbsp; | [RAW_STRING_LITERAL]\
+> &nbsp;&nbsp; | [BYTE_LITERAL]\
+> &nbsp;&nbsp; | [BYTE_STRING_LITERAL]\
+> &nbsp;&nbsp; | [RAW_BYTE_STRING_LITERAL]\
+> &nbsp;&nbsp; | [INTEGER_LITERAL][^out-of-range]\
+> &nbsp;&nbsp; | [FLOAT_LITERAL]\
+> &nbsp;&nbsp; | `true` | `false`
+>
+> [^out-of-range]: A value ≥ 2<sup>128</sup> is not allowed.
+
+A _literal expression_ is an expression consisting of a single token, rather than a sequence of tokens, that immediately and directly denotes the value it evaluates to, rather than referring to it by name or some other evaluation rule.
+
+A literal is a form of [constant expression], so is evaluated (primarily) at compile time.
+
+Each of the lexical [literal][literal tokens] forms described earlier can make up a literal expression, as can the keywords `true` and `false`.
+
+```rust
+"hello"; // string type
+'5'; // character type
+5; // integer type
+```
+
+## Character literal expressions
+
+A character literal expression consists of a single [CHAR_LITERAL] token.
+
+> **Note**: This section is incomplete.
+
+## String literal expressions
+
+A string literal expression consists of a single [STRING_LITERAL] or [RAW_STRING_LITERAL] token.
+
+> **Note**: This section is incomplete.
+
+## Byte literal expressions
+
+A byte literal expression consists of a single [BYTE_LITERAL] token.
+
+> **Note**: This section is incomplete.
+
+## Byte string literal expressions
+
+A string literal expression consists of a single [BYTE_STRING_LITERAL] or [RAW_BYTE_STRING_LITERAL] token.
+
+> **Note**: This section is incomplete.
+
+## Integer literal expressions
+
+An integer literal expression consists of a single [INTEGER_LITERAL] token.
+
+If the token has a [suffix], the suffix will be the name of one of the [primitive integer types][numeric types]: `u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64`, `i64`, `u128`, `i128`, `usize`, or `isize`, and the expression has that type.
+
+If the token has no suffix, the expression's type is determined by type inference:
+
+* If an integer type can be _uniquely_ determined from the surrounding program context, the expression has that type.
+
+* If the program context under-constrains the type, it defaults to the signed 32-bit integer `i32`.
+
+* If the program context over-constrains the type, it is considered a static type error.
+
+Examples of integer literal expressions:
+
+```rust
+123; // type i32
+123i32; // type i32
+123u32; // type u32
+123_u32; // type u32
+let a: u64 = 123; // type u64
+
+0xff; // type i32
+0xff_u8; // type u8
+
+0o70; // type i32
+0o70_i16; // type i16
+
+0b1111_1111_1001_0000; // type i32
+0b1111_1111_1001_0000i64; // type i64
+
+0usize; // type usize
+```
+
+The value of the expression is determined from the string representation of the token as follows:
+
+* An integer radix is chosen by inspecting the first two characters of the string, as follows:
+
+ * `0b` indicates radix 2
+ * `0o` indicates radix 8
+ * `0x` indicates radix 16
+ * otherwise the radix is 10.
+
+* If the radix is not 10, the first two characters are removed from the string.
+
+* Any underscores are removed from the string.
+
+* The string is converted to a `u128` value as if by [`u128::from_str_radix`] with the chosen radix.
+If the value does not fit in `u128`, the expression is rejected by the parser.
+
+* The `u128` value is converted to the expression's type via a [numeric cast].
+
+> **Note**: The final cast will truncate the value of the literal if it does not fit in the expression's type.
+> `rustc` includes a [lint check] named `overflowing_literals`, defaulting to `deny`, which rejects expressions where this occurs.
+
+> **Note**: `-1i8`, for example, is an application of the [negation operator] to the literal expression `1i8`, not a single integer literal expression.
+> See [Overflow] for notes on representing the most negative value for a signed type.
+
+## Floating-point literal expressions
+
+A floating-point literal expression consists of a single [FLOAT_LITERAL] token.
+
+If the token has a [suffix], the suffix will be the name of one of the [primitive floating-point types][floating-point types]: `f32` or `f64`, and the expression has that type.
+
+If the token has no suffix, the expression's type is determined by type inference:
+
+* If a floating-point type can be _uniquely_ determined from the surrounding program context, the expression has that type.
+
+* If the program context under-constrains the type, it defaults to `f64`.
+
+* If the program context over-constrains the type, it is considered a static type error.
+
+Examples of floating-point literal expressions:
+
+```rust
+123.0f64; // type f64
+0.1f64; // type f64
+0.1f32; // type f32
+12E+99_f64; // type f64
+5f32; // type f32
+let x: f64 = 2.; // type f64
+```
+
+The value of the expression is determined from the string representation of the token as follows:
+
+* Any underscores are removed from the string.
+
+* The string is converted to the expression's type as if by [`f32::from_str`] or [`f64::from_str`].
+
+> **Note**: `-1.0`, for example, is an application of the [negation operator] to the literal expression `1.0`, not a single floating-point literal expression.
+
+> **Note**: `inf` and `NaN` are not literal tokens.
+> The [`f32::INFINITY`], [`f64::INFINITY`], [`f32::NAN`], and [`f64::NAN`] constants can be used instead of literal expressions.
+> In `rustc`, a literal large enough to be evaluated as infinite will trigger the `overflowing_literals` lint check.
+
+## Boolean literal expressions
+
+A boolean literal expression consists of one of the keywords `true` or `false`.
+
+The expression's type is the primitive [boolean type], and its value is:
+ * true if the keyword is `true`
+ * false if the keyword is `false`
+
+
+[boolean type]: ../types/boolean.md
+[constant expression]: ../const_eval.md#constant-expressions
+[floating-point types]: ../types/numeric.md#floating-point-types
+[lint check]: ../attributes/diagnostics.md#lint-check-attributes
+[literal tokens]: ../tokens.md#literals
+[numeric cast]: operator-expr.md#numeric-cast
+[numeric types]: ../types/numeric.md
+[suffix]: ../tokens.md#suffixes
+[negation operator]: operator-expr.md#negation-operators
+[overflow]: operator-expr.md#overflow
+[`f32::from_str`]: ../../core/primitive.f32.md#method.from_str
+[`f32::INFINITY`]: ../../core/primitive.f32.md#associatedconstant.INFINITY
+[`f32::NAN`]: ../../core/primitive.f32.md#associatedconstant.NAN
+[`f64::from_str`]: ../../core/primitive.f64.md#method.from_str
+[`f64::INFINITY`]: ../../core/primitive.f64.md#associatedconstant.INFINITY
+[`f64::NAN`]: ../../core/primitive.f64.md#associatedconstant.NAN
+[`u128::from_str_radix`]: ../../core/primitive.u128.md#method.from_str_radix
+[CHAR_LITERAL]: ../tokens.md#character-literals
+[STRING_LITERAL]: ../tokens.md#string-literals
+[RAW_STRING_LITERAL]: ../tokens.md#raw-string-literals
+[BYTE_LITERAL]: ../tokens.md#byte-literals
+[BYTE_STRING_LITERAL]: ../tokens.md#byte-string-literals
+[RAW_BYTE_STRING_LITERAL]: ../tokens.md#raw-byte-string-literals
+[INTEGER_LITERAL]: ../tokens.md#integer-literals
+[FLOAT_LITERAL]: ../tokens.md#floating-point-literals
diff --git a/src/doc/reference/src/expressions/loop-expr.md b/src/doc/reference/src/expressions/loop-expr.md
new file mode 100644
index 000000000..308f3e346
--- /dev/null
+++ b/src/doc/reference/src/expressions/loop-expr.md
@@ -0,0 +1,274 @@
+# Loops
+
+> **<sup>Syntax</sup>**\
+> _LoopExpression_ :\
+> &nbsp;&nbsp; [_LoopLabel_]<sup>?</sup> (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [_InfiniteLoopExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_PredicateLoopExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_PredicatePatternLoopExpression_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_IteratorLoopExpression_]\
+> &nbsp;&nbsp; )
+
+[_LoopLabel_]: #loop-labels
+[_InfiniteLoopExpression_]: #infinite-loops
+[_PredicateLoopExpression_]: #predicate-loops
+[_PredicatePatternLoopExpression_]: #predicate-pattern-loops
+[_IteratorLoopExpression_]: #iterator-loops
+
+Rust supports four loop expressions:
+
+* A [`loop` expression](#infinite-loops) denotes an infinite loop.
+* A [`while` expression](#predicate-loops) loops until a predicate is false.
+* A [`while let` expression](#predicate-pattern-loops) tests a pattern.
+* A [`for` expression](#iterator-loops) extracts values from an iterator, looping until the iterator is empty.
+
+All four types of loop support [`break` expressions](#break-expressions), [`continue` expressions](#continue-expressions), and [labels](#loop-labels).
+Only `loop` supports [evaluation to non-trivial values](#break-and-loop-values).
+
+## Infinite loops
+
+> **<sup>Syntax</sup>**\
+> _InfiniteLoopExpression_ :\
+> &nbsp;&nbsp; `loop` [_BlockExpression_]
+
+A `loop` expression repeats execution of its body continuously:
+`loop { println!("I live."); }`.
+
+A `loop` expression without an associated `break` expression is diverging and has type [`!`](../types/never.md).
+A `loop` expression containing associated [`break` expression(s)](#break-expressions) may terminate, and must have type compatible with the value of the `break` expression(s).
+
+## Predicate loops
+
+> **<sup>Syntax</sup>**\
+> _PredicateLoopExpression_ :\
+> &nbsp;&nbsp; `while` [_Expression_]<sub>_except struct expression_</sub> [_BlockExpression_]
+
+A `while` loop begins by evaluating the [boolean] loop conditional operand.
+If the loop conditional operand evaluates to `true`, the loop body block executes, then control returns to the loop conditional operand.
+If the loop conditional expression evaluates to `false`, the `while` expression completes.
+
+An example:
+
+```rust
+let mut i = 0;
+
+while i < 10 {
+ println!("hello");
+ i = i + 1;
+}
+```
+
+## Predicate pattern loops
+
+> **<sup>Syntax</sup>**\
+> [_PredicatePatternLoopExpression_] :\
+> &nbsp;&nbsp; `while` `let` [_Pattern_] `=` [_Scrutinee_]<sub>_except lazy boolean operator expression_</sub>
+> [_BlockExpression_]
+
+
+A `while let` loop is semantically similar to a `while` loop but in place of a condition expression it expects the keyword `let` followed by a pattern, an `=`, a [scrutinee] expression and a block expression.
+If the value of the scrutinee matches the pattern, the loop body block executes then control returns to the pattern matching statement.
+Otherwise, the while expression completes.
+
+```rust
+let mut x = vec![1, 2, 3];
+
+while let Some(y) = x.pop() {
+ println!("y = {}", y);
+}
+
+while let _ = 5 {
+ println!("Irrefutable patterns are always true");
+ break;
+}
+```
+
+A `while let` loop is equivalent to a `loop` expression containing a [`match` expression] as follows.
+
+<!-- ignore: expansion example -->
+```rust,ignore
+'label: while let PATS = EXPR {
+ /* loop body */
+}
+```
+
+is equivalent to
+
+<!-- ignore: expansion example -->
+```rust,ignore
+'label: loop {
+ match EXPR {
+ PATS => { /* loop body */ },
+ _ => break,
+ }
+}
+```
+
+Multiple patterns may be specified with the `|` operator.
+This has the same semantics as with `|` in `match` expressions:
+
+```rust
+let mut vals = vec![2, 3, 1, 2, 2];
+while let Some(v @ 1) | Some(v @ 2) = vals.pop() {
+ // Prints 2, 2, then 1
+ println!("{}", v);
+}
+```
+
+As is the case in [`if let` expressions], the scrutinee cannot be a [lazy boolean operator expression][_LazyBooleanOperatorExpression_].
+
+## Iterator loops
+
+> **<sup>Syntax</sup>**\
+> _IteratorLoopExpression_ :\
+> &nbsp;&nbsp; `for` [_Pattern_] `in` [_Expression_]<sub>_except struct expression_</sub>
+> [_BlockExpression_]
+
+A `for` expression is a syntactic construct for looping over elements provided by an implementation of `std::iter::IntoIterator`.
+If the iterator yields a value, that value is matched against the irrefutable pattern, the body of the loop is executed, and then control returns to the head of the `for` loop.
+If the iterator is empty, the `for` expression completes.
+
+An example of a `for` loop over the contents of an array:
+
+```rust
+let v = &["apples", "cake", "coffee"];
+
+for text in v {
+ println!("I like {}.", text);
+}
+```
+
+An example of a for loop over a series of integers:
+
+```rust
+let mut sum = 0;
+for n in 1..11 {
+ sum += n;
+}
+assert_eq!(sum, 55);
+```
+
+A `for` loop is equivalent to a `loop` expression containing a [`match` expression] as follows:
+
+<!-- ignore: expansion example -->
+```rust,ignore
+'label: for PATTERN in iter_expr {
+ /* loop body */
+}
+```
+
+is equivalent to
+
+<!-- ignore: expansion example -->
+```rust,ignore
+{
+ let result = match IntoIterator::into_iter(iter_expr) {
+ mut iter => 'label: loop {
+ let mut next;
+ match Iterator::next(&mut iter) {
+ Option::Some(val) => next = val,
+ Option::None => break,
+ };
+ let PATTERN = next;
+ let () = { /* loop body */ };
+ },
+ };
+ result
+}
+```
+
+`IntoIterator`, `Iterator`, and `Option` are always the standard library items here, not whatever those names resolve to in the current scope.
+The variable names `next`, `iter`, and `val` are for exposition only, they do not actually have names the user can type.
+
+> **Note**: that the outer `match` is used to ensure that any [temporary values] in `iter_expr` don't get dropped before the loop is finished.
+> `next` is declared before being assigned because it results in types being inferred correctly more often.
+
+## Loop labels
+
+> **<sup>Syntax</sup>**\
+> _LoopLabel_ :\
+> &nbsp;&nbsp; [LIFETIME_OR_LABEL] `:`
+
+A loop expression may optionally have a _label_. The label is written as a lifetime preceding the loop expression, as in `'foo: loop { break 'foo; }`, `'bar: while false {}`, `'humbug: for _ in 0..0 {}`.
+If a label is present, then labeled `break` and `continue` expressions nested within this loop may exit out of this loop or return control to its head.
+See [break expressions](#break-expressions) and [continue expressions](#continue-expressions).
+
+## `break` expressions
+
+> **<sup>Syntax</sup>**\
+> _BreakExpression_ :\
+> &nbsp;&nbsp; `break` [LIFETIME_OR_LABEL]<sup>?</sup> [_Expression_]<sup>?</sup>
+
+When `break` is encountered, execution of the associated loop body is immediately terminated, for example:
+
+```rust
+let mut last = 0;
+for x in 1..100 {
+ if x > 12 {
+ break;
+ }
+ last = x;
+}
+assert_eq!(last, 12);
+```
+
+A `break` expression is normally associated with the innermost `loop`, `for` or `while` loop enclosing the `break` expression,
+but a [label](#loop-labels) can be used to specify which enclosing loop is affected.
+Example:
+
+```rust
+'outer: loop {
+ while true {
+ break 'outer;
+ }
+}
+```
+
+A `break` expression is only permitted in the body of a loop, and has one of the forms `break`, `break 'label` or ([see below](#break-and-loop-values)) `break EXPR` or `break 'label EXPR`.
+
+## `continue` expressions
+
+> **<sup>Syntax</sup>**\
+> _ContinueExpression_ :\
+> &nbsp;&nbsp; `continue` [LIFETIME_OR_LABEL]<sup>?</sup>
+
+When `continue` is encountered, the current iteration of the associated loop body is immediately terminated, returning control to the loop *head*.
+In the case of a `while` loop, the head is the conditional expression controlling the loop.
+In the case of a `for` loop, the head is the call-expression controlling the loop.
+
+Like `break`, `continue` is normally associated with the innermost enclosing loop, but `continue 'label` may be used to specify the loop affected.
+A `continue` expression is only permitted in the body of a loop.
+
+## `break` and loop values
+
+When associated with a `loop`, a break expression may be used to return a value from that loop, via one of the forms `break EXPR` or `break 'label EXPR`, where `EXPR` is an expression whose result is returned from the `loop`.
+For example:
+
+```rust
+let (mut a, mut b) = (1, 1);
+let result = loop {
+ if b > 10 {
+ break b;
+ }
+ let c = a + b;
+ a = b;
+ b = c;
+};
+// first number in Fibonacci sequence over 10:
+assert_eq!(result, 13);
+```
+
+In the case a `loop` has an associated `break`, it is not considered diverging, and the `loop` must have a type compatible with each `break` expression.
+`break` without an expression is considered identical to `break` with expression `()`.
+
+[LIFETIME_OR_LABEL]: ../tokens.md#lifetimes-and-loop-labels
+[_BlockExpression_]: block-expr.md
+[_Expression_]: ../expressions.md
+[_Pattern_]: ../patterns.md
+[_Scrutinee_]: match-expr.md
+[`match` expression]: match-expr.md
+[boolean]: ../types/boolean.md
+[scrutinee]: ../glossary.md#scrutinee
+[temporary values]: ../expressions.md#temporaries
+[_LazyBooleanOperatorExpression_]: operator-expr.md#lazy-boolean-operators
+[`if let` expressions]: if-expr.md#if-let-expressions
diff --git a/src/doc/reference/src/expressions/match-expr.md b/src/doc/reference/src/expressions/match-expr.md
new file mode 100644
index 000000000..edbc63658
--- /dev/null
+++ b/src/doc/reference/src/expressions/match-expr.md
@@ -0,0 +1,147 @@
+# `match` expressions
+
+> **<sup>Syntax</sup>**\
+> _MatchExpression_ :\
+> &nbsp;&nbsp; `match` _Scrutinee_ `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; _MatchArms_<sup>?</sup>\
+> &nbsp;&nbsp; `}`
+>
+>_Scrutinee_ :\
+> &nbsp;&nbsp; [_Expression_]<sub>_except struct expression_</sub>
+>
+> _MatchArms_ :\
+> &nbsp;&nbsp; ( _MatchArm_ `=>`
+> ( [_ExpressionWithoutBlock_][_Expression_] `,`
+> | [_ExpressionWithBlock_][_Expression_] `,`<sup>?</sup> )
+> )<sup>\*</sup>\
+> &nbsp;&nbsp; _MatchArm_ `=>` [_Expression_] `,`<sup>?</sup>
+>
+> _MatchArm_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> [_Pattern_] _MatchArmGuard_<sup>?</sup>
+>
+> _MatchArmGuard_ :\
+> &nbsp;&nbsp; `if` [_Expression_]
+
+A *`match` expression* branches on a pattern.
+The exact form of matching that occurs depends on the [pattern].
+A `match` expression has a *[scrutinee] expression*, which is the value to compare to the patterns.
+The scrutinee expression and the patterns must have the same type.
+
+A `match` behaves differently depending on whether or not the scrutinee expression is a [place expression or value expression][place expression].
+If the scrutinee expression is a [value expression], it is first evaluated into a temporary location, and the resulting value is sequentially compared to the patterns in the arms until a match is found.
+The first arm with a matching pattern is chosen as the branch target of the `match`, any variables bound by the pattern are assigned to local variables in the arm's block, and control enters the block.
+
+When the scrutinee expression is a [place expression], the match does not allocate a temporary location;
+however, a by-value binding may copy or move from the memory location.
+When possible, it is preferable to match on place expressions, as the lifetime of these matches inherits the lifetime of the place expression rather than being restricted to the inside of the match.
+
+An example of a `match` expression:
+
+```rust
+let x = 1;
+
+match x {
+ 1 => println!("one"),
+ 2 => println!("two"),
+ 3 => println!("three"),
+ 4 => println!("four"),
+ 5 => println!("five"),
+ _ => println!("something else"),
+}
+```
+
+Variables bound within the pattern are scoped to the match guard and the arm's expression.
+The [binding mode] (move, copy, or reference) depends on the pattern.
+
+Multiple match patterns may be joined with the `|` operator.
+Each pattern will be tested in left-to-right sequence until a successful match is found.
+
+```rust
+let x = 9;
+let message = match x {
+ 0 | 1 => "not many",
+ 2 ..= 9 => "a few",
+ _ => "lots"
+};
+
+assert_eq!(message, "a few");
+
+// Demonstration of pattern match order.
+struct S(i32, i32);
+
+match S(1, 2) {
+ S(z @ 1, _) | S(_, z @ 2) => assert_eq!(z, 1),
+ _ => panic!(),
+}
+```
+
+> Note: The `2..=9` is a [Range Pattern], not a [Range Expression].
+> Thus, only those types of ranges supported by range patterns can be used in match arms.
+
+Every binding in each `|` separated pattern must appear in all of the patterns in the arm.
+Every binding of the same name must have the same type, and have the same binding mode.
+
+## Match guards
+
+Match arms can accept _match guards_ to further refine the criteria for matching a case.
+Pattern guards appear after the pattern and consist of a `bool`-typed expression following the `if` keyword.
+
+When the pattern matches successfully, the pattern guard expression is executed.
+If the expression evaluates to true, the pattern is successfully matched against.
+Otherwise, the next pattern, including other matches with the `|` operator in the same arm, is tested.
+
+```rust
+# let maybe_digit = Some(0);
+# fn process_digit(i: i32) { }
+# fn process_other(i: i32) { }
+let message = match maybe_digit {
+ Some(x) if x < 10 => process_digit(x),
+ Some(x) => process_other(x),
+ None => panic!(),
+};
+```
+
+> Note: Multiple matches using the `|` operator can cause the pattern guard and the side effects it has to execute multiple times.
+> For example:
+>
+> ```rust
+> # use std::cell::Cell;
+> let i : Cell<i32> = Cell::new(0);
+> match 1 {
+> 1 | _ if { i.set(i.get() + 1); false } => {}
+> _ => {}
+> }
+> assert_eq!(i.get(), 2);
+> ```
+
+A pattern guard may refer to the variables bound within the pattern they follow.
+Before evaluating the guard, a shared reference is taken to the part of the scrutinee the variable matches on.
+While evaluating the guard, this shared reference is then used when accessing the variable.
+Only when the guard evaluates to true is the value moved, or copied, from the scrutinee into the variable.
+This allows shared borrows to be used inside guards without moving out of the scrutinee in case guard fails to match.
+Moreover, by holding a shared reference while evaluating the guard, mutation inside guards is also prevented.
+
+## Attributes on match arms
+
+Outer attributes are allowed on match arms.
+The only attributes that have meaning on match arms are [`cfg`] and the [lint check attributes].
+
+[Inner attributes] are allowed directly after the opening brace of the match expression in the same expression contexts as [attributes on block expressions].
+
+[_Expression_]: ../expressions.md
+[place expression]: ../expressions.md#place-expressions-and-value-expressions
+[value expression]: ../expressions.md#place-expressions-and-value-expressions
+[_InnerAttribute_]: ../attributes.md
+[_OuterAttribute_]: ../attributes.md
+[`cfg`]: ../conditional-compilation.md
+[lint check attributes]: ../attributes/diagnostics.md#lint-check-attributes
+[Range Expression]: range-expr.md
+
+[_Pattern_]: ../patterns.md
+[pattern]: ../patterns.md
+[Inner attributes]: ../attributes.md
+[Range Pattern]: ../patterns.md#range-patterns
+[attributes on block expressions]: block-expr.md#attributes-on-block-expressions
+[binding mode]: ../patterns.md#binding-modes
+[scrutinee]: ../glossary.md#scrutinee
diff --git a/src/doc/reference/src/expressions/method-call-expr.md b/src/doc/reference/src/expressions/method-call-expr.md
new file mode 100644
index 000000000..8a2f68cc3
--- /dev/null
+++ b/src/doc/reference/src/expressions/method-call-expr.md
@@ -0,0 +1,96 @@
+# Method-call expressions
+
+> **<sup>Syntax</sup>**\
+> _MethodCallExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `.` [_PathExprSegment_] `(`[_CallParams_]<sup>?</sup> `)`
+
+A _method call_ consists of an expression (the *receiver*) followed by a single dot, an expression path segment, and a parenthesized expression-list.
+Method calls are resolved to associated [methods] on specific traits, either statically dispatching to a method if the exact `self`-type of the left-hand-side is known, or dynamically dispatching if the left-hand-side expression is an indirect [trait object](../types/trait-object.md).
+
+```rust
+let pi: Result<f32, _> = "3.14".parse();
+let log_pi = pi.unwrap_or(1.0).log(2.72);
+# assert!(1.14 < log_pi && log_pi < 1.15)
+```
+
+When looking up a method call, the receiver may be automatically dereferenced or borrowed in order to call a method.
+This requires a more complex lookup process than for other functions, since there may be a number of possible methods to call.
+The following procedure is used:
+
+The first step is to build a list of candidate receiver types.
+Obtain these by repeatedly [dereferencing][dereference] the receiver expression's type, adding each type encountered to the list, then finally attempting an [unsized coercion] at the end, and adding the result type if that is successful.
+Then, for each candidate `T`, add `&T` and `&mut T` to the list immediately after `T`.
+
+For instance, if the receiver has type `Box<[i32;2]>`, then the candidate types will be `Box<[i32;2]>`, `&Box<[i32;2]>`, `&mut Box<[i32;2]>`, `[i32; 2]` (by dereferencing), `&[i32; 2]`, `&mut [i32; 2]`, `[i32]` (by unsized coercion), `&[i32]`, and finally `&mut [i32]`.
+
+Then, for each candidate type `T`, search for a [visible] method with a receiver of that type in the following places:
+
+1. `T`'s inherent methods (methods implemented directly on `T`).
+1. Any of the methods provided by a [visible] trait implemented by `T`.
+ If `T` is a type parameter, methods provided by trait bounds on `T` are looked up first.
+ Then all remaining methods in scope are looked up.
+
+> Note: the lookup is done for each type in order, which can occasionally lead to surprising results.
+> The below code will print "In trait impl!", because `&self` methods are looked up first, the trait method is found before the struct's `&mut self` method is found.
+>
+> ```rust
+> struct Foo {}
+>
+> trait Bar {
+> fn bar(&self);
+> }
+>
+> impl Foo {
+> fn bar(&mut self) {
+> println!("In struct impl!")
+> }
+> }
+>
+> impl Bar for Foo {
+> fn bar(&self) {
+> println!("In trait impl!")
+> }
+> }
+>
+> fn main() {
+> let mut f = Foo{};
+> f.bar();
+> }
+> ```
+
+If this results in multiple possible candidates, then it is an error, and the receiver must be [converted][disambiguate call] to an appropriate receiver type to make the method call.
+
+This process does not take into account the mutability or lifetime of the receiver, or whether a method is `unsafe`.
+Once a method is looked up, if it can't be called for one (or more) of those reasons, the result is a compiler error.
+
+If a step is reached where there is more than one possible method, such as where generic methods or traits are considered the same, then it is a compiler error.
+These cases require a [disambiguating function call syntax] for method and function invocation.
+
+> **Edition Differences**: Before the 2021 edition, during the search for visible methods, if the candidate receiver type is an [array type], methods provided by the standard library [`IntoIterator`] trait are ignored.
+>
+> The edition used for this purpose is determined by the token representing the method name.
+>
+> This special case may be removed in the future.
+
+
+<div class="warning">
+
+***Warning:*** For [trait objects], if there is an inherent method of the same name as a trait method, it will give a compiler error when trying to call the method in a method call expression.
+Instead, you can call the method using [disambiguating function call syntax], in which case it calls the trait method, not the inherent method.
+There is no way to call the inherent method.
+Just don't define inherent methods on trait objects with the same name as a trait method and you'll be fine.
+
+</div>
+
+[_CallParams_]: call-expr.md
+[_Expression_]: ../expressions.md
+[_PathExprSegment_]: ../paths.md#paths-in-expressions
+[visible]: ../visibility-and-privacy.md
+[array type]: ../types/array.md
+[trait objects]: ../types/trait-object.md
+[disambiguate call]: call-expr.md#disambiguating-function-calls
+[disambiguating function call syntax]: call-expr.md#disambiguating-function-calls
+[dereference]: operator-expr.md#the-dereference-operator
+[methods]: ../items/associated-items.md#methods
+[unsized coercion]: ../type-coercions.md#unsized-coercions
+[`IntoIterator`]: ../../std/iter/trait.IntoIterator.html
diff --git a/src/doc/reference/src/expressions/operator-expr.md b/src/doc/reference/src/expressions/operator-expr.md
new file mode 100644
index 000000000..d8658d647
--- /dev/null
+++ b/src/doc/reference/src/expressions/operator-expr.md
@@ -0,0 +1,670 @@
+# Operator expressions
+
+> **<sup>Syntax</sup>**\
+> _OperatorExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_BorrowExpression_]\
+> &nbsp;&nbsp; | [_DereferenceExpression_]\
+> &nbsp;&nbsp; | [_ErrorPropagationExpression_]\
+> &nbsp;&nbsp; | [_NegationExpression_]\
+> &nbsp;&nbsp; | [_ArithmeticOrLogicalExpression_]\
+> &nbsp;&nbsp; | [_ComparisonExpression_]\
+> &nbsp;&nbsp; | [_LazyBooleanExpression_]\
+> &nbsp;&nbsp; | [_TypeCastExpression_]\
+> &nbsp;&nbsp; | [_AssignmentExpression_]\
+> &nbsp;&nbsp; | [_CompoundAssignmentExpression_]
+
+Operators are defined for built in types by the Rust language.
+Many of the following operators can also be overloaded using traits in `std::ops` or `std::cmp`.
+
+## Overflow
+
+Integer operators will panic when they overflow when compiled in debug mode.
+The `-C debug-assertions` and `-C overflow-checks` compiler flags can be used to control this more directly.
+The following things are considered to be overflow:
+
+* When `+`, `*` or binary `-` create a value greater than the maximum value, or less than the minimum value that can be stored.
+* Applying unary `-` to the most negative value of any signed integer type, unless the operand is a [literal expression] (or a literal expression standing alone inside one or more [grouped expressions][grouped expression]).
+* Using `/` or `%`, where the left-hand argument is the smallest integer of a signed integer type and the right-hand argument is `-1`.
+ These checks occur even when `-C overflow-checks` is disabled, for legacy reasons.
+* Using `<<` or `>>` where the right-hand argument is greater than or equal to the number of bits in the type of the left-hand argument, or is negative.
+
+> **Note**: The exception for literal expressions behind unary `-` means that forms such as `-128_i8` or `let j: i8 = -(128)` never cause a panic and have the expected value of -128.
+>
+> In these cases, the literal expression already has the most negative value for its type (for example, `128_i8` has the value -128) because integer literals are truncated to their type per the description in [Integer literal expressions][literal expression].
+>
+> Negation of these most negative values leaves the value unchanged due to two's complement overflow conventions.
+>
+> In `rustc`, these most negative expressions are also ignored by the `overflowing_literals` lint check.
+
+## Borrow operators
+
+> **<sup>Syntax</sup>**\
+> _BorrowExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; (`&`|`&&`) [_Expression_]\
+> &nbsp;&nbsp; | (`&`|`&&`) `mut` [_Expression_]
+
+The `&` (shared borrow) and `&mut` (mutable borrow) operators are unary prefix operators.
+When applied to a [place expression], this expressions produces a reference (pointer) to the location that the value refers to.
+The memory location is also placed into a borrowed state for the duration of the reference.
+For a shared borrow (`&`), this implies that the place may not be mutated, but it may be read or shared again.
+For a mutable borrow (`&mut`), the place may not be accessed in any way until the borrow expires.
+`&mut` evaluates its operand in a mutable place expression context.
+If the `&` or `&mut` operators are applied to a [value expression], then a [temporary value] is created.
+
+These operators cannot be overloaded.
+
+```rust
+{
+ // a temporary with value 7 is created that lasts for this scope.
+ let shared_reference = &7;
+}
+let mut array = [-2, 3, 9];
+{
+ // Mutably borrows `array` for this scope.
+ // `array` may only be used through `mutable_reference`.
+ let mutable_reference = &mut array;
+}
+```
+
+Even though `&&` is a single token ([the lazy 'and' operator](#lazy-boolean-operators)), when used in the context of borrow expressions it works as two borrows:
+
+```rust
+// same meanings:
+let a = && 10;
+let a = & & 10;
+
+// same meanings:
+let a = &&&& mut 10;
+let a = && && mut 10;
+let a = & & & & mut 10;
+```
+
+### Raw address-of operators
+
+Related to the borrow operators are the *raw address-of operators*, which do not have first-class syntax, but are exposed via the macros [`ptr::addr_of!(expr)`][addr_of] and [`ptr::addr_of_mut!(expr)`][addr_of_mut].
+The expression `expr` is evaluated in place expression context.
+`ptr::addr_of!(expr)` then creates a const raw pointer of type `*const T` to the given place, and `ptr::addr_of_mut!(expr)` creates a mutable raw pointer of type `*mut T`.
+
+The raw address-of operators must be used instead of a borrow operator whenever the place expression could evaluate to a place that is not properly aligned or does not store a valid value as determined by its type, or whenever creating a reference would introduce incorrect aliasing assumptions.
+In those situations, using a borrow operator would cause [undefined behavior] by creating an invalid reference, but a raw pointer may still be constructed using an address-of operator.
+
+The following is an example of creating a raw pointer to an unaligned place through a `packed` struct:
+
+```rust
+use std::ptr;
+
+#[repr(packed)]
+struct Packed {
+ f1: u8,
+ f2: u16,
+}
+
+let packed = Packed { f1: 1, f2: 2 };
+// `&packed.f2` would create an unaligned reference, and thus be Undefined Behavior!
+let raw_f2 = ptr::addr_of!(packed.f2);
+assert_eq!(unsafe { raw_f2.read_unaligned() }, 2);
+```
+
+The following is an example of creating a raw pointer to a place that does not contain a valid value:
+
+```rust
+use std::{ptr, mem::MaybeUninit};
+
+struct Demo {
+ field: bool,
+}
+
+let mut uninit = MaybeUninit::<Demo>::uninit();
+// `&uninit.as_mut().field` would create a reference to an uninitialized `bool`,
+// and thus be Undefined Behavior!
+let f1_ptr = unsafe { ptr::addr_of_mut!((*uninit.as_mut_ptr()).field) };
+unsafe { f1_ptr.write(true); }
+let init = unsafe { uninit.assume_init() };
+```
+
+
+## The dereference operator
+
+> **<sup>Syntax</sup>**\
+> _DereferenceExpression_ :\
+> &nbsp;&nbsp; `*` [_Expression_]
+
+The `*` (dereference) operator is also a unary prefix operator.
+When applied to a [pointer](../types/pointer.md) it denotes the pointed-to location.
+If the expression is of type `&mut T` or `*mut T`, and is either a local variable, a (nested) field of a local variable or is a mutable [place expression], then the resulting memory location can be assigned to.
+Dereferencing a raw pointer requires `unsafe`.
+
+On non-pointer types `*x` is equivalent to `*std::ops::Deref::deref(&x)` in an [immutable place expression context](../expressions.md#mutability) and `*std::ops::DerefMut::deref_mut(&mut x)` in a mutable place expression context.
+
+```rust
+let x = &7;
+assert_eq!(*x, 7);
+let y = &mut 9;
+*y = 11;
+assert_eq!(*y, 11);
+```
+
+## The question mark operator
+
+> **<sup>Syntax</sup>**\
+> _ErrorPropagationExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `?`
+
+The question mark operator (`?`) unwraps valid values or returns erroneous values, propagating them to the calling function.
+It is a unary postfix operator that can only be applied to the types `Result<T, E>` and `Option<T>`.
+
+When applied to values of the `Result<T, E>` type, it propagates errors.
+If the value is `Err(e)`, then it will return `Err(From::from(e))` from the enclosing function or closure.
+If applied to `Ok(x)`, then it will unwrap the value to evaluate to `x`.
+
+```rust
+# use std::num::ParseIntError;
+fn try_to_parse() -> Result<i32, ParseIntError> {
+ let x: i32 = "123".parse()?; // x = 123
+ let y: i32 = "24a".parse()?; // returns an Err() immediately
+ Ok(x + y) // Doesn't run.
+}
+
+let res = try_to_parse();
+println!("{:?}", res);
+# assert!(res.is_err())
+```
+
+When applied to values of the `Option<T>` type, it propagates `None`s.
+If the value is `None`, then it will return `None`.
+If applied to `Some(x)`, then it will unwrap the value to evaluate to `x`.
+
+```rust
+fn try_option_some() -> Option<u8> {
+ let val = Some(1)?;
+ Some(val)
+}
+assert_eq!(try_option_some(), Some(1));
+
+fn try_option_none() -> Option<u8> {
+ let val = None?;
+ Some(val)
+}
+assert_eq!(try_option_none(), None);
+```
+
+`?` cannot be overloaded.
+
+## Negation operators
+
+> **<sup>Syntax</sup>**\
+> _NegationExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `-` [_Expression_]\
+> &nbsp;&nbsp; | `!` [_Expression_]
+
+These are the last two unary operators.
+This table summarizes the behavior of them on primitive types and which traits are used to overload these operators for other types.
+Remember that signed integers are always represented using two's complement.
+The operands of all of these operators are evaluated in [value expression context][value expression] so are moved or copied.
+
+| Symbol | Integer | `bool` | Floating Point | Overloading Trait |
+|--------|-------------|-------------- |----------------|--------------------|
+| `-` | Negation* | | Negation | `std::ops::Neg` |
+| `!` | Bitwise NOT | [Logical NOT] | | `std::ops::Not` |
+
+\* Only for signed integer types.
+
+Here are some example of these operators
+
+```rust
+let x = 6;
+assert_eq!(-x, -6);
+assert_eq!(!x, -7);
+assert_eq!(true, !false);
+```
+
+## Arithmetic and Logical Binary Operators
+
+> **<sup>Syntax</sup>**\
+> _ArithmeticOrLogicalExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Expression_] `+` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `-` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `*` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `/` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `%` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `&` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `|` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `^` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `<<` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `>>` [_Expression_]
+
+Binary operators expressions are all written with infix notation.
+This table summarizes the behavior of arithmetic and logical binary operators on primitive types and which traits are used to overload these operators for other types.
+Remember that signed integers are always represented using two's complement.
+The operands of all of these operators are evaluated in [value expression context][value expression] so are moved or copied.
+
+| Symbol | Integer | `bool` | Floating Point | Overloading Trait | Overloading Compound Assignment Trait |
+|--------|-------------------------|---------------|----------------|--------------------| ------------------------------------- |
+| `+` | Addition | | Addition | `std::ops::Add` | `std::ops::AddAssign` |
+| `-` | Subtraction | | Subtraction | `std::ops::Sub` | `std::ops::SubAssign` |
+| `*` | Multiplication | | Multiplication | `std::ops::Mul` | `std::ops::MulAssign` |
+| `/` | Division* | | Division | `std::ops::Div` | `std::ops::DivAssign` |
+| `%` | Remainder** | | Remainder | `std::ops::Rem` | `std::ops::RemAssign` |
+| `&` | Bitwise AND | [Logical AND] | | `std::ops::BitAnd` | `std::ops::BitAndAssign` |
+| <code>&#124;</code> | Bitwise OR | [Logical OR] | | `std::ops::BitOr` | `std::ops::BitOrAssign` |
+| `^` | Bitwise XOR | [Logical XOR] | | `std::ops::BitXor` | `std::ops::BitXorAssign` |
+| `<<` | Left Shift | | | `std::ops::Shl` | `std::ops::ShlAssign` |
+| `>>` | Right Shift*** | | | `std::ops::Shr` | `std::ops::ShrAssign` |
+
+\* Integer division rounds towards zero.
+
+\*\* Rust uses a remainder defined with [truncating division](https://en.wikipedia.org/wiki/Modulo_operation#Variants_of_the_definition). Given `remainder = dividend % divisor`, the remainder will have the same sign as the dividend.
+
+\*\*\* Arithmetic right shift on signed integer types, logical right shift on
+unsigned integer types.
+
+Here are examples of these operators being used.
+
+```rust
+assert_eq!(3 + 6, 9);
+assert_eq!(5.5 - 1.25, 4.25);
+assert_eq!(-5 * 14, -70);
+assert_eq!(14 / 3, 4);
+assert_eq!(100 % 7, 2);
+assert_eq!(0b1010 & 0b1100, 0b1000);
+assert_eq!(0b1010 | 0b1100, 0b1110);
+assert_eq!(0b1010 ^ 0b1100, 0b110);
+assert_eq!(13 << 3, 104);
+assert_eq!(-10 >> 2, -3);
+```
+
+## Comparison Operators
+
+> **<sup>Syntax</sup>**\
+> _ComparisonExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Expression_] `==` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `!=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `>` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `<` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `>=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `<=` [_Expression_]
+
+Comparison operators are also defined both for primitive types and many types in the standard library.
+Parentheses are required when chaining comparison operators. For example, the expression `a == b == c` is invalid and may be written as `(a == b) == c`.
+
+Unlike arithmetic and logical operators, the traits for overloading these operators are used more generally to show how a type may be compared and will likely be assumed to define actual comparisons by functions that use these traits as bounds.
+Many functions and macros in the standard library can then use that assumption (although not to ensure safety).
+Unlike the arithmetic and logical operators above, these operators implicitly take shared borrows of their operands, evaluating them in [place expression context][place expression]:
+
+```rust
+# let a = 1;
+# let b = 1;
+a == b;
+// is equivalent to
+::std::cmp::PartialEq::eq(&a, &b);
+```
+
+This means that the operands don't have to be moved out of.
+
+| Symbol | Meaning | Overloading method |
+|--------|--------------------------|----------------------------|
+| `==` | Equal | `std::cmp::PartialEq::eq` |
+| `!=` | Not equal | `std::cmp::PartialEq::ne` |
+| `>` | Greater than | `std::cmp::PartialOrd::gt` |
+| `<` | Less than | `std::cmp::PartialOrd::lt` |
+| `>=` | Greater than or equal to | `std::cmp::PartialOrd::ge` |
+| `<=` | Less than or equal to | `std::cmp::PartialOrd::le` |
+
+Here are examples of the comparison operators being used.
+
+```rust
+assert!(123 == 123);
+assert!(23 != -12);
+assert!(12.5 > 12.2);
+assert!([1, 2, 3] < [1, 3, 4]);
+assert!('A' <= 'B');
+assert!("World" >= "Hello");
+```
+
+## Lazy boolean operators
+
+> **<sup>Syntax</sup>**\
+> _LazyBooleanExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Expression_] `||` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `&&` [_Expression_]
+
+The operators `||` and `&&` may be applied to operands of boolean type.
+The `||` operator denotes logical 'or', and the `&&` operator denotes logical 'and'.
+They differ from `|` and `&` in that the right-hand operand is only evaluated when the left-hand operand does not already determine the result of the expression.
+That is, `||` only evaluates its right-hand operand when the left-hand operand evaluates to `false`, and `&&` only when it evaluates to `true`.
+
+```rust
+let x = false || true; // true
+let y = false && panic!(); // false, doesn't evaluate `panic!()`
+```
+
+## Type cast expressions
+
+> **<sup>Syntax</sup>**\
+> _TypeCastExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `as` [_TypeNoBounds_]
+
+A type cast expression is denoted with the binary operator `as`.
+
+Executing an `as` expression casts the value on the left-hand side to the type on the right-hand side.
+
+An example of an `as` expression:
+
+```rust
+# fn sum(values: &[f64]) -> f64 { 0.0 }
+# fn len(values: &[f64]) -> i32 { 0 }
+fn average(values: &[f64]) -> f64 {
+ let sum: f64 = sum(values);
+ let size: f64 = len(values) as f64;
+ sum / size
+}
+```
+
+`as` can be used to explicitly perform [coercions](../type-coercions.md), as well as the following additional casts.
+Any cast that does not fit either a coercion rule or an entry in the table is a compiler error.
+Here `*T` means either `*const T` or `*mut T`. `m` stands for optional `mut` in
+reference types and `mut` or `const` in pointer types.
+
+| Type of `e` | `U` | Cast performed by `e as U` |
+|-----------------------|-----------------------|----------------------------------|
+| Integer or Float type | Integer or Float type | Numeric cast |
+| C-like enum | Integer type | Enum cast |
+| `bool` or `char` | Integer type | Primitive to integer cast |
+| `u8` | `char` | `u8` to `char` cast |
+| `*T` | `*V` where `V: Sized` \* | Pointer to pointer cast |
+| `*T` where `T: Sized` | Integer type | Pointer to address cast |
+| Integer type | `*V` where `V: Sized` | Address to pointer cast |
+| `&m₁ T` | `*m₂ T` \*\* | Reference to pointer cast |
+| `&m₁ [T; n]` | `*m₂ T` \*\* | Array to pointer cast |
+| [Function item] | [Function pointer] | Function item to function pointer cast |
+| [Function item] | `*V` where `V: Sized` | Function item to pointer cast |
+| [Function item] | Integer | Function item to address cast |
+| [Function pointer] | `*V` where `V: Sized` | Function pointer to pointer cast |
+| [Function pointer] | Integer | Function pointer to address cast |
+| Closure \*\*\* | Function pointer | Closure to function pointer cast |
+
+\* or `T` and `V` are compatible unsized types, e.g., both slices, both the same trait object.
+
+\*\* only when `m₁` is `mut` or `m₂` is `const`. Casting `mut` reference to
+`const` pointer is allowed.
+
+\*\*\* only for closures that do not capture (close over) any local variables
+
+### Semantics
+
+#### Numeric cast
+
+* Casting between two integers of the same size (e.g. i32 -> u32) is a no-op
+ (Rust uses 2's complement for negative values of fixed integers)
+* Casting from a larger integer to a smaller integer (e.g. u32 -> u8) will
+ truncate
+* Casting from a smaller integer to a larger integer (e.g. u8 -> u32) will
+ * zero-extend if the source is unsigned
+ * sign-extend if the source is signed
+* Casting from a float to an integer will round the float towards zero
+ * `NaN` will return `0`
+ * Values larger than the maximum integer value, including `INFINITY`, will saturate to the maximum value of the integer type.
+ * Values smaller than the minimum integer value, including `NEG_INFINITY`, will saturate to the minimum value of the integer type.
+* Casting from an integer to float will produce the closest possible float \*
+ * if necessary, rounding is according to `roundTiesToEven` mode \*\*\*
+ * on overflow, infinity (of the same sign as the input) is produced
+ * note: with the current set of numeric types, overflow can only happen
+ on `u128 as f32` for values greater or equal to `f32::MAX + (0.5 ULP)`
+* Casting from an f32 to an f64 is perfect and lossless
+* Casting from an f64 to an f32 will produce the closest possible f32 \*\*
+ * if necessary, rounding is according to `roundTiesToEven` mode \*\*\*
+ * on overflow, infinity (of the same sign as the input) is produced
+
+\* if integer-to-float casts with this rounding mode and overflow behavior are
+not supported natively by the hardware, these casts will likely be slower than
+expected.
+
+\*\* if f64-to-f32 casts with this rounding mode and overflow behavior are not
+supported natively by the hardware, these casts will likely be slower than
+expected.
+
+\*\*\* as defined in IEEE 754-2008 &sect;4.3.1: pick the nearest floating point
+number, preferring the one with an even least significant digit if exactly
+halfway between two floating point numbers.
+
+#### Enum cast
+
+Casts an enum to its discriminant, then uses a numeric cast if needed.
+
+#### Primitive to integer cast
+
+* `false` casts to `0`, `true` casts to `1`
+* `char` casts to the value of the code point, then uses a numeric cast if needed.
+
+#### `u8` to `char` cast
+
+Casts to the `char` with the corresponding code point.
+
+#### Pointer to address cast
+
+Casting from a raw pointer to an integer produces the machine address of the referenced memory.
+If the integer type is smaller than the pointer type, the address may be truncated; using `usize` avoids this.
+
+#### Address to pointer cast
+
+Casting from an integer to a raw pointer interprets the integer as a memory address and produces a pointer referencing that memory.
+
+<div class="warning">
+
+Warning:
+This interacts with the Rust memory model, which is still under development.
+A pointer obtained from this cast may suffer additional restrictions even if it is bitwise equal to a valid pointer.
+Dereferencing such a pointer may be [undefined behavior] if aliasing rules are not followed.
+
+</div>
+
+A trivial example of sound address arithmetic:
+
+```rust
+let mut values: [i32; 2] = [1, 2];
+let p1: *mut i32 = values.as_mut_ptr();
+let first_address = p1 as usize;
+let second_address = first_address + 4; // 4 == size_of::<i32>()
+let p2 = second_address as *mut i32;
+unsafe {
+ *p2 += 1;
+}
+assert_eq!(values[1], 3);
+```
+
+## Assignment expressions
+
+> **<sup>Syntax</sup>**\
+> _AssignmentExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `=` [_Expression_]
+
+An *assignment expression* moves a value into a specified place.
+
+An assignment expression consists of a [mutable] [assignee expression], the *assignee operand*, followed by an equals sign (`=`) and a [value expression], the *assigned value operand*.
+In its most basic form, an assignee expression is a [place expression], and we discuss this case first.
+The more general case of destructuring assignment is discussed below, but this case always decomposes into sequential assignments to place expressions, which may be considered the more fundamental case.
+
+### Basic assignments
+
+Evaluating assignment expressions begins by evaluating its operands.
+The assigned value operand is evaluated first, followed by the assignee expression.
+For destructuring assignment, subexpressions of the assignee expression are evaluated left-to-right.
+
+> **Note**: This is different than other expressions in that the right operand is evaluated before the left one.
+
+It then has the effect of first [dropping] the value at the assigned place, unless the place is an uninitialized local variable or an uninitialized field of a local variable.
+Next it either [copies or moves] the assigned value to the assigned place.
+
+An assignment expression always produces [the unit value][unit].
+
+Example:
+
+```rust
+let mut x = 0;
+let y = 0;
+x = y;
+```
+
+### Destructuring assignments
+
+Destructuring assignment is a counterpart to destructuring pattern matches for variable declaration, permitting assignment to complex values, such as tuples or structs.
+For instance, we may swap two mutable variables:
+
+```rust
+let (mut a, mut b) = (0, 1);
+// Swap `a` and `b` using destructuring assignment.
+(b, a) = (a, b);
+```
+
+In contrast to destructuring declarations using `let`, patterns may not appear on the left-hand side of an assignment due to syntactic ambiguities.
+Instead, a group of expressions that correspond to patterns are designated to be [assignee expressions][assignee expression], and permitted on the left-hand side of an assignment.
+Assignee expressions are then desugared to pattern matches followed by sequential assignment.
+The desugared patterns must be irrefutable: in particular, this means that only slice patterns whose length is known at compile-time, and the trivial slice `[..]`, are permitted for destructuring assignment.
+
+The desugaring method is straightforward, and is illustrated best by example.
+
+```rust
+# struct Struct { x: u32, y: u32 }
+# let (mut a, mut b) = (0, 0);
+(a, b) = (3, 4);
+
+[a, b] = [3, 4];
+
+Struct { x: a, y: b } = Struct { x: 3, y: 4};
+
+// desugars to:
+
+{
+ let (_a, _b) = (3, 4);
+ a = _a;
+ b = _b;
+}
+
+{
+ let [_a, _b] = [3, 4];
+ a = _a;
+ b = _b;
+}
+
+{
+ let Struct { x: _a, y: _b } = Struct { x: 3, y: 4};
+ a = _a;
+ b = _b;
+}
+```
+
+Identifiers are not forbidden from being used multiple times in a single assignee expression.
+
+[Underscore expressions][_UnderscoreExpression_] and empty [range expressions][_RangeExpression_] may be used to ignore certain values, without binding them.
+
+Note that default binding modes do not apply for the desugared expression.
+
+## Compound assignment expressions
+
+> **<sup>Syntax</sup>**\
+> _CompoundAssignmentExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Expression_] `+=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `-=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `*=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `/=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `%=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `&=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `|=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `^=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `<<=` [_Expression_]\
+> &nbsp;&nbsp; | [_Expression_] `>>=` [_Expression_]
+
+*Compound assignment expressions* combine arithmetic and logical binary operators with assignment expressions.
+
+For example:
+
+```rust
+let mut x = 5;
+x += 1;
+assert!(x == 6);
+```
+
+The syntax of compound assignment is a [mutable] [place expression], the *assigned operand*, then one of the operators followed by an `=` as a single token (no whitespace), and then a [value expression], the *modifying operand*.
+
+Unlike other place operands, the assigned place operand must be a place expression.
+Attempting to use a value expression is a compiler error rather than promoting it to a temporary.
+
+Evaluation of compound assignment expressions depends on the types of the operators.
+
+If both types are primitives, then the modifying operand will be evaluated first followed by the assigned operand.
+It will then set the value of the assigned operand's place to the value of performing the operation of the operator with the values of the assigned operand and modifying operand.
+
+> **Note**: This is different than other expressions in that the right operand is evaluated before the left one.
+
+Otherwise, this expression is syntactic sugar for calling the function of the overloading compound assigment trait of the operator (see the table earlier in this chapter).
+A mutable borrow of the assigned operand is automatically taken.
+
+For example, the following expression statements in `example` are equivalent:
+
+```rust
+# struct Addable;
+# use std::ops::AddAssign;
+
+impl AddAssign<Addable> for Addable {
+ /* */
+# fn add_assign(&mut self, other: Addable) {}
+}
+
+fn example() {
+# let (mut a1, a2) = (Addable, Addable);
+ a1 += a2;
+
+# let (mut a1, a2) = (Addable, Addable);
+ AddAssign::add_assign(&mut a1, a2);
+}
+```
+
+Like assignment expressions, compound assignment expressions always produce [the unit value][unit].
+
+<div class="warning">
+
+Warning: The evaluation order of operands swaps depending on the types of the operands:
+with primitive types the right-hand side will get evaluated first, while with non-primitive types the left-hand side will get evaluated first.
+Try not to write code that depends on the evaluation order of operands in compound assignment expressions.
+See [this test] for an example of using this dependency.
+
+</div>
+
+[copies or moves]: ../expressions.md#moved-and-copied-types
+[dropping]: ../destructors.md
+[grouped expression]: grouped-expr.md
+[literal expression]: literal-expr.md#integer-literal-expressions
+[logical and]: ../types/boolean.md#logical-and
+[logical not]: ../types/boolean.md#logical-not
+[logical or]: ../types/boolean.md#logical-or
+[logical xor]: ../types/boolean.md#logical-xor
+[mutable]: ../expressions.md#mutability
+[place expression]: ../expressions.md#place-expressions-and-value-expressions
+[assignee expression]: ../expressions.md#place-expressions-and-value-expressions
+[undefined behavior]: ../behavior-considered-undefined.md
+[unit]: ../types/tuple.md
+[value expression]: ../expressions.md#place-expressions-and-value-expressions
+[temporary value]: ../expressions.md#temporaries
+[this test]: https://github.com/rust-lang/rust/blob/1.58.0/src/test/ui/expr/compound-assignment/eval-order.rs
+[float-float]: https://github.com/rust-lang/rust/issues/15536
+[Function pointer]: ../types/function-pointer.md
+[Function item]: ../types/function-item.md
+[undefined behavior]: ../behavior-considered-undefined.md
+[addr_of]: ../../std/ptr/macro.addr_of.html
+[addr_of_mut]: ../../std/ptr/macro.addr_of_mut.html
+
+[_BorrowExpression_]: #borrow-operators
+[_DereferenceExpression_]: #the-dereference-operator
+[_ErrorPropagationExpression_]: #the-question-mark-operator
+[_NegationExpression_]: #negation-operators
+[_ArithmeticOrLogicalExpression_]: #arithmetic-and-logical-binary-operators
+[_ComparisonExpression_]: #comparison-operators
+[_LazyBooleanExpression_]: #lazy-boolean-operators
+[_TypeCastExpression_]: #type-cast-expressions
+[_AssignmentExpression_]: #assignment-expressions
+[_CompoundAssignmentExpression_]: #compound-assignment-expressions
+
+[_Expression_]: ../expressions.md
+[_TypeNoBounds_]: ../types.md#type-expressions
+[_RangeExpression_]: ./range-expr.md
+[_UnderscoreExpression_]: ./underscore-expr.md
diff --git a/src/doc/reference/src/expressions/path-expr.md b/src/doc/reference/src/expressions/path-expr.md
new file mode 100644
index 000000000..0909c5ddb
--- /dev/null
+++ b/src/doc/reference/src/expressions/path-expr.md
@@ -0,0 +1,32 @@
+# Path expressions
+
+> **<sup>Syntax</sup>**\
+> _PathExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_PathInExpression_]\
+> &nbsp;&nbsp; | [_QualifiedPathInExpression_]
+
+A [path] used as an expression context denotes either a local variable or an item.
+Path expressions that resolve to local or static variables are [place expressions], other paths are [value expressions].
+Using a [`static mut`] variable requires an [`unsafe` block].
+
+```rust
+# mod globals {
+# pub static STATIC_VAR: i32 = 5;
+# pub static mut STATIC_MUT_VAR: i32 = 7;
+# }
+# let local_var = 3;
+local_var;
+globals::STATIC_VAR;
+unsafe { globals::STATIC_MUT_VAR };
+let some_constructor = Some::<i32>;
+let push_integer = Vec::<i32>::push;
+let slice_reverse = <[i32]>::reverse;
+```
+
+[_PathInExpression_]: ../paths.md#paths-in-expressions
+[_QualifiedPathInExpression_]: ../paths.md#qualified-paths
+[place expressions]: ../expressions.md#place-expressions-and-value-expressions
+[value expressions]: ../expressions.md#place-expressions-and-value-expressions
+[path]: ../paths.md
+[`static mut`]: ../items/static-items.md#mutable-statics
+[`unsafe` block]: block-expr.md#unsafe-blocks
diff --git a/src/doc/reference/src/expressions/range-expr.md b/src/doc/reference/src/expressions/range-expr.md
new file mode 100644
index 000000000..37409a4cf
--- /dev/null
+++ b/src/doc/reference/src/expressions/range-expr.md
@@ -0,0 +1,76 @@
+# Range expressions
+
+> **<sup>Syntax</sup>**\
+> _RangeExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _RangeExpr_\
+> &nbsp;&nbsp; | _RangeFromExpr_\
+> &nbsp;&nbsp; | _RangeToExpr_\
+> &nbsp;&nbsp; | _RangeFullExpr_\
+> &nbsp;&nbsp; | _RangeInclusiveExpr_\
+> &nbsp;&nbsp; | _RangeToInclusiveExpr_
+>
+> _RangeExpr_ :\
+> &nbsp;&nbsp; [_Expression_] `..` [_Expression_]
+>
+> _RangeFromExpr_ :\
+> &nbsp;&nbsp; [_Expression_] `..`
+>
+> _RangeToExpr_ :\
+> &nbsp;&nbsp; `..` [_Expression_]
+>
+> _RangeFullExpr_ :\
+> &nbsp;&nbsp; `..`
+>
+> _RangeInclusiveExpr_ :\
+> &nbsp;&nbsp; [_Expression_] `..=` [_Expression_]
+>
+> _RangeToInclusiveExpr_ :\
+> &nbsp;&nbsp; `..=` [_Expression_]
+
+The `..` and `..=` operators will construct an object of one of the `std::ops::Range` (or `core::ops::Range`) variants, according to the following table:
+
+| Production | Syntax | Type | Range |
+|------------------------|---------------|------------------------------|-----------------------|
+| _RangeExpr_ | start`..`end | [std::ops::Range] | start &le; x &lt; end |
+| _RangeFromExpr_ | start`..` | [std::ops::RangeFrom] | start &le; x |
+| _RangeToExpr_ | `..`end | [std::ops::RangeTo] | x &lt; end |
+| _RangeFullExpr_ | `..` | [std::ops::RangeFull] | - |
+| _RangeInclusiveExpr_ | start`..=`end | [std::ops::RangeInclusive] | start &le; x &le; end |
+| _RangeToInclusiveExpr_ | `..=`end | [std::ops::RangeToInclusive] | x &le; end |
+
+Examples:
+
+```rust
+1..2; // std::ops::Range
+3..; // std::ops::RangeFrom
+..4; // std::ops::RangeTo
+..; // std::ops::RangeFull
+5..=6; // std::ops::RangeInclusive
+..=7; // std::ops::RangeToInclusive
+```
+
+The following expressions are equivalent.
+
+```rust
+let x = std::ops::Range {start: 0, end: 10};
+let y = 0..10;
+
+assert_eq!(x, y);
+```
+
+Ranges can be used in `for` loops:
+
+```rust
+for i in 1..11 {
+ println!("{}", i);
+}
+```
+
+[_Expression_]: ../expressions.md
+
+[std::ops::Range]: https://doc.rust-lang.org/std/ops/struct.Range.html
+[std::ops::RangeFrom]: https://doc.rust-lang.org/std/ops/struct.RangeFrom.html
+[std::ops::RangeTo]: https://doc.rust-lang.org/std/ops/struct.RangeTo.html
+[std::ops::RangeFull]: https://doc.rust-lang.org/std/ops/struct.RangeFull.html
+[std::ops::RangeInclusive]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html
+[std::ops::RangeToInclusive]: https://doc.rust-lang.org/std/ops/struct.RangeToInclusive.html
diff --git a/src/doc/reference/src/expressions/return-expr.md b/src/doc/reference/src/expressions/return-expr.md
new file mode 100644
index 000000000..b1b3787d8
--- /dev/null
+++ b/src/doc/reference/src/expressions/return-expr.md
@@ -0,0 +1,21 @@
+# `return` expressions
+
+> **<sup>Syntax</sup>**\
+> _ReturnExpression_ :\
+> &nbsp;&nbsp; `return` [_Expression_]<sup>?</sup>
+
+Return expressions are denoted with the keyword `return`.
+Evaluating a `return` expression moves its argument into the designated output location for the current function call, destroys the current function activation frame, and transfers control to the caller frame.
+
+An example of a `return` expression:
+
+```rust
+fn max(a: i32, b: i32) -> i32 {
+ if a > b {
+ return a;
+ }
+ return b;
+}
+```
+
+[_Expression_]: ../expressions.md
diff --git a/src/doc/reference/src/expressions/struct-expr.md b/src/doc/reference/src/expressions/struct-expr.md
new file mode 100644
index 000000000..8caeff200
--- /dev/null
+++ b/src/doc/reference/src/expressions/struct-expr.md
@@ -0,0 +1,142 @@
+# Struct expressions
+
+> **<sup>Syntax</sup>**\
+> _StructExpression_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _StructExprStruct_\
+> &nbsp;&nbsp; | _StructExprTuple_\
+> &nbsp;&nbsp; | _StructExprUnit_
+>
+> _StructExprStruct_ :\
+> &nbsp;&nbsp; [_PathInExpression_] `{` (_StructExprFields_ | _StructBase_)<sup>?</sup> `}`
+>
+> _StructExprFields_ :\
+> &nbsp;&nbsp; _StructExprField_ (`,` _StructExprField_)<sup>\*</sup> (`,` _StructBase_ | `,`<sup>?</sup>)
+>
+> _StructExprField_ :\
+> &nbsp;&nbsp; [_OuterAttribute_] <sup>\*</sup>\
+> &nbsp;&nbsp; (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [IDENTIFIER]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | ([IDENTIFIER] | [TUPLE_INDEX]) `:` [_Expression_]\
+> &nbsp;&nbsp; )
+>
+> _StructBase_ :\
+> &nbsp;&nbsp; `..` [_Expression_]
+>
+> _StructExprTuple_ :\
+> &nbsp;&nbsp; [_PathInExpression_] `(`\
+> &nbsp;&nbsp; &nbsp;&nbsp; ( [_Expression_] (`,` [_Expression_])<sup>\*</sup> `,`<sup>?</sup> )<sup>?</sup>\
+> &nbsp;&nbsp; `)`
+>
+> _StructExprUnit_ : [_PathInExpression_]
+
+A *struct expression* creates a struct, enum, or union value.
+It consists of a path to a [struct], [enum variant], or [union] item followed by the values for the fields of the item.
+There are three forms of struct expressions: struct, tuple, and unit.
+
+The following are examples of struct expressions:
+
+```rust
+# struct Point { x: f64, y: f64 }
+# struct NothingInMe { }
+# struct TuplePoint(f64, f64);
+# mod game { pub struct User<'a> { pub name: &'a str, pub age: u32, pub score: usize } }
+# struct Cookie; fn some_fn<T>(t: T) {}
+Point {x: 10.0, y: 20.0};
+NothingInMe {};
+TuplePoint(10.0, 20.0);
+TuplePoint { 0: 10.0, 1: 20.0 }; // Results in the same value as the above line
+let u = game::User {name: "Joe", age: 35, score: 100_000};
+some_fn::<Cookie>(Cookie);
+```
+
+## Field struct expression
+
+A struct expression with fields enclosed in curly braces allows you to specify the value for each individual field in any order.
+The field name is separated from its value with a colon.
+
+A value of a [union] type can only be created using this syntax, and it must specify exactly one field.
+
+## Functional update syntax
+
+A struct expression that constructs a value of a struct type can terminate with the syntax `..` followed by an expression to denote a functional update.
+The expression following `..` (the base) must have the same struct type as the new struct type being formed.
+
+The entire expression uses the given values for the fields that were specified and moves or copies the remaining fields from the base expression.
+As with all struct expressions, all of the fields of the struct must be [visible], even those not explicitly named.
+
+```rust
+# struct Point3d { x: i32, y: i32, z: i32 }
+let mut base = Point3d {x: 1, y: 2, z: 3};
+let y_ref = &mut base.y;
+Point3d {y: 0, z: 10, .. base}; // OK, only base.x is accessed
+drop(y_ref);
+```
+
+Struct expressions with curly braces can't be used directly in a [loop] or [if] expression's head, or in the [scrutinee] of an [if let] or [match] expression.
+However, struct expressions can be in used in these situations if they are within another expression, for example inside [parentheses].
+
+The field names can be decimal integer values to specify indices for constructing tuple structs.
+This can be used with base structs to fill out the remaining indices not specified:
+
+```rust
+struct Color(u8, u8, u8);
+let c1 = Color(0, 0, 0); // Typical way of creating a tuple struct.
+let c2 = Color{0: 255, 1: 127, 2: 0}; // Specifying fields by index.
+let c3 = Color{1: 0, ..c2}; // Fill out all other fields using a base struct.
+```
+
+### Struct field init shorthand
+
+When initializing a data structure (struct, enum, union) with named (but not numbered) fields, it is allowed to write `fieldname` as a shorthand for `fieldname: fieldname`.
+This allows a compact syntax with less duplication.
+For example:
+
+```rust
+# struct Point3d { x: i32, y: i32, z: i32 }
+# let x = 0;
+# let y_value = 0;
+# let z = 0;
+Point3d { x: x, y: y_value, z: z };
+Point3d { x, y: y_value, z };
+```
+
+## Tuple struct expression
+
+A struct expression with fields enclosed in parentheses constructs a tuple struct.
+Though it is listed here as a specific expression for completeness, it is equivalent to a [call expression] to the tuple struct's constructor. For example:
+
+```rust
+struct Position(i32, i32, i32);
+Position(0, 0, 0); // Typical way of creating a tuple struct.
+let c = Position; // `c` is a function that takes 3 arguments.
+let pos = c(8, 6, 7); // Creates a `Position` value.
+```
+
+## Unit struct expression
+
+A unit struct expression is just the path to a unit struct item.
+This refers to the unit struct's implicit constant of its value.
+The unit struct value can also be constructed with a fieldless struct expression. For example:
+
+```rust
+struct Gamma;
+let a = Gamma; // Gamma unit value.
+let b = Gamma{}; // Exact same value as `a`.
+```
+
+[_OuterAttribute_]: ../attributes.md
+[IDENTIFIER]: ../identifiers.md
+[TUPLE_INDEX]: ../tokens.md#tuple-index
+[_Expression_]: ../expressions.md
+[_PathInExpression_]: ../paths.md#paths-in-expressions
+[call expression]: call-expr.md
+[enum variant]: ../items/enumerations.md
+[if let]: if-expr.md#if-let-expressions
+[if]: if-expr.md#if-expressions
+[loop]: loop-expr.md
+[match]: match-expr.md
+[parentheses]: grouped-expr.md
+[struct]: ../items/structs.md
+[union]: ../items/unions.md
+[visible]: ../visibility-and-privacy.md
+[scrutinee]: ../glossary.md#scrutinee
diff --git a/src/doc/reference/src/expressions/tuple-expr.md b/src/doc/reference/src/expressions/tuple-expr.md
new file mode 100644
index 000000000..a6ac1c962
--- /dev/null
+++ b/src/doc/reference/src/expressions/tuple-expr.md
@@ -0,0 +1,80 @@
+# Tuple and tuple indexing expressions
+
+## Tuple expressions
+
+> **<sup>Syntax</sup>**\
+> _TupleExpression_ :\
+> &nbsp;&nbsp; `(` _TupleElements_<sup>?</sup> `)`
+>
+> _TupleElements_ :\
+> &nbsp;&nbsp; ( [_Expression_] `,` )<sup>+</sup> [_Expression_]<sup>?</sup>
+
+A *tuple expression* constructs [tuple values][tuple type].
+
+The syntax for tuple expressions is a parenthesized, comma separated list of expressions, called the *tuple initializer operands*.
+1-ary tuple expressions require a comma after their tuple initializer operand to be disambiguated with a [parenthetical expression].
+
+Tuple expressions are a [value expression] that evaluate into a newly constructed value of a tuple type.
+The number of tuple initializer operands is the arity of the constructed tuple.
+Tuple expressions without any tuple initializer operands produce the unit tuple.
+For other tuple expressions, the first written tuple initializer operand initializes the field `0` and subsequent operands initializes the next highest field.
+For example, in the tuple expression `('a', 'b', 'c')`, `'a'` initializes the value of the field `0`, `'b'` field `1`, and `'c'` field `2`.
+
+Examples of tuple expressions and their types:
+
+| Expression | Type |
+| -------------------- | ------------ |
+| `()` | `()` (unit) |
+| `(0.0, 4.5)` | `(f64, f64)` |
+| `("x".to_string(), )` | `(String, )` |
+| `("a", 4usize, true)`| `(&'static str, usize, bool)` |
+
+## Tuple indexing expressions
+
+> **<sup>Syntax</sup>**\
+> _TupleIndexingExpression_ :\
+> &nbsp;&nbsp; [_Expression_] `.` [TUPLE_INDEX]
+
+A *tuple indexing expression* accesses fields of [tuples][tuple type] and [tuple structs][tuple struct].
+
+The syntax for a tuple index expression is an expression, called the *tuple operand*, then a `.`, then finally a tuple index.
+The syntax for the *tuple index* is a [decimal literal] with no leading zeros, underscores, or suffix.
+For example `0` and `2` are valid tuple indices but not `01`, `0_`, nor `0i32`.
+
+The type of the tuple operand must be a [tuple type] or a [tuple struct].
+The tuple index must be a name of a field of the type of the tuple operand.
+
+Evaluation of tuple index expressions has no side effects beyond evaluation of its tuple operand.
+As a [place expression], it evaluates to the location of the field of the tuple operand with the same name as the tuple index.
+
+Examples of tuple indexing expressions:
+
+```rust
+// Indexing a tuple
+let pair = ("a string", 2);
+assert_eq!(pair.1, 2);
+
+// Indexing a tuple struct
+# struct Point(f32, f32);
+let point = Point(1.0, 0.0);
+assert_eq!(point.0, 1.0);
+assert_eq!(point.1, 0.0);
+```
+
+> **Note**: Unlike field access expressions, tuple index expressions can be the function operand of a [call expression] as it cannot be confused with a method call since method names cannot be numbers.
+
+> **Note**: Although arrays and slices also have elements, you must use an [array or slice indexing expression] or a [slice pattern] to access their elements.
+
+[_Expression_]: ../expressions.md
+[array or slice indexing expression]: array-expr.md#array-and-slice-indexing-expressions
+[call expression]: ./call-expr.md
+[decimal literal]: ../tokens.md#integer-literals
+[field access expressions]: ./field-expr.html#field-access-expressions
+[operands]: ../expressions.md
+[parenthetical expression]: grouped-expr.md
+[place expression]: ../expressions.md#place-expressions-and-value-expressions
+[slice pattern]: ../patterns.md#slice-patterns
+[tuple type]: ../types/tuple.md
+[tuple struct]: ../types/struct.md
+[TUPLE_INDEX]: ../tokens.md#tuple-index
+[value expression]: ../expressions.md#place-expressions-and-value-expressions
diff --git a/src/doc/reference/src/expressions/underscore-expr.md b/src/doc/reference/src/expressions/underscore-expr.md
new file mode 100644
index 000000000..069f227e9
--- /dev/null
+++ b/src/doc/reference/src/expressions/underscore-expr.md
@@ -0,0 +1,17 @@
+# `_` expressions
+
+> **<sup>Syntax</sup>**\
+> _UnderscoreExpression_ :\
+> &nbsp;&nbsp; `_`
+
+Underscore expressions, denoted with the symbol `_`, are used to signify a
+placeholder in a destructuring assignment. They may only appear in the left-hand
+side of an assignment.
+
+An example of an `_` expression:
+
+```rust
+let p = (1, 2);
+let mut a = 0;
+(_, a) = p;
+```
diff --git a/src/doc/reference/src/glossary.md b/src/doc/reference/src/glossary.md
new file mode 100644
index 000000000..b5074767c
--- /dev/null
+++ b/src/doc/reference/src/glossary.md
@@ -0,0 +1,331 @@
+# Glossary
+
+### Abstract syntax tree
+
+An ‘abstract syntax tree’, or ‘AST’, is an intermediate representation of
+the structure of the program when the compiler is compiling it.
+
+### Alignment
+
+The alignment of a value specifies what addresses values are preferred to
+start at. Always a power of two. References to a value must be aligned.
+[More][alignment].
+
+### Arity
+
+Arity refers to the number of arguments a function or operator takes.
+For some examples, `f(2, 3)` and `g(4, 6)` have arity 2, while `h(8, 2, 6)`
+has arity 3. The `!` operator has arity 1.
+
+### Array
+
+An array, sometimes also called a fixed-size array or an inline array, is a value
+describing a collection of elements, each selected by an index that can be computed
+at run time by the program. It occupies a contiguous region of memory.
+
+### Associated item
+
+An associated item is an item that is associated with another item. Associated
+items are defined in [implementations] and declared in [traits]. Only
+functions, constants, and type aliases can be associated. Contrast to a [free
+item].
+
+### Blanket implementation
+
+Any implementation where a type appears [uncovered](#uncovered-type). `impl<T> Foo
+for T`, `impl<T> Bar<T> for T`, `impl<T> Bar<Vec<T>> for T`, and `impl<T> Bar<T>
+for Vec<T>` are considered blanket impls. However, `impl<T> Bar<Vec<T>> for
+Vec<T>` is not a blanket impl, as all instances of `T` which appear in this `impl`
+are covered by `Vec`.
+
+### Bound
+
+Bounds are constraints on a type or trait. For example, if a bound
+is placed on the argument a function takes, types passed to that function
+must abide by that constraint.
+
+### Combinator
+
+Combinators are higher-order functions that apply only functions and
+earlier defined combinators to provide a result from its arguments.
+They can be used to manage control flow in a modular fashion.
+
+### Crate
+
+A crate is the unit of compilation and linking. There are different [types of
+crates], such as libraries or executables. Crates may link and refer to other
+library crates, called external crates. A crate has a self-contained tree of
+[modules], starting from an unnamed root module called the crate root. [Items]
+may be made visible to other crates by marking them as public in the crate
+root, including through [paths] of public modules.
+[More][crate].
+
+### Dispatch
+
+Dispatch is the mechanism to determine which specific version of code is actually
+run when it involves polymorphism. Two major forms of dispatch are static dispatch and
+dynamic dispatch. While Rust favors static dispatch, it also supports dynamic dispatch
+through a mechanism called ‘trait objects’.
+
+### Dynamically sized type
+
+A dynamically sized type (DST) is a type without a statically known size or alignment.
+
+### Entity
+
+An [*entity*] is a language construct that can be referred to in some way
+within the source program, usually via a [path][paths]. Entities include
+[types], [items], [generic parameters], [variable bindings], [loop labels],
+[lifetimes], [fields], [attributes], and [lints].
+
+### Expression
+
+An expression is a combination of values, constants, variables, operators
+and functions that evaluate to a single value, with or without side-effects.
+
+For example, `2 + (3 * 4)` is an expression that returns the value 14.
+
+### Free item
+
+An [item] that is not a member of an [implementation], such as a *free
+function* or a *free const*. Contrast to an [associated item].
+
+### Fundamental traits
+
+A fundamental trait is one where adding an impl of it for an existing type is a breaking change.
+The `Fn` traits and `Sized` are fundamental.
+
+### Fundamental type constructors
+
+A fundamental type constructor is a type where implementing a [blanket implementation](#blanket-implementation) over it
+is a breaking change. `&`, `&mut`, `Box`, and `Pin` are fundamental.
+
+Any time a type `T` is considered [local](#local-type), `&T`, `&mut T`, `Box<T>`, and `Pin<T>`
+are also considered local. Fundamental type constructors cannot [cover](#uncovered-type) other types.
+Any time the term "covered type" is used,
+the `T` in `&T`, `&mut T`, `Box<T>`, and `Pin<T>` is not considered covered.
+
+### Inhabited
+
+A type is inhabited if it has constructors and therefore can be instantiated. An inhabited type is
+not "empty" in the sense that there can be values of the type. Opposite of
+[Uninhabited](#uninhabited).
+
+### Inherent implementation
+
+An [implementation] that applies to a nominal type, not to a trait-type pair.
+[More][inherent implementation].
+
+### Inherent method
+
+A [method] defined in an [inherent implementation], not in a trait
+implementation.
+
+### Initialized
+
+A variable is initialized if it has been assigned a value and hasn't since been
+moved from. All other memory locations are assumed to be uninitialized. Only
+unsafe Rust can create a memory location without initializing it.
+
+### Local trait
+
+A `trait` which was defined in the current crate. A trait definition is local
+or not independent of applied type arguments. Given `trait Foo<T, U>`,
+`Foo` is always local, regardless of the types substituted for `T` and `U`.
+
+### Local type
+
+A `struct`, `enum`, or `union` which was defined in the current crate.
+This is not affected by applied type arguments. `struct Foo` is considered local, but
+`Vec<Foo>` is not. `LocalType<ForeignType>` is local. Type aliases do not
+affect locality.
+
+### Module
+
+A module is a container for zero or more [items]. Modules are organized in a
+tree, starting from an unnamed module at the root called the crate root or the
+root module. [Paths] may be used to refer to items from other modules, which
+may be restricted by [visibility rules].
+[More][modules]
+
+### Name
+
+A [*name*] is an [identifier] or [lifetime or loop label] that refers to an
+[entity](#entity). A *name binding* is when an entity declaration introduces
+an identifier or label associated with that entity. [Paths],
+identifiers, and labels are used to refer to an entity.
+
+### Name resolution
+
+[*Name resolution*] is the compile-time process of tying [paths],
+[identifiers], and [labels] to [entity](#entity) declarations.
+
+### Namespace
+
+A *namespace* is a logical grouping of declared [names](#name) based on the
+kind of [entity](#entity) the name refers to. Namespaces allow the occurrence
+of a name in one namespace to not conflict with the same name in another
+namespace.
+
+Within a namespace, names are organized in a hierarchy, where each level of
+the hierarchy has its own collection of named entities.
+
+### Nominal types
+
+Types that can be referred to by a path directly. Specifically [enums],
+[structs], [unions], and [trait objects].
+
+### Object safe traits
+
+[Traits] that can be used as [trait objects]. Only traits that follow specific
+[rules][object safety] are object safe.
+
+### Path
+
+A [*path*] is a sequence of one or more path segments used to refer to an
+[entity](#entity) in the current scope or other levels of a
+[namespace](#namespace) hierarchy.
+
+### Prelude
+
+Prelude, or The Rust Prelude, is a small collection of items - mostly traits - that are
+imported into every module of every crate. The traits in the prelude are pervasive.
+
+### Scope
+
+A [*scope*] is the region of source text where a named [entity](#entity) may
+be referenced with that name.
+
+### Scrutinee
+
+A scrutinee is the expression that is matched on in `match` expressions and
+similar pattern matching constructs. For example, in `match x { A => 1, B => 2 }`,
+the expression `x` is the scrutinee.
+
+### Size
+
+The size of a value has two definitions.
+
+The first is that it is how much memory must be allocated to store that value.
+
+The second is that it is the offset in bytes between successive elements in an
+array with that item type.
+
+It is a multiple of the alignment, including zero. The size can change
+depending on compiler version (as new optimizations are made) and target
+platform (similar to how `usize` varies per-platform).
+
+[More][alignment].
+
+### Slice
+
+A slice is dynamically-sized view into a contiguous sequence, written as `[T]`.
+
+It is often seen in its borrowed forms, either mutable or shared. The shared
+slice type is `&[T]`, while the mutable slice type is `&mut [T]`, where `T` represents
+the element type.
+
+### Statement
+
+A statement is the smallest standalone element of a programming language
+that commands a computer to perform an action.
+
+### String literal
+
+A string literal is a string stored directly in the final binary, and so will be
+valid for the `'static` duration.
+
+Its type is `'static` duration borrowed string slice, `&'static str`.
+
+### String slice
+
+A string slice is the most primitive string type in Rust, written as `str`. It is
+often seen in its borrowed forms, either mutable or shared. The shared
+string slice type is `&str`, while the mutable string slice type is `&mut str`.
+
+Strings slices are always valid UTF-8.
+
+### Trait
+
+A trait is a language item that is used for describing the functionalities a type must provide.
+It allows a type to make certain promises about its behavior.
+
+Generic functions and generic structs can use traits to constrain, or bound, the types they accept.
+
+### Turbofish
+
+Paths with generic parameters in expressions must prefix the opening brackets with a `::`.
+Combined with the angular brackets for generics, this looks like a fish `::<>`.
+As such, this syntax is colloquially referred to as turbofish syntax.
+
+Examples:
+
+```rust
+let ok_num = Ok::<_, ()>(5);
+let vec = [1, 2, 3].iter().map(|n| n * 2).collect::<Vec<_>>();
+```
+
+This `::` prefix is required to disambiguate generic paths with multiple comparisons in a comma-separate list.
+See [the bastion of the turbofish][turbofish test] for an example where not having the prefix would be ambiguous.
+
+### Uncovered type
+
+A type which does not appear as an argument to another type. For example,
+`T` is uncovered, but the `T` in `Vec<T>` is covered. This is only relevant for
+type arguments.
+
+### Undefined behavior
+
+Compile-time or run-time behavior that is not specified. This may result in,
+but is not limited to: process termination or corruption; improper, incorrect,
+or unintended computation; or platform-specific results.
+[More][undefined-behavior].
+
+### Uninhabited
+
+A type is uninhabited if it has no constructors and therefore can never be instantiated. An
+uninhabited type is "empty" in the sense that there are no values of the type. The canonical
+example of an uninhabited type is the [never type] `!`, or an enum with no variants
+`enum Never { }`. Opposite of [Inhabited](#inhabited).
+
+[alignment]: type-layout.md#size-and-alignment
+[associated item]: #associated-item
+[attributes]: attributes.md
+[*entity*]: names.md
+[crate]: crates-and-source-files.md
+[enums]: items/enumerations.md
+[fields]: expressions/field-expr.md
+[free item]: #free-item
+[generic parameters]: items/generics.md
+[identifier]: identifiers.md
+[identifiers]: identifiers.md
+[implementation]: items/implementations.md
+[implementations]: items/implementations.md
+[inherent implementation]: items/implementations.md#inherent-implementations
+[item]: items.md
+[items]: items.md
+[labels]: tokens.md#lifetimes-and-loop-labels
+[lifetime or loop label]: tokens.md#lifetimes-and-loop-labels
+[lifetimes]: tokens.md#lifetimes-and-loop-labels
+[lints]: attributes/diagnostics.md#lint-check-attributes
+[loop labels]: tokens.md#lifetimes-and-loop-labels
+[method]: items/associated-items.md#methods
+[modules]: items/modules.md
+[*Name resolution*]: names/name-resolution.md
+[*name*]: names.md
+[*namespace*]: names/namespaces.md
+[never type]: types/never.md
+[object safety]: items/traits.md#object-safety
+[*path*]: paths.md
+[Paths]: paths.md
+[*scope*]: names/scopes.md
+[structs]: items/structs.md
+[trait objects]: types/trait-object.md
+[traits]: items/traits.md
+[turbofish test]: https://github.com/rust-lang/rust/blob/1.58.0/src/test/ui/parser/bastion-of-the-turbofish.rs
+[types of crates]: linkage.md
+[types]: types.md
+[undefined-behavior]: behavior-considered-undefined.md
+[unions]: items/unions.md
+[variable bindings]: patterns.md
+[visibility rules]: visibility-and-privacy.md
diff --git a/src/doc/reference/src/identifiers.md b/src/doc/reference/src/identifiers.md
new file mode 100644
index 000000000..a4e972cd3
--- /dev/null
+++ b/src/doc/reference/src/identifiers.md
@@ -0,0 +1,72 @@
+# Identifiers
+
+> **<sup>Lexer:<sup>**\
+> IDENTIFIER_OR_KEYWORD :\
+> &nbsp;&nbsp; &nbsp;&nbsp; XID_Start XID_Continue<sup>\*</sup>\
+> &nbsp;&nbsp; | `_` XID_Continue<sup>+</sup>
+>
+> RAW_IDENTIFIER : `r#` IDENTIFIER_OR_KEYWORD <sub>*Except `crate`, `self`, `super`, `Self`*</sub>
+>
+> NON_KEYWORD_IDENTIFIER : IDENTIFIER_OR_KEYWORD <sub>*Except a [strict] or [reserved] keyword*</sub>
+>
+> IDENTIFIER :\
+> NON_KEYWORD_IDENTIFIER | RAW_IDENTIFIER
+
+<!-- When updating the version, update the UAX links, too. -->
+Identifiers follow the specification in [Unicode Standard Annex #31][UAX31] for Unicode version 13.0, with the additions described below. Some examples of identifiers:
+
+* `foo`
+* `_identifier`
+* `r#true`
+* `Москва`
+* `東京`
+
+The profile used from UAX #31 is:
+
+* Start := [`XID_Start`], plus the underscore character (U+005F)
+* Continue := [`XID_Continue`]
+* Medial := empty
+
+with the additional constraint that a single underscore character is not an identifier.
+
+> **Note**: Identifiers starting with an underscore are typically used to indicate an identifier that is intentionally unused, and will silence the unused warning in `rustc`.
+
+Identifiers may not be a [strict] or [reserved] keyword without the `r#` prefix described below in [raw identifiers](#raw-identifiers).
+
+Zero width non-joiner (ZWNJ U+200C) and zero width joiner (ZWJ U+200D) characters are not allowed in identifiers.
+
+Identifiers are restricted to the ASCII subset of [`XID_Start`] and [`XID_Continue`] in the following situations:
+
+* [`extern crate`] declarations
+* External crate names referenced in a [path]
+* [Module] names loaded from the filesystem without a [`path` attribute]
+* [`no_mangle`] attributed items
+* Item names in [external blocks]
+
+## Normalization
+
+Identifiers are normalized using Normalization Form C (NFC) as defined in [Unicode Standard Annex #15][UAX15]. Two identifiers are equal if their NFC forms are equal.
+
+[Procedural][proc-macro] and [declarative][mbe] macros receive normalized identifiers in their input.
+
+## Raw identifiers
+
+A raw identifier is like a normal identifier, but prefixed by `r#`. (Note that
+the `r#` prefix is not included as part of the actual identifier.)
+Unlike a normal identifier, a raw identifier may be any strict or reserved
+keyword except the ones listed above for `RAW_IDENTIFIER`.
+
+[`extern crate`]: items/extern-crates.md
+[`no_mangle`]: abi.md#the-no_mangle-attribute
+[`path` attribute]: items/modules.md#the-path-attribute
+[`XID_Continue`]: http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%3AXID_Continue%3A%5D&abb=on&g=&i=
+[`XID_Start`]: http://unicode.org/cldr/utility/list-unicodeset.jsp?a=%5B%3AXID_Start%3A%5D&abb=on&g=&i=
+[external blocks]: items/external-blocks.md
+[mbe]: macros-by-example.md
+[module]: items/modules.md
+[path]: paths.md
+[proc-macro]: procedural-macros.md
+[reserved]: keywords.md#reserved-keywords
+[strict]: keywords.md#strict-keywords
+[UAX15]: https://www.unicode.org/reports/tr15/tr15-50.html
+[UAX31]: https://www.unicode.org/reports/tr31/tr31-33.html
diff --git a/src/doc/reference/src/influences.md b/src/doc/reference/src/influences.md
new file mode 100644
index 000000000..3aa812abe
--- /dev/null
+++ b/src/doc/reference/src/influences.md
@@ -0,0 +1,22 @@
+# Influences
+
+Rust is not a particularly original language, with design elements coming from
+a wide range of sources. Some of these are listed below (including elements
+that have since been removed):
+
+* SML, OCaml: algebraic data types, pattern matching, type inference,
+ semicolon statement separation
+* C++: references, RAII, smart pointers, move semantics, monomorphization,
+ memory model
+* ML Kit, Cyclone: region based memory management
+* Haskell (GHC): typeclasses, type families
+* Newsqueak, Alef, Limbo: channels, concurrency
+* Erlang: message passing, thread failure, <strike>linked thread failure</strike>,
+ <strike>lightweight concurrency</strike>
+* Swift: optional bindings
+* Scheme: hygienic macros
+* C#: attributes
+* Ruby: closure syntax, <strike>block syntax</strike>
+* NIL, Hermes: <strike>typestate</strike>
+* [Unicode Annex #31](http://www.unicode.org/reports/tr31/): identifier and
+ pattern syntax
diff --git a/src/doc/reference/src/inline-assembly.md b/src/doc/reference/src/inline-assembly.md
new file mode 100644
index 000000000..6233475a3
--- /dev/null
+++ b/src/doc/reference/src/inline-assembly.md
@@ -0,0 +1,614 @@
+# Inline assembly
+
+Support for inline assembly is provided via the [`asm!`] and [`global_asm!`] macros.
+It can be used to embed handwritten assembly in the assembly output generated by the compiler.
+
+[`asm!`]: ../core/arch/macro.asm.html
+[`global_asm!`]: ../core/arch/macro.global_asm.html
+
+Support for inline assembly is stable on the following architectures:
+- x86 and x86-64
+- ARM
+- AArch64
+- RISC-V
+
+The compiler will emit an error if `asm!` is used on an unsupported target.
+
+## Example
+
+```rust
+use std::arch::asm;
+
+// Multiply x by 6 using shifts and adds
+let mut x: u64 = 4;
+unsafe {
+ asm!(
+ "mov {tmp}, {x}",
+ "shl {tmp}, 1",
+ "shl {x}, 2",
+ "add {x}, {tmp}",
+ x = inout(reg) x,
+ tmp = out(reg) _,
+ );
+}
+assert_eq!(x, 4 * 6);
+```
+
+## Syntax
+
+The following ABNF specifies the general syntax:
+
+```text
+format_string := STRING_LITERAL / RAW_STRING_LITERAL
+dir_spec := "in" / "out" / "lateout" / "inout" / "inlateout"
+reg_spec := <register class> / "\"" <explicit register> "\""
+operand_expr := expr / "_" / expr "=>" expr / expr "=>" "_"
+reg_operand := dir_spec "(" reg_spec ")" operand_expr
+operand := reg_operand
+clobber_abi := "clobber_abi(" <abi> *("," <abi>) [","] ")"
+option := "pure" / "nomem" / "readonly" / "preserves_flags" / "noreturn" / "nostack" / "att_syntax" / "raw"
+options := "options(" option *("," option) [","] ")"
+asm := "asm!(" format_string *("," format_string) *("," [ident "="] operand) *("," clobber_abi) *("," options) [","] ")"
+global_asm := "global_asm!(" format_string *("," format_string) *("," [ident "="] operand) *("," options) [","] ")"
+```
+
+
+## Scope
+
+Inline assembly can be used in one of two ways.
+
+With the `asm!` macro, the assembly code is emitted in a function scope and integrated into the compiler-generated assembly code of a function.
+This assembly code must obey [strict rules](#rules-for-inline-assembly) to avoid undefined behavior.
+Note that in some cases the compiler may choose to emit the assembly code as a separate function and generate a call to it.
+
+With the `global_asm!` macro, the assembly code is emitted in a global scope, outside a function.
+This can be used to hand-write entire functions using assembly code, and generally provides much more freedom to use arbitrary registers and assembler directives.
+
+## Template string arguments
+
+The assembler template uses the same syntax as [format strings][format-syntax] (i.e. placeholders are specified by curly braces).
+The corresponding arguments are accessed in order, by index, or by name.
+However, implicit named arguments (introduced by [RFC #2795][rfc-2795]) are not supported.
+
+An `asm!` invocation may have one or more template string arguments; an `asm!` with multiple template string arguments is treated as if all the strings were concatenated with a `\n` between them.
+The expected usage is for each template string argument to correspond to a line of assembly code.
+All template string arguments must appear before any other arguments.
+
+As with format strings, named arguments must appear after positional arguments.
+Explicit [register operands](#register-operands) must appear at the end of the operand list, after named arguments if any.
+
+Explicit register operands cannot be used by placeholders in the template string.
+All other named and positional operands must appear at least once in the template string, otherwise a compiler error is generated.
+
+The exact assembly code syntax is target-specific and opaque to the compiler except for the way operands are substituted into the template string to form the code passed to the assembler.
+
+Currently, all supported targets follow the assembly code syntax used by LLVM's internal assembler which usually corresponds to that of the GNU assembler (GAS).
+On x86, the `.intel_syntax noprefix` mode of GAS is used by default.
+On ARM, the `.syntax unified` mode is used.
+These targets impose an additional restriction on the assembly code: any assembler state (e.g. the current section which can be changed with `.section`) must be restored to its original value at the end of the asm string.
+Assembly code that does not conform to the GAS syntax will result in assembler-specific behavior.
+Further constraints on the directives used by inline assembly are indicated by [Directives Support](#directives-support).
+
+[format-syntax]: ../std/fmt/index.html#syntax
+[rfc-2795]: https://github.com/rust-lang/rfcs/pull/2795
+
+## Operand type
+
+Several types of operands are supported:
+
+* `in(<reg>) <expr>`
+ - `<reg>` can refer to a register class or an explicit register.
+ The allocated register name is substituted into the asm template string.
+ - The allocated register will contain the value of `<expr>` at the start of the asm code.
+ - The allocated register must contain the same value at the end of the asm code (except if a `lateout` is allocated to the same register).
+* `out(<reg>) <expr>`
+ - `<reg>` can refer to a register class or an explicit register.
+ The allocated register name is substituted into the asm template string.
+ - The allocated register will contain an undefined value at the start of the asm code.
+ - `<expr>` must be a (possibly uninitialized) place expression, to which the contents of the allocated register are written at the end of the asm code.
+ - An underscore (`_`) may be specified instead of an expression, which will cause the contents of the register to be discarded at the end of the asm code (effectively acting as a clobber).
+* `lateout(<reg>) <expr>`
+ - Identical to `out` except that the register allocator can reuse a register allocated to an `in`.
+ - You should only write to the register after all inputs are read, otherwise you may clobber an input.
+* `inout(<reg>) <expr>`
+ - `<reg>` can refer to a register class or an explicit register.
+ The allocated register name is substituted into the asm template string.
+ - The allocated register will contain the value of `<expr>` at the start of the asm code.
+ - `<expr>` must be a mutable initialized place expression, to which the contents of the allocated register are written at the end of the asm code.
+* `inout(<reg>) <in expr> => <out expr>`
+ - Same as `inout` except that the initial value of the register is taken from the value of `<in expr>`.
+ - `<out expr>` must be a (possibly uninitialized) place expression, to which the contents of the allocated register are written at the end of the asm code.
+ - An underscore (`_`) may be specified instead of an expression for `<out expr>`, which will cause the contents of the register to be discarded at the end of the asm code (effectively acting as a clobber).
+ - `<in expr>` and `<out expr>` may have different types.
+* `inlateout(<reg>) <expr>` / `inlateout(<reg>) <in expr> => <out expr>`
+ - Identical to `inout` except that the register allocator can reuse a register allocated to an `in` (this can happen if the compiler knows the `in` has the same initial value as the `inlateout`).
+ - You should only write to the register after all inputs are read, otherwise you may clobber an input.
+
+Operand expressions are evaluated from left to right, just like function call arguments.
+After the `asm!` has executed, outputs are written to in left to right order.
+This is significant if two outputs point to the same place: that place will contain the value of the rightmost output.
+
+Since `global_asm!` exists outside a function, it cannot use input/output operands.
+
+## Register operands
+
+Input and output operands can be specified either as an explicit register or as a register class from which the register allocator can select a register.
+Explicit registers are specified as string literals (e.g. `"eax"`) while register classes are specified as identifiers (e.g. `reg`).
+
+Note that explicit registers treat register aliases (e.g. `r14` vs `lr` on ARM) and smaller views of a register (e.g. `eax` vs `rax`) as equivalent to the base register.
+It is a compile-time error to use the same explicit register for two input operands or two output operands.
+Additionally, it is also a compile-time error to use overlapping registers (e.g. ARM VFP) in input operands or in output operands.
+
+Only the following types are allowed as operands for inline assembly:
+- Integers (signed and unsigned)
+- Floating-point numbers
+- Pointers (thin only)
+- Function pointers
+- SIMD vectors (structs defined with `#[repr(simd)]` and which implement `Copy`).
+This includes architecture-specific vector types defined in `std::arch` such as `__m128` (x86) or `int8x16_t` (ARM).
+
+Here is the list of currently supported register classes:
+
+| Architecture | Register class | Registers | LLVM constraint code |
+| ------------ | -------------- | --------- | -------------------- |
+| x86 | `reg` | `ax`, `bx`, `cx`, `dx`, `si`, `di`, `bp`, `r[8-15]` (x86-64 only) | `r` |
+| x86 | `reg_abcd` | `ax`, `bx`, `cx`, `dx` | `Q` |
+| x86-32 | `reg_byte` | `al`, `bl`, `cl`, `dl`, `ah`, `bh`, `ch`, `dh` | `q` |
+| x86-64 | `reg_byte`\* | `al`, `bl`, `cl`, `dl`, `sil`, `dil`, `bpl`, `r[8-15]b` | `q` |
+| x86 | `xmm_reg` | `xmm[0-7]` (x86) `xmm[0-15]` (x86-64) | `x` |
+| x86 | `ymm_reg` | `ymm[0-7]` (x86) `ymm[0-15]` (x86-64) | `x` |
+| x86 | `zmm_reg` | `zmm[0-7]` (x86) `zmm[0-31]` (x86-64) | `v` |
+| x86 | `kreg` | `k[1-7]` | `Yk` |
+| x86 | `kreg0` | `k0` | Only clobbers |
+| x86 | `x87_reg` | `st([0-7])` | Only clobbers |
+| x86 | `mmx_reg` | `mm[0-7]` | Only clobbers |
+| x86-64 | `tmm_reg` | `tmm[0-7]` | Only clobbers |
+| AArch64 | `reg` | `x[0-30]` | `r` |
+| AArch64 | `vreg` | `v[0-31]` | `w` |
+| AArch64 | `vreg_low16` | `v[0-15]` | `x` |
+| AArch64 | `preg` | `p[0-15]`, `ffr` | Only clobbers |
+| ARM (ARM/Thumb2) | `reg` | `r[0-12]`, `r14` | `r` |
+| ARM (Thumb1) | `reg` | `r[0-7]` | `r` |
+| ARM | `sreg` | `s[0-31]` | `t` |
+| ARM | `sreg_low16` | `s[0-15]` | `x` |
+| ARM | `dreg` | `d[0-31]` | `w` |
+| ARM | `dreg_low16` | `d[0-15]` | `t` |
+| ARM | `dreg_low8` | `d[0-8]` | `x` |
+| ARM | `qreg` | `q[0-15]` | `w` |
+| ARM | `qreg_low8` | `q[0-7]` | `t` |
+| ARM | `qreg_low4` | `q[0-3]` | `x` |
+| RISC-V | `reg` | `x1`, `x[5-7]`, `x[9-15]`, `x[16-31]` (non-RV32E) | `r` |
+| RISC-V | `freg` | `f[0-31]` | `f` |
+| RISC-V | `vreg` | `v[0-31]` | Only clobbers |
+
+> **Notes**:
+> - On x86 we treat `reg_byte` differently from `reg` because the compiler can allocate `al` and `ah` separately whereas `reg` reserves the whole register.
+>
+> - On x86-64 the high byte registers (e.g. `ah`) are not available in the `reg_byte` register class.
+>
+> - Some register classes are marked as "Only clobbers" which means that registers in these classes cannot be used for inputs or outputs, only clobbers of the form `out(<explicit register>) _` or `lateout(<explicit register>) _`.
+
+Each register class has constraints on which value types they can be used with.
+This is necessary because the way a value is loaded into a register depends on its type.
+For example, on big-endian systems, loading a `i32x4` and a `i8x16` into a SIMD register may result in different register contents even if the byte-wise memory representation of both values is identical.
+The availability of supported types for a particular register class may depend on what target features are currently enabled.
+
+| Architecture | Register class | Target feature | Allowed types |
+| ------------ | -------------- | -------------- | ------------- |
+| x86-32 | `reg` | None | `i16`, `i32`, `f32` |
+| x86-64 | `reg` | None | `i16`, `i32`, `f32`, `i64`, `f64` |
+| x86 | `reg_byte` | None | `i8` |
+| x86 | `xmm_reg` | `sse` | `i32`, `f32`, `i64`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |
+| x86 | `ymm_reg` | `avx` | `i32`, `f32`, `i64`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` <br> `i8x32`, `i16x16`, `i32x8`, `i64x4`, `f32x8`, `f64x4` |
+| x86 | `zmm_reg` | `avx512f` | `i32`, `f32`, `i64`, `f64`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` <br> `i8x32`, `i16x16`, `i32x8`, `i64x4`, `f32x8`, `f64x4` <br> `i8x64`, `i16x32`, `i32x16`, `i64x8`, `f32x16`, `f64x8` |
+| x86 | `kreg` | `avx512f` | `i8`, `i16` |
+| x86 | `kreg` | `avx512bw` | `i32`, `i64` |
+| x86 | `mmx_reg` | N/A | Only clobbers |
+| x86 | `x87_reg` | N/A | Only clobbers |
+| x86 | `tmm_reg` | N/A | Only clobbers |
+| AArch64 | `reg` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` |
+| AArch64 | `vreg` | `neon` | `i8`, `i16`, `i32`, `f32`, `i64`, `f64`, <br> `i8x8`, `i16x4`, `i32x2`, `i64x1`, `f32x2`, `f64x1`, <br> `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4`, `f64x2` |
+| AArch64 | `preg` | N/A | Only clobbers |
+| ARM | `reg` | None | `i8`, `i16`, `i32`, `f32` |
+| ARM | `sreg` | `vfp2` | `i32`, `f32` |
+| ARM | `dreg` | `vfp2` | `i64`, `f64`, `i8x8`, `i16x4`, `i32x2`, `i64x1`, `f32x2` |
+| ARM | `qreg` | `neon` | `i8x16`, `i16x8`, `i32x4`, `i64x2`, `f32x4` |
+| RISC-V32 | `reg` | None | `i8`, `i16`, `i32`, `f32` |
+| RISC-V64 | `reg` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` |
+| RISC-V | `freg` | `f` | `f32` |
+| RISC-V | `freg` | `d` | `f64` |
+| RISC-V | `vreg` | N/A | Only clobbers |
+
+> **Note**: For the purposes of the above table pointers, function pointers and `isize`/`usize` are treated as the equivalent integer type (`i16`/`i32`/`i64` depending on the target).
+
+If a value is of a smaller size than the register it is allocated in then the upper bits of that register will have an undefined value for inputs and will be ignored for outputs.
+The only exception is the `freg` register class on RISC-V where `f32` values are NaN-boxed in a `f64` as required by the RISC-V architecture.
+
+When separate input and output expressions are specified for an `inout` operand, both expressions must have the same type.
+The only exception is if both operands are pointers or integers, in which case they are only required to have the same size.
+This restriction exists because the register allocators in LLVM and GCC sometimes cannot handle tied operands with different types.
+
+## Register names
+
+Some registers have multiple names.
+These are all treated by the compiler as identical to the base register name.
+Here is the list of all supported register aliases:
+
+| Architecture | Base register | Aliases |
+| ------------ | ------------- | ------- |
+| x86 | `ax` | `eax`, `rax` |
+| x86 | `bx` | `ebx`, `rbx` |
+| x86 | `cx` | `ecx`, `rcx` |
+| x86 | `dx` | `edx`, `rdx` |
+| x86 | `si` | `esi`, `rsi` |
+| x86 | `di` | `edi`, `rdi` |
+| x86 | `bp` | `bpl`, `ebp`, `rbp` |
+| x86 | `sp` | `spl`, `esp`, `rsp` |
+| x86 | `ip` | `eip`, `rip` |
+| x86 | `st(0)` | `st` |
+| x86 | `r[8-15]` | `r[8-15]b`, `r[8-15]w`, `r[8-15]d` |
+| x86 | `xmm[0-31]` | `ymm[0-31]`, `zmm[0-31]` |
+| AArch64 | `x[0-30]` | `w[0-30]` |
+| AArch64 | `x29` | `fp` |
+| AArch64 | `x30` | `lr` |
+| AArch64 | `sp` | `wsp` |
+| AArch64 | `xzr` | `wzr` |
+| AArch64 | `v[0-31]` | `b[0-31]`, `h[0-31]`, `s[0-31]`, `d[0-31]`, `q[0-31]` |
+| ARM | `r[0-3]` | `a[1-4]` |
+| ARM | `r[4-9]` | `v[1-6]` |
+| ARM | `r9` | `rfp` |
+| ARM | `r10` | `sl` |
+| ARM | `r11` | `fp` |
+| ARM | `r12` | `ip` |
+| ARM | `r13` | `sp` |
+| ARM | `r14` | `lr` |
+| ARM | `r15` | `pc` |
+| RISC-V | `x0` | `zero` |
+| RISC-V | `x1` | `ra` |
+| RISC-V | `x2` | `sp` |
+| RISC-V | `x3` | `gp` |
+| RISC-V | `x4` | `tp` |
+| RISC-V | `x[5-7]` | `t[0-2]` |
+| RISC-V | `x8` | `fp`, `s0` |
+| RISC-V | `x9` | `s1` |
+| RISC-V | `x[10-17]` | `a[0-7]` |
+| RISC-V | `x[18-27]` | `s[2-11]` |
+| RISC-V | `x[28-31]` | `t[3-6]` |
+| RISC-V | `f[0-7]` | `ft[0-7]` |
+| RISC-V | `f[8-9]` | `fs[0-1]` |
+| RISC-V | `f[10-17]` | `fa[0-7]` |
+| RISC-V | `f[18-27]` | `fs[2-11]` |
+| RISC-V | `f[28-31]` | `ft[8-11]` |
+
+Some registers cannot be used for input or output operands:
+
+| Architecture | Unsupported register | Reason |
+| ------------ | -------------------- | ------ |
+| All | `sp` | The stack pointer must be restored to its original value at the end of an asm code block. |
+| All | `bp` (x86), `x29` (AArch64), `x8` (RISC-V) | The frame pointer cannot be used as an input or output. |
+| ARM | `r7` or `r11` | On ARM the frame pointer can be either `r7` or `r11` depending on the target. The frame pointer cannot be used as an input or output. |
+| All | `si` (x86-32), `bx` (x86-64), `r6` (ARM), `x19` (AArch64), `x9` (RISC-V) | This is used internally by LLVM as a "base pointer" for functions with complex stack frames. |
+| x86 | `ip` | This is the program counter, not a real register. |
+| AArch64 | `xzr` | This is a constant zero register which can't be modified. |
+| AArch64 | `x18` | This is an OS-reserved register on some AArch64 targets. |
+| ARM | `pc` | This is the program counter, not a real register. |
+| ARM | `r9` | This is an OS-reserved register on some ARM targets. |
+| RISC-V | `x0` | This is a constant zero register which can't be modified. |
+| RISC-V | `gp`, `tp` | These registers are reserved and cannot be used as inputs or outputs. |
+
+The frame pointer and base pointer registers are reserved for internal use by LLVM. While `asm!` statements cannot explicitly specify the use of reserved registers, in some cases LLVM will allocate one of these reserved registers for `reg` operands. Assembly code making use of reserved registers should be careful since `reg` operands may use the same registers.
+
+## Template modifiers
+
+The placeholders can be augmented by modifiers which are specified after the `:` in the curly braces.
+These modifiers do not affect register allocation, but change the way operands are formatted when inserted into the template string.
+Only one modifier is allowed per template placeholder.
+
+The supported modifiers are a subset of LLVM's (and GCC's) [asm template argument modifiers][llvm-argmod], but do not use the same letter codes.
+
+| Architecture | Register class | Modifier | Example output | LLVM modifier |
+| ------------ | -------------- | -------- | -------------- | ------------- |
+| x86-32 | `reg` | None | `eax` | `k` |
+| x86-64 | `reg` | None | `rax` | `q` |
+| x86-32 | `reg_abcd` | `l` | `al` | `b` |
+| x86-64 | `reg` | `l` | `al` | `b` |
+| x86 | `reg_abcd` | `h` | `ah` | `h` |
+| x86 | `reg` | `x` | `ax` | `w` |
+| x86 | `reg` | `e` | `eax` | `k` |
+| x86-64 | `reg` | `r` | `rax` | `q` |
+| x86 | `reg_byte` | None | `al` / `ah` | None |
+| x86 | `xmm_reg` | None | `xmm0` | `x` |
+| x86 | `ymm_reg` | None | `ymm0` | `t` |
+| x86 | `zmm_reg` | None | `zmm0` | `g` |
+| x86 | `*mm_reg` | `x` | `xmm0` | `x` |
+| x86 | `*mm_reg` | `y` | `ymm0` | `t` |
+| x86 | `*mm_reg` | `z` | `zmm0` | `g` |
+| x86 | `kreg` | None | `k1` | None |
+| AArch64 | `reg` | None | `x0` | `x` |
+| AArch64 | `reg` | `w` | `w0` | `w` |
+| AArch64 | `reg` | `x` | `x0` | `x` |
+| AArch64 | `vreg` | None | `v0` | None |
+| AArch64 | `vreg` | `v` | `v0` | None |
+| AArch64 | `vreg` | `b` | `b0` | `b` |
+| AArch64 | `vreg` | `h` | `h0` | `h` |
+| AArch64 | `vreg` | `s` | `s0` | `s` |
+| AArch64 | `vreg` | `d` | `d0` | `d` |
+| AArch64 | `vreg` | `q` | `q0` | `q` |
+| ARM | `reg` | None | `r0` | None |
+| ARM | `sreg` | None | `s0` | None |
+| ARM | `dreg` | None | `d0` | `P` |
+| ARM | `qreg` | None | `q0` | `q` |
+| ARM | `qreg` | `e` / `f` | `d0` / `d1` | `e` / `f` |
+| RISC-V | `reg` | None | `x1` | None |
+| RISC-V | `freg` | None | `f0` | None |
+
+> **Notes**:
+> - on ARM `e` / `f`: this prints the low or high doubleword register name of a NEON quad (128-bit) register.
+> - on x86: our behavior for `reg` with no modifiers differs from what GCC does.
+> GCC will infer the modifier based on the operand value type, while we default to the full register size.
+> - on x86 `xmm_reg`: the `x`, `t` and `g` LLVM modifiers are not yet implemented in LLVM (they are supported by GCC only), but this should be a simple change.
+
+As stated in the previous section, passing an input value smaller than the register width will result in the upper bits of the register containing undefined values.
+This is not a problem if the inline asm only accesses the lower bits of the register, which can be done by using a template modifier to use a subregister name in the asm code (e.g. `ax` instead of `rax`).
+Since this an easy pitfall, the compiler will suggest a template modifier to use where appropriate given the input type.
+If all references to an operand already have modifiers then the warning is suppressed for that operand.
+
+[llvm-argmod]: http://llvm.org/docs/LangRef.html#asm-template-argument-modifiers
+
+## ABI clobbers
+
+The `clobber_abi` keyword can be used to apply a default set of clobbers to an `asm!` block.
+This will automatically insert the necessary clobber constraints as needed for calling a function with a particular calling convention: if the calling convention does not fully preserve the value of a register across a call then `lateout("...") _` is implicitly added to the operands list (where the `...` is replaced by the register's name).
+
+`clobber_abi` may be specified any number of times. It will insert a clobber for all unique registers in the union of all specified calling conventions.
+
+Generic register class outputs are disallowed by the compiler when `clobber_abi` is used: all outputs must specify an explicit register.
+Explicit register outputs have precedence over the implicit clobbers inserted by `clobber_abi`: a clobber will only be inserted for a register if that register is not used as an output.
+The following ABIs can be used with `clobber_abi`:
+
+| Architecture | ABI name | Clobbered registers |
+| ------------ | -------- | ------------------- |
+| x86-32 | `"C"`, `"system"`, `"efiapi"`, `"cdecl"`, `"stdcall"`, `"fastcall"` | `ax`, `cx`, `dx`, `xmm[0-7]`, `mm[0-7]`, `k[0-7]`, `st([0-7])` |
+| x86-64 | `"C"`, `"system"` (on Windows), `"efiapi"`, `"win64"` | `ax`, `cx`, `dx`, `r[8-11]`, `xmm[0-31]`, `mm[0-7]`, `k[0-7]`, `st([0-7])`, `tmm[0-7]` |
+| x86-64 | `"C"`, `"system"` (on non-Windows), `"sysv64"` | `ax`, `cx`, `dx`, `si`, `di`, `r[8-11]`, `xmm[0-31]`, `mm[0-7]`, `k[0-7]`, `st([0-7])`, `tmm[0-7]` |
+| AArch64 | `"C"`, `"system"`, `"efiapi"` | `x[0-17]`, `x18`\*, `x30`, `v[0-31]`, `p[0-15]`, `ffr` |
+| ARM | `"C"`, `"system"`, `"efiapi"`, `"aapcs"` | `r[0-3]`, `r12`, `r14`, `s[0-15]`, `d[0-7]`, `d[16-31]` |
+| RISC-V | `"C"`, `"system"`, `"efiapi"` | `x1`, `x[5-7]`, `x[10-17]`, `x[28-31]`, `f[0-7]`, `f[10-17]`, `f[28-31]`, `v[0-31]` |
+
+> Notes:
+> - On AArch64 `x18` only included in the clobber list if it is not considered as a reserved register on the target.
+
+The list of clobbered registers for each ABI is updated in rustc as architectures gain new registers: this ensures that `asm!` clobbers will continue to be correct when LLVM starts using these new registers in its generated code.
+
+## Options
+
+Flags are used to further influence the behavior of the inline assembly block.
+Currently the following options are defined:
+- `pure`: The `asm!` block has no side effects, and its outputs depend only on its direct inputs (i.e. the values themselves, not what they point to) or values read from memory (unless the `nomem` options is also set).
+ This allows the compiler to execute the `asm!` block fewer times than specified in the program (e.g. by hoisting it out of a loop) or even eliminate it entirely if the outputs are not used.
+- `nomem`: The `asm!` blocks does not read or write to any memory.
+ This allows the compiler to cache the values of modified global variables in registers across the `asm!` block since it knows that they are not read or written to by the `asm!`.
+- `readonly`: The `asm!` block does not write to any memory.
+ This allows the compiler to cache the values of unmodified global variables in registers across the `asm!` block since it knows that they are not written to by the `asm!`.
+- `preserves_flags`: The `asm!` block does not modify the flags register (defined in the rules below).
+ This allows the compiler to avoid recomputing the condition flags after the `asm!` block.
+- `noreturn`: The `asm!` block never returns, and its return type is defined as `!` (never).
+ Behavior is undefined if execution falls through past the end of the asm code.
+ A `noreturn` asm block behaves just like a function which doesn't return; notably, local variables in scope are not dropped before it is invoked.
+- `nostack`: The `asm!` block does not push data to the stack, or write to the stack red-zone (if supported by the target).
+ If this option is *not* used then the stack pointer is guaranteed to be suitably aligned (according to the target ABI) for a function call.
+- `att_syntax`: This option is only valid on x86, and causes the assembler to use the `.att_syntax prefix` mode of the GNU assembler.
+ Register operands are substituted in with a leading `%`.
+- `raw`: This causes the template string to be parsed as a raw assembly string, with no special handling for `{` and `}`.
+ This is primarily useful when including raw assembly code from an external file using `include_str!`.
+
+The compiler performs some additional checks on options:
+- The `nomem` and `readonly` options are mutually exclusive: it is a compile-time error to specify both.
+- The `pure` option must be combined with either the `nomem` or `readonly` options, otherwise a compile-time error is emitted.
+- It is a compile-time error to specify `pure` on an asm block with no outputs or only discarded outputs (`_`).
+- It is a compile-time error to specify `noreturn` on an asm block with outputs.
+
+`global_asm!` only supports the `att_syntax` and `raw` options.
+The remaining options are not meaningful for global-scope inline assembly
+
+## Rules for inline assembly
+
+To avoid undefined behavior, these rules must be followed when using function-scope inline assembly (`asm!`):
+
+- Any registers not specified as inputs will contain an undefined value on entry to the asm block.
+ - An "undefined value" in the context of inline assembly means that the register can (non-deterministically) have any one of the possible values allowed by the architecture.
+ Notably it is not the same as an LLVM `undef` which can have a different value every time you read it (since such a concept does not exist in assembly code).
+- Any registers not specified as outputs must have the same value upon exiting the asm block as they had on entry, otherwise behavior is undefined.
+ - This only applies to registers which can be specified as an input or output.
+ Other registers follow target-specific rules.
+ - Note that a `lateout` may be allocated to the same register as an `in`, in which case this rule does not apply.
+ Code should not rely on this however since it depends on the results of register allocation.
+- Behavior is undefined if execution unwinds out of an asm block.
+ - This also applies if the assembly code calls a function which then unwinds.
+- The set of memory locations that assembly code is allowed to read and write are the same as those allowed for an FFI function.
+ - Refer to the unsafe code guidelines for the exact rules.
+ - If the `readonly` option is set, then only memory reads are allowed.
+ - If the `nomem` option is set then no reads or writes to memory are allowed.
+ - These rules do not apply to memory which is private to the asm code, such as stack space allocated within the asm block.
+- The compiler cannot assume that the instructions in the asm are the ones that will actually end up executed.
+ - This effectively means that the compiler must treat the `asm!` as a black box and only take the interface specification into account, not the instructions themselves.
+ - Runtime code patching is allowed, via target-specific mechanisms.
+- Unless the `nostack` option is set, asm code is allowed to use stack space below the stack pointer.
+ - On entry to the asm block the stack pointer is guaranteed to be suitably aligned (according to the target ABI) for a function call.
+ - You are responsible for making sure you don't overflow the stack (e.g. use stack probing to ensure you hit a guard page).
+ - You should adjust the stack pointer when allocating stack memory as required by the target ABI.
+ - The stack pointer must be restored to its original value before leaving the asm block.
+- If the `noreturn` option is set then behavior is undefined if execution falls through to the end of the asm block.
+- If the `pure` option is set then behavior is undefined if the `asm!` has side-effects other than its direct outputs.
+ Behavior is also undefined if two executions of the `asm!` code with the same inputs result in different outputs.
+ - When used with the `nomem` option, "inputs" are just the direct inputs of the `asm!`.
+ - When used with the `readonly` option, "inputs" comprise the direct inputs of the `asm!` and any memory that the `asm!` block is allowed to read.
+- These flags registers must be restored upon exiting the asm block if the `preserves_flags` option is set:
+ - x86
+ - Status flags in `EFLAGS` (CF, PF, AF, ZF, SF, OF).
+ - Floating-point status word (all).
+ - Floating-point exception flags in `MXCSR` (PE, UE, OE, ZE, DE, IE).
+ - ARM
+ - Condition flags in `CPSR` (N, Z, C, V)
+ - Saturation flag in `CPSR` (Q)
+ - Greater than or equal flags in `CPSR` (GE).
+ - Condition flags in `FPSCR` (N, Z, C, V)
+ - Saturation flag in `FPSCR` (QC)
+ - Floating-point exception flags in `FPSCR` (IDC, IXC, UFC, OFC, DZC, IOC).
+ - AArch64
+ - Condition flags (`NZCV` register).
+ - Floating-point status (`FPSR` register).
+ - RISC-V
+ - Floating-point exception flags in `fcsr` (`fflags`).
+ - Vector extension state (`vtype`, `vl`, `vcsr`).
+- On x86, the direction flag (DF in `EFLAGS`) is clear on entry to an asm block and must be clear on exit.
+ - Behavior is undefined if the direction flag is set on exiting an asm block.
+- On x86, the x87 floating-point register stack must remain unchanged unless all of the `st([0-7])` registers have been marked as clobbered with `out("st(0)") _, out("st(1)") _, ...`.
+ - If all x87 registers are clobbered then the x87 register stack is guaranteed to be empty upon entering an `asm` block. Assembly code must ensure that the x87 register stack is also empty when exiting the asm block.
+- The requirement of restoring the stack pointer and non-output registers to their original value only applies when exiting an `asm!` block.
+ - This means that `asm!` blocks that never return (even if not marked `noreturn`) don't need to preserve these registers.
+ - When returning to a different `asm!` block than you entered (e.g. for context switching), these registers must contain the value they had upon entering the `asm!` block that you are *exiting*.
+ - You cannot exit an `asm!` block that has not been entered.
+ Neither can you exit an `asm!` block that has already been exited (without first entering it again).
+ - You are responsible for switching any target-specific state (e.g. thread-local storage, stack bounds).
+ - You cannot jump from an address in one `asm!` block to an address in another, even within the same function or block, without treating their contexts as potentially different and requiring context switching. You cannot assume that any particular value in those contexts (e.g. current stack pointer or temporary values below the stack pointer) will remain unchanged between the two `asm!` blocks.
+ - The set of memory locations that you may access is the intersection of those allowed by the `asm!` blocks you entered and exited.
+- You cannot assume that two `asm!` blocks adjacent in source code, even without any other code between them, will end up in successive addresses in the binary without any other instructions between them.
+- You cannot assume that an `asm!` block will appear exactly once in the output binary.
+ The compiler is allowed to instantiate multiple copies of the `asm!` block, for example when the function containing it is inlined in multiple places.
+- On x86, inline assembly must not end with an instruction prefix (such as `LOCK`) that would apply to instructions generated by the compiler.
+ - The compiler is currently unable to detect this due to the way inline assembly is compiled, but may catch and reject this in the future.
+
+> **Note**: As a general rule, the flags covered by `preserves_flags` are those which are *not* preserved when performing a function call.
+
+### Directives Support
+
+Inline assembly supports a subset of the directives supported by both GNU AS and LLVM's internal assembler, given as follows.
+The result of using other directives is assembler-specific (and may cause an error, or may be accepted as-is).
+
+If inline assembly includes any "stateful" directive that modifies how subsequent assembly is processed, the block must undo the effects of any such directives before the inline assembly ends.
+
+The following directives are guaranteed to be supported by the assembler:
+
+- `.2byte`
+- `.4byte`
+- `.8byte`
+- `.align`
+- `.ascii`
+- `.asciz`
+- `.alt_entry`
+- `.balign`
+- `.balignl`
+- `.balignw`
+- `.balign`
+- `.balignl`
+- `.balignw`
+- `.bss`
+- `.byte`
+- `.comm`
+- `.data`
+- `.def`
+- `.double`
+- `.endef`
+- `.equ`
+- `.equiv`
+- `.eqv`
+- `.fill`
+- `.float`
+- `.globl`
+- `.global`
+- `.lcomm`
+- `.inst`
+- `.long`
+- `.octa`
+- `.option`
+- `.private_extern`
+- `.p2align`
+- `.pushsection`
+- `.popsection`
+- `.quad`
+- `.scl`
+- `.section`
+- `.set`
+- `.short`
+- `.size`
+- `.skip`
+- `.sleb128`
+- `.space`
+- `.string`
+- `.text`
+- `.type`
+- `.uleb128`
+- `.word`
+
+
+
+#### Target Specific Directive Support
+
+##### Dwarf Unwinding
+
+The following directives are supported on ELF targets that support DWARF unwind info:
+
+
+- `.cfi_adjust_cfa_offset`
+- `.cfi_def_cfa`
+- `.cfi_def_cfa_offset`
+- `.cfi_def_cfa_register`
+- `.cfi_endproc`
+- `.cfi_escape`
+- `.cfi_lsda`
+- `.cfi_offset`
+- `.cfi_personality`
+- `.cfi_register`
+- `.cfi_rel_offset`
+- `.cfi_remember_state`
+- `.cfi_restore`
+- `.cfi_restore_state`
+- `.cfi_return_column`
+- `.cfi_same_value`
+- `.cfi_sections`
+- `.cfi_signal_frame`
+- `.cfi_startproc`
+- `.cfi_undefined`
+- `.cfi_window_save`
+
+
+##### Structured Exception Handling
+
+On targets with structured exception Handling, the following additional directives are guaranteed to be supported:
+
+- `.seh_endproc`
+- `.seh_endprologue`
+- `.seh_proc`
+- `.seh_pushreg`
+- `.seh_savereg`
+- `.seh_setframe`
+- `.seh_stackalloc`
+
+
+##### x86 (32-bit and 64-bit)
+
+On x86 targets, both 32-bit and 64-bit, the following additional directives are guaranteed to be supported:
+- `.nops`
+- `.code16`
+- `.code32`
+- `.code64`
+
+
+Use of `.code16`, `.code32`, and `.code64` directives are only supported if the state is reset to the default before exiting the assembly block.
+32-bit x86 uses `.code32` by default, and x86_64 uses `.code64` by default.
+
+
+
+##### ARM (32-bit)
+
+On ARM, the following additional directives are guaranteed to be supported:
+
+- `.even`
+- `.fnstart`
+- `.fnend`
+- `.save`
+- `.movsp`
+- `.code`
+- `.thumb`
+- `.thumb_func`
diff --git a/src/doc/reference/src/input-format.md b/src/doc/reference/src/input-format.md
new file mode 100644
index 000000000..678902c93
--- /dev/null
+++ b/src/doc/reference/src/input-format.md
@@ -0,0 +1,3 @@
+# Input format
+
+Rust input is interpreted as a sequence of Unicode code points encoded in UTF-8.
diff --git a/src/doc/reference/src/interior-mutability.md b/src/doc/reference/src/interior-mutability.md
new file mode 100644
index 000000000..914600776
--- /dev/null
+++ b/src/doc/reference/src/interior-mutability.md
@@ -0,0 +1,29 @@
+# Interior Mutability
+
+Sometimes a type needs to be mutated while having multiple aliases. In Rust this
+is achieved using a pattern called _interior mutability_. A type has interior
+mutability if its internal state can be changed through a [shared reference] to
+it. This goes against the usual [requirement][ub] that the value pointed to by a
+shared reference is not mutated.
+
+[`std::cell::UnsafeCell<T>`] type is the only allowed way to disable
+this requirement. When `UnsafeCell<T>` is immutably aliased, it is still safe to
+mutate, or obtain a mutable reference to, the `T` it contains. As with all
+other types, it is undefined behavior to have multiple `&mut UnsafeCell<T>`
+aliases.
+
+Other types with interior mutability can be created by using `UnsafeCell<T>` as
+a field. The standard library provides a variety of types that provide safe
+interior mutability APIs. For example, [`std::cell::RefCell<T>`] uses run-time
+borrow checks to ensure the usual rules around multiple references. The
+[`std::sync::atomic`] module contains types that wrap a value that is only
+accessed with atomic operations, allowing the value to be shared and mutated
+across threads.
+
+[shared reference]: types/pointer.md#shared-references-
+[ub]: behavior-considered-undefined.md
+[`std::cell::UnsafeCell<T>`]: ../std/cell/struct.UnsafeCell.html
+[`std::cell::RefCell<T>`]: ../std/cell/struct.RefCell.html
+[`std::sync::atomic`]: ../std/sync/atomic/index.html
+
+
diff --git a/src/doc/reference/src/introduction.md b/src/doc/reference/src/introduction.md
new file mode 100644
index 000000000..9038efd8d
--- /dev/null
+++ b/src/doc/reference/src/introduction.md
@@ -0,0 +1,146 @@
+# Introduction
+
+This book is the primary reference for the Rust programming language.
+It provides three kinds of material:
+
+ - Chapters that informally describe each language construct and their use.
+ - Chapters that informally describe the memory model, concurrency model, runtime services, linkage model, and debugging facilities.
+ - Appendix chapters providing rationale and references to languages that influenced the design.
+
+<div class="warning">
+
+Warning:
+This book is incomplete. Documenting everything takes a while.
+See the [GitHub issues] for what is not documented in this book.
+
+</div>
+
+## Rust releases
+
+Rust has a new language release every six weeks.
+The first stable release of the language was Rust 1.0.0, followed by Rust 1.1.0 and so on.
+Tools (`rustc`, `cargo`, etc.) and documentation ([Standard library], this book, etc.) are released with the language release.
+
+The latest release of this book, matching the latest Rust version, can always be found at <https://doc.rust-lang.org/reference/>.
+Prior versions can be found by adding the Rust version before the "reference" directory.
+For example, the Reference for Rust 1.49.0 is located at <https://doc.rust-lang.org/1.49.0/reference/>.
+
+## What *The Reference* is not
+
+This book does not serve as an introduction to the language.
+Background familiarity with the language is assumed.
+A separate [book] is available to help acquire such background familiarity.
+
+This book also does not serve as a reference to the [standard library] included in the language distribution.
+Those libraries are documented separately by extracting documentation attributes from their source code.
+Many of the features that one might expect to be language features are library features in Rust, so what you're looking for may be there, not here.
+
+Similarly, this book does not usually document the specifics of `rustc` as a tool or of Cargo.
+`rustc` has its own [book][rustc book].
+Cargo has a [book][cargo book] that contains a [reference][cargo reference].
+There are a few pages such as [linkage] that still describe how `rustc` works.
+
+This book also only serves as a reference to what is available in stable Rust.
+For unstable features being worked on, see the [Unstable Book].
+
+Rust compilers, including `rustc`, will perform optimizations.
+The reference does not specify what optimizations are allowed or disallowed.
+Instead, think of the compiled program as a black box.
+You can only probe by running it, feeding it input and observing its output.
+Everything that happens that way must conform to what the reference says.
+
+Finally, this book is not normative.
+It may include details that are specific to `rustc` itself, and should not be taken as a specification for the Rust language.
+We intend to produce such a book someday, and until then, the reference is the closest thing we have to one.
+
+## How to use this book
+
+This book does not assume you are reading this book sequentially.
+Each chapter generally can be read standalone, but will cross-link to other chapters for facets of the language they refer to, but do not discuss.
+
+There are two main ways to read this document.
+
+The first is to answer a specific question.
+If you know which chapter answers that question, you can jump to that chapter in the table of contents.
+Otherwise, you can press `s` or click the magnifying glass on the top bar to search for keywords related to your question.
+For example, say you wanted to know when a temporary value created in a let statement is dropped.
+If you didn't already know that the [lifetime of temporaries] is defined in the [expressions chapter], you could search "temporary let" and the first search result will take you to that section.
+
+The second is to generally improve your knowledge of a facet of the language.
+In that case, just browse the table of contents until you see something you want to know more about, and just start reading.
+If a link looks interesting, click it, and read about that section.
+
+That said, there is no wrong way to read this book. Read it however you feel helps you best.
+
+### Conventions
+
+Like all technical books, this book has certain conventions in how it displays information.
+These conventions are documented here.
+
+* Statements that define a term contain that term in *italics*.
+ Whenever that term is used outside of that chapter, it is usually a link to the section that has this definition.
+
+ An *example term* is an example of a term being defined.
+
+* Differences in the language by which edition the crate is compiled under are in a blockquote that start with the words "Edition Differences:" in **bold**.
+
+ > **Edition Differences**: In the 2015 edition, this syntax is valid that is disallowed as of the 2018 edition.
+
+* Notes that contain useful information about the state of the book or point out useful, but mostly out of scope, information are in blockquotes that start with the word "Note:" in **bold**.
+
+ > **Note**: This is an example note.
+
+* Warnings that show unsound behavior in the language or possibly confusing interactions of language features are in a special warning box.
+
+ <div class="warning">
+
+ Warning: This is an example warning.
+
+ </div>
+
+* Code snippets inline in the text are inside `<code>` tags.
+
+ Longer code examples are in a syntax highlighted box that has controls for copying, executing, and showing hidden lines in the top right corner.
+
+ ```rust
+ # // This is a hidden line.
+ fn main() {
+ println!("This is a code example");
+ }
+ ```
+
+ All examples are written for the latest edition unless otherwise stated.
+
+* The grammar and lexical structure is in blockquotes with either "Lexer" or "Syntax" in <sup>**bold superscript**</sup> as the first line.
+
+ > **<sup>Syntax</sup>**\
+ > _ExampleGrammar_:\
+ > &nbsp;&nbsp; &nbsp;&nbsp; `~` [_Expression_]\
+ > &nbsp;&nbsp; | `box` [_Expression_]
+
+ See [Notation] for more detail.
+
+## Contributing
+
+We welcome contributions of all kinds.
+
+You can contribute to this book by opening an issue or sending a pull request to [the Rust Reference repository].
+If this book does not answer your question, and you think its answer is in scope of it, please do not hesitate to [file an issue] or ask about it in the `t-lang/doc` stream on [Zulip].
+Knowing what people use this book for the most helps direct our attention to making those sections the best that they can be.
+We also want the reference to be as normative as possible, so if you see anything that is wrong or is non-normative but not specifically called out, please also [file an issue].
+
+[book]: ../book/index.html
+[github issues]: https://github.com/rust-lang/reference/issues
+[standard library]: ../std/index.html
+[the Rust Reference repository]: https://github.com/rust-lang/reference/
+[Unstable Book]: https://doc.rust-lang.org/nightly/unstable-book/
+[_Expression_]: expressions.md
+[cargo book]: ../cargo/index.html
+[cargo reference]: ../cargo/reference/index.html
+[expressions chapter]: expressions.html
+[file an issue]: https://github.com/rust-lang/reference/issues
+[lifetime of temporaries]: expressions.html#temporaries
+[linkage]: linkage.html
+[rustc book]: ../rustc/index.html
+[Notation]: notation.md
+[Zulip]: https://rust-lang.zulipchat.com/#narrow/stream/237824-t-lang.2Fdoc
diff --git a/src/doc/reference/src/items.md b/src/doc/reference/src/items.md
new file mode 100644
index 000000000..addbe0efd
--- /dev/null
+++ b/src/doc/reference/src/items.md
@@ -0,0 +1,96 @@
+# Items
+
+> **<sup>Syntax:<sup>**\
+> _Item_:\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; _VisItem_\
+> &nbsp;&nbsp; | _MacroItem_
+>
+> _VisItem_:\
+> &nbsp;&nbsp; [_Visibility_]<sup>?</sup>\
+> &nbsp;&nbsp; (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [_Module_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ExternCrate_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_UseDeclaration_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_Function_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_TypeAlias_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_Struct_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_Enumeration_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_Union_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ConstantItem_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_StaticItem_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_Trait_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_Implementation_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [_ExternBlock_]\
+> &nbsp;&nbsp; )
+>
+> _MacroItem_:\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_MacroInvocationSemi_]\
+> &nbsp;&nbsp; | [_MacroRulesDefinition_]
+
+
+An _item_ is a component of a crate. Items are organized within a crate by a
+nested set of [modules]. Every crate has a single "outermost" anonymous module;
+all further items within the crate have [paths] within the module tree of the
+crate.
+
+Items are entirely determined at compile-time, generally remain fixed during
+execution, and may reside in read-only memory.
+
+There are several kinds of items:
+
+* [modules]
+* [`extern crate` declarations]
+* [`use` declarations]
+* [function definitions]
+* [type definitions]
+* [struct definitions]
+* [enumeration definitions]
+* [union definitions]
+* [constant items]
+* [static items]
+* [trait definitions]
+* [implementations]
+* [`extern` blocks]
+
+Some items form an implicit scope for the declaration of sub-items. In other
+words, within a function or module, declarations of items can (in many cases)
+be mixed with the statements, control blocks, and similar artifacts that
+otherwise compose the item body. The meaning of these scoped items is the same
+as if the item was declared outside the scope &mdash; it is still a static item
+&mdash; except that the item's *path name* within the module namespace is
+qualified by the name of the enclosing item, or is private to the enclosing
+item (in the case of functions). The grammar specifies the exact locations in
+which sub-item declarations may appear.
+
+[_ConstantItem_]: items/constant-items.md
+[_Enumeration_]: items/enumerations.md
+[_ExternBlock_]: items/external-blocks.md
+[_ExternCrate_]: items/extern-crates.md
+[_Function_]: items/functions.md
+[_Implementation_]: items/implementations.md
+[_MacroInvocationSemi_]: macros.md#macro-invocation
+[_MacroRulesDefinition_]: macros-by-example.md
+[_Module_]: items/modules.md
+[_OuterAttribute_]: attributes.md
+[_StaticItem_]: items/static-items.md
+[_Struct_]: items/structs.md
+[_Trait_]: items/traits.md
+[_TypeAlias_]: items/type-aliases.md
+[_Union_]: items/unions.md
+[_UseDeclaration_]: items/use-declarations.md
+[_Visibility_]: visibility-and-privacy.md
+[`extern crate` declarations]: items/extern-crates.md
+[`extern` blocks]: items/external-blocks.md
+[`use` declarations]: items/use-declarations.md
+[constant items]: items/constant-items.md
+[enumeration definitions]: items/enumerations.md
+[function definitions]: items/functions.md
+[implementations]: items/implementations.md
+[modules]: items/modules.md
+[paths]: paths.md
+[static items]: items/static-items.md
+[struct definitions]: items/structs.md
+[trait definitions]: items/traits.md
+[type definitions]: items/type-aliases.md
+[union definitions]: items/unions.md
diff --git a/src/doc/reference/src/items/associated-items.md b/src/doc/reference/src/items/associated-items.md
new file mode 100644
index 000000000..f5dc31aae
--- /dev/null
+++ b/src/doc/reference/src/items/associated-items.md
@@ -0,0 +1,397 @@
+# Associated Items
+
+> **<sup>Syntax</sup>**\
+> _AssociatedItem_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [_MacroInvocationSemi_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | ( [_Visibility_]<sup>?</sup> ( [_TypeAlias_] | [_ConstantItem_] | [_Function_] ) )\
+> &nbsp;&nbsp; )
+
+*Associated Items* are the items declared in [traits] or defined in
+[implementations]. They are called this because they are defined on an associate
+type &mdash; the type in the implementation. They are a subset of the kinds of
+items you can declare in a module. Specifically, there are [associated
+functions] (including methods), [associated types], and [associated constants].
+
+[associated functions]: #associated-functions-and-methods
+[associated types]: #associated-types
+[associated constants]: #associated-constants
+
+Associated items are useful when the associated item logically is related to the
+associating item. For example, the `is_some` method on `Option` is intrinsically
+related to Options, so should be associated.
+
+Every associated item kind comes in two varieties: definitions that contain the
+actual implementation and declarations that declare signatures for
+definitions.
+
+It is the declarations that make up the contract of traits and what is available
+on generic types.
+
+## Associated functions and methods
+
+*Associated functions* are [functions] associated with a type.
+
+An *associated function declaration* declares a signature for an associated
+function definition. It is written as a function item, except the
+function body is replaced with a `;`.
+
+The identifier is the name of the function. The generics, parameter list,
+return type, and where clause of the associated function must be the same as the
+associated function declarations's.
+
+An *associated function definition* defines a function associated with another
+type. It is written the same as a [function item].
+
+An example of a common associated function is a `new` function that returns
+a value of the type the associated function is associated with.
+
+```rust
+struct Struct {
+ field: i32
+}
+
+impl Struct {
+ fn new() -> Struct {
+ Struct {
+ field: 0i32
+ }
+ }
+}
+
+fn main () {
+ let _struct = Struct::new();
+}
+```
+
+When the associated function is declared on a trait, the function can also be
+called with a [path] that is a path to the trait appended by the name of the
+trait. When this happens, it is substituted for `<_ as Trait>::function_name`.
+
+```rust
+trait Num {
+ fn from_i32(n: i32) -> Self;
+}
+
+impl Num for f64 {
+ fn from_i32(n: i32) -> f64 { n as f64 }
+}
+
+// These 4 are all equivalent in this case.
+let _: f64 = Num::from_i32(42);
+let _: f64 = <_ as Num>::from_i32(42);
+let _: f64 = <f64 as Num>::from_i32(42);
+let _: f64 = f64::from_i32(42);
+```
+
+### Methods
+
+Associated functions whose first parameter is named `self` are called *methods*
+and may be invoked using the [method call operator], for example, `x.foo()`, as
+well as the usual function call notation.
+
+If the type of the `self` parameter is specified, it is limited to types resolving
+to one generated by the following grammar (where `'lt` denotes some arbitrary
+lifetime):
+
+```text
+P = &'lt S | &'lt mut S | Box<S> | Rc<S> | Arc<S> | Pin<P>
+S = Self | P
+```
+
+The `Self` terminal in this grammar denotes a type resolving to the implementing type.
+This can also include the contextual type alias `Self`, other type aliases,
+or associated type projections resolving to the implementing type.
+
+```rust
+# use std::rc::Rc;
+# use std::sync::Arc;
+# use std::pin::Pin;
+// Examples of methods implemented on struct `Example`.
+struct Example;
+type Alias = Example;
+trait Trait { type Output; }
+impl Trait for Example { type Output = Example; }
+impl Example {
+ fn by_value(self: Self) {}
+ fn by_ref(self: &Self) {}
+ fn by_ref_mut(self: &mut Self) {}
+ fn by_box(self: Box<Self>) {}
+ fn by_rc(self: Rc<Self>) {}
+ fn by_arc(self: Arc<Self>) {}
+ fn by_pin(self: Pin<&Self>) {}
+ fn explicit_type(self: Arc<Example>) {}
+ fn with_lifetime<'a>(self: &'a Self) {}
+ fn nested<'a>(self: &mut &'a Arc<Rc<Box<Alias>>>) {}
+ fn via_projection(self: <Example as Trait>::Output) {}
+}
+```
+
+Shorthand syntax can be used without specifying a type, which have the
+following equivalents:
+
+Shorthand | Equivalent
+----------------------|-----------
+`self` | `self: Self`
+`&'lifetime self` | `self: &'lifetime Self`
+`&'lifetime mut self` | `self: &'lifetime mut Self`
+
+> **Note**: Lifetimes can be, and usually are, elided with this shorthand.
+
+If the `self` parameter is prefixed with `mut`, it becomes a mutable variable,
+similar to regular parameters using a `mut` [identifier pattern]. For example:
+
+```rust
+trait Changer: Sized {
+ fn change(mut self) {}
+ fn modify(mut self: Box<Self>) {}
+}
+```
+
+As an example of methods on a trait, consider the following:
+
+```rust
+# type Surface = i32;
+# type BoundingBox = i32;
+trait Shape {
+ fn draw(&self, surface: Surface);
+ fn bounding_box(&self) -> BoundingBox;
+}
+```
+
+This defines a trait with two methods. All values that have [implementations]
+of this trait while the trait is in scope can have their `draw` and
+`bounding_box` methods called.
+
+```rust
+# type Surface = i32;
+# type BoundingBox = i32;
+# trait Shape {
+# fn draw(&self, surface: Surface);
+# fn bounding_box(&self) -> BoundingBox;
+# }
+#
+struct Circle {
+ // ...
+}
+
+impl Shape for Circle {
+ // ...
+# fn draw(&self, _: Surface) {}
+# fn bounding_box(&self) -> BoundingBox { 0i32 }
+}
+
+# impl Circle {
+# fn new() -> Circle { Circle{} }
+# }
+#
+let circle_shape = Circle::new();
+let bounding_box = circle_shape.bounding_box();
+```
+
+> **Edition Differences**: In the 2015 edition, it is possible to declare trait
+> methods with anonymous parameters (e.g. `fn foo(u8)`). This is deprecated and
+> an error as of the 2018 edition. All parameters must have an argument name.
+
+#### Attributes on method parameters
+
+Attributes on method parameters follow the same rules and restrictions as
+[regular function parameters].
+
+## Associated Types
+
+*Associated types* are [type aliases] associated with another type. Associated
+types cannot be defined in [inherent implementations] nor can they be given a
+default implementation in traits.
+
+An *associated type declaration* declares a signature for associated type
+definitions. It is written as `type`, then an [identifier], and
+finally an optional list of trait bounds.
+
+The identifier is the name of the declared type alias. The optional trait bounds
+must be fulfilled by the implementations of the type alias.
+There is an implicit [`Sized`] bound on associated types that can be relaxed using the special `?Sized` bound.
+
+An *associated type definition* defines a type alias on another type. It is
+written as `type`, then an [identifier], then an `=`, and finally a [type].
+
+If a type `Item` has an associated type `Assoc` from a trait `Trait`, then
+`<Item as Trait>::Assoc` is a type that is an alias of the type specified in the
+associated type definition. Furthermore, if `Item` is a type parameter, then
+`Item::Assoc` can be used in type parameters.
+
+Associated types must not include [generic parameters] or [where clauses].
+
+```rust
+trait AssociatedType {
+ // Associated type declaration
+ type Assoc;
+}
+
+struct Struct;
+
+struct OtherStruct;
+
+impl AssociatedType for Struct {
+ // Associated type definition
+ type Assoc = OtherStruct;
+}
+
+impl OtherStruct {
+ fn new() -> OtherStruct {
+ OtherStruct
+ }
+}
+
+fn main() {
+ // Usage of the associated type to refer to OtherStruct as <Struct as AssociatedType>::Assoc
+ let _other_struct: OtherStruct = <Struct as AssociatedType>::Assoc::new();
+}
+```
+
+### Associated Types Container Example
+
+Consider the following example of a `Container` trait. Notice that the type is
+available for use in the method signatures:
+
+```rust
+trait Container {
+ type E;
+ fn empty() -> Self;
+ fn insert(&mut self, elem: Self::E);
+}
+```
+
+In order for a type to implement this trait, it must not only provide
+implementations for every method, but it must specify the type `E`. Here's an
+implementation of `Container` for the standard library type `Vec`:
+
+```rust
+# trait Container {
+# type E;
+# fn empty() -> Self;
+# fn insert(&mut self, elem: Self::E);
+# }
+impl<T> Container for Vec<T> {
+ type E = T;
+ fn empty() -> Vec<T> { Vec::new() }
+ fn insert(&mut self, x: T) { self.push(x); }
+}
+```
+
+## Associated Constants
+
+*Associated constants* are [constants] associated with a type.
+
+An *associated constant declaration* declares a signature for associated
+constant definitions. It is written as `const`, then an identifier,
+then `:`, then a type, finished by a `;`.
+
+The identifier is the name of the constant used in the path. The type is the
+type that the definition has to implement.
+
+An *associated constant definition* defines a constant associated with a
+type. It is written the same as a [constant item].
+
+Associated constant definitions undergo [constant evaluation] only when
+referenced. Further, definitions that include [generic parameters] are
+evaluated after monomorphization.
+
+```rust,compile_fail
+struct Struct;
+struct GenericStruct<const ID: i32>;
+
+impl Struct {
+ // Definition not immediately evaluated
+ const PANIC: () = panic!("compile-time panic");
+}
+
+impl<const ID: i32> GenericStruct<ID> {
+ // Definition not immediately evaluated
+ const NON_ZERO: () = if ID == 0 {
+ panic!("contradiction")
+ };
+}
+
+fn main() {
+ // Referencing Struct::PANIC causes compilation error
+ let _ = Struct::PANIC;
+
+ // Fine, ID is not 0
+ let _ = GenericStruct::<1>::NON_ZERO;
+
+ // Compilation error from evaluating NON_ZERO with ID=0
+ let _ = GenericStruct::<0>::NON_ZERO;
+}
+```
+
+### Associated Constants Examples
+
+A basic example:
+
+```rust
+trait ConstantId {
+ const ID: i32;
+}
+
+struct Struct;
+
+impl ConstantId for Struct {
+ const ID: i32 = 1;
+}
+
+fn main() {
+ assert_eq!(1, Struct::ID);
+}
+```
+
+Using default values:
+
+```rust
+trait ConstantIdDefault {
+ const ID: i32 = 1;
+}
+
+struct Struct;
+struct OtherStruct;
+
+impl ConstantIdDefault for Struct {}
+
+impl ConstantIdDefault for OtherStruct {
+ const ID: i32 = 5;
+}
+
+fn main() {
+ assert_eq!(1, Struct::ID);
+ assert_eq!(5, OtherStruct::ID);
+}
+```
+
+[_ConstantItem_]: constant-items.md
+[_Function_]: functions.md
+[_MacroInvocationSemi_]: ../macros.md#macro-invocation
+[_OuterAttribute_]: ../attributes.md
+[_TypeAlias_]: type-aliases.md
+[_Visibility_]: ../visibility-and-privacy.md
+[`Arc<Self>`]: ../special-types-and-traits.md#arct
+[`Box<Self>`]: ../special-types-and-traits.md#boxt
+[`Pin<P>`]: ../special-types-and-traits.md#pinp
+[`Rc<Self>`]: ../special-types-and-traits.md#rct
+[`Sized`]: ../special-types-and-traits.md#sized
+[traits]: traits.md
+[type aliases]: type-aliases.md
+[inherent implementations]: implementations.md#inherent-implementations
+[identifier]: ../identifiers.md
+[identifier pattern]: ../patterns.md#identifier-patterns
+[implementations]: implementations.md
+[type]: ../types.md#type-expressions
+[constants]: constant-items.md
+[constant item]: constant-items.md
+[functions]: functions.md
+[function item]: ../types/function-item.md
+[method call operator]: ../expressions/method-call-expr.md
+[path]: ../paths.md
+[regular function parameters]: functions.md#attributes-on-function-parameters
+[generic parameters]: generics.md
+[where clauses]: generics.md#where-clauses
+[constant evaluation]: ../const_eval.md
diff --git a/src/doc/reference/src/items/constant-items.md b/src/doc/reference/src/items/constant-items.md
new file mode 100644
index 000000000..bf315932f
--- /dev/null
+++ b/src/doc/reference/src/items/constant-items.md
@@ -0,0 +1,101 @@
+# Constant items
+
+> **<sup>Syntax</sup>**\
+> _ConstantItem_ :\
+> &nbsp;&nbsp; `const` ( [IDENTIFIER] | `_` ) `:` [_Type_] ( `=` [_Expression_] )<sup>?</sup> `;`
+
+A *constant item* is an optionally named _[constant value]_ which is not associated
+with a specific memory location in the program. Constants are essentially inlined
+wherever they are used, meaning that they are copied directly into the relevant
+context when used. This includes usage of constants from external crates, and
+non-[`Copy`] types. References to the same constant are not necessarily
+guaranteed to refer to the same memory address.
+
+Constants must be explicitly typed. The type must have a `'static` lifetime: any
+references in the initializer must have `'static` lifetimes.
+
+Constants may refer to the address of other constants, in which case the
+address will have elided lifetimes where applicable, otherwise – in most cases
+– defaulting to the `static` lifetime. (See [static lifetime
+elision].) The compiler is, however, still at liberty to translate the constant
+many times, so the address referred to may not be stable.
+
+```rust
+const BIT1: u32 = 1 << 0;
+const BIT2: u32 = 1 << 1;
+
+const BITS: [u32; 2] = [BIT1, BIT2];
+const STRING: &'static str = "bitstring";
+
+struct BitsNStrings<'a> {
+ mybits: [u32; 2],
+ mystring: &'a str,
+}
+
+const BITS_N_STRINGS: BitsNStrings<'static> = BitsNStrings {
+ mybits: BITS,
+ mystring: STRING,
+};
+```
+
+The constant expression may only be omitted in a [trait definition].
+
+## Constants with Destructors
+
+Constants can contain destructors. Destructors are run when the value goes out
+of scope.
+
+```rust
+struct TypeWithDestructor(i32);
+
+impl Drop for TypeWithDestructor {
+ fn drop(&mut self) {
+ println!("Dropped. Held {}.", self.0);
+ }
+}
+
+const ZERO_WITH_DESTRUCTOR: TypeWithDestructor = TypeWithDestructor(0);
+
+fn create_and_drop_zero_with_destructor() {
+ let x = ZERO_WITH_DESTRUCTOR;
+ // x gets dropped at end of function, calling drop.
+ // prints "Dropped. Held 0.".
+}
+```
+
+## Unnamed constant
+
+Unlike an [associated constant], a [free] constant may be unnamed by using
+an underscore instead of the name. For example:
+
+```rust
+const _: () = { struct _SameNameTwice; };
+
+// OK although it is the same name as above:
+const _: () = { struct _SameNameTwice; };
+```
+
+As with [underscore imports], macros may safely emit the same unnamed constant in
+the same scope more than once. For example, the following should not produce an error:
+
+```rust
+macro_rules! m {
+ ($item: item) => { $item $item }
+}
+
+m!(const _: () = (););
+// This expands to:
+// const _: () = ();
+// const _: () = ();
+```
+
+[associated constant]: ../items/associated-items.md#associated-constants
+[constant value]: ../const_eval.md#constant-expressions
+[free]: ../glossary.md#free-item
+[static lifetime elision]: ../lifetime-elision.md#static-lifetime-elision
+[trait definition]: traits.md
+[IDENTIFIER]: ../identifiers.md
+[underscore imports]: use-declarations.md#underscore-imports
+[_Type_]: ../types.md#type-expressions
+[_Expression_]: ../expressions.md
+[`Copy`]: ../special-types-and-traits.md#copy
diff --git a/src/doc/reference/src/items/enumerations.md b/src/doc/reference/src/items/enumerations.md
new file mode 100644
index 000000000..28d3ba873
--- /dev/null
+++ b/src/doc/reference/src/items/enumerations.md
@@ -0,0 +1,188 @@
+# Enumerations
+
+> **<sup>Syntax</sup>**\
+> _Enumeration_ :\
+> &nbsp;&nbsp; `enum`
+> [IDENTIFIER]&nbsp;
+> [_GenericParams_]<sup>?</sup>
+> [_WhereClause_]<sup>?</sup>
+> `{` _EnumItems_<sup>?</sup> `}`
+>
+> _EnumItems_ :\
+> &nbsp;&nbsp; _EnumItem_ ( `,` _EnumItem_ )<sup>\*</sup> `,`<sup>?</sup>
+>
+> _EnumItem_ :\
+> &nbsp;&nbsp; _OuterAttribute_<sup>\*</sup> [_Visibility_]<sup>?</sup>\
+> &nbsp;&nbsp; [IDENTIFIER]&nbsp;( _EnumItemTuple_ | _EnumItemStruct_
+> | _EnumItemDiscriminant_ )<sup>?</sup>
+>
+> _EnumItemTuple_ :\
+> &nbsp;&nbsp; `(` [_TupleFields_]<sup>?</sup> `)`
+>
+> _EnumItemStruct_ :\
+> &nbsp;&nbsp; `{` [_StructFields_]<sup>?</sup> `}`
+>
+> _EnumItemDiscriminant_ :\
+> &nbsp;&nbsp; `=` [_Expression_]
+
+An *enumeration*, also referred to as an *enum*, is a simultaneous definition of a
+nominal [enumerated type] as well as a set of *constructors*, that can be used
+to create or pattern-match values of the corresponding enumerated type.
+
+Enumerations are declared with the keyword `enum`.
+
+An example of an `enum` item and its use:
+
+```rust
+enum Animal {
+ Dog,
+ Cat,
+}
+
+let mut a: Animal = Animal::Dog;
+a = Animal::Cat;
+```
+
+Enum constructors can have either named or unnamed fields:
+
+```rust
+enum Animal {
+ Dog(String, f64),
+ Cat { name: String, weight: f64 },
+}
+
+let mut a: Animal = Animal::Dog("Cocoa".to_string(), 37.2);
+a = Animal::Cat { name: "Spotty".to_string(), weight: 2.7 };
+```
+
+In this example, `Cat` is a _struct-like enum variant_, whereas `Dog` is simply
+called an enum variant. Each enum instance has a _discriminant_ which is an
+integer associated to it that is used to determine which variant it holds. An
+opaque reference to this discriminant can be obtained with the
+[`mem::discriminant`] function.
+
+## Custom Discriminant Values for Fieldless Enumerations
+
+If there is no data attached to *any* of the variants of an enumeration,
+then the discriminant can be directly chosen and accessed.
+
+These enumerations can be cast to integer types with the `as` operator by a
+[numeric cast]. The enumeration can optionally specify which integer each
+discriminant gets by following the variant name with `=` followed by a [constant
+expression]. If the first variant in the declaration is unspecified, then it is
+set to zero. For every other unspecified discriminant, it is set to one higher
+than the previous variant in the declaration.
+
+```rust
+enum Foo {
+ Bar, // 0
+ Baz = 123, // 123
+ Quux, // 124
+}
+
+let baz_discriminant = Foo::Baz as u32;
+assert_eq!(baz_discriminant, 123);
+```
+
+Under the [default representation], the specified discriminant is interpreted as
+an `isize` value although the compiler is allowed to use a smaller type in the
+actual memory layout. The size and thus acceptable values can be changed by
+using a [primitive representation] or the [`C` representation].
+
+It is an error when two variants share the same discriminant.
+
+```rust,compile_fail
+enum SharedDiscriminantError {
+ SharedA = 1,
+ SharedB = 1
+}
+
+enum SharedDiscriminantError2 {
+ Zero, // 0
+ One, // 1
+ OneToo = 1 // 1 (collision with previous!)
+}
+```
+
+It is also an error to have an unspecified discriminant where the previous
+discriminant is the maximum value for the size of the discriminant.
+
+```rust,compile_fail
+#[repr(u8)]
+enum OverflowingDiscriminantError {
+ Max = 255,
+ MaxPlusOne // Would be 256, but that overflows the enum.
+}
+
+#[repr(u8)]
+enum OverflowingDiscriminantError2 {
+ MaxMinusOne = 254, // 254
+ Max, // 255
+ MaxPlusOne // Would be 256, but that overflows the enum.
+}
+```
+
+## Zero-variant Enums
+
+Enums with zero variants are known as *zero-variant enums*. As they have
+no valid values, they cannot be instantiated.
+
+```rust
+enum ZeroVariants {}
+```
+
+Zero-variant enums are equivalent to the [never type], but they cannot be
+coerced into other types.
+
+```rust,compile_fail
+# enum ZeroVariants {}
+let x: ZeroVariants = panic!();
+let y: u32 = x; // mismatched type error
+```
+
+## Variant visibility
+
+Enum variants syntactically allow a [_Visibility_] annotation, but this is
+rejected when the enum is validated. This allows items to be parsed with a
+unified syntax across different contexts where they are used.
+
+```rust
+macro_rules! mac_variant {
+ ($vis:vis $name:ident) => {
+ enum $name {
+ $vis Unit,
+
+ $vis Tuple(u8, u16),
+
+ $vis Struct { f: u8 },
+ }
+ }
+}
+
+// Empty `vis` is allowed.
+mac_variant! { E }
+
+// This is allowed, since it is removed before being validated.
+#[cfg(FALSE)]
+enum E {
+ pub U,
+ pub(crate) T(u8),
+ pub(super) T { f: String }
+}
+```
+
+[IDENTIFIER]: ../identifiers.md
+[_GenericParams_]: generics.md
+[_WhereClause_]: generics.md#where-clauses
+[_Expression_]: ../expressions.md
+[_TupleFields_]: structs.md
+[_StructFields_]: structs.md
+[_Visibility_]: ../visibility-and-privacy.md
+[enumerated type]: ../types/enum.md
+[`mem::discriminant`]: ../../std/mem/fn.discriminant.html
+[never type]: ../types/never.md
+[numeric cast]: ../expressions/operator-expr.md#semantics
+[constant expression]: ../const_eval.md#constant-expressions
+[default representation]: ../type-layout.md#the-default-representation
+[primitive representation]: ../type-layout.md#primitive-representations
+[`C` representation]: ../type-layout.md#the-c-representation
diff --git a/src/doc/reference/src/items/extern-crates.md b/src/doc/reference/src/items/extern-crates.md
new file mode 100644
index 000000000..f4dc735b0
--- /dev/null
+++ b/src/doc/reference/src/items/extern-crates.md
@@ -0,0 +1,94 @@
+# Extern crate declarations
+
+> **<sup>Syntax:<sup>**\
+> _ExternCrate_ :\
+> &nbsp;&nbsp; `extern` `crate` _CrateRef_ _AsClause_<sup>?</sup> `;`
+>
+> _CrateRef_ :\
+> &nbsp;&nbsp; [IDENTIFIER] | `self`
+>
+> _AsClause_ :\
+> &nbsp;&nbsp; `as` ( [IDENTIFIER] | `_` )
+
+An _`extern crate` declaration_ specifies a dependency on an external crate.
+The external crate is then bound into the declaring scope as the [identifier]
+provided in the `extern crate` declaration. Additionally, if the `extern
+crate` appears in the crate root, then the crate name is also added to the
+[extern prelude], making it automatically in scope in all modules. The `as`
+clause can be used to bind the imported crate to a different name.
+
+The external crate is resolved to a specific `soname` at compile time, and a
+runtime linkage requirement to that `soname` is passed to the linker for
+loading at runtime. The `soname` is resolved at compile time by scanning the
+compiler's library path and matching the optional `crateid` provided against
+the `crateid` attributes that were declared on the external crate when it was
+compiled. If no `crateid` is provided, a default `name` attribute is assumed,
+equal to the [identifier] given in the `extern crate` declaration.
+
+The `self` crate may be imported which creates a binding to the current crate.
+In this case the `as` clause must be used to specify the name to bind it to.
+
+Three examples of `extern crate` declarations:
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+extern crate pcre;
+
+extern crate std; // equivalent to: extern crate std as std;
+
+extern crate std as ruststd; // linking to 'std' under another name
+```
+
+When naming Rust crates, hyphens are disallowed. However, Cargo packages may
+make use of them. In such case, when `Cargo.toml` doesn't specify a crate name,
+Cargo will transparently replace `-` with `_` (Refer to [RFC 940] for more
+details).
+
+Here is an example:
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+// Importing the Cargo package hello-world
+extern crate hello_world; // hyphen replaced with an underscore
+```
+
+## Extern Prelude
+
+This section has been moved to [Preludes — Extern Prelude](../names/preludes.md#extern-prelude).
+<!-- this is to appease the linkchecker, will remove once other books are updated -->
+
+## Underscore Imports
+
+An external crate dependency can be declared without binding its name in scope
+by using an underscore with the form `extern crate foo as _`. This may be
+useful for crates that only need to be linked, but are never referenced, and
+will avoid being reported as unused.
+
+The [`macro_use` attribute] works as usual and imports the macro names
+into the [`macro_use` prelude].
+
+## The `no_link` attribute
+
+The *`no_link` attribute* may be specified on an `extern crate` item to
+prevent linking the crate into the output. This is commonly used to load a
+crate to access only its macros.
+
+[IDENTIFIER]: ../identifiers.md
+[RFC 940]: https://github.com/rust-lang/rfcs/blob/master/text/0940-hyphens-considered-harmful.md
+[`macro_use` attribute]: ../macros-by-example.md#the-macro_use-attribute
+[extern prelude]: ../names/preludes.md#extern-prelude
+[`macro_use` prelude]: ../names/preludes.md#macro_use-prelude
+
+<script>
+(function() {
+ var fragments = {
+ "#extern-prelude": "../names/preludes.html#extern-prelude",
+ };
+ var target = fragments[window.location.hash];
+ if (target) {
+ var url = window.location.toString();
+ var base = url.substring(0, url.lastIndexOf('/'));
+ window.location.replace(base + "/" + target);
+ }
+})();
+</script>
diff --git a/src/doc/reference/src/items/external-blocks.md b/src/doc/reference/src/items/external-blocks.md
new file mode 100644
index 000000000..e768a1502
--- /dev/null
+++ b/src/doc/reference/src/items/external-blocks.md
@@ -0,0 +1,235 @@
+# External blocks
+
+> **<sup>Syntax</sup>**\
+> _ExternBlock_ :\
+> &nbsp;&nbsp; `unsafe`<sup>?</sup> `extern` [_Abi_]<sup>?</sup> `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; _ExternalItem_<sup>\*</sup>\
+> &nbsp;&nbsp; `}`
+>
+> _ExternalItem_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [_MacroInvocationSemi_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | ( [_Visibility_]<sup>?</sup> ( [_StaticItem_] | [_Function_] ) )\
+> &nbsp;&nbsp; )
+
+External blocks provide _declarations_ of items that are not _defined_ in the
+current crate and are the basis of Rust's foreign function interface. These are
+akin to unchecked imports.
+
+Two kinds of item _declarations_ are allowed in external blocks: [functions] and
+[statics]. Calling functions or accessing statics that are declared in external
+blocks is only allowed in an `unsafe` context.
+
+The `unsafe` keyword is syntactically allowed to appear before the `extern`
+keyword, but it is rejected at a semantic level. This allows macros to consume
+the syntax and make use of the `unsafe` keyword, before removing it from the
+token stream.
+
+## Functions
+
+Functions within external blocks are declared in the same way as other Rust
+functions, with the exception that they must not have a body and are instead
+terminated by a semicolon. Patterns are not allowed in parameters, only
+[IDENTIFIER] or `_` may be used. Function qualifiers (`const`, `async`,
+`unsafe`, and `extern`) are not allowed.
+
+Functions within external blocks may be called by Rust code, just like
+functions defined in Rust. The Rust compiler automatically translates between
+the Rust ABI and the foreign ABI.
+
+A function declared in an extern block is implicitly `unsafe`. When coerced to
+a function pointer, a function declared in an extern block has type `unsafe
+extern "abi" for<'l1, ..., 'lm> fn(A1, ..., An) -> R`, where `'l1`, ... `'lm`
+are its lifetime parameters, `A1`, ..., `An` are the declared types of its
+parameters and `R` is the declared return type.
+
+## Statics
+
+Statics within external blocks are declared in the same way as [statics] outside of external blocks,
+except that they do not have an expression initializing their value.
+It is `unsafe` to access a static item declared in an extern block, whether or
+not it's mutable, because there is nothing guaranteeing that the bit pattern at the static's
+memory is valid for the type it is declared with, since some arbitrary (e.g. C) code is in charge
+of initializing the static.
+
+Extern statics can be either immutable or mutable just like [statics] outside of external blocks.
+An immutable static *must* be initialized before any Rust code is executed. It is not enough for
+the static to be initialized before Rust code reads from it.
+
+## ABI
+
+By default external blocks assume that the library they are calling uses the
+standard C ABI on the specific platform. Other ABIs may be specified using an
+`abi` string, as shown here:
+
+```rust
+// Interface to the Windows API
+extern "stdcall" { }
+```
+
+There are three ABI strings which are cross-platform, and which all compilers
+are guaranteed to support:
+
+* `extern "Rust"` -- The default ABI when you write a normal `fn foo()` in any
+ Rust code.
+* `extern "C"` -- This is the same as `extern fn foo()`; whatever the default
+ your C compiler supports.
+* `extern "system"` -- Usually the same as `extern "C"`, except on Win32, in
+ which case it's `"stdcall"`, or what you should use to link to the Windows
+ API itself
+
+There are also some platform-specific ABI strings:
+
+* `extern "cdecl"` -- The default for x86\_32 C code.
+* `extern "stdcall"` -- The default for the Win32 API on x86\_32.
+* `extern "win64"` -- The default for C code on x86\_64 Windows.
+* `extern "sysv64"` -- The default for C code on non-Windows x86\_64.
+* `extern "aapcs"` -- The default for ARM.
+* `extern "fastcall"` -- The `fastcall` ABI -- corresponds to MSVC's
+ `__fastcall` and GCC and clang's `__attribute__((fastcall))`
+* `extern "vectorcall"` -- The `vectorcall` ABI -- corresponds to MSVC's
+ `__vectorcall` and clang's `__attribute__((vectorcall))`
+
+## Variadic functions
+
+Functions within external blocks may be variadic by specifying `...` as the
+last argument. There must be at least one parameter before the variadic
+parameter. The variadic parameter may optionally be specified with an
+identifier.
+
+```rust
+extern "C" {
+ fn foo(x: i32, ...);
+ fn with_name(format: *const u8, args: ...);
+}
+```
+
+## Attributes on extern blocks
+
+The following [attributes] control the behavior of external blocks.
+
+### The `link` attribute
+
+The *`link` attribute* specifies the name of a native library that the
+compiler should link with for the items within an `extern` block. It uses the
+[_MetaListNameValueStr_] syntax to specify its inputs. The `name` key is the
+name of the native library to link. The `kind` key is an optional value which
+specifies the kind of library with the following possible values:
+
+- `dylib` — Indicates a dynamic library. This is the default if `kind` is not
+ specified.
+- `static` — Indicates a static library.
+- `framework` — Indicates a macOS framework. This is only valid for macOS
+ targets.
+
+The `name` key must be included if `kind` is specified.
+
+The optional `modifiers` argument is a way to specify linking modifiers for the
+library to link.
+Modifiers are specified as a comma-delimited string with each modifier prefixed
+with either a `+` or `-` to indicate that the modifier is enabled or disabled,
+respectively.
+Specifying multiple `modifiers` arguments in a single `link` attribute,
+or multiple identical modifiers in the same `modifiers` argument is not currently supported. \
+Example: `#[link(name = "mylib", kind = "static", modifiers = "+whole-archive")`.
+
+The `wasm_import_module` key may be used to specify the [WebAssembly module]
+name for the items within an `extern` block when importing symbols from the
+host environment. The default module name is `env` if `wasm_import_module` is
+not specified.
+
+<!-- ignore: requires extern linking -->
+```rust,ignore
+#[link(name = "crypto")]
+extern {
+ // …
+}
+
+#[link(name = "CoreFoundation", kind = "framework")]
+extern {
+ // …
+}
+
+#[link(wasm_import_module = "foo")]
+extern {
+ // …
+}
+```
+
+It is valid to add the `link` attribute on an empty extern block. You can use
+this to satisfy the linking requirements of extern blocks elsewhere in your
+code (including upstream crates) instead of adding the attribute to each extern
+block.
+
+#### Linking modifiers: `bundle`
+
+This modifier is only compatible with the `static` linking kind.
+Using any other kind will result in a compiler error.
+
+When building a rlib or staticlib `+bundle` means that the native static library
+will be packed into the rlib or staticlib archive, and then retrieved from there
+during linking of the final binary.
+
+When building a rlib `-bundle` means that the native static library is registered as a dependency
+of that rlib "by name", and object files from it are included only during linking of the final
+binary, the file search by that name is also performed during final linking. \
+When building a staticlib `-bundle` means that the native static library is simply not included
+into the archive and some higher level build system will need to add it later during linking of
+the final binary.
+
+This modifier has no effect when building other targets like executables or dynamic libraries.
+
+The default for this modifier is `+bundle`.
+
+More implementation details about this modifier can be found in
+[`bundle` documentation for rustc].
+
+#### Linking modifiers: `whole-archive`
+
+This modifier is only compatible with the `static` linking kind.
+Using any other kind will result in a compiler error.
+
+`+whole-archive` means that the static library is linked as a whole archive
+without throwing any object files away.
+
+The default for this modifier is `-whole-archive`.
+
+More implementation details about this modifier can be found in
+[`whole-archive` documentation for rustc].
+
+### The `link_name` attribute
+
+The `link_name` attribute may be specified on declarations inside an `extern`
+block to indicate the symbol to import for the given function or static. It
+uses the [_MetaNameValueStr_] syntax to specify the name of the symbol.
+
+```rust
+extern {
+ #[link_name = "actual_symbol_name"]
+ fn name_in_rust();
+}
+```
+
+### Attributes on function parameters
+
+Attributes on extern function parameters follow the same rules and
+restrictions as [regular function parameters].
+
+[IDENTIFIER]: ../identifiers.md
+[WebAssembly module]: https://webassembly.github.io/spec/core/syntax/modules.html
+[functions]: functions.md
+[statics]: static-items.md
+[_Abi_]: functions.md
+[_Function_]: functions.md
+[_InnerAttribute_]: ../attributes.md
+[_MacroInvocationSemi_]: ../macros.md#macro-invocation
+[_MetaListNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[_MetaNameValueStr_]: ../attributes.md#meta-item-attribute-syntax
+[_OuterAttribute_]: ../attributes.md
+[_StaticItem_]: static-items.md
+[_Visibility_]: ../visibility-and-privacy.md
+[attributes]: ../attributes.md
+[regular function parameters]: functions.md#attributes-on-function-parameters
+[`bundle` documentation for rustc]: ../../rustc/command-line-arguments.html#linking-modifiers-bundle
+[`whole-archive` documentation for rustc]: ../../rustc/command-line-arguments.html#linking-modifiers-whole-archive
diff --git a/src/doc/reference/src/items/functions.md b/src/doc/reference/src/items/functions.md
new file mode 100644
index 000000000..325588a53
--- /dev/null
+++ b/src/doc/reference/src/items/functions.md
@@ -0,0 +1,415 @@
+# Functions
+
+> **<sup>Syntax</sup>**\
+> _Function_ :\
+> &nbsp;&nbsp; _FunctionQualifiers_ `fn` [IDENTIFIER]&nbsp;[_GenericParams_]<sup>?</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; `(` _FunctionParameters_<sup>?</sup> `)`\
+> &nbsp;&nbsp; &nbsp;&nbsp; _FunctionReturnType_<sup>?</sup> [_WhereClause_]<sup>?</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; ( [_BlockExpression_] | `;` )
+>
+> _FunctionQualifiers_ :\
+> &nbsp;&nbsp; `const`<sup>?</sup> `async`[^async-edition]<sup>?</sup> `unsafe`<sup>?</sup> (`extern` _Abi_<sup>?</sup>)<sup>?</sup>
+>
+> _Abi_ :\
+> &nbsp;&nbsp; [STRING_LITERAL] | [RAW_STRING_LITERAL]
+>
+> _FunctionParameters_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _SelfParam_ `,`<sup>?</sup>\
+> &nbsp;&nbsp; | (_SelfParam_ `,`)<sup>?</sup> _FunctionParam_ (`,` _FunctionParam_)<sup>\*</sup> `,`<sup>?</sup>
+>
+> _SelfParam_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> ( _ShorthandSelf_ | _TypedSelf_ )
+>
+> _ShorthandSelf_ :\
+> &nbsp;&nbsp; (`&` | `&` [_Lifetime_])<sup>?</sup> `mut`<sup>?</sup> `self`
+>
+> _TypedSelf_ :\
+> &nbsp;&nbsp; `mut`<sup>?</sup> `self` `:` [_Type_]
+>
+> _FunctionParam_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> (
+> _FunctionParamPattern_ | `...` | [_Type_] [^fn-param-2015]
+> )
+>
+> _FunctionParamPattern_ :\
+> &nbsp;&nbsp; [_PatternNoTopAlt_] `:` ( [_Type_] | `...` )
+>
+> _FunctionReturnType_ :\
+> &nbsp;&nbsp; `->` [_Type_]
+>
+> [^async-edition]: The `async` qualifier is not allowed in the 2015 edition.
+>
+> [^fn-param-2015]: Function parameters with only a type are only allowed
+> in an associated function of a [trait item] in the 2015 edition.
+
+A _function_ consists of a [block], along with a name, a set of parameters, and an output type.
+Other than a name, all these are optional.
+Functions are declared with the keyword `fn`.
+Functions may declare a set of *input* [*variables*][variables] as parameters, through which the caller passes arguments into the function, and the *output* [*type*][type] of the value the function will return to its caller on completion.
+If the output type is not explicitly stated, it is the [unit type].
+
+When referred to, a _function_ yields a first-class *value* of the corresponding zero-sized [*function item type*], which when called evaluates to a direct call to the function.
+
+For example, this is a simple function:
+```rust
+fn answer_to_life_the_universe_and_everything() -> i32 {
+ return 42;
+}
+```
+
+## Function parameters
+
+As with `let` bindings, function parameters are irrefutable [patterns], so any
+pattern that is valid in a let binding is also valid as a parameter:
+
+```rust
+fn first((value, _): (i32, i32)) -> i32 { value }
+```
+
+If the first parameter is a _SelfParam_, this indicates that the function is a
+[method]. Functions with a self parameter may only appear as an [associated
+function] in a [trait] or [implementation].
+
+A parameter with the `...` token indicates a [variadic function], and may only
+be used as the last parameter of an [external block] function. The variadic
+parameter may have an optional identifier, such as `args: ...`.
+
+## Function body
+
+The block of a function is conceptually wrapped in a block that binds the
+argument patterns and then `return`s the value of the function's block. This
+means that the tail expression of the block, if evaluated, ends up being
+returned to the caller. As usual, an explicit return expression within
+the body of the function will short-cut that implicit return, if reached.
+
+For example, the function above behaves as if it was written as:
+
+<!-- ignore: example expansion -->
+```rust,ignore
+// argument_0 is the actual first argument passed from the caller
+let (value, _) = argument_0;
+return {
+ value
+};
+```
+
+Functions without a body block are terminated with a semicolon. This form
+may only appear in a [trait] or [external block].
+
+## Generic functions
+
+A _generic function_ allows one or more _parameterized types_ to appear in its
+signature. Each type parameter must be explicitly declared in an
+angle-bracket-enclosed and comma-separated list, following the function name.
+
+```rust
+// foo is generic over A and B
+
+fn foo<A, B>(x: A, y: B) {
+# }
+```
+
+Inside the function signature and body, the name of the type parameter can be
+used as a type name. [Trait] bounds can be specified for type
+parameters to allow methods with that trait to be called on values of that
+type. This is specified using the `where` syntax:
+
+```rust
+# use std::fmt::Debug;
+fn foo<T>(x: T) where T: Debug {
+# }
+```
+
+When a generic function is referenced, its type is instantiated based on the
+context of the reference. For example, calling the `foo` function here:
+
+```rust
+use std::fmt::Debug;
+
+fn foo<T>(x: &[T]) where T: Debug {
+ // details elided
+}
+
+foo(&[1, 2]);
+```
+
+will instantiate type parameter `T` with `i32`.
+
+The type parameters can also be explicitly supplied in a trailing [path]
+component after the function name. This might be necessary if there is not
+sufficient context to determine the type parameters. For example,
+`mem::size_of::<u32>() == 4`.
+
+## Extern function qualifier
+
+The `extern` function qualifier allows providing function _definitions_ that can
+be called with a particular ABI:
+
+<!-- ignore: fake ABI -->
+```rust,ignore
+extern "ABI" fn foo() { /* ... */ }
+```
+
+These are often used in combination with [external block] items which provide
+function _declarations_ that can be used to call functions without providing
+their _definition_:
+
+<!-- ignore: fake ABI -->
+```rust,ignore
+extern "ABI" {
+ fn foo(); /* no body */
+}
+unsafe { foo() }
+```
+
+When `"extern" Abi?*` is omitted from `FunctionQualifiers` in function items,
+the ABI `"Rust"` is assigned. For example:
+
+```rust
+fn foo() {}
+```
+
+is equivalent to:
+
+```rust
+extern "Rust" fn foo() {}
+```
+
+Functions can be called by foreign code, and using an ABI that
+differs from Rust allows, for example, to provide functions that can be
+called from other programming languages like C:
+
+```rust
+// Declares a function with the "C" ABI
+extern "C" fn new_i32() -> i32 { 0 }
+
+// Declares a function with the "stdcall" ABI
+# #[cfg(target_arch = "x86_64")]
+extern "stdcall" fn new_i32_stdcall() -> i32 { 0 }
+```
+
+Just as with [external block], when the `extern` keyword is used and the `"ABI"`
+is omitted, the ABI used defaults to `"C"`. That is, this:
+
+```rust
+extern fn new_i32() -> i32 { 0 }
+let fptr: extern fn() -> i32 = new_i32;
+```
+
+is equivalent to:
+
+```rust
+extern "C" fn new_i32() -> i32 { 0 }
+let fptr: extern "C" fn() -> i32 = new_i32;
+```
+
+Functions with an ABI that differs from `"Rust"` do not support unwinding in the
+exact same way that Rust does. Therefore, unwinding past the end of functions
+with such ABIs causes the process to abort.
+
+> **Note**: The LLVM backend of the `rustc` implementation
+aborts the process by executing an illegal instruction.
+
+## Const functions
+
+Functions qualified with the `const` keyword are [const functions], as are
+[tuple struct] and [tuple variant] constructors. _Const functions_ can be
+called from within [const contexts].
+
+Const functions may use the [`extern`] function qualifier, but only with the `"Rust"` and `"C"` ABIs.
+
+Const functions are not allowed to be [async](#async-functions).
+
+## Async functions
+
+Functions may be qualified as async, and this can also be combined with the
+`unsafe` qualifier:
+
+```rust
+async fn regular_example() { }
+async unsafe fn unsafe_example() { }
+```
+
+Async functions do no work when called: instead, they
+capture their arguments into a future. When polled, that future will
+execute the function's body.
+
+An async function is roughly equivalent to a function
+that returns [`impl Future`] and with an [`async move` block][async-blocks] as
+its body:
+
+```rust
+// Source
+async fn example(x: &str) -> usize {
+ x.len()
+}
+```
+
+is roughly equivalent to:
+
+```rust
+# use std::future::Future;
+// Desugared
+fn example<'a>(x: &'a str) -> impl Future<Output = usize> + 'a {
+ async move { x.len() }
+}
+```
+
+The actual desugaring is more complex:
+
+- The return type in the desugaring is assumed to capture all lifetime
+ parameters from the `async fn` declaration. This can be seen in the
+ desugared example above, which explicitly outlives, and hence
+ captures, `'a`.
+- The [`async move` block][async-blocks] in the body captures all function
+ parameters, including those that are unused or bound to a `_`
+ pattern. This ensures that function parameters are dropped in the
+ same order as they would be if the function were not async, except
+ that the drop occurs when the returned future has been fully
+ awaited.
+
+For more information on the effect of async, see [`async` blocks][async-blocks].
+
+[async-blocks]: ../expressions/block-expr.md#async-blocks
+[`impl Future`]: ../types/impl-trait.md
+
+> **Edition differences**: Async functions are only available beginning with
+> Rust 2018.
+
+### Combining `async` and `unsafe`
+
+It is legal to declare a function that is both async and unsafe. The
+resulting function is unsafe to call and (like any async function)
+returns a future. This future is just an ordinary future and thus an
+`unsafe` context is not required to "await" it:
+
+```rust
+// Returns a future that, when awaited, dereferences `x`.
+//
+// Soundness condition: `x` must be safe to dereference until
+// the resulting future is complete.
+async unsafe fn unsafe_example(x: *const i32) -> i32 {
+ *x
+}
+
+async fn safe_example() {
+ // An `unsafe` block is required to invoke the function initially:
+ let p = 22;
+ let future = unsafe { unsafe_example(&p) };
+
+ // But no `unsafe` block required here. This will
+ // read the value of `p`:
+ let q = future.await;
+}
+```
+
+Note that this behavior is a consequence of the desugaring to a
+function that returns an `impl Future` -- in this case, the function
+we desugar to is an `unsafe` function, but the return value remains
+the same.
+
+Unsafe is used on an async function in precisely the same way that it
+is used on other functions: it indicates that the function imposes
+some additional obligations on its caller to ensure soundness. As in any
+other unsafe function, these conditions may extend beyond the initial
+call itself -- in the snippet above, for example, the `unsafe_example`
+function took a pointer `x` as argument, and then (when awaited)
+dereferenced that pointer. This implies that `x` would have to be
+valid until the future is finished executing, and it is the caller's
+responsibility to ensure that.
+
+## Attributes on functions
+
+[Outer attributes][attributes] are allowed on functions. [Inner
+attributes][attributes] are allowed directly after the `{` inside its [block].
+
+This example shows an inner attribute on a function. The function is documented
+with just the word "Example".
+
+```rust
+fn documented() {
+ #![doc = "Example"]
+}
+```
+
+> Note: Except for lints, it is idiomatic to only use outer attributes on
+> function items.
+
+The attributes that have meaning on a function are [`cfg`], [`cfg_attr`], [`deprecated`],
+[`doc`], [`export_name`], [`link_section`], [`no_mangle`], [the lint check
+attributes], [`must_use`], [the procedural macro attributes], [the testing
+attributes], and [the optimization hint attributes]. Functions also accept
+attributes macros.
+
+## Attributes on function parameters
+
+[Outer attributes][attributes] are allowed on function parameters and the
+permitted [built-in attributes] are restricted to `cfg`, `cfg_attr`, `allow`,
+`warn`, `deny`, and `forbid`.
+
+```rust
+fn len(
+ #[cfg(windows)] slice: &[u16],
+ #[cfg(not(windows))] slice: &[u8],
+) -> usize {
+ slice.len()
+}
+```
+
+Inert helper attributes used by procedural macro attributes applied to items are also
+allowed but be careful to not include these inert attributes in your final `TokenStream`.
+
+For example, the following code defines an inert `some_inert_attribute` attribute that
+is not formally defined anywhere and the `some_proc_macro_attribute` procedural macro is
+responsible for detecting its presence and removing it from the output token stream.
+
+<!-- ignore: requires proc macro -->
+```rust,ignore
+#[some_proc_macro_attribute]
+fn foo_oof(#[some_inert_attribute] arg: u8) {
+}
+```
+
+[IDENTIFIER]: ../identifiers.md
+[RAW_STRING_LITERAL]: ../tokens.md#raw-string-literals
+[STRING_LITERAL]: ../tokens.md#string-literals
+[_BlockExpression_]: ../expressions/block-expr.md
+[_GenericParams_]: generics.md
+[_Lifetime_]: ../trait-bounds.md
+[_PatternNoTopAlt_]: ../patterns.md
+[_Type_]: ../types.md#type-expressions
+[_WhereClause_]: generics.md#where-clauses
+[_OuterAttribute_]: ../attributes.md
+[const contexts]: ../const_eval.md#const-context
+[const functions]: ../const_eval.md#const-functions
+[tuple struct]: structs.md
+[tuple variant]: enumerations.md
+[`extern`]: #extern-function-qualifier
+[external block]: external-blocks.md
+[path]: ../paths.md
+[block]: ../expressions/block-expr.md
+[variables]: ../variables.md
+[type]: ../types.md#type-expressions
+[unit type]: ../types/tuple.md
+[*function item type*]: ../types/function-item.md
+[Trait]: traits.md
+[attributes]: ../attributes.md
+[`cfg`]: ../conditional-compilation.md#the-cfg-attribute
+[`cfg_attr`]: ../conditional-compilation.md#the-cfg_attr-attribute
+[the lint check attributes]: ../attributes/diagnostics.md#lint-check-attributes
+[the procedural macro attributes]: ../procedural-macros.md
+[the testing attributes]: ../attributes/testing.md
+[the optimization hint attributes]: ../attributes/codegen.md#optimization-hints
+[`deprecated`]: ../attributes/diagnostics.md#the-deprecated-attribute
+[`doc`]: ../../rustdoc/the-doc-attribute.html
+[`must_use`]: ../attributes/diagnostics.md#the-must_use-attribute
+[patterns]: ../patterns.md
+[`export_name`]: ../abi.md#the-export_name-attribute
+[`link_section`]: ../abi.md#the-link_section-attribute
+[`no_mangle`]: ../abi.md#the-no_mangle-attribute
+[built-in attributes]: ../attributes.html#built-in-attributes-index
+[trait item]: traits.md
+[method]: associated-items.md#methods
+[associated function]: associated-items.md#associated-functions-and-methods
+[implementation]: implementations.md
+[variadic function]: external-blocks.md#variadic-functions
diff --git a/src/doc/reference/src/items/generics.md b/src/doc/reference/src/items/generics.md
new file mode 100644
index 000000000..5ffcd1580
--- /dev/null
+++ b/src/doc/reference/src/items/generics.md
@@ -0,0 +1,305 @@
+# Generic parameters
+
+> **<sup>Syntax</sup>**\
+> _GenericParams_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `<` `>`\
+> &nbsp;&nbsp; | `<` (_GenericParam_ `,`)<sup>\*</sup> _GenericParam_ `,`<sup>?</sup> `>`
+>
+> _GenericParam_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> ( _LifetimeParam_ | _TypeParam_ | _ConstParam_ )
+>
+> _LifetimeParam_ :\
+> &nbsp;&nbsp; [LIFETIME_OR_LABEL]&nbsp;( `:` [_LifetimeBounds_] )<sup>?</sup>
+>
+> _TypeParam_ :\
+> &nbsp;&nbsp; [IDENTIFIER]( `:` [_TypeParamBounds_]<sup>?</sup> )<sup>?</sup> ( `=` [_Type_] )<sup>?</sup>
+>
+> _ConstParam_:\
+> &nbsp;&nbsp; `const` [IDENTIFIER] `:` [_Type_] ( `=` _[Block][block]_ | [IDENTIFIER] | -<sup>?</sup>[LITERAL] )<sup>?</sup>
+
+[Functions], [type aliases], [structs], [enumerations], [unions], [traits], and
+[implementations] may be *parameterized* by types, constants, and lifetimes. These
+parameters are listed in angle <span class="parenthetical">brackets (`<...>`)</span>,
+usually immediately after the name of the item and before its definition. For
+implementations, which don't have a name, they come directly after `impl`.
+The order of generic parameters is restricted to lifetime parameters and then type and const parameters intermixed.
+
+Some examples of items with type, const, and lifetime parameters:
+
+```rust
+fn foo<'a, T>() {}
+trait A<U> {}
+struct Ref<'a, T> where T: 'a { r: &'a T }
+struct InnerArray<T, const N: usize>([T; N]);
+struct EitherOrderWorks<const N: bool, U>(U);
+```
+
+Generic parameters are in scope within the item definition where they are
+declared. They are not in scope for items declared within the body of a
+function as described in [item declarations].
+
+[References], [raw pointers], [arrays], [slices], [tuples], and
+[function pointers] have lifetime or type parameters as well, but are not
+referred to with path syntax.
+
+### Const generics
+
+*Const generic parameters* allow items to be generic over constant values. The
+const identifier introduces a name for the constant parameter, and all
+instances of the item must be instantiated with a value of the given type.
+
+<!-- TODO: update above to say "introduces a name in the [value namespace]"
+ once namespaces are added. -->
+
+The only allowed types of const parameters are `u8`, `u16`, `u32`, `u64`, `u128`, `usize`
+`i8`, `i16`, `i32`, `i64`, `i128`, `isize`, `char` and `bool`.
+
+Const parameters can be used anywhere a [const item] can be used, with the
+exception that when used in a [type] or [array repeat expression], it must be
+standalone (as described below). That is, they are allowed in the following
+places:
+
+1. As an applied const to any type which forms a part of the signature of the
+ item in question.
+2. As part of a const expression used to define an [associated const], or as a
+ parameter to an [associated type].
+3. As a value in any runtime expression in the body of any functions in the
+ item.
+4. As a parameter to any type used in the body of any functions in the item.
+5. As a part of the type of any fields in the item.
+
+```rust
+// Examples where const generic parameters can be used.
+
+// Used in the signature of the item itself.
+fn foo<const N: usize>(arr: [i32; N]) {
+ // Used as a type within a function body.
+ let x: [i32; N];
+ // Used as an expression.
+ println!("{}", N * 2);
+}
+
+// Used as a field of a struct.
+struct Foo<const N: usize>([i32; N]);
+
+impl<const N: usize> Foo<N> {
+ // Used as an associated constant.
+ const CONST: usize = N * 4;
+}
+
+trait Trait {
+ type Output;
+}
+
+impl<const N: usize> Trait for Foo<N> {
+ // Used as an associated type.
+ type Output = [i32; N];
+}
+```
+
+```rust,compile_fail
+// Examples where const generic parameters cannot be used.
+fn foo<const N: usize>() {
+ // Cannot use in item definitions within a function body.
+ const BAD_CONST: [usize; N] = [1; N];
+ static BAD_STATIC: [usize; N] = [1; N];
+ fn inner(bad_arg: [usize; N]) {
+ let bad_value = N * 2;
+ }
+ type BadAlias = [usize; N];
+ struct BadStruct([usize; N]);
+}
+```
+
+As a further restriction, const parameters may only appear as a standalone
+argument inside of a [type] or [array repeat expression]. In those contexts,
+they may only be used as a single segment [path expression], possibly inside a
+[block] (such as `N` or `{N}`). That is, they cannot be combined with other
+expressions.
+
+```rust,compile_fail
+// Examples where const parameters may not be used.
+
+// Not allowed to combine in other expressions in types, such as the
+// arithmetic expression in the return type here.
+fn bad_function<const N: usize>() -> [u8; {N + 1}] {
+ // Similarly not allowed for array repeat expressions.
+ [1; {N + 1}]
+}
+```
+
+A const argument in a [path] specifies the const value to use for that item.
+The argument must be a [const expression] of the type ascribed to the const
+parameter. The const expression must be a [block expression][block]
+(surrounded with braces) unless it is a single path segment (an [IDENTIFIER])
+or a [literal] (with a possibly leading `-` token).
+
+> **Note**: This syntactic restriction is necessary to avoid requiring
+> infinite lookahead when parsing an expression inside of a type.
+
+```rust
+fn double<const N: i32>() {
+ println!("doubled: {}", N * 2);
+}
+
+const SOME_CONST: i32 = 12;
+
+fn example() {
+ // Example usage of a const argument.
+ double::<9>();
+ double::<-123>();
+ double::<{7 + 8}>();
+ double::<SOME_CONST>();
+ double::<{ SOME_CONST + 5 }>();
+}
+```
+
+When there is ambiguity if a generic argument could be resolved as either a
+type or const argument, it is always resolved as a type. Placing the argument
+in a block expression can force it to be interpreted as a const argument.
+
+<!-- TODO: Rewrite the paragraph above to be in terms of namespaces, once
+ namespaces are introduced, and it is clear which namespace each parameter
+ lives in. -->
+
+```rust,compile_fail
+type N = u32;
+struct Foo<const N: usize>;
+// The following is an error, because `N` is interpreted as the type alias `N`.
+fn foo<const N: usize>() -> Foo<N> { todo!() } // ERROR
+// Can be fixed by wrapping in braces to force it to be interpreted as the `N`
+// const parameter:
+fn bar<const N: usize>() -> Foo<{ N }> { todo!() } // ok
+```
+
+Unlike type and lifetime parameters, const parameters can be declared without
+being used inside of a parameterized item, with the exception of
+implementations as described in [generic implementations]:
+
+```rust,compile_fail
+// ok
+struct Foo<const N: usize>;
+enum Bar<const M: usize> { A, B }
+
+// ERROR: unused parameter
+struct Baz<T>;
+struct Biz<'a>;
+struct Unconstrained;
+impl<const N: usize> Unconstrained {}
+```
+
+When resolving a trait bound obligation, the exhaustiveness of all
+implementations of const parameters is not considered when determining if the
+bound is satisfied. For example, in the following, even though all possible
+const values for the `bool` type are implemented, it is still an error that
+the trait bound is not satisfied:
+
+```rust,compile_fail
+struct Foo<const B: bool>;
+trait Bar {}
+impl Bar for Foo<true> {}
+impl Bar for Foo<false> {}
+
+fn needs_bar(_: impl Bar) {}
+fn generic<const B: bool>() {
+ let v = Foo::<B>;
+ needs_bar(v); // ERROR: trait bound `Foo<B>: Bar` is not satisfied
+}
+```
+
+
+## Where clauses
+
+> **<sup>Syntax</sup>**\
+> _WhereClause_ :\
+> &nbsp;&nbsp; `where` ( _WhereClauseItem_ `,` )<sup>\*</sup> _WhereClauseItem_ <sup>?</sup>
+>
+> _WhereClauseItem_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _LifetimeWhereClauseItem_\
+> &nbsp;&nbsp; | _TypeBoundWhereClauseItem_
+>
+> _LifetimeWhereClauseItem_ :\
+> &nbsp;&nbsp; [_Lifetime_] `:` [_LifetimeBounds_]
+>
+> _TypeBoundWhereClauseItem_ :\
+> &nbsp;&nbsp; [_ForLifetimes_]<sup>?</sup> [_Type_] `:` [_TypeParamBounds_]<sup>?</sup>
+
+*Where clauses* provide another way to specify bounds on type and lifetime
+parameters as well as a way to specify bounds on types that aren't type
+parameters.
+
+The `for` keyword can be used to introduce [higher-ranked lifetimes]. It only
+allows [_LifetimeParam_] parameters.
+
+```rust
+struct A<T>
+where
+ T: Iterator, // Could use A<T: Iterator> instead
+ T::Item: Copy, // Bound on an associated type
+ String: PartialEq<T>, // Bound on `String`, using the type parameter
+ i32: Default, // Allowed, but not useful
+{
+ f: T,
+}
+```
+
+## Attributes
+
+Generic lifetime and type parameters allow [attributes] on them. There are no
+built-in attributes that do anything in this position, although custom derive
+attributes may give meaning to it.
+
+This example shows using a custom derive attribute to modify the meaning of a
+generic parameter.
+
+<!-- ignore: requires proc macro derive -->
+```rust,ignore
+// Assume that the derive for MyFlexibleClone declared `my_flexible_clone` as
+// an attribute it understands.
+#[derive(MyFlexibleClone)]
+struct Foo<#[my_flexible_clone(unbounded)] H> {
+ a: *const H
+}
+```
+
+[IDENTIFIER]: ../identifiers.md
+[LIFETIME_OR_LABEL]: ../tokens.md#lifetimes-and-loop-labels
+
+[_ForLifetimes_]: ../trait-bounds.md#higher-ranked-trait-bounds
+[_LifetimeParam_]: #generic-parameters
+[_LifetimeBounds_]: ../trait-bounds.md
+[_Lifetime_]: ../trait-bounds.md
+[_OuterAttribute_]: ../attributes.md
+[_Type_]: ../types.md#type-expressions
+[_TypeParamBounds_]: ../trait-bounds.md
+
+[array repeat expression]: ../expressions/array-expr.md
+[arrays]: ../types/array.md
+[slices]: ../types/slice.md
+[associated const]: associated-items.md#associated-constants
+[associated type]: associated-items.md#associated-types
+[block]: ../expressions/block-expr.md
+[const contexts]: ../const_eval.md#const-context
+[const expression]: ../const_eval.md#constant-expressions
+[const item]: constant-items.md
+[enumerations]: enumerations.md
+[functions]: functions.md
+[function pointers]: ../types/function-pointer.md
+[generic implementations]: implementations.md#generic-implementations
+[higher-ranked lifetimes]: ../trait-bounds.md#higher-ranked-trait-bounds
+[implementations]: implementations.md
+[item declarations]: ../statements.md#item-declarations
+[item]: ../items.md
+[literal]: ../expressions/literal-expr.md
+[path]: ../paths.md
+[path expression]: ../expressions/path-expr.md
+[raw pointers]: ../types/pointer.md#raw-pointers-const-and-mut
+[references]: ../types/pointer.md#shared-references-
+[structs]: structs.md
+[tuples]: ../types/tuple.md
+[trait object]: ../types/trait-object.md
+[traits]: traits.md
+[type aliases]: type-aliases.md
+[type]: ../types.md
+[unions]: unions.md
+[attributes]: ../attributes.md
diff --git a/src/doc/reference/src/items/implementations.md b/src/doc/reference/src/items/implementations.md
new file mode 100644
index 000000000..ee651cee5
--- /dev/null
+++ b/src/doc/reference/src/items/implementations.md
@@ -0,0 +1,295 @@
+# Implementations
+
+> **<sup>Syntax</sup>**\
+> _Implementation_ :\
+> &nbsp;&nbsp; _InherentImpl_ | _TraitImpl_
+>
+> _InherentImpl_ :\
+> &nbsp;&nbsp; `impl` [_GenericParams_]<sup>?</sup>&nbsp;[_Type_]&nbsp;[_WhereClause_]<sup>?</sup> `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_AssociatedItem_]<sup>\*</sup>\
+> &nbsp;&nbsp; `}`
+>
+> _TraitImpl_ :\
+> &nbsp;&nbsp; `unsafe`<sup>?</sup> `impl` [_GenericParams_]<sup>?</sup> `!`<sup>?</sup>
+> [_TypePath_] `for` [_Type_]\
+> &nbsp;&nbsp; [_WhereClause_]<sup>?</sup>\
+> &nbsp;&nbsp; `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_AssociatedItem_]<sup>\*</sup>\
+> &nbsp;&nbsp; `}`
+
+An _implementation_ is an item that associates items with an _implementing type_.
+Implementations are defined with the keyword `impl` and contain functions
+that belong to an instance of the type that is being implemented or to the
+type statically.
+
+There are two types of implementations:
+
+- inherent implementations
+- [trait] implementations
+
+## Inherent Implementations
+
+An inherent implementation is defined as the sequence of the `impl` keyword,
+generic type declarations, a path to a nominal type, a where clause, and a
+bracketed set of associable items.
+
+The nominal type is called the _implementing type_ and the associable items are
+the _associated items_ to the implementing type.
+
+Inherent implementations associate the contained items to the
+implementing type. Inherent implementations can contain [associated
+functions] (including [methods]) and [associated constants]. They cannot
+contain associated type aliases.
+
+The [path] to an associated item is any path to the implementing type,
+followed by the associated item's identifier as the final path
+component.
+
+A type can also have multiple inherent implementations. An implementing type
+must be defined within the same crate as the original type definition.
+
+``` rust
+pub mod color {
+ pub struct Color(pub u8, pub u8, pub u8);
+
+ impl Color {
+ pub const WHITE: Color = Color(255, 255, 255);
+ }
+}
+
+mod values {
+ use super::color::Color;
+ impl Color {
+ pub fn red() -> Color {
+ Color(255, 0, 0)
+ }
+ }
+}
+
+pub use self::color::Color;
+fn main() {
+ // Actual path to the implementing type and impl in the same module.
+ color::Color::WHITE;
+
+ // Impl blocks in different modules are still accessed through a path to the type.
+ color::Color::red();
+
+ // Re-exported paths to the implementing type also work.
+ Color::red();
+
+ // Does not work, because use in `values` is not pub.
+ // values::Color::red();
+}
+```
+
+## Trait Implementations
+
+A _trait implementation_ is defined like an inherent implementation except that
+the optional generic type declarations are followed by a [trait], followed
+by the keyword `for`, followed by a path to a nominal type.
+
+<!-- To understand this, you have to back-reference to the previous section. :( -->
+
+The trait is known as the _implemented trait_. The implementing type
+implements the implemented trait.
+
+A trait implementation must define all non-default associated items declared
+by the implemented trait, may redefine default associated items defined by the
+implemented trait, and cannot define any other items.
+
+The path to the associated items is `<` followed by a path to the implementing
+type followed by `as` followed by a path to the trait followed by `>` as a path
+component followed by the associated item's path component.
+
+[Unsafe traits] require the trait implementation to begin with the `unsafe`
+keyword.
+
+```rust
+# #[derive(Copy, Clone)]
+# struct Point {x: f64, y: f64};
+# type Surface = i32;
+# struct BoundingBox {x: f64, y: f64, width: f64, height: f64};
+# trait Shape { fn draw(&self, s: Surface); fn bounding_box(&self) -> BoundingBox; }
+# fn do_draw_circle(s: Surface, c: Circle) { }
+struct Circle {
+ radius: f64,
+ center: Point,
+}
+
+impl Copy for Circle {}
+
+impl Clone for Circle {
+ fn clone(&self) -> Circle { *self }
+}
+
+impl Shape for Circle {
+ fn draw(&self, s: Surface) { do_draw_circle(s, *self); }
+ fn bounding_box(&self) -> BoundingBox {
+ let r = self.radius;
+ BoundingBox {
+ x: self.center.x - r,
+ y: self.center.y - r,
+ width: 2.0 * r,
+ height: 2.0 * r,
+ }
+ }
+}
+```
+
+### Trait Implementation Coherence
+
+A trait implementation is considered incoherent if either the orphan rules check fails
+or there are overlapping implementation instances.
+
+Two trait implementations overlap when there is a non-empty intersection of the
+traits the implementation is for, the implementations can be instantiated with
+the same type. <!-- This is probably wrong? Source: No two implementations can
+be instantiable with the same set of types for the input type parameters. -->
+
+#### Orphan rules
+
+Given `impl<P1..=Pn> Trait<T1..=Tn> for T0`, an `impl` is valid only if at
+least one of the following is true:
+
+- `Trait` is a [local trait]
+- All of
+ - At least one of the types `T0..=Tn` must be a [local type]. Let `Ti` be the
+ first such type.
+ - No [uncovered type] parameters `P1..=Pn` may appear in `T0..Ti` (excluding
+ `Ti`)
+
+Only the appearance of *uncovered* type parameters is restricted.
+Note that for the purposes of coherence, [fundamental types] are
+special. The `T` in `Box<T>` is not considered covered, and `Box<LocalType>`
+is considered local.
+
+
+## Generic Implementations
+
+An implementation can take [generic parameters], which can be used in the rest
+of the implementation. Implementation parameters are written directly after the
+`impl` keyword.
+
+```rust
+# trait Seq<T> { fn dummy(&self, _: T) { } }
+impl<T> Seq<T> for Vec<T> {
+ /* ... */
+}
+impl Seq<bool> for u32 {
+ /* Treat the integer as a sequence of bits */
+}
+```
+
+Generic parameters *constrain* an implementation if the parameter appears at
+least once in one of:
+
+* The implemented trait, if it has one
+* The implementing type
+* As an [associated type] in the [bounds] of a type that contains another
+ parameter that constrains the implementation
+
+Type and const parameters must always constrain the implementation. Lifetimes
+must constrain the implementation if the lifetime is used in an associated type.
+
+Examples of constraining situations:
+
+```rust
+# trait Trait{}
+# trait GenericTrait<T> {}
+# trait HasAssocType { type Ty; }
+# struct Struct;
+# struct GenericStruct<T>(T);
+# struct ConstGenericStruct<const N: usize>([(); N]);
+// T constrains by being an argument to GenericTrait.
+impl<T> GenericTrait<T> for i32 { /* ... */ }
+
+// T constrains by being an arguement to GenericStruct
+impl<T> Trait for GenericStruct<T> { /* ... */ }
+
+// Likewise, N constrains by being an argument to ConstGenericStruct
+impl<const N: usize> Trait for ConstGenericStruct<N> { /* ... */ }
+
+// T constrains by being in an associated type in a bound for type `U` which is
+// itself a generic parameter constraining the trait.
+impl<T, U> GenericTrait<U> for u32 where U: HasAssocType<Ty = T> { /* ... */ }
+
+// Like previous, except the type is `(U, isize)`. `U` appears inside the type
+// that includes `T`, and is not the type itself.
+impl<T, U> GenericStruct<U> where (U, isize): HasAssocType<Ty = T> { /* ... */ }
+```
+
+Examples of non-constraining situations:
+
+```rust,compile_fail
+// The rest of these are errors, since they have type or const parameters that
+// do not constrain.
+
+// T does not constrain since it does not appear at all.
+impl<T> Struct { /* ... */ }
+
+// N does not constrain for the same reason.
+impl<const N: usize> Struct { /* ... */ }
+
+// Usage of T inside the implementation does not constrain the impl.
+impl<T> Struct {
+ fn uses_t(t: &T) { /* ... */ }
+}
+
+// T is used as an associated type in the bounds for U, but U does not constrain.
+impl<T, U> Struct where U: HasAssocType<Ty = T> { /* ... */ }
+
+// T is used in the bounds, but not as an associated type, so it does not constrain.
+impl<T, U> GenericTrait<U> for u32 where U: GenericTrait<T> {}
+```
+
+Example of an allowed unconstraining lifetime parameter:
+
+```rust
+# struct Struct;
+impl<'a> Struct {}
+```
+
+Example of a disallowed unconstraining lifetime parameter:
+
+```rust,compile_fail
+# struct Struct;
+# trait HasAssocType { type Ty; }
+impl<'a> HasAssocType for Struct {
+ type Ty = &'a Struct;
+}
+```
+
+## Attributes on Implementations
+
+Implementations may contain outer [attributes] before the `impl` keyword and
+inner [attributes] inside the brackets that contain the associated items. Inner
+attributes must come before any associated items. The attributes that have
+meaning here are [`cfg`], [`deprecated`], [`doc`], and [the lint check
+attributes].
+
+[_AssociatedItem_]: associated-items.md
+[_GenericParams_]: generics.md
+[_InnerAttribute_]: ../attributes.md
+[_TypePath_]: ../paths.md#paths-in-types
+[_Type_]: ../types.md#type-expressions
+[_WhereClause_]: generics.md#where-clauses
+[trait]: traits.md
+[associated constants]: associated-items.md#associated-constants
+[associated functions]: associated-items.md#associated-functions-and-methods
+[associated type]: associated-items.md#associated-types
+[attributes]: ../attributes.md
+[bounds]: ../trait-bounds.md
+[`cfg`]: ../conditional-compilation.md
+[`deprecated`]: ../attributes/diagnostics.md#the-deprecated-attribute
+[`doc`]: ../../rustdoc/the-doc-attribute.html
+[generic parameters]: generics.md
+[methods]: associated-items.md#methods
+[path]: ../paths.md
+[the lint check attributes]: ../attributes/diagnostics.md#lint-check-attributes
+[Unsafe traits]: traits.md#unsafe-traits
+[local trait]: ../glossary.md#local-trait
+[local type]: ../glossary.md#local-type
+[fundamental types]: ../glossary.md#fundamental-type-constructors
+[uncovered type]: ../glossary.md#uncovered-type
diff --git a/src/doc/reference/src/items/modules.md b/src/doc/reference/src/items/modules.md
new file mode 100644
index 000000000..2a0ad55c5
--- /dev/null
+++ b/src/doc/reference/src/items/modules.md
@@ -0,0 +1,166 @@
+# Modules
+
+> **<sup>Syntax:</sup>**\
+> _Module_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `unsafe`<sup>?</sup> `mod` [IDENTIFIER] `;`\
+> &nbsp;&nbsp; | `unsafe`<sup>?</sup> `mod` [IDENTIFIER] `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; [_Item_]<sup>\*</sup>\
+> &nbsp;&nbsp; &nbsp;&nbsp; `}`
+
+A module is a container for zero or more [items].
+
+A _module item_ is a module, surrounded in braces, named, and prefixed with the
+keyword `mod`. A module item introduces a new, named module into the tree of
+modules making up a crate. Modules can nest arbitrarily.
+
+An example of a module:
+
+```rust
+mod math {
+ type Complex = (f64, f64);
+ fn sin(f: f64) -> f64 {
+ /* ... */
+# unimplemented!();
+ }
+ fn cos(f: f64) -> f64 {
+ /* ... */
+# unimplemented!();
+ }
+ fn tan(f: f64) -> f64 {
+ /* ... */
+# unimplemented!();
+ }
+}
+```
+
+Modules and types share the same namespace. Declaring a named type with the
+same name as a module in scope is forbidden: that is, a type definition, trait,
+struct, enumeration, union, type parameter or crate can't shadow the name of a
+module in scope, or vice versa. Items brought into scope with `use` also have
+this restriction.
+
+The `unsafe` keyword is syntactically allowed to appear before the `mod`
+keyword, but it is rejected at a semantic level. This allows macros to consume
+the syntax and make use of the `unsafe` keyword, before removing it from the
+token stream.
+
+## Module Source Filenames
+
+A module without a body is loaded from an external file. When the module does
+not have a `path` attribute, the path to the file mirrors the logical [module
+path]. Ancestor module path components are directories, and the module's
+contents are in a file with the name of the module plus the `.rs` extension.
+For example, the following module structure can have this corresponding
+filesystem structure:
+
+Module Path | Filesystem Path | File Contents
+------------------------- | --------------- | -------------
+`crate` | `lib.rs` | `mod util;`
+`crate::util` | `util.rs` | `mod config;`
+`crate::util::config` | `util/config.rs` |
+
+Module filenames may also be the name of the module as a directory with the
+contents in a file named `mod.rs` within that directory. The above example can
+alternately be expressed with `crate::util`'s contents in a file named
+`util/mod.rs`. It is not allowed to have both `util.rs` and `util/mod.rs`.
+
+> **Note**: Prior to `rustc` 1.30, using `mod.rs` files was the way to load
+> a module with nested children. It is encouraged to use the new naming
+> convention as it is more consistent, and avoids having many files named
+> `mod.rs` within a project.
+
+### The `path` attribute
+
+The directories and files used for loading external file modules can be
+influenced with the `path` attribute.
+
+For `path` attributes on modules not inside inline module blocks, the file
+path is relative to the directory the source file is located. For example, the
+following code snippet would use the paths shown based on where it is located:
+
+<!-- ignore: requires external files -->
+```rust,ignore
+#[path = "foo.rs"]
+mod c;
+```
+
+Source File | `c`'s File Location | `c`'s Module Path
+-------------- | ------------------- | ----------------------
+`src/a/b.rs` | `src/a/foo.rs` | `crate::a::b::c`
+`src/a/mod.rs` | `src/a/foo.rs` | `crate::a::c`
+
+For `path` attributes inside inline module blocks, the relative location of
+the file path depends on the kind of source file the `path` attribute is
+located in. "mod-rs" source files are root modules (such as `lib.rs` or
+`main.rs`) and modules with files named `mod.rs`. "non-mod-rs" source files
+are all other module files. Paths for `path` attributes inside inline module
+blocks in a mod-rs file are relative to the directory of the mod-rs file
+including the inline module components as directories. For non-mod-rs files,
+it is the same except the path starts with a directory with the name of the
+non-mod-rs module. For example, the following code snippet would use the paths
+shown based on where it is located:
+
+<!-- ignore: requires external files -->
+```rust,ignore
+mod inline {
+ #[path = "other.rs"]
+ mod inner;
+}
+```
+
+Source File | `inner`'s File Location | `inner`'s Module Path
+-------------- | --------------------------| ----------------------------
+`src/a/b.rs` | `src/a/b/inline/other.rs` | `crate::a::b::inline::inner`
+`src/a/mod.rs` | `src/a/inline/other.rs` | `crate::a::inline::inner`
+
+An example of combining the above rules of `path` attributes on inline modules
+and nested modules within (applies to both mod-rs and non-mod-rs files):
+
+<!-- ignore: requires external files -->
+```rust,ignore
+#[path = "thread_files"]
+mod thread {
+ // Load the `local_data` module from `thread_files/tls.rs` relative to
+ // this source file's directory.
+ #[path = "tls.rs"]
+ mod local_data;
+}
+```
+
+## Attributes on Modules
+
+Modules, like all items, accept outer attributes. They also accept inner
+attributes: either after `{` for a module with a body, or at the beginning of the
+source file, after the optional BOM and shebang.
+
+The built-in attributes that have meaning on a module are [`cfg`],
+[`deprecated`], [`doc`], [the lint check attributes], [`path`], and
+[`no_implicit_prelude`]. Modules also accept macro attributes.
+
+[_InnerAttribute_]: ../attributes.md
+[_Item_]: ../items.md
+[`cfg`]: ../conditional-compilation.md
+[`deprecated`]: ../attributes/diagnostics.md#the-deprecated-attribute
+[`doc`]: ../../rustdoc/the-doc-attribute.html
+[`no_implicit_prelude`]: ../names/preludes.md#the-no_implicit_prelude-attribute
+[`path`]: #the-path-attribute
+[IDENTIFIER]: ../identifiers.md
+[attribute]: ../attributes.md
+[items]: ../items.md
+[module path]: ../paths.md
+[the lint check attributes]: ../attributes/diagnostics.md#lint-check-attributes
+
+<script>
+(function() {
+ var fragments = {
+ "#prelude-items": "../names/preludes.html",
+ };
+ var target = fragments[window.location.hash];
+ if (target) {
+ var url = window.location.toString();
+ var base = url.substring(0, url.lastIndexOf('/'));
+ window.location.replace(base + "/" + target);
+ }
+})();
+</script>
diff --git a/src/doc/reference/src/items/static-items.md b/src/doc/reference/src/items/static-items.md
new file mode 100644
index 000000000..e543b4fa6
--- /dev/null
+++ b/src/doc/reference/src/items/static-items.md
@@ -0,0 +1,131 @@
+# Static items
+
+> **<sup>Syntax</sup>**\
+> _StaticItem_ :\
+> &nbsp;&nbsp; `static` `mut`<sup>?</sup> [IDENTIFIER] `:` [_Type_]
+> ( `=` [_Expression_] )<sup>?</sup> `;`
+
+A *static item* is similar to a [constant], except that it represents a precise
+memory location in the program. All references to the static refer to the same
+memory location. Static items have the `static` lifetime, which outlives all
+other lifetimes in a Rust program. Static items do not call [`drop`] at the
+end of the program.
+
+The static initializer is a [constant expression] evaluated at compile time.
+Static initializers may refer to other statics.
+
+Non-`mut` static items that contain a type that is not [interior mutable] may
+be placed in read-only memory.
+
+All access to a static is safe, but there are a number of restrictions on
+statics:
+
+* The type must have the `Sync` trait bound to allow thread-safe access.
+* Constants cannot refer to statics.
+
+The initializer expression must be omitted in an [external block], and must be
+provided for free static items.
+
+## Statics & generics
+
+A static item defined in a generic scope (for example in a blanket or default
+implementation) will result in exactly one static item being defined, as if
+the static definition was pulled out of the current scope into the module.
+There will *not* be one item per monomorphization.
+
+This code:
+
+```rust
+use std::sync::atomic::{AtomicUsize, Ordering};
+
+trait Tr {
+ fn default_impl() {
+ static COUNTER: AtomicUsize = AtomicUsize::new(0);
+ println!("default_impl: counter was {}", COUNTER.fetch_add(1, Ordering::Relaxed));
+ }
+
+ fn blanket_impl();
+}
+
+struct Ty1 {}
+struct Ty2 {}
+
+impl<T> Tr for T {
+ fn blanket_impl() {
+ static COUNTER: AtomicUsize = AtomicUsize::new(0);
+ println!("blanket_impl: counter was {}", COUNTER.fetch_add(1, Ordering::Relaxed));
+ }
+}
+
+fn main() {
+ <Ty1 as Tr>::default_impl();
+ <Ty2 as Tr>::default_impl();
+ <Ty1 as Tr>::blanket_impl();
+ <Ty2 as Tr>::blanket_impl();
+}
+```
+
+prints
+
+```text
+default_impl: counter was 0
+default_impl: counter was 1
+blanket_impl: counter was 0
+blanket_impl: counter was 1
+```
+
+## Mutable statics
+
+If a static item is declared with the `mut` keyword, then it is allowed to be
+modified by the program. One of Rust's goals is to make concurrency bugs hard
+to run into, and this is obviously a very large source of race conditions or
+other bugs. For this reason, an `unsafe` block is required when either reading
+or writing a mutable static variable. Care should be taken to ensure that
+modifications to a mutable static are safe with respect to other threads
+running in the same process.
+
+Mutable statics are still very useful, however. They can be used with C
+libraries and can also be bound from C libraries in an `extern` block.
+
+```rust
+# fn atomic_add(_: &mut u32, _: u32) -> u32 { 2 }
+
+static mut LEVELS: u32 = 0;
+
+// This violates the idea of no shared state, and this doesn't internally
+// protect against races, so this function is `unsafe`
+unsafe fn bump_levels_unsafe1() -> u32 {
+ let ret = LEVELS;
+ LEVELS += 1;
+ return ret;
+}
+
+// Assuming that we have an atomic_add function which returns the old value,
+// this function is "safe" but the meaning of the return value may not be what
+// callers expect, so it's still marked as `unsafe`
+unsafe fn bump_levels_unsafe2() -> u32 {
+ return atomic_add(&mut LEVELS, 1);
+}
+```
+
+Mutable statics have the same restrictions as normal statics, except that the
+type does not have to implement the `Sync` trait.
+
+## Using Statics or Consts
+
+It can be confusing whether or not you should use a constant item or a static
+item. Constants should, in general, be preferred over statics unless one of the
+following are true:
+
+* Large amounts of data are being stored
+* The single-address property of statics is required.
+* Interior mutability is required.
+
+[constant]: constant-items.md
+[`drop`]: ../destructors.md
+[constant expression]: ../const_eval.md#constant-expressions
+[external block]: external-blocks.md
+[interior mutable]: ../interior-mutability.md
+[IDENTIFIER]: ../identifiers.md
+[_Type_]: ../types.md#type-expressions
+[_Expression_]: ../expressions.md
diff --git a/src/doc/reference/src/items/structs.md b/src/doc/reference/src/items/structs.md
new file mode 100644
index 000000000..9523e7bfb
--- /dev/null
+++ b/src/doc/reference/src/items/structs.md
@@ -0,0 +1,88 @@
+# Structs
+
+> **<sup>Syntax</sup>**\
+> _Struct_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _StructStruct_\
+> &nbsp;&nbsp; | _TupleStruct_
+>
+> _StructStruct_ :\
+> &nbsp;&nbsp; `struct`
+> [IDENTIFIER]&nbsp;
+> [_GenericParams_]<sup>?</sup>
+> [_WhereClause_]<sup>?</sup>
+> ( `{` _StructFields_<sup>?</sup> `}` | `;` )
+>
+> _TupleStruct_ :\
+> &nbsp;&nbsp; `struct`
+> [IDENTIFIER]&nbsp;
+> [_GenericParams_]<sup>?</sup>
+> `(` _TupleFields_<sup>?</sup> `)`
+> [_WhereClause_]<sup>?</sup>
+> `;`
+>
+> _StructFields_ :\
+> &nbsp;&nbsp; _StructField_ (`,` _StructField_)<sup>\*</sup> `,`<sup>?</sup>
+>
+> _StructField_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; [_Visibility_]<sup>?</sup>\
+> &nbsp;&nbsp; [IDENTIFIER] `:` [_Type_]
+>
+> _TupleFields_ :\
+> &nbsp;&nbsp; _TupleField_ (`,` _TupleField_)<sup>\*</sup> `,`<sup>?</sup>
+>
+> _TupleField_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp; [_Visibility_]<sup>?</sup>\
+> &nbsp;&nbsp; [_Type_]
+
+A _struct_ is a nominal [struct type] defined with the keyword `struct`.
+
+An example of a `struct` item and its use:
+
+```rust
+struct Point {x: i32, y: i32}
+let p = Point {x: 10, y: 11};
+let px: i32 = p.x;
+```
+
+A _tuple struct_ is a nominal [tuple type], also defined with the keyword
+`struct`. For example:
+
+[struct type]: ../types/struct.md
+[tuple type]: ../types/tuple.md
+
+```rust
+struct Point(i32, i32);
+let p = Point(10, 11);
+let px: i32 = match p { Point(x, _) => x };
+```
+
+A _unit-like struct_ is a struct without any fields, defined by leaving off the
+list of fields entirely. Such a struct implicitly defines a constant of its
+type with the same name. For example:
+
+```rust
+struct Cookie;
+let c = [Cookie, Cookie {}, Cookie, Cookie {}];
+```
+
+is equivalent to
+
+```rust
+struct Cookie {}
+const Cookie: Cookie = Cookie {};
+let c = [Cookie, Cookie {}, Cookie, Cookie {}];
+```
+
+The precise memory layout of a struct is not specified. One can specify a
+particular layout using the [`repr` attribute].
+
+[`repr` attribute]: ../type-layout.md#representations
+
+[_OuterAttribute_]: ../attributes.md
+[IDENTIFIER]: ../identifiers.md
+[_GenericParams_]: generics.md
+[_WhereClause_]: generics.md#where-clauses
+[_Visibility_]: ../visibility-and-privacy.md
+[_Type_]: ../types.md#type-expressions
diff --git a/src/doc/reference/src/items/traits.md b/src/doc/reference/src/items/traits.md
new file mode 100644
index 000000000..26870a0fc
--- /dev/null
+++ b/src/doc/reference/src/items/traits.md
@@ -0,0 +1,343 @@
+# Traits
+
+> **<sup>Syntax</sup>**\
+> _Trait_ :\
+> &nbsp;&nbsp; `unsafe`<sup>?</sup> `trait` [IDENTIFIER]&nbsp;
+> [_GenericParams_]<sup>?</sup>
+> ( `:` [_TypeParamBounds_]<sup>?</sup> )<sup>?</sup>
+> [_WhereClause_]<sup>?</sup> `{`\
+> &nbsp;&nbsp;&nbsp;&nbsp; [_InnerAttribute_]<sup>\*</sup>\
+> &nbsp;&nbsp;&nbsp;&nbsp; [_AssociatedItem_]<sup>\*</sup>\
+> &nbsp;&nbsp; `}`
+
+A _trait_ describes an abstract interface that types can implement. This
+interface consists of [associated items], which come in three varieties:
+
+- [functions](associated-items.md#associated-functions-and-methods)
+- [types](associated-items.md#associated-types)
+- [constants](associated-items.md#associated-constants)
+
+All traits define an implicit type parameter `Self` that refers to "the type
+that is implementing this interface". Traits may also contain additional type
+parameters. These type parameters, including `Self`, may be constrained by
+other traits and so forth [as usual][generics].
+
+Traits are implemented for specific types through separate [implementations].
+
+Trait functions may omit the function body by replacing it with a semicolon.
+This indicates that the implementation must define the function. If the trait
+function defines a body, this definition acts as a default for any
+implementation which does not override it. Similarly, associated constants may
+omit the equals sign and expression to indicate implementations must define
+the constant value. Associated types must never define the type, the type may
+only be specified in an implementation.
+
+```rust
+// Examples of associated trait items with and without definitions.
+trait Example {
+ const CONST_NO_DEFAULT: i32;
+ const CONST_WITH_DEFAULT: i32 = 99;
+ type TypeNoDefault;
+ fn method_without_default(&self);
+ fn method_with_default(&self) {}
+}
+```
+
+Trait functions are not allowed to be [`async`] or [`const`].
+
+## Trait bounds
+
+Generic items may use traits as [bounds] on their type parameters.
+
+## Generic Traits
+
+Type parameters can be specified for a trait to make it generic. These appear
+after the trait name, using the same syntax used in [generic functions].
+
+```rust
+trait Seq<T> {
+ fn len(&self) -> u32;
+ fn elt_at(&self, n: u32) -> T;
+ fn iter<F>(&self, f: F) where F: Fn(T);
+}
+```
+
+## Object Safety
+
+Object safe traits can be the base trait of a [trait object]. A trait is
+*object safe* if it has the following qualities (defined in [RFC 255]):
+
+* All [supertraits] must also be object safe.
+* `Sized` must not be a [supertrait][supertraits]. In other words, it must not require `Self: Sized`.
+* It must not have any associated constants.
+* All associated functions must either be dispatchable from a trait object or be explicitly non-dispatchable:
+ * Dispatchable functions require:
+ * Not have any type parameters (although lifetime parameters are allowed),
+ * Be a [method] that does not use `Self` except in the type of the receiver.
+ * Have a receiver with one of the following types:
+ * `&Self` (i.e. `&self`)
+ * `&mut Self` (i.e `&mut self`)
+ * [`Box<Self>`]
+ * [`Rc<Self>`]
+ * [`Arc<Self>`]
+ * [`Pin<P>`] where `P` is one of the types above
+ * Does not have a `where Self: Sized` bound (receiver type of `Self` (i.e. `self`) implies this).
+ * Explicitly non-dispatchable functions require:
+ * Have a `where Self: Sized` bound (receiver type of `Self` (i.e. `self`) implies this).
+
+```rust
+# use std::rc::Rc;
+# use std::sync::Arc;
+# use std::pin::Pin;
+// Examples of object safe methods.
+trait TraitMethods {
+ fn by_ref(self: &Self) {}
+ fn by_ref_mut(self: &mut Self) {}
+ fn by_box(self: Box<Self>) {}
+ fn by_rc(self: Rc<Self>) {}
+ fn by_arc(self: Arc<Self>) {}
+ fn by_pin(self: Pin<&Self>) {}
+ fn with_lifetime<'a>(self: &'a Self) {}
+ fn nested_pin(self: Pin<Arc<Self>>) {}
+}
+# struct S;
+# impl TraitMethods for S {}
+# let t: Box<dyn TraitMethods> = Box::new(S);
+```
+
+```rust,compile_fail
+// This trait is object-safe, but these methods cannot be dispatched on a trait object.
+trait NonDispatchable {
+ // Non-methods cannot be dispatched.
+ fn foo() where Self: Sized {}
+ // Self type isn't known until runtime.
+ fn returns(&self) -> Self where Self: Sized;
+ // `other` may be a different concrete type of the receiver.
+ fn param(&self, other: Self) where Self: Sized {}
+ // Generics are not compatible with vtables.
+ fn typed<T>(&self, x: T) where Self: Sized {}
+}
+
+struct S;
+impl NonDispatchable for S {
+ fn returns(&self) -> Self where Self: Sized { S }
+}
+let obj: Box<dyn NonDispatchable> = Box::new(S);
+obj.returns(); // ERROR: cannot call with Self return
+obj.param(S); // ERROR: cannot call with Self parameter
+obj.typed(1); // ERROR: cannot call with generic type
+```
+
+```rust,compile_fail
+# use std::rc::Rc;
+// Examples of non-object safe traits.
+trait NotObjectSafe {
+ const CONST: i32 = 1; // ERROR: cannot have associated const
+
+ fn foo() {} // ERROR: associated function without Sized
+ fn returns(&self) -> Self; // ERROR: Self in return type
+ fn typed<T>(&self, x: T) {} // ERROR: has generic type parameters
+ fn nested(self: Rc<Box<Self>>) {} // ERROR: nested receiver not yet supported
+}
+
+struct S;
+impl NotObjectSafe for S {
+ fn returns(&self) -> Self { S }
+}
+let obj: Box<dyn NotObjectSafe> = Box::new(S); // ERROR
+```
+
+```rust,compile_fail
+// Self: Sized traits are not object-safe.
+trait TraitWithSize where Self: Sized {}
+
+struct S;
+impl TraitWithSize for S {}
+let obj: Box<dyn TraitWithSize> = Box::new(S); // ERROR
+```
+
+```rust,compile_fail
+// Not object safe if `Self` is a type argument.
+trait Super<A> {}
+trait WithSelf: Super<Self> where Self: Sized {}
+
+struct S;
+impl<A> Super<A> for S {}
+impl WithSelf for S {}
+let obj: Box<dyn WithSelf> = Box::new(S); // ERROR: cannot use `Self` type parameter
+```
+
+## Supertraits
+
+**Supertraits** are traits that are required to be implemented for a type to
+implement a specific trait. Furthermore, anywhere a [generic][generics] or [trait object]
+is bounded by a trait, it has access to the associated items of its supertraits.
+
+Supertraits are declared by trait bounds on the `Self` type of a trait and
+transitively the supertraits of the traits declared in those trait bounds. It is
+an error for a trait to be its own supertrait.
+
+The trait with a supertrait is called a **subtrait** of its supertrait.
+
+The following is an example of declaring `Shape` to be a supertrait of `Circle`.
+
+```rust
+trait Shape { fn area(&self) -> f64; }
+trait Circle : Shape { fn radius(&self) -> f64; }
+```
+
+And the following is the same example, except using [where clauses].
+
+```rust
+trait Shape { fn area(&self) -> f64; }
+trait Circle where Self: Shape { fn radius(&self) -> f64; }
+```
+
+This next example gives `radius` a default implementation using the `area`
+function from `Shape`.
+
+```rust
+# trait Shape { fn area(&self) -> f64; }
+trait Circle where Self: Shape {
+ fn radius(&self) -> f64 {
+ // A = pi * r^2
+ // so algebraically,
+ // r = sqrt(A / pi)
+ (self.area() /std::f64::consts::PI).sqrt()
+ }
+}
+```
+
+This next example calls a supertrait method on a generic parameter.
+
+```rust
+# trait Shape { fn area(&self) -> f64; }
+# trait Circle : Shape { fn radius(&self) -> f64; }
+fn print_area_and_radius<C: Circle>(c: C) {
+ // Here we call the area method from the supertrait `Shape` of `Circle`.
+ println!("Area: {}", c.area());
+ println!("Radius: {}", c.radius());
+}
+```
+
+Similarly, here is an example of calling supertrait methods on trait objects.
+
+```rust
+# trait Shape { fn area(&self) -> f64; }
+# trait Circle : Shape { fn radius(&self) -> f64; }
+# struct UnitCircle;
+# impl Shape for UnitCircle { fn area(&self) -> f64 { std::f64::consts::PI } }
+# impl Circle for UnitCircle { fn radius(&self) -> f64 { 1.0 } }
+# let circle = UnitCircle;
+let circle = Box::new(circle) as Box<dyn Circle>;
+let nonsense = circle.radius() * circle.area();
+```
+
+## Unsafe traits
+
+Traits items that begin with the `unsafe` keyword indicate that *implementing* the
+trait may be [unsafe]. It is safe to use a correctly implemented unsafe trait.
+The [trait implementation] must also begin with the `unsafe` keyword.
+
+[`Sync`] and [`Send`] are examples of unsafe traits.
+
+## Parameter patterns
+
+Function or method declarations without a body only allow [IDENTIFIER] or
+`_` [wild card][WildcardPattern] patterns. `mut` [IDENTIFIER] is currently
+allowed, but it is deprecated and will become a hard error in the future.
+<!-- https://github.com/rust-lang/rust/issues/35203 -->
+
+In the 2015 edition, the pattern for a trait function or method parameter is
+optional:
+
+```rust,edition2015
+// 2015 Edition
+trait T {
+ fn f(i32); // Parameter identifiers are not required.
+}
+```
+
+The kinds of patterns for parameters is limited to one of the following:
+
+* [IDENTIFIER]
+* `mut` [IDENTIFIER]
+* [`_`][WildcardPattern]
+* `&` [IDENTIFIER]
+* `&&` [IDENTIFIER]
+
+Beginning in the 2018 edition, function or method parameter patterns are no
+longer optional. Also, all irrefutable patterns are allowed as long as there
+is a body. Without a body, the limitations listed above are still in effect.
+
+```rust
+trait T {
+ fn f1((a, b): (i32, i32)) {}
+ fn f2(_: (i32, i32)); // Cannot use tuple pattern without a body.
+}
+```
+
+## Item visibility
+
+Trait items syntactically allow a [_Visibility_] annotation, but this is
+rejected when the trait is validated. This allows items to be parsed with a
+unified syntax across different contexts where they are used. As an example,
+an empty `vis` macro fragment specifier can be used for trait items, where the
+macro rule may be used in other situations where visibility is allowed.
+
+```rust
+macro_rules! create_method {
+ ($vis:vis $name:ident) => {
+ $vis fn $name(&self) {}
+ };
+}
+
+trait T1 {
+ // Empty `vis` is allowed.
+ create_method! { method_of_t1 }
+}
+
+struct S;
+
+impl S {
+ // Visibility is allowed here.
+ create_method! { pub method_of_s }
+}
+
+impl T1 for S {}
+
+fn main() {
+ let s = S;
+ s.method_of_t1();
+ s.method_of_s();
+}
+```
+
+[IDENTIFIER]: ../identifiers.md
+[WildcardPattern]: ../patterns.md#wildcard-pattern
+[_AssociatedItem_]: associated-items.md
+[_GenericParams_]: generics.md
+[_InnerAttribute_]: ../attributes.md
+[_TypeParamBounds_]: ../trait-bounds.md
+[_Visibility_]: ../visibility-and-privacy.md
+[_WhereClause_]: generics.md#where-clauses
+[bounds]: ../trait-bounds.md
+[trait object]: ../types/trait-object.md
+[RFC 255]: https://github.com/rust-lang/rfcs/blob/master/text/0255-object-safety.md
+[associated items]: associated-items.md
+[method]: associated-items.md#methods
+[supertraits]: #supertraits
+[implementations]: implementations.md
+[generics]: generics.md
+[where clauses]: generics.md#where-clauses
+[generic functions]: functions.md#generic-functions
+[unsafe]: ../unsafety.md
+[trait implementation]: implementations.md#trait-implementations
+[`Send`]: ../special-types-and-traits.md#send
+[`Sync`]: ../special-types-and-traits.md#sync
+[`Arc<Self>`]: ../special-types-and-traits.md#arct
+[`Box<Self>`]: ../special-types-and-traits.md#boxt
+[`Pin<P>`]: ../special-types-and-traits.md#pinp
+[`Rc<Self>`]: ../special-types-and-traits.md#rct
+[`async`]: functions.md#async-functions
+[`const`]: functions.md#const-functions
diff --git a/src/doc/reference/src/items/type-aliases.md b/src/doc/reference/src/items/type-aliases.md
new file mode 100644
index 000000000..ff0cc75f7
--- /dev/null
+++ b/src/doc/reference/src/items/type-aliases.md
@@ -0,0 +1,47 @@
+# Type aliases
+
+> **<sup>Syntax</sup>**\
+> _TypeAlias_ :\
+> &nbsp;&nbsp; `type` [IDENTIFIER]&nbsp;[_GenericParams_]<sup>?</sup>
+> ( `:` [_TypeParamBounds_] )<sup>?</sup>
+> [_WhereClause_]<sup>?</sup> ( `=` [_Type_] )<sup>?</sup> `;`
+
+A _type alias_ defines a new name for an existing [type]. Type aliases are
+declared with the keyword `type`. Every value has a single, specific type, but
+may implement several different traits, or be compatible with several different
+type constraints.
+
+For example, the following defines the type `Point` as a synonym for the type
+`(u8, u8)`, the type of pairs of unsigned 8 bit integers:
+
+```rust
+type Point = (u8, u8);
+let p: Point = (41, 68);
+```
+
+A type alias to a tuple-struct or unit-struct cannot be used to qualify that type's constructor:
+
+```rust,compile_fail
+struct MyStruct(u32);
+
+use MyStruct as UseAlias;
+type TypeAlias = MyStruct;
+
+let _ = UseAlias(5); // OK
+let _ = TypeAlias(5); // Doesn't work
+```
+
+A type alias without the [_Type_] specification may only appear as an
+[associated type] in a [trait].
+
+A type alias with [_TypeParamBounds_] may only specified when used as
+an [associated type] in a [trait].
+
+[IDENTIFIER]: ../identifiers.md
+[_GenericParams_]: generics.md
+[_TypeParamBounds_]: ../trait-bounds.md
+[_WhereClause_]: generics.md#where-clauses
+[_Type_]: ../types.md#type-expressions
+[associated type]: associated-items.md#associated-types
+[trait]: traits.md
+[type]: ../types.md
diff --git a/src/doc/reference/src/items/unions.md b/src/doc/reference/src/items/unions.md
new file mode 100644
index 000000000..325b22717
--- /dev/null
+++ b/src/doc/reference/src/items/unions.md
@@ -0,0 +1,180 @@
+# Unions
+
+> **<sup>Syntax</sup>**\
+> _Union_ :\
+> &nbsp;&nbsp; `union` [IDENTIFIER]&nbsp;[_GenericParams_]<sup>?</sup> [_WhereClause_]<sup>?</sup>
+> `{`[_StructFields_] `}`
+
+A union declaration uses the same syntax as a struct declaration, except with
+`union` in place of `struct`.
+
+```rust
+#[repr(C)]
+union MyUnion {
+ f1: u32,
+ f2: f32,
+}
+```
+
+The key property of unions is that all fields of a union share common storage.
+As a result, writes to one field of a union can overwrite its other fields, and
+size of a union is determined by the size of its largest field.
+
+Union field types are restricted to the following subset of types:
+- `Copy` types
+- References (`&T` and `&mut T` for arbitrary `T`)
+- `ManuallyDrop<T>` (for arbitrary `T`)
+- Tuples and arrays containing only allowed union field types
+
+This restriction ensures, in particular, that union fields never need to be
+dropped. Like for structs and enums, it is possible to `impl Drop` for a union
+to manually define what happens when it gets dropped.
+
+## Initialization of a union
+
+A value of a union type can be created using the same syntax that is used for
+struct types, except that it must specify exactly one field:
+
+```rust
+# union MyUnion { f1: u32, f2: f32 }
+#
+let u = MyUnion { f1: 1 };
+```
+
+The expression above creates a value of type `MyUnion` and initializes the
+storage using field `f1`. The union can be accessed using the same syntax as
+struct fields:
+
+```rust
+# union MyUnion { f1: u32, f2: f32 }
+#
+# let u = MyUnion { f1: 1 };
+let f = unsafe { u.f1 };
+```
+
+## Reading and writing union fields
+
+Unions have no notion of an "active field". Instead, every union access just
+interprets the storage at the type of the field used for the access. Reading a
+union field reads the bits of the union at the field's type. Fields might have a
+non-zero offset (except when [the C representation] is used); in that case the
+bits starting at the offset of the fields are read. It is the programmer's
+responsibility to make sure that the data is valid at the field's type. Failing
+to do so results in [undefined behavior]. For example, reading the value `3`
+through of a field of the [boolean type] is undefined behavior. Effectively,
+writing to and then reading from a union with [the C representation] is
+analogous to a [`transmute`] from the type used for writing to the type used for
+reading.
+
+Consequently, all reads of union fields have to be placed in `unsafe` blocks:
+
+```rust
+# union MyUnion { f1: u32, f2: f32 }
+# let u = MyUnion { f1: 1 };
+#
+unsafe {
+ let f = u.f1;
+}
+```
+
+Commonly, code using unions will provide safe wrappers around unsafe union
+field accesses.
+
+In contrast, writes to union fields are safe, since they just overwrite
+arbitrary data, but cannot cause undefined behavior. (Note that union field
+types can never have drop glue, so a union field write will never implicitly
+drop anything.)
+
+## Pattern matching on unions
+
+Another way to access union fields is to use pattern matching. Pattern matching
+on union fields uses the same syntax as struct patterns, except that the pattern
+must specify exactly one field. Since pattern matching is like reading the union
+with a particular field, it has to be placed in `unsafe` blocks as well.
+
+```rust
+# union MyUnion { f1: u32, f2: f32 }
+#
+fn f(u: MyUnion) {
+ unsafe {
+ match u {
+ MyUnion { f1: 10 } => { println!("ten"); }
+ MyUnion { f2 } => { println!("{}", f2); }
+ }
+ }
+}
+```
+
+Pattern matching may match a union as a field of a larger structure. In
+particular, when using a Rust union to implement a C tagged union via FFI, this
+allows matching on the tag and the corresponding field simultaneously:
+
+```rust
+#[repr(u32)]
+enum Tag { I, F }
+
+#[repr(C)]
+union U {
+ i: i32,
+ f: f32,
+}
+
+#[repr(C)]
+struct Value {
+ tag: Tag,
+ u: U,
+}
+
+fn is_zero(v: Value) -> bool {
+ unsafe {
+ match v {
+ Value { tag: Tag::I, u: U { i: 0 } } => true,
+ Value { tag: Tag::F, u: U { f: num } } if num == 0.0 => true,
+ _ => false,
+ }
+ }
+}
+```
+
+## References to union fields
+
+Since union fields share common storage, gaining write access to one field of a
+union can give write access to all its remaining fields. Borrow checking rules
+have to be adjusted to account for this fact. As a result, if one field of a
+union is borrowed, all its remaining fields are borrowed as well for the same
+lifetime.
+
+```rust,compile_fail
+# union MyUnion { f1: u32, f2: f32 }
+// ERROR: cannot borrow `u` (via `u.f2`) as mutable more than once at a time
+fn test() {
+ let mut u = MyUnion { f1: 1 };
+ unsafe {
+ let b1 = &mut u.f1;
+// ---- first mutable borrow occurs here (via `u.f1`)
+ let b2 = &mut u.f2;
+// ^^^^ second mutable borrow occurs here (via `u.f2`)
+ *b1 = 5;
+ }
+// - first borrow ends here
+ assert_eq!(unsafe { u.f1 }, 5);
+}
+```
+
+As you could see, in many aspects (except for layouts, safety, and ownership)
+unions behave exactly like structs, largely as a consequence of inheriting
+their syntactic shape from structs. This is also true for many unmentioned
+aspects of Rust language (such as privacy, name resolution, type inference,
+generics, trait implementations, inherent implementations, coherence, pattern
+checking, etc etc etc).
+
+[IDENTIFIER]: ../identifiers.md
+[_GenericParams_]: generics.md
+[_WhereClause_]: generics.md#where-clauses
+[_StructFields_]: structs.md
+[`transmute`]: ../../std/mem/fn.transmute.html
+[`Copy`]: ../../std/marker/trait.Copy.html
+[boolean type]: ../types/boolean.md
+[ManuallyDrop]: ../../std/mem/struct.ManuallyDrop.html
+[the C representation]: ../type-layout.md#reprc-unions
+[undefined behavior]: ../behavior-considered-undefined.html
diff --git a/src/doc/reference/src/items/use-declarations.md b/src/doc/reference/src/items/use-declarations.md
new file mode 100644
index 000000000..e2e202776
--- /dev/null
+++ b/src/doc/reference/src/items/use-declarations.md
@@ -0,0 +1,208 @@
+# Use declarations
+
+> **<sup>Syntax:</sup>**\
+> _UseDeclaration_ :\
+> &nbsp;&nbsp; `use` _UseTree_ `;`
+>
+> _UseTree_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; ([_SimplePath_]<sup>?</sup> `::`)<sup>?</sup> `*`\
+> &nbsp;&nbsp; | ([_SimplePath_]<sup>?</sup> `::`)<sup>?</sup> `{` (_UseTree_ ( `,` _UseTree_ )<sup>\*</sup> `,`<sup>?</sup>)<sup>?</sup> `}`\
+> &nbsp;&nbsp; | [_SimplePath_]&nbsp;( `as` ( [IDENTIFIER] | `_` ) )<sup>?</sup>
+
+A _use declaration_ creates one or more local name bindings synonymous with
+some other [path]. Usually a `use` declaration is used to shorten the path
+required to refer to a module item. These declarations may appear in [modules]
+and [blocks], usually at the top.
+
+[path]: ../paths.md
+[modules]: modules.md
+[blocks]: ../expressions/block-expr.md
+
+Use declarations support a number of convenient shortcuts:
+
+* Simultaneously binding a list of paths with a common prefix, using the
+ glob-like brace syntax `use a::b::{c, d, e::f, g::h::i};`
+* Simultaneously binding a list of paths with a common prefix and their common
+ parent module, using the `self` keyword, such as `use a::b::{self, c, d::e};`
+* Rebinding the target name as a new local name, using the syntax `use p::q::r
+ as x;`. This can also be used with the last two features:
+ `use a::b::{self as ab, c as abc}`.
+* Binding all paths matching a given prefix, using the asterisk wildcard syntax
+ `use a::b::*;`.
+* Nesting groups of the previous features multiple times, such as
+ `use a::b::{self as ab, c, d::{*, e::f}};`
+
+An example of `use` declarations:
+
+```rust
+use std::collections::hash_map::{self, HashMap};
+
+fn foo<T>(_: T){}
+fn bar(map1: HashMap<String, usize>, map2: hash_map::HashMap<String, usize>){}
+
+fn main() {
+ // use declarations can also exist inside of functions
+ use std::option::Option::{Some, None};
+
+ // Equivalent to 'foo(vec![std::option::Option::Some(1.0f64),
+ // std::option::Option::None]);'
+ foo(vec![Some(1.0f64), None]);
+
+ // Both `hash_map` and `HashMap` are in scope.
+ let map1 = HashMap::new();
+ let map2 = hash_map::HashMap::new();
+ bar(map1, map2);
+}
+```
+
+## `use` Visibility
+
+Like items, `use` declarations are private to the containing module, by
+default. Also like items, a `use` declaration can be public, if qualified by
+the `pub` keyword. Such a `use` declaration serves to _re-export_ a name. A
+public `use` declaration can therefore _redirect_ some public name to a
+different target definition: even a definition with a private canonical path,
+inside a different module. If a sequence of such redirections form a cycle or
+cannot be resolved unambiguously, they represent a compile-time error.
+
+An example of re-exporting:
+
+```rust
+mod quux {
+ pub use self::foo::{bar, baz};
+ pub mod foo {
+ pub fn bar() {}
+ pub fn baz() {}
+ }
+}
+
+fn main() {
+ quux::bar();
+ quux::baz();
+}
+```
+
+In this example, the module `quux` re-exports two public names defined in
+`foo`.
+
+## `use` Paths
+
+> **Note**: This section is incomplete.
+
+Some examples of what will and will not work for `use` items:
+<!-- Note: This example works as-is in either 2015 or 2018. -->
+
+```rust
+# #![allow(unused_imports)]
+use std::path::{self, Path, PathBuf}; // good: std is a crate name
+use crate::foo::baz::foobaz; // good: foo is at the root of the crate
+
+mod foo {
+
+ pub mod example {
+ pub mod iter {}
+ }
+
+ use crate::foo::example::iter; // good: foo is at crate root
+// use example::iter; // bad in 2015 edition: relative paths are not allowed without `self`; good in 2018 edition
+ use self::baz::foobaz; // good: self refers to module 'foo'
+ use crate::foo::bar::foobar; // good: foo is at crate root
+
+ pub mod bar {
+ pub fn foobar() { }
+ }
+
+ pub mod baz {
+ use super::bar::foobar; // good: super refers to module 'foo'
+ pub fn foobaz() { }
+ }
+}
+
+fn main() {}
+```
+
+> **Edition Differences**: In the 2015 edition, `use` paths also allow
+> accessing items in the crate root. Using the example above, the following
+> `use` paths work in 2015 but not 2018:
+>
+> ```rust,edition2015
+> # mod foo {
+> # pub mod example { pub mod iter {} }
+> # pub mod baz { pub fn foobaz() {} }
+> # }
+> use foo::example::iter;
+> use ::foo::baz::foobaz;
+> # fn main() {}
+> ```
+>
+> The 2015 edition does not allow use declarations to reference the [extern prelude].
+> Thus [`extern crate`] declarations are still required in 2015 to
+> reference an external crate in a use declaration. Beginning with the 2018
+> edition, use declarations can specify an external crate dependency the same
+> way `extern crate` can.
+>
+> In the 2018 edition, if an in-scope item has the same name as an external
+> crate, then `use` of that crate name requires a leading `::` to
+> unambiguously select the crate name. This is to retain compatibility with
+> potential future changes. <!-- uniform_paths future-proofing -->
+>
+> ```rust
+> // use std::fs; // Error, this is ambiguous.
+> use ::std::fs; // Imports from the `std` crate, not the module below.
+> use self::std::fs as self_fs; // Imports the module below.
+>
+> mod std {
+> pub mod fs {}
+> }
+> # fn main() {}
+> ```
+
+## Underscore Imports
+
+Items can be imported without binding to a name by using an underscore with
+the form `use path as _`. This is particularly useful to import a trait so
+that its methods may be used without importing the trait's symbol, for example
+if the trait's symbol may conflict with another symbol. Another example is to
+link an external crate without importing its name.
+
+Asterisk glob imports will import items imported with `_` in their unnameable
+form.
+
+```rust
+mod foo {
+ pub trait Zoo {
+ fn zoo(&self) {}
+ }
+
+ impl<T> Zoo for T {}
+}
+
+use self::foo::Zoo as _;
+struct Zoo; // Underscore import avoids name conflict with this item.
+
+fn main() {
+ let z = Zoo;
+ z.zoo();
+}
+```
+
+The unique, unnameable symbols are created after macro expansion so that
+macros may safely emit multiple references to `_` imports. For example, the
+following should not produce an error:
+
+```rust
+macro_rules! m {
+ ($item: item) => { $item $item }
+}
+
+m!(use std as _;);
+// This expands to:
+// use std as _;
+// use std as _;
+```
+
+[IDENTIFIER]: ../identifiers.md
+[_SimplePath_]: ../paths.md#simple-paths
+[`extern crate`]: extern-crates.md
+[extern prelude]: ../names/preludes.md#extern-prelude
+[path qualifiers]: ../paths.md#path-qualifiers
diff --git a/src/doc/reference/src/keywords.md b/src/doc/reference/src/keywords.md
new file mode 100644
index 000000000..67f1089d8
--- /dev/null
+++ b/src/doc/reference/src/keywords.md
@@ -0,0 +1,132 @@
+# Keywords
+
+Rust divides keywords into three categories:
+
+* [strict](#strict-keywords)
+* [reserved](#reserved-keywords)
+* [weak](#weak-keywords)
+
+## Strict keywords
+
+These keywords can only be used in their correct contexts. They cannot
+be used as the names of:
+
+* [Items]
+* [Variables] and function parameters
+* Fields and [variants]
+* [Type parameters]
+* Lifetime parameters or [loop labels]
+* [Macros] or [attributes]
+* [Macro placeholders]
+* [Crates]
+
+> **<sup>Lexer:<sup>**\
+> KW_AS : `as`\
+> KW_BREAK : `break`\
+> KW_CONST : `const`\
+> KW_CONTINUE : `continue`\
+> KW_CRATE : `crate`\
+> KW_ELSE : `else`\
+> KW_ENUM : `enum`\
+> KW_EXTERN : `extern`\
+> KW_FALSE : `false`\
+> KW_FN : `fn`\
+> KW_FOR : `for`\
+> KW_IF : `if`\
+> KW_IMPL : `impl`\
+> KW_IN : `in`\
+> KW_LET : `let`\
+> KW_LOOP : `loop`\
+> KW_MATCH : `match`\
+> KW_MOD : `mod`\
+> KW_MOVE : `move`\
+> KW_MUT : `mut`\
+> KW_PUB : `pub`\
+> KW_REF : `ref`\
+> KW_RETURN : `return`\
+> KW_SELFVALUE : `self`\
+> KW_SELFTYPE : `Self`\
+> KW_STATIC : `static`\
+> KW_STRUCT : `struct`\
+> KW_SUPER : `super`\
+> KW_TRAIT : `trait`\
+> KW_TRUE : `true`\
+> KW_TYPE : `type`\
+> KW_UNSAFE : `unsafe`\
+> KW_USE : `use`\
+> KW_WHERE : `where`\
+> KW_WHILE : `while`
+
+The following keywords were added beginning in the 2018 edition.
+
+> **<sup>Lexer 2018+</sup>**\
+> KW_ASYNC : `async`\
+> KW_AWAIT : `await`\
+> KW_DYN : `dyn`
+
+## Reserved keywords
+
+These keywords aren't used yet, but they are reserved for future use. They have
+the same restrictions as strict keywords. The reasoning behind this is to make
+current programs forward compatible with future versions of Rust by forbidding
+them to use these keywords.
+
+> **<sup>Lexer</sup>**\
+> KW_ABSTRACT : `abstract`\
+> KW_BECOME : `become`\
+> KW_BOX : `box`\
+> KW_DO : `do`\
+> KW_FINAL : `final`\
+> KW_MACRO : `macro`\
+> KW_OVERRIDE : `override`\
+> KW_PRIV : `priv`\
+> KW_TYPEOF : `typeof`\
+> KW_UNSIZED : `unsized`\
+> KW_VIRTUAL : `virtual`\
+> KW_YIELD : `yield`
+
+The following keywords are reserved beginning in the 2018 edition.
+
+> **<sup>Lexer 2018+</sup>**\
+> KW_TRY : `try`
+
+## Weak keywords
+
+These keywords have special meaning only in certain contexts. For example, it
+is possible to declare a variable or method with the name `union`.
+
+* `macro_rules` is used to create custom [macros].
+* `union` is used to declare a [union] and is only a keyword when used in a
+ union declaration.
+* `'static` is used for the static lifetime and cannot be used as a [generic
+ lifetime parameter] or [loop label]
+
+ ```compile_fail
+ // error[E0262]: invalid lifetime parameter name: `'static`
+ fn invalid_lifetime_parameter<'static>(s: &'static str) -> &'static str { s }
+ ```
+* In the 2015 edition, [`dyn`] is a keyword when used in a type position
+ followed by a path that does not start with `::`.
+
+ Beginning in the 2018 edition, `dyn` has been promoted to a strict keyword.
+
+> **<sup>Lexer</sup>**\
+> KW_UNION : `union`\
+> KW_STATICLIFETIME : `'static`
+>
+> **<sup>Lexer 2015</sup>**\
+> KW_DYN : `dyn`
+
+[items]: items.md
+[Variables]: variables.md
+[Type parameters]: types/parameters.md
+[loop labels]: expressions/loop-expr.md#loop-labels
+[Macros]: macros.md
+[attributes]: attributes.md
+[Macro placeholders]: macros-by-example.md
+[Crates]: crates-and-source-files.md
+[union]: items/unions.md
+[variants]: items/enumerations.md
+[`dyn`]: types/trait-object.md
+[loop label]: expressions/loop-expr.md#loop-labels
+[generic lifetime parameter]: items/generics.md
diff --git a/src/doc/reference/src/lexical-structure.md b/src/doc/reference/src/lexical-structure.md
new file mode 100644
index 000000000..5e1388e0d
--- /dev/null
+++ b/src/doc/reference/src/lexical-structure.md
@@ -0,0 +1 @@
+# Lexical structure
diff --git a/src/doc/reference/src/lifetime-elision.md b/src/doc/reference/src/lifetime-elision.md
new file mode 100644
index 000000000..e8a20e2e8
--- /dev/null
+++ b/src/doc/reference/src/lifetime-elision.md
@@ -0,0 +1,212 @@
+# Lifetime elision
+
+Rust has rules that allow lifetimes to be elided in various places where the
+compiler can infer a sensible default choice.
+
+## Lifetime elision in functions
+
+In order to make common patterns more ergonomic, lifetime arguments can be
+*elided* in [function item], [function pointer], and [closure trait] signatures.
+The following rules are used to infer lifetime parameters for elided lifetimes.
+It is an error to elide lifetime parameters that cannot be inferred. The
+placeholder lifetime, `'_`, can also be used to have a lifetime inferred in the
+same way. For lifetimes in paths, using `'_` is preferred. Trait object
+lifetimes follow different rules discussed
+[below](#default-trait-object-lifetimes).
+
+* Each elided lifetime in the parameters becomes a distinct lifetime parameter.
+* If there is exactly one lifetime used in the parameters (elided or not), that
+ lifetime is assigned to *all* elided output lifetimes.
+
+In method signatures there is another rule
+
+* If the receiver has type `&Self` or `&mut Self`, then the lifetime of that
+ reference to `Self` is assigned to all elided output lifetime parameters.
+
+Examples:
+
+```rust
+# trait T {}
+# trait ToCStr {}
+# struct Thing<'a> {f: &'a i32}
+# struct Command;
+#
+# trait Example {
+fn print1(s: &str); // elided
+fn print2(s: &'_ str); // also elided
+fn print3<'a>(s: &'a str); // expanded
+
+fn debug1(lvl: usize, s: &str); // elided
+fn debug2<'a>(lvl: usize, s: &'a str); // expanded
+
+fn substr1(s: &str, until: usize) -> &str; // elided
+fn substr2<'a>(s: &'a str, until: usize) -> &'a str; // expanded
+
+fn get_mut1(&mut self) -> &mut dyn T; // elided
+fn get_mut2<'a>(&'a mut self) -> &'a mut dyn T; // expanded
+
+fn args1<T: ToCStr>(&mut self, args: &[T]) -> &mut Command; // elided
+fn args2<'a, 'b, T: ToCStr>(&'a mut self, args: &'b [T]) -> &'a mut Command; // expanded
+
+fn new1(buf: &mut [u8]) -> Thing<'_>; // elided - preferred
+fn new2(buf: &mut [u8]) -> Thing; // elided
+fn new3<'a>(buf: &'a mut [u8]) -> Thing<'a>; // expanded
+# }
+
+type FunPtr1 = fn(&str) -> &str; // elided
+type FunPtr2 = for<'a> fn(&'a str) -> &'a str; // expanded
+
+type FunTrait1 = dyn Fn(&str) -> &str; // elided
+type FunTrait2 = dyn for<'a> Fn(&'a str) -> &'a str; // expanded
+```
+
+```rust,compile_fail
+// The following examples show situations where it is not allowed to elide the
+// lifetime parameter.
+
+# trait Example {
+// Cannot infer, because there are no parameters to infer from.
+fn get_str() -> &str; // ILLEGAL
+
+// Cannot infer, ambiguous if it is borrowed from the first or second parameter.
+fn frob(s: &str, t: &str) -> &str; // ILLEGAL
+# }
+```
+
+## Default trait object lifetimes
+
+The assumed lifetime of references held by a [trait object] is called its
+_default object lifetime bound_. These were defined in [RFC 599] and amended in
+[RFC 1156].
+
+These default object lifetime bounds are used instead of the lifetime parameter
+elision rules defined above when the lifetime bound is omitted entirely. If
+`'_` is used as the lifetime bound then the bound follows the usual elision
+rules.
+
+If the trait object is used as a type argument of a generic type then the
+containing type is first used to try to infer a bound.
+
+* If there is a unique bound from the containing type then that is the default
+* If there is more than one bound from the containing type then an explicit
+ bound must be specified
+
+If neither of those rules apply, then the bounds on the trait are used:
+
+* If the trait is defined with a single lifetime _bound_ then that bound is
+ used.
+* If `'static` is used for any lifetime bound then `'static` is used.
+* If the trait has no lifetime bounds, then the lifetime is inferred in
+ expressions and is `'static` outside of expressions.
+
+```rust
+// For the following trait...
+trait Foo { }
+
+// These two are the same because Box<T> has no lifetime bound on T
+type T1 = Box<dyn Foo>;
+type T2 = Box<dyn Foo + 'static>;
+
+// ...and so are these:
+impl dyn Foo {}
+impl dyn Foo + 'static {}
+
+// ...so are these, because &'a T requires T: 'a
+type T3<'a> = &'a dyn Foo;
+type T4<'a> = &'a (dyn Foo + 'a);
+
+// std::cell::Ref<'a, T> also requires T: 'a, so these are the same
+type T5<'a> = std::cell::Ref<'a, dyn Foo>;
+type T6<'a> = std::cell::Ref<'a, dyn Foo + 'a>;
+```
+
+```rust,compile_fail
+// This is an example of an error.
+# trait Foo { }
+struct TwoBounds<'a, 'b, T: ?Sized + 'a + 'b> {
+ f1: &'a i32,
+ f2: &'b i32,
+ f3: T,
+}
+type T7<'a, 'b> = TwoBounds<'a, 'b, dyn Foo>;
+// ^^^^^^^
+// Error: the lifetime bound for this object type cannot be deduced from context
+```
+
+Note that the innermost object sets the bound, so `&'a Box<dyn Foo>` is still
+`&'a Box<dyn Foo + 'static>`.
+
+```rust
+// For the following trait...
+trait Bar<'a>: 'a { }
+
+// ...these two are the same:
+type T1<'a> = Box<dyn Bar<'a>>;
+type T2<'a> = Box<dyn Bar<'a> + 'a>;
+
+// ...and so are these:
+impl<'a> dyn Bar<'a> {}
+impl<'a> dyn Bar<'a> + 'a {}
+```
+
+## `'static` lifetime elision
+
+Both [constant] and [static] declarations of reference types have *implicit*
+`'static` lifetimes unless an explicit lifetime is specified. As such, the
+constant declarations involving `'static` above may be written without the
+lifetimes.
+
+```rust
+// STRING: &'static str
+const STRING: &str = "bitstring";
+
+struct BitsNStrings<'a> {
+ mybits: [u32; 2],
+ mystring: &'a str,
+}
+
+// BITS_N_STRINGS: BitsNStrings<'static>
+const BITS_N_STRINGS: BitsNStrings<'_> = BitsNStrings {
+ mybits: [1, 2],
+ mystring: STRING,
+};
+```
+
+Note that if the `static` or `const` items include function or closure
+references, which themselves include references, the compiler will first try
+the standard elision rules. If it is unable to resolve the lifetimes by its
+usual rules, then it will error. By way of example:
+
+```rust
+# struct Foo;
+# struct Bar;
+# struct Baz;
+# fn somefunc(a: &Foo, b: &Bar, c: &Baz) -> usize {42}
+// Resolved as `fn<'a>(&'a str) -> &'a str`.
+const RESOLVED_SINGLE: fn(&str) -> &str = |x| x;
+
+// Resolved as `Fn<'a, 'b, 'c>(&'a Foo, &'b Bar, &'c Baz) -> usize`.
+const RESOLVED_MULTIPLE: &dyn Fn(&Foo, &Bar, &Baz) -> usize = &somefunc;
+```
+
+```rust,compile_fail
+# struct Foo;
+# struct Bar;
+# struct Baz;
+# fn somefunc<'a,'b>(a: &'a Foo, b: &'b Bar) -> &'a Baz {unimplemented!()}
+// There is insufficient information to bound the return reference lifetime
+// relative to the argument lifetimes, so this is an error.
+const RESOLVED_STATIC: &dyn Fn(&Foo, &Bar) -> &Baz = &somefunc;
+// ^
+// this function's return type contains a borrowed value, but the signature
+// does not say whether it is borrowed from argument 1 or argument 2
+```
+
+[closure trait]: types/closure.md
+[constant]: items/constant-items.md
+[function item]: types/function-item.md
+[function pointer]: types/function-pointer.md
+[RFC 599]: https://github.com/rust-lang/rfcs/blob/master/text/0599-default-object-bound.md
+[RFC 1156]: https://github.com/rust-lang/rfcs/blob/master/text/1156-adjust-default-object-bounds.md
+[static]: items/static-items.md
+[trait object]: types/trait-object.md
diff --git a/src/doc/reference/src/linkage.md b/src/doc/reference/src/linkage.md
new file mode 100644
index 000000000..b15200511
--- /dev/null
+++ b/src/doc/reference/src/linkage.md
@@ -0,0 +1,216 @@
+# Linkage
+
+> Note: This section is described more in terms of the compiler than of
+> the language.
+
+The compiler supports various methods to link crates together both
+statically and dynamically. This section will explore the various methods to
+link crates together, and more information about native libraries can be
+found in the [FFI section of the book][ffi].
+
+[ffi]: ../book/ch19-01-unsafe-rust.html#using-extern-functions-to-call-external-code
+
+In one session of compilation, the compiler can generate multiple artifacts
+through the usage of either command line flags or the `crate_type` attribute.
+If one or more command line flags are specified, all `crate_type` attributes will
+be ignored in favor of only building the artifacts specified by command line.
+
+* `--crate-type=bin`, `#![crate_type = "bin"]` - A runnable executable will be
+ produced. This requires that there is a `main` function in the crate which
+ will be run when the program begins executing. This will link in all Rust and
+ native dependencies, producing a single distributable binary.
+ This is the default crate type.
+
+* `--crate-type=lib`, `#![crate_type = "lib"]` - A Rust library will be produced.
+ This is an ambiguous concept as to what exactly is produced because a library
+ can manifest itself in several forms. The purpose of this generic `lib` option
+ is to generate the "compiler recommended" style of library. The output library
+ will always be usable by rustc, but the actual type of library may change from
+ time-to-time. The remaining output types are all different flavors of
+ libraries, and the `lib` type can be seen as an alias for one of them (but the
+ actual one is compiler-defined).
+
+* `--crate-type=dylib`, `#![crate_type = "dylib"]` - A dynamic Rust library will
+ be produced. This is different from the `lib` output type in that this forces
+ dynamic library generation. The resulting dynamic library can be used as a
+ dependency for other libraries and/or executables. This output type will
+ create `*.so` files on Linux, `*.dylib` files on macOS, and `*.dll` files on
+ Windows.
+
+* `--crate-type=staticlib`, `#![crate_type = "staticlib"]` - A static system
+ library will be produced. This is different from other library outputs in that
+ the compiler will never attempt to link to `staticlib` outputs. The
+ purpose of this output type is to create a static library containing all of
+ the local crate's code along with all upstream dependencies. This output type
+ will create `*.a` files on Linux, macOS and Windows (MinGW), and `*.lib` files
+ on Windows (MSVC). This format is recommended for use in situations such as
+ linking Rust code into an existing non-Rust application
+ because it will not have dynamic dependencies on other Rust code.
+
+* `--crate-type=cdylib`, `#![crate_type = "cdylib"]` - A dynamic system
+ library will be produced. This is used when compiling
+ a dynamic library to be loaded from another language. This output type will
+ create `*.so` files on Linux, `*.dylib` files on macOS, and `*.dll` files on
+ Windows.
+
+* `--crate-type=rlib`, `#![crate_type = "rlib"]` - A "Rust library" file will be
+ produced. This is used as an intermediate artifact and can be thought of as a
+ "static Rust library". These `rlib` files, unlike `staticlib` files, are
+ interpreted by the compiler in future linkage. This essentially means
+ that `rustc` will look for metadata in `rlib` files like it looks for metadata
+ in dynamic libraries. This form of output is used to produce statically linked
+ executables as well as `staticlib` outputs.
+
+* `--crate-type=proc-macro`, `#![crate_type = "proc-macro"]` - The output
+ produced is not specified, but if a `-L` path is provided to it then the
+ compiler will recognize the output artifacts as a macro and it can be loaded
+ for a program. Crates compiled with this crate type must only export
+ [procedural macros]. The compiler will automatically set the `proc_macro`
+ [configuration option]. The crates are always compiled with the same target
+ that the compiler itself was built with. For example, if you are executing
+ the compiler from Linux with an `x86_64` CPU, the target will be
+ `x86_64-unknown-linux-gnu` even if the crate is a dependency of another crate
+ being built for a different target.
+
+Note that these outputs are stackable in the sense that if multiple are
+specified, then the compiler will produce each form of output at once without
+having to recompile. However, this only applies for outputs specified by the
+same method. If only `crate_type` attributes are specified, then they will all
+be built, but if one or more `--crate-type` command line flags are specified,
+then only those outputs will be built.
+
+With all these different kinds of outputs, if crate A depends on crate B, then
+the compiler could find B in various different forms throughout the system. The
+only forms looked for by the compiler, however, are the `rlib` format and the
+dynamic library format. With these two options for a dependent library, the
+compiler must at some point make a choice between these two formats. With this
+in mind, the compiler follows these rules when determining what format of
+dependencies will be used:
+
+1. If a static library is being produced, all upstream dependencies are
+ required to be available in `rlib` formats. This requirement stems from the
+ reason that a dynamic library cannot be converted into a static format.
+
+ Note that it is impossible to link in native dynamic dependencies to a static
+ library, and in this case warnings will be printed about all unlinked native
+ dynamic dependencies.
+
+2. If an `rlib` file is being produced, then there are no restrictions on what
+ format the upstream dependencies are available in. It is simply required that
+ all upstream dependencies be available for reading metadata from.
+
+ The reason for this is that `rlib` files do not contain any of their upstream
+ dependencies. It wouldn't be very efficient for all `rlib` files to contain a
+ copy of `libstd.rlib`!
+
+3. If an executable is being produced and the `-C prefer-dynamic` flag is not
+ specified, then dependencies are first attempted to be found in the `rlib`
+ format. If some dependencies are not available in an rlib format, then
+ dynamic linking is attempted (see below).
+
+4. If a dynamic library or an executable that is being dynamically linked is
+ being produced, then the compiler will attempt to reconcile the available
+ dependencies in either the rlib or dylib format to create a final product.
+
+ A major goal of the compiler is to ensure that a library never appears more
+ than once in any artifact. For example, if dynamic libraries B and C were
+ each statically linked to library A, then a crate could not link to B and C
+ together because there would be two copies of A. The compiler allows mixing
+ the rlib and dylib formats, but this restriction must be satisfied.
+
+ The compiler currently implements no method of hinting what format a library
+ should be linked with. When dynamically linking, the compiler will attempt to
+ maximize dynamic dependencies while still allowing some dependencies to be
+ linked in via an rlib.
+
+ For most situations, having all libraries available as a dylib is recommended
+ if dynamically linking. For other situations, the compiler will emit a
+ warning if it is unable to determine which formats to link each library with.
+
+In general, `--crate-type=bin` or `--crate-type=lib` should be sufficient for
+all compilation needs, and the other options are just available if more
+fine-grained control is desired over the output format of a crate.
+
+## Static and dynamic C runtimes
+
+The standard library in general strives to support both statically linked and
+dynamically linked C runtimes for targets as appropriate. For example the
+`x86_64-pc-windows-msvc` and `x86_64-unknown-linux-musl` targets typically come
+with both runtimes and the user selects which one they'd like. All targets in
+the compiler have a default mode of linking to the C runtime. Typically targets
+are linked dynamically by default, but there are exceptions which are static by
+default such as:
+
+* `arm-unknown-linux-musleabi`
+* `arm-unknown-linux-musleabihf`
+* `armv7-unknown-linux-musleabihf`
+* `i686-unknown-linux-musl`
+* `x86_64-unknown-linux-musl`
+
+The linkage of the C runtime is configured to respect the `crt-static` target
+feature. These target features are typically configured from the command line
+via flags to the compiler itself. For example to enable a static runtime you
+would execute:
+
+```sh
+rustc -C target-feature=+crt-static foo.rs
+```
+
+whereas to link dynamically to the C runtime you would execute:
+
+```sh
+rustc -C target-feature=-crt-static foo.rs
+```
+
+Targets which do not support switching between linkage of the C runtime will
+ignore this flag. It's recommended to inspect the resulting binary to ensure
+that it's linked as you would expect after the compiler succeeds.
+
+Crates may also learn about how the C runtime is being linked. Code on MSVC, for
+example, needs to be compiled differently (e.g. with `/MT` or `/MD`) depending
+on the runtime being linked. This is exported currently through the
+[`cfg` attribute `target_feature` option]:
+
+```rust
+#[cfg(target_feature = "crt-static")]
+fn foo() {
+ println!("the C runtime should be statically linked");
+}
+
+#[cfg(not(target_feature = "crt-static"))]
+fn foo() {
+ println!("the C runtime should be dynamically linked");
+}
+```
+
+Also note that Cargo build scripts can learn about this feature through
+[environment variables][cargo]. In a build script you can detect the linkage
+via:
+
+```rust
+use std::env;
+
+fn main() {
+ let linkage = env::var("CARGO_CFG_TARGET_FEATURE").unwrap_or(String::new());
+
+ if linkage.contains("crt-static") {
+ println!("the C runtime will be statically linked");
+ } else {
+ println!("the C runtime will be dynamically linked");
+ }
+}
+```
+
+[cargo]: ../cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts
+
+To use this feature locally, you typically will use the `RUSTFLAGS` environment
+variable to specify flags to the compiler through Cargo. For example to compile
+a statically linked binary on MSVC you would execute:
+
+```sh
+RUSTFLAGS='-C target-feature=+crt-static' cargo build --target x86_64-pc-windows-msvc
+```
+
+[`cfg` attribute `target_feature` option]: conditional-compilation.md#target_feature
+[configuration option]: conditional-compilation.md
+[procedural macros]: procedural-macros.md
diff --git a/src/doc/reference/src/macro-ambiguity.md b/src/doc/reference/src/macro-ambiguity.md
new file mode 100644
index 000000000..01ae288a3
--- /dev/null
+++ b/src/doc/reference/src/macro-ambiguity.md
@@ -0,0 +1,377 @@
+# Appendix: Macro Follow-Set Ambiguity Formal Specification
+
+This page documents the formal specification of the follow rules for [Macros
+By Example]. They were originally specified in [RFC 550], from which the bulk
+of this text is copied, and expanded upon in subsequent RFCs.
+
+## Definitions & Conventions
+
+ - `macro`: anything invokable as `foo!(...)` in source code.
+ - `MBE`: macro-by-example, a macro defined by `macro_rules`.
+ - `matcher`: the left-hand-side of a rule in a `macro_rules` invocation, or a
+ subportion thereof.
+ - `macro parser`: the bit of code in the Rust parser that will parse the
+ input using a grammar derived from all of the matchers.
+ - `fragment`: The class of Rust syntax that a given matcher will accept (or
+ "match").
+ - `repetition` : a fragment that follows a regular repeating pattern
+ - `NT`: non-terminal, the various "meta-variables" or repetition matchers
+ that can appear in a matcher, specified in MBE syntax with a leading `$`
+ character.
+ - `simple NT`: a "meta-variable" non-terminal (further discussion below).
+ - `complex NT`: a repetition matching non-terminal, specified via repetition
+ operators (`*`, `+`, `?`).
+ - `token`: an atomic element of a matcher; i.e. identifiers, operators,
+ open/close delimiters, *and* simple NT's.
+ - `token tree`: a tree structure formed from tokens (the leaves), complex
+ NT's, and finite sequences of token trees.
+ - `delimiter token`: a token that is meant to divide the end of one fragment
+ and the start of the next fragment.
+ - `separator token`: an optional delimiter token in an complex NT that
+ separates each pair of elements in the matched repetition.
+ - `separated complex NT`: a complex NT that has its own separator token.
+ - `delimited sequence`: a sequence of token trees with appropriate open- and
+ close-delimiters at the start and end of the sequence.
+ - `empty fragment`: The class of invisible Rust syntax that separates tokens,
+ i.e. whitespace, or (in some lexical contexts), the empty token sequence.
+ - `fragment specifier`: The identifier in a simple NT that specifies which
+ fragment the NT accepts.
+ - `language`: a context-free language.
+
+Example:
+
+```rust,compile_fail
+macro_rules! i_am_an_mbe {
+ (start $foo:expr $($i:ident),* end) => ($foo)
+}
+```
+
+`(start $foo:expr $($i:ident),* end)` is a matcher. The whole matcher is a
+delimited sequence (with open- and close-delimiters `(` and `)`), and `$foo`
+and `$i` are simple NT's with `expr` and `ident` as their respective fragment
+specifiers.
+
+`$(i:ident),*` is *also* an NT; it is a complex NT that matches a
+comma-separated repetition of identifiers. The `,` is the separator token for
+the complex NT; it occurs in between each pair of elements (if any) of the
+matched fragment.
+
+Another example of a complex NT is `$(hi $e:expr ;)+`, which matches any
+fragment of the form `hi <expr>; hi <expr>; ...` where `hi <expr>;` occurs at
+least once. Note that this complex NT does not have a dedicated separator
+token.
+
+(Note that Rust's parser ensures that delimited sequences always occur with
+proper nesting of token tree structure and correct matching of open- and
+close-delimiters.)
+
+We will tend to use the variable "M" to stand for a matcher, variables "t" and
+"u" for arbitrary individual tokens, and the variables "tt" and "uu" for
+arbitrary token trees. (The use of "tt" does present potential ambiguity with
+its additional role as a fragment specifier; but it will be clear from context
+which interpretation is meant.)
+
+"SEP" will range over separator tokens, "OP" over the repetition operators
+`*`, `+`, and `?`, "OPEN"/"CLOSE" over matching token pairs surrounding a
+delimited sequence (e.g. `[` and `]`).
+
+Greek letters "α" "β" "γ" "δ" stand for potentially empty token-tree sequences.
+(However, the Greek letter "ε" (epsilon) has a special role in the presentation
+and does not stand for a token-tree sequence.)
+
+ * This Greek letter convention is usually just employed when the presence of
+ a sequence is a technical detail; in particular, when we wish to *emphasize*
+ that we are operating on a sequence of token-trees, we will use the notation
+ "tt ..." for the sequence, not a Greek letter.
+
+Note that a matcher is merely a token tree. A "simple NT", as mentioned above,
+is an meta-variable NT; thus it is a non-repetition. For example, `$foo:ty` is
+a simple NT but `$($foo:ty)+` is a complex NT.
+
+Note also that in the context of this formalism, the term "token" generally
+*includes* simple NTs.
+
+Finally, it is useful for the reader to keep in mind that according to the
+definitions of this formalism, no simple NT matches the empty fragment, and
+likewise no token matches the empty fragment of Rust syntax. (Thus, the *only*
+NT that can match the empty fragment is a complex NT.) This is not actually
+true, because the `vis` matcher can match an empty fragment. Thus, for the
+purposes of the formalism, we will treat `$v:vis` as actually being
+`$($v:vis)?`, with a requirement that the matcher match an empty fragment.
+
+### The Matcher Invariants
+
+To be valid, a matcher must meet the following three invariants. The definitions
+of FIRST and FOLLOW are described later.
+
+1. For any two successive token tree sequences in a matcher `M` (i.e. `M = ...
+ tt uu ...`) with `uu ...` nonempty, we must have FOLLOW(`... tt`) ∪ {ε} ⊇
+ FIRST(`uu ...`).
+1. For any separated complex NT in a matcher, `M = ... $(tt ...) SEP OP ...`,
+ we must have `SEP` ∈ FOLLOW(`tt ...`).
+1. For an unseparated complex NT in a matcher, `M = ... $(tt ...) OP ...`, if
+ OP = `*` or `+`, we must have FOLLOW(`tt ...`) ⊇ FIRST(`tt ...`).
+
+The first invariant says that whatever actual token that comes after a matcher,
+if any, must be somewhere in the predetermined follow set. This ensures that a
+legal macro definition will continue to assign the same determination as to
+where `... tt` ends and `uu ...` begins, even as new syntactic forms are added
+to the language.
+
+The second invariant says that a separated complex NT must use a separator token
+that is part of the predetermined follow set for the internal contents of the
+NT. This ensures that a legal macro definition will continue to parse an input
+fragment into the same delimited sequence of `tt ...`'s, even as new syntactic
+forms are added to the language.
+
+The third invariant says that when we have a complex NT that can match two or
+more copies of the same thing with no separation in between, it must be
+permissible for them to be placed next to each other as per the first invariant.
+This invariant also requires they be nonempty, which eliminates a possible
+ambiguity.
+
+**NOTE: The third invariant is currently unenforced due to historical oversight
+and significant reliance on the behaviour. It is currently undecided what to do
+about this going forward. Macros that do not respect the behaviour may become
+invalid in a future edition of Rust. See the [tracking issue].**
+
+### FIRST and FOLLOW, informally
+
+A given matcher M maps to three sets: FIRST(M), LAST(M) and FOLLOW(M).
+
+Each of the three sets is made up of tokens. FIRST(M) and LAST(M) may also
+contain a distinguished non-token element ε ("epsilon"), which indicates that M
+can match the empty fragment. (But FOLLOW(M) is always just a set of tokens.)
+
+Informally:
+
+ * FIRST(M): collects the tokens potentially used first when matching a
+ fragment to M.
+
+ * LAST(M): collects the tokens potentially used last when matching a fragment
+ to M.
+
+ * FOLLOW(M): the set of tokens allowed to follow immediately after some
+ fragment matched by M.
+
+ In other words: t ∈ FOLLOW(M) if and only if there exists (potentially
+ empty) token sequences α, β, γ, δ where:
+
+ * M matches β,
+
+ * t matches γ, and
+
+ * The concatenation α β γ δ is a parseable Rust program.
+
+We use the shorthand ANYTOKEN to denote the set of all tokens (including simple
+NTs). For example, if any token is legal after a matcher M, then FOLLOW(M) =
+ANYTOKEN.
+
+(To review one's understanding of the above informal descriptions, the reader
+at this point may want to jump ahead to the [examples of
+FIRST/LAST](#examples-of-first-and-last) before reading their formal
+definitions.)
+
+### FIRST, LAST
+
+Below are formal inductive definitions for FIRST and LAST.
+
+"A ∪ B" denotes set union, "A ∩ B" denotes set intersection, and "A \ B"
+denotes set difference (i.e. all elements of A that are not present in B).
+
+#### FIRST
+
+FIRST(M) is defined by case analysis on the sequence M and the structure of its
+first token-tree (if any):
+
+ * if M is the empty sequence, then FIRST(M) = { ε },
+
+ * if M starts with a token t, then FIRST(M) = { t },
+
+ (Note: this covers the case where M starts with a delimited token-tree
+ sequence, `M = OPEN tt ... CLOSE ...`, in which case `t = OPEN` and thus
+ FIRST(M) = { `OPEN` }.)
+
+ (Note: this critically relies on the property that no simple NT matches the
+ empty fragment.)
+
+ * Otherwise, M is a token-tree sequence starting with a complex NT: `M = $( tt
+ ... ) OP α`, or `M = $( tt ... ) SEP OP α`, (where `α` is the (potentially
+ empty) sequence of token trees for the rest of the matcher).
+
+ * Let SEP\_SET(M) = { SEP } if SEP is present and ε ∈ FIRST(`tt ...`);
+ otherwise SEP\_SET(M) = {}.
+
+ * Let ALPHA\_SET(M) = FIRST(`α`) if OP = `*` or `?` and ALPHA\_SET(M) = {} if
+ OP = `+`.
+ * FIRST(M) = (FIRST(`tt ...`) \\ {ε}) ∪ SEP\_SET(M) ∪ ALPHA\_SET(M).
+
+The definition for complex NTs deserves some justification. SEP\_SET(M) defines
+the possibility that the separator could be a valid first token for M, which
+happens when there is a separator defined and the repeated fragment could be
+empty. ALPHA\_SET(M) defines the possibility that the complex NT could be empty,
+meaning that M's valid first tokens are those of the following token-tree
+sequences `α`. This occurs when either `*` or `?` is used, in which case there
+could be zero repetitions. In theory, this could also occur if `+` was used with
+a potentially-empty repeating fragment, but this is forbidden by the third
+invariant.
+
+From there, clearly FIRST(M) can include any token from SEP\_SET(M) or
+ALPHA\_SET(M), and if the complex NT match is nonempty, then any token starting
+FIRST(`tt ...`) could work too. The last piece to consider is ε. SEP\_SET(M) and
+FIRST(`tt ...`) \ {ε} cannot contain ε, but ALPHA\_SET(M) could. Hence, this
+definition allows M to accept ε if and only if ε ∈ ALPHA\_SET(M) does. This is
+correct because for M to accept ε in the complex NT case, both the complex NT
+and α must accept it. If OP = `+`, meaning that the complex NT cannot be empty,
+then by definition ε ∉ ALPHA\_SET(M). Otherwise, the complex NT can accept zero
+repetitions, and then ALPHA\_SET(M) = FOLLOW(`α`). So this definition is correct
+with respect to \varepsilon as well.
+
+#### LAST
+
+LAST(M), defined by case analysis on M itself (a sequence of token-trees):
+
+ * if M is the empty sequence, then LAST(M) = { ε }
+
+ * if M is a singleton token t, then LAST(M) = { t }
+
+ * if M is the singleton complex NT repeating zero or more times, `M = $( tt
+ ... ) *`, or `M = $( tt ... ) SEP *`
+
+ * Let sep_set = { SEP } if SEP present; otherwise sep_set = {}.
+
+ * if ε ∈ LAST(`tt ...`) then LAST(M) = LAST(`tt ...`) ∪ sep_set
+
+ * otherwise, the sequence `tt ...` must be non-empty; LAST(M) = LAST(`tt
+ ...`) ∪ {ε}.
+
+ * if M is the singleton complex NT repeating one or more times, `M = $( tt ...
+ ) +`, or `M = $( tt ... ) SEP +`
+
+ * Let sep_set = { SEP } if SEP present; otherwise sep_set = {}.
+
+ * if ε ∈ LAST(`tt ...`) then LAST(M) = LAST(`tt ...`) ∪ sep_set
+
+ * otherwise, the sequence `tt ...` must be non-empty; LAST(M) = LAST(`tt
+ ...`)
+
+ * if M is the singleton complex NT repeating zero or one time, `M = $( tt ...)
+ ?`, then LAST(M) = LAST(`tt ...`) ∪ {ε}.
+
+ * if M is a delimited token-tree sequence `OPEN tt ... CLOSE`, then LAST(M) =
+ { `CLOSE` }.
+
+ * if M is a non-empty sequence of token-trees `tt uu ...`,
+
+ * If ε ∈ LAST(`uu ...`), then LAST(M) = LAST(`tt`) ∪ (LAST(`uu ...`) \ { ε }).
+
+ * Otherwise, the sequence `uu ...` must be non-empty; then LAST(M) =
+ LAST(`uu ...`).
+
+### Examples of FIRST and LAST
+
+Below are some examples of FIRST and LAST.
+(Note in particular how the special ε element is introduced and
+eliminated based on the interaction between the pieces of the input.)
+
+Our first example is presented in a tree structure to elaborate on how
+the analysis of the matcher composes. (Some of the simpler subtrees
+have been elided.)
+
+```text
+INPUT: $( $d:ident $e:expr );* $( $( h )* );* $( f ; )+ g
+ ~~~~~~~~ ~~~~~~~ ~
+ | | |
+FIRST: { $d:ident } { $e:expr } { h }
+
+
+INPUT: $( $d:ident $e:expr );* $( $( h )* );* $( f ; )+
+ ~~~~~~~~~~~~~~~~~~ ~~~~~~~ ~~~
+ | | |
+FIRST: { $d:ident } { h, ε } { f }
+
+INPUT: $( $d:ident $e:expr );* $( $( h )* );* $( f ; )+ g
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~ ~~~~~~~~~ ~
+ | | | |
+FIRST: { $d:ident, ε } { h, ε, ; } { f } { g }
+
+
+INPUT: $( $d:ident $e:expr );* $( $( h )* );* $( f ; )+ g
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ |
+FIRST: { $d:ident, h, ;, f }
+```
+
+Thus:
+
+ * FIRST(`$($d:ident $e:expr );* $( $(h)* );* $( f ;)+ g`) = { `$d:ident`, `h`, `;`, `f` }
+
+Note however that:
+
+ * FIRST(`$($d:ident $e:expr );* $( $(h)* );* $($( f ;)+ g)*`) = { `$d:ident`, `h`, `;`, `f`, ε }
+
+Here are similar examples but now for LAST.
+
+ * LAST(`$d:ident $e:expr`) = { `$e:expr` }
+ * LAST(`$( $d:ident $e:expr );*`) = { `$e:expr`, ε }
+ * LAST(`$( $d:ident $e:expr );* $(h)*`) = { `$e:expr`, ε, `h` }
+ * LAST(`$( $d:ident $e:expr );* $(h)* $( f ;)+`) = { `;` }
+ * LAST(`$( $d:ident $e:expr );* $(h)* $( f ;)+ g`) = { `g` }
+
+### FOLLOW(M)
+
+Finally, the definition for FOLLOW(M) is built up as follows. pat, expr, etc.
+represent simple nonterminals with the given fragment specifier.
+
+ * FOLLOW(pat) = {`=>`, `,`, `=`, `|`, `if`, `in`}`.
+
+ * FOLLOW(expr) = FOLLOW(stmt) = {`=>`, `,`, `;`}`.
+
+ * FOLLOW(ty) = FOLLOW(path) = {`{`, `[`, `,`, `=>`, `:`, `=`, `>`, `>>`, `;`,
+ `|`, `as`, `where`, block nonterminals}.
+
+ * FOLLOW(vis) = {`,`l any keyword or identifier except a non-raw `priv`; any
+ token that can begin a type; ident, ty, and path nonterminals}.
+
+ * FOLLOW(t) = ANYTOKEN for any other simple token, including block, ident,
+ tt, item, lifetime, literal and meta simple nonterminals, and all terminals.
+
+ * FOLLOW(M), for any other M, is defined as the intersection, as t ranges over
+ (LAST(M) \ {ε}), of FOLLOW(t).
+
+The tokens that can begin a type are, as of this writing, {`(`, `[`, `!`, `*`,
+`&`, `&&`, `?`, lifetimes, `>`, `>>`, `::`, any non-keyword identifier, `super`,
+`self`, `Self`, `extern`, `crate`, `$crate`, `_`, `for`, `impl`, `fn`, `unsafe`,
+`typeof`, `dyn`}, although this list may not be complete because people won't
+always remember to update the appendix when new ones are added.
+
+Examples of FOLLOW for complex M:
+
+ * FOLLOW(`$( $d:ident $e:expr )*`) = FOLLOW(`$e:expr`)
+ * FOLLOW(`$( $d:ident $e:expr )* $(;)*`) = FOLLOW(`$e:expr`) ∩ ANYTOKEN = FOLLOW(`$e:expr`)
+ * FOLLOW(`$( $d:ident $e:expr )* $(;)* $( f |)+`) = ANYTOKEN
+
+### Examples of valid and invalid matchers
+
+With the above specification in hand, we can present arguments for
+why particular matchers are legal and others are not.
+
+ * `($ty:ty < foo ,)` : illegal, because FIRST(`< foo ,`) = { `<` } ⊈ FOLLOW(`ty`)
+
+ * `($ty:ty , foo <)` : legal, because FIRST(`, foo <`) = { `,` } is ⊆ FOLLOW(`ty`).
+
+ * `($pa:pat $pb:pat $ty:ty ,)` : illegal, because FIRST(`$pb:pat $ty:ty ,`) = { `$pb:pat` } ⊈ FOLLOW(`pat`), and also FIRST(`$ty:ty ,`) = { `$ty:ty` } ⊈ FOLLOW(`pat`).
+
+ * `( $($a:tt $b:tt)* ; )` : legal, because FIRST(`$b:tt`) = { `$b:tt` } is ⊆ FOLLOW(`tt`) = ANYTOKEN, as is FIRST(`;`) = { `;` }.
+
+ * `( $($t:tt),* , $(t:tt),* )` : legal, (though any attempt to actually use this macro will signal a local ambiguity error during expansion).
+
+ * `($ty:ty $(; not sep)* -)` : illegal, because FIRST(`$(; not sep)* -`) = { `;`, `-` } is not in FOLLOW(`ty`).
+
+ * `($($ty:ty)-+)` : illegal, because separator `-` is not in FOLLOW(`ty`).
+
+ * `($($e:expr)*)` : illegal, because expr NTs are not in FOLLOW(expr NT).
+
+[Macros by Example]: macros-by-example.md
+[RFC 550]: https://github.com/rust-lang/rfcs/blob/master/text/0550-macro-future-proofing.md
+[tracking issue]: https://github.com/rust-lang/rust/issues/56575
diff --git a/src/doc/reference/src/macros-by-example.md b/src/doc/reference/src/macros-by-example.md
new file mode 100644
index 000000000..2c49300cd
--- /dev/null
+++ b/src/doc/reference/src/macros-by-example.md
@@ -0,0 +1,519 @@
+# Macros By Example
+
+> **<sup>Syntax</sup>**\
+> _MacroRulesDefinition_ :\
+> &nbsp;&nbsp; `macro_rules` `!` [IDENTIFIER] _MacroRulesDef_
+>
+> _MacroRulesDef_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `(` _MacroRules_ `)` `;`\
+> &nbsp;&nbsp; | `[` _MacroRules_ `]` `;`\
+> &nbsp;&nbsp; | `{` _MacroRules_ `}`
+>
+> _MacroRules_ :\
+> &nbsp;&nbsp; _MacroRule_ ( `;` _MacroRule_ )<sup>\*</sup> `;`<sup>?</sup>
+>
+> _MacroRule_ :\
+> &nbsp;&nbsp; _MacroMatcher_ `=>` _MacroTranscriber_
+>
+> _MacroMatcher_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `(` _MacroMatch_<sup>\*</sup> `)`\
+> &nbsp;&nbsp; | `[` _MacroMatch_<sup>\*</sup> `]`\
+> &nbsp;&nbsp; | `{` _MacroMatch_<sup>\*</sup> `}`
+>
+> _MacroMatch_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Token_]<sub>_except `$` and [delimiters]_</sub>\
+> &nbsp;&nbsp; | _MacroMatcher_\
+> &nbsp;&nbsp; | `$` ( [IDENTIFIER_OR_KEYWORD] <sub>_except `crate`_</sub> | [RAW_IDENTIFIER] | `_` ) `:` _MacroFragSpec_\
+> &nbsp;&nbsp; | `$` `(` _MacroMatch_<sup>+</sup> `)` _MacroRepSep_<sup>?</sup> _MacroRepOp_
+>
+> _MacroFragSpec_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `block` | `expr` | `ident` | `item` | `lifetime` | `literal`\
+> &nbsp;&nbsp; | `meta` | `pat` | `pat_param` | `path` | `stmt` | `tt` | `ty` | `vis`
+>
+> _MacroRepSep_ :\
+> &nbsp;&nbsp; [_Token_]<sub>_except [delimiters] and MacroRepOp_</sub>
+>
+> _MacroRepOp_ :\
+> &nbsp;&nbsp; `*` | `+` | `?`
+>
+> _MacroTranscriber_ :\
+> &nbsp;&nbsp; [_DelimTokenTree_]
+
+`macro_rules` allows users to define syntax extension in a declarative way. We
+call such extensions "macros by example" or simply "macros".
+
+Each macro by example has a name, and one or more _rules_. Each rule has two
+parts: a _matcher_, describing the syntax that it matches, and a _transcriber_,
+describing the syntax that will replace a successfully matched invocation. Both
+the matcher and the transcriber must be surrounded by delimiters. Macros can
+expand to expressions, statements, items (including traits, impls, and foreign
+items), types, or patterns.
+
+## Transcribing
+
+When a macro is invoked, the macro expander looks up macro invocations by name,
+and tries each macro rule in turn. It transcribes the first successful match; if
+this results in an error, then future matches are not tried. When matching, no
+lookahead is performed; if the compiler cannot unambiguously determine how to
+parse the macro invocation one token at a time, then it is an error. In the
+following example, the compiler does not look ahead past the identifier to see
+if the following token is a `)`, even though that would allow it to parse the
+invocation unambiguously:
+
+```rust,compile_fail
+macro_rules! ambiguity {
+ ($($i:ident)* $j:ident) => { };
+}
+
+ambiguity!(error); // Error: local ambiguity
+```
+
+In both the matcher and the transcriber, the `$` token is used to invoke special
+behaviours from the macro engine (described below in [Metavariables] and
+[Repetitions]). Tokens that aren't part of such an invocation are matched and
+transcribed literally, with one exception. The exception is that the outer
+delimiters for the matcher will match any pair of delimiters. Thus, for
+instance, the matcher `(())` will match `{()}` but not `{{}}`. The character
+`$` cannot be matched or transcribed literally.
+
+When forwarding a matched fragment to another macro-by-example, matchers in
+the second macro will see an opaque AST of the fragment type. The second macro
+can't use literal tokens to match the fragments in the matcher, only a
+fragment specifier of the same type. The `ident`, `lifetime`, and `tt`
+fragment types are an exception, and *can* be matched by literal tokens. The
+following illustrates this restriction:
+
+```rust,compile_fail
+macro_rules! foo {
+ ($l:expr) => { bar!($l); }
+// ERROR: ^^ no rules expected this token in macro call
+}
+
+macro_rules! bar {
+ (3) => {}
+}
+
+foo!(3);
+```
+
+The following illustrates how tokens can be directly matched after matching a
+`tt` fragment:
+
+```rust
+// compiles OK
+macro_rules! foo {
+ ($l:tt) => { bar!($l); }
+}
+
+macro_rules! bar {
+ (3) => {}
+}
+
+foo!(3);
+```
+
+## Metavariables
+
+In the matcher, `$` _name_ `:` _fragment-specifier_ matches a Rust syntax
+fragment of the kind specified and binds it to the metavariable `$`_name_. Valid
+fragment specifiers are:
+
+ * `item`: an [_Item_]
+ * `block`: a [_BlockExpression_]
+ * `stmt`: a [_Statement_] without the trailing semicolon (except for item
+ statements that require semicolons)
+ * `pat_param`: a [_PatternNoTopAlt_]
+ * `pat`: at least any [_PatternNoTopAlt_], and possibly more depending on edition
+ * `expr`: an [_Expression_]
+ * `ty`: a [_Type_]
+ * `ident`: an [IDENTIFIER_OR_KEYWORD] or [RAW_IDENTIFIER]
+ * `path`: a [_TypePath_] style path
+ * `tt`: a [_TokenTree_]&nbsp;(a single [token] or tokens in matching delimiters `()`, `[]`, or `{}`)
+ * `meta`: an [_Attr_], the contents of an attribute
+ * `lifetime`: a [LIFETIME_TOKEN]
+ * `vis`: a possibly empty [_Visibility_] qualifier
+ * `literal`: matches `-`<sup>?</sup>[_LiteralExpression_]
+
+In the transcriber, metavariables are referred to simply by `$`_name_, since
+the fragment kind is specified in the matcher. Metavariables are replaced with
+the syntax element that matched them. The keyword metavariable `$crate` can be
+used to refer to the current crate; see [Hygiene] below. Metavariables can be
+transcribed more than once or not at all.
+
+For reasons of backwards compatibility, though `_` [is also an
+expression][_UnderscoreExpression_], a standalone underscore is not matched by
+the `expr` fragment specifier. However, `_` is matched by the `expr` fragment
+specifier when it appears as a subexpression.
+
+> **Edition Differences**: Starting with the 2021 edition, `pat` fragment-specifiers match top-level or-patterns (that is, they accept [_Pattern_]).
+>
+> Before the 2021 edition, they match exactly the same fragments as `pat_param` (that is, they accept [_PatternNoTopAlt_]).
+>
+> The relevant edition is the one in effect for the `macro_rules!` definition.
+
+## Repetitions
+
+In both the matcher and transcriber, repetitions are indicated by placing the
+tokens to be repeated inside `$(`…`)`, followed by a repetition operator,
+optionally with a separator token between. The separator token can be any token
+other than a delimiter or one of the repetition operators, but `;` and `,` are
+the most common. For instance, `$( $i:ident ),*` represents any number of
+identifiers separated by commas. Nested repetitions are permitted.
+
+The repetition operators are:
+
+- `*` — indicates any number of repetitions.
+- `+` — indicates any number but at least one.
+- `?` — indicates an optional fragment with zero or one occurrences.
+
+Since `?` represents at most one occurrence, it cannot be used with a
+separator.
+
+The repeated fragment both matches and transcribes to the specified number of
+the fragment, separated by the separator token. Metavariables are matched to
+every repetition of their corresponding fragment. For instance, the `$( $i:ident
+),*` example above matches `$i` to all of the identifiers in the list.
+
+During transcription, additional restrictions apply to repetitions so that the
+compiler knows how to expand them properly:
+
+1. A metavariable must appear in exactly the same number, kind, and nesting
+ order of repetitions in the transcriber as it did in the matcher. So for the
+ matcher `$( $i:ident ),*`, the transcribers `=> { $i }`,
+ `=> { $( $( $i)* )* }`, and `=> { $( $i )+ }` are all illegal, but
+ `=> { $( $i );* }` is correct and replaces a comma-separated list of
+ identifiers with a semicolon-separated list.
+2. Each repetition in the transcriber must contain at least one metavariable to
+ decide how many times to expand it. If multiple metavariables appear in the
+ same repetition, they must be bound to the same number of fragments. For
+ instance, `( $( $i:ident ),* ; $( $j:ident ),* ) => (( $( ($i,$j) ),* ))` must
+ bind the same number of `$i` fragments as `$j` fragments. This means that
+ invoking the macro with `(a, b, c; d, e, f)` is legal and expands to
+ `((a,d), (b,e), (c,f))`, but `(a, b, c; d, e)` is illegal because it does
+ not have the same number. This requirement applies to every layer of nested
+ repetitions.
+
+## Scoping, Exporting, and Importing
+
+For historical reasons, the scoping of macros by example does not work entirely
+like items. Macros have two forms of scope: textual scope, and path-based scope.
+Textual scope is based on the order that things appear in source files, or even
+across multiple files, and is the default scoping. It is explained further below.
+Path-based scope works exactly the same way that item scoping does. The scoping,
+exporting, and importing of macros is controlled largely by attributes.
+
+When a macro is invoked by an unqualified identifier (not part of a multi-part
+path), it is first looked up in textual scoping. If this does not yield any
+results, then it is looked up in path-based scoping. If the macro's name is
+qualified with a path, then it is only looked up in path-based scoping.
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+use lazy_static::lazy_static; // Path-based import.
+
+macro_rules! lazy_static { // Textual definition.
+ (lazy) => {};
+}
+
+lazy_static!{lazy} // Textual lookup finds our macro first.
+self::lazy_static!{} // Path-based lookup ignores our macro, finds imported one.
+```
+
+### Textual Scope
+
+Textual scope is based largely on the order that things appear in source files,
+and works similarly to the scope of local variables declared with `let` except
+it also applies at the module level. When `macro_rules!` is used to define a
+macro, the macro enters the scope after the definition (note that it can still
+be used recursively, since names are looked up from the invocation site), up
+until its surrounding scope, typically a module, is closed. This can enter child
+modules and even span across multiple files:
+
+<!-- ignore: requires external modules -->
+```rust,ignore
+//// src/lib.rs
+mod has_macro {
+ // m!{} // Error: m is not in scope.
+
+ macro_rules! m {
+ () => {};
+ }
+ m!{} // OK: appears after declaration of m.
+
+ mod uses_macro;
+}
+
+// m!{} // Error: m is not in scope.
+
+//// src/has_macro/uses_macro.rs
+
+m!{} // OK: appears after declaration of m in src/lib.rs
+```
+
+It is not an error to define a macro multiple times; the most recent declaration
+will shadow the previous one unless it has gone out of scope.
+
+```rust
+macro_rules! m {
+ (1) => {};
+}
+
+m!(1);
+
+mod inner {
+ m!(1);
+
+ macro_rules! m {
+ (2) => {};
+ }
+ // m!(1); // Error: no rule matches '1'
+ m!(2);
+
+ macro_rules! m {
+ (3) => {};
+ }
+ m!(3);
+}
+
+m!(1);
+```
+
+Macros can be declared and used locally inside functions as well, and work
+similarly:
+
+```rust
+fn foo() {
+ // m!(); // Error: m is not in scope.
+ macro_rules! m {
+ () => {};
+ }
+ m!();
+}
+
+
+// m!(); // Error: m is not in scope.
+```
+
+### The `macro_use` attribute
+
+The *`macro_use` attribute* has two purposes. First, it can be used to make a
+module's macro scope not end when the module is closed, by applying it to a
+module:
+
+```rust
+#[macro_use]
+mod inner {
+ macro_rules! m {
+ () => {};
+ }
+}
+
+m!();
+```
+
+Second, it can be used to import macros from another crate, by attaching it to
+an `extern crate` declaration appearing in the crate's root module. Macros
+imported this way are imported into the [`macro_use` prelude], not textually,
+which means that they can be shadowed by any other name. While macros imported
+by `#[macro_use]` can be used before the import statement, in case of a
+conflict, the last macro imported wins. Optionally, a list of macros to import
+can be specified using the [_MetaListIdents_] syntax; this is not supported
+when `#[macro_use]` is applied to a module.
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+#[macro_use(lazy_static)] // Or #[macro_use] to import all macros.
+extern crate lazy_static;
+
+lazy_static!{}
+// self::lazy_static!{} // Error: lazy_static is not defined in `self`
+```
+
+Macros to be imported with `#[macro_use]` must be exported with
+`#[macro_export]`, which is described below.
+
+### Path-Based Scope
+
+By default, a macro has no path-based scope. However, if it has the
+`#[macro_export]` attribute, then it is declared in the crate root scope and can
+be referred to normally as such:
+
+```rust
+self::m!();
+m!(); // OK: Path-based lookup finds m in the current module.
+
+mod inner {
+ super::m!();
+ crate::m!();
+}
+
+mod mac {
+ #[macro_export]
+ macro_rules! m {
+ () => {};
+ }
+}
+```
+
+Macros labeled with `#[macro_export]` are always `pub` and can be referred to
+by other crates, either by path or by `#[macro_use]` as described above.
+
+## Hygiene
+
+By default, all identifiers referred to in a macro are expanded as-is, and are
+looked up at the macro's invocation site. This can lead to issues if a macro
+refers to an item or macro which isn't in scope at the invocation site. To
+alleviate this, the `$crate` metavariable can be used at the start of a path to
+force lookup to occur inside the crate defining the macro.
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+//// Definitions in the `helper_macro` crate.
+#[macro_export]
+macro_rules! helped {
+ // () => { helper!() } // This might lead to an error due to 'helper' not being in scope.
+ () => { $crate::helper!() }
+}
+
+#[macro_export]
+macro_rules! helper {
+ () => { () }
+}
+
+//// Usage in another crate.
+// Note that `helper_macro::helper` is not imported!
+use helper_macro::helped;
+
+fn unit() {
+ helped!();
+}
+```
+
+Note that, because `$crate` refers to the current crate, it must be used with a
+fully qualified module path when referring to non-macro items:
+
+```rust
+pub mod inner {
+ #[macro_export]
+ macro_rules! call_foo {
+ () => { $crate::inner::foo() };
+ }
+
+ pub fn foo() {}
+}
+```
+
+Additionally, even though `$crate` allows a macro to refer to items within its
+own crate when expanding, its use has no effect on visibility. An item or macro
+referred to must still be visible from the invocation site. In the following
+example, any attempt to invoke `call_foo!()` from outside its crate will fail
+because `foo()` is not public.
+
+```rust
+#[macro_export]
+macro_rules! call_foo {
+ () => { $crate::foo() };
+}
+
+fn foo() {}
+```
+
+> **Version & Edition Differences**: Prior to Rust 1.30, `$crate` and
+> `local_inner_macros` (below) were unsupported. They were added alongside
+> path-based imports of macros (described above), to ensure that helper macros
+> did not need to be manually imported by users of a macro-exporting crate.
+> Crates written for earlier versions of Rust that use helper macros need to be
+> modified to use `$crate` or `local_inner_macros` to work well with path-based
+> imports.
+
+When a macro is exported, the `#[macro_export]` attribute can have the
+`local_inner_macros` keyword added to automatically prefix all contained macro
+invocations with `$crate::`. This is intended primarily as a tool to migrate
+code written before `$crate` was added to the language to work with Rust 2018's
+path-based imports of macros. Its use is discouraged in new code.
+
+```rust
+#[macro_export(local_inner_macros)]
+macro_rules! helped {
+ () => { helper!() } // Automatically converted to $crate::helper!().
+}
+
+#[macro_export]
+macro_rules! helper {
+ () => { () }
+}
+```
+
+## Follow-set Ambiguity Restrictions
+
+The parser used by the macro system is reasonably powerful, but it is limited in
+order to prevent ambiguity in current or future versions of the language. In
+particular, in addition to the rule about ambiguous expansions, a nonterminal
+matched by a metavariable must be followed by a token which has been decided can
+be safely used after that kind of match.
+
+As an example, a macro matcher like `$i:expr [ , ]` could in theory be accepted
+in Rust today, since `[,]` cannot be part of a legal expression and therefore
+the parse would always be unambiguous. However, because `[` can start trailing
+expressions, `[` is not a character which can safely be ruled out as coming
+after an expression. If `[,]` were accepted in a later version of Rust, this
+matcher would become ambiguous or would misparse, breaking working code.
+Matchers like `$i:expr,` or `$i:expr;` would be legal, however, because `,` and
+`;` are legal expression separators. The specific rules are:
+
+ * `expr` and `stmt` may only be followed by one of: `=>`, `,`, or `;`.
+ * `pat_param` may only be followed by one of: `=>`, `,`, `=`, `|`, `if`, or `in`.
+ * `pat` may only be followed by one of: `=>`, `,`, `=`, `if`, or `in`.
+ * `path` and `ty` may only be followed by one of: `=>`, `,`, `=`, `|`, `;`,
+ `:`, `>`, `>>`, `[`, `{`, `as`, `where`, or a macro variable of `block`
+ fragment specifier.
+ * `vis` may only be followed by one of: `,`, an identifier other than a
+ non-raw `priv`, any token that can begin a type, or a metavariable with a
+ `ident`, `ty`, or `path` fragment specifier.
+ * All other fragment specifiers have no restrictions.
+
+> **Edition Differences**: Before the 2021 edition, `pat` may also be followed by `|`.
+
+When repetitions are involved, then the rules apply to every possible number of
+expansions, taking separators into account. This means:
+
+ * If the repetition includes a separator, that separator must be able to
+ follow the contents of the repetition.
+ * If the repetition can repeat multiple times (`*` or `+`), then the contents
+ must be able to follow themselves.
+ * The contents of the repetition must be able to follow whatever comes
+ before, and whatever comes after must be able to follow the contents of the
+ repetition.
+ * If the repetition can match zero times (`*` or `?`), then whatever comes
+ after must be able to follow whatever comes before.
+
+
+For more detail, see the [formal specification].
+
+[Hygiene]: #hygiene
+[IDENTIFIER]: identifiers.md
+[IDENTIFIER_OR_KEYWORD]: identifiers.md
+[RAW_IDENTIFIER]: identifiers.md
+[LIFETIME_TOKEN]: tokens.md#lifetimes-and-loop-labels
+[Metavariables]: #metavariables
+[Repetitions]: #repetitions
+[_Attr_]: attributes.md
+[_BlockExpression_]: expressions/block-expr.md
+[_DelimTokenTree_]: macros.md
+[_Expression_]: expressions.md
+[_Item_]: items.md
+[_LiteralExpression_]: expressions/literal-expr.md
+[_MetaListIdents_]: attributes.md#meta-item-attribute-syntax
+[_Pattern_]: patterns.md
+[_PatternNoTopAlt_]: patterns.md
+[_Statement_]: statements.md
+[_TokenTree_]: macros.md#macro-invocation
+[_Token_]: tokens.md
+[delimiters]: tokens.md#delimiters
+[_TypePath_]: paths.md#paths-in-types
+[_Type_]: types.md#type-expressions
+[_UnderscoreExpression_]: expressions/underscore-expr.md
+[_Visibility_]: visibility-and-privacy.md
+[formal specification]: macro-ambiguity.md
+[token]: tokens.md
+[`macro_use` prelude]: names/preludes.md#macro_use-prelude
diff --git a/src/doc/reference/src/macros.md b/src/doc/reference/src/macros.md
new file mode 100644
index 000000000..719b9afbc
--- /dev/null
+++ b/src/doc/reference/src/macros.md
@@ -0,0 +1,104 @@
+# Macros
+
+The functionality and syntax of Rust can be extended with custom definitions
+called macros. They are given names, and invoked through a consistent
+syntax: `some_extension!(...)`.
+
+There are two ways to define new macros:
+
+* [Macros by Example] define new syntax in a higher-level, declarative way.
+* [Procedural Macros] define function-like macros, custom derives, and custom
+ attributes using functions that operate on input tokens.
+
+## Macro Invocation
+
+> **<sup>Syntax</sup>**\
+> _MacroInvocation_ :\
+> &nbsp;&nbsp; [_SimplePath_] `!` _DelimTokenTree_
+>
+> _DelimTokenTree_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `(` _TokenTree_<sup>\*</sup> `)`\
+> &nbsp;&nbsp; | `[` _TokenTree_<sup>\*</sup> `]`\
+> &nbsp;&nbsp; | `{` _TokenTree_<sup>\*</sup> `}`
+>
+> _TokenTree_ :\
+> &nbsp;&nbsp; [_Token_]<sub>_except [delimiters]_</sub> | _DelimTokenTree_
+>
+> _MacroInvocationSemi_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_SimplePath_] `!` `(` _TokenTree_<sup>\*</sup> `)` `;`\
+> &nbsp;&nbsp; | [_SimplePath_] `!` `[` _TokenTree_<sup>\*</sup> `]` `;`\
+> &nbsp;&nbsp; | [_SimplePath_] `!` `{` _TokenTree_<sup>\*</sup> `}`
+
+A macro invocation expands a macro at compile time and replaces the
+invocation with the result of the macro. Macros may be invoked in the
+following situations:
+
+* [Expressions] and [statements]
+* [Patterns]
+* [Types]
+* [Items] including [associated items]
+* [`macro_rules`] transcribers
+* [External blocks]
+
+When used as an item or a statement, the _MacroInvocationSemi_ form is used
+where a semicolon is required at the end when not using curly braces.
+[Visibility qualifiers] are never allowed before a macro invocation or
+[`macro_rules`] definition.
+
+```rust
+// Used as an expression.
+let x = vec![1,2,3];
+
+// Used as a statement.
+println!("Hello!");
+
+// Used in a pattern.
+macro_rules! pat {
+ ($i:ident) => (Some($i))
+}
+
+if let pat!(x) = Some(1) {
+ assert_eq!(x, 1);
+}
+
+// Used in a type.
+macro_rules! Tuple {
+ { $A:ty, $B:ty } => { ($A, $B) };
+}
+
+type N2 = Tuple!(i32, i32);
+
+// Used as an item.
+# use std::cell::RefCell;
+thread_local!(static FOO: RefCell<u32> = RefCell::new(1));
+
+// Used as an associated item.
+macro_rules! const_maker {
+ ($t:ty, $v:tt) => { const CONST: $t = $v; };
+}
+trait T {
+ const_maker!{i32, 7}
+}
+
+// Macro calls within macros.
+macro_rules! example {
+ () => { println!("Macro call in a macro!") };
+}
+// Outer macro `example` is expanded, then inner macro `println` is expanded.
+example!();
+```
+
+[Macros by Example]: macros-by-example.md
+[Procedural Macros]: procedural-macros.md
+[_SimplePath_]: paths.md#simple-paths
+[_Token_]: tokens.md
+[associated items]: items/associated-items.md
+[delimiters]: tokens.md#delimiters
+[expressions]: expressions.md
+[items]: items.md
+[`macro_rules`]: macros-by-example.md
+[patterns]: patterns.md
+[statements]: statements.md
+[types]: types.md
+[visibility qualifiers]: visibility-and-privacy.md
+[External blocks]: items/external-blocks.md
diff --git a/src/doc/reference/src/memory-allocation-and-lifetime.md b/src/doc/reference/src/memory-allocation-and-lifetime.md
new file mode 100644
index 000000000..7a5bfc12c
--- /dev/null
+++ b/src/doc/reference/src/memory-allocation-and-lifetime.md
@@ -0,0 +1,13 @@
+# Memory allocation and lifetime
+
+The _items_ of a program are those functions, modules, and types that have their
+value calculated at compile-time and stored uniquely in the memory image of the
+rust process. Items are neither dynamically allocated nor freed.
+
+The _heap_ is a general term that describes boxes. The lifetime of an
+allocation in the heap depends on the lifetime of the box values pointing to
+it. Since box values may themselves be passed in and out of frames, or stored
+in the heap, heap allocations may outlive the frame they are allocated within.
+An allocation in the heap is guaranteed to reside at a single location in the
+heap for the whole lifetime of the allocation - it will never be relocated as
+a result of moving a box value.
diff --git a/src/doc/reference/src/memory-model.md b/src/doc/reference/src/memory-model.md
new file mode 100644
index 000000000..404240db8
--- /dev/null
+++ b/src/doc/reference/src/memory-model.md
@@ -0,0 +1,5 @@
+# Memory model
+
+Rust does not yet have a defined memory model. Various academics and industry professionals
+are working on various proposals, but for now, this is an under-defined place
+in the language.
diff --git a/src/doc/reference/src/names.md b/src/doc/reference/src/names.md
new file mode 100644
index 000000000..fd8f50cd0
--- /dev/null
+++ b/src/doc/reference/src/names.md
@@ -0,0 +1,143 @@
+# Names
+
+An *entity* is a language construct that can be referred to in some way within
+the source program, usually via a [path]. Entities include [types], [items],
+[generic parameters], [variable bindings], [loop labels], [lifetimes],
+[fields], [attributes], and [lints].
+
+A *declaration* is a syntactical construct that can introduce a *name* to
+refer to an entity. Entity names are valid within a [*scope*] — a region of
+source text where that name may be referenced.
+
+Some entities are [explicitly declared](#explicitly-declared-entities) in the
+source code, and some are [implicitly declared](#implicitly-declared-entities)
+as part of the language or compiler extensions.
+
+[*Paths*] are used to refer to an entity, possibly in another scope. Lifetimes
+and loop labels use a [dedicated syntax][lifetimes-and-loop-labels] using a
+leading quote.
+
+Names are segregated into different [*namespaces*], allowing entities in
+different namespaces to share the same name without conflict.
+
+[*Name resolution*] is the compile-time process of tying paths, identifiers,
+and labels to entity declarations.
+
+Access to certain names may be restricted based on their [*visibility*].
+
+## Explicitly declared entities
+
+Entities that explicitly introduce a name in the source code are:
+
+* [Items]:
+ * [Module declarations]
+ * [External crate declarations]
+ * [Use declarations]
+ * [Function declarations] and [function parameters]
+ * [Type aliases]
+ * [struct], [union], [enum], enum variant declarations, and their named
+ fields
+ * [Constant item declarations]
+ * [Static item declarations]
+ * [Trait item declarations] and their [associated items]
+ * [External block items]
+ * [`macro_rules` declarations] and [matcher metavariables]
+ * [Implementation] associated items
+* [Expressions]:
+ * [Closure] parameters
+ * [`while let`] pattern bindings
+ * [`for`] pattern bindings
+ * [`if let`] pattern bindings
+ * [`match`] pattern bindings
+ * [Loop labels]
+* [Generic parameters]
+* [Higher ranked trait bounds]
+* [`let` statement] pattern bindings
+* The [`macro_use` attribute] can introduce macro names from another crate
+* The [`macro_export` attribute] can introduce an alias for the macro into the crate root
+
+Additionally, [macro invocations] and [attributes] can introduce names by
+expanding to one of the above items.
+
+## Implicitly declared entities
+
+The following entities are implicitly defined by the language, or are
+introduced by compiler options and extensions:
+
+* [Language prelude]:
+ * [Boolean type] — `bool`
+ * [Textual types] — `char` and `str`
+ * [Integer types] — `i8`, `i16`, `i32`, `i64`, `i128`, `u8`, `u16`, `u32`, `u64`, `u128`
+ * [Machine-dependent integer types] — `usize` and `isize`
+ * [floating-point types] — `f32` and `f64`
+* [Built-in attributes]
+* [Standard library prelude] items, attributes, and macros
+* [Standard library][extern-prelude] crates in the root module
+* [External crates][extern-prelude] linked by the compiler
+* [Tool attributes]
+* [Lints] and [tool lint attributes]
+* [Derive helper attributes] are valid within an item without being explicitly imported
+* The [`'static`] lifetime
+
+Additionally, the crate root module does not have a name, but can be referred
+to with certain [path qualifiers] or aliases.
+
+
+[*Name resolution*]: names/name-resolution.md
+[*namespaces*]: names/namespaces.md
+[*paths*]: paths.md
+[*scope*]: names/scopes.md
+[*visibility*]: visibility-and-privacy.md
+[`'static`]: keywords.md#weak-keywords
+[`for`]: expressions/loop-expr.md#iterator-loops
+[`if let`]: expressions/if-expr.md#if-let-expressions
+[`let` statement]: statements.md#let-statements
+[`macro_export` attribute]: macros-by-example.md#path-based-scope
+[`macro_rules` declarations]: macros-by-example.md
+[`macro_use` attribute]: macros-by-example.md#the-macro_use-attribute
+[`match`]: expressions/match-expr.md
+[`while let`]: expressions/loop-expr.md#predicate-pattern-loops
+[associated items]: items/associated-items.md
+[attributes]: attributes.md
+[Boolean type]: types/boolean.md
+[Built-in attributes]: attributes.md#built-in-attributes-index
+[Closure]: expressions/closure-expr.md
+[Constant item declarations]: items/constant-items.md
+[Derive helper attributes]: procedural-macros.md#derive-macro-helper-attributes
+[enum]: items/enumerations.md
+[Expressions]: expressions.md
+[extern-prelude]: names/preludes.md#extern-prelude
+[External block items]: items/external-blocks.md
+[External crate declarations]: items/extern-crates.md
+[fields]: expressions/field-expr.md
+[floating-point types]: types/numeric.md#floating-point-types
+[Function declarations]: items/functions.md
+[function parameters]: items/functions.md#function-parameters
+[Generic parameters]: items/generics.md
+[Higher ranked trait bounds]: trait-bounds.md#higher-ranked-trait-bounds
+[Implementation]: items/implementations.md
+[Integer types]: types/numeric.md#integer-types
+[Items]: items.md
+[Language prelude]: names/preludes.md#language-prelude
+[lifetimes-and-loop-labels]: tokens.md#lifetimes-and-loop-labels
+[lifetimes]: tokens.md#lifetimes-and-loop-labels
+[Lints]: attributes/diagnostics.md#lint-check-attributes
+[Loop labels]: expressions/loop-expr.md#loop-labels
+[Machine-dependent integer types]: types/numeric.md#machine-dependent-integer-types
+[macro invocations]: macros.md#macro-invocation
+[matcher metavariables]: macros-by-example.md#metavariables
+[Module declarations]: items/modules.md
+[path]: paths.md
+[path qualifiers]: paths.md#path-qualifiers
+[Standard library prelude]: names/preludes.md#standard-library-prelude
+[Static item declarations]: items/static-items.md
+[struct]: items/structs.md
+[Textual types]: types/textual.md
+[Tool attributes]: attributes.md#tool-attributes
+[tool lint attributes]: attributes/diagnostics.md#tool-lint-attributes
+[Trait item declarations]: items/traits.md
+[Type aliases]: items/type-aliases.md
+[types]: types.md
+[union]: items/unions.md
+[Use declarations]: items/use-declarations.md
+[variable bindings]: patterns.md
diff --git a/src/doc/reference/src/names/name-resolution.md b/src/doc/reference/src/names/name-resolution.md
new file mode 100644
index 000000000..0f70697a6
--- /dev/null
+++ b/src/doc/reference/src/names/name-resolution.md
@@ -0,0 +1,3 @@
+# Name resolution
+
+> **Note**: This is a placeholder for future expansion.
diff --git a/src/doc/reference/src/names/namespaces.md b/src/doc/reference/src/names/namespaces.md
new file mode 100644
index 000000000..14811697c
--- /dev/null
+++ b/src/doc/reference/src/names/namespaces.md
@@ -0,0 +1,168 @@
+# Namespaces
+
+A *namespace* is a logical grouping of declared [names]. Names are segregated
+into separate namespaces based on the kind of entity the name refers to.
+Namespaces allow the occurrence of a name in one namespace to not conflict
+with the same name in another namespace.
+
+Within a namespace, names are organized in a hierarchy, where each level of
+the hierarchy has its own collection of named entities.
+
+There are several different namespaces that each contain different kinds of
+entities. The usage of a name will look for the declaration of that name in
+different namespaces, based on the context, as described in the [name
+resolution] chapter.
+
+The following is a list of namespaces, with their corresponding entities:
+
+* Type Namespace
+ * [Module declarations]
+ * [External crate declarations]
+ * [External crate prelude] items
+ * [Struct], [union], [enum], enum variant declarations
+ * [Trait item declarations]
+ * [Type aliases]
+ * [Associated type declarations]
+ * Built-in types: [boolean], [numeric], and [textual]
+ * [Generic type parameters]
+ * [`Self` type]
+ * [Tool attribute modules]
+* Value Namespace
+ * [Function declarations]
+ * [Constant item declarations]
+ * [Static item declarations]
+ * [Struct constructors]
+ * [Enum variant constructors]
+ * [`Self` constructors]
+ * [Generic const parameters]
+ * [Associated const declarations]
+ * [Associated function declarations]
+ * Local bindings — [`let`], [`if let`], [`while let`], [`for`], [`match`]
+ arms, [function parameters], [closure parameters]
+ * Captured [closure] variables
+* Macro Namespace
+ * [`macro_rules` declarations]
+ * [Built-in attributes]
+ * [Tool attributes]
+ * [Function-like procedural macros]
+ * [Derive macros]
+ * [Derive macro helpers]
+ * [Attribute macros]
+* Lifetime Namespace
+ * [Generic lifetime parameters]
+* Label Namespace
+ * [Loop labels]
+
+An example of how overlapping names in different namespaces can be used unambiguously:
+
+```rust
+// Foo introduces a type in the type namespace and a constructor in the value
+// namespace.
+struct Foo(u32);
+
+// The `Foo` macro is declared in the macro namespace.
+macro_rules! Foo {
+ () => {};
+}
+
+// `Foo` in the `f` parameter type refers to `Foo` in the type namespace.
+// `'Foo` introduces a new lifetime in the lifetime namespace.
+fn example<'Foo>(f: Foo) {
+ // `Foo` refers to the `Foo` constructor in the value namespace.
+ let ctor = Foo;
+ // `Foo` refers to the `Foo` macro in the macro namespace.
+ Foo!{}
+ // `'Foo` introduces a label in the label namespace.
+ 'Foo: loop {
+ // `'Foo` refers to the `'Foo` lifetime parameter, and `Foo`
+ // refers to the type namespace.
+ let x: &'Foo Foo;
+ // `'Foo` refers to the label.
+ break 'Foo;
+ }
+}
+```
+
+## Named entities without a namespace
+
+The following entities have explicit names, but the names are not a part of
+any specific namespace.
+
+### Fields
+
+Even though struct, enum, and union fields are named, the named fields do not
+live in an explicit namespace. They can only be accessed via a [field
+expression], which only inspects the field names of the specific type being
+accessed.
+
+### Use declarations
+
+A [use declaration] has named aliases that it imports into scope, but the
+`use` item itself does not belong to a specific namespace. Instead, it can
+introduce aliases into multiple namespaces, depending on the item kind being
+imported.
+
+<!-- TODO: describe how `use` works on the use-declarations page, and link to it here. -->
+
+## Sub-namespaces
+
+The macro namespace is split into two sub-namespaces: one for [bang-style macros] and one for [attributes].
+When an attribute is resolved, any bang-style macros in scope will be ignored.
+And conversely resolving a bang-style macro will ignore attribute macros in scope.
+This prevents one style from shadowing another.
+
+For example, the [`cfg` attribute] and the [`cfg` macro] are two different entities with the same name in the macro namespace, but they can still be used in their respective context.
+
+It is still an error for a [`use` import] to shadow another macro, regardless of their sub-namespaces.
+
+[`cfg` attribute]: ../conditional-compilation.md#the-cfg-attribute
+[`cfg` macro]: ../conditional-compilation.md#the-cfg-macro
+[`for`]: ../expressions/loop-expr.md#iterator-loops
+[`if let`]: ../expressions/if-expr.md#if-let-expressions
+[`let`]: ../statements.md#let-statements
+[`macro_rules` declarations]: ../macros-by-example.md
+[`match`]: ../expressions/match-expr.md
+[`Self` constructors]: ../paths.md#self-1
+[`Self` type]: ../paths.md#self-1
+[`use` import]: ../items/use-declarations.md
+[`while let`]: ../expressions/loop-expr.md#predicate-pattern-loops
+[Associated const declarations]: ../items/associated-items.md#associated-constants
+[Associated function declarations]: ../items/associated-items.md#associated-functions-and-methods
+[Associated type declarations]: ../items/associated-items.md#associated-types
+[Attribute macros]: ../procedural-macros.md#attribute-macros
+[attributes]: ../attributes.md
+[bang-style macros]: ../macros.md
+[boolean]: ../types/boolean.md
+[Built-in attributes]: ../attributes.md#built-in-attributes-index
+[closure parameters]: ../expressions/closure-expr.md
+[closure]: ../expressions/closure-expr.md
+[Constant item declarations]: ../items/constant-items.md
+[Derive macro helpers]: ../procedural-macros.md#derive-macro-helper-attributes
+[Derive macros]: ../procedural-macros.md#derive-macros
+[entity]: ../glossary.md#entity
+[Enum variant constructors]: ../items/enumerations.md
+[enum]: ../items/enumerations.md
+[External crate declarations]: ../items/extern-crates.md
+[External crate prelude]: preludes.md#extern-prelude
+[field expression]: ../expressions/field-expr.md
+[Function declarations]: ../items/functions.md
+[function parameters]: ../items/functions.md#function-parameters
+[Function-like procedural macros]: ../procedural-macros.md#function-like-procedural-macros
+[Generic const parameters]: ../items/generics.md#const-generics
+[Generic lifetime parameters]: ../items/generics.md
+[Generic type parameters]: ../items/generics.md
+[Loop labels]: ../expressions/loop-expr.md#loop-labels
+[Module declarations]: ../items/modules.md
+[name resolution]: name-resolution.md
+[names]: ../names.md
+[numeric]: ../types/numeric.md
+[Static item declarations]: ../items/static-items.md
+[Struct constructors]: ../items/structs.md
+[Struct]: ../items/structs.md
+[textual]: ../types/textual.md
+[Tool attribute modules]: ../attributes.md#tool-attributes
+[Tool attributes]: ../attributes.md#tool-attributes
+[Trait item declarations]: ../items/traits.md
+[Type aliases]: ../items/type-aliases.md
+[union]: ../items/unions.md
+[use declaration]: ../items/use-declarations.md
diff --git a/src/doc/reference/src/names/preludes.md b/src/doc/reference/src/names/preludes.md
new file mode 100644
index 000000000..00a112948
--- /dev/null
+++ b/src/doc/reference/src/names/preludes.md
@@ -0,0 +1,173 @@
+# Preludes
+
+A *prelude* is a collection of names that are automatically brought into scope
+of every module in a crate.
+
+These prelude names are not part of the module itself: they are implicitly
+queried during [name resolution]. For example, even though something like
+[`Box`] is in scope in every module, you cannot refer to it as `self::Box`
+because it is not a member of the current module.
+
+There are several different preludes:
+
+- [Standard library prelude]
+- [Extern prelude]
+- [Language prelude]
+- [`macro_use` prelude]
+- [Tool prelude]
+
+## Standard library prelude
+
+Each crate has a standard library prelude, which consists of the names from a single standard library module.
+The module used depends on the crate's edition, and on whether the [`no_std` attribute] is applied to the crate:
+
+Edition | `no_std` not applied | `no_std` applied
+--------| --------------------------- | ----------------------------
+2015 | [`std::prelude::rust_2015`] | [`core::prelude::rust_2015`]
+2018 | [`std::prelude::rust_2018`] | [`core::prelude::rust_2018`]
+2021 | [`std::prelude::rust_2021`] | [`core::prelude::rust_2021`]
+
+
+> **Note**:
+>
+> [`std::prelude::rust_2015`] and [`std::prelude::rust_2018`] have the same contents as [`std::prelude::v1`].
+>
+> [`core::prelude::rust_2015`] and [`core::prelude::rust_2018`] have the same contents as [`core::prelude::v1`].
+
+## Extern prelude
+
+External crates imported with [`extern crate`] in the root module or provided
+to the compiler (as with the `--extern` flag with `rustc`) are added to the
+*extern prelude*. If imported with an alias such as `extern crate orig_name as
+new_name`, then the symbol `new_name` is instead added to the prelude.
+
+The [`core`] crate is always added to the extern prelude. The [`std`] crate is
+added as long as the [`no_std` attribute] is not specified in the crate root.
+
+> **Edition Differences**: In the 2015 edition, crates in the extern prelude
+> cannot be referenced via [use declarations], so it is generally standard
+> practice to include `extern crate` declarations to bring them into scope.
+>
+> Beginning in the 2018 edition, [use declarations] can reference crates in
+> the extern prelude, so it is considered unidiomatic to use `extern crate`.
+
+> **Note**: Additional crates that ship with `rustc`, such as [`alloc`], and
+> [`test`], are not automatically included with the `--extern` flag when using
+> Cargo. They must be brought into scope with an `extern crate` declaration,
+> even in the 2018 edition.
+>
+> ```rust
+> extern crate alloc;
+> use alloc::rc::Rc;
+> ```
+>
+> Cargo does bring in `proc_macro` to the extern prelude for proc-macro crates
+> only.
+
+<!--
+See https://github.com/rust-lang/rust/issues/57288 for more about the
+alloc/test limitation.
+-->
+
+### The `no_std` attribute
+
+By default, the standard library is automatically included in the crate root
+module. The [`std`] crate is added to the root, along with an implicit
+[`macro_use` attribute] pulling in all macros exported from `std` into the
+[`macro_use` prelude]. Both [`core`] and [`std`] are added to the [extern
+prelude].
+
+The *`no_std` [attribute]* may be applied at the crate level to prevent the
+[`std`] crate from being automatically added into scope. It does three things:
+
+* Prevents `std` from being added to the [extern prelude](#extern-prelude).
+* Affects which module is used to make up the [standard library prelude] (as described above).
+* Injects the [`core`] crate into the crate root instead of [`std`], and pulls
+ in all macros exported from `core` in the [`macro_use` prelude].
+
+> **Note**: Using the core prelude over the standard prelude is useful when
+> either the crate is targeting a platform that does not support the standard
+> library or is purposefully not using the capabilities of the standard
+> library. Those capabilities are mainly dynamic memory allocation (e.g. `Box`
+> and `Vec`) and file and network capabilities (e.g. `std::fs` and `std::io`).
+
+<div class="warning">
+
+Warning: Using `no_std` does not prevent the standard library from being
+linked in. It is still valid to put `extern crate std;` into the crate and
+dependencies can also link it in.
+
+</div>
+
+## Language prelude
+
+The language prelude includes names of types and attributes that are built-in
+to the language. The language prelude is always in scope. It includes the following:
+
+* [Type namespace]
+ * [Boolean type] — `bool`
+ * [Textual types] — `char` and `str`
+ * [Integer types] — `i8`, `i16`, `i32`, `i64`, `i128`, `u8`, `u16`, `u32`, `u64`, `u128`
+ * [Machine-dependent integer types] — `usize` and `isize`
+ * [floating-point types] — `f32` and `f64`
+* [Macro namespace]
+ * [Built-in attributes]
+
+## `macro_use` prelude
+
+The `macro_use` prelude includes macros from external crates that were
+imported by the [`macro_use` attribute] applied to an [`extern crate`].
+
+## Tool prelude
+
+The tool prelude includes tool names for external tools in the [type
+namespace]. See the [tool attributes] section for more details.
+
+## The `no_implicit_prelude` attribute
+
+The *`no_implicit_prelude` [attribute]* may be applied at the crate level or
+on a module to indicate that it should not automatically bring the [standard
+library prelude], [extern prelude], or [tool prelude] into scope for that
+module or any of its descendants.
+
+This attribute does not affect the [language prelude].
+
+> **Edition Differences**: In the 2015 edition, the `no_implicit_prelude`
+> attribute does not affect the [`macro_use` prelude], and all macros exported
+> from the standard library are still included in the `macro_use` prelude.
+> Starting in the 2018 edition, it will remove the `macro_use` prelude.
+
+[`alloc`]: ../../alloc/index.html
+[`Box`]: ../../std/boxed/struct.Box.html
+[`core::prelude::v1`]: ../../core/prelude/v1/index.html
+[`core::prelude::rust_2015`]: ../../core/prelude/rust_2015/index.html
+[`core::prelude::rust_2018`]: ../../core/prelude/rust_2018/index.html
+[`core::prelude::rust_2021`]: ../../core/prelude/rust_2021/index.html
+[`core`]: ../../core/index.html
+[`extern crate`]: ../items/extern-crates.md
+[`macro_use` attribute]: ../macros-by-example.md#the-macro_use-attribute
+[`macro_use` prelude]: #macro_use-prelude
+[`no_std` attribute]: #the-no_std-attribute
+[`no_std` attribute]: #the-no_std-attribute
+[`std::prelude::v1`]: ../../std/prelude/v1/index.html
+[`std::prelude::rust_2015`]: ../../std/prelude/rust_2015/index.html
+[`std::prelude::rust_2018`]: ../../std/prelude/rust_2018/index.html
+[`std::prelude::rust_2021`]: ../../std/prelude/rust_2021/index.html
+[`std`]: ../../std/index.html
+[`test`]: ../../test/index.html
+[attribute]: ../attributes.md
+[Boolean type]: ../types/boolean.md
+[Built-in attributes]: ../attributes.md#built-in-attributes-index
+[extern prelude]: #extern-prelude
+[floating-point types]: ../types/numeric.md#floating-point-types
+[Integer types]: ../types/numeric.md#integer-types
+[Language prelude]: #language-prelude
+[Machine-dependent integer types]: ../types/numeric.md#machine-dependent-integer-types
+[Macro namespace]: namespaces.md
+[name resolution]: name-resolution.md
+[Standard library prelude]: #standard-library-prelude
+[Textual types]: ../types/textual.md
+[tool attributes]: ../attributes.md#tool-attributes
+[Tool prelude]: #tool-prelude
+[Type namespace]: namespaces.md
+[use declarations]: ../items/use-declarations.md
diff --git a/src/doc/reference/src/names/scopes.md b/src/doc/reference/src/names/scopes.md
new file mode 100644
index 000000000..288781bd3
--- /dev/null
+++ b/src/doc/reference/src/names/scopes.md
@@ -0,0 +1,3 @@
+# Scopes
+
+> **Note**: This is a placeholder for future expansion.
diff --git a/src/doc/reference/src/notation.md b/src/doc/reference/src/notation.md
new file mode 100644
index 000000000..cb3d8f606
--- /dev/null
+++ b/src/doc/reference/src/notation.md
@@ -0,0 +1,41 @@
+# Notation
+
+## Grammar
+
+The following notations are used by the *Lexer* and *Syntax* grammar snippets:
+
+| Notation | Examples | Meaning |
+|-------------------|-------------------------------|-------------------------------------------|
+| CAPITAL | KW_IF, INTEGER_LITERAL | A token produced by the lexer |
+| _ItalicCamelCase_ | _LetStatement_, _Item_ | A syntactical production |
+| `string` | `x`, `while`, `*` | The exact character(s) |
+| \\x | \\n, \\r, \\t, \\0 | The character represented by this escape |
+| x<sup>?</sup> | `pub`<sup>?</sup> | An optional item |
+| x<sup>\*</sup> | _OuterAttribute_<sup>\*</sup> | 0 or more of x |
+| x<sup>+</sup> | _MacroMatch_<sup>+</sup> | 1 or more of x |
+| x<sup>a..b</sup> | HEX_DIGIT<sup>1..6</sup> | a to b repetitions of x |
+| \| | `u8` \| `u16`, Block \| Item | Either one or another |
+| \[ ] | \[`b` `B`] | Any of the characters listed |
+| \[ - ] | \[`a`-`z`] | Any of the characters in the range |
+| ~\[ ] | ~\[`b` `B`] | Any characters, except those listed |
+| ~`string` | ~`\n`, ~`*/` | Any characters, except this sequence |
+| ( ) | (`,` _Parameter_)<sup>?</sup> | Groups items |
+
+## String table productions
+
+Some rules in the grammar &mdash; notably [unary operators], [binary
+operators], and [keywords] &mdash; are given in a simplified form: as a listing
+of printable strings. These cases form a subset of the rules regarding the
+[token][tokens] rule, and are assumed to be the result of a lexical-analysis
+phase feeding the parser, driven by a <abbr title="Deterministic Finite
+Automaton">DFA</abbr>, operating over the disjunction of all such string table
+entries.
+
+When such a string in `monospace` font occurs inside the grammar,
+it is an implicit reference to a single member of such a string table
+production. See [tokens] for more information.
+
+[binary operators]: expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[keywords]: keywords.md
+[tokens]: tokens.md
+[unary operators]: expressions/operator-expr.md#borrow-operators
diff --git a/src/doc/reference/src/paths.md b/src/doc/reference/src/paths.md
new file mode 100644
index 000000000..cb6b24aa0
--- /dev/null
+++ b/src/doc/reference/src/paths.md
@@ -0,0 +1,404 @@
+# Paths
+
+A *path* is a sequence of one or more path segments _logically_ separated by
+a namespace <span class="parenthetical">qualifier (`::`)</span>. If a path
+consists of only one segment, it refers to either an [item] or a [variable] in
+a local control scope. If a path has multiple segments, it always refers to an
+item.
+
+Two examples of simple paths consisting of only identifier segments:
+
+<!-- ignore: syntax fragment -->
+```rust,ignore
+x;
+x::y::z;
+```
+
+## Types of paths
+
+### Simple Paths
+
+> **<sup>Syntax</sup>**\
+> _SimplePath_ :\
+> &nbsp;&nbsp; `::`<sup>?</sup> _SimplePathSegment_ (`::` _SimplePathSegment_)<sup>\*</sup>
+>
+> _SimplePathSegment_ :\
+> &nbsp;&nbsp; [IDENTIFIER] | `super` | `self` | `crate` | `$crate`
+
+Simple paths are used in [visibility] markers, [attributes], [macros], and [`use`] items.
+Examples:
+
+```rust
+use std::io::{self, Write};
+mod m {
+ #[clippy::cyclomatic_complexity = "0"]
+ pub (in super) fn f1() {}
+}
+```
+
+### Paths in expressions
+
+> **<sup>Syntax</sup>**\
+> _PathInExpression_ :\
+> &nbsp;&nbsp; `::`<sup>?</sup> _PathExprSegment_ (`::` _PathExprSegment_)<sup>\*</sup>
+>
+> _PathExprSegment_ :\
+> &nbsp;&nbsp; _PathIdentSegment_ (`::` _GenericArgs_)<sup>?</sup>
+>
+> _PathIdentSegment_ :\
+> &nbsp;&nbsp; [IDENTIFIER] | `super` | `self` | `Self` | `crate` | `$crate`
+>
+> _GenericArgs_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `<` `>`\
+> &nbsp;&nbsp; | `<` ( _GenericArg_ `,` )<sup>\*</sup> _GenericArg_ `,`<sup>?</sup> `>`
+>
+> _GenericArg_ :\
+> &nbsp;&nbsp; [_Lifetime_] | [_Type_] | _GenericArgsConst_ | _GenericArgsBinding_
+>
+> _GenericArgsConst_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_BlockExpression_]\
+> &nbsp;&nbsp; | [_LiteralExpression_]\
+> &nbsp;&nbsp; | `-` [_LiteralExpression_]\
+> &nbsp;&nbsp; | [_SimplePathSegment_]
+>
+> _GenericArgsBinding_ :\
+> &nbsp;&nbsp; [IDENTIFIER] `=` [_Type_]
+
+Paths in expressions allow for paths with generic arguments to be specified. They are
+used in various places in [expressions] and [patterns].
+
+The `::` token is required before the opening `<` for generic arguments to avoid
+ambiguity with the less-than operator. This is colloquially known as "turbofish" syntax.
+
+```rust
+(0..10).collect::<Vec<_>>();
+Vec::<u8>::with_capacity(1024);
+```
+
+The order of generic arguments is restricted to lifetime arguments, then type
+arguments, then const arguments, then equality constraints.
+
+Const arguments must be surrounded by braces unless they are a
+[literal] or a single segment path.
+
+The synthetic type parameters corresponding to `impl Trait` types are implicit,
+and these cannot be explicitly specified.
+
+## Qualified paths
+
+> **<sup>Syntax</sup>**\
+> _QualifiedPathInExpression_ :\
+> &nbsp;&nbsp; _QualifiedPathType_ (`::` _PathExprSegment_)<sup>+</sup>
+>
+> _QualifiedPathType_ :\
+> &nbsp;&nbsp; `<` [_Type_] (`as` _TypePath_)<sup>?</sup> `>`
+>
+> _QualifiedPathInType_ :\
+> &nbsp;&nbsp; _QualifiedPathType_ (`::` _TypePathSegment_)<sup>+</sup>
+
+Fully qualified paths allow for disambiguating the path for [trait implementations] and
+for specifying [canonical paths](#canonical-paths). When used in a type specification, it
+supports using the type syntax specified below.
+
+```rust
+struct S;
+impl S {
+ fn f() { println!("S"); }
+}
+trait T1 {
+ fn f() { println!("T1 f"); }
+}
+impl T1 for S {}
+trait T2 {
+ fn f() { println!("T2 f"); }
+}
+impl T2 for S {}
+S::f(); // Calls the inherent impl.
+<S as T1>::f(); // Calls the T1 trait function.
+<S as T2>::f(); // Calls the T2 trait function.
+```
+
+### Paths in types
+
+> **<sup>Syntax</sup>**\
+> _TypePath_ :\
+> &nbsp;&nbsp; `::`<sup>?</sup> _TypePathSegment_ (`::` _TypePathSegment_)<sup>\*</sup>
+>
+> _TypePathSegment_ :\
+> &nbsp;&nbsp; _PathIdentSegment_ `::`<sup>?</sup> ([_GenericArgs_] | _TypePathFn_)<sup>?</sup>
+>
+> _TypePathFn_ :\
+> `(` _TypePathFnInputs_<sup>?</sup> `)` (`->` [_Type_])<sup>?</sup>
+>
+> _TypePathFnInputs_ :\
+> [_Type_] (`,` [_Type_])<sup>\*</sup> `,`<sup>?</sup>
+
+Type paths are used within type definitions, trait bounds, type parameter bounds,
+and qualified paths.
+
+Although the `::` token is allowed before the generics arguments, it is not required
+because there is no ambiguity like there is in _PathInExpression_.
+
+```rust
+# mod ops {
+# pub struct Range<T> {f1: T}
+# pub trait Index<T> {}
+# pub struct Example<'a> {f1: &'a i32}
+# }
+# struct S;
+impl ops::Index<ops::Range<usize>> for S { /*...*/ }
+fn i<'a>() -> impl Iterator<Item = ops::Example<'a>> {
+ // ...
+# const EXAMPLE: Vec<ops::Example<'static>> = Vec::new();
+# EXAMPLE.into_iter()
+}
+type G = std::boxed::Box<dyn std::ops::FnOnce(isize) -> isize>;
+```
+
+## Path qualifiers
+
+Paths can be denoted with various leading qualifiers to change the meaning of
+how it is resolved.
+
+### `::`
+
+Paths starting with `::` are considered to be *global paths* where the segments of the path
+start being resolved from a place which differs based on edition. Each identifier in
+the path must resolve to an item.
+
+> **Edition Differences**: In the 2015 Edition, identifiers resolve from the "crate root"
+> (`crate::` in the 2018 edition), which contains a variety of different items, including
+> external crates, default crates such as `std` or `core`, and items in the top level of
+> the crate (including `use` imports).
+>
+> Beginning with the 2018 Edition, paths starting with `::` resolve from
+> crates in the [extern prelude]. That is, they must be followed by the name of a crate.
+
+```rust
+pub fn foo() {
+ // In the 2018 edition, this accesses `std` via the extern prelude.
+ // In the 2015 edition, this accesses `std` via the crate root.
+ let now = ::std::time::Instant::now();
+ println!("{:?}", now);
+}
+```
+
+```rust,edition2015
+// 2015 Edition
+mod a {
+ pub fn foo() {}
+}
+mod b {
+ pub fn foo() {
+ ::a::foo(); // call `a`'s foo function
+ // In Rust 2018, `::a` would be interpreted as the crate `a`.
+ }
+}
+# fn main() {}
+```
+
+### `self`
+
+`self` resolves the path relative to the current module. `self` can only be used as the
+first segment, without a preceding `::`.
+
+```rust
+fn foo() {}
+fn bar() {
+ self::foo();
+}
+# fn main() {}
+```
+
+### `Self`
+
+`Self`, with a capital "S", is used to refer to the implementing type within
+[traits] and [implementations].
+
+`Self` can only be used as the first segment, without a preceding `::`.
+
+```rust
+trait T {
+ type Item;
+ const C: i32;
+ // `Self` will be whatever type that implements `T`.
+ fn new() -> Self;
+ // `Self::Item` will be the type alias in the implementation.
+ fn f(&self) -> Self::Item;
+}
+struct S;
+impl T for S {
+ type Item = i32;
+ const C: i32 = 9;
+ fn new() -> Self { // `Self` is the type `S`.
+ S
+ }
+ fn f(&self) -> Self::Item { // `Self::Item` is the type `i32`.
+ Self::C // `Self::C` is the constant value `9`.
+ }
+}
+```
+
+### `super`
+
+`super` in a path resolves to the parent module. It may only be used in leading
+segments of the path, possibly after an initial `self` segment.
+
+```rust
+mod a {
+ pub fn foo() {}
+}
+mod b {
+ pub fn foo() {
+ super::a::foo(); // call a's foo function
+ }
+}
+# fn main() {}
+```
+
+`super` may be repeated several times after the first `super` or `self` to refer to
+ancestor modules.
+
+```rust
+mod a {
+ fn foo() {}
+
+ mod b {
+ mod c {
+ fn foo() {
+ super::super::foo(); // call a's foo function
+ self::super::super::foo(); // call a's foo function
+ }
+ }
+ }
+}
+# fn main() {}
+```
+
+### `crate`
+
+`crate` resolves the path relative to the current crate. `crate` can only be used as the
+first segment, without a preceding `::`.
+
+```rust
+fn foo() {}
+mod a {
+ fn bar() {
+ crate::foo();
+ }
+}
+# fn main() {}
+```
+
+### `$crate`
+
+`$crate` is only used within [macro transcribers], and can only be used as the first
+segment, without a preceding `::`. `$crate` will expand to a path to access items from the
+top level of the crate where the macro is defined, regardless of which crate the macro is
+invoked.
+
+```rust
+pub fn increment(x: u32) -> u32 {
+ x + 1
+}
+
+#[macro_export]
+macro_rules! inc {
+ ($x:expr) => ( $crate::increment($x) )
+}
+# fn main() { }
+```
+
+## Canonical paths
+
+Items defined in a module or implementation have a *canonical path* that
+corresponds to where within its crate it is defined. All other paths to these
+items are aliases. The canonical path is defined as a *path prefix* appended by
+the path segment the item itself defines.
+
+[Implementations] and [use declarations] do not have canonical paths, although
+the items that implementations define do have them. Items defined in
+block expressions do not have canonical paths. Items defined in a module that
+does not have a canonical path do not have a canonical path. Associated items
+defined in an implementation that refers to an item without a canonical path,
+e.g. as the implementing type, the trait being implemented, a type parameter or
+bound on a type parameter, do not have canonical paths.
+
+The path prefix for modules is the canonical path to that module. For bare
+implementations, it is the canonical path of the item being implemented
+surrounded by <span class="parenthetical">angle (`<>`)</span> brackets. For
+[trait implementations], it is the canonical path of the item being implemented
+followed by `as` followed by the canonical path to the trait all surrounded in
+<span class="parenthetical">angle (`<>`)</span> brackets.
+
+The canonical path is only meaningful within a given crate. There is no global
+namespace across crates; an item's canonical path merely identifies it within
+the crate.
+
+```rust
+// Comments show the canonical path of the item.
+
+mod a { // crate::a
+ pub struct Struct; // crate::a::Struct
+
+ pub trait Trait { // crate::a::Trait
+ fn f(&self); // crate::a::Trait::f
+ }
+
+ impl Trait for Struct {
+ fn f(&self) {} // <crate::a::Struct as crate::a::Trait>::f
+ }
+
+ impl Struct {
+ fn g(&self) {} // <crate::a::Struct>::g
+ }
+}
+
+mod without { // crate::without
+ fn canonicals() { // crate::without::canonicals
+ struct OtherStruct; // None
+
+ trait OtherTrait { // None
+ fn g(&self); // None
+ }
+
+ impl OtherTrait for OtherStruct {
+ fn g(&self) {} // None
+ }
+
+ impl OtherTrait for crate::a::Struct {
+ fn g(&self) {} // None
+ }
+
+ impl crate::a::Trait for OtherStruct {
+ fn f(&self) {} // None
+ }
+ }
+}
+
+# fn main() {}
+```
+
+[_BlockExpression_]: expressions/block-expr.md
+[_Expression_]: expressions.md
+[_GenericArgs_]: #paths-in-expressions
+[_Lifetime_]: trait-bounds.md
+[_LiteralExpression_]: expressions/literal-expr.md
+[_SimplePathSegment_]: #simple-paths
+[_Type_]: types.md#type-expressions
+[literal]: expressions/literal-expr.md
+[item]: items.md
+[variable]: variables.md
+[implementations]: items/implementations.md
+[use declarations]: items/use-declarations.md
+[IDENTIFIER]: identifiers.md
+[`use`]: items/use-declarations.md
+[attributes]: attributes.md
+[expressions]: expressions.md
+[extern prelude]: names/preludes.md#extern-prelude
+[macro transcribers]: macros-by-example.md
+[macros]: macros-by-example.md
+[patterns]: patterns.md
+[trait implementations]: items/implementations.md#trait-implementations
+[traits]: items/traits.md
+[visibility]: visibility-and-privacy.md
diff --git a/src/doc/reference/src/patterns.md b/src/doc/reference/src/patterns.md
new file mode 100644
index 000000000..5c81ecd87
--- /dev/null
+++ b/src/doc/reference/src/patterns.md
@@ -0,0 +1,873 @@
+# Patterns
+
+> **<sup>Syntax</sup>**\
+> _Pattern_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `|`<sup>?</sup> _PatternNoTopAlt_ ( `|` _PatternNoTopAlt_ )<sup>\*</sup>
+>
+> _PatternNoTopAlt_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _PatternWithoutRange_\
+> &nbsp;&nbsp; | [_RangePattern_]
+>
+> _PatternWithoutRange_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_LiteralPattern_]\
+> &nbsp;&nbsp; | [_IdentifierPattern_]\
+> &nbsp;&nbsp; | [_WildcardPattern_]\
+> &nbsp;&nbsp; | [_RestPattern_]\
+> &nbsp;&nbsp; | [_ReferencePattern_]\
+> &nbsp;&nbsp; | [_StructPattern_]\
+> &nbsp;&nbsp; | [_TupleStructPattern_]\
+> &nbsp;&nbsp; | [_TuplePattern_]\
+> &nbsp;&nbsp; | [_GroupedPattern_]\
+> &nbsp;&nbsp; | [_SlicePattern_]\
+> &nbsp;&nbsp; | [_PathPattern_]\
+> &nbsp;&nbsp; | [_MacroInvocation_]
+
+Patterns are used to match values against structures and to,
+optionally, bind variables to values inside these structures. They are also
+used in variable declarations and parameters for functions and closures.
+
+The pattern in the following example does four things:
+
+* Tests if `person` has the `car` field filled with something.
+* Tests if the person's `age` field is between 13 and 19, and binds its value to
+ the `person_age` variable.
+* Binds a reference to the `name` field to the variable `person_name`.
+* Ignores the rest of the fields of `person`. The remaining fields can have any value and
+ are not bound to any variables.
+
+```rust
+# struct Car;
+# struct Computer;
+# struct Person {
+# name: String,
+# car: Option<Car>,
+# computer: Option<Computer>,
+# age: u8,
+# }
+# let person = Person {
+# name: String::from("John"),
+# car: Some(Car),
+# computer: None,
+# age: 15,
+# };
+if let
+ Person {
+ car: Some(_),
+ age: person_age @ 13..=19,
+ name: ref person_name,
+ ..
+ } = person
+{
+ println!("{} has a car and is {} years old.", person_name, person_age);
+}
+```
+
+Patterns are used in:
+
+* [`let` declarations](statements.md#let-statements)
+* [Function](items/functions.md) and [closure](expressions/closure-expr.md)
+ parameters
+* [`match` expressions](expressions/match-expr.md)
+* [`if let` expressions](expressions/if-expr.md)
+* [`while let` expressions](expressions/loop-expr.md#predicate-pattern-loops)
+* [`for` expressions](expressions/loop-expr.md#iterator-loops)
+
+## Destructuring
+
+Patterns can be used to *destructure* [structs], [enums], and [tuples].
+Destructuring breaks up a value into its component pieces. The syntax used is
+almost the same as when creating such values. In a pattern whose [scrutinee]
+expression has a `struct`, `enum` or `tuple` type, a placeholder (`_`) stands
+in for a *single* data field, whereas a wildcard `..` stands in for *all* the
+remaining fields of a particular variant. When destructuring a data structure
+with named (but not numbered) fields, it is allowed to write `fieldname` as a
+shorthand for `fieldname: fieldname`.
+
+```rust
+# enum Message {
+# Quit,
+# WriteString(String),
+# Move { x: i32, y: i32 },
+# ChangeColor(u8, u8, u8),
+# }
+# let message = Message::Quit;
+match message {
+ Message::Quit => println!("Quit"),
+ Message::WriteString(write) => println!("{}", &write),
+ Message::Move{ x, y: 0 } => println!("move {} horizontally", x),
+ Message::Move{ .. } => println!("other move"),
+ Message::ChangeColor { 0: red, 1: green, 2: _ } => {
+ println!("color change, red: {}, green: {}", red, green);
+ }
+};
+```
+
+## Refutability
+
+A pattern is said to be *refutable* when it has the possibility of not being matched
+by the value it is being matched against. *Irrefutable* patterns, on the other hand,
+always match the value they are being matched against. Examples:
+
+```rust
+let (x, y) = (1, 2); // "(x, y)" is an irrefutable pattern
+
+if let (a, 3) = (1, 2) { // "(a, 3)" is refutable, and will not match
+ panic!("Shouldn't reach here");
+} else if let (a, 4) = (3, 4) { // "(a, 4)" is refutable, and will match
+ println!("Matched ({}, 4)", a);
+}
+```
+
+## Literal patterns
+
+> **<sup>Syntax</sup>**\
+> _LiteralPattern_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `true` | `false`\
+> &nbsp;&nbsp; | [CHAR_LITERAL]\
+> &nbsp;&nbsp; | [BYTE_LITERAL]\
+> &nbsp;&nbsp; | [STRING_LITERAL]\
+> &nbsp;&nbsp; | [RAW_STRING_LITERAL]\
+> &nbsp;&nbsp; | [BYTE_STRING_LITERAL]\
+> &nbsp;&nbsp; | [RAW_BYTE_STRING_LITERAL]\
+> &nbsp;&nbsp; | `-`<sup>?</sup> [INTEGER_LITERAL]\
+> &nbsp;&nbsp; | `-`<sup>?</sup> [FLOAT_LITERAL]
+
+[CHAR_LITERAL]: tokens.md#character-literals
+[BYTE_LITERAL]: tokens.md#byte-literals
+[STRING_LITERAL]: tokens.md#string-literals
+[RAW_STRING_LITERAL]: tokens.md#raw-string-literals
+[BYTE_STRING_LITERAL]: tokens.md#byte-string-literals
+[RAW_BYTE_STRING_LITERAL]: tokens.md#raw-byte-string-literals
+[INTEGER_LITERAL]: tokens.md#integer-literals
+[FLOAT_LITERAL]: tokens.md#floating-point-literals
+
+_Literal patterns_ match exactly the same value as what is created by the
+literal. Since negative numbers are not [literals], literal patterns also
+accept an optional minus sign before the literal, which acts like the negation
+operator.
+
+<div class="warning">
+
+Floating-point literals are currently accepted, but due to the complexity of comparing
+them, they are going to be forbidden on literal patterns in a future version of Rust (see
+[issue #41620](https://github.com/rust-lang/rust/issues/41620)).
+
+</div>
+
+Literal patterns are always refutable.
+
+Examples:
+
+```rust
+for i in -2..5 {
+ match i {
+ -1 => println!("It's minus one"),
+ 1 => println!("It's a one"),
+ 2|4 => println!("It's either a two or a four"),
+ _ => println!("Matched none of the arms"),
+ }
+}
+```
+
+## Identifier patterns
+
+> **<sup>Syntax</sup>**\
+> _IdentifierPattern_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `ref`<sup>?</sup> `mut`<sup>?</sup> [IDENTIFIER] (`@` [_PatternNoTopAlt_] ) <sup>?</sup>
+
+Identifier patterns bind the value they match to a variable. The identifier
+must be unique within the pattern. The variable will shadow any variables of
+the same name in scope. The scope of the new binding depends on the context of
+where the pattern is used (such as a `let` binding or a `match` arm).
+
+Patterns that consist of only an identifier, possibly with a `mut`, match any value and
+bind it to that identifier. This is the most commonly used pattern in variable
+declarations and parameters for functions and closures.
+
+```rust
+let mut variable = 10;
+fn sum(x: i32, y: i32) -> i32 {
+# x + y
+# }
+```
+
+To bind the matched value of a pattern to a variable, use the syntax `variable @
+subpattern`. For example, the following binds the value 2 to `e` (not the
+entire range: the range here is a range subpattern).
+
+```rust
+let x = 2;
+
+match x {
+ e @ 1 ..= 5 => println!("got a range element {}", e),
+ _ => println!("anything"),
+}
+```
+
+By default, identifier patterns bind a variable to a copy of or move from the
+matched value depending on whether the matched value implements [`Copy`].
+This can be changed to bind to a reference by using the `ref` keyword,
+or to a mutable reference using `ref mut`. For example:
+
+```rust
+# let a = Some(10);
+match a {
+ None => (),
+ Some(value) => (),
+}
+
+match a {
+ None => (),
+ Some(ref value) => (),
+}
+```
+
+In the first match expression, the value is copied (or moved). In the second match,
+a reference to the same memory location is bound to the variable value. This syntax is
+needed because in destructuring subpatterns the `&` operator can't be applied to
+the value's fields. For example, the following is not valid:
+
+```rust,compile_fail
+# struct Person {
+# name: String,
+# age: u8,
+# }
+# let value = Person { name: String::from("John"), age: 23 };
+if let Person { name: &person_name, age: 18..=150 } = value { }
+```
+
+To make it valid, write the following:
+
+```rust
+# struct Person {
+# name: String,
+# age: u8,
+# }
+# let value = Person { name: String::from("John"), age: 23 };
+if let Person {name: ref person_name, age: 18..=150 } = value { }
+```
+
+Thus, `ref` is not something that is being matched against. Its objective is
+exclusively to make the matched binding a reference, instead of potentially
+copying or moving what was matched.
+
+[Path patterns](#path-patterns) take precedence over identifier patterns. It is an error
+if `ref` or `ref mut` is specified and the identifier shadows a constant.
+
+Identifier patterns are irrefutable if the `@` subpattern is irrefutable or
+the subpattern is not specified.
+
+### Binding modes
+
+To service better ergonomics, patterns operate in different *binding modes* in
+order to make it easier to bind references to values. When a reference value is matched by
+a non-reference pattern, it will be automatically treated as a `ref` or `ref mut` binding.
+Example:
+
+```rust
+let x: &Option<i32> = &Some(3);
+if let Some(y) = x {
+ // y was converted to `ref y` and its type is &i32
+}
+```
+
+*Non-reference patterns* include all patterns except bindings, [wildcard
+patterns](#wildcard-pattern) (`_`), [`const` patterns](#path-patterns) of reference types,
+and [reference patterns](#reference-patterns).
+
+If a binding pattern does not explicitly have `ref`, `ref mut`, or `mut`, then it uses the
+*default binding mode* to determine how the variable is bound. The default binding
+mode starts in "move" mode which uses move semantics. When matching a pattern, the
+compiler starts from the outside of the pattern and works inwards. Each time a reference
+is matched using a non-reference pattern, it will automatically dereference the value and
+update the default binding mode. References will set the default binding mode to `ref`.
+Mutable references will set the mode to `ref mut` unless the mode is already `ref` in
+which case it remains `ref`. If the automatically dereferenced value is still a reference,
+it is dereferenced and this process repeats.
+
+Move bindings and reference bindings can be mixed together in the same pattern, doing so will
+result in partial move of the object bound to and the object cannot be used afterwards.
+This applies only if the type cannot be copied.
+
+In the example below, `name` is moved out of `person`, trying to use `person` as a whole or
+`person.name` would result in an error because of *partial move*.
+
+Example:
+
+```rust
+# struct Person {
+# name: String,
+# age: u8,
+# }
+# let person = Person{ name: String::from("John"), age: 23 };
+// `name` is moved from person and `age` referenced
+let Person { name, ref age } = person;
+```
+
+## Wildcard pattern
+
+> **<sup>Syntax</sup>**\
+> _WildcardPattern_ :\
+> &nbsp;&nbsp; `_`
+
+The _wildcard pattern_ (an underscore symbol) matches any value. It is used to ignore values when they don't
+matter. Inside other patterns it matches a single data field (as opposed to the `..`
+which matches the remaining fields). Unlike identifier patterns, it does not copy, move
+or borrow the value it matches.
+
+Examples:
+
+```rust
+# let x = 20;
+let (a, _) = (10, x); // the x is always matched by _
+# assert_eq!(a, 10);
+
+// ignore a function/closure param
+let real_part = |a: f64, _: f64| { a };
+
+// ignore a field from a struct
+# struct RGBA {
+# r: f32,
+# g: f32,
+# b: f32,
+# a: f32,
+# }
+# let color = RGBA{r: 0.4, g: 0.1, b: 0.9, a: 0.5};
+let RGBA{r: red, g: green, b: blue, a: _} = color;
+# assert_eq!(color.r, red);
+# assert_eq!(color.g, green);
+# assert_eq!(color.b, blue);
+
+// accept any Some, with any value
+# let x = Some(10);
+if let Some(_) = x {}
+```
+
+The wildcard pattern is always irrefutable.
+
+## Rest patterns
+
+> **<sup>Syntax</sup>**\
+> _RestPattern_ :\
+> &nbsp;&nbsp; `..`
+
+The _rest pattern_ (the `..` token) acts as a variable-length pattern which
+matches zero or more elements that haven't been matched already before and
+after. It may only be used in [tuple](#tuple-patterns), [tuple
+struct](#tuple-struct-patterns), and [slice](#slice-patterns) patterns, and
+may only appear once as one of the elements in those patterns. It is also
+allowed in an [identifier pattern](#identifier-patterns) for [slice
+patterns](#slice-patterns) only.
+
+The rest pattern is always irrefutable.
+
+Examples:
+
+```rust
+# let words = vec!["a", "b", "c"];
+# let slice = &words[..];
+match slice {
+ [] => println!("slice is empty"),
+ [one] => println!("single element {}", one),
+ [head, tail @ ..] => println!("head={} tail={:?}", head, tail),
+}
+
+match slice {
+ // Ignore everything but the last element, which must be "!".
+ [.., "!"] => println!("!!!"),
+
+ // `start` is a slice of everything except the last element, which must be "z".
+ [start @ .., "z"] => println!("starts with: {:?}", start),
+
+ // `end` is a slice of everything but the first element, which must be "a".
+ ["a", end @ ..] => println!("ends with: {:?}", end),
+
+ // 'whole' is the entire slice and `last` is the final element
+ whole @ [.., last] => println!("the last element of {:?} is {}", whole, last),
+
+ rest => println!("{:?}", rest),
+}
+
+if let [.., penultimate, _] = slice {
+ println!("next to last is {}", penultimate);
+}
+
+# let tuple = (1, 2, 3, 4, 5);
+// Rest patterns may also be used in tuple and tuple struct patterns.
+match tuple {
+ (1, .., y, z) => println!("y={} z={}", y, z),
+ (.., 5) => println!("tail must be 5"),
+ (..) => println!("matches everything else"),
+}
+```
+
+## Range patterns
+
+> **<sup>Syntax</sup>**\
+> _RangePattern_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _InclusiveRangePattern_\
+> &nbsp;&nbsp; | _HalfOpenRangePattern_\
+> &nbsp;&nbsp; | _ObsoleteRangePattern_
+>
+> _InclusiveRangePattern_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _RangePatternBound_ `..=` _RangePatternBound_
+>
+> _HalfOpenRangePattern_ :\
+> &nbsp;&nbsp; | _RangePatternBound_ `..`
+>
+> _ObsoleteRangePattern_ :\
+> &nbsp;&nbsp; _RangePatternBound_ `...` _RangePatternBound_
+>
+> _RangePatternBound_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [CHAR_LITERAL]\
+> &nbsp;&nbsp; | [BYTE_LITERAL]\
+> &nbsp;&nbsp; | `-`<sup>?</sup> [INTEGER_LITERAL]\
+> &nbsp;&nbsp; | `-`<sup>?</sup> [FLOAT_LITERAL]\
+> &nbsp;&nbsp; | [_PathExpression_]
+
+Range patterns match values within the range defined by their bounds. A range pattern may be
+closed or half-open. A range pattern is closed if it has both a lower and an upper bound, and
+it matches all the values between and including both of its bounds. A range pattern that is
+half-open is written with a lower bound but not an upper bound, and matches any value equal to
+or greater than the specified lower bound.
+
+For example, a pattern `'m'..='p'` will match only the values `'m'`, `'n'`, `'o'`, and `'p'`. For an integer the
+pattern `1..` will match 9, or 9001, or 9007199254740991 (if it is of an appropriate size), but
+not 0, and not negative numbers for signed integers. The bounds can be literals or paths that point
+to constant values.
+
+A half-open range pattern in the style `a..` cannot be used to match within the context of a slice.
+
+A pattern `a..=b` must always have a &le; b. It is an error to have a range pattern
+`10..=0`, for example.
+
+Range patterns only work on scalar types. The accepted types are:
+
+* Integer types (u8, i8, u16, i16, usize, isize, etc.).
+* Character types (char).
+* Floating point types (f32 and f64). This is being deprecated and will not be available
+ in a future version of Rust (see
+ [issue #41620](https://github.com/rust-lang/rust/issues/41620)).
+
+Examples:
+
+```rust
+# let c = 'f';
+let valid_variable = match c {
+ 'a'..='z' => true,
+ 'A'..='Z' => true,
+ 'α'..='ω' => true,
+ _ => false,
+};
+
+# let ph = 10;
+println!("{}", match ph {
+ 0..=6 => "acid",
+ 7 => "neutral",
+ 8..=14 => "base",
+ _ => unreachable!(),
+});
+
+# let uint: u32 = 5;
+match uint {
+ 0 => "zero!",
+ 1.. => "positive number!",
+};
+
+// using paths to constants:
+# const TROPOSPHERE_MIN : u8 = 6;
+# const TROPOSPHERE_MAX : u8 = 20;
+#
+# const STRATOSPHERE_MIN : u8 = TROPOSPHERE_MAX + 1;
+# const STRATOSPHERE_MAX : u8 = 50;
+#
+# const MESOSPHERE_MIN : u8 = STRATOSPHERE_MAX + 1;
+# const MESOSPHERE_MAX : u8 = 85;
+#
+# let altitude = 70;
+#
+println!("{}", match altitude {
+ TROPOSPHERE_MIN..=TROPOSPHERE_MAX => "troposphere",
+ STRATOSPHERE_MIN..=STRATOSPHERE_MAX => "stratosphere",
+ MESOSPHERE_MIN..=MESOSPHERE_MAX => "mesosphere",
+ _ => "outer space, maybe",
+});
+
+# pub mod binary {
+# pub const MEGA : u64 = 1024*1024;
+# pub const GIGA : u64 = 1024*1024*1024;
+# }
+# let n_items = 20_832_425;
+# let bytes_per_item = 12;
+if let size @ binary::MEGA..=binary::GIGA = n_items * bytes_per_item {
+ println!("It fits and occupies {} bytes", size);
+}
+
+# trait MaxValue {
+# const MAX: u64;
+# }
+# impl MaxValue for u8 {
+# const MAX: u64 = (1 << 8) - 1;
+# }
+# impl MaxValue for u16 {
+# const MAX: u64 = (1 << 16) - 1;
+# }
+# impl MaxValue for u32 {
+# const MAX: u64 = (1 << 32) - 1;
+# }
+// using qualified paths:
+println!("{}", match 0xfacade {
+ 0 ..= <u8 as MaxValue>::MAX => "fits in a u8",
+ 0 ..= <u16 as MaxValue>::MAX => "fits in a u16",
+ 0 ..= <u32 as MaxValue>::MAX => "fits in a u32",
+ _ => "too big",
+});
+```
+
+Range patterns for (non-`usize` and -`isize`) integer and `char` types are irrefutable
+when they span the entire set of possible values of a type. For example, `0u8..=255u8`
+is irrefutable. The range of values for an integer type is the closed range from its
+minimum to maximum value. The range of values for a `char` type are precisely those
+ranges containing all Unicode Scalar Values: `'\u{0000}'..='\u{D7FF}'` and
+`'\u{E000}'..='\u{10FFFF}'`.
+
+> **Edition Differences**: Before the 2021 edition, closed range patterns may also be written using `...` as an alternative to `..=`, with the same meaning.
+
+## Reference patterns
+
+> **<sup>Syntax</sup>**\
+> _ReferencePattern_ :\
+> &nbsp;&nbsp; (`&`|`&&`) `mut`<sup>?</sup> [_PatternWithoutRange_]
+
+Reference patterns dereference the pointers that are being matched
+and, thus, borrow them.
+
+For example, these two matches on `x: &i32` are equivalent:
+
+```rust
+let int_reference = &3;
+
+let a = match *int_reference { 0 => "zero", _ => "some" };
+let b = match int_reference { &0 => "zero", _ => "some" };
+
+assert_eq!(a, b);
+```
+
+The grammar production for reference patterns has to match the token `&&` to match a
+reference to a reference because it is a token by itself, not two `&` tokens.
+
+Adding the `mut` keyword dereferences a mutable reference. The mutability must match the
+mutability of the reference.
+
+Reference patterns are always irrefutable.
+
+## Struct patterns
+
+> **<sup>Syntax</sup>**\
+> _StructPattern_ :\
+> &nbsp;&nbsp; [_PathInExpression_] `{`\
+> &nbsp;&nbsp; &nbsp;&nbsp; _StructPatternElements_ <sup>?</sup>\
+> &nbsp;&nbsp; `}`
+>
+> _StructPatternElements_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _StructPatternFields_ (`,` | `,` _StructPatternEtCetera_)<sup>?</sup>\
+> &nbsp;&nbsp; | _StructPatternEtCetera_
+>
+> _StructPatternFields_ :\
+> &nbsp;&nbsp; _StructPatternField_ (`,` _StructPatternField_) <sup>\*</sup>
+>
+> _StructPatternField_ :\
+> &nbsp;&nbsp; [_OuterAttribute_] <sup>\*</sup>\
+> &nbsp;&nbsp; (\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; [TUPLE_INDEX] `:` [_Pattern_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | [IDENTIFIER] `:` [_Pattern_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | `ref`<sup>?</sup> `mut`<sup>?</sup> [IDENTIFIER]\
+> &nbsp;&nbsp; )
+>
+> _StructPatternEtCetera_ :\
+> &nbsp;&nbsp; [_OuterAttribute_] <sup>\*</sup>\
+> &nbsp;&nbsp; `..`
+
+[_OuterAttribute_]: attributes.md
+[TUPLE_INDEX]: tokens.md#tuple-index
+
+Struct patterns match struct values that match all criteria defined by its subpatterns.
+They are also used to [destructure](#destructuring) a struct.
+
+On a struct pattern, the fields are referenced by name, index (in the case of tuple
+structs) or ignored by use of `..`:
+
+```rust
+# struct Point {
+# x: u32,
+# y: u32,
+# }
+# let s = Point {x: 1, y: 1};
+#
+match s {
+ Point {x: 10, y: 20} => (),
+ Point {y: 10, x: 20} => (), // order doesn't matter
+ Point {x: 10, ..} => (),
+ Point {..} => (),
+}
+
+# struct PointTuple (
+# u32,
+# u32,
+# );
+# let t = PointTuple(1, 2);
+#
+match t {
+ PointTuple {0: 10, 1: 20} => (),
+ PointTuple {1: 10, 0: 20} => (), // order doesn't matter
+ PointTuple {0: 10, ..} => (),
+ PointTuple {..} => (),
+}
+```
+
+If `..` is not used, it is required to match all fields:
+
+```rust
+# struct Struct {
+# a: i32,
+# b: char,
+# c: bool,
+# }
+# let mut struct_value = Struct{a: 10, b: 'X', c: false};
+#
+match struct_value {
+ Struct{a: 10, b: 'X', c: false} => (),
+ Struct{a: 10, b: 'X', ref c} => (),
+ Struct{a: 10, b: 'X', ref mut c} => (),
+ Struct{a: 10, b: 'X', c: _} => (),
+ Struct{a: _, b: _, c: _} => (),
+}
+```
+
+The `ref` and/or `mut` _IDENTIFIER_ syntax matches any value and binds it to
+a variable with the same name as the given field.
+
+```rust
+# struct Struct {
+# a: i32,
+# b: char,
+# c: bool,
+# }
+# let struct_value = Struct{a: 10, b: 'X', c: false};
+#
+let Struct{a: x, b: y, c: z} = struct_value; // destructure all fields
+```
+
+A struct pattern is refutable when one of its subpatterns is refutable.
+
+## Tuple struct patterns
+
+> **<sup>Syntax</sup>**\
+> _TupleStructPattern_ :\
+> &nbsp;&nbsp; [_PathInExpression_] `(` _TupleStructItems_<sup>?</sup> `)`
+>
+> _TupleStructItems_ :\
+> &nbsp;&nbsp; [_Pattern_]&nbsp;( `,` [_Pattern_] )<sup>\*</sup> `,`<sup>?</sup>
+
+Tuple struct patterns match tuple struct and enum values that match all criteria defined
+by its subpatterns. They are also used to [destructure](#destructuring) a tuple struct or
+enum value.
+
+A tuple struct pattern is refutable when one of its subpatterns is refutable.
+
+## Tuple patterns
+
+> **<sup>Syntax</sup>**\
+> _TuplePattern_ :\
+> &nbsp;&nbsp; `(` _TuplePatternItems_<sup>?</sup> `)`
+>
+> _TuplePatternItems_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_Pattern_] `,`\
+> &nbsp;&nbsp; | [_RestPattern_]\
+> &nbsp;&nbsp; | [_Pattern_]&nbsp;(`,` [_Pattern_])<sup>+</sup> `,`<sup>?</sup>
+
+Tuple patterns match tuple values that match all criteria defined by its subpatterns.
+They are also used to [destructure](#destructuring) a tuple.
+
+The form `(..)` with a single [_RestPattern_] is a special form that does not
+require a comma, and matches a tuple of any size.
+
+The tuple pattern is refutable when one of its subpatterns is refutable.
+
+An example of using tuple patterns:
+
+```rust
+let pair = (10, "ten");
+let (a, b) = pair;
+
+assert_eq!(a, 10);
+assert_eq!(b, "ten");
+```
+
+## Grouped patterns
+
+> **<sup>Syntax</sup>**\
+> _GroupedPattern_ :\
+> &nbsp;&nbsp; `(` [_Pattern_] `)`
+
+Enclosing a pattern in parentheses can be used to explicitly control the
+precedence of compound patterns. For example, a reference pattern next to a
+range pattern such as `&0..=5` is ambiguous and is not allowed, but can be
+expressed with parentheses.
+
+```rust
+let int_reference = &3;
+match int_reference {
+ &(0..=5) => (),
+ _ => (),
+}
+```
+
+## Slice patterns
+
+> **<sup>Syntax</sup>**\
+> _SlicePattern_ :\
+> &nbsp;&nbsp; `[` _SlicePatternItems_<sup>?</sup> `]`
+>
+> _SlicePatternItems_ :\
+> &nbsp;&nbsp; [_Pattern_] \(`,` [_Pattern_])<sup>\*</sup> `,`<sup>?</sup>
+
+Slice patterns can match both arrays of fixed size and slices of dynamic size.
+```rust
+// Fixed size
+let arr = [1, 2, 3];
+match arr {
+ [1, _, _] => "starts with one",
+ [a, b, c] => "starts with something else",
+};
+```
+```rust
+// Dynamic size
+let v = vec![1, 2, 3];
+match v[..] {
+ [a, b] => { /* this arm will not apply because the length doesn't match */ }
+ [a, b, c] => { /* this arm will apply */ }
+ _ => { /* this wildcard is required, since the length is not known statically */ }
+};
+```
+
+Slice patterns are irrefutable when matching an array as long as each element
+is irrefutable. When matching a slice, it is irrefutable only in the form with
+a single `..` [rest pattern](#rest-patterns) or [identifier
+pattern](#identifier-patterns) with the `..` rest pattern as a subpattern.
+
+Within a slice, a half-open range pattern like `a..` must be enclosed in parentheses,
+as in `(a..)`, to clarify it is intended to match a single value.
+A future version of Rust may give the non-parenthesized version an alternate meaning.
+
+## Path patterns
+
+> **<sup>Syntax</sup>**\
+> _PathPattern_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_PathExpression_]
+
+_Path patterns_ are patterns that refer either to constant values or
+to structs or enum variants that have no fields.
+
+Unqualified path patterns can refer to:
+
+* enum variants
+* structs
+* constants
+* associated constants
+
+Qualified path patterns can only refer to associated constants.
+
+Constants cannot be a union type. Struct and enum constants must have
+`#[derive(PartialEq, Eq)]` (not merely implemented).
+
+Path patterns are irrefutable when they refer to structs or an enum variant when the enum
+has only one variant or a constant whose type is irrefutable. They are refutable when they
+refer to refutable constants or enum variants for enums with multiple variants.
+
+## Or-patterns
+
+_Or-patterns_ are patterns that match on one of two or more sub-patterns (e.g.
+`A | B | C`). They can nest arbitrarily. Syntactically, or-patterns are allowed
+in any of the places where other patterns are allowed (represented by the
+_Pattern_ production), with the exceptions of `let`-bindings and function and
+closure arguments (represented by the _PatternNoTopAlt_ production).
+
+### Static semantics
+
+1. Given a pattern `p | q` at some depth for some arbitrary patterns `p` and `q`,
+ the pattern is considered ill-formed if:
+
+ + the type inferred for `p` does not unify with the type inferred for `q`, or
+ + the same set of bindings are not introduced in `p` and `q`, or
+ + the type of any two bindings with the same name in `p` and `q` do not unify
+ with respect to types or binding modes.
+
+ Unification of types is in all instances aforementioned exact and
+ implicit [type coercions] do not apply.
+
+2. When type checking an expression `match e_s { a_1 => e_1, ... a_n => e_n }`,
+ for each match arm `a_i` which contains a pattern of form `p_i | q_i`,
+ the pattern `p_i | q_i` is considered ill formed if,
+ at the depth `d` where it exists the fragment of `e_s` at depth `d`,
+ the type of the expression fragment does not unify with `p_i | q_i`.
+
+3. With respect to exhaustiveness checking, a pattern `p | q` is
+ considered to cover `p` as well as `q`. For some constructor `c(x, ..)`
+ the distributive law applies such that `c(p | q, ..rest)` covers the same
+ set of value as `c(p, ..rest) | c(q, ..rest)` does. This can be applied
+ recursively until there are no more nested patterns of form `p | q` other
+ than those that exist at the top level.
+
+ Note that by *"constructor"* we do not refer to tuple struct patterns,
+ but rather we refer to a pattern for any product type.
+ This includes enum variants, tuple structs, structs with named fields,
+ arrays, tuples, and slices.
+
+### Dynamic semantics
+
+1. The dynamic semantics of pattern matching a scrutinee expression `e_s`
+ against a pattern `c(p | q, ..rest)` at depth `d` where `c` is some constructor,
+ `p` and `q` are arbitrary patterns, and `rest` is optionally any remaining
+ potential factors in `c`, is defined as being the same as that of
+ `c(p, ..rest) | c(q, ..rest)`.
+
+### Precedence with other undelimited patterns
+
+As shown elsewhere in this chapter, there are several types of patterns that
+are syntactically undelimited, including identifier patterns, reference
+patterns, and or-patterns. Or-patterns always have the lowest-precedence. This
+allows us to reserve syntactic space for a possible future type ascription
+feature and also to reduce ambiguity. For example, `x @ A(..) | B(..)` will
+result in an error that `x` is not bound in all patterns, `&A(x) | B(x)` will
+result in a type mismatch between `x` in the different subpatterns.
+
+[_GroupedPattern_]: #grouped-patterns
+[_IdentifierPattern_]: #identifier-patterns
+[_LiteralPattern_]: #literal-patterns
+[_MacroInvocation_]: macros.md#macro-invocation
+[_ObsoleteRangePattern_]: #range-patterns
+[_PathInExpression_]: paths.md#paths-in-expressions
+[_PathExpression_]: expressions/path-expr.md
+[_PathPattern_]: #path-patterns
+[_Pattern_]: #patterns
+[_PatternNoTopAlt_]: #patterns
+[_PatternWithoutRange_]: #patterns
+[_QualifiedPathInExpression_]: paths.md#qualified-paths
+[_RangePattern_]: #range-patterns
+[_ReferencePattern_]: #reference-patterns
+[_RestPattern_]: #rest-patterns
+[_SlicePattern_]: #slice-patterns
+[_StructPattern_]: #struct-patterns
+[_TuplePattern_]: #tuple-patterns
+[_TupleStructPattern_]: #tuple-struct-patterns
+[_WildcardPattern_]: #wildcard-pattern
+
+[`Copy`]: special-types-and-traits.md#copy
+[IDENTIFIER]: identifiers.md
+[enums]: items/enumerations.md
+[literals]: expressions/literal-expr.md
+[structs]: items/structs.md
+[tuples]: types/tuple.md
+[scrutinee]: glossary.md#scrutinee
+[type coercions]: type-coercions.md
diff --git a/src/doc/reference/src/procedural-macros.md b/src/doc/reference/src/procedural-macros.md
new file mode 100644
index 000000000..31f029a63
--- /dev/null
+++ b/src/doc/reference/src/procedural-macros.md
@@ -0,0 +1,367 @@
+## Procedural Macros
+
+*Procedural macros* allow creating syntax extensions as execution of a function.
+Procedural macros come in one of three flavors:
+
+* [Function-like macros] - `custom!(...)`
+* [Derive macros] - `#[derive(CustomDerive)]`
+* [Attribute macros] - `#[CustomAttribute]`
+
+Procedural macros allow you to run code at compile time that operates over Rust
+syntax, both consuming and producing Rust syntax. You can sort of think of
+procedural macros as functions from an AST to another AST.
+
+Procedural macros must be defined in a crate with the [crate type] of
+`proc-macro`.
+
+> **Note**: When using Cargo, Procedural macro crates are defined with the
+> `proc-macro` key in your manifest:
+>
+> ```toml
+> [lib]
+> proc-macro = true
+> ```
+
+As functions, they must either return syntax, panic, or loop endlessly. Returned
+syntax either replaces or adds the syntax depending on the kind of procedural
+macro. Panics are caught by the compiler and are turned into a compiler error.
+Endless loops are not caught by the compiler which hangs the compiler.
+
+Procedural macros run during compilation, and thus have the same resources that
+the compiler has. For example, standard input, error, and output are the same
+that the compiler has access to. Similarly, file access is the same. Because
+of this, procedural macros have the same security concerns that [Cargo's
+build scripts] have.
+
+Procedural macros have two ways of reporting errors. The first is to panic. The
+second is to emit a [`compile_error`] macro invocation.
+
+### The `proc_macro` crate
+
+Procedural macro crates almost always will link to the compiler-provided
+[`proc_macro` crate]. The `proc_macro` crate provides types required for
+writing procedural macros and facilities to make it easier.
+
+This crate primarily contains a [`TokenStream`] type. Procedural macros operate
+over *token streams* instead of AST nodes, which is a far more stable interface
+over time for both the compiler and for procedural macros to target. A
+*token stream* is roughly equivalent to `Vec<TokenTree>` where a `TokenTree`
+can roughly be thought of as lexical token. For example `foo` is an `Ident`
+token, `.` is a `Punct` token, and `1.2` is a `Literal` token. The `TokenStream`
+type, unlike `Vec<TokenTree>`, is cheap to clone.
+
+All tokens have an associated `Span`. A `Span` is an opaque value that cannot
+be modified but can be manufactured. `Span`s represent an extent of source
+code within a program and are primarily used for error reporting. While you
+cannot modify a `Span` itself, you can always change the `Span` *associated*
+with any token, such as through getting a `Span` from another token.
+
+### Procedural macro hygiene
+
+Procedural macros are *unhygienic*. This means they behave as if the output
+token stream was simply written inline to the code it's next to. This means that
+it's affected by external items and also affects external imports.
+
+Macro authors need to be careful to ensure their macros work in as many contexts
+as possible given this limitation. This often includes using absolute paths to
+items in libraries (for example, `::std::option::Option` instead of `Option`) or
+by ensuring that generated functions have names that are unlikely to clash with
+other functions (like `__internal_foo` instead of `foo`).
+
+### Function-like procedural macros
+
+*Function-like procedural macros* are procedural macros that are invoked using
+the macro invocation operator (`!`).
+
+These macros are defined by a [public]&#32;[function] with the `proc_macro`
+[attribute] and a signature of `(TokenStream) -> TokenStream`. The input
+[`TokenStream`] is what is inside the delimiters of the macro invocation and the
+output [`TokenStream`] replaces the entire macro invocation.
+
+For example, the following macro definition ignores its input and outputs a
+function `answer` into its scope.
+
+<!-- ignore: test doesn't support proc-macro -->
+```rust,ignore
+# #![crate_type = "proc-macro"]
+extern crate proc_macro;
+use proc_macro::TokenStream;
+
+#[proc_macro]
+pub fn make_answer(_item: TokenStream) -> TokenStream {
+ "fn answer() -> u32 { 42 }".parse().unwrap()
+}
+```
+
+And then we use it in a binary crate to print "42" to standard output.
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+extern crate proc_macro_examples;
+use proc_macro_examples::make_answer;
+
+make_answer!();
+
+fn main() {
+ println!("{}", answer());
+}
+```
+
+Function-like procedural macros may be invoked in any macro invocation
+position, which includes [statements], [expressions], [patterns], [type
+expressions], [item] positions, including items in [`extern` blocks], inherent
+and trait [implementations], and [trait definitions].
+
+### Derive macros
+
+*Derive macros* define new inputs for the [`derive` attribute]. These macros
+can create new [items] given the token stream of a [struct], [enum], or [union].
+They can also define [derive macro helper attributes].
+
+Custom derive macros are defined by a [public]&#32;[function] with the
+`proc_macro_derive` attribute and a signature of `(TokenStream) -> TokenStream`.
+
+The input [`TokenStream`] is the token stream of the item that has the `derive`
+attribute on it. The output [`TokenStream`] must be a set of items that are
+then appended to the [module] or [block] that the item from the input
+[`TokenStream`] is in.
+
+The following is an example of a derive macro. Instead of doing anything
+useful with its input, it just appends a function `answer`.
+
+<!-- ignore: test doesn't support proc-macro -->
+```rust,ignore
+# #![crate_type = "proc-macro"]
+extern crate proc_macro;
+use proc_macro::TokenStream;
+
+#[proc_macro_derive(AnswerFn)]
+pub fn derive_answer_fn(_item: TokenStream) -> TokenStream {
+ "fn answer() -> u32 { 42 }".parse().unwrap()
+}
+```
+
+And then using said derive macro:
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+extern crate proc_macro_examples;
+use proc_macro_examples::AnswerFn;
+
+#[derive(AnswerFn)]
+struct Struct;
+
+fn main() {
+ assert_eq!(42, answer());
+}
+```
+
+#### Derive macro helper attributes
+
+Derive macros can add additional [attributes] into the scope of the [item]
+they are on. Said attributes are called *derive macro helper attributes*. These
+attributes are [inert], and their only purpose is to be fed into the derive
+macro that defined them. That said, they can be seen by all macros.
+
+The way to define helper attributes is to put an `attributes` key in the
+`proc_macro_derive` macro with a comma separated list of identifiers that are
+the names of the helper attributes.
+
+For example, the following derive macro defines a helper attribute
+`helper`, but ultimately doesn't do anything with it.
+
+<!-- ignore: test doesn't support proc-macro -->
+```rust,ignore
+# #![crate_type="proc-macro"]
+# extern crate proc_macro;
+# use proc_macro::TokenStream;
+
+#[proc_macro_derive(HelperAttr, attributes(helper))]
+pub fn derive_helper_attr(_item: TokenStream) -> TokenStream {
+ TokenStream::new()
+}
+```
+
+And then usage on the derive macro on a struct:
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+#[derive(HelperAttr)]
+struct Struct {
+ #[helper] field: ()
+}
+```
+
+### Attribute macros
+
+*Attribute macros* define new [outer attributes][attributes] which can be
+attached to [items], including items in [`extern` blocks], inherent and trait
+[implementations], and [trait definitions].
+
+Attribute macros are defined by a [public]&#32;[function] with the
+`proc_macro_attribute` [attribute] that has a signature of `(TokenStream,
+TokenStream) -> TokenStream`. The first [`TokenStream`] is the delimited token
+tree following the attribute's name, not including the outer delimiters. If
+the attribute is written as a bare attribute name, the attribute
+[`TokenStream`] is empty. The second [`TokenStream`] is the rest of the [item]
+including other [attributes] on the [item]. The returned [`TokenStream`]
+replaces the [item] with an arbitrary number of [items].
+
+For example, this attribute macro takes the input stream and returns it as is,
+effectively being the no-op of attributes.
+
+<!-- ignore: test doesn't support proc-macro -->
+```rust,ignore
+# #![crate_type = "proc-macro"]
+# extern crate proc_macro;
+# use proc_macro::TokenStream;
+
+#[proc_macro_attribute]
+pub fn return_as_is(_attr: TokenStream, item: TokenStream) -> TokenStream {
+ item
+}
+```
+
+This following example shows the stringified [`TokenStream`s] that the attribute
+macros see. The output will show in the output of the compiler. The output is
+shown in the comments after the function prefixed with "out:".
+
+<!-- ignore: test doesn't support proc-macro -->
+```rust,ignore
+// my-macro/src/lib.rs
+# extern crate proc_macro;
+# use proc_macro::TokenStream;
+
+#[proc_macro_attribute]
+pub fn show_streams(attr: TokenStream, item: TokenStream) -> TokenStream {
+ println!("attr: \"{}\"", attr.to_string());
+ println!("item: \"{}\"", item.to_string());
+ item
+}
+```
+
+<!-- ignore: requires external crates -->
+```rust,ignore
+// src/lib.rs
+extern crate my_macro;
+
+use my_macro::show_streams;
+
+// Example: Basic function
+#[show_streams]
+fn invoke1() {}
+// out: attr: ""
+// out: item: "fn invoke1() { }"
+
+// Example: Attribute with input
+#[show_streams(bar)]
+fn invoke2() {}
+// out: attr: "bar"
+// out: item: "fn invoke2() {}"
+
+// Example: Multiple tokens in the input
+#[show_streams(multiple => tokens)]
+fn invoke3() {}
+// out: attr: "multiple => tokens"
+// out: item: "fn invoke3() {}"
+
+// Example:
+#[show_streams { delimiters }]
+fn invoke4() {}
+// out: attr: "delimiters"
+// out: item: "fn invoke4() {}"
+```
+
+### Declarative macro tokens and procedural macro tokens
+
+Declarative `macro_rules` macros and procedural macros use similar, but
+different definitions for tokens (or rather [`TokenTree`s].)
+
+Token trees in `macro_rules` (corresponding to `tt` matchers) are defined as
+- Delimited groups (`(...)`, `{...}`, etc)
+- All operators supported by the language, both single-character and
+ multi-character ones (`+`, `+=`).
+ - Note that this set doesn't include the single quote `'`.
+- Literals (`"string"`, `1`, etc)
+ - Note that negation (e.g. `-1`) is never a part of such literal tokens,
+ but a separate operator token.
+- Identifiers, including keywords (`ident`, `r#ident`, `fn`)
+- Lifetimes (`'ident`)
+- Metavariable substitutions in `macro_rules` (e.g. `$my_expr` in
+ `macro_rules! mac { ($my_expr: expr) => { $my_expr } }` after the `mac`'s
+ expansion, which will be considered a single token tree regardless of the
+ passed expression)
+
+Token trees in procedural macros are defined as
+- Delimited groups (`(...)`, `{...}`, etc)
+- All punctuation characters used in operators supported by the language (`+`,
+ but not `+=`), and also the single quote `'` character (typically used in
+ lifetimes, see below for lifetime splitting and joining behavior)
+- Literals (`"string"`, `1`, etc)
+ - Negation (e.g. `-1`) is supported as a part of integer
+ and floating point literals.
+- Identifiers, including keywords (`ident`, `r#ident`, `fn`)
+
+Mismatches between these two definitions are accounted for when token streams
+are passed to and from procedural macros. \
+Note that the conversions below may happen lazily, so they might not happen if
+the tokens are not actually inspected.
+
+When passed to a proc-macro
+- All multi-character operators are broken into single characters.
+- Lifetimes are broken into a `'` character and an identifier.
+- All metavariable substitutions are represented as their underlying token
+ streams.
+ - Such token streams may be wrapped into delimited groups ([`Group`]) with
+ implicit delimiters ([`Delimiter::None`]) when it's necessary for
+ preserving parsing priorities.
+ - `tt` and `ident` substitutions are never wrapped into such groups and
+ always represented as their underlying token trees.
+
+When emitted from a proc macro
+- Punctuation characters are glued into multi-character operators
+ when applicable.
+- Single quotes `'` joined with identifiers are glued into lifetimes.
+- Negative literals are converted into two tokens (the `-` and the literal)
+ possibly wrapped into a delimited group ([`Group`]) with implicit delimiters
+ ([`Delimiter::None`]) when it's necessary for preserving parsing priorities.
+
+Note that neither declarative nor procedural macros support doc comment tokens
+(e.g. `/// Doc`), so they are always converted to token streams representing
+their equivalent `#[doc = r"str"]` attributes when passed to macros.
+
+[Attribute macros]: #attribute-macros
+[Cargo's build scripts]: ../cargo/reference/build-scripts.html
+[Derive macros]: #derive-macros
+[Function-like macros]: #function-like-procedural-macros
+[`Delimiter::None`]: ../proc_macro/enum.Delimiter.html#variant.None
+[`Group`]: ../proc_macro/struct.Group.html
+[`TokenStream`]: ../proc_macro/struct.TokenStream.html
+[`TokenStream`s]: ../proc_macro/struct.TokenStream.html
+[`TokenTree`s]: ../proc_macro/enum.TokenTree.html
+[`compile_error`]: ../std/macro.compile_error.html
+[`derive` attribute]: attributes/derive.md
+[`extern` blocks]: items/external-blocks.md
+[`macro_rules`]: macros-by-example.md
+[`proc_macro` crate]: ../proc_macro/index.html
+[attribute]: attributes.md
+[attributes]: attributes.md
+[block]: expressions/block-expr.md
+[crate type]: linkage.md
+[derive macro helper attributes]: #derive-macro-helper-attributes
+[enum]: items/enumerations.md
+[expressions]: expressions.md
+[function]: items/functions.md
+[implementations]: items/implementations.md
+[inert]: attributes.md#active-and-inert-attributes
+[item]: items.md
+[items]: items.md
+[module]: items/modules.md
+[patterns]: patterns.md
+[public]: visibility-and-privacy.md
+[statements]: statements.md
+[struct]: items/structs.md
+[trait definitions]: items/traits.md
+[type expressions]: types.md#type-expressions
+[type]: types.md
+[union]: items/unions.md
diff --git a/src/doc/reference/src/runtime.md b/src/doc/reference/src/runtime.md
new file mode 100644
index 000000000..a281d50fb
--- /dev/null
+++ b/src/doc/reference/src/runtime.md
@@ -0,0 +1,85 @@
+# The Rust runtime
+
+This section documents features that define some aspects of the Rust runtime.
+
+## The `panic_handler` attribute
+
+The *`panic_handler` attribute* can only be applied to a function with signature
+`fn(&PanicInfo) -> !`. The function marked with this [attribute] defines the behavior of panics. The
+[`PanicInfo`] struct contains information about the location of the panic. There must be a single
+`panic_handler` function in the dependency graph of a binary, dylib or cdylib crate.
+
+Below is shown a `panic_handler` function that logs the panic message and then halts the
+thread.
+
+<!-- ignore: test infrastructure can't handle no_std -->
+```rust,ignore
+#![no_std]
+
+use core::fmt::{self, Write};
+use core::panic::PanicInfo;
+
+struct Sink {
+ // ..
+# _0: (),
+}
+#
+# impl Sink {
+# fn new() -> Sink { Sink { _0: () }}
+# }
+#
+# impl fmt::Write for Sink {
+# fn write_str(&mut self, _: &str) -> fmt::Result { Ok(()) }
+# }
+
+#[panic_handler]
+fn panic(info: &PanicInfo) -> ! {
+ let mut sink = Sink::new();
+
+ // logs "panicked at '$reason', src/main.rs:27:4" to some `sink`
+ let _ = writeln!(sink, "{}", info);
+
+ loop {}
+}
+```
+
+### Standard behavior
+
+The standard library provides an implementation of `panic_handler` that
+defaults to unwinding the stack but that can be [changed to abort the
+process][abort]. The standard library's panic behavior can be modified at
+runtime with the [set_hook] function.
+
+## The `global_allocator` attribute
+
+The *`global_allocator` attribute* is used on a [static item] implementing the
+[`GlobalAlloc`] trait to set the global allocator.
+
+## The `windows_subsystem` attribute
+
+The *`windows_subsystem` attribute* may be applied at the crate level to set
+the [subsystem] when linking on a Windows target. It uses the
+[_MetaNameValueStr_] syntax to specify the subsystem with a value of either
+`console` or `windows`. This attribute is ignored on non-Windows targets, and
+for non-`bin` [crate types].
+
+The "console" subsystem is the default. If a console process is run from an
+existing console then it will be attached to that console, otherwise a new
+console window will be created.
+
+The "windows" subsystem is commonly used by GUI applications that do not want to
+display a console window on startup. It will run detached from any existing console.
+
+```rust
+#![windows_subsystem = "windows"]
+```
+
+[_MetaNameValueStr_]: attributes.md#meta-item-attribute-syntax
+[`GlobalAlloc`]: ../alloc/alloc/trait.GlobalAlloc.html
+[`PanicInfo`]: ../core/panic/struct.PanicInfo.html
+[abort]: ../book/ch09-01-unrecoverable-errors-with-panic.html
+[attribute]: attributes.md
+[crate types]: linkage.md
+[set_hook]: ../std/panic/fn.set_hook.html
+[static item]: items/static-items.md
+[subsystem]: https://msdn.microsoft.com/en-us/library/fcc1zstk.aspx
diff --git a/src/doc/reference/src/special-types-and-traits.md b/src/doc/reference/src/special-types-and-traits.md
new file mode 100644
index 000000000..ca53b3c9a
--- /dev/null
+++ b/src/doc/reference/src/special-types-and-traits.md
@@ -0,0 +1,188 @@
+# Special types and traits
+
+Certain types and traits that exist in [the standard library] are known to the
+Rust compiler. This chapter documents the special features of these types and
+traits.
+
+## `Box<T>`
+
+[`Box<T>`] has a few special features that Rust doesn't currently allow for user
+defined types.
+
+* The [dereference operator] for `Box<T>` produces a place which can be moved
+ from. This means that the `*` operator and the destructor of `Box<T>` are
+ built-in to the language.
+* [Methods] can take `Box<Self>` as a receiver.
+* A trait may be implemented for `Box<T>` in the same crate as `T`, which the
+ [orphan rules] prevent for other generic types.
+
+## `Rc<T>`
+
+[Methods] can take [`Rc<Self>`] as a receiver.
+
+## `Arc<T>`
+
+[Methods] can take [`Arc<Self>`] as a receiver.
+
+## `Pin<P>`
+
+[Methods] can take [`Pin<P>`] as a receiver.
+
+## `UnsafeCell<T>`
+
+[`std::cell::UnsafeCell<T>`] is used for [interior mutability]. It ensures that
+the compiler doesn't perform optimisations that are incorrect for such types.
+It also ensures that [`static` items] which have a type with interior
+mutability aren't placed in memory marked as read only.
+
+## `PhantomData<T>`
+
+[`std::marker::PhantomData<T>`] is a zero-sized, minimum alignment, type that
+is considered to own a `T` for the purposes of [variance], [drop check], and
+[auto traits](#auto-traits).
+
+## Operator Traits
+
+The traits in [`std::ops`] and [`std::cmp`] are used to overload [operators],
+[indexing expressions], and [call expressions].
+
+## `Deref` and `DerefMut`
+
+As well as overloading the unary `*` operator, [`Deref`] and [`DerefMut`] are
+also used in [method resolution] and [deref coercions].
+
+## `Drop`
+
+The [`Drop`] trait provides a [destructor], to be run whenever a value of this
+type is to be destroyed.
+
+## `Copy`
+
+The [`Copy`] trait changes the semantics of a type implementing it. Values
+whose type implements `Copy` are copied rather than moved upon assignment.
+
+`Copy` can only be implemented for types which do not implement `Drop`, and whose fields are all `Copy`.
+For enums, this means all fields of all variants have to be `Copy`.
+For unions, this means all variants have to be `Copy`.
+
+`Copy` is implemented by the compiler for
+
+* [Tuples] of `Copy` types
+* [Function pointers]
+* [Function items]
+* [Closures] that capture no values or that only capture values of `Copy` types
+
+## `Clone`
+
+The [`Clone`] trait is a supertrait of `Copy`, so it also needs compiler
+generated implementations. It is implemented by the compiler for the following
+types:
+
+* Types with a built-in `Copy` implementation (see above)
+* [Tuples] of `Clone` types
+
+## `Send`
+
+The [`Send`] trait indicates that a value of this type is safe to send from one
+thread to another.
+
+## `Sync`
+
+The [`Sync`] trait indicates that a value of this type is safe to share between
+multiple threads. This trait must be implemented for all types used in
+immutable [`static` items].
+
+## `Termination`
+
+The [`Termination`] trait indicates the acceptable return types for the [main function] and [test functions].
+
+## Auto traits
+
+The [`Send`], [`Sync`], [`Unpin`], [`UnwindSafe`], and [`RefUnwindSafe`] traits are _auto
+traits_. Auto traits have special properties.
+
+If no explicit implementation or negative implementation is written out for an
+auto trait for a given type, then the compiler implements it automatically
+according to the following rules:
+
+* `&T`, `&mut T`, `*const T`, `*mut T`, `[T; n]`, and `[T]` implement the trait
+ if `T` does.
+* Function item types and function pointers automatically implement the trait.
+* Structs, enums, unions, and tuples implement the trait if all of their fields
+ do.
+* Closures implement the trait if the types of all of their captures do. A
+ closure that captures a `T` by shared reference and a `U` by value implements
+ any auto traits that both `&T` and `U` do.
+
+For generic types (counting the built-in types above as generic over `T`), if a
+generic implementation is available, then the compiler does not automatically
+implement it for types that could use the implementation except that they do not
+meet the requisite trait bounds. For instance, the standard library implements
+`Send` for all `&T` where `T` is `Sync`; this means that the compiler will not
+implement `Send` for `&T` if `T` is `Send` but not `Sync`.
+
+Auto traits can also have negative implementations, shown as `impl !AutoTrait
+for T` in the standard library documentation, that override the automatic
+implementations. For example `*mut T` has a negative implementation of `Send`,
+and so `*mut T` is not `Send`, even if `T` is. There is currently no stable way
+to specify additional negative implementations; they exist only in the standard
+library.
+
+Auto traits may be added as an additional bound to any [trait object], even
+though normally only one trait is allowed. For instance, `Box<dyn Debug + Send +
+UnwindSafe>` is a valid type.
+
+## `Sized`
+
+The [`Sized`] trait indicates that the size of this type is known at compile-time; that is, it's not a [dynamically sized type].
+[Type parameters] are `Sized` by default, as are [associated types].
+`Sized` is always implemented automatically by the compiler, not by [implementation items].
+These implicit `Sized` bounds may be relaxed by using the special `?Sized` bound.
+
+[`Arc<Self>`]: ../std/sync/struct.Arc.html
+[`Box<T>`]: ../std/boxed/struct.Box.html
+[`Clone`]: ../std/clone/trait.Clone.html
+[`Copy`]: ../std/marker/trait.Copy.html
+[`Deref`]: ../std/ops/trait.Deref.html
+[`DerefMut`]: ../std/ops/trait.DerefMut.html
+[`Drop`]: ../std/ops/trait.Drop.html
+[`Pin<P>`]: ../std/pin/struct.Pin.html
+[`Rc<Self>`]: ../std/rc/struct.Rc.html
+[`RefUnwindSafe`]: ../std/panic/trait.RefUnwindSafe.html
+[`Send`]: ../std/marker/trait.Send.html
+[`Sized`]: ../std/marker/trait.Sized.html
+[`std::cell::UnsafeCell<T>`]: ../std/cell/struct.UnsafeCell.html
+[`std::cmp`]: ../std/cmp/index.html
+[`std::marker::PhantomData<T>`]: ../std/marker/struct.PhantomData.html
+[`std::ops`]: ../std/ops/index.html
+[`Termination`]: ../std/process/trait.Termination.html
+[`UnwindSafe`]: ../std/panic/trait.UnwindSafe.html
+[`Sync`]: ../std/marker/trait.Sync.html
+[`Unpin`]: ../std/marker/trait.Unpin.html
+
+[Arrays]: types/array.md
+[associated types]: items/associated-items.md#associated-types
+[call expressions]: expressions/call-expr.md
+[deref coercions]: type-coercions.md#coercion-types
+[dereference operator]: expressions/operator-expr.md#the-dereference-operator
+[destructor]: destructors.md
+[drop check]: ../nomicon/dropck.html
+[dynamically sized type]: dynamically-sized-types.md
+[Function pointers]: types/function-pointer.md
+[Function items]: types/function-item.md
+[implementation items]: items/implementations.md
+[indexing expressions]: expressions/array-expr.md#array-and-slice-indexing-expressions
+[interior mutability]: interior-mutability.md
+[main function]: crates-and-source-files.md#main-functions
+[Methods]: items/associated-items.md#associated-functions-and-methods
+[method resolution]: expressions/method-call-expr.md
+[operators]: expressions/operator-expr.md
+[orphan rules]: items/implementations.md#trait-implementation-coherence
+[`static` items]: items/static-items.md
+[test functions]: attributes/testing.md#the-test-attribute
+[the standard library]: ../std/index.html
+[trait object]: types/trait-object.md
+[Tuples]: types/tuple.md
+[Type parameters]: types/parameters.md
+[variance]: subtyping.md#variance
+[Closures]: types/closure.md
diff --git a/src/doc/reference/src/statements-and-expressions.md b/src/doc/reference/src/statements-and-expressions.md
new file mode 100644
index 000000000..b093972a9
--- /dev/null
+++ b/src/doc/reference/src/statements-and-expressions.md
@@ -0,0 +1,11 @@
+# Statements and expressions
+
+Rust is _primarily_ an expression language. This means that most forms of
+value-producing or effect-causing evaluation are directed by the uniform syntax
+category of _expressions_. Each kind of expression can typically _nest_ within
+each other kind of expression, and rules for evaluation of expressions involve
+specifying both the value produced by the expression and the order in which its
+sub-expressions are themselves evaluated.
+
+In contrast, statements serve _mostly_ to contain and explicitly
+sequence expression evaluation.
diff --git a/src/doc/reference/src/statements.md b/src/doc/reference/src/statements.md
new file mode 100644
index 000000000..8d9c21d7d
--- /dev/null
+++ b/src/doc/reference/src/statements.md
@@ -0,0 +1,138 @@
+# Statements
+
+> **<sup>Syntax</sup>**\
+> _Statement_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `;`\
+> &nbsp;&nbsp; | [_Item_]\
+> &nbsp;&nbsp; | [_LetStatement_]\
+> &nbsp;&nbsp; | [_ExpressionStatement_]\
+> &nbsp;&nbsp; | [_MacroInvocationSemi_]
+
+
+A *statement* is a component of a [block], which is in turn a component of an
+outer [expression] or [function].
+
+Rust has two kinds of statement: [declaration
+statements](#declaration-statements) and [expression
+statements](#expression-statements).
+
+## Declaration statements
+
+A *declaration statement* is one that introduces one or more *names* into the
+enclosing statement block. The declared names may denote new variables or new
+[items][item].
+
+The two kinds of declaration statements are item declarations and `let`
+statements.
+
+### Item declarations
+
+An *item declaration statement* has a syntactic form identical to an
+[item declaration][item] within a [module]. Declaring an item within a statement
+block restricts its scope to the block containing the statement. The item is not
+given a [canonical path] nor are any sub-items it may declare. The exception to
+this is that associated items defined by [implementations] are still accessible
+in outer scopes as long as the item and, if applicable, trait are accessible.
+It is otherwise identical in meaning to declaring the item inside a module.
+
+There is no implicit capture of the containing function's generic parameters,
+parameters, and local variables. For example, `inner` may not access
+`outer_var`.
+
+```rust
+fn outer() {
+ let outer_var = true;
+
+ fn inner() { /* outer_var is not in scope here */ }
+
+ inner();
+}
+```
+
+### `let` statements
+
+> **<sup>Syntax</sup>**\
+> _LetStatement_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> `let` [_PatternNoTopAlt_]
+> ( `:` [_Type_] )<sup>?</sup> (`=` [_Expression_] )<sup>?</sup> `;`
+
+A *`let` statement* introduces a new set of [variables], given by an
+irrefutable [pattern]. The pattern is followed optionally by a type
+annotation and then optionally by an initializer expression. When no
+type annotation is given, the compiler will infer the type, or signal
+an error if insufficient type information is available for definite
+inference. Any variables introduced by a variable declaration are visible
+from the point of declaration until the end of the enclosing block scope,
+except when they are shadowed by another variable declaration.
+
+## Expression statements
+
+> **<sup>Syntax</sup>**\
+> _ExpressionStatement_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_ExpressionWithoutBlock_][expression] `;`\
+> &nbsp;&nbsp; | [_ExpressionWithBlock_][expression] `;`<sup>?</sup>
+
+An *expression statement* is one that evaluates an [expression] and ignores its
+result. As a rule, an expression statement's purpose is to trigger the effects
+of evaluating its expression.
+
+An expression that consists of only a [block expression][block] or control flow
+expression, if used in a context where a statement is permitted, can omit the
+trailing semicolon. This can cause an ambiguity between it being parsed as a
+standalone statement and as a part of another expression; in this case, it is
+parsed as a statement. The type of [_ExpressionWithBlock_][expression]
+expressions when used as statements must be the unit type.
+
+```rust
+# let mut v = vec![1, 2, 3];
+v.pop(); // Ignore the element returned from pop
+if v.is_empty() {
+ v.push(5);
+} else {
+ v.remove(0);
+} // Semicolon can be omitted.
+[1]; // Separate expression statement, not an indexing expression.
+```
+
+When the trailing semicolon is omitted, the result must be type `()`.
+
+```rust
+// bad: the block's type is i32, not ()
+// Error: expected `()` because of default return type
+// if true {
+// 1
+// }
+
+// good: the block's type is i32
+if true {
+ 1
+} else {
+ 2
+};
+```
+
+## Attributes on Statements
+
+Statements accept [outer attributes]. The attributes that have meaning on a
+statement are [`cfg`], and [the lint check attributes].
+
+[block]: expressions/block-expr.md
+[expression]: expressions.md
+[function]: items/functions.md
+[item]: items.md
+[module]: items/modules.md
+[canonical path]: paths.md#canonical-paths
+[implementations]: items/implementations.md
+[variables]: variables.md
+[outer attributes]: attributes.md
+[`cfg`]: conditional-compilation.md
+[the lint check attributes]: attributes/diagnostics.md#lint-check-attributes
+[pattern]: patterns.md
+[_ExpressionStatement_]: #expression-statements
+[_Expression_]: expressions.md
+[_Item_]: items.md
+[_LetStatement_]: #let-statements
+[_MacroInvocationSemi_]: macros.md#macro-invocation
+[_OuterAttribute_]: attributes.md
+[_PatternNoTopAlt_]: patterns.md
+[_Type_]: types.md
diff --git a/src/doc/reference/src/subtyping.md b/src/doc/reference/src/subtyping.md
new file mode 100644
index 000000000..b31e25d8a
--- /dev/null
+++ b/src/doc/reference/src/subtyping.md
@@ -0,0 +1,114 @@
+# Subtyping and Variance
+
+Subtyping is implicit and can occur at any stage in type checking or
+inference. Subtyping is restricted to two cases:
+variance with respect to lifetimes and between types with higher ranked
+lifetimes. If we were to erase lifetimes from types, then the only subtyping
+would be due to type equality.
+
+Consider the following example: string literals always have `'static`
+lifetime. Nevertheless, we can assign `s` to `t`:
+
+```rust
+fn bar<'a>() {
+ let s: &'static str = "hi";
+ let t: &'a str = s;
+}
+```
+
+Since `'static` outlives the lifetime parameter `'a`, `&'static str` is a
+subtype of `&'a str`.
+
+[Higher-ranked]&#32;[function pointers] and [trait objects] have another
+subtype relation. They are subtypes of types that are given by substitutions of
+the higher-ranked lifetimes. Some examples:
+
+```rust
+// Here 'a is substituted for 'static
+let subtype: &(for<'a> fn(&'a i32) -> &'a i32) = &((|x| x) as fn(&_) -> &_);
+let supertype: &(fn(&'static i32) -> &'static i32) = subtype;
+
+// This works similarly for trait objects
+let subtype: &(dyn for<'a> Fn(&'a i32) -> &'a i32) = &|x| x;
+let supertype: &(dyn Fn(&'static i32) -> &'static i32) = subtype;
+
+// We can also substitute one higher-ranked lifetime for another
+let subtype: &(for<'a, 'b> fn(&'a i32, &'b i32))= &((|x, y| {}) as fn(&_, &_));
+let supertype: &for<'c> fn(&'c i32, &'c i32) = subtype;
+```
+
+## Variance
+
+Variance is a property that generic types have with respect to their arguments.
+A generic type's *variance* in a parameter is how the subtyping of the
+parameter affects the subtyping of the type.
+
+* `F<T>` is *covariant* over `T` if `T` being a subtype of `U` implies that
+ `F<T>` is a subtype of `F<U>` (subtyping "passes through")
+* `F<T>` is *contravariant* over `T` if `T` being a subtype of `U` implies that
+ `F<U>` is a subtype of `F<T>`
+* `F<T>` is *invariant* over `T` otherwise (no subtyping relation can be
+ derived)
+
+Variance of types is automatically determined as follows
+
+| Type | Variance in `'a` | Variance in `T` |
+|-------------------------------|-------------------|-------------------|
+| `&'a T` | covariant | covariant |
+| `&'a mut T` | covariant | invariant |
+| `*const T` | | covariant |
+| `*mut T` | | invariant |
+| `[T]` and `[T; n]` | | covariant |
+| `fn() -> T` | | covariant |
+| `fn(T) -> ()` | | contravariant |
+| `std::cell::UnsafeCell<T>` | | invariant |
+| `std::marker::PhantomData<T>` | | covariant |
+| `dyn Trait<T> + 'a` | covariant | invariant |
+
+The variance of other `struct`, `enum`, and `union` types is decided by
+looking at the variance of the types of their fields. If the parameter is used
+in positions with different variances then the parameter is invariant. For
+example the following struct is covariant in `'a` and `T` and invariant in `'b`, `'c`,
+and `U`.
+
+```rust
+use std::cell::UnsafeCell;
+struct Variance<'a, 'b, 'c, T, U: 'a> {
+ x: &'a U, // This makes `Variance` covariant in 'a, and would
+ // make it covariant in U, but U is used later
+ y: *const T, // Covariant in T
+ z: UnsafeCell<&'b f64>, // Invariant in 'b
+ w: *mut U, // Invariant in U, makes the whole struct invariant
+
+ f: fn(&'c ()) -> &'c () // Both co- and contravariant, makes 'c invariant
+ // in the struct.
+}
+```
+
+When used outside of an `struct`, `enum`, or `union`, the variance for parameters is checked at each location separately.
+
+```rust
+# use std::cell::UnsafeCell;
+fn generic_tuple<'short, 'long: 'short>(
+ // 'long is used inside of a tuple in both a co- and invariant position.
+ x: (&'long u32, UnsafeCell<&'long u32>),
+) {
+ // As the variance at these positions is computed separately,
+ // we can freely shrink 'long in the covariant position.
+ let _: (&'short u32, UnsafeCell<&'long u32>) = x;
+}
+
+fn takes_fn_ptr<'short, 'middle: 'short>(
+ // 'middle is used in both a co- and contravariant position.
+ f: fn(&'middle ()) -> &'middle (),
+) {
+ // As the variance at these positions is computed separately,
+ // we can freely shrink 'middle in the covariant position
+ // and extend it in the contravariant position.
+ let _: fn(&'static ()) -> &'short () = f;
+}
+```
+
+[function pointers]: types/function-pointer.md
+[Higher-ranked]: ../nomicon/hrtb.html
+[trait objects]: types/trait-object.md
diff --git a/src/doc/reference/src/tokens.md b/src/doc/reference/src/tokens.md
new file mode 100644
index 000000000..197c20147
--- /dev/null
+++ b/src/doc/reference/src/tokens.md
@@ -0,0 +1,741 @@
+# Tokens
+
+Tokens are primitive productions in the grammar defined by regular
+(non-recursive) languages. Rust source input can be broken down
+into the following kinds of tokens:
+
+* [Keywords]
+* [Identifiers][identifier]
+* [Literals](#literals)
+* [Lifetimes](#lifetimes-and-loop-labels)
+* [Punctuation](#punctuation)
+* [Delimiters](#delimiters)
+
+Within this documentation's grammar, "simple" tokens are given in [string
+table production] form, and appear in `monospace` font.
+
+[string table production]: notation.md#string-table-productions
+
+## Literals
+
+Literals are tokens used in [literal expressions].
+
+### Examples
+
+#### Characters and strings
+
+| | Example | `#` sets\* | Characters | Escapes |
+|----------------------------------------------|-----------------|------------|-------------|---------------------|
+| [Character](#character-literals) | `'H'` | 0 | All Unicode | [Quote](#quote-escapes) & [ASCII](#ascii-escapes) & [Unicode](#unicode-escapes) |
+| [String](#string-literals) | `"hello"` | 0 | All Unicode | [Quote](#quote-escapes) & [ASCII](#ascii-escapes) & [Unicode](#unicode-escapes) |
+| [Raw string](#raw-string-literals) | `r#"hello"#` | <256 | All Unicode | `N/A` |
+| [Byte](#byte-literals) | `b'H'` | 0 | All ASCII | [Quote](#quote-escapes) & [Byte](#byte-escapes) |
+| [Byte string](#byte-string-literals) | `b"hello"` | 0 | All ASCII | [Quote](#quote-escapes) & [Byte](#byte-escapes) |
+| [Raw byte string](#raw-byte-string-literals) | `br#"hello"#` | <256 | All ASCII | `N/A` |
+
+\* The number of `#`s on each side of the same literal must be equivalent.
+
+#### ASCII escapes
+
+| | Name |
+|---|------|
+| `\x41` | 7-bit character code (exactly 2 digits, up to 0x7F) |
+| `\n` | Newline |
+| `\r` | Carriage return |
+| `\t` | Tab |
+| `\\` | Backslash |
+| `\0` | Null |
+
+#### Byte escapes
+
+| | Name |
+|---|------|
+| `\x7F` | 8-bit character code (exactly 2 digits) |
+| `\n` | Newline |
+| `\r` | Carriage return |
+| `\t` | Tab |
+| `\\` | Backslash |
+| `\0` | Null |
+
+#### Unicode escapes
+
+| | Name |
+|---|------|
+| `\u{7FFF}` | 24-bit Unicode character code (up to 6 digits) |
+
+#### Quote escapes
+
+| | Name |
+|---|------|
+| `\'` | Single quote |
+| `\"` | Double quote |
+
+#### Numbers
+
+| [Number literals](#number-literals)`*` | Example | Exponentiation | Suffixes |
+|----------------------------------------|---------|----------------|----------|
+| Decimal integer | `98_222` | `N/A` | Integer suffixes |
+| Hex integer | `0xff` | `N/A` | Integer suffixes |
+| Octal integer | `0o77` | `N/A` | Integer suffixes |
+| Binary integer | `0b1111_0000` | `N/A` | Integer suffixes |
+| Floating-point | `123.0E+77` | `Optional` | Floating-point suffixes |
+
+`*` All number literals allow `_` as a visual separator: `1_234.0E+18f64`
+
+#### Suffixes
+
+A suffix is a sequence of characters following the primary part of a literal (without intervening whitespace), of the same form as a non-raw identifier or keyword.
+
+Any kind of literal (string, integer, etc) with any suffix is valid as a token,
+and can be passed to a macro without producing an error.
+The macro itself will decide how to interpret such a token and whether to produce an error or not.
+
+```rust
+macro_rules! blackhole { ($tt:tt) => () }
+
+blackhole!("string"suffix); // OK
+```
+
+However, suffixes on literal tokens parsed as Rust code are restricted.
+Any suffixes are rejected on non-numeric literal tokens,
+and numeric literal tokens are accepted only with suffixes from the list below.
+
+| Integer | Floating-point |
+|---------|----------------|
+| `u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64`, `i64`, `u128`, `i128`, `usize`, `isize` | `f32`, `f64` |
+
+### Character and string literals
+
+#### Character literals
+
+> **<sup>Lexer</sup>**\
+> CHAR_LITERAL :\
+> &nbsp;&nbsp; `'` ( ~\[`'` `\` \\n \\r \\t] | QUOTE_ESCAPE | ASCII_ESCAPE | UNICODE_ESCAPE ) `'`
+>
+> QUOTE_ESCAPE :\
+> &nbsp;&nbsp; `\'` | `\"`
+>
+> ASCII_ESCAPE :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `\x` OCT_DIGIT HEX_DIGIT\
+> &nbsp;&nbsp; | `\n` | `\r` | `\t` | `\\` | `\0`
+>
+> UNICODE_ESCAPE :\
+> &nbsp;&nbsp; `\u{` ( HEX_DIGIT `_`<sup>\*</sup> )<sup>1..6</sup> `}`
+
+A _character literal_ is a single Unicode character enclosed within two
+`U+0027` (single-quote) characters, with the exception of `U+0027` itself,
+which must be _escaped_ by a preceding `U+005C` character (`\`).
+
+#### String literals
+
+> **<sup>Lexer</sup>**\
+> STRING_LITERAL :\
+> &nbsp;&nbsp; `"` (\
+> &nbsp;&nbsp; &nbsp;&nbsp; ~\[`"` `\` _IsolatedCR_]\
+> &nbsp;&nbsp; &nbsp;&nbsp; | QUOTE_ESCAPE\
+> &nbsp;&nbsp; &nbsp;&nbsp; | ASCII_ESCAPE\
+> &nbsp;&nbsp; &nbsp;&nbsp; | UNICODE_ESCAPE\
+> &nbsp;&nbsp; &nbsp;&nbsp; | STRING_CONTINUE\
+> &nbsp;&nbsp; )<sup>\*</sup> `"`
+>
+> STRING_CONTINUE :\
+> &nbsp;&nbsp; `\` _followed by_ \\n
+
+A _string literal_ is a sequence of any Unicode characters enclosed within two
+`U+0022` (double-quote) characters, with the exception of `U+0022` itself,
+which must be _escaped_ by a preceding `U+005C` character (`\`).
+
+Line-breaks are allowed in string literals. A line-break is either a newline
+(`U+000A`) or a pair of carriage return and newline (`U+000D`, `U+000A`). Both
+byte sequences are normally translated to `U+000A`, but as a special exception,
+when an unescaped `U+005C` character (`\`) occurs immediately before a line
+break, then the line break character(s), and all immediately following
+` ` (`U+0020`), `\t` (`U+0009`), `\n` (`U+000A`) and `\r` (`U+0000D`) characters
+are ignored. Thus `a`, `b` and `c` are equal:
+
+```rust
+let a = "foobar";
+let b = "foo\
+ bar";
+let c = "foo\
+
+ bar";
+
+assert_eq!(a, b);
+assert_eq!(b, c);
+```
+
+> Note: Rust skipping additional newlines (like in example `c`) is potentially confusing and
+> unexpected. This behavior may be adjusted in the future. Until a decision is made, it is
+> recommended to avoid relying on this, i.e. skipping multiple newlines with line continuations.
+> See [this issue](https://github.com/rust-lang/reference/pull/1042) for more information.
+
+#### Character escapes
+
+Some additional _escapes_ are available in either character or non-raw string
+literals. An escape starts with a `U+005C` (`\`) and continues with one of the
+following forms:
+
+* A _7-bit code point escape_ starts with `U+0078` (`x`) and is
+ followed by exactly two _hex digits_ with value up to `0x7F`. It denotes the
+ ASCII character with value equal to the provided hex value. Higher values are
+ not permitted because it is ambiguous whether they mean Unicode code points or
+ byte values.
+* A _24-bit code point escape_ starts with `U+0075` (`u`) and is followed
+ by up to six _hex digits_ surrounded by braces `U+007B` (`{`) and `U+007D`
+ (`}`). It denotes the Unicode code point equal to the provided hex value.
+* A _whitespace escape_ is one of the characters `U+006E` (`n`), `U+0072`
+ (`r`), or `U+0074` (`t`), denoting the Unicode values `U+000A` (LF),
+ `U+000D` (CR) or `U+0009` (HT) respectively.
+* The _null escape_ is the character `U+0030` (`0`) and denotes the Unicode
+ value `U+0000` (NUL).
+* The _backslash escape_ is the character `U+005C` (`\`) which must be
+ escaped in order to denote itself.
+
+#### Raw string literals
+
+> **<sup>Lexer</sup>**\
+> RAW_STRING_LITERAL :\
+> &nbsp;&nbsp; `r` RAW_STRING_CONTENT
+>
+> RAW_STRING_CONTENT :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `"` ( ~ _IsolatedCR_ )<sup>* (non-greedy)</sup> `"`\
+> &nbsp;&nbsp; | `#` RAW_STRING_CONTENT `#`
+
+Raw string literals do not process any escapes. They start with the character
+`U+0072` (`r`), followed by fewer than 256 of the character `U+0023` (`#`) and a
+`U+0022` (double-quote) character. The _raw string body_ can contain any sequence
+of Unicode characters and is terminated only by another `U+0022` (double-quote)
+character, followed by the same number of `U+0023` (`#`) characters that preceded
+the opening `U+0022` (double-quote) character.
+
+All Unicode characters contained in the raw string body represent themselves,
+the characters `U+0022` (double-quote) (except when followed by at least as
+many `U+0023` (`#`) characters as were used to start the raw string literal) or
+`U+005C` (`\`) do not have any special meaning.
+
+Examples for string literals:
+
+```rust
+"foo"; r"foo"; // foo
+"\"foo\""; r#""foo""#; // "foo"
+
+"foo #\"# bar";
+r##"foo #"# bar"##; // foo #"# bar
+
+"\x52"; "R"; r"R"; // R
+"\\x52"; r"\x52"; // \x52
+```
+
+### Byte and byte string literals
+
+#### Byte literals
+
+> **<sup>Lexer</sup>**\
+> BYTE_LITERAL :\
+> &nbsp;&nbsp; `b'` ( ASCII_FOR_CHAR | BYTE_ESCAPE ) `'`
+>
+> ASCII_FOR_CHAR :\
+> &nbsp;&nbsp; _any ASCII (i.e. 0x00 to 0x7F), except_ `'`, `\`, \\n, \\r or \\t
+>
+> BYTE_ESCAPE :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `\x` HEX_DIGIT HEX_DIGIT\
+> &nbsp;&nbsp; | `\n` | `\r` | `\t` | `\\` | `\0` | `\'` | `\"`
+
+A _byte literal_ is a single ASCII character (in the `U+0000` to `U+007F`
+range) or a single _escape_ preceded by the characters `U+0062` (`b`) and
+`U+0027` (single-quote), and followed by the character `U+0027`. If the character
+`U+0027` is present within the literal, it must be _escaped_ by a preceding
+`U+005C` (`\`) character. It is equivalent to a `u8` unsigned 8-bit integer
+_number literal_.
+
+#### Byte string literals
+
+> **<sup>Lexer</sup>**\
+> BYTE_STRING_LITERAL :\
+> &nbsp;&nbsp; `b"` ( ASCII_FOR_STRING | BYTE_ESCAPE | STRING_CONTINUE )<sup>\*</sup> `"`
+>
+> ASCII_FOR_STRING :\
+> &nbsp;&nbsp; _any ASCII (i.e 0x00 to 0x7F), except_ `"`, `\` _and IsolatedCR_
+
+A non-raw _byte string literal_ is a sequence of ASCII characters and _escapes_,
+preceded by the characters `U+0062` (`b`) and `U+0022` (double-quote), and
+followed by the character `U+0022`. If the character `U+0022` is present within
+the literal, it must be _escaped_ by a preceding `U+005C` (`\`) character.
+Alternatively, a byte string literal can be a _raw byte string literal_, defined
+below. The type of a byte string literal of length `n` is `&'static [u8; n]`.
+
+Some additional _escapes_ are available in either byte or non-raw byte string
+literals. An escape starts with a `U+005C` (`\`) and continues with one of the
+following forms:
+
+* A _byte escape_ escape starts with `U+0078` (`x`) and is
+ followed by exactly two _hex digits_. It denotes the byte
+ equal to the provided hex value.
+* A _whitespace escape_ is one of the characters `U+006E` (`n`), `U+0072`
+ (`r`), or `U+0074` (`t`), denoting the bytes values `0x0A` (ASCII LF),
+ `0x0D` (ASCII CR) or `0x09` (ASCII HT) respectively.
+* The _null escape_ is the character `U+0030` (`0`) and denotes the byte
+ value `0x00` (ASCII NUL).
+* The _backslash escape_ is the character `U+005C` (`\`) which must be
+ escaped in order to denote its ASCII encoding `0x5C`.
+
+#### Raw byte string literals
+
+> **<sup>Lexer</sup>**\
+> RAW_BYTE_STRING_LITERAL :\
+> &nbsp;&nbsp; `br` RAW_BYTE_STRING_CONTENT
+>
+> RAW_BYTE_STRING_CONTENT :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `"` ASCII<sup>* (non-greedy)</sup> `"`\
+> &nbsp;&nbsp; | `#` RAW_BYTE_STRING_CONTENT `#`
+>
+> ASCII :\
+> &nbsp;&nbsp; _any ASCII (i.e. 0x00 to 0x7F)_
+
+Raw byte string literals do not process any escapes. They start with the
+character `U+0062` (`b`), followed by `U+0072` (`r`), followed by fewer than 256
+of the character `U+0023` (`#`), and a `U+0022` (double-quote) character. The
+_raw string body_ can contain any sequence of ASCII characters and is terminated
+only by another `U+0022` (double-quote) character, followed by the same number of
+`U+0023` (`#`) characters that preceded the opening `U+0022` (double-quote)
+character. A raw byte string literal can not contain any non-ASCII byte.
+
+All characters contained in the raw string body represent their ASCII encoding,
+the characters `U+0022` (double-quote) (except when followed by at least as
+many `U+0023` (`#`) characters as were used to start the raw string literal) or
+`U+005C` (`\`) do not have any special meaning.
+
+Examples for byte string literals:
+
+```rust
+b"foo"; br"foo"; // foo
+b"\"foo\""; br#""foo""#; // "foo"
+
+b"foo #\"# bar";
+br##"foo #"# bar"##; // foo #"# bar
+
+b"\x52"; b"R"; br"R"; // R
+b"\\x52"; br"\x52"; // \x52
+```
+
+### Number literals
+
+A _number literal_ is either an _integer literal_ or a _floating-point
+literal_. The grammar for recognizing the two kinds of literals is mixed.
+
+#### Integer literals
+
+> **<sup>Lexer</sup>**\
+> INTEGER_LITERAL :\
+> &nbsp;&nbsp; ( DEC_LITERAL | BIN_LITERAL | OCT_LITERAL | HEX_LITERAL )
+> INTEGER_SUFFIX<sup>?</sup>
+>
+> DEC_LITERAL :\
+> &nbsp;&nbsp; DEC_DIGIT (DEC_DIGIT|`_`)<sup>\*</sup>
+>
+> BIN_LITERAL :\
+> &nbsp;&nbsp; `0b` (BIN_DIGIT|`_`)<sup>\*</sup> BIN_DIGIT (BIN_DIGIT|`_`)<sup>\*</sup>
+>
+> OCT_LITERAL :\
+> &nbsp;&nbsp; `0o` (OCT_DIGIT|`_`)<sup>\*</sup> OCT_DIGIT (OCT_DIGIT|`_`)<sup>\*</sup>
+>
+> HEX_LITERAL :\
+> &nbsp;&nbsp; `0x` (HEX_DIGIT|`_`)<sup>\*</sup> HEX_DIGIT (HEX_DIGIT|`_`)<sup>\*</sup>
+>
+> BIN_DIGIT : \[`0`-`1`]
+>
+> OCT_DIGIT : \[`0`-`7`]
+>
+> DEC_DIGIT : \[`0`-`9`]
+>
+> HEX_DIGIT : \[`0`-`9` `a`-`f` `A`-`F`]
+>
+> INTEGER_SUFFIX :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `u8` | `u16` | `u32` | `u64` | `u128` | `usize`\
+> &nbsp;&nbsp; | `i8` | `i16` | `i32` | `i64` | `i128` | `isize`
+
+An _integer literal_ has one of four forms:
+
+* A _decimal literal_ starts with a *decimal digit* and continues with any
+ mixture of *decimal digits* and _underscores_.
+* A _hex literal_ starts with the character sequence `U+0030` `U+0078`
+ (`0x`) and continues as any mixture (with at least one digit) of hex digits
+ and underscores.
+* An _octal literal_ starts with the character sequence `U+0030` `U+006F`
+ (`0o`) and continues as any mixture (with at least one digit) of octal digits
+ and underscores.
+* A _binary literal_ starts with the character sequence `U+0030` `U+0062`
+ (`0b`) and continues as any mixture (with at least one digit) of binary digits
+ and underscores.
+
+Like any literal, an integer literal may be followed (immediately, without any spaces) by an _integer suffix_, which must be the name of one of the [primitive integer types][numeric types]:
+`u8`, `i8`, `u16`, `i16`, `u32`, `i32`, `u64`, `i64`, `u128`, `i128`, `usize`, or `isize`.
+See [literal expressions] for the effect of these suffixes.
+
+Examples of integer literals of various forms:
+
+```rust
+# #![allow(overflowing_literals)]
+123;
+123i32;
+123u32;
+123_u32;
+
+0xff;
+0xff_u8;
+0x01_f32; // integer 7986, not floating-point 1.0
+0x01_e3; // integer 483, not floating-point 1000.0
+
+0o70;
+0o70_i16;
+
+0b1111_1111_1001_0000;
+0b1111_1111_1001_0000i64;
+0b________1;
+
+0usize;
+
+// These are too big for their type, but are still valid tokens
+
+128_i8;
+256_u8;
+
+```
+
+Note that `-1i8`, for example, is analyzed as two tokens: `-` followed by `1i8`.
+
+Examples of invalid integer literals:
+
+```rust,compile_fail
+// uses numbers of the wrong base
+
+0b0102;
+0o0581;
+
+// bin, hex, and octal literals must have at least one digit
+
+0b_;
+0b____;
+```
+
+#### Tuple index
+
+> **<sup>Lexer</sup>**\
+> TUPLE_INDEX: \
+> &nbsp;&nbsp; INTEGER_LITERAL
+
+A tuple index is used to refer to the fields of [tuples], [tuple structs], and
+[tuple variants].
+
+Tuple indices are compared with the literal token directly. Tuple indices
+start with `0` and each successive index increments the value by `1` as a
+decimal value. Thus, only decimal values will match, and the value must not
+have any extra `0` prefix characters.
+
+```rust,compile_fail
+let example = ("dog", "cat", "horse");
+let dog = example.0;
+let cat = example.1;
+// The following examples are invalid.
+let cat = example.01; // ERROR no field named `01`
+let horse = example.0b10; // ERROR no field named `0b10`
+```
+
+> **Note**: The tuple index may include an `INTEGER_SUFFIX`, but this is not
+> intended to be valid, and may be removed in a future version. See
+> <https://github.com/rust-lang/rust/issues/60210> for more information.
+
+#### Floating-point literals
+
+> **<sup>Lexer</sup>**\
+> FLOAT_LITERAL :\
+> &nbsp;&nbsp; &nbsp;&nbsp; DEC_LITERAL `.`
+> _(not immediately followed by `.`, `_` or an XID_Start character)_\
+> &nbsp;&nbsp; | DEC_LITERAL FLOAT_EXPONENT\
+> &nbsp;&nbsp; | DEC_LITERAL `.` DEC_LITERAL FLOAT_EXPONENT<sup>?</sup>\
+> &nbsp;&nbsp; | DEC_LITERAL (`.` DEC_LITERAL)<sup>?</sup>
+> FLOAT_EXPONENT<sup>?</sup> FLOAT_SUFFIX
+>
+> FLOAT_EXPONENT :\
+> &nbsp;&nbsp; (`e`|`E`) (`+`|`-`)<sup>?</sup>
+> (DEC_DIGIT|`_`)<sup>\*</sup> DEC_DIGIT (DEC_DIGIT|`_`)<sup>\*</sup>
+>
+> FLOAT_SUFFIX :\
+> &nbsp;&nbsp; `f32` | `f64`
+
+A _floating-point literal_ has one of three forms:
+
+* A _decimal literal_ followed by a period character `U+002E` (`.`). This is
+ optionally followed by another decimal literal, with an optional _exponent_.
+* A single _decimal literal_ followed by an _exponent_.
+* A single _decimal literal_ (in which case a suffix is required).
+
+Like integer literals, a floating-point literal may be followed by a
+suffix, so long as the pre-suffix part does not end with `U+002E` (`.`).
+There are two valid _floating-point suffixes_: `f32` and `f64` (the names of the 32-bit and 64-bit [primitive floating-point types][floating-point types]).
+See [literal expressions] for the effect of these suffixes.
+
+Examples of floating-point literals of various forms:
+
+```rust
+123.0f64;
+0.1f64;
+0.1f32;
+12E+99_f64;
+5f32;
+let x: f64 = 2.;
+```
+
+This last example is different because it is not possible to use the suffix
+syntax with a floating point literal ending in a period. `2.f64` would attempt
+to call a method named `f64` on `2`.
+
+Note that `-1.0`, for example, is analyzed as two tokens: `-` followed by `1.0`.
+
+#### Number pseudoliterals
+
+> **<sup>Lexer</sup>**\
+> NUMBER_PSEUDOLITERAL :\
+> &nbsp;&nbsp; &nbsp;&nbsp; DEC_LITERAL ( . DEC_LITERAL )<sup>?</sup> FLOAT_EXPONENT\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ( NUMBER_PSEUDOLITERAL_SUFFIX | INTEGER_SUFFIX )\
+> &nbsp;&nbsp; | DEC_LITERAL . DEC_LITERAL\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ( NUMBER_PSEUDOLITERAL_SUFFIX_NO_E | INTEGER SUFFIX )\
+> &nbsp;&nbsp; | DEC_LITERAL NUMBER_PSEUDOLITERAL_SUFFIX_NO_E\
+> &nbsp;&nbsp; | ( BIN_LITERAL | OCT_LITERAL | HEX_LITERAL )\
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; ( NUMBER_PSEUDOLITERAL_SUFFIX_NO_E | FLOAT_SUFFIX )
+>
+> NUMBER_PSEUDOLITERAL_SUFFIX :\
+> &nbsp;&nbsp; IDENTIFIER_OR_KEYWORD <sub>_not matching INTEGER_SUFFIX or FLOAT_SUFFIX_</sub>
+>
+> NUMBER_PSEUDOLITERAL_SUFFIX_NO_E :\
+> &nbsp;&nbsp; NUMBER_PSEUDOLITERAL_SUFFIX <sub>_not beginning with `e` or `E`_</sub>
+
+Tokenization of numeric literals allows arbitrary suffixes as described in the grammar above.
+These values generate valid tokens, but are not valid [literal expressions], so are usually an error except as macro arguments.
+
+Examples of such tokens:
+```rust,compile_fail
+0invalidSuffix;
+123AFB43;
+0b010a;
+0xAB_CD_EF_GH;
+2.0f80;
+2e5f80;
+2e5e6;
+2.0e5e6;
+1.3e10u64;
+0b1111_f32;
+```
+
+#### Reserved forms similar to number literals
+
+> **<sup>Lexer</sup>**\
+> RESERVED_NUMBER :\
+> &nbsp;&nbsp; &nbsp;&nbsp; BIN_LITERAL \[`2`-`9`&ZeroWidthSpace;]\
+> &nbsp;&nbsp; | OCT_LITERAL \[`8`-`9`&ZeroWidthSpace;]\
+> &nbsp;&nbsp; | ( BIN_LITERAL | OCT_LITERAL | HEX_LITERAL ) `.` \
+> &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; _(not immediately followed by `.`, `_` or an XID_Start character)_\
+> &nbsp;&nbsp; | ( BIN_LITERAL | OCT_LITERAL ) `e`\
+> &nbsp;&nbsp; | `0b` `_`<sup>\*</sup> _end of input or not BIN_DIGIT_\
+> &nbsp;&nbsp; | `0o` `_`<sup>\*</sup> _end of input or not OCT_DIGIT_\
+> &nbsp;&nbsp; | `0x` `_`<sup>\*</sup> _end of input or not HEX_DIGIT_\
+> &nbsp;&nbsp; | DEC_LITERAL ( . DEC_LITERAL)<sup>?</sup> (`e`|`E`) (`+`|`-`)<sup>?</sup> _end of input or not DEC_DIGIT_
+
+The following lexical forms similar to number literals are _reserved forms_.
+Due to the possible ambiguity these raise, they are rejected by the tokenizer instead of being interpreted as separate tokens.
+
+* An unsuffixed binary or octal literal followed, without intervening whitespace, by a decimal digit out of the range for its radix.
+
+* An unsuffixed binary, octal, or hexadecimal literal followed, without intervening whitespace, by a period character (with the same restrictions on what follows the period as for floating-point literals).
+
+* An unsuffixed binary or octal literal followed, without intervening whitespace, by the character `e`.
+
+* Input which begins with one of the radix prefixes but is not a valid binary, octal, or hexadecimal literal (because it contains no digits).
+
+* Input which has the form of a floating-point literal with no digits in the exponent.
+
+Examples of reserved forms:
+
+```rust,compile_fail
+0b0102; // this is not `0b010` followed by `2`
+0o1279; // this is not `0o127` followed by `9`
+0x80.0; // this is not `0x80` followed by `.` and `0`
+0b101e; // this is not a pseudoliteral, or `0b101` followed by `e`
+0b; // this is not a pseudoliteral, or `0` followed by `b`
+0b_; // this is not a pseudoliteral, or `0` followed by `b_`
+2e; // this is not a pseudoliteral, or `2` followed by `e`
+2.0e; // this is not a pseudoliteral, or `2.0` followed by `e`
+2em; // this is not a pseudoliteral, or `2` followed by `em`
+2.0em; // this is not a pseudoliteral, or `2.0` followed by `em`
+```
+
+## Lifetimes and loop labels
+
+> **<sup>Lexer</sup>**\
+> LIFETIME_TOKEN :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `'` [IDENTIFIER_OR_KEYWORD][identifier]\
+> &nbsp;&nbsp; | `'_`
+>
+> LIFETIME_OR_LABEL :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `'` [NON_KEYWORD_IDENTIFIER][identifier]
+
+Lifetime parameters and [loop labels] use LIFETIME_OR_LABEL tokens. Any
+LIFETIME_TOKEN will be accepted by the lexer, and for example, can be used in
+macros.
+
+## Punctuation
+
+Punctuation symbol tokens are listed here for completeness. Their individual
+usages and meanings are defined in the linked pages.
+
+| Symbol | Name | Usage |
+|--------|-------------|-------|
+| `+` | Plus | [Addition][arith], [Trait Bounds], [Macro Kleene Matcher][macros]
+| `-` | Minus | [Subtraction][arith], [Negation]
+| `*` | Star | [Multiplication][arith], [Dereference], [Raw Pointers], [Macro Kleene Matcher][macros], [Use wildcards]
+| `/` | Slash | [Division][arith]
+| `%` | Percent | [Remainder][arith]
+| `^` | Caret | [Bitwise and Logical XOR][arith]
+| `!` | Not | [Bitwise and Logical NOT][negation], [Macro Calls][macros], [Inner Attributes][attributes], [Never Type], [Negative impls]
+| `&` | And | [Bitwise and Logical AND][arith], [Borrow], [References], [Reference patterns]
+| <code>\|</code> | Or | [Bitwise and Logical OR][arith], [Closures], Patterns in [match], [if let], and [while let]
+| `&&` | AndAnd | [Lazy AND][lazy-bool], [Borrow], [References], [Reference patterns]
+| <code>\|\|</code> | OrOr | [Lazy OR][lazy-bool], [Closures]
+| `<<` | Shl | [Shift Left][arith], [Nested Generics][generics]
+| `>>` | Shr | [Shift Right][arith], [Nested Generics][generics]
+| `+=` | PlusEq | [Addition assignment][compound]
+| `-=` | MinusEq | [Subtraction assignment][compound]
+| `*=` | StarEq | [Multiplication assignment][compound]
+| `/=` | SlashEq | [Division assignment][compound]
+| `%=` | PercentEq | [Remainder assignment][compound]
+| `^=` | CaretEq | [Bitwise XOR assignment][compound]
+| `&=` | AndEq | [Bitwise And assignment][compound]
+| <code>\|=</code> | OrEq | [Bitwise Or assignment][compound]
+| `<<=` | ShlEq | [Shift Left assignment][compound]
+| `>>=` | ShrEq | [Shift Right assignment][compound], [Nested Generics][generics]
+| `=` | Eq | [Assignment], [Attributes], Various type definitions
+| `==` | EqEq | [Equal][comparison]
+| `!=` | Ne | [Not Equal][comparison]
+| `>` | Gt | [Greater than][comparison], [Generics], [Paths]
+| `<` | Lt | [Less than][comparison], [Generics], [Paths]
+| `>=` | Ge | [Greater than or equal to][comparison], [Generics]
+| `<=` | Le | [Less than or equal to][comparison]
+| `@` | At | [Subpattern binding]
+| `_` | Underscore | [Wildcard patterns], [Inferred types], Unnamed items in [constants], [extern crates], [use declarations], and [destructuring assignment]
+| `.` | Dot | [Field access][field], [Tuple index]
+| `..` | DotDot | [Range][range], [Struct expressions], [Patterns], [Range Patterns][rangepat]
+| `...` | DotDotDot | [Variadic functions][extern], [Range patterns]
+| `..=` | DotDotEq | [Inclusive Range][range], [Range patterns]
+| `,` | Comma | Various separators
+| `;` | Semi | Terminator for various items and statements, [Array types]
+| `:` | Colon | Various separators
+| `::` | PathSep | [Path separator][paths]
+| `->` | RArrow | [Function return type][functions], [Closure return type][closures], [Function pointer type]
+| `=>` | FatArrow | [Match arms][match], [Macros]
+| `#` | Pound | [Attributes]
+| `$` | Dollar | [Macros]
+| `?` | Question | [Question mark operator][question], [Questionably sized][sized], [Macro Kleene Matcher][macros]
+| `~` | Tilde | The tilde operator has been unused since before Rust 1.0, but its token may still be used
+
+## Delimiters
+
+Bracket punctuation is used in various parts of the grammar. An open bracket
+must always be paired with a close bracket. Brackets and the tokens within
+them are referred to as "token trees" in [macros]. The three types of brackets are:
+
+| Bracket | Type |
+|---------|-----------------|
+| `{` `}` | Curly braces |
+| `[` `]` | Square brackets |
+| `(` `)` | Parentheses |
+
+## Reserved prefixes
+
+> **<sup>Lexer 2021+</sup>**\
+> RESERVED_TOKEN_DOUBLE_QUOTE : ( IDENTIFIER_OR_KEYWORD <sub>_Except `b` or `r` or `br`_</sub> | `_` ) `"`\
+> RESERVED_TOKEN_SINGLE_QUOTE : ( IDENTIFIER_OR_KEYWORD <sub>_Except `b`_</sub> | `_` ) `'`\
+> RESERVED_TOKEN_POUND : ( IDENTIFIER_OR_KEYWORD <sub>_Except `r` or `br`_</sub> | `_` ) `#`
+
+Some lexical forms known as _reserved prefixes_ are reserved for future use.
+
+Source input which would otherwise be lexically interpreted as a non-raw identifier (or a keyword or `_`) which is immediately followed by a `#`, `'`, or `"` character (without intervening whitespace) is identified as a reserved prefix.
+
+Note that raw identifiers, raw string literals, and raw byte string literals may contain a `#` character but are not interpreted as containing a reserved prefix.
+
+Similarly the `r`, `b`, and `br` prefixes used in raw string literals, byte literals, byte string literals, and raw byte string literals are not interpreted as reserved prefixes.
+
+> **Edition Differences**: Starting with the 2021 edition, reserved prefixes are reported as an error by the lexer (in particular, they cannot be passed to macros).
+>
+> Before the 2021 edition, a reserved prefixes are accepted by the lexer and interpreted as multiple tokens (for example, one token for the identifier or keyword, followed by a `#` token).
+>
+> Examples accepted in all editions:
+> ```rust
+> macro_rules! lexes {($($_:tt)*) => {}}
+> lexes!{a #foo}
+> lexes!{continue 'foo}
+> lexes!{match "..." {}}
+> lexes!{r#let#foo} // three tokens: r#let # foo
+> ```
+>
+> Examples accepted before the 2021 edition but rejected later:
+> ```rust,edition2018
+> macro_rules! lexes {($($_:tt)*) => {}}
+> lexes!{a#foo}
+> lexes!{continue'foo}
+> lexes!{match"..." {}}
+> ```
+
+[Inferred types]: types/inferred.md
+[Range patterns]: patterns.md#range-patterns
+[Reference patterns]: patterns.md#reference-patterns
+[Subpattern binding]: patterns.md#identifier-patterns
+[Wildcard patterns]: patterns.md#wildcard-pattern
+[arith]: expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[array types]: types/array.md
+[assignment]: expressions/operator-expr.md#assignment-expressions
+[attributes]: attributes.md
+[borrow]: expressions/operator-expr.md#borrow-operators
+[closures]: expressions/closure-expr.md
+[comparison]: expressions/operator-expr.md#comparison-operators
+[compound]: expressions/operator-expr.md#compound-assignment-expressions
+[constants]: items/constant-items.md
+[dereference]: expressions/operator-expr.md#the-dereference-operator
+[destructuring assignment]: expressions/underscore-expr.md
+[extern crates]: items/extern-crates.md
+[extern]: items/external-blocks.md
+[field]: expressions/field-expr.md
+[floating-point types]: types/numeric.md#floating-point-types
+[function pointer type]: types/function-pointer.md
+[functions]: items/functions.md
+[generics]: items/generics.md
+[identifier]: identifiers.md
+[if let]: expressions/if-expr.md#if-let-expressions
+[keywords]: keywords.md
+[lazy-bool]: expressions/operator-expr.md#lazy-boolean-operators
+[literal expressions]: expressions/literal-expr.md
+[loop labels]: expressions/loop-expr.md
+[macros]: macros-by-example.md
+[match]: expressions/match-expr.md
+[negation]: expressions/operator-expr.md#negation-operators
+[negative impls]: items/implementations.md
+[never type]: types/never.md
+[numeric types]: types/numeric.md
+[paths]: paths.md
+[patterns]: patterns.md
+[question]: expressions/operator-expr.md#the-question-mark-operator
+[range]: expressions/range-expr.md
+[rangepat]: patterns.md#range-patterns
+[raw pointers]: types/pointer.md#raw-pointers-const-and-mut
+[references]: types/pointer.md
+[sized]: trait-bounds.md#sized
+[struct expressions]: expressions/struct-expr.md
+[trait bounds]: trait-bounds.md
+[tuple index]: expressions/tuple-expr.md#tuple-indexing-expressions
+[tuple structs]: items/structs.md
+[tuple variants]: items/enumerations.md
+[tuples]: types/tuple.md
+[unary minus operator]: expressions/operator-expr.md#negation-operators
+[use declarations]: items/use-declarations.md
+[use wildcards]: items/use-declarations.md
+[while let]: expressions/loop-expr.md#predicate-pattern-loops
diff --git a/src/doc/reference/src/trait-bounds.md b/src/doc/reference/src/trait-bounds.md
new file mode 100644
index 000000000..f284ca4eb
--- /dev/null
+++ b/src/doc/reference/src/trait-bounds.md
@@ -0,0 +1,176 @@
+# Trait and lifetime bounds
+
+> **<sup>Syntax</sup>**\
+> _TypeParamBounds_ :\
+> &nbsp;&nbsp; _TypeParamBound_ ( `+` _TypeParamBound_ )<sup>\*</sup> `+`<sup>?</sup>
+>
+> _TypeParamBound_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _Lifetime_ | _TraitBound_
+>
+> _TraitBound_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `?`<sup>?</sup>
+> [_ForLifetimes_](#higher-ranked-trait-bounds)<sup>?</sup> [_TypePath_]\
+> &nbsp;&nbsp; | `(` `?`<sup>?</sup>
+> [_ForLifetimes_](#higher-ranked-trait-bounds)<sup>?</sup> [_TypePath_] `)`
+>
+> _LifetimeBounds_ :\
+> &nbsp;&nbsp; ( _Lifetime_ `+` )<sup>\*</sup> _Lifetime_<sup>?</sup>
+>
+> _Lifetime_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [LIFETIME_OR_LABEL]\
+> &nbsp;&nbsp; | `'static`\
+> &nbsp;&nbsp; | `'_`
+
+[Trait] and lifetime bounds provide a way for [generic items][generic] to
+restrict which types and lifetimes are used as their parameters. Bounds can be
+provided on any type in a [where clause]. There are also shorter forms for
+certain common cases:
+
+* Bounds written after declaring a [generic parameter][generic]:
+ `fn f<A: Copy>() {}` is the same as `fn f<A> where A: Copy () {}`.
+* In trait declarations as [supertraits]: `trait Circle : Shape {}` is
+ equivalent to `trait Circle where Self : Shape {}`.
+* In trait declarations as bounds on [associated types]:
+ `trait A { type B: Copy; }` is equivalent to
+ `trait A where Self::B: Copy { type B; }`.
+
+Bounds on an item must be satisfied when using the item. When type checking and
+borrow checking a generic item, the bounds can be used to determine that a
+trait is implemented for a type. For example, given `Ty: Trait`
+
+* In the body of a generic function, methods from `Trait` can be called on `Ty`
+ values. Likewise associated constants on the `Trait` can be used.
+* Associated types from `Trait` can be used.
+* Generic functions and types with a `T: Trait` bounds can be used with `Ty`
+ being used for `T`.
+
+```rust
+# type Surface = i32;
+trait Shape {
+ fn draw(&self, surface: Surface);
+ fn name() -> &'static str;
+}
+
+fn draw_twice<T: Shape>(surface: Surface, sh: T) {
+ sh.draw(surface); // Can call method because T: Shape
+ sh.draw(surface);
+}
+
+fn copy_and_draw_twice<T: Copy>(surface: Surface, sh: T) where T: Shape {
+ let shape_copy = sh; // doesn't move sh because T: Copy
+ draw_twice(surface, sh); // Can use generic function because T: Shape
+}
+
+struct Figure<S: Shape>(S, S);
+
+fn name_figure<U: Shape>(
+ figure: Figure<U>, // Type Figure<U> is well-formed because U: Shape
+) {
+ println!(
+ "Figure of two {}",
+ U::name(), // Can use associated function
+ );
+}
+```
+
+Bounds that don't use the item's parameters or [higher-ranked lifetimes] are checked when the item is defined.
+It is an error for such a bound to be false.
+
+[`Copy`], [`Clone`], and [`Sized`] bounds are also checked for certain generic types when using the item, even if the use does not provide a concrete type.
+It is an error to have `Copy` or `Clone` as a bound on a mutable reference, [trait object], or [slice].
+It is an error to have `Sized` as a bound on a trait object or slice.
+
+```rust,compile_fail
+struct A<'a, T>
+where
+ i32: Default, // Allowed, but not useful
+ i32: Iterator, // Error: `i32` is not an iterator
+ &'a mut T: Copy, // (at use) Error: the trait bound is not satisfied
+ [T]: Sized, // (at use) Error: size cannot be known at compilation
+{
+ f: &'a T,
+}
+struct UsesA<'a, T>(A<'a, T>);
+```
+
+Trait and lifetime bounds are also used to name [trait objects].
+
+## `?Sized`
+
+`?` is only used to relax the implicit [`Sized`] trait bound for [type parameters] or [associated types].
+`?Sized` may not be used as a bound for other types.
+
+## Lifetime bounds
+
+Lifetime bounds can be applied to types or to other lifetimes.
+The bound `'a: 'b` is usually read as `'a` *outlives* `'b`.
+`'a: 'b` means that `'a` lasts at least as long as `'b`, so a reference `&'a ()` is valid whenever `&'b ()` is valid.
+
+```rust
+fn f<'a, 'b>(x: &'a i32, mut y: &'b i32) where 'a: 'b {
+ y = x; // &'a i32 is a subtype of &'b i32 because 'a: 'b
+ let r: &'b &'a i32 = &&0; // &'b &'a i32 is well formed because 'a: 'b
+}
+```
+
+`T: 'a` means that all lifetime parameters of `T` outlive `'a`.
+For example, if `'a` is an unconstrained lifetime parameter, then `i32: 'static` and `&'static str: 'a` are satisfied, but `Vec<&'a ()>: 'static` is not.
+
+## Higher-ranked trait bounds
+
+> _ForLifetimes_ :\
+> &nbsp;&nbsp; `for` [_GenericParams_]
+
+Type bounds may be *higher ranked* over lifetimes. These bounds specify a bound
+that is true *for all* lifetimes. For example, a bound such as `for<'a> &'a T:
+PartialEq<i32>` would require an implementation like
+
+```rust
+# struct T;
+impl<'a> PartialEq<i32> for &'a T {
+ // ...
+# fn eq(&self, other: &i32) -> bool {true}
+}
+```
+
+and could then be used to compare a `&'a T` with any lifetime to an `i32`.
+
+Only a higher-ranked bound can be used here, because the lifetime of the reference is shorter than any possible lifetime parameter on the function:
+
+```rust
+fn call_on_ref_zero<F>(f: F) where for<'a> F: Fn(&'a i32) {
+ let zero = 0;
+ f(&zero);
+}
+```
+
+Higher-ranked lifetimes may also be specified just before the trait: the only
+difference is the scope of the lifetime parameter, which extends only to the
+end of the following trait instead of the whole bound. This function is
+equivalent to the last one.
+
+```rust
+fn call_on_ref_zero<F>(f: F) where F: for<'a> Fn(&'a i32) {
+ let zero = 0;
+ f(&zero);
+}
+```
+
+[LIFETIME_OR_LABEL]: tokens.md#lifetimes-and-loop-labels
+[_GenericParams_]: items/generics.md
+[_TypePath_]: paths.md#paths-in-types
+[`Clone`]: special-types-and-traits.md#clone
+[`Copy`]: special-types-and-traits.md#copy
+[`Sized`]: special-types-and-traits.md#sized
+
+[arrays]: types/array.md
+[associated types]: items/associated-items.md#associated-types
+[supertraits]: items/traits.md#supertraits
+[generic]: items/generics.md
+[higher-ranked lifetimes]: #higher-ranked-trait-bounds
+[slice]: types/slice.md
+[Trait]: items/traits.md#trait-bounds
+[trait object]: types/trait-object.md
+[trait objects]: types/trait-object.md
+[type parameters]: types/parameters.md
+[where clause]: items/generics.md#where-clauses
diff --git a/src/doc/reference/src/type-coercions.md b/src/doc/reference/src/type-coercions.md
new file mode 100644
index 000000000..45d81d386
--- /dev/null
+++ b/src/doc/reference/src/type-coercions.md
@@ -0,0 +1,275 @@
+# Type coercions
+
+**Type coercions** are implicit operations that change the type of a value.
+They happen automatically at specific locations and are highly restricted in
+what types actually coerce.
+
+Any conversions allowed by coercion can also be explicitly performed by the
+[type cast operator], `as`.
+
+Coercions are originally defined in [RFC 401] and expanded upon in [RFC 1558].
+
+## Coercion sites
+
+A coercion can only occur at certain coercion sites in a program; these are
+typically places where the desired type is explicit or can be derived by
+propagation from explicit types (without type inference). Possible coercion
+sites are:
+
+* `let` statements where an explicit type is given.
+
+ For example, `&mut 42` is coerced to have type `&i8` in the following:
+
+ ```rust
+ let _: &i8 = &mut 42;
+ ```
+
+* `static` and `const` item declarations (similar to `let` statements).
+
+* Arguments for function calls
+
+ The value being coerced is the actual parameter, and it is coerced to
+ the type of the formal parameter.
+
+ For example, `&mut 42` is coerced to have type `&i8` in the following:
+
+ ```rust
+ fn bar(_: &i8) { }
+
+ fn main() {
+ bar(&mut 42);
+ }
+ ```
+
+ For method calls, the receiver (`self` parameter) can only take advantage
+ of [unsized coercions](#unsized-coercions).
+
+* Instantiations of struct, union, or enum variant fields
+
+ For example, `&mut 42` is coerced to have type `&i8` in the following:
+
+ ```rust
+ struct Foo<'a> { x: &'a i8 }
+
+ fn main() {
+ Foo { x: &mut 42 };
+ }
+ ```
+
+* Function results&mdash;either the final line of a block if it is not
+ semicolon-terminated or any expression in a `return` statement
+
+ For example, `x` is coerced to have type `&dyn Display` in the following:
+
+ ```rust
+ use std::fmt::Display;
+ fn foo(x: &u32) -> &dyn Display {
+ x
+ }
+ ```
+
+If the expression in one of these coercion sites is a coercion-propagating
+expression, then the relevant sub-expressions in that expression are also
+coercion sites. Propagation recurses from these new coercion sites.
+Propagating expressions and their relevant sub-expressions are:
+
+* Array literals, where the array has type `[U; n]`. Each sub-expression in
+the array literal is a coercion site for coercion to type `U`.
+
+* Array literals with repeating syntax, where the array has type `[U; n]`. The
+repeated sub-expression is a coercion site for coercion to type `U`.
+
+* Tuples, where a tuple is a coercion site to type `(U_0, U_1, ..., U_n)`.
+Each sub-expression is a coercion site to the respective type, e.g. the
+zeroth sub-expression is a coercion site to type `U_0`.
+
+* Parenthesized sub-expressions (`(e)`): if the expression has type `U`, then
+the sub-expression is a coercion site to `U`.
+
+* Blocks: if a block has type `U`, then the last expression in the block (if
+it is not semicolon-terminated) is a coercion site to `U`. This includes
+blocks which are part of control flow statements, such as `if`/`else`, if
+the block has a known type.
+
+## Coercion types
+
+Coercion is allowed between the following types:
+
+* `T` to `U` if `T` is a [subtype] of `U` (*reflexive case*)
+
+* `T_1` to `T_3` where `T_1` coerces to `T_2` and `T_2` coerces to `T_3`
+(*transitive case*)
+
+ Note that this is not fully supported yet.
+
+* `&mut T` to `&T`
+
+* `*mut T` to `*const T`
+
+* `&T` to `*const T`
+
+* `&mut T` to `*mut T`
+
+* `&T` or `&mut T` to `&U` if `T` implements `Deref<Target = U>`. For example:
+
+ ```rust
+ use std::ops::Deref;
+
+ struct CharContainer {
+ value: char,
+ }
+
+ impl Deref for CharContainer {
+ type Target = char;
+
+ fn deref<'a>(&'a self) -> &'a char {
+ &self.value
+ }
+ }
+
+ fn foo(arg: &char) {}
+
+ fn main() {
+ let x = &mut CharContainer { value: 'y' };
+ foo(x); //&mut CharContainer is coerced to &char.
+ }
+ ```
+
+* `&mut T` to `&mut U` if `T` implements `DerefMut<Target = U>`.
+
+* TyCtor(`T`) to TyCtor(`U`), where TyCtor(`T`) is one of
+ - `&T`
+ - `&mut T`
+ - `*const T`
+ - `*mut T`
+ - `Box<T>`
+
+ and where `U` can be obtained from `T` by [unsized coercion](#unsized-coercions).
+
+ <!--In the future, coerce_inner will be recursively extended to tuples and
+ structs. In addition, coercions from subtraits to supertraits will be
+ added. See [RFC 401] for more details.-->
+
+* Function item types to `fn` pointers
+
+* Non capturing closures to `fn` pointers
+
+* `!` to any `T`
+
+### Unsized Coercions
+
+The following coercions are called `unsized coercions`, since they
+relate to converting sized types to unsized types, and are permitted in a few
+cases where other coercions are not, as described above. They can still happen
+anywhere else a coercion can occur.
+
+Two traits, [`Unsize`] and [`CoerceUnsized`], are used
+to assist in this process and expose it for library use. The following
+coercions are built-ins and, if `T` can be coerced to `U` with one of them, then
+an implementation of `Unsize<U>` for `T` will be provided:
+
+* `[T; n]` to `[T]`.
+
+* `T` to `dyn U`, when `T` implements `U + Sized`, and `U` is [object safe].
+
+* `Foo<..., T, ...>` to `Foo<..., U, ...>`, when:
+ * `Foo` is a struct.
+ * `T` implements `Unsize<U>`.
+ * The last field of `Foo` has a type involving `T`.
+ * If that field has type `Bar<T>`, then `Bar<T>` implements `Unsized<Bar<U>>`.
+ * T is not part of the type of any other fields.
+
+Additionally, a type `Foo<T>` can implement `CoerceUnsized<Foo<U>>` when `T`
+implements `Unsize<U>` or `CoerceUnsized<Foo<U>>`. This allows it to provide a
+unsized coercion to `Foo<U>`.
+
+> Note: While the definition of the unsized coercions and their implementation
+> has been stabilized, the traits themselves are not yet stable and therefore
+> can't be used directly in stable Rust.
+
+## Least upper bound coercions
+
+In some contexts, the compiler must coerce together multiple types to try and
+find the most general type. This is called a "Least Upper Bound" coercion.
+LUB coercion is used and only used in the following situations:
+
++ To find the common type for a series of if branches.
++ To find the common type for a series of match arms.
++ To find the common type for array elements.
++ To find the type for the return type of a closure with multiple return statements.
++ To check the type for the return type of a function with multiple return statements.
+
+In each such case, there are a set of types `T0..Tn` to be mutually coerced
+to some target type `T_t`, which is unknown to start. Computing the LUB
+coercion is done iteratively. The target type `T_t` begins as the type `T0`.
+For each new type `Ti`, we consider whether
+
++ If `Ti` can be coerced to the current target type `T_t`, then no change is made.
++ Otherwise, check whether `T_t` can be coerced to `Ti`; if so, the `T_t` is
+changed to `Ti`. (This check is also conditioned on whether all of the source
+expressions considered thus far have implicit coercions.)
++ If not, try to compute a mutual supertype of `T_t` and `Ti`, which will become the new target type.
+
+### Examples:
+
+```rust
+# let (a, b, c) = (0, 1, 2);
+// For if branches
+let bar = if true {
+ a
+} else if false {
+ b
+} else {
+ c
+};
+
+// For match arms
+let baw = match 42 {
+ 0 => a,
+ 1 => b,
+ _ => c,
+};
+
+// For array elements
+let bax = [a, b, c];
+
+// For closure with multiple return statements
+let clo = || {
+ if true {
+ a
+ } else if false {
+ b
+ } else {
+ c
+ }
+};
+let baz = clo();
+
+// For type checking of function with multiple return statements
+fn foo() -> i32 {
+ let (a, b, c) = (0, 1, 2);
+ match 42 {
+ 0 => a,
+ 1 => b,
+ _ => c,
+ }
+}
+```
+
+In these examples, types of the `ba*` are found by LUB coercion. And the
+compiler checks whether LUB coercion result of `a`, `b`, `c` is `i32` in the
+processing of the function `foo`.
+
+### Caveat
+
+This description is obviously informal. Making it more precise is expected to
+proceed as part of a general effort to specify the Rust type checker more
+precisely.
+
+[RFC 401]: https://github.com/rust-lang/rfcs/blob/master/text/0401-coercions.md
+[RFC 1558]: https://github.com/rust-lang/rfcs/blob/master/text/1558-closure-to-fn-coercion.md
+[subtype]: subtyping.md
+[object safe]: items/traits.md#object-safety
+[type cast operator]: expressions/operator-expr.md#type-cast-expressions
+[`Unsize`]: ../std/marker/trait.Unsize.html
+[`CoerceUnsized`]: ../std/ops/trait.CoerceUnsized.html
diff --git a/src/doc/reference/src/type-layout.md b/src/doc/reference/src/type-layout.md
new file mode 100644
index 000000000..ce9296662
--- /dev/null
+++ b/src/doc/reference/src/type-layout.md
@@ -0,0 +1,578 @@
+# Type Layout
+
+The layout of a type is its size, alignment, and the relative offsets of its
+fields. For enums, how the discriminant is laid out and interpreted is also part
+of type layout.
+
+Type layout can be changed with each compilation. Instead of trying to document
+exactly what is done, we only document what is guaranteed today.
+
+## Size and Alignment
+
+All values have an alignment and size.
+
+The *alignment* of a value specifies what addresses are valid to store the value
+at. A value of alignment `n` must only be stored at an address that is a
+multiple of n. For example, a value with an alignment of 2 must be stored at an
+even address, while a value with an alignment of 1 can be stored at any address.
+Alignment is measured in bytes, and must be at least 1, and always a power of 2.
+The alignment of a value can be checked with the [`align_of_val`] function.
+
+The *size* of a value is the offset in bytes between successive elements in an
+array with that item type including alignment padding. The size of a value is
+always a multiple of its alignment. The size of a value can be checked with the
+[`size_of_val`] function.
+
+Types where all values have the same size and alignment, and both are known at
+compile time, implement the [`Sized`] trait and can be checked with the
+[`size_of`] and [`align_of`] functions. Types that are not [`Sized`] are known
+as [dynamically sized types]. Since all values of a `Sized` type share the same
+size and alignment, we refer to those shared values as the size of the type and
+the alignment of the type respectively.
+
+## Primitive Data Layout
+
+The size of most primitives is given in this table.
+
+| Type | `size_of::<Type>()`|
+|-- |-- |
+| `bool` | 1 |
+| `u8` / `i8` | 1 |
+| `u16` / `i16` | 2 |
+| `u32` / `i32` | 4 |
+| `u64` / `i64` | 8 |
+| `u128` / `i128` | 16 |
+| `f32` | 4 |
+| `f64` | 8 |
+| `char` | 4 |
+
+`usize` and `isize` have a size big enough to contain every address on the
+target platform. For example, on a 32 bit target, this is 4 bytes and on a 64
+bit target, this is 8 bytes.
+
+Most primitives are generally aligned to their size, although this is
+platform-specific behavior. In particular, on x86 u64 and f64 are only
+aligned to 32 bits.
+
+## Pointers and References Layout
+
+Pointers and references have the same layout. Mutability of the pointer or
+reference does not change the layout.
+
+Pointers to sized types have the same size and alignment as `usize`.
+
+Pointers to unsized types are sized. The size and alignment is guaranteed to be
+at least equal to the size and alignment of a pointer.
+
+> Note: Though you should not rely on this, all pointers to
+> <abbr title="Dynamically Sized Types">DSTs</abbr> are currently twice the
+> size of the size of `usize` and have the same alignment.
+
+## Array Layout
+
+An array of `[T; N]` has a size of `size_of::<T>() * N` and the same alignment
+of `T`. Arrays are laid out so that the zero-based `nth` element of the array
+is offset from the start of the array by `n * size_of::<T>()` bytes.
+
+## Slice Layout
+
+Slices have the same layout as the section of the array they slice.
+
+> Note: This is about the raw `[T]` type, not pointers (`&[T]`, `Box<[T]>`,
+> etc.) to slices.
+
+## `str` Layout
+String slices are a UTF-8 representation of characters that have the same layout as slices of type `[u8]`.
+
+## Tuple Layout
+
+Tuples do not have any guarantees about their layout.
+
+The exception to this is the unit tuple (`()`) which is guaranteed as a
+zero-sized type to have a size of 0 and an alignment of 1.
+
+## Trait Object Layout
+
+Trait objects have the same layout as the value the trait object is of.
+
+> Note: This is about the raw trait object types, not pointers (`&dyn Trait`,
+> `Box<dyn Trait>`, etc.) to trait objects.
+
+## Closure Layout
+
+Closures have no layout guarantees.
+
+## Representations
+
+All user-defined composite types (`struct`s, `enum`s, and `union`s) have a
+*representation* that specifies what the layout is for the type. The possible
+representations for a type are:
+
+- [Default]
+- [`C`]
+- The [primitive representations]
+- [`transparent`]
+
+The representation of a type can be changed by applying the `repr` attribute
+to it. The following example shows a struct with a `C` representation.
+
+```rust
+#[repr(C)]
+struct ThreeInts {
+ first: i16,
+ second: i8,
+ third: i32
+}
+```
+
+The alignment may be raised or lowered with the `align` and `packed` modifiers
+respectively. They alter the representation specified in the attribute.
+If no representation is specified, the default one is altered.
+
+```rust
+// Default representation, alignment lowered to 2.
+#[repr(packed(2))]
+struct PackedStruct {
+ first: i16,
+ second: i8,
+ third: i32
+}
+
+// C representation, alignment raised to 8
+#[repr(C, align(8))]
+struct AlignedStruct {
+ first: i16,
+ second: i8,
+ third: i32
+}
+```
+
+> Note: As a consequence of the representation being an attribute on the item,
+> the representation does not depend on generic parameters. Any two types with
+> the same name have the same representation. For example, `Foo<Bar>` and
+> `Foo<Baz>` both have the same representation.
+
+The representation of a type can change the padding between fields, but does
+not change the layout of the fields themselves. For example, a struct with a
+`C` representation that contains a struct `Inner` with the default
+representation will not change the layout of `Inner`.
+
+### The Default Representation
+
+Nominal types without a `repr` attribute have the default representation.
+Informally, this representation is also called the `rust` representation.
+
+There are no guarantees of data layout made by this representation.
+
+### The `C` Representation
+
+The `C` representation is designed for dual purposes. One purpose is for
+creating types that are interoperable with the C Language. The second purpose is
+to create types that you can soundly perform operations on that rely on data
+layout such as reinterpreting values as a different type.
+
+Because of this dual purpose, it is possible to create types that are not useful
+for interfacing with the C programming language.
+
+This representation can be applied to structs, unions, and enums. The exception
+is [zero-variant enums] for which the `C` representation is an error.
+
+#### `#[repr(C)]` Structs
+
+The alignment of the struct is the alignment of the most-aligned field in it.
+
+The size and offset of fields is determined by the following algorithm.
+
+Start with a current offset of 0 bytes.
+
+For each field in declaration order in the struct, first determine the size and
+alignment of the field. If the current offset is not a multiple of the field's
+alignment, then add padding bytes to the current offset until it is a multiple
+of the field's alignment. The offset for the field is what the current offset
+is now. Then increase the current offset by the size of the field.
+
+Finally, the size of the struct is the current offset rounded up to the nearest
+multiple of the struct's alignment.
+
+Here is this algorithm described in pseudocode.
+
+<!-- ignore: pseudocode -->
+```rust,ignore
+/// Returns the amount of padding needed after `offset` to ensure that the
+/// following address will be aligned to `alignment`.
+fn padding_needed_for(offset: usize, alignment: usize) -> usize {
+ let misalignment = offset % alignment;
+ if misalignment > 0 {
+ // round up to next multiple of `alignment`
+ alignment - misalignment
+ } else {
+ // already a multiple of `alignment`
+ 0
+ }
+}
+
+struct.alignment = struct.fields().map(|field| field.alignment).max();
+
+let current_offset = 0;
+
+for field in struct.fields_in_declaration_order() {
+ // Increase the current offset so that it's a multiple of the alignment
+ // of this field. For the first field, this will always be zero.
+ // The skipped bytes are called padding bytes.
+ current_offset += padding_needed_for(current_offset, field.alignment);
+
+ struct[field].offset = current_offset;
+
+ current_offset += field.size;
+}
+
+struct.size = current_offset + padding_needed_for(current_offset, struct.alignment);
+```
+
+<div class="warning">
+
+Warning: This pseudocode uses a naive algorithm that ignores overflow issues for
+the sake of clarity. To perform memory layout computations in actual code, use
+[`Layout`].
+
+</div>
+
+> Note: This algorithm can produce zero-sized structs. In C, an empty struct
+> declaration like `struct Foo { }` is illegal. However, both gcc and clang
+> support options to enable such structs, and assign them size zero. C++, in
+> contrast, gives empty structs a size of 1, unless they are inherited from or
+> they are fields that have the `[[no_unique_address]]` attribute, in which
+> case they do not increase the overall size of the struct.
+
+#### `#[repr(C)]` Unions
+
+A union declared with `#[repr(C)]` will have the same size and alignment as an
+equivalent C union declaration in the C language for the target platform.
+The union will have a size of the maximum size of all of its fields rounded to
+its alignment, and an alignment of the maximum alignment of all of its fields.
+These maximums may come from different fields.
+
+```rust
+#[repr(C)]
+union Union {
+ f1: u16,
+ f2: [u8; 4],
+}
+
+assert_eq!(std::mem::size_of::<Union>(), 4); // From f2
+assert_eq!(std::mem::align_of::<Union>(), 2); // From f1
+
+#[repr(C)]
+union SizeRoundedUp {
+ a: u32,
+ b: [u16; 3],
+}
+
+assert_eq!(std::mem::size_of::<SizeRoundedUp>(), 8); // Size of 6 from b,
+ // rounded up to 8 from
+ // alignment of a.
+assert_eq!(std::mem::align_of::<SizeRoundedUp>(), 4); // From a
+```
+
+#### `#[repr(C)]` Field-less Enums
+
+For [field-less enums], the `C` representation has the size and alignment of
+the default `enum` size and alignment for the target platform's C ABI.
+
+> Note: The enum representation in C is implementation defined, so this is
+> really a "best guess". In particular, this may be incorrect when the C code
+> of interest is compiled with certain flags.
+
+<div class="warning">
+
+Warning: There are crucial differences between an `enum` in the C language and
+Rust's [field-less enums] with this representation. An `enum` in C is
+mostly a `typedef` plus some named constants; in other words, an object of an
+`enum` type can hold any integer value. For example, this is often used for
+bitflags in `C`. In contrast, Rust’s [field-less enums] can only legally hold
+the discriminant values, everything else is [undefined behavior]. Therefore,
+using a field-less enum in FFI to model a C `enum` is often wrong.
+
+</div>
+
+#### `#[repr(C)]` Enums With Fields
+
+The representation of a `repr(C)` enum with fields is a `repr(C)` struct with
+two fields, also called a "tagged union" in C:
+
+- a `repr(C)` version of the enum with all fields removed ("the tag")
+- a `repr(C)` union of `repr(C)` structs for the fields of each variant that had
+ them ("the payload")
+
+> Note: Due to the representation of `repr(C)` structs and unions, if a variant
+> has a single field there is no difference between putting that field directly
+> in the union or wrapping it in a struct; any system which wishes to manipulate
+> such an `enum`'s representation may therefore use whichever form is more
+> convenient or consistent for them.
+
+```rust
+// This Enum has the same representation as ...
+#[repr(C)]
+enum MyEnum {
+ A(u32),
+ B(f32, u64),
+ C { x: u32, y: u8 },
+ D,
+ }
+
+// ... this struct.
+#[repr(C)]
+struct MyEnumRepr {
+ tag: MyEnumDiscriminant,
+ payload: MyEnumFields,
+}
+
+// This is the discriminant enum.
+#[repr(C)]
+enum MyEnumDiscriminant { A, B, C, D }
+
+// This is the variant union.
+#[repr(C)]
+union MyEnumFields {
+ A: MyAFields,
+ B: MyBFields,
+ C: MyCFields,
+ D: MyDFields,
+}
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+struct MyAFields(u32);
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+struct MyBFields(f32, u64);
+
+#[repr(C)]
+#[derive(Copy, Clone)]
+struct MyCFields { x: u32, y: u8 }
+
+// This struct could be omitted (it is a zero-sized type), and it must be in
+// C/C++ headers.
+#[repr(C)]
+#[derive(Copy, Clone)]
+struct MyDFields;
+```
+
+> Note: `union`s with non-`Copy` fields are unstable, see [55149].
+
+### Primitive representations
+
+The *primitive representations* are the representations with the same names as
+the primitive integer types. That is: `u8`, `u16`, `u32`, `u64`, `u128`,
+`usize`, `i8`, `i16`, `i32`, `i64`, `i128`, and `isize`.
+
+Primitive representations can only be applied to enumerations and have
+different behavior whether the enum has fields or no fields. It is an error
+for [zero-variant enums] to have a primitive representation. Combining
+two primitive representations together is an error.
+
+#### Primitive Representation of Field-less Enums
+
+For [field-less enums], primitive representations set the size and alignment to
+be the same as the primitive type of the same name. For example, a field-less
+enum with a `u8` representation can only have discriminants between 0 and 255
+inclusive.
+
+#### Primitive Representation of Enums With Fields
+
+The representation of a primitive representation enum is a `repr(C)` union of
+`repr(C)` structs for each variant with a field. The first field of each struct
+in the union is the primitive representation version of the enum with all fields
+removed ("the tag") and the remaining fields are the fields of that variant.
+
+> Note: This representation is unchanged if the tag is given its own member in
+> the union, should that make manipulation more clear for you (although to
+> follow the C++ standard the tag member should be wrapped in a `struct`).
+
+```rust
+// This enum has the same representation as ...
+#[repr(u8)]
+enum MyEnum {
+ A(u32),
+ B(f32, u64),
+ C { x: u32, y: u8 },
+ D,
+ }
+
+// ... this union.
+#[repr(C)]
+union MyEnumRepr {
+ A: MyVariantA,
+ B: MyVariantB,
+ C: MyVariantC,
+ D: MyVariantD,
+}
+
+// This is the discriminant enum.
+#[repr(u8)]
+#[derive(Copy, Clone)]
+enum MyEnumDiscriminant { A, B, C, D }
+
+#[repr(C)]
+#[derive(Clone, Copy)]
+struct MyVariantA(MyEnumDiscriminant, u32);
+
+#[repr(C)]
+#[derive(Clone, Copy)]
+struct MyVariantB(MyEnumDiscriminant, f32, u64);
+
+#[repr(C)]
+#[derive(Clone, Copy)]
+struct MyVariantC { tag: MyEnumDiscriminant, x: u32, y: u8 }
+
+#[repr(C)]
+#[derive(Clone, Copy)]
+struct MyVariantD(MyEnumDiscriminant);
+```
+
+> Note: `union`s with non-`Copy` fields are unstable, see [55149].
+
+#### Combining primitive representations of enums with fields and `#[repr(C)]`
+
+For enums with fields, it is also possible to combine `repr(C)` and a
+primitive representation (e.g., `repr(C, u8)`). This modifies the [`repr(C)`] by
+changing the representation of the discriminant enum to the chosen primitive
+instead. So, if you chose the `u8` representation, then the discriminant enum
+would have a size and alignment of 1 byte.
+
+The discriminant enum from the example [earlier][`repr(C)`] then becomes:
+
+```rust
+#[repr(C, u8)] // `u8` was added
+enum MyEnum {
+ A(u32),
+ B(f32, u64),
+ C { x: u32, y: u8 },
+ D,
+ }
+
+// ...
+
+#[repr(u8)] // So `u8` is used here instead of `C`
+enum MyEnumDiscriminant { A, B, C, D }
+
+// ...
+```
+
+For example, with a `repr(C, u8)` enum it is not possible to have 257 unique
+discriminants ("tags") whereas the same enum with only a `repr(C)` attribute
+will compile without any problems.
+
+Using a primitive representation in addition to `repr(C)` can change the size of
+an enum from the `repr(C)` form:
+
+```rust
+#[repr(C)]
+enum EnumC {
+ Variant0(u8),
+ Variant1,
+}
+
+#[repr(C, u8)]
+enum Enum8 {
+ Variant0(u8),
+ Variant1,
+}
+
+#[repr(C, u16)]
+enum Enum16 {
+ Variant0(u8),
+ Variant1,
+}
+
+// The size of the C representation is platform dependant
+assert_eq!(std::mem::size_of::<EnumC>(), 8);
+// One byte for the discriminant and one byte for the value in Enum8::Variant0
+assert_eq!(std::mem::size_of::<Enum8>(), 2);
+// Two bytes for the discriminant and one byte for the value in Enum16::Variant0
+// plus one byte of padding.
+assert_eq!(std::mem::size_of::<Enum16>(), 4);
+```
+
+[`repr(C)`]: #reprc-enums-with-fields
+
+### The alignment modifiers
+
+The `align` and `packed` modifiers can be used to respectively raise or lower
+the alignment of `struct`s and `union`s. `packed` may also alter the padding
+between fields (although it will not alter the padding inside of any field).
+
+The alignment is specified as an integer parameter in the form of
+`#[repr(align(x))]` or `#[repr(packed(x))]`. The alignment value must be a
+power of two from 1 up to 2<sup>29</sup>. For `packed`, if no value is given,
+as in `#[repr(packed)]`, then the value is 1.
+
+For `align`, if the specified alignment is less than the alignment of the type
+without the `align` modifier, then the alignment is unaffected.
+
+For `packed`, if the specified alignment is greater than the type's alignment
+without the `packed` modifier, then the alignment and layout is unaffected.
+The alignments of each field, for the purpose of positioning fields, is the
+smaller of the specified alignment and the alignment of the field's type.
+Inter-field padding is guaranteed to be the minimum required in order to
+satisfy each field's (possibly altered) alignment (although note that, on its
+own, `packed` does not provide any guarantee about field ordering). An
+important consequence of these rules is that a type with `#[repr(packed(1))]`
+(or `#[repr(packed)]`) will have no inter-field padding.
+
+The `align` and `packed` modifiers cannot be applied on the same type and a
+`packed` type cannot transitively contain another `align`ed type. `align` and
+`packed` may only be applied to the [default] and [`C`] representations.
+
+The `align` modifier can also be applied on an `enum`.
+When it is, the effect on the `enum`'s alignment is the same as if the `enum`
+was wrapped in a newtype `struct` with the same `align` modifier.
+
+<div class="warning">
+
+***Warning:*** Dereferencing an unaligned pointer is [undefined behavior] and
+it is possible to [safely create unaligned pointers to `packed` fields][27060].
+Like all ways to create undefined behavior in safe Rust, this is a bug.
+
+</div>
+
+### The `transparent` Representation
+
+The `transparent` representation can only be used on a [`struct`][structs]
+or an [`enum`][enumerations] with a single variant that has:
+
+- a single field with non-zero size, and
+- any number of fields with size 0 and alignment 1 (e.g. [`PhantomData<T>`]).
+
+Structs and enums with this representation have the same layout and ABI
+as the single non-zero sized field.
+
+This is different than the `C` representation because
+a struct with the `C` representation will always have the ABI of a `C` `struct`
+while, for example, a struct with the `transparent` representation with a
+primitive field will have the ABI of the primitive field.
+
+Because this representation delegates type layout to another type, it cannot be
+used with any other representation.
+
+[`align_of_val`]: ../std/mem/fn.align_of_val.html
+[`size_of_val`]: ../std/mem/fn.size_of_val.html
+[`align_of`]: ../std/mem/fn.align_of.html
+[`size_of`]: ../std/mem/fn.size_of.html
+[`Sized`]: ../std/marker/trait.Sized.html
+[`Copy`]: ../std/marker/trait.Copy.html
+[dynamically sized types]: dynamically-sized-types.md
+[field-less enums]: items/enumerations.md#custom-discriminant-values-for-fieldless-enumerations
+[enumerations]: items/enumerations.md
+[zero-variant enums]: items/enumerations.md#zero-variant-enums
+[undefined behavior]: behavior-considered-undefined.md
+[27060]: https://github.com/rust-lang/rust/issues/27060
+[55149]: https://github.com/rust-lang/rust/issues/55149
+[`PhantomData<T>`]: special-types-and-traits.md#phantomdatat
+[Default]: #the-default-representation
+[`C`]: #the-c-representation
+[primitive representations]: #primitive-representations
+[structs]: items/structs.md
+[`transparent`]: #the-transparent-representation
+[`Layout`]: ../std/alloc/struct.Layout.html
diff --git a/src/doc/reference/src/type-system.md b/src/doc/reference/src/type-system.md
new file mode 100644
index 000000000..bed7f128e
--- /dev/null
+++ b/src/doc/reference/src/type-system.md
@@ -0,0 +1 @@
+# Type system
diff --git a/src/doc/reference/src/types-redirect.html b/src/doc/reference/src/types-redirect.html
new file mode 100644
index 000000000..26d5410a7
--- /dev/null
+++ b/src/doc/reference/src/types-redirect.html
@@ -0,0 +1,43 @@
+<script>
+(function() {
+ var fragments = {
+ "#boolean-type": "types/boolean.html",
+ "#numeric-types": "types/numeric.html",
+ "#machine-types": "types/numeric.html",
+ "#machine-dependent-integer-types": "types/numeric.html#machine-dependent-integer-types",
+ "#textual-types": "types/textual.html",
+ "#never-type": "types/never.html",
+ "#tuple-types": "types/tuple.html",
+ "#array-and-slice-types": "types/array.html",
+ "#struct-types": "types/struct.html",
+ "#enumerated-types": "types/enum.html",
+ "#union-types": "types/union.html",
+ "#pointer-types": "types/pointer.html",
+ "#shared-references-": "types/pointer.html#shared-references-",
+ "#mutable-references-": "types/pointer.html#mutable-references-mut",
+ "#raw-pointers-const-and-mut": "types/pointer.html#raw-pointers-const-and-mut",
+ "#smart-pointers": "types/pointer.html#smart-pointers",
+ "#function-item-types": "types/function-item.html",
+ "#function-pointer-types": "types/function-pointer.html",
+ "#closure-types": "types/closure.html",
+ "#capture-modes": "types/closure.html#capture-modes",
+ "#unique-immutable-borrows-in-captures": "types/closure.html#unique-immutable-borrows-in-captures",
+ "#call-traits-and-coercions": "types/closure.html#call-traits-and-coercions",
+ "#other-traits": "types/closure.html#other-traits",
+ "#trait-objects": "types/trait-object.html",
+ "#trait-object-lifetime-bounds": "types/trait-object.html#trait-object-lifetime-bounds",
+ "#impl-trait": "types/impl-trait.html",
+ "#anonymous-type-parameters": "types/impl-trait.html#anonymous-type-parameters",
+ "#abstract-return-types": "types/impl-trait.html#abstract-return-types",
+ "#self-types": "paths.html#self-1",
+ "#inferred-type": "types/inferred.html",
+ "#type-parameters": "types/parameters.html",
+ };
+ var target = fragments[window.location.hash];
+ if (target) {
+ var url = window.location.toString();
+ var base = url.substring(0, url.lastIndexOf('/'));
+ window.location.replace(base + "/" + target);
+ }
+})();
+</script>
diff --git a/src/doc/reference/src/types.md b/src/doc/reference/src/types.md
new file mode 100644
index 000000000..aed10fd0f
--- /dev/null
+++ b/src/doc/reference/src/types.md
@@ -0,0 +1,175 @@
+{{#include types-redirect.html}}
+# Types
+
+Every variable, item, and value in a Rust program has a type. The _type_ of a
+*value* defines the interpretation of the memory holding it and the operations
+that may be performed on the value.
+
+Built-in types are tightly integrated into the language, in nontrivial ways
+that are not possible to emulate in user-defined types. User-defined types have
+limited capabilities.
+
+The list of types is:
+
+* Primitive types:
+ * [Boolean] — `bool`
+ * [Numeric] — integer and float
+ * [Textual] — `char` and `str`
+ * [Never] — `!` — a type with no values
+* Sequence types:
+ * [Tuple]
+ * [Array]
+ * [Slice]
+* User-defined types:
+ * [Struct]
+ * [Enum]
+ * [Union]
+* Function types:
+ * [Functions]
+ * [Closures]
+* Pointer types:
+ * [References]
+ * [Raw pointers]
+ * [Function pointers]
+* Trait types:
+ * [Trait objects]
+ * [Impl trait]
+
+## Type expressions
+
+> **<sup>Syntax</sup>**\
+> _Type_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; _TypeNoBounds_\
+> &nbsp;&nbsp; | [_ImplTraitType_]\
+> &nbsp;&nbsp; | [_TraitObjectType_]
+>
+> _TypeNoBounds_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; [_ParenthesizedType_]\
+> &nbsp;&nbsp; | [_ImplTraitTypeOneBound_]\
+> &nbsp;&nbsp; | [_TraitObjectTypeOneBound_]\
+> &nbsp;&nbsp; | [_TypePath_]\
+> &nbsp;&nbsp; | [_TupleType_]\
+> &nbsp;&nbsp; | [_NeverType_]\
+> &nbsp;&nbsp; | [_RawPointerType_]\
+> &nbsp;&nbsp; | [_ReferenceType_]\
+> &nbsp;&nbsp; | [_ArrayType_]\
+> &nbsp;&nbsp; | [_SliceType_]\
+> &nbsp;&nbsp; | [_InferredType_]\
+> &nbsp;&nbsp; | [_QualifiedPathInType_]\
+> &nbsp;&nbsp; | [_BareFunctionType_]\
+> &nbsp;&nbsp; | [_MacroInvocation_]
+
+A _type expression_ as defined in the _Type_ grammar rule above is the syntax
+for referring to a type. It may refer to:
+
+* Sequence types ([tuple], [array], [slice]).
+* [Type paths] which can reference:
+ * Primitive types ([boolean], [numeric], [textual]).
+ * Paths to an [item] ([struct], [enum], [union], [type alias], [trait]).
+ * [`Self` path] where `Self` is the implementing type.
+ * Generic [type parameters].
+* Pointer types ([reference], [raw pointer], [function pointer]).
+* The [inferred type] which asks the compiler to determine the type.
+* [Parentheses] which are used for disambiguation.
+* Trait types: [Trait objects] and [impl trait].
+* The [never] type.
+* [Macros] which expand to a type expression.
+
+### Parenthesized types
+
+> _ParenthesizedType_ :\
+> &nbsp;&nbsp; `(` [_Type_] `)`
+
+In some situations the combination of types may be ambiguous. Use parentheses
+around a type to avoid ambiguity. For example, the `+` operator for [type
+boundaries] within a [reference type] is unclear where the
+boundary applies, so the use of parentheses is required. Grammar rules that
+require this disambiguation use the [_TypeNoBounds_] rule instead of
+[_Type_].
+
+```rust
+# use std::any::Any;
+type T<'a> = &'a (dyn Any + Send);
+```
+
+## Recursive types
+
+Nominal types &mdash; [structs], [enumerations], and [unions] &mdash; may be
+recursive. That is, each `enum` variant or `struct` or `union` field may
+refer, directly or indirectly, to the enclosing `enum` or `struct` type
+itself. Such recursion has restrictions:
+
+* Recursive types must include a nominal type in the recursion (not mere [type
+ aliases], or other structural types such as [arrays] or [tuples]). So `type
+ Rec = &'static [Rec]` is not allowed.
+* The size of a recursive type must be finite; in other words the recursive
+ fields of the type must be [pointer types].
+
+An example of a *recursive* type and its use:
+
+```rust
+enum List<T> {
+ Nil,
+ Cons(T, Box<List<T>>)
+}
+
+let a: List<i32> = List::Cons(7, Box::new(List::Cons(13, Box::new(List::Nil))));
+```
+
+[_ArrayType_]: types/array.md
+[_BareFunctionType_]: types/function-pointer.md
+[_ImplTraitTypeOneBound_]: types/impl-trait.md
+[_ImplTraitType_]: types/impl-trait.md
+[_InferredType_]: types/inferred.md
+[_MacroInvocation_]: macros.md#macro-invocation
+[_NeverType_]: types/never.md
+[_ParenthesizedType_]: types.md#parenthesized-types
+[_QualifiedPathInType_]: paths.md#qualified-paths
+[_RawPointerType_]: types/pointer.md#raw-pointers-const-and-mut
+[_ReferenceType_]: types/pointer.md#shared-references-
+[_SliceType_]: types/slice.md
+[_TraitObjectTypeOneBound_]: types/trait-object.md
+[_TraitObjectType_]: types/trait-object.md
+[_TupleType_]: types/tuple.md#tuple-types
+[_TypeNoBounds_]: types.md#type-expressions
+[_TypePath_]: paths.md#paths-in-types
+[_Type_]: types.md#type-expressions
+
+[Array]: types/array.md
+[Boolean]: types/boolean.md
+[Closures]: types/closure.md
+[Enum]: types/enum.md
+[Function pointers]: types/function-pointer.md
+[Functions]: types/function-item.md
+[Impl trait]: types/impl-trait.md
+[Macros]: macros.md
+[Numeric]: types/numeric.md
+[Parentheses]: #parenthesized-types
+[Raw pointers]: types/pointer.md#raw-pointers-const-and-mut
+[References]: types/pointer.md#shared-references-
+[Slice]: types/slice.md
+[Struct]: types/struct.md
+[Textual]: types/textual.md
+[Trait objects]: types/trait-object.md
+[Tuple]: types/tuple.md
+[Type paths]: paths.md#paths-in-types
+[Union]: types/union.md
+[`Self` path]: paths.md#self-1
+[arrays]: types/array.md
+[enumerations]: types/enum.md
+[function pointer]: types/function-pointer.md
+[inferred type]: types/inferred.md
+[item]: items.md
+[never]: types/never.md
+[pointer types]: types/pointer.md
+[raw pointer]: types/pointer.md#raw-pointers-const-and-mut
+[reference type]: types/pointer.md#shared-references-
+[reference]: types/pointer.md#shared-references-
+[structs]: types/struct.md
+[trait]: types/trait-object.md
+[tuples]: types/tuple.md
+[type alias]: items/type-aliases.md
+[type aliases]: items/type-aliases.md
+[type boundaries]: trait-bounds.md
+[type parameters]: types/parameters.md
+[unions]: types/union.md
diff --git a/src/doc/reference/src/types/array.md b/src/doc/reference/src/types/array.md
new file mode 100644
index 000000000..88ea8634c
--- /dev/null
+++ b/src/doc/reference/src/types/array.md
@@ -0,0 +1,31 @@
+# Array types
+
+> **<sup>Syntax</sup>**\
+> _ArrayType_ :\
+> &nbsp;&nbsp; `[` [_Type_] `;` [_Expression_] `]`
+
+An array is a fixed-size sequence of `N` elements of type `T`. The array type
+is written as `[T; N]`. The size is a [constant expression] that evaluates to a
+[`usize`].
+
+Examples:
+
+```rust
+// A stack-allocated array
+let array: [i32; 3] = [1, 2, 3];
+
+// A heap-allocated array, coerced to a slice
+let boxed_array: Box<[i32]> = Box::new([1, 2, 3]);
+```
+
+All elements of arrays are always initialized, and access to an array is
+always bounds-checked in safe methods and operators.
+
+> Note: The [`Vec<T>`] standard library type provides a heap-allocated resizable
+> array type.
+
+[_Expression_]: ../expressions.md
+[_Type_]: ../types.md#type-expressions
+[`Vec<T>`]: ../../std/vec/struct.Vec.html
+[`usize`]: numeric.md#machine-dependent-integer-types
+[constant expression]: ../const_eval.md#constant-expressions
diff --git a/src/doc/reference/src/types/boolean.md b/src/doc/reference/src/types/boolean.md
new file mode 100644
index 000000000..d8984025f
--- /dev/null
+++ b/src/doc/reference/src/types/boolean.md
@@ -0,0 +1,118 @@
+# Boolean type
+
+```rust
+let b: bool = true;
+```
+
+The *boolean type* or *bool* is a primitive data type that can take on one of
+two values, called *true* and *false*.
+
+Values of this type may be created using a [literal expression] using the
+keywords `true` and `false` corresponding to the value of the same name.
+
+This type is a part of the [language prelude] with the [name] `bool`.
+
+An object with the boolean type has a [size and alignment] of 1 each. The
+value false has the bit pattern `0x00` and the value true has the bit pattern
+`0x01`. It is [undefined behavior] for an object with the boolean type to have
+any other bit pattern.
+
+The boolean type is the type of many operands in various [expressions]:
+
+* The condition operand in [if expressions] and [while expressions]
+* The operands in [lazy boolean operator expressions][lazy]
+
+> **Note**: The boolean type acts similarly to but is not an [enumerated type].
+In practice, this mostly means that constructors are not associated to the type
+(e.g. `bool::true`).
+
+Like all primitives, the boolean type [implements][p-impl] the
+[traits][p-traits] [`Clone`][p-clone], [`Copy`][p-copy], [`Sized`][p-sized],
+[`Send`][p-send], and [`Sync`][p-sync].
+
+> **Note**: See the [standard library docs][std] for library operations.
+
+## Operations on boolean values
+
+<!-- This is washy wording --> When using certain operator expressions with a
+boolean type for its operands, they evaluate using the rules of [boolean logic].
+
+### Logical not
+
+| `b` | [`!b`][op-not] |
+|- | - |
+| `true` | `false` |
+| `false` | `true` |
+
+### Logical or
+
+| `a` | `b` | [<code>a &#124; b</code>][op-or] |
+|- | - | - |
+| `true` | `true` | `true` |
+| `true` | `false` | `true` |
+| `false` | `true` | `true` |
+| `false` | `false` | `false` |
+
+### Logical and
+
+| `a` | `b` | [`a & b`][op-and] |
+|- | - | - |
+| `true` | `true` | `true` |
+| `true` | `false` | `false` |
+| `false` | `true` | `false` |
+| `false` | `false` | `false` |
+
+### Logical xor
+
+| `a` | `b` | [`a ^ b`][op-xor] |
+|- | - | - |
+| `true` | `true` | `false` |
+| `true` | `false` | `true` |
+| `false` | `true` | `true` |
+| `false` | `false` | `false` |
+
+### Comparisons
+
+| `a` | `b` | [`a == b`][op-compare] |
+|- | - | - |
+| `true` | `true` | `true` |
+| `true` | `false` | `false` |
+| `false` | `true` | `false` |
+| `false` | `false` | `true` |
+
+| `a` | `b` | [`a > b`][op-compare] |
+|- | - | - |
+| `true` | `true` | `false` |
+| `true` | `false` | `true` |
+| `false` | `true` | `false` |
+| `false` | `false` | `false` |
+
+* `a != b` is the same as `!(a == b)`
+* `a >= b` is the same as `a == b | a > b`
+* `a < b` is the same as `!(a >= b)`
+* `a <= b` is the same as `a == b | a < b`
+
+[boolean logic]: https://en.wikipedia.org/wiki/Boolean_algebra
+[enumerated type]: enum.md
+[expressions]: ../expressions.md
+[if expressions]: ../expressions/if-expr.md#if-expressions
+[language prelude]: ../names/preludes.md#language-prelude
+[lazy]: ../expressions/operator-expr.md#lazy-boolean-operators
+[literal expression]: ../expressions/literal-expr.md
+[name]: ../names.md
+[op-and]: ../expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[op-compare]: ../expressions/operator-expr.md#comparison-operators
+[op-not]: ../expressions/operator-expr.md#negation-operators
+[op-or]: ../expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[op-xor]: ../expressions/operator-expr.md#arithmetic-and-logical-binary-operators
+[p-clone]: ../special-types-and-traits.md#clone
+[p-copy]: ../special-types-and-traits.md#copy
+[p-impl]: ../items/implementations.md
+[p-send]: ../special-types-and-traits.md#send
+[p-sized]: ../special-types-and-traits.md#sized
+[p-sync]: ../special-types-and-traits.md#sync
+[p-traits]: ../items/traits.md
+[size and alignment]: ../type-layout.md#size-and-alignment
+[std]: ../../std/primitive.bool.html
+[undefined behavior]: ../behavior-considered-undefined.md
+[while expressions]: ../expressions/loop-expr.md#predicate-loops
diff --git a/src/doc/reference/src/types/closure.md b/src/doc/reference/src/types/closure.md
new file mode 100644
index 000000000..eecdb038f
--- /dev/null
+++ b/src/doc/reference/src/types/closure.md
@@ -0,0 +1,180 @@
+# Closure types
+
+A [closure expression] produces a closure value with a unique, anonymous type
+that cannot be written out. A closure type is approximately equivalent to a
+struct which contains the captured variables. For instance, the following
+closure:
+
+```rust
+fn f<F : FnOnce() -> String> (g: F) {
+ println!("{}", g());
+}
+
+let mut s = String::from("foo");
+let t = String::from("bar");
+
+f(|| {
+ s += &t;
+ s
+});
+// Prints "foobar".
+```
+
+generates a closure type roughly like the following:
+
+<!-- ignore: simplified, requires unboxed_closures, fn_traits -->
+```rust,ignore
+struct Closure<'a> {
+ s : String,
+ t : &'a String,
+}
+
+impl<'a> FnOnce<()> for Closure<'a> {
+ type Output = String;
+ fn call_once(self) -> String {
+ self.s += &*self.t;
+ self.s
+ }
+}
+```
+
+so that the call to `f` works as if it were:
+
+<!-- ignore: continuation of above -->
+```rust,ignore
+f(Closure{s: s, t: &t});
+```
+
+## Capture modes
+
+The compiler prefers to capture a closed-over variable by immutable borrow,
+followed by unique immutable borrow (see below), by mutable borrow, and finally
+by move. It will pick the first choice of these that is compatible with how the
+captured variable is used inside the closure body. The compiler does not take
+surrounding code into account, such as the lifetimes of involved variables, or
+of the closure itself.
+
+If the `move` keyword is used, then all captures are by move or, for `Copy`
+types, by copy, regardless of whether a borrow would work. The `move` keyword is
+usually used to allow the closure to outlive the captured values, such as if the
+closure is being returned or used to spawn a new thread.
+
+Composite types such as structs, tuples, and enums are always captured entirely,
+not by individual fields. It may be necessary to borrow into a local variable in
+order to capture a single field:
+
+```rust
+# use std::collections::HashSet;
+#
+struct SetVec {
+ set: HashSet<u32>,
+ vec: Vec<u32>
+}
+
+impl SetVec {
+ fn populate(&mut self) {
+ let vec = &mut self.vec;
+ self.set.iter().for_each(|&n| {
+ vec.push(n);
+ })
+ }
+}
+```
+
+If, instead, the closure were to use `self.vec` directly, then it would attempt
+to capture `self` by mutable reference. But since `self.set` is already
+borrowed to iterate over, the code would not compile.
+
+## Unique immutable borrows in captures
+
+Captures can occur by a special kind of borrow called a _unique immutable
+borrow_, which cannot be used anywhere else in the language and cannot be
+written out explicitly. It occurs when modifying the referent of a mutable
+reference, as in the following example:
+
+```rust
+let mut b = false;
+let x = &mut b;
+{
+ let mut c = || { *x = true; };
+ // The following line is an error:
+ // let y = &x;
+ c();
+}
+let z = &x;
+```
+
+In this case, borrowing `x` mutably is not possible, because `x` is not `mut`.
+But at the same time, borrowing `x` immutably would make the assignment illegal,
+because a `& &mut` reference might not be unique, so it cannot safely be used to
+modify a value. So a unique immutable borrow is used: it borrows `x` immutably,
+but like a mutable borrow, it must be unique. In the above example, uncommenting
+the declaration of `y` will produce an error because it would violate the
+uniqueness of the closure's borrow of `x`; the declaration of z is valid because
+the closure's lifetime has expired at the end of the block, releasing the borrow.
+
+## Call traits and coercions
+
+Closure types all implement [`FnOnce`], indicating that they can be called once
+by consuming ownership of the closure. Additionally, some closures implement
+more specific call traits:
+
+* A closure which does not move out of any captured variables implements
+ [`FnMut`], indicating that it can be called by mutable reference.
+
+* A closure which does not mutate or move out of any captured variables
+ implements [`Fn`], indicating that it can be called by shared reference.
+
+> Note: `move` closures may still implement [`Fn`] or [`FnMut`], even though
+> they capture variables by move. This is because the traits implemented by a
+> closure type are determined by what the closure does with captured values,
+> not how it captures them.
+
+*Non-capturing closures* are closures that don't capture anything from their
+environment. They can be coerced to function pointers (e.g., `fn()`)
+with the matching signature.
+
+```rust
+let add = |x, y| x + y;
+
+let mut x = add(5,7);
+
+type Binop = fn(i32, i32) -> i32;
+let bo: Binop = add;
+x = bo(5,7);
+```
+
+## Other traits
+
+All closure types implement [`Sized`]. Additionally, closure types implement the
+following traits if allowed to do so by the types of the captures it stores:
+
+* [`Clone`]
+* [`Copy`]
+* [`Sync`]
+* [`Send`]
+
+The rules for [`Send`] and [`Sync`] match those for normal struct types, while
+[`Clone`] and [`Copy`] behave as if [derived]. For [`Clone`], the order of
+cloning of the captured variables is left unspecified.
+
+Because captures are often by reference, the following general rules arise:
+
+* A closure is [`Sync`] if all captured variables are [`Sync`].
+* A closure is [`Send`] if all variables captured by non-unique immutable
+ reference are [`Sync`], and all values captured by unique immutable or mutable
+ reference, copy, or move are [`Send`].
+* A closure is [`Clone`] or [`Copy`] if it does not capture any values by
+ unique immutable or mutable reference, and if all values it captures by copy
+ or move are [`Clone`] or [`Copy`], respectively.
+
+[`Clone`]: ../special-types-and-traits.md#clone
+[`Copy`]: ../special-types-and-traits.md#copy
+[`FnMut`]: ../../std/ops/trait.FnMut.html
+[`FnOnce`]: ../../std/ops/trait.FnOnce.html
+[`Fn`]: ../../std/ops/trait.Fn.html
+[`Send`]: ../special-types-and-traits.md#send
+[`Sized`]: ../special-types-and-traits.md#sized
+[`Sync`]: ../special-types-and-traits.md#sync
+[closure expression]: ../expressions/closure-expr.md
+[derived]: ../attributes/derive.md
diff --git a/src/doc/reference/src/types/enum.md b/src/doc/reference/src/types/enum.md
new file mode 100644
index 000000000..8f81fb1a5
--- /dev/null
+++ b/src/doc/reference/src/types/enum.md
@@ -0,0 +1,22 @@
+# Enumerated types
+
+An *enumerated type* is a nominal, heterogeneous disjoint union type, denoted
+by the name of an [`enum` item]. [^enumtype]
+
+An [`enum` item] declares both the type and a number of *variants*, each of
+which is independently named and has the syntax of a struct, tuple struct or
+unit-like struct.
+
+New instances of an `enum` can be constructed with a [struct expression].
+
+Any `enum` value consumes as much memory as the largest variant for its
+corresponding `enum` type, as well as the size needed to store a discriminant.
+
+Enum types cannot be denoted *structurally* as types, but must be denoted by
+named reference to an [`enum` item].
+
+[^enumtype]: The `enum` type is analogous to a `data` constructor declaration in
+ ML, or a *pick ADT* in Limbo.
+
+[`enum` item]: ../items/enumerations.md
+[struct expression]: ../expressions/struct-expr.md
diff --git a/src/doc/reference/src/types/function-item.md b/src/doc/reference/src/types/function-item.md
new file mode 100644
index 000000000..c8088e48c
--- /dev/null
+++ b/src/doc/reference/src/types/function-item.md
@@ -0,0 +1,57 @@
+# Function item types
+
+When referred to, a function item, or the constructor of a tuple-like struct or
+enum variant, yields a zero-sized value of its _function item type_. That type
+explicitly identifies the function - its name, its type arguments, and its
+early-bound lifetime arguments (but not its late-bound lifetime arguments,
+which are only assigned when the function is called) - so the value does not
+need to contain an actual function pointer, and no indirection is needed when
+the function is called.
+
+There is no syntax that directly refers to a function item type, but the
+compiler will display the type as something like `fn(u32) -> i32 {fn_name}` in
+error messages.
+
+Because the function item type explicitly identifies the function, the item
+types of different functions - different items, or the same item with different
+generics - are distinct, and mixing them will create a type error:
+
+```rust,compile_fail,E0308
+fn foo<T>() { }
+let x = &mut foo::<i32>;
+*x = foo::<u32>; //~ ERROR mismatched types
+```
+
+However, there is a [coercion] from function items to [function pointers] with
+the same signature, which is triggered not only when a function item is used
+when a function pointer is directly expected, but also when different function
+item types with the same signature meet in different arms of the same `if` or
+`match`:
+
+```rust
+# let want_i32 = false;
+# fn foo<T>() { }
+
+// `foo_ptr_1` has function pointer type `fn()` here
+let foo_ptr_1: fn() = foo::<i32>;
+
+// ... and so does `foo_ptr_2` - this type-checks.
+let foo_ptr_2 = if want_i32 {
+ foo::<i32>
+} else {
+ foo::<u32>
+};
+```
+
+All function items implement [`Fn`], [`FnMut`], [`FnOnce`], [`Copy`],
+[`Clone`], [`Send`], and [`Sync`].
+
+[`Clone`]: ../special-types-and-traits.md#clone
+[`Copy`]: ../special-types-and-traits.md#copy
+[`FnMut`]: ../../std/ops/trait.FnMut.html
+[`FnOnce`]: ../../std/ops/trait.FnOnce.html
+[`Fn`]: ../../std/ops/trait.Fn.html
+[`Send`]: ../special-types-and-traits.md#send
+[`Sync`]: ../special-types-and-traits.md#sync
+[coercion]: ../type-coercions.md
+[function pointers]: function-pointer.md
diff --git a/src/doc/reference/src/types/function-pointer.md b/src/doc/reference/src/types/function-pointer.md
new file mode 100644
index 000000000..a51f76135
--- /dev/null
+++ b/src/doc/reference/src/types/function-pointer.md
@@ -0,0 +1,66 @@
+# Function pointer types
+
+> **<sup>Syntax</sup>**\
+> _BareFunctionType_ :\
+> &nbsp;&nbsp; [_ForLifetimes_]<sup>?</sup> _FunctionTypeQualifiers_ `fn`\
+> &nbsp;&nbsp; &nbsp;&nbsp; `(` _FunctionParametersMaybeNamedVariadic_<sup>?</sup> `)` _BareFunctionReturnType_<sup>?</sup>
+>
+> _FunctionTypeQualifiers_:\
+> &nbsp;&nbsp; `unsafe`<sup>?</sup> (`extern` [_Abi_]<sup>?</sup>)<sup>?</sup>
+>
+> _BareFunctionReturnType_:\
+> &nbsp;&nbsp; `->` [_TypeNoBounds_]
+>
+> _FunctionParametersMaybeNamedVariadic_ :\
+> &nbsp;&nbsp; _MaybeNamedFunctionParameters_ | _MaybeNamedFunctionParametersVariadic_
+>
+> _MaybeNamedFunctionParameters_ :\
+> &nbsp;&nbsp; _MaybeNamedParam_ ( `,` _MaybeNamedParam_ )<sup>\*</sup> `,`<sup>?</sup>
+>
+> _MaybeNamedParam_ :\
+> &nbsp;&nbsp; [_OuterAttribute_]<sup>\*</sup> ( ( [IDENTIFIER] | `_` ) `:` )<sup>?</sup> [_Type_]
+>
+> _MaybeNamedFunctionParametersVariadic_ :\
+> &nbsp;&nbsp; ( _MaybeNamedParam_ `,` )<sup>\*</sup> _MaybeNamedParam_ `,` [_OuterAttribute_]<sup>\*</sup> `...`
+
+Function pointer types, written using the `fn` keyword, refer to a function
+whose identity is not necessarily known at compile-time. They can be created
+via a coercion from both [function items] and non-capturing [closures].
+
+The `unsafe` qualifier indicates that the type's value is an [unsafe
+function], and the `extern` qualifier indicates it is an [extern function].
+
+Variadic parameters can only be specified with [`extern`] function types with
+the `"C"` or `"cdecl"` calling convention.
+
+An example where `Binop` is defined as a function pointer type:
+
+```rust
+fn add(x: i32, y: i32) -> i32 {
+ x + y
+}
+
+let mut x = add(5,7);
+
+type Binop = fn(i32, i32) -> i32;
+let bo: Binop = add;
+x = bo(5,7);
+```
+
+## Attributes on function pointer parameters
+
+Attributes on function pointer parameters follow the same rules and
+restrictions as [regular function parameters].
+
+[IDENTIFIER]: ../identifiers.md
+[_Abi_]: ../items/functions.md
+[_ForLifetimes_]: ../trait-bounds.md#higher-ranked-trait-bounds
+[_TypeNoBounds_]: ../types.md#type-expressions
+[_Type_]: ../types.md#type-expressions
+[_OuterAttribute_]: ../attributes.md
+[`extern`]: ../items/external-blocks.md
+[closures]: closure.md
+[extern function]: ../items/functions.md#extern-function-qualifier
+[function items]: function-item.md
+[unsafe function]: ../unsafe-functions.md
+[regular function parameters]: ../items/functions.md#attributes-on-function-parameters
diff --git a/src/doc/reference/src/types/impl-trait.md b/src/doc/reference/src/types/impl-trait.md
new file mode 100644
index 000000000..413f999f8
--- /dev/null
+++ b/src/doc/reference/src/types/impl-trait.md
@@ -0,0 +1,124 @@
+# Impl trait
+
+> **<sup>Syntax</sup>**\
+> _ImplTraitType_ : `impl` [_TypeParamBounds_]
+>
+> _ImplTraitTypeOneBound_ : `impl` [_TraitBound_]
+
+`impl Trait` provides ways to specify unnamed but concrete types that
+implement a specific trait.
+It can appear in two sorts of places: argument position (where it can act as an anonymous type parameter to functions), and return position (where it can act as an abstract return type).
+
+```rust
+trait Trait {}
+# impl Trait for () {}
+
+// argument position: anonymous type parameter
+fn foo(arg: impl Trait) {
+}
+
+// return position: abstract return type
+fn bar() -> impl Trait {
+}
+```
+## Anonymous type parameters
+
+> Note: This is often called "impl Trait in argument position".
+(The term "parameter" is more correct here, but "impl Trait in argument position" is the phrasing used during the development of this feature, and it remains in parts of the implementation.)
+
+Functions can use `impl` followed by a set of trait bounds to declare a parameter as having an anonymous type.
+The caller must provide a type that satisfies the bounds declared by the anonymous type parameter, and the function can only use the methods available through the trait bounds of the anonymous type parameter.
+
+For example, these two forms are almost equivalent:
+
+```rust,ignore
+trait Trait {}
+
+// generic type parameter
+fn foo<T: Trait>(arg: T) {
+}
+
+// impl Trait in argument position
+fn foo(arg: impl Trait) {
+}
+```
+
+That is, `impl Trait` in argument position is syntactic sugar for a generic type parameter like `<T: Trait>`, except that the type is anonymous and doesn't appear in the [_GenericParams_] list.
+
+> **Note:**
+> For function parameters, generic type parameters and `impl Trait` are not exactly equivalent.
+> With a generic parameter such as `<T: Trait>`, the caller has the option to explicitly specify the generic argument for `T` at the call site using [_GenericArgs_], for example, `foo::<usize>(1)`.
+> If `impl Trait` is the type of *any* function parameter, then the caller can't ever provide any generic arguments when calling that function.
+This includes generic arguments for the return type or any const generics.
+>
+> Therefore, changing the function signature from either one to the other can constitute a breaking change for the callers of a function.
+
+## Abstract return types
+
+> Note: This is often called "impl Trait in return position".
+
+Functions can use `impl Trait` to return an abstract return type.
+These types stand in for another concrete type where the caller may only use the methods declared by the specified `Trait`.
+Each possible return value from the function must resolve to the same concrete type.
+
+`impl Trait` in return position allows a function to return an unboxed abstract type.
+This is particularly useful with [closures] and iterators.
+For example, closures have a unique, un-writable type.
+Previously, the only way to return a closure from a function was to use a [trait object]:
+
+```rust
+fn returns_closure() -> Box<dyn Fn(i32) -> i32> {
+ Box::new(|x| x + 1)
+}
+```
+
+This could incur performance penalties from heap allocation and dynamic dispatch.
+It wasn't possible to fully specify the type of the closure, only to use the `Fn` trait.
+That means that the trait object is necessary.
+However, with `impl Trait`, it is possible to write this more simply:
+
+```rust
+fn returns_closure() -> impl Fn(i32) -> i32 {
+ |x| x + 1
+}
+```
+
+which also avoids the drawbacks of using a boxed trait object.
+
+Similarly, the concrete types of iterators could become very complex, incorporating the types of all previous iterators in a chain.
+Returning `impl Iterator` means that a function only exposes the `Iterator` trait as a bound on its return type, instead of explicitly specifying all of the other iterator types involved.
+
+### Differences between generics and `impl Trait` in return position
+
+In argument position, `impl Trait` is very similar in semantics to a generic type parameter.
+However, there are significant differences between the two in return position.
+With `impl Trait`, unlike with a generic type parameter, the function chooses the return type, and the caller cannot choose the return type.
+
+The function:
+
+```rust,ignore
+fn foo<T: Trait>() -> T {
+```
+
+allows the caller to determine the return type, `T`, and the function returns that type.
+
+The function:
+
+```rust,ignore
+fn foo() -> impl Trait {
+```
+
+doesn't allow the caller to determine the return type.
+Instead, the function chooses the return type, but only promises that it will implement `Trait`.
+
+## Limitations
+
+`impl Trait` can only appear as a parameter or return type of a free or inherent function.
+It cannot appear inside implementations of traits, nor can it be the type of a let binding or appear inside a type alias.
+
+[closures]: closure.md
+[_GenericArgs_]: ../paths.md#paths-in-expressions
+[_GenericParams_]: ../items/generics.md
+[_TraitBound_]: ../trait-bounds.md
+[trait object]: trait-object.md
+[_TypeParamBounds_]: ../trait-bounds.md
diff --git a/src/doc/reference/src/types/inferred.md b/src/doc/reference/src/types/inferred.md
new file mode 100644
index 000000000..c33ebd91c
--- /dev/null
+++ b/src/doc/reference/src/types/inferred.md
@@ -0,0 +1,18 @@
+# Inferred type
+
+> **<sup>Syntax</sup>**\
+> _InferredType_ : `_`
+
+The inferred type asks the compiler to infer the type if possible based on the
+surrounding information available. It cannot be used in item signatures. It is
+often used in generic arguments:
+
+```rust
+let x: Vec<_> = (0..10).collect();
+```
+
+<!--
+ What else should be said here?
+ The only documentation I am aware of is https://rustc-dev-guide.rust-lang.org/type-inference.html
+ There should be a broader discussion of type inference somewhere.
+-->
diff --git a/src/doc/reference/src/types/never.md b/src/doc/reference/src/types/never.md
new file mode 100644
index 000000000..e32674272
--- /dev/null
+++ b/src/doc/reference/src/types/never.md
@@ -0,0 +1,22 @@
+# Never type
+
+> **<sup>Syntax</sup>**\
+> _NeverType_ : `!`
+
+The never type `!` is a type with no values, representing the result of
+computations that never complete. Expressions of type `!` can be coerced into
+any other type.
+
+<!-- ignore: unstable -->
+```rust,ignore
+let x: ! = panic!();
+// Can be coerced into any type.
+let y: u32 = x;
+```
+
+**NB.** The never type was expected to be stabilized in 1.41, but due
+to some last minute regressions detected the stabilization was
+temporarily reverted. The `!` type can only appear in function return
+types presently. See [the tracking
+issue](https://github.com/rust-lang/rust/issues/35121) for more
+details.
diff --git a/src/doc/reference/src/types/numeric.md b/src/doc/reference/src/types/numeric.md
new file mode 100644
index 000000000..8ab53a792
--- /dev/null
+++ b/src/doc/reference/src/types/numeric.md
@@ -0,0 +1,47 @@
+# Numeric types
+
+## Integer types
+
+The unsigned integer types consist of:
+
+Type | Minimum | Maximum
+-------|---------|-------------------
+`u8` | 0 | 2<sup>8</sup>-1
+`u16` | 0 | 2<sup>16</sup>-1
+`u32` | 0 | 2<sup>32</sup>-1
+`u64` | 0 | 2<sup>64</sup>-1
+`u128` | 0 | 2<sup>128</sup>-1
+
+The signed two's complement integer types consist of:
+
+Type | Minimum | Maximum
+-------|--------------------|-------------------
+`i8` | -(2<sup>7</sup>) | 2<sup>7</sup>-1
+`i16` | -(2<sup>15</sup>) | 2<sup>15</sup>-1
+`i32` | -(2<sup>31</sup>) | 2<sup>31</sup>-1
+`i64` | -(2<sup>63</sup>) | 2<sup>63</sup>-1
+`i128` | -(2<sup>127</sup>) | 2<sup>127</sup>-1
+
+
+## Floating-point types
+
+The IEEE 754-2008 "binary32" and "binary64" floating-point types are `f32` and
+`f64`, respectively.
+
+## Machine-dependent integer types
+
+The `usize` type is an unsigned integer type with the same number of bits as the
+platform's pointer type. It can represent every memory address in the process.
+
+The `isize` type is a signed integer type with the same number of bits as the
+platform's pointer type. The theoretical upper bound on object and array size
+is the maximum `isize` value. This ensures that `isize` can be used to calculate
+differences between pointers into an object or array and can address every byte
+within an object along with one byte past the end.
+
+`usize` and `isize` are at least 16-bits wide.
+
+> **Note**: Many pieces of Rust code may assume that pointers, `usize`, and
+> `isize` are either 32-bit or 64-bit. As a consequence, 16-bit
+> pointer support is limited and may require explicit care and acknowledgment
+> from a library to support.
diff --git a/src/doc/reference/src/types/parameters.md b/src/doc/reference/src/types/parameters.md
new file mode 100644
index 000000000..7b9e7e64e
--- /dev/null
+++ b/src/doc/reference/src/types/parameters.md
@@ -0,0 +1,19 @@
+# Type parameters
+
+Within the body of an item that has type parameter declarations, the names of
+its type parameters are types:
+
+```rust
+fn to_vec<A: Clone>(xs: &[A]) -> Vec<A> {
+ if xs.is_empty() {
+ return vec![];
+ }
+ let first: A = xs[0].clone();
+ let mut rest: Vec<A> = to_vec(&xs[1..]);
+ rest.insert(0, first);
+ rest
+}
+```
+
+Here, `first` has type `A`, referring to `to_vec`'s `A` type parameter; and
+`rest` has type `Vec<A>`, a vector with element type `A`.
diff --git a/src/doc/reference/src/types/pointer.md b/src/doc/reference/src/types/pointer.md
new file mode 100644
index 000000000..9c8d80f39
--- /dev/null
+++ b/src/doc/reference/src/types/pointer.md
@@ -0,0 +1,60 @@
+# Pointer types
+
+All pointers are explicit first-class values.
+They can be moved or copied, stored into data structs, and returned from functions.
+
+## References (`&` and `&mut`)
+
+> **<sup>Syntax</sup>**\
+> _ReferenceType_ :\
+> &nbsp;&nbsp; `&` [_Lifetime_]<sup>?</sup> `mut`<sup>?</sup> [_TypeNoBounds_]
+
+### Shared references (`&`)
+
+These point to memory _owned by some other value_.
+When a shared reference to a value is created it prevents direct mutation of the value.
+[Interior mutability] provides an exception for this in certain circumstances.
+As the name suggests, any number of shared references to a value may exist.
+A shared reference type is written `&type`, or `&'a type` when you need to specify an explicit lifetime.
+Copying a reference is a "shallow" operation:
+it involves only copying the pointer itself, that is, pointers are `Copy`.
+Releasing a reference has no effect on the value it points to, but referencing of a [temporary value] will keep it alive during the scope of the reference itself.
+
+### Mutable references (`&mut`)
+
+These also point to memory owned by some other value.
+A mutable reference type is written `&mut type` or `&'a mut type`.
+A mutable reference (that hasn't been borrowed) is the only way to access the value it points to, so is not `Copy`.
+
+## Raw pointers (`*const` and `*mut`)
+
+> **<sup>Syntax</sup>**\
+> _RawPointerType_ :\
+> &nbsp;&nbsp; `*` ( `mut` | `const` ) [_TypeNoBounds_]
+
+Raw pointers are pointers without safety or liveness guarantees.
+Raw pointers are written as `*const T` or `*mut T`.
+For example `*const i32` means a raw pointer to a 32-bit integer.
+Copying or dropping a raw pointer has no effect on the lifecycle of any other value.
+Dereferencing a raw pointer is an [`unsafe` operation].
+This can also be used to convert a raw pointer to a reference by reborrowing it (`&*` or `&mut *`).
+Raw pointers are generally discouraged;
+they exist to support interoperability with foreign code, and writing performance-critical or low-level functions.
+
+When comparing raw pointers they are compared by their address, rather than by what they point to.
+When comparing raw pointers to [dynamically sized types] they also have their additional data compared.
+
+Raw pointers can be created directly using [`core::ptr::addr_of!`] for `*const` pointers and [`core::ptr::addr_of_mut!`] for `*mut` pointers.
+
+## Smart Pointers
+
+The standard library contains additional 'smart pointer' types beyond references and raw pointers.
+
+[`core::ptr::addr_of!`]: ../../core/ptr/macro.addr_of.html
+[`core::ptr::addr_of_mut!`]: ../../core/ptr/macro.addr_of_mut.html
+[Interior mutability]: ../interior-mutability.md
+[_Lifetime_]: ../trait-bounds.md
+[_TypeNoBounds_]: ../types.md#type-expressions
+[`unsafe` operation]: ../unsafety.md
+[dynamically sized types]: ../dynamically-sized-types.md
+[temporary value]: ../expressions.md#temporaries
diff --git a/src/doc/reference/src/types/slice.md b/src/doc/reference/src/types/slice.md
new file mode 100644
index 000000000..6ba5e7d21
--- /dev/null
+++ b/src/doc/reference/src/types/slice.md
@@ -0,0 +1,31 @@
+# Slice types
+
+> **<sup>Syntax</sup>**\
+> _SliceType_ :\
+> &nbsp;&nbsp; `[` [_Type_] `]`
+
+A slice is a [dynamically sized type] representing a 'view' into a sequence of
+elements of type `T`. The slice type is written as `[T]`.
+
+Slice types are generally used through pointer types. For example:
+
+* `&[T]`: a 'shared slice', often just called a 'slice'. It doesn't own the
+ data it points to; it borrows it.
+* `&mut [T]`: a 'mutable slice'. It mutably borrows the data it points to.
+* `Box<[T]>`: a 'boxed slice'
+
+Examples:
+
+```rust
+// A heap-allocated array, coerced to a slice
+let boxed_array: Box<[i32]> = Box::new([1, 2, 3]);
+
+// A (shared) slice into an array
+let slice: &[i32] = &boxed_array[..];
+```
+
+All elements of slices are always initialized, and access to a slice is always
+bounds-checked in safe methods and operators.
+
+[_Type_]: ../types.md#type-expressions
+[dynamically sized type]: ../dynamically-sized-types.md
diff --git a/src/doc/reference/src/types/struct.md b/src/doc/reference/src/types/struct.md
new file mode 100644
index 000000000..1f20dbb3c
--- /dev/null
+++ b/src/doc/reference/src/types/struct.md
@@ -0,0 +1,29 @@
+# Struct types
+
+A `struct` *type* is a heterogeneous product of other types, called the
+*fields* of the type.[^structtype]
+
+New instances of a `struct` can be constructed with a [struct expression].
+
+The memory layout of a `struct` is undefined by default to allow for compiler
+optimizations like field reordering, but it can be fixed with the
+[`repr` attribute]. In either case, fields may be given in any order in a
+corresponding struct *expression*; the resulting `struct` value will always
+have the same memory layout.
+
+The fields of a `struct` may be qualified by [visibility modifiers], to allow
+access to data in a struct outside a module.
+
+A _tuple struct_ type is just like a struct type, except that the fields are
+anonymous.
+
+A _unit-like struct_ type is like a struct type, except that it has no fields.
+The one value constructed by the associated [struct expression] is the only
+value that inhabits such a type.
+
+[^structtype]: `struct` types are analogous to `struct` types in C, the
+ *record* types of the ML family, or the *struct* types of the Lisp family.
+
+[`repr` attribute]: ../type-layout.md#representations
+[struct expression]: ../expressions/struct-expr.md
+[visibility modifiers]: ../visibility-and-privacy.md
diff --git a/src/doc/reference/src/types/textual.md b/src/doc/reference/src/types/textual.md
new file mode 100644
index 000000000..7f3899d70
--- /dev/null
+++ b/src/doc/reference/src/types/textual.md
@@ -0,0 +1,22 @@
+# Textual types
+
+The types `char` and `str` hold textual data.
+
+A value of type `char` is a [Unicode scalar value] (i.e. a code point that is
+not a surrogate), represented as a 32-bit unsigned word in the 0x0000 to 0xD7FF
+or 0xE000 to 0x10FFFF range. It is immediate [Undefined Behavior] to create a
+`char` that falls outside this range. A `[char]` is effectively a UCS-4 / UTF-32
+string of length 1.
+
+A value of type `str` is represented the same way as `[u8]`, it is a slice of
+8-bit unsigned bytes. However, the Rust standard library makes extra assumptions
+about `str`: methods working on `str` assume and ensure that the data in there
+is valid UTF-8. Calling a `str` method with a non-UTF-8 buffer can cause
+[Undefined Behavior] now or in the future.
+
+Since `str` is a [dynamically sized type], it can only be instantiated through a
+pointer type, such as `&str`.
+
+[Unicode scalar value]: http://www.unicode.org/glossary/#unicode_scalar_value
+[Undefined Behavior]: ../behavior-considered-undefined.md
+[dynamically sized type]: ../dynamically-sized-types.md
diff --git a/src/doc/reference/src/types/trait-object.md b/src/doc/reference/src/types/trait-object.md
new file mode 100644
index 000000000..3526b7add
--- /dev/null
+++ b/src/doc/reference/src/types/trait-object.md
@@ -0,0 +1,107 @@
+# Trait objects
+
+> **<sup>Syntax</sup>**\
+> _TraitObjectType_ :\
+> &nbsp;&nbsp; `dyn`<sup>?</sup> [_TypeParamBounds_]
+>
+> _TraitObjectTypeOneBound_ :\
+> &nbsp;&nbsp; `dyn`<sup>?</sup> [_TraitBound_]
+
+A *trait object* is an opaque value of another type that implements a set of
+traits. The set of traits is made up of an [object safe] *base trait* plus any
+number of [auto traits].
+
+Trait objects implement the base trait, its auto traits, and any [supertraits]
+of the base trait.
+
+Trait objects are written as the keyword `dyn` followed by a set of trait
+bounds, but with the following restrictions on the trait bounds. All traits
+except the first trait must be auto traits, there may not be more than one
+lifetime, and opt-out bounds (e.g. `?Sized`) are not allowed. Furthermore,
+paths to traits may be parenthesized.
+
+For example, given a trait `Trait`, the following are all trait objects:
+
+* `dyn Trait`
+* `dyn Trait + Send`
+* `dyn Trait + Send + Sync`
+* `dyn Trait + 'static`
+* `dyn Trait + Send + 'static`
+* `dyn Trait +`
+* `dyn 'static + Trait`.
+* `dyn (Trait)`
+
+> **Edition Differences**: Before the 2021 edition, the `dyn` keyword may be
+> omitted.
+>
+> Note: For clarity, it is recommended to always use the `dyn` keyword on your
+> trait objects unless your codebase supports compiling with Rust 1.26 or lower.
+
+> **Edition Differences**: In the 2015 edition, if the first bound of the
+> trait object is a path that starts with `::`, then the `dyn` will be treated
+> as a part of the path. The first path can be put in parenthesis to get
+> around this. As such, if you want a trait object with the trait
+> `::your_module::Trait`, you should write it as `dyn (::your_module::Trait)`.
+>
+> Beginning in the 2018 edition, `dyn` is a true keyword and is not allowed in
+> paths, so the parentheses are not necessary.
+
+Two trait object types alias each other if the base traits alias each other and
+if the sets of auto traits are the same and the lifetime bounds are the same.
+For example, `dyn Trait + Send + UnwindSafe` is the same as
+`dyn Trait + UnwindSafe + Send`.
+
+Due to the opaqueness of which concrete type the value is of, trait objects are
+[dynamically sized types]. Like all
+<abbr title="dynamically sized types">DSTs</abbr>, trait objects are used
+behind some type of pointer; for example `&dyn SomeTrait` or
+`Box<dyn SomeTrait>`. Each instance of a pointer to a trait object includes:
+
+ - a pointer to an instance of a type `T` that implements `SomeTrait`
+ - a _virtual method table_, often just called a _vtable_, which contains, for
+ each method of `SomeTrait` and its [supertraits] that `T` implements, a
+ pointer to `T`'s implementation (i.e. a function pointer).
+
+The purpose of trait objects is to permit "late binding" of methods. Calling a
+method on a trait object results in virtual dispatch at runtime: that is, a
+function pointer is loaded from the trait object vtable and invoked indirectly.
+The actual implementation for each vtable entry can vary on an object-by-object
+basis.
+
+An example of a trait object:
+
+```rust
+trait Printable {
+ fn stringify(&self) -> String;
+}
+
+impl Printable for i32 {
+ fn stringify(&self) -> String { self.to_string() }
+}
+
+fn print(a: Box<dyn Printable>) {
+ println!("{}", a.stringify());
+}
+
+fn main() {
+ print(Box::new(10) as Box<dyn Printable>);
+}
+```
+
+In this example, the trait `Printable` occurs as a trait object in both the
+type signature of `print`, and the cast expression in `main`.
+
+## Trait Object Lifetime Bounds
+
+Since a trait object can contain references, the lifetimes of those references
+need to be expressed as part of the trait object. This lifetime is written as
+`Trait + 'a`. There are [defaults] that allow this lifetime to usually be
+inferred with a sensible choice.
+
+[_TraitBound_]: ../trait-bounds.md
+[_TypeParamBounds_]: ../trait-bounds.md
+[auto traits]: ../special-types-and-traits.md#auto-traits
+[defaults]: ../lifetime-elision.md#default-trait-object-lifetimes
+[dynamically sized types]: ../dynamically-sized-types.md
+[object safe]: ../items/traits.md#object-safety
+[supertraits]: ../items/traits.md#supertraits
diff --git a/src/doc/reference/src/types/tuple.md b/src/doc/reference/src/types/tuple.md
new file mode 100644
index 000000000..df21e1cdf
--- /dev/null
+++ b/src/doc/reference/src/types/tuple.md
@@ -0,0 +1,47 @@
+# Tuple types
+
+> **<sup>Syntax</sup>**\
+> _TupleType_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `(` `)`\
+> &nbsp;&nbsp; | `(` ( [_Type_] `,` )<sup>+</sup> [_Type_]<sup>?</sup> `)`
+
+*Tuple types* are a family of structural types[^1] for heterogeneous lists of other types.
+
+The syntax for a tuple type is a parenthesized, comma-separated list of types.
+1-ary tuples require a comma after their element type to be disambiguated with a [parenthesized type].
+
+A tuple type has a number of fields equal to the length of the list of types.
+This number of fields determines the *arity* of the tuple.
+A tuple with `n` fields is called an *n-ary tuple*.
+For example, a tuple with 2 fields is a 2-ary tuple.
+
+Fields of tuples are named using increasing numeric names matching their position in the list of types.
+The first field is `0`.
+The second field is `1`.
+And so on.
+The type of each field is the type of the same position in the tuple's list of types.
+
+For convenience and historical reasons, the tuple type with no fields (`()`) is often called *unit* or *the unit type*.
+Its one value is also called *unit* or *the unit value*.
+
+Some examples of tuple types:
+
+* `()` (unit)
+* `(f64, f64)`
+* `(String, i32)`
+* `(i32, String)` (different type from the previous example)
+* `(i32, f64, Vec<String>, Option<bool>)`
+
+Values of this type are constructed using a [tuple expression].
+Furthermore, various expressions will produce the unit value if there is no other meaningful value for it to evaluate to.
+Tuple fields can be accessed by either a [tuple index expression] or [pattern matching].
+
+[^1]: Structural types are always equivalent if their internal types are equivalent.
+ For a nominal version of tuples, see [tuple structs].
+
+[_Type_]: ../types.md#type-expressions
+[parenthesized type]: ../types.md#parenthesized-types
+[pattern matching]: ../patterns.md#tuple-patterns
+[tuple expression]: ../expressions/tuple-expr.md#tuple-expressions
+[tuple index expression]: ../expressions/tuple-expr.md#tuple-indexing-expressions
+[tuple structs]: ./struct.md
diff --git a/src/doc/reference/src/types/union.md b/src/doc/reference/src/types/union.md
new file mode 100644
index 000000000..326e720c6
--- /dev/null
+++ b/src/doc/reference/src/types/union.md
@@ -0,0 +1,19 @@
+# Union types
+
+A *union type* is a nominal, heterogeneous C-like union, denoted by the name of
+a [`union` item][item].
+
+Unions have no notion of an "active field". Instead, every union access
+transmutes parts of the content of the union to the type of the accessed field.
+Since transmutes can cause unexpected or undefined behaviour, `unsafe` is
+required to read from a union field. Union field types are also restricted to a
+subset of types which ensures that they never need dropping. See the [item]
+documentation for further details.
+
+The memory layout of a `union` is undefined by default (in particular, fields do
+*not* have to be at offset 0), but the `#[repr(...)]` attribute can be used to
+fix a layout.
+
+[`Copy`]: ../special-types-and-traits.md#copy
+[`ManuallyDrop`]: ../../std/mem/struct.ManuallyDrop.html
+[item]: ../items/unions.md
diff --git a/src/doc/reference/src/unsafe-blocks.md b/src/doc/reference/src/unsafe-blocks.md
new file mode 100644
index 000000000..754278445
--- /dev/null
+++ b/src/doc/reference/src/unsafe-blocks.md
@@ -0,0 +1,22 @@
+# Unsafe blocks
+
+A block of code can be prefixed with the `unsafe` keyword, to permit calling
+`unsafe` functions or dereferencing raw pointers within a safe function.
+
+When a programmer has sufficient conviction that a sequence of potentially
+unsafe operations is actually safe, they can encapsulate that sequence (taken
+as a whole) within an `unsafe` block. The compiler will consider uses of such
+code safe, in the surrounding context.
+
+Unsafe blocks are used to wrap foreign libraries, make direct use of hardware
+or implement features not directly present in the language. For example, Rust
+provides the language features necessary to implement memory-safe concurrency
+in the language but the implementation of threads and message passing is in the
+standard library.
+
+Rust's type system is a conservative approximation of the dynamic safety
+requirements, so in some cases there is a performance cost to using safe code.
+For example, a doubly-linked list is not a tree structure and can only be
+represented with reference-counted pointers in safe code. By using `unsafe`
+blocks to represent the reverse links as raw pointers, it can be implemented
+with only boxes.
diff --git a/src/doc/reference/src/unsafe-functions.md b/src/doc/reference/src/unsafe-functions.md
new file mode 100644
index 000000000..7a5064c08
--- /dev/null
+++ b/src/doc/reference/src/unsafe-functions.md
@@ -0,0 +1,5 @@
+# Unsafe functions
+
+Unsafe functions are functions that are not safe in all contexts and/or for all
+possible inputs. Such a function must be prefixed with the keyword `unsafe` and
+can only be called from an `unsafe` block or another `unsafe` function.
diff --git a/src/doc/reference/src/unsafety.md b/src/doc/reference/src/unsafety.md
new file mode 100644
index 000000000..915fa5b03
--- /dev/null
+++ b/src/doc/reference/src/unsafety.md
@@ -0,0 +1,19 @@
+# Unsafety
+
+Unsafe operations are those that can potentially violate the memory-safety
+guarantees of Rust's static semantics.
+
+The following language level features cannot be used in the safe subset of
+Rust:
+
+- Dereferencing a [raw pointer].
+- Reading or writing a [mutable] or [external] static variable.
+- Accessing a field of a [`union`], other than to assign to it.
+- Calling an unsafe function (including an intrinsic or foreign function).
+- Implementing an [unsafe trait].
+
+[`union`]: items/unions.md
+[mutable]: items/static-items.md#mutable-statics
+[external]: items/external-blocks.md
+[raw pointer]: types/pointer.md
+[unsafe trait]: items/traits.md#unsafe-traits
diff --git a/src/doc/reference/src/variables.md b/src/doc/reference/src/variables.md
new file mode 100644
index 000000000..5e5ec1bc1
--- /dev/null
+++ b/src/doc/reference/src/variables.md
@@ -0,0 +1,45 @@
+# Variables
+
+A _variable_ is a component of a stack frame, either a named function parameter,
+an anonymous [temporary](expressions.md#temporaries), or a named local
+variable.
+
+A _local variable_ (or *stack-local* allocation) holds a value directly,
+allocated within the stack's memory. The value is a part of the stack frame.
+
+Local variables are immutable unless declared otherwise. For example:
+`let mut x = ...`.
+
+Function parameters are immutable unless declared with `mut`. The `mut` keyword
+applies only to the following parameter. For example: `|mut x, y|` and
+`fn f(mut x: Box<i32>, y: Box<i32>)` declare one mutable variable `x` and one
+immutable variable `y`.
+
+Local variables are not initialized when allocated. Instead, the entire frame
+worth of local variables are allocated, on frame-entry, in an uninitialized
+state. Subsequent statements within a function may or may not initialize the
+local variables. Local variables can be used only after they have been
+initialized through all reachable control flow paths.
+
+In this next example, `init_after_if` is initialized after the [`if` expression]
+while `uninit_after_if` is not because it is not initialized in the `else` case.
+
+```rust
+# fn random_bool() -> bool { true }
+fn initialization_example() {
+ let init_after_if: ();
+ let uninit_after_if: ();
+
+ if random_bool() {
+ init_after_if = ();
+ uninit_after_if = ();
+ } else {
+ init_after_if = ();
+ }
+
+ init_after_if; // ok
+ // uninit_after_if; // err: use of possibly uninitialized `uninit_after_if`
+}
+```
+
+[`if` expression]: expressions/if-expr.md#if-expressions
diff --git a/src/doc/reference/src/visibility-and-privacy.md b/src/doc/reference/src/visibility-and-privacy.md
new file mode 100644
index 000000000..df9f05ad8
--- /dev/null
+++ b/src/doc/reference/src/visibility-and-privacy.md
@@ -0,0 +1,245 @@
+# Visibility and Privacy
+
+> **<sup>Syntax<sup>**\
+> _Visibility_ :\
+> &nbsp;&nbsp; &nbsp;&nbsp; `pub`\
+> &nbsp;&nbsp; | `pub` `(` `crate` `)`\
+> &nbsp;&nbsp; | `pub` `(` `self` `)`\
+> &nbsp;&nbsp; | `pub` `(` `super` `)`\
+> &nbsp;&nbsp; | `pub` `(` `in` [_SimplePath_] `)`
+
+These two terms are often used interchangeably, and what they are attempting to
+convey is the answer to the question "Can this item be used at this location?"
+
+Rust's name resolution operates on a global hierarchy of namespaces. Each level
+in the hierarchy can be thought of as some item. The items are one of those
+mentioned above, but also include external crates. Declaring or defining a new
+module can be thought of as inserting a new tree into the hierarchy at the
+location of the definition.
+
+To control whether interfaces can be used across modules, Rust checks each use
+of an item to see whether it should be allowed or not. This is where privacy
+warnings are generated, or otherwise "you used a private item of another module
+and weren't allowed to."
+
+By default, everything is *private*, with two exceptions: Associated
+items in a `pub` Trait are public by default; Enum variants
+in a `pub` enum are also public by default. When an item is declared as `pub`,
+it can be thought of as being accessible to the outside world. For example:
+
+```rust
+# fn main() {}
+// Declare a private struct
+struct Foo;
+
+// Declare a public struct with a private field
+pub struct Bar {
+ field: i32,
+}
+
+// Declare a public enum with two public variants
+pub enum State {
+ PubliclyAccessibleState,
+ PubliclyAccessibleState2,
+}
+```
+
+With the notion of an item being either public or private, Rust allows item
+accesses in two cases:
+
+1. If an item is public, then it can be accessed externally from some module
+ `m` if you can access all the item's ancestor modules from `m`. You can
+ also potentially be able to name the item through re-exports. See below.
+2. If an item is private, it may be accessed by the current module and its
+ descendants.
+
+These two cases are surprisingly powerful for creating module hierarchies
+exposing public APIs while hiding internal implementation details. To help
+explain, here's a few use cases and what they would entail:
+
+* A library developer needs to expose functionality to crates which link
+ against their library. As a consequence of the first case, this means that
+ anything which is usable externally must be `pub` from the root down to the
+ destination item. Any private item in the chain will disallow external
+ accesses.
+
+* A crate needs a global available "helper module" to itself, but it doesn't
+ want to expose the helper module as a public API. To accomplish this, the
+ root of the crate's hierarchy would have a private module which then
+ internally has a "public API". Because the entire crate is a descendant of
+ the root, then the entire local crate can access this private module through
+ the second case.
+
+* When writing unit tests for a module, it's often a common idiom to have an
+ immediate child of the module to-be-tested named `mod test`. This module
+ could access any items of the parent module through the second case, meaning
+ that internal implementation details could also be seamlessly tested from the
+ child module.
+
+In the second case, it mentions that a private item "can be accessed" by the
+current module and its descendants, but the exact meaning of accessing an item
+depends on what the item is. Accessing a module, for example, would mean
+looking inside of it (to import more items). On the other hand, accessing a
+function would mean that it is invoked. Additionally, path expressions and
+import statements are considered to access an item in the sense that the
+import/expression is only valid if the destination is in the current visibility
+scope.
+
+Here's an example of a program which exemplifies the three cases outlined
+above:
+
+```rust
+// This module is private, meaning that no external crate can access this
+// module. Because it is private at the root of this current crate, however, any
+// module in the crate may access any publicly visible item in this module.
+mod crate_helper_module {
+
+ // This function can be used by anything in the current crate
+ pub fn crate_helper() {}
+
+ // This function *cannot* be used by anything else in the crate. It is not
+ // publicly visible outside of the `crate_helper_module`, so only this
+ // current module and its descendants may access it.
+ fn implementation_detail() {}
+}
+
+// This function is "public to the root" meaning that it's available to external
+// crates linking against this one.
+pub fn public_api() {}
+
+// Similarly to 'public_api', this module is public so external crates may look
+// inside of it.
+pub mod submodule {
+ use crate::crate_helper_module;
+
+ pub fn my_method() {
+ // Any item in the local crate may invoke the helper module's public
+ // interface through a combination of the two rules above.
+ crate_helper_module::crate_helper();
+ }
+
+ // This function is hidden to any module which is not a descendant of
+ // `submodule`
+ fn my_implementation() {}
+
+ #[cfg(test)]
+ mod test {
+
+ #[test]
+ fn test_my_implementation() {
+ // Because this module is a descendant of `submodule`, it's allowed
+ // to access private items inside of `submodule` without a privacy
+ // violation.
+ super::my_implementation();
+ }
+ }
+}
+
+# fn main() {}
+```
+
+For a Rust program to pass the privacy checking pass, all paths must be valid
+accesses given the two rules above. This includes all use statements,
+expressions, types, etc.
+
+## `pub(in path)`, `pub(crate)`, `pub(super)`, and `pub(self)`
+
+In addition to public and private, Rust allows users to declare an item as
+visible only within a given scope. The rules for `pub` restrictions are as
+follows:
+- `pub(in path)` makes an item visible within the provided `path`. `path` must
+be an ancestor module of the item whose visibility is being declared.
+- `pub(crate)` makes an item visible within the current crate.
+- `pub(super)` makes an item visible to the parent module. This is equivalent
+ to `pub(in super)`.
+- `pub(self)` makes an item visible to the current module. This is equivalent
+to `pub(in self)` or not using `pub` at all.
+
+> **Edition Differences**: Starting with the 2018 edition, paths for
+> `pub(in path)` must start with `crate`, `self`, or `super`. The 2015 edition
+> may also use paths starting with `::` or modules from the crate root.
+
+Here's an example:
+
+```rust,edition2015
+pub mod outer_mod {
+ pub mod inner_mod {
+ // This function is visible within `outer_mod`
+ pub(in crate::outer_mod) fn outer_mod_visible_fn() {}
+ // Same as above, this is only valid in the 2015 edition.
+ pub(in outer_mod) fn outer_mod_visible_fn_2015() {}
+
+ // This function is visible to the entire crate
+ pub(crate) fn crate_visible_fn() {}
+
+ // This function is visible within `outer_mod`
+ pub(super) fn super_mod_visible_fn() {
+ // This function is visible since we're in the same `mod`
+ inner_mod_visible_fn();
+ }
+
+ // This function is visible only within `inner_mod`,
+ // which is the same as leaving it private.
+ pub(self) fn inner_mod_visible_fn() {}
+ }
+ pub fn foo() {
+ inner_mod::outer_mod_visible_fn();
+ inner_mod::crate_visible_fn();
+ inner_mod::super_mod_visible_fn();
+
+ // This function is no longer visible since we're outside of `inner_mod`
+ // Error! `inner_mod_visible_fn` is private
+ //inner_mod::inner_mod_visible_fn();
+ }
+}
+
+fn bar() {
+ // This function is still visible since we're in the same crate
+ outer_mod::inner_mod::crate_visible_fn();
+
+ // This function is no longer visible since we're outside of `outer_mod`
+ // Error! `super_mod_visible_fn` is private
+ //outer_mod::inner_mod::super_mod_visible_fn();
+
+ // This function is no longer visible since we're outside of `outer_mod`
+ // Error! `outer_mod_visible_fn` is private
+ //outer_mod::inner_mod::outer_mod_visible_fn();
+
+ outer_mod::foo();
+}
+
+fn main() { bar() }
+```
+
+> **Note:** This syntax only adds another restriction to the visibility of an
+> item. It does not guarantee that the item is visible within all parts of the
+> specified scope. To access an item, all of its parent items up to the
+> current scope must still be visible as well.
+
+## Re-exporting and Visibility
+
+Rust allows publicly re-exporting items through a `pub use` directive. Because
+this is a public directive, this allows the item to be used in the current
+module through the rules above. It essentially allows public access into the
+re-exported item. For example, this program is valid:
+
+```rust
+pub use self::implementation::api;
+
+mod implementation {
+ pub mod api {
+ pub fn f() {}
+ }
+}
+
+# fn main() {}
+```
+
+This means that any external crate referencing `implementation::api::f` would
+receive a privacy violation, while the path `api::f` would be allowed.
+
+When re-exporting a private item, it can be thought of as allowing the "privacy
+chain" being short-circuited through the reexport instead of passing through
+the namespace hierarchy as it normally would.
+
+[_SimplePath_]: paths.md#simple-paths
diff --git a/src/doc/reference/src/whitespace.md b/src/doc/reference/src/whitespace.md
new file mode 100644
index 000000000..a93bdcbdb
--- /dev/null
+++ b/src/doc/reference/src/whitespace.md
@@ -0,0 +1,24 @@
+# Whitespace
+
+Whitespace is any non-empty string containing only characters that have the
+[`Pattern_White_Space`] Unicode property, namely:
+
+- `U+0009` (horizontal tab, `'\t'`)
+- `U+000A` (line feed, `'\n'`)
+- `U+000B` (vertical tab)
+- `U+000C` (form feed)
+- `U+000D` (carriage return, `'\r'`)
+- `U+0020` (space, `' '`)
+- `U+0085` (next line)
+- `U+200E` (left-to-right mark)
+- `U+200F` (right-to-left mark)
+- `U+2028` (line separator)
+- `U+2029` (paragraph separator)
+
+Rust is a "free-form" language, meaning that all forms of whitespace serve only
+to separate _tokens_ in the grammar, and have no semantic significance.
+
+A Rust program has identical meaning if each whitespace element is replaced
+with any other legal whitespace element, such as a single space character.
+
+[`Pattern_White_Space`]: https://www.unicode.org/reports/tr31/
diff --git a/src/doc/reference/style-check/Cargo.lock b/src/doc/reference/style-check/Cargo.lock
new file mode 100644
index 000000000..1b6229001
--- /dev/null
+++ b/src/doc/reference/style-check/Cargo.lock
@@ -0,0 +1,62 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+[[package]]
+name = "bitflags"
+version = "1.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
+
+[[package]]
+name = "getopts"
+version = "0.2.21"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5"
+dependencies = [
+ "unicode-width",
+]
+
+[[package]]
+name = "memchr"
+version = "2.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
+
+[[package]]
+name = "pulldown-cmark"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffade02495f22453cd593159ea2f59827aae7f53fa8323f756799b670881dcf8"
+dependencies = [
+ "bitflags",
+ "getopts",
+ "memchr",
+ "unicase",
+]
+
+[[package]]
+name = "style-check"
+version = "0.1.0"
+dependencies = [
+ "pulldown-cmark",
+]
+
+[[package]]
+name = "unicase"
+version = "2.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
+dependencies = [
+ "version_check",
+]
+
+[[package]]
+name = "unicode-width"
+version = "0.1.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3"
+
+[[package]]
+name = "version_check"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
diff --git a/src/doc/reference/style-check/Cargo.toml b/src/doc/reference/style-check/Cargo.toml
new file mode 100644
index 000000000..d592f65d0
--- /dev/null
+++ b/src/doc/reference/style-check/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "style-check"
+version = "0.1.0"
+authors = ["steveklabnik <steve@steveklabnik.com>"]
+edition = "2021"
+
+[dependencies]
+pulldown-cmark = "0.8"
diff --git a/src/doc/reference/style-check/src/main.rs b/src/doc/reference/style-check/src/main.rs
new file mode 100644
index 000000000..2589cd620
--- /dev/null
+++ b/src/doc/reference/style-check/src/main.rs
@@ -0,0 +1,131 @@
+use std::env;
+use std::error::Error;
+use std::fs;
+use std::path::Path;
+
+macro_rules! style_error {
+ ($bad:expr, $path:expr, $($arg:tt)*) => {
+ *$bad = true;
+ eprint!("error in {}: ", $path.display());
+ eprintln!("{}", format_args!($($arg)*));
+ };
+}
+
+fn main() {
+ let arg = env::args().nth(1).unwrap_or_else(|| {
+ eprintln!("Please pass a src directory as the first argument");
+ std::process::exit(1);
+ });
+
+ let mut bad = false;
+ if let Err(e) = check_directory(&Path::new(&arg), &mut bad) {
+ eprintln!("error: {}", e);
+ std::process::exit(1);
+ }
+ if bad {
+ eprintln!("some style checks failed");
+ std::process::exit(1);
+ }
+ eprintln!("passed!");
+}
+
+fn check_directory(dir: &Path, bad: &mut bool) -> Result<(), Box<dyn Error>> {
+ for entry in fs::read_dir(dir)? {
+ let entry = entry?;
+ let path = entry.path();
+
+ if path.is_dir() {
+ check_directory(&path, bad)?;
+ continue;
+ }
+
+ if !matches!(
+ path.extension().and_then(|p| p.to_str()),
+ Some("md") | Some("html")
+ ) {
+ // This may be extended in the future if other file types are needed.
+ style_error!(bad, path, "expected only md or html in src");
+ }
+
+ let contents = fs::read_to_string(&path)?;
+ if contents.contains("#![feature") {
+ style_error!(bad, path, "#![feature] attributes are not allowed");
+ }
+ if contents.contains('\r') {
+ style_error!(
+ bad,
+ path,
+ "CR characters not allowed, must use LF line endings"
+ );
+ }
+ if contents.contains('\t') {
+ style_error!(bad, path, "tab characters not allowed, use spaces");
+ }
+ if !contents.ends_with('\n') {
+ style_error!(bad, path, "file must end with a newline");
+ }
+ for line in contents.lines() {
+ if line.ends_with(' ') {
+ style_error!(bad, path, "lines must not end with spaces");
+ }
+ }
+ cmark_check(&path, bad, &contents)?;
+ }
+ Ok(())
+}
+
+fn cmark_check(path: &Path, bad: &mut bool, contents: &str) -> Result<(), Box<dyn Error>> {
+ use pulldown_cmark::{BrokenLink, CodeBlockKind, Event, Options, Parser, Tag};
+
+ macro_rules! cmark_error {
+ ($bad:expr, $path:expr, $range:expr, $($arg:tt)*) => {
+ *$bad = true;
+ let lineno = contents[..$range.start].chars().filter(|&ch| ch == '\n').count() + 1;
+ eprint!("error in {} (line {}): ", $path.display(), lineno);
+ eprintln!("{}", format_args!($($arg)*));
+ }
+ }
+
+ let options = Options::all();
+ // Can't use `bad` because it would get captured in closure.
+ let mut link_err = false;
+ let mut cb = |link: BrokenLink<'_>| {
+ cmark_error!(
+ &mut link_err,
+ path,
+ link.span,
+ "broken {:?} link (reference `{}`)",
+ link.link_type,
+ link.reference
+ );
+ None
+ };
+ let parser = Parser::new_with_broken_link_callback(contents, options, Some(&mut cb));
+
+ for (event, range) in parser.into_offset_iter() {
+ match event {
+ Event::Start(Tag::CodeBlock(CodeBlockKind::Indented)) => {
+ cmark_error!(
+ bad,
+ path,
+ range,
+ "indented code blocks should use triple backtick-style \
+ with a language identifier"
+ );
+ }
+ Event::Start(Tag::CodeBlock(CodeBlockKind::Fenced(languages))) => {
+ if languages.is_empty() {
+ cmark_error!(
+ bad,
+ path,
+ range,
+ "code block should include an explicit language",
+ );
+ }
+ }
+ _ => {}
+ }
+ }
+ *bad |= link_err;
+ Ok(())
+}
diff --git a/src/doc/reference/theme/reference.css b/src/doc/reference/theme/reference.css
new file mode 100644
index 000000000..02e5f63df
--- /dev/null
+++ b/src/doc/reference/theme/reference.css
@@ -0,0 +1,53 @@
+/*
+.parenthetical class used to keep e.g. "less-than symbol (<)" from wrapping
+the end parenthesis onto its own line. Use in a span between the last word and
+the parenthetical. So for this example, you'd use
+```less-than <span class="parenthetical">symbol (`<`)</span>```
+*/
+.parenthetical {
+ white-space: nowrap;
+}
+
+/*
+Warnings and notes:
+
+Write the <div>s on their own line. E.g.
+
+<div class="warning">
+
+Warning: This is bad!
+
+</div>
+*/
+main .warning p {
+ padding: 10px 20px;
+ margin: 20px 0;
+}
+
+main .warning p::before {
+ content: "⚠️ ";
+}
+
+.light main .warning p,
+.rust main .warning p {
+ border: 2px solid red;
+ background: #ffcece;
+}
+
+.rust main .warning p {
+ /* overrides previous declaration */
+ border-color: #961717;
+}
+
+.coal main .warning p,
+.navy main .warning p,
+.ayu main .warning p {
+ background: #542626;
+}
+
+/* Make the links higher contrast on dark themes */
+.coal main .warning p a,
+.navy main .warning p a,
+.ayu main .warning p a {
+ color: #80d0d0;
+}
diff --git a/src/doc/reference/triagebot.toml b/src/doc/reference/triagebot.toml
new file mode 100644
index 000000000..4059f9190
--- /dev/null
+++ b/src/doc/reference/triagebot.toml
@@ -0,0 +1,6 @@
+[relabel]
+allow-unauthenticated = [
+ "S-*", "A-*", "New Content", "Language Cleanup", "Easy", "Formatting", "Enhancement", "Bug",
+]
+
+[assign]
diff --git a/src/doc/robots.txt b/src/doc/robots.txt
new file mode 100644
index 000000000..3a2552e9a
--- /dev/null
+++ b/src/doc/robots.txt
@@ -0,0 +1,11 @@
+User-agent: *
+Disallow: /1.
+Disallow: /0.
+Disallow: /book/first-edition/
+Disallow: /book/second-edition/
+Disallow: /stable/book/first-edition/
+Disallow: /stable/book/second-edition/
+Disallow: /beta/book/first-edition/
+Disallow: /beta/book/second-edition/
+Disallow: /nightly/book/first-edition/
+Disallow: /nightly/book/second-edition/
diff --git a/src/doc/rust-by-example/.github/workflows/rbe.yml b/src/doc/rust-by-example/.github/workflows/rbe.yml
new file mode 100644
index 000000000..94b7cdc95
--- /dev/null
+++ b/src/doc/rust-by-example/.github/workflows/rbe.yml
@@ -0,0 +1,48 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Run tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+
+ - name: Update rustup
+ run: rustup self update
+
+ - name: Install Rust
+ run: |
+ rustup set profile minimal
+ rustup toolchain install nightly -c rust-docs
+ rustup default nightly
+
+ - name: Install mdbook
+ run: |
+ mkdir bin
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.15/mdbook-v0.4.15-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=bin
+ echo "$(pwd)/bin" >> ${GITHUB_PATH}
+
+ - name: Report versions
+ run: |
+ rustup --version
+ rustc -Vv
+ mdbook --version
+
+ - name: Run tests
+ run: mdbook test
+
+ - name: Build HTML
+ run: mdbook build
+
+ - name: Check for broken links
+ run: |
+ curl -sSLo linkcheck.sh \
+ https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+ sh linkcheck.sh --all rust-by-example
+
+ - name: Upload Artifact
+ uses: actions/upload-artifact@v1
+ with:
+ name: rust-by-example
+ path: book
diff --git a/src/doc/rust-by-example/.travis.yml b/src/doc/rust-by-example/.travis.yml
new file mode 100644
index 000000000..17adda5b9
--- /dev/null
+++ b/src/doc/rust-by-example/.travis.yml
@@ -0,0 +1,23 @@
+sudo: false
+language: rust
+rust:
+ - nightly
+branches:
+ only:
+ - master
+before_script:
+ - |
+ set -ex
+ rustup --version
+ rustc -Vv
+ curl -sSL https://github.com/rust-lang/mdBook/releases/download/v0.4.5/mdbook-v0.4.5-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=$HOME/.cargo/bin
+ mdbook --version
+ rustup toolchain update nightly -c rust-docs
+script:
+ - mdbook build
+ - mdbook test
+ - |
+ set -e
+ curl -sSLo linkcheck.sh \
+ https://raw.githubusercontent.com/rust-lang/rust/master/src/tools/linkchecker/linkcheck.sh
+ sh linkcheck.sh --all rust-by-example
diff --git a/src/doc/rust-by-example/CODE_OF_CONDUCT.md b/src/doc/rust-by-example/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..cdfd7cfe8
--- /dev/null
+++ b/src/doc/rust-by-example/CODE_OF_CONDUCT.md
@@ -0,0 +1,39 @@
+# The Rust Code of Conduct
+
+A version of this document [can be found online](https://www.rust-lang.org/conduct.html).
+
+## Conduct
+
+**Contact**: [rust-mods@rust-lang.org](mailto:rust-mods@rust-lang.org)
+
+* We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic.
+* On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all.
+* Please be kind and courteous. There's no need to be mean or rude.
+* Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer.
+* Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works.
+* We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups.
+* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [Rust moderation team][mod_team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back.
+* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome.
+
+## Moderation
+
+These are the policies for upholding our community's standards of conduct. If you feel that a thread needs moderation, please contact the [Rust moderation team][mod_team].
+
+1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.)
+2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed.
+3. Moderators will first respond to such remarks with a warning.
+4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off.
+5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded.
+6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology.
+7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed.
+8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others.
+
+In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely.
+
+And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust.
+
+The enforcement policies listed above apply to all official Rust venues; including official IRC channels (#rust, #rust-internals, #rust-tools, #rust-libs, #rustc, #rust-beginners, #rust-docs, #rust-community, #rust-lang, and #cargo); GitHub repositories under rust-lang, rust-lang-nursery, and rust-lang-deprecated; and all forums under rust-lang.org (users.rust-lang.org, internals.rust-lang.org). For other projects adopting the Rust Code of Conduct, please contact the maintainers of those projects for enforcement. If you wish to use this code of conduct for your own project, consider explicitly mentioning your moderation policy or making a copy with your own moderation policy so as to avoid confusion.
+
+*Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).*
+
+[mod_team]: https://www.rust-lang.org/team.html#Moderation-team
diff --git a/src/doc/rust-by-example/CONTRIBUTING.md b/src/doc/rust-by-example/CONTRIBUTING.md
new file mode 100644
index 000000000..665a708c0
--- /dev/null
+++ b/src/doc/rust-by-example/CONTRIBUTING.md
@@ -0,0 +1,69 @@
+# Rust by Example contribution guidelines
+
+Thank you for your interest in making Rust by Example (also known as RBE)
+better! We'd love to have your contribution. We expect all contributors to
+abide by the [Rust code of conduct], which you can find at that link or in the
+[`CODE_OF_CONDUCT.md`] file in this repository.
+
+[Rust code of conduct]: https://www.rust-lang.org/policies/code-of-conduct
+[`CODE_OF_CONDUCT.md`]: https://github.com/rust-lang/rust-by-example/blob/master/CODE_OF_CONDUCT.md
+
+## License
+
+RBE is dual licenced under the MIT and Apache 2.0 licenses, and so are all
+contributions. Please see the [`LICENSE-MIT`] and [`LICENSE-APACHE`] files in
+this directory for more details.
+
+[`LICENSE-MIT`]: https://github.com/rust-lang/rust-by-example/blob/master/LICENSE-MIT
+[`LICENSE-APACHE`]: https://github.com/rust-lang/rust-by-example/blob/master/LICENSE-APACHE
+
+## Pull Requests
+
+To make changes to RBE, please send in pull requests on GitHub to the `master`
+branch. We'll review them and either merge or request changes. Travis CI tests
+everything as well, so you may get feedback from it too.
+
+If you make additions or other changes to a pull request, feel free to either amend
+previous commits or only add new ones, however you prefer. We may ask you to squash
+your commits before merging, depending.
+
+## Issue Tracker
+
+You can find the issue tracker [on
+GitHub](https://github.com/rust-lang/rust-by-example/issues). If you've found a
+problem with RBE, please open an issue there.
+
+We use the following labels:
+
+* `enhancement`: This is for any request for new sections or functionality.
+* `bug`: This is for anything that's in RBE, but incorrect or not working.
+* `discussion`: A discussion about improving something in RBE; this may lead to new
+ enhancement or bug issues.
+* `E-mentor`: This issue has someone dedicated to helping a new contributor fix it!
+ Can apply to both enhancement or bug issues.
+
+## Development workflow
+
+To build RBE, [install Rust], and then:
+
+```bash
+$ git clone https://github.com/rust-lang/rust-by-example
+$ cd rust-by-example
+$ cargo install mdbook
+$ mdbook build
+```
+
+[install Rust]: http://rust-lang.org/install.html
+
+The files will be in the `book` directory at the top-level; `mdbook serve` will
+open the contents in your web browser.
+
+To run the tests:
+
+```bash
+$ mdbook test
+```
+
+If you're adding a new chapter, you'll need to edit `src\SUMMARY.md` to add it. If
+you're tweaking an existing example, you'll need to edit the corresponding file; check
+`src\SUMMARY.md` to see a mapping of where chapters go to files.
diff --git a/src/doc/rust-by-example/LICENSE-APACHE b/src/doc/rust-by-example/LICENSE-APACHE
new file mode 100644
index 000000000..16fe87b06
--- /dev/null
+++ b/src/doc/rust-by-example/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/doc/rust-by-example/LICENSE-MIT b/src/doc/rust-by-example/LICENSE-MIT
new file mode 100644
index 000000000..ac0fda003
--- /dev/null
+++ b/src/doc/rust-by-example/LICENSE-MIT
@@ -0,0 +1,25 @@
+Copyright (c) 2014 Jorge Aparicio
+
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/src/doc/rust-by-example/README.md b/src/doc/rust-by-example/README.md
new file mode 100644
index 000000000..462f733e5
--- /dev/null
+++ b/src/doc/rust-by-example/README.md
@@ -0,0 +1,57 @@
+# Rust By Example
+
+[![Build Status][travis-badge]][travis-repo]
+
+[travis-badge]: https://travis-ci.com/rust-lang/rust-by-example.svg?branch=master
+[travis-repo]: https://travis-ci.com/rust-lang/rust-by-example
+
+Learn Rust with examples (Live code editor included)
+
+## Using
+
+If you'd like to read Rust by Example, you can visit <https://doc.rust-lang.org/rust-by-example/>
+to read it online.
+
+If you'd like to read it locally, [install Rust], and then:
+
+```bash
+$ git clone https://github.com/rust-lang/rust-by-example
+$ cd rust-by-example
+$ cargo install mdbook
+$ mdbook build
+$ mdbook serve
+```
+
+[install Rust]: https://www.rust-lang.org/tools/install
+
+To be able to run the examples, you must be connected to the internet; you can
+read all content offline, however!
+
+## Contributing
+
+Please see the [CONTRIBUTING.md] file for more details.
+
+[CONTRIBUTING.md]: https://github.com/rust-lang/rust-by-example/blob/master/CONTRIBUTING.md
+
+## Translations to other languages
+
+* [Chinese](https://github.com/rust-lang-cn/rust-by-example-cn)
+* [Japanese](https://github.com/rust-lang-ja/rust-by-example-ja)
+* [French](https://github.com/Songbird0/FR_RBE)
+* [Russian](https://github.com/ruRust/rust-by-example)
+* [Vietnamese](https://github.com/EyesCrypto-Insights/rust-by-example-vn)
+
+## License
+
+Rust by Example is licensed under either of
+
+* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or
+ <http://www.apache.org/licenses/LICENSE-2.0>)
+* MIT license ([LICENSE-MIT](LICENSE-MIT) or
+ <http://opensource.org/licenses/MIT>)
+
+at your option.
+
+Unless you explicitly state otherwise, any contribution intentionally submitted
+for inclusion in Rust by Example by you, as defined in the Apache-2.0 license, shall be
+dually licensed as above, without any additional terms or conditions.
diff --git a/src/doc/rust-by-example/book.toml b/src/doc/rust-by-example/book.toml
new file mode 100644
index 000000000..19db456b6
--- /dev/null
+++ b/src/doc/rust-by-example/book.toml
@@ -0,0 +1,17 @@
+[book]
+title = "Rust By Example"
+description = "Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust concepts and standard libraries."
+author = "The Rust Community"
+
+[output.html.playpen]
+editable = true
+editor = "ace"
+
+[output.html.fold]
+enable = true
+
+[output.html]
+git-repository-url = "https://github.com/rust-lang/rust-by-example"
+
+[rust]
+edition = "2021"
diff --git a/src/doc/rust-by-example/src/SUMMARY.md b/src/doc/rust-by-example/src/SUMMARY.md
new file mode 100644
index 000000000..223a5d8dd
--- /dev/null
+++ b/src/doc/rust-by-example/src/SUMMARY.md
@@ -0,0 +1,222 @@
+# Summary
+
+[Introduction](index.md)
+
+- [Hello World](hello.md)
+ - [Comments](hello/comment.md)
+ - [Formatted print](hello/print.md)
+ - [Debug](hello/print/print_debug.md)
+ - [Display](hello/print/print_display.md)
+ - [Testcase: List](hello/print/print_display/testcase_list.md)
+ - [Formatting](hello/print/fmt.md)
+
+- [Primitives](primitives.md)
+ - [Literals and operators](primitives/literals.md)
+ - [Tuples](primitives/tuples.md)
+ - [Arrays and Slices](primitives/array.md)
+
+- [Custom Types](custom_types.md)
+ - [Structures](custom_types/structs.md)
+ - [Enums](custom_types/enum.md)
+ - [use](custom_types/enum/enum_use.md)
+ - [C-like](custom_types/enum/c_like.md)
+ - [Testcase: linked-list](custom_types/enum/testcase_linked_list.md)
+ - [constants](custom_types/constants.md)
+
+- [Variable Bindings](variable_bindings.md)
+ - [Mutability](variable_bindings/mut.md)
+ - [Scope and Shadowing](variable_bindings/scope.md)
+ - [Declare first](variable_bindings/declare.md)
+ - [Freezing](variable_bindings/freeze.md)
+
+- [Types](types.md)
+ - [Casting](types/cast.md)
+ - [Literals](types/literals.md)
+ - [Inference](types/inference.md)
+ - [Aliasing](types/alias.md)
+
+- [Conversion](conversion.md)
+ - [`From` and `Into`](conversion/from_into.md)
+ - [`TryFrom` and `TryInto`](conversion/try_from_try_into.md)
+ - [To and from `String`s](conversion/string.md)
+
+- [Expressions](expression.md)
+
+- [Flow of Control](flow_control.md)
+ - [if/else](flow_control/if_else.md)
+ - [loop](flow_control/loop.md)
+ - [Nesting and labels](flow_control/loop/nested.md)
+ - [Returning from loops](flow_control/loop/return.md)
+ - [while](flow_control/while.md)
+ - [for and range](flow_control/for.md)
+ - [match](flow_control/match.md)
+ - [Destructuring](flow_control/match/destructuring.md)
+ - [tuples](flow_control/match/destructuring/destructure_tuple.md)
+ - [arrays/slices](flow_control/match/destructuring/destructure_slice.md)
+ - [enums](flow_control/match/destructuring/destructure_enum.md)
+ - [pointers/ref](flow_control/match/destructuring/destructure_pointers.md)
+ - [structs](flow_control/match/destructuring/destructure_structures.md)
+ - [Guards](flow_control/match/guard.md)
+ - [Binding](flow_control/match/binding.md)
+ - [if let](flow_control/if_let.md)
+ - [while let](flow_control/while_let.md)
+
+- [Functions](fn.md)
+ - [Methods](fn/methods.md)
+ - [Closures](fn/closures.md)
+ - [Capturing](fn/closures/capture.md)
+ - [As input parameters](fn/closures/input_parameters.md)
+ - [Type anonymity](fn/closures/anonymity.md)
+ - [Input functions](fn/closures/input_functions.md)
+ - [As output parameters](fn/closures/output_parameters.md)
+ - [Examples in `std`](fn/closures/closure_examples.md)
+ - [Iterator::any](fn/closures/closure_examples/iter_any.md)
+ - [Searching through iterators](fn/closures/closure_examples/iter_find.md)
+ - [Higher Order Functions](fn/hof.md)
+ - [Diverging functions](fn/diverging.md)
+
+- [Modules](mod.md)
+ - [Visibility](mod/visibility.md)
+ - [Struct visibility](mod/struct_visibility.md)
+ - [The `use` declaration](mod/use.md)
+ - [`super` and `self`](mod/super.md)
+ - [File hierarchy](mod/split.md)
+
+- [Crates](crates.md)
+ - [Creating a Library](crates/lib.md)
+ - [Using a Library](crates/using_lib.md)
+
+- [Cargo](cargo.md)
+ - [Dependencies](cargo/deps.md)
+ - [Conventions](cargo/conventions.md)
+ - [Tests](cargo/test.md)
+ - [Build Scripts](cargo/build_scripts.md)
+
+- [Attributes](attribute.md)
+ - [`dead_code`](attribute/unused.md)
+ - [Crates](attribute/crate.md)
+ - [`cfg`](attribute/cfg.md)
+ - [Custom](attribute/cfg/custom.md)
+
+- [Generics](generics.md)
+ - [Functions](generics/gen_fn.md)
+ - [Implementation](generics/impl.md)
+ - [Traits](generics/gen_trait.md)
+ - [Bounds](generics/bounds.md)
+ - [Testcase: empty bounds](generics/bounds/testcase_empty.md)
+ - [Multiple bounds](generics/multi_bounds.md)
+ - [Where clauses](generics/where.md)
+ - [New Type Idiom](generics/new_types.md)
+ - [Associated items](generics/assoc_items.md)
+ - [The Problem](generics/assoc_items/the_problem.md)
+ - [Associated types](generics/assoc_items/types.md)
+ - [Phantom type parameters](generics/phantom.md)
+ - [Testcase: unit clarification](generics/phantom/testcase_units.md)
+
+- [Scoping rules](scope.md)
+ - [RAII](scope/raii.md)
+ - [Ownership and moves](scope/move.md)
+ - [Mutability](scope/move/mut.md)
+ - [Partial moves](scope/move/partial_move.md)
+ - [Borrowing](scope/borrow.md)
+ - [Mutability](scope/borrow/mut.md)
+ - [Aliasing](scope/borrow/alias.md)
+ - [The ref pattern](scope/borrow/ref.md)
+ - [Lifetimes](scope/lifetime.md)
+ - [Explicit annotation](scope/lifetime/explicit.md)
+ - [Functions](scope/lifetime/fn.md)
+ - [Methods](scope/lifetime/methods.md)
+ - [Structs](scope/lifetime/struct.md)
+ - [Traits](scope/lifetime/trait.md)
+ - [Bounds](scope/lifetime/lifetime_bounds.md)
+ - [Coercion](scope/lifetime/lifetime_coercion.md)
+ - [Static](scope/lifetime/static_lifetime.md)
+ - [Elision](scope/lifetime/elision.md)
+
+- [Traits](trait.md)
+ - [Derive](trait/derive.md)
+ - [Returning Traits with `dyn`](trait/dyn.md)
+ - [Operator Overloading](trait/ops.md)
+ - [Drop](trait/drop.md)
+ - [Iterators](trait/iter.md)
+ - [`impl Trait`](trait/impl_trait.md)
+ - [Clone](trait/clone.md)
+ - [Supertraits](trait/supertraits.md)
+ - [Disambiguating overlapping traits](trait/disambiguating.md)
+
+- [macro_rules!](macros.md)
+ - [Syntax](macros/syntax.md)
+ - [Designators](macros/designators.md)
+ - [Overload](macros/overload.md)
+ - [Repeat](macros/repeat.md)
+ - [DRY (Don't Repeat Yourself)](macros/dry.md)
+ - [DSL (Domain Specific Languages)](macros/dsl.md)
+ - [Variadics](macros/variadics.md)
+
+- [Error handling](error.md)
+ - [`panic`](error/panic.md)
+ - [`abort` & `unwind`](error/abort_unwind.md)
+ - [`Option` & `unwrap`](error/option_unwrap.md)
+ - [Unpacking options with `?`](error/option_unwrap/question_mark.md)
+ - [Combinators: `map`](error/option_unwrap/map.md)
+ - [Combinators: `and_then`](error/option_unwrap/and_then.md)
+ - [Defaults: `or`, `or_else`, `get_or_insert`, 'get_or_insert_with`](error/option_unwrap/defaults.md)
+ - [`Result`](error/result.md)
+ - [`map` for `Result`](error/result/result_map.md)
+ - [aliases for `Result`](error/result/result_alias.md)
+ - [Early returns](error/result/early_returns.md)
+ - [Introducing `?`](error/result/enter_question_mark.md)
+ - [Multiple error types](error/multiple_error_types.md)
+ - [Pulling `Result`s out of `Option`s](error/multiple_error_types/option_result.md)
+ - [Defining an error type](error/multiple_error_types/define_error_type.md)
+ - [`Box`ing errors](error/multiple_error_types/boxing_errors.md)
+ - [Other uses of `?`](error/multiple_error_types/reenter_question_mark.md)
+ - [Wrapping errors](error/multiple_error_types/wrap_error.md)
+ - [Iterating over `Result`s](error/iter_result.md)
+
+- [Std library types](std.md)
+ - [Box, stack and heap](std/box.md)
+ - [Vectors](std/vec.md)
+ - [Strings](std/str.md)
+ - [`Option`](std/option.md)
+ - [`Result`](std/result.md)
+ - [`?`](std/result/question_mark.md)
+ - [`panic!`](std/panic.md)
+ - [HashMap](std/hash.md)
+ - [Alternate/custom key types](std/hash/alt_key_types.md)
+ - [HashSet](std/hash/hashset.md)
+ - [`Rc`](std/rc.md)
+ - [`Arc`](std/arc.md)
+
+- [Std misc](std_misc.md)
+ - [Threads](std_misc/threads.md)
+ - [Testcase: map-reduce](std_misc/threads/testcase_mapreduce.md)
+ - [Channels](std_misc/channels.md)
+ - [Path](std_misc/path.md)
+ - [File I/O](std_misc/file.md)
+ - [`open`](std_misc/file/open.md)
+ - [`create`](std_misc/file/create.md)
+ - [`read lines`](std_misc/file/read_lines.md)
+ - [Child processes](std_misc/process.md)
+ - [Pipes](std_misc/process/pipe.md)
+ - [Wait](std_misc/process/wait.md)
+ - [Filesystem Operations](std_misc/fs.md)
+ - [Program arguments](std_misc/arg.md)
+ - [Argument parsing](std_misc/arg/matching.md)
+ - [Foreign Function Interface](std_misc/ffi.md)
+
+- [Testing](testing.md)
+ - [Unit testing](testing/unit_testing.md)
+ - [Documentation testing](testing/doc_testing.md)
+ - [Integration testing](testing/integration_testing.md)
+ - [Dev-dependencies](testing/dev_dependencies.md)
+
+- [Unsafe Operations](unsafe.md)
+ - [Inline assembly](unsafe/asm.md)
+
+- [Compatibility](compatibility.md)
+ - [Raw identifiers](compatibility/raw_identifiers.md)
+
+- [Meta](meta.md)
+ - [Documentation](meta/doc.md)
+ - [Playpen](meta/playpen.md)
diff --git a/src/doc/rust-by-example/src/attribute.md b/src/doc/rust-by-example/src/attribute.md
new file mode 100644
index 000000000..dcb7d6c1a
--- /dev/null
+++ b/src/doc/rust-by-example/src/attribute.md
@@ -0,0 +1,40 @@
+# Attributes
+
+An attribute is metadata applied to some module, crate or item. This metadata
+can be used to/for:
+
+<!-- TODO: Link these to their respective examples -->
+
+* [conditional compilation of code][cfg]
+* [set crate name, version and type (binary or library)][crate]
+* disable [lints][lint] (warnings)
+* enable compiler features (macros, glob imports, etc.)
+* link to a foreign library
+* mark functions as unit tests
+* mark functions that will be part of a benchmark
+* [attribute like macros][macros]
+
+When attributes apply to a whole crate, their syntax is `#![crate_attribute]`,
+and when they apply to a module or item, the syntax is `#[item_attribute]`
+(notice the missing bang `!`).
+
+Attributes can take arguments with different syntaxes:
+
+* `#[attribute = "value"]`
+* `#[attribute(key = "value")]`
+* `#[attribute(value)]`
+
+Attributes can have multiple values and can be separated over multiple lines, too:
+
+```rust,ignore
+#[attribute(value, value2)]
+
+
+#[attribute(value, value2, value3,
+ value4, value5)]
+```
+
+[cfg]: attribute/cfg.md
+[crate]: attribute/crate.md
+[lint]: https://en.wikipedia.org/wiki/Lint_%28software%29
+[macros]: https://doc.rust-lang.org/book/ch19-06-macros.html#attribute-like-macros
diff --git a/src/doc/rust-by-example/src/attribute/cfg.md b/src/doc/rust-by-example/src/attribute/cfg.md
new file mode 100644
index 000000000..e4aeb1d3d
--- /dev/null
+++ b/src/doc/rust-by-example/src/attribute/cfg.md
@@ -0,0 +1,45 @@
+# `cfg`
+
+Configuration conditional checks are possible through two different operators:
+
+* the `cfg` attribute: `#[cfg(...)]` in attribute position
+* the `cfg!` macro: `cfg!(...)` in boolean expressions
+
+While the former enables conditional compilation, the latter conditionally
+evaluates to `true` or `false` literals allowing for checks at run-time. Both
+utilize identical argument syntax.
+
+`cfg!`, unlike `#[cfg]`, does not remove any code and only evaluates to true or false. For example, all blocks in an if/else expression need to be valid when `cfg!` is used for the condition, regardless of what `cfg!` is evaluating.
+
+```rust,editable
+// This function only gets compiled if the target OS is linux
+#[cfg(target_os = "linux")]
+fn are_you_on_linux() {
+ println!("You are running linux!");
+}
+
+// And this function only gets compiled if the target OS is *not* linux
+#[cfg(not(target_os = "linux"))]
+fn are_you_on_linux() {
+ println!("You are *not* running linux!");
+}
+
+fn main() {
+ are_you_on_linux();
+
+ println!("Are you sure?");
+ if cfg!(target_os = "linux") {
+ println!("Yes. It's definitely linux!");
+ } else {
+ println!("Yes. It's definitely *not* linux!");
+ }
+}
+```
+
+### See also:
+
+[the reference][ref], [`cfg!`][cfg], and [macros][macros].
+
+[cfg]: https://doc.rust-lang.org/std/macro.cfg!.html
+[macros]: ../macros.md
+[ref]: https://doc.rust-lang.org/reference/attributes.html#conditional-compilation
diff --git a/src/doc/rust-by-example/src/attribute/cfg/custom.md b/src/doc/rust-by-example/src/attribute/cfg/custom.md
new file mode 100644
index 000000000..182d33654
--- /dev/null
+++ b/src/doc/rust-by-example/src/attribute/cfg/custom.md
@@ -0,0 +1,24 @@
+# Custom
+
+Some conditionals like `target_os` are implicitly provided by `rustc`, but
+custom conditionals must be passed to `rustc` using the `--cfg` flag.
+
+```rust,editable,ignore,mdbook-runnable
+#[cfg(some_condition)]
+fn conditional_function() {
+ println!("condition met!");
+}
+
+fn main() {
+ conditional_function();
+}
+```
+
+Try to run this to see what happens without the custom `cfg` flag.
+
+With the custom `cfg` flag:
+
+```shell
+$ rustc --cfg some_condition custom.rs && ./custom
+condition met!
+```
diff --git a/src/doc/rust-by-example/src/attribute/crate.md b/src/doc/rust-by-example/src/attribute/crate.md
new file mode 100644
index 000000000..1539c6398
--- /dev/null
+++ b/src/doc/rust-by-example/src/attribute/crate.md
@@ -0,0 +1,40 @@
+# Crates
+
+The `crate_type` attribute can be used to tell the compiler whether a crate is
+a binary or a library (and even which type of library), and the `crate_name`
+attribute can be used to set the name of the crate.
+
+However, it is important to note that both the `crate_type` and `crate_name`
+attributes have **no** effect whatsoever when using Cargo, the Rust package
+manager. Since Cargo is used for the majority of Rust projects, this means
+real-world uses of `crate_type` and `crate_name` are relatively limited.
+
+```rust,editable
+// This crate is a library
+#![crate_type = "lib"]
+// The library is named "rary"
+#![crate_name = "rary"]
+
+pub fn public_function() {
+ println!("called rary's `public_function()`");
+}
+
+fn private_function() {
+ println!("called rary's `private_function()`");
+}
+
+pub fn indirect_access() {
+ print!("called rary's `indirect_access()`, that\n> ");
+
+ private_function();
+}
+```
+
+When the `crate_type` attribute is used, we no longer need to pass the
+`--crate-type` flag to `rustc`.
+
+```shell
+$ rustc lib.rs
+$ ls lib*
+library.rlib
+```
diff --git a/src/doc/rust-by-example/src/attribute/unused.md b/src/doc/rust-by-example/src/attribute/unused.md
new file mode 100644
index 000000000..1eab37480
--- /dev/null
+++ b/src/doc/rust-by-example/src/attribute/unused.md
@@ -0,0 +1,26 @@
+# `dead_code`
+
+The compiler provides a `dead_code`
+[*lint*][lint] that will warn
+about unused functions. An *attribute* can be used to disable the lint.
+
+```rust,editable
+fn used_function() {}
+
+// `#[allow(dead_code)]` is an attribute that disables the `dead_code` lint
+#[allow(dead_code)]
+fn unused_function() {}
+
+fn noisy_unused_function() {}
+// FIXME ^ Add an attribute to suppress the warning
+
+fn main() {
+ used_function();
+}
+```
+
+Note that in real programs, you should eliminate dead code. In these examples
+we'll allow dead code in some places because of the interactive nature of the
+examples.
+
+[lint]: https://en.wikipedia.org/wiki/Lint_%28software%29
diff --git a/src/doc/rust-by-example/src/cargo.md b/src/doc/rust-by-example/src/cargo.md
new file mode 100644
index 000000000..0f57c1369
--- /dev/null
+++ b/src/doc/rust-by-example/src/cargo.md
@@ -0,0 +1,12 @@
+# Cargo
+
+`cargo` is the official Rust package management tool. It has lots of really
+useful features to improve code quality and developer velocity! These include
+
+- Dependency management and integration with [crates.io](https://crates.io) (the
+ official Rust package registry)
+- Awareness of unit tests
+- Awareness of benchmarks
+
+This chapter will go through some quick basics, but you can find the
+comprehensive docs in [The Cargo Book](https://doc.rust-lang.org/cargo/).
diff --git a/src/doc/rust-by-example/src/cargo/build_scripts.md b/src/doc/rust-by-example/src/cargo/build_scripts.md
new file mode 100644
index 000000000..6db3afe90
--- /dev/null
+++ b/src/doc/rust-by-example/src/cargo/build_scripts.md
@@ -0,0 +1,39 @@
+# Build Scripts
+
+Sometimes a normal build from `cargo` is not enough. Perhaps your crate needs
+some pre-requisites before `cargo` will successfully compile, things like code
+generation, or some native code that needs to be compiled. To solve this problem
+we have build scripts that Cargo can run.
+
+To add a build script to your package it can either be specified in the
+`Cargo.toml` as follows:
+
+```toml
+[package]
+...
+build = "build.rs"
+```
+
+Otherwise Cargo will look for a `build.rs` file in the project directory by
+default.
+
+## How to use a build script
+
+The build script is simply another Rust file that will be compiled and invoked
+prior to compiling anything else in the package. Hence it can be used to fulfill
+pre-requisites of your crate.
+
+Cargo provides the script with inputs via environment variables [specified
+here] that can be used.
+
+The script provides output via stdout. All lines printed are written to
+`target/debug/build/<pkg>/output`. Further, lines prefixed with `cargo:` will be
+interpreted by Cargo directly and hence can be used to define parameters for the
+package's compilation.
+
+For further specification and examples have a read of the
+[Cargo specification][cargo_specification].
+
+[specified here]: https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-build-scripts
+
+[cargo_specification]: https://doc.rust-lang.org/cargo/reference/build-scripts.html
diff --git a/src/doc/rust-by-example/src/cargo/conventions.md b/src/doc/rust-by-example/src/cargo/conventions.md
new file mode 100644
index 000000000..6e8196608
--- /dev/null
+++ b/src/doc/rust-by-example/src/cargo/conventions.md
@@ -0,0 +1,37 @@
+# Conventions
+
+In the previous chapter, we saw the following directory hierarchy:
+
+```txt
+foo
+├── Cargo.toml
+└── src
+ └── main.rs
+```
+
+Suppose that we wanted to have two binaries in the same project, though. What
+then?
+
+It turns out that `cargo` supports this. The default binary name is `main`, as
+we saw before, but you can add additional binaries by placing them in a `bin/`
+directory:
+
+```txt
+foo
+├── Cargo.toml
+└── src
+ ├── main.rs
+ └── bin
+ └── my_other_bin.rs
+```
+
+To tell `cargo` to compile or run this binary as opposed to the default or other
+binaries, we just pass `cargo` the `--bin my_other_bin` flag, where `my_other_bin`
+is the name of the binary we want to work with.
+
+In addition to extra binaries, `cargo` supports [more features] such as
+benchmarks, tests, and examples.
+
+In the next chapter, we will look more closely at tests.
+
+[more features]: https://doc.rust-lang.org/cargo/guide/project-layout.html
diff --git a/src/doc/rust-by-example/src/cargo/deps.md b/src/doc/rust-by-example/src/cargo/deps.md
new file mode 100644
index 000000000..8913e9e38
--- /dev/null
+++ b/src/doc/rust-by-example/src/cargo/deps.md
@@ -0,0 +1,91 @@
+# Dependencies
+
+Most programs have dependencies on some libraries. If you have ever managed
+dependencies by hand, you know how much of a pain this can be. Luckily, the Rust
+ecosystem comes standard with `cargo`! `cargo` can manage dependencies for a
+project.
+
+To create a new Rust project,
+
+```sh
+# A binary
+cargo new foo
+
+# OR A library
+cargo new --lib foo
+```
+
+For the rest of this chapter, let's assume we are making a binary, rather than
+a library, but all of the concepts are the same.
+
+After the above commands, you should see a file hierarchy like this:
+
+```txt
+foo
+├── Cargo.toml
+└── src
+ └── main.rs
+```
+
+The `main.rs` is the root source file for your new project -- nothing new there.
+The `Cargo.toml` is the config file for `cargo` for this project (`foo`). If you
+look inside it, you should see something like this:
+
+```toml
+[package]
+name = "foo"
+version = "0.1.0"
+authors = ["mark"]
+
+[dependencies]
+```
+
+The `name` field under `[package]` determines the name of the project. This is
+used by `crates.io` if you publish the crate (more later). It is also the name
+of the output binary when you compile.
+
+The `version` field is a crate version number using [Semantic
+Versioning](http://semver.org/).
+
+The `authors` field is a list of authors used when publishing the crate.
+
+The `[dependencies]` section lets you add dependencies for your project.
+
+For example, suppose that we want our program to have a great CLI. You can find
+lots of great packages on [crates.io](https://crates.io) (the official Rust
+package registry). One popular choice is [clap](https://crates.io/crates/clap).
+As of this writing, the most recent published version of `clap` is `2.27.1`. To
+add a dependency to our program, we can simply add the following to our
+`Cargo.toml` under `[dependencies]`: `clap = "2.27.1"`. And that's it! You can start using
+`clap` in your program.
+
+`cargo` also supports [other types of dependencies][dependencies]. Here is just
+a small sampling:
+
+```toml
+[package]
+name = "foo"
+version = "0.1.0"
+authors = ["mark"]
+
+[dependencies]
+clap = "2.27.1" # from crates.io
+rand = { git = "https://github.com/rust-lang-nursery/rand" } # from online repo
+bar = { path = "../bar" } # from a path in the local filesystem
+```
+
+`cargo` is more than a dependency manager. All of the available
+configuration options are listed in the [format specification][manifest] of
+`Cargo.toml`.
+
+To build our project we can execute `cargo build` anywhere in the project
+directory (including subdirectories!). We can also do `cargo run` to build and
+run. Notice that these commands will resolve all dependencies, download crates
+if needed, and build everything, including your crate. (Note that it only
+rebuilds what it has not already built, similar to `make`).
+
+Voila! That's all there is to it!
+
+
+[manifest]: https://doc.rust-lang.org/cargo/reference/manifest.html
+[dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
diff --git a/src/doc/rust-by-example/src/cargo/test.md b/src/doc/rust-by-example/src/cargo/test.md
new file mode 100644
index 000000000..f2af48db5
--- /dev/null
+++ b/src/doc/rust-by-example/src/cargo/test.md
@@ -0,0 +1,154 @@
+# Testing
+
+As we know testing is integral to any piece of software! Rust has first-class
+support for unit and integration testing ([see this
+chapter](https://doc.rust-lang.org/book/ch11-00-testing.html) in
+TRPL).
+
+From the testing chapters linked above, we see how to write unit tests and
+integration tests. Organizationally, we can place unit tests in the modules they
+test and integration tests in their own `tests/` directory:
+
+```txt
+foo
+├── Cargo.toml
+├── src
+│ └── main.rs
+│ └── lib.rs
+└── tests
+ ├── my_test.rs
+ └── my_other_test.rs
+```
+
+Each file in `tests` is a separate
+[integration test](https://doc.rust-lang.org/book/ch11-03-test-organization.html#integration-tests),
+i.e. a test that is meant to test your library as if it were being called from a dependent
+crate.
+
+The [Testing][testing] chapter elaborates on the three different testing styles:
+[Unit][unit_testing], [Doc][doc_testing], and [Integration][integration_testing].
+
+`cargo` naturally provides an easy way to run all of your tests!
+
+```shell
+$ cargo test
+```
+
+You should see output like this:
+
+```shell
+$ cargo test
+ Compiling blah v0.1.0 (file:///nobackup/blah)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.89 secs
+ Running target/debug/deps/blah-d3b32b97275ec472
+
+running 3 tests
+test test_bar ... ok
+test test_baz ... ok
+test test_foo_bar ... ok
+test test_foo ... ok
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+You can also run tests whose name matches a pattern:
+
+```shell
+$ cargo test test_foo
+```
+
+```shell
+$ cargo test test_foo
+ Compiling blah v0.1.0 (file:///nobackup/blah)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.35 secs
+ Running target/debug/deps/blah-d3b32b97275ec472
+
+running 2 tests
+test test_foo ... ok
+test test_foo_bar ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out
+```
+
+One word of caution: Cargo may run multiple tests concurrently, so make sure
+that they don't race with each other.
+
+One example of this concurrency causing issues is if two tests output to a
+file, such as below:
+
+```rust
+#[cfg(test)]
+mod tests {
+ // Import the necessary modules
+ use std::fs::OpenOptions;
+ use std::io::Write;
+
+ // This test writes to a file
+ #[test]
+ fn test_file() {
+ // Opens the file ferris.txt or creates one if it doesn't exist.
+ let mut file = OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open("ferris.txt")
+ .expect("Failed to open ferris.txt");
+
+ // Print "Ferris" 5 times.
+ for _ in 0..5 {
+ file.write_all("Ferris\n".as_bytes())
+ .expect("Could not write to ferris.txt");
+ }
+ }
+
+ // This test tries to write to the same file
+ #[test]
+ fn test_file_also() {
+ // Opens the file ferris.txt or creates one if it doesn't exist.
+ let mut file = OpenOptions::new()
+ .append(true)
+ .create(true)
+ .open("ferris.txt")
+ .expect("Failed to open ferris.txt");
+
+ // Print "Corro" 5 times.
+ for _ in 0..5 {
+ file.write_all("Corro\n".as_bytes())
+ .expect("Could not write to ferris.txt");
+ }
+ }
+}
+```
+
+Although the intent is to get the following:
+```shell
+$ cat ferris.txt
+Ferris
+Ferris
+Ferris
+Ferris
+Ferris
+Corro
+Corro
+Corro
+Corro
+Corro
+```
+What actually gets put into `ferris.txt` is this:
+```shell
+$ cargo test test_foo
+Corro
+Ferris
+Corro
+Ferris
+Corro
+Ferris
+Corro
+Ferris
+Corro
+Ferris
+```
+
+[testing]: ../testing.md
+[unit_testing]: ../testing/unit_testing.md
+[integration_testing]: ../testing/integration_testing.md
+[doc_testing]: ../testing/doc_testing.md
diff --git a/src/doc/rust-by-example/src/compatibility.md b/src/doc/rust-by-example/src/compatibility.md
new file mode 100644
index 000000000..00424ceb2
--- /dev/null
+++ b/src/doc/rust-by-example/src/compatibility.md
@@ -0,0 +1,7 @@
+# Compatibility
+
+The Rust language is fastly evolving, and because of this certain compatibility
+issues can arise, despite efforts to ensure forwards-compatibility wherever
+possible.
+
+* [Raw identifiers](compatibility/raw_identifiers.md)
diff --git a/src/doc/rust-by-example/src/compatibility/raw_identifiers.md b/src/doc/rust-by-example/src/compatibility/raw_identifiers.md
new file mode 100644
index 000000000..eb42cf645
--- /dev/null
+++ b/src/doc/rust-by-example/src/compatibility/raw_identifiers.md
@@ -0,0 +1,42 @@
+# Raw identifiers
+
+Rust, like many programming languages, has the concept of "keywords".
+These identifiers mean something to the language, and so you cannot use them in
+places like variable names, function names, and other places.
+Raw identifiers let you use keywords where they would not normally be allowed.
+This is particularly useful when Rust introduces new keywords, and a library
+using an older edition of Rust has a variable or function with the same name
+as a keyword introduced in a newer edition.
+
+For example, consider a crate `foo` compiled with the 2015 edition of Rust that
+exports a function named `try`. This keyword is reserved for a new feature in
+the 2018 edition, so without raw identifiers, we would have no way to name the
+function.
+
+```rust,ignore
+extern crate foo;
+
+fn main() {
+ foo::try();
+}
+```
+
+You'll get this error:
+
+```text
+error: expected identifier, found keyword `try`
+ --> src/main.rs:4:4
+ |
+4 | foo::try();
+ | ^^^ expected identifier, found keyword
+```
+
+You can write this with a raw identifier:
+
+```rust,ignore
+extern crate foo;
+
+fn main() {
+ foo::r#try();
+}
+```
diff --git a/src/doc/rust-by-example/src/conversion.md b/src/doc/rust-by-example/src/conversion.md
new file mode 100644
index 000000000..52a96d06c
--- /dev/null
+++ b/src/doc/rust-by-example/src/conversion.md
@@ -0,0 +1,14 @@
+# Conversion
+
+Primitive types can be converted to each other through [casting].
+
+Rust addresses conversion between custom types (i.e., `struct` and `enum`)
+by the use of [traits]. The generic
+conversions will use the [`From`] and [`Into`] traits. However there are more
+specific ones for the more common cases, in particular when converting to and
+from `String`s.
+
+[casting]: types/cast.md
+[traits]: trait.md
+[`From`]: https://doc.rust-lang.org/std/convert/trait.From.html
+[`Into`]: https://doc.rust-lang.org/std/convert/trait.Into.html
diff --git a/src/doc/rust-by-example/src/conversion/from_into.md b/src/doc/rust-by-example/src/conversion/from_into.md
new file mode 100644
index 000000000..266d10f28
--- /dev/null
+++ b/src/doc/rust-by-example/src/conversion/from_into.md
@@ -0,0 +1,76 @@
+# `From` and `Into`
+
+The [`From`] and [`Into`] traits are inherently linked, and this is actually part of
+its implementation. If you are able to convert type A from type B, then it
+should be easy to believe that we should be able to convert type B to type A.
+
+## `From`
+
+The [`From`] trait allows for a type to define how to create itself from another
+type, hence providing a very simple mechanism for converting between several
+types. There are numerous implementations of this trait within the standard
+library for conversion of primitive and common types.
+
+For example we can easily convert a `str` into a `String`
+
+```rust
+let my_str = "hello";
+let my_string = String::from(my_str);
+```
+
+We can do similar for defining a conversion for our own type.
+
+```rust,editable
+use std::convert::From;
+
+#[derive(Debug)]
+struct Number {
+ value: i32,
+}
+
+impl From<i32> for Number {
+ fn from(item: i32) -> Self {
+ Number { value: item }
+ }
+}
+
+fn main() {
+ let num = Number::from(30);
+ println!("My number is {:?}", num);
+}
+```
+
+## `Into`
+
+The [`Into`] trait is simply the reciprocal of the `From` trait. That is, if you
+have implemented the `From` trait for your type, `Into` will call it when
+necessary.
+
+Using the `Into` trait will typically require specification of the type to
+convert into as the compiler is unable to determine this most of the time.
+However this is a small trade-off considering we get the functionality for free.
+
+```rust,editable
+use std::convert::From;
+
+#[derive(Debug)]
+struct Number {
+ value: i32,
+}
+
+impl From<i32> for Number {
+ fn from(item: i32) -> Self {
+ Number { value: item }
+ }
+}
+
+fn main() {
+ let int = 5;
+ // Try removing the type declaration
+ let num: Number = int.into();
+ println!("My number is {:?}", num);
+}
+```
+
+[`From`]: https://doc.rust-lang.org/std/convert/trait.From.html
+[`Into`]: https://doc.rust-lang.org/std/convert/trait.Into.html
diff --git a/src/doc/rust-by-example/src/conversion/string.md b/src/doc/rust-by-example/src/conversion/string.md
new file mode 100644
index 000000000..9a17a2ce6
--- /dev/null
+++ b/src/doc/rust-by-example/src/conversion/string.md
@@ -0,0 +1,55 @@
+# To and from Strings
+
+## Converting to String
+
+To convert any type to a `String` is as simple as implementing the [`ToString`]
+trait for the type. Rather than doing so directly, you should implement the
+[`fmt::Display`][Display] trait which automagically provides [`ToString`] and
+also allows printing the type as discussed in the section on [`print!`][print].
+
+```rust,editable
+use std::fmt;
+
+struct Circle {
+ radius: i32
+}
+
+impl fmt::Display for Circle {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "Circle of radius {}", self.radius)
+ }
+}
+
+fn main() {
+ let circle = Circle { radius: 6 };
+ println!("{}", circle.to_string());
+}
+```
+
+## Parsing a String
+
+One of the more common types to convert a string into is a number. The idiomatic
+approach to this is to use the [`parse`] function and either to arrange for
+type inference or to specify the type to parse using the 'turbofish' syntax.
+Both alternatives are shown in the following example.
+
+This will convert the string into the type specified as long as the [`FromStr`]
+trait is implemented for that type. This is implemented for numerous types
+within the standard library. To obtain this functionality on a user defined type
+simply implement the [`FromStr`] trait for that type.
+
+```rust,editable
+fn main() {
+ let parsed: i32 = "5".parse().unwrap();
+ let turbo_parsed = "10".parse::<i32>().unwrap();
+
+ let sum = parsed + turbo_parsed;
+ println!("Sum: {:?}", sum);
+}
+```
+
+[`ToString`]: https://doc.rust-lang.org/std/string/trait.ToString.html
+[Display]: https://doc.rust-lang.org/std/fmt/trait.Display.html
+[print]: ../hello/print.md
+[`parse`]: https://doc.rust-lang.org/std/primitive.str.html#method.parse
+[`FromStr`]: https://doc.rust-lang.org/std/str/trait.FromStr.html
diff --git a/src/doc/rust-by-example/src/conversion/try_from_try_into.md b/src/doc/rust-by-example/src/conversion/try_from_try_into.md
new file mode 100644
index 000000000..ac62ad154
--- /dev/null
+++ b/src/doc/rust-by-example/src/conversion/try_from_try_into.md
@@ -0,0 +1,45 @@
+# `TryFrom` and `TryInto`
+
+Similar to [`From` and `Into`][from-into], [`TryFrom`] and [`TryInto`] are
+generic traits for converting between types. Unlike `From`/`Into`, the
+`TryFrom`/`TryInto` traits are used for fallible conversions, and as such,
+return [`Result`]s.
+
+[from-into]: from_into.html
+[`TryFrom`]: https://doc.rust-lang.org/std/convert/trait.TryFrom.html
+[`TryInto`]: https://doc.rust-lang.org/std/convert/trait.TryInto.html
+[`Result`]: https://doc.rust-lang.org/std/result/enum.Result.html
+
+```rust,editable
+use std::convert::TryFrom;
+use std::convert::TryInto;
+
+#[derive(Debug, PartialEq)]
+struct EvenNumber(i32);
+
+impl TryFrom<i32> for EvenNumber {
+ type Error = ();
+
+ fn try_from(value: i32) -> Result<Self, Self::Error> {
+ if value % 2 == 0 {
+ Ok(EvenNumber(value))
+ } else {
+ Err(())
+ }
+ }
+}
+
+fn main() {
+ // TryFrom
+
+ assert_eq!(EvenNumber::try_from(8), Ok(EvenNumber(8)));
+ assert_eq!(EvenNumber::try_from(5), Err(()));
+
+ // TryInto
+
+ let result: Result<EvenNumber, ()> = 8i32.try_into();
+ assert_eq!(result, Ok(EvenNumber(8)));
+ let result: Result<EvenNumber, ()> = 5i32.try_into();
+ assert_eq!(result, Err(()));
+}
+```
diff --git a/src/doc/rust-by-example/src/crates.md b/src/doc/rust-by-example/src/crates.md
new file mode 100644
index 000000000..b954eec6c
--- /dev/null
+++ b/src/doc/rust-by-example/src/crates.md
@@ -0,0 +1,12 @@
+# Crates
+
+A crate is a compilation unit in Rust. Whenever `rustc some_file.rs` is called,
+`some_file.rs` is treated as the *crate file*. If `some_file.rs` has `mod`
+declarations in it, then the contents of the module files would be inserted in
+places where `mod` declarations in the crate file are found, *before* running
+the compiler over it. In other words, modules do *not* get compiled
+individually, only crates get compiled.
+
+A crate can be compiled into a binary or into a library. By default, `rustc`
+will produce a binary from a crate. This behavior can be overridden by passing
+the `--crate-type` flag to `lib`.
diff --git a/src/doc/rust-by-example/src/crates/lib.md b/src/doc/rust-by-example/src/crates/lib.md
new file mode 100644
index 000000000..44593f3bb
--- /dev/null
+++ b/src/doc/rust-by-example/src/crates/lib.md
@@ -0,0 +1,32 @@
+# Creating a Library
+
+Let's create a library, and then see how to link it to another crate.
+
+```rust,ignore
+pub fn public_function() {
+ println!("called rary's `public_function()`");
+}
+
+fn private_function() {
+ println!("called rary's `private_function()`");
+}
+
+pub fn indirect_access() {
+ print!("called rary's `indirect_access()`, that\n> ");
+
+ private_function();
+}
+```
+
+```shell
+$ rustc --crate-type=lib rary.rs
+$ ls lib*
+library.rlib
+```
+
+Libraries get prefixed with "lib", and by default they get named after their
+crate file, but this default name can be overridden by passing
+the `--crate-name` option to `rustc` or by using the [`crate_name`
+attribute][crate-name].
+
+[crate-name]: ../attribute/crate.md \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/crates/using_lib.md b/src/doc/rust-by-example/src/crates/using_lib.md
new file mode 100644
index 000000000..102080700
--- /dev/null
+++ b/src/doc/rust-by-example/src/crates/using_lib.md
@@ -0,0 +1,27 @@
+# Using a Library
+
+To link a crate to this new library you may use `rustc`'s `--extern` flag. All
+of its items will then be imported under a module named the same as the library.
+This module generally behaves the same way as any other module.
+
+```rust,ignore
+// extern crate rary; // May be required for Rust 2015 edition or earlier
+
+fn main() {
+ rary::public_function();
+
+ // Error! `private_function` is private
+ //rary::private_function();
+
+ rary::indirect_access();
+}
+```
+
+```txt
+# Where library.rlib is the path to the compiled library, assumed that it's
+# in the same directory here:
+$ rustc executable.rs --extern rary=library.rlib --edition=2018 && ./executable
+called rary's `public_function()`
+called rary's `indirect_access()`, that
+> called rary's `private_function()`
+```
diff --git a/src/doc/rust-by-example/src/custom_types.md b/src/doc/rust-by-example/src/custom_types.md
new file mode 100644
index 000000000..20a408b2e
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types.md
@@ -0,0 +1,8 @@
+# Custom Types
+
+Rust custom data types are formed mainly through the two keywords:
+
+* `struct`: define a structure
+* `enum`: define an enumeration
+
+Constants can also be created via the `const` and `static` keywords. \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/custom_types/constants.md b/src/doc/rust-by-example/src/custom_types/constants.md
new file mode 100644
index 000000000..8878ba834
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types/constants.md
@@ -0,0 +1,42 @@
+# constants
+
+Rust has two different types of constants which can be declared in any scope
+including global. Both require explicit type annotation:
+
+* `const`: An unchangeable value (the common case).
+* `static`: A possibly `mut`able variable with [`'static`][static] lifetime.
+ The static lifetime is inferred and does not have to be specified.
+ Accessing or modifying a mutable static variable is [`unsafe`][unsafe].
+
+```rust,editable,ignore,mdbook-runnable
+// Globals are declared outside all other scopes.
+static LANGUAGE: &str = "Rust";
+const THRESHOLD: i32 = 10;
+
+fn is_big(n: i32) -> bool {
+ // Access constant in some function
+ n > THRESHOLD
+}
+
+fn main() {
+ let n = 16;
+
+ // Access constant in the main thread
+ println!("This is {}", LANGUAGE);
+ println!("The threshold is {}", THRESHOLD);
+ println!("{} is {}", n, if is_big(n) { "big" } else { "small" });
+
+ // Error! Cannot modify a `const`.
+ THRESHOLD = 5;
+ // FIXME ^ Comment out this line
+}
+```
+
+### See also:
+
+[The `const`/`static` RFC](
+https://github.com/rust-lang/rfcs/blob/master/text/0246-const-vs-static.md),
+[`'static` lifetime][static]
+
+[static]: ../scope/lifetime/static_lifetime.md
+[unsafe]: ../unsafe.md
diff --git a/src/doc/rust-by-example/src/custom_types/enum.md b/src/doc/rust-by-example/src/custom_types/enum.md
new file mode 100644
index 000000000..e861df9bf
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types/enum.md
@@ -0,0 +1,109 @@
+# Enums
+
+The `enum` keyword allows the creation of a type which may be one of a few
+different variants. Any variant which is valid as a `struct` is also valid as
+an `enum`.
+
+```rust,editable
+// Create an `enum` to classify a web event. Note how both
+// names and type information together specify the variant:
+// `PageLoad != PageUnload` and `KeyPress(char) != Paste(String)`.
+// Each is different and independent.
+enum WebEvent {
+ // An `enum` may either be `unit-like`,
+ PageLoad,
+ PageUnload,
+ // like tuple structs,
+ KeyPress(char),
+ Paste(String),
+ // or c-like structures.
+ Click { x: i64, y: i64 },
+}
+
+// A function which takes a `WebEvent` enum as an argument and
+// returns nothing.
+fn inspect(event: WebEvent) {
+ match event {
+ WebEvent::PageLoad => println!("page loaded"),
+ WebEvent::PageUnload => println!("page unloaded"),
+ // Destructure `c` from inside the `enum`.
+ WebEvent::KeyPress(c) => println!("pressed '{}'.", c),
+ WebEvent::Paste(s) => println!("pasted \"{}\".", s),
+ // Destructure `Click` into `x` and `y`.
+ WebEvent::Click { x, y } => {
+ println!("clicked at x={}, y={}.", x, y);
+ },
+ }
+}
+
+fn main() {
+ let pressed = WebEvent::KeyPress('x');
+ // `to_owned()` creates an owned `String` from a string slice.
+ let pasted = WebEvent::Paste("my text".to_owned());
+ let click = WebEvent::Click { x: 20, y: 80 };
+ let load = WebEvent::PageLoad;
+ let unload = WebEvent::PageUnload;
+
+ inspect(pressed);
+ inspect(pasted);
+ inspect(click);
+ inspect(load);
+ inspect(unload);
+}
+
+```
+
+## Type aliases
+
+If you use a type alias, you can refer to each enum variant via its alias.
+This might be useful if the enum's name is too long or too generic, and you
+want to rename it.
+
+```rust,editable
+enum VeryVerboseEnumOfThingsToDoWithNumbers {
+ Add,
+ Subtract,
+}
+
+// Creates a type alias
+type Operations = VeryVerboseEnumOfThingsToDoWithNumbers;
+
+fn main() {
+ // We can refer to each variant via its alias, not its long and inconvenient
+ // name.
+ let x = Operations::Add;
+}
+```
+
+The most common place you'll see this is in `impl` blocks using the `Self` alias.
+
+```rust,editable
+enum VeryVerboseEnumOfThingsToDoWithNumbers {
+ Add,
+ Subtract,
+}
+
+impl VeryVerboseEnumOfThingsToDoWithNumbers {
+ fn run(&self, x: i32, y: i32) -> i32 {
+ match self {
+ Self::Add => x + y,
+ Self::Subtract => x - y,
+ }
+ }
+}
+```
+
+To learn more about enums and type aliases, you can read the
+[stabilization report][aliasreport] from when this feature was stabilized into
+Rust.
+
+### See also:
+
+[`match`][match], [`fn`][fn], and [`String`][str], ["Type alias enum variants" RFC][type_alias_rfc]
+
+[c_struct]: https://en.wikipedia.org/wiki/Struct_(C_programming_language)
+[match]: ../flow_control/match.md
+[fn]: ../fn.md
+[str]: ../std/str.md
+[aliasreport]: https://github.com/rust-lang/rust/pull/61682/#issuecomment-502472847
+[type_alias_rfc]: https://rust-lang.github.io/rfcs/2338-type-alias-enum-variants.html
diff --git a/src/doc/rust-by-example/src/custom_types/enum/c_like.md b/src/doc/rust-by-example/src/custom_types/enum/c_like.md
new file mode 100644
index 000000000..65f832bef
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types/enum/c_like.md
@@ -0,0 +1,37 @@
+# C-like
+
+`enum` can also be used as C-like enums.
+
+```rust,editable
+// An attribute to hide warnings for unused code.
+#![allow(dead_code)]
+
+// enum with implicit discriminator (starts at 0)
+enum Number {
+ Zero,
+ One,
+ Two,
+}
+
+// enum with explicit discriminator
+enum Color {
+ Red = 0xff0000,
+ Green = 0x00ff00,
+ Blue = 0x0000ff,
+}
+
+fn main() {
+ // `enums` can be cast as integers.
+ println!("zero is {}", Number::Zero as i32);
+ println!("one is {}", Number::One as i32);
+
+ println!("roses are #{:06x}", Color::Red as i32);
+ println!("violets are #{:06x}", Color::Blue as i32);
+}
+```
+
+### See also:
+
+[casting][cast]
+
+[cast]: ../../types/cast.md
diff --git a/src/doc/rust-by-example/src/custom_types/enum/enum_use.md b/src/doc/rust-by-example/src/custom_types/enum/enum_use.md
new file mode 100644
index 000000000..cf75c67ba
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types/enum/enum_use.md
@@ -0,0 +1,50 @@
+# use
+
+The `use` declaration can be used so manual scoping isn't needed:
+
+```rust,editable
+// An attribute to hide warnings for unused code.
+#![allow(dead_code)]
+
+enum Status {
+ Rich,
+ Poor,
+}
+
+enum Work {
+ Civilian,
+ Soldier,
+}
+
+fn main() {
+ // Explicitly `use` each name so they are available without
+ // manual scoping.
+ use crate::Status::{Poor, Rich};
+ // Automatically `use` each name inside `Work`.
+ use crate::Work::*;
+
+ // Equivalent to `Status::Poor`.
+ let status = Poor;
+ // Equivalent to `Work::Civilian`.
+ let work = Civilian;
+
+ match status {
+ // Note the lack of scoping because of the explicit `use` above.
+ Rich => println!("The rich have lots of money!"),
+ Poor => println!("The poor have no money..."),
+ }
+
+ match work {
+ // Note again the lack of scoping.
+ Civilian => println!("Civilians work!"),
+ Soldier => println!("Soldiers fight!"),
+ }
+}
+```
+
+### See also:
+
+[`match`][match] and [`use`][use]
+
+[use]: ../../mod/use.md
+[match]: ../../flow_control/match.md
diff --git a/src/doc/rust-by-example/src/custom_types/enum/testcase_linked_list.md b/src/doc/rust-by-example/src/custom_types/enum/testcase_linked_list.md
new file mode 100644
index 000000000..cd4e3e620
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types/enum/testcase_linked_list.md
@@ -0,0 +1,82 @@
+# Testcase: linked-list
+
+A common way to implement a linked-list is via `enums`:
+
+```rust,editable
+use crate::List::*;
+
+enum List {
+ // Cons: Tuple struct that wraps an element and a pointer to the next node
+ Cons(u32, Box<List>),
+ // Nil: A node that signifies the end of the linked list
+ Nil,
+}
+
+// Methods can be attached to an enum
+impl List {
+ // Create an empty list
+ fn new() -> List {
+ // `Nil` has type `List`
+ Nil
+ }
+
+ // Consume a list, and return the same list with a new element at its front
+ fn prepend(self, elem: u32) -> List {
+ // `Cons` also has type List
+ Cons(elem, Box::new(self))
+ }
+
+ // Return the length of the list
+ fn len(&self) -> u32 {
+ // `self` has to be matched, because the behavior of this method
+ // depends on the variant of `self`
+ // `self` has type `&List`, and `*self` has type `List`, matching on a
+ // concrete type `T` is preferred over a match on a reference `&T`
+ // after Rust 2018 you can use self here and tail (with no ref) below as well,
+ // rust will infer &s and ref tail.
+ // See https://doc.rust-lang.org/edition-guide/rust-2018/ownership-and-lifetimes/default-match-bindings.html
+ match *self {
+ // Can't take ownership of the tail, because `self` is borrowed;
+ // instead take a reference to the tail
+ Cons(_, ref tail) => 1 + tail.len(),
+ // Base Case: An empty list has zero length
+ Nil => 0
+ }
+ }
+
+ // Return representation of the list as a (heap allocated) string
+ fn stringify(&self) -> String {
+ match *self {
+ Cons(head, ref tail) => {
+ // `format!` is similar to `print!`, but returns a heap
+ // allocated string instead of printing to the console
+ format!("{}, {}", head, tail.stringify())
+ },
+ Nil => {
+ format!("Nil")
+ },
+ }
+ }
+}
+
+fn main() {
+ // Create an empty linked list
+ let mut list = List::new();
+
+ // Prepend some elements
+ list = list.prepend(1);
+ list = list.prepend(2);
+ list = list.prepend(3);
+
+ // Show the final state of the list
+ println!("linked list has length: {}", list.len());
+ println!("{}", list.stringify());
+}
+```
+
+### See also:
+
+[`Box`][box] and [methods][methods]
+
+[box]: ../../std/box.md
+[methods]: ../../fn/methods.md
diff --git a/src/doc/rust-by-example/src/custom_types/structs.md b/src/doc/rust-by-example/src/custom_types/structs.md
new file mode 100644
index 000000000..26367a0a6
--- /dev/null
+++ b/src/doc/rust-by-example/src/custom_types/structs.md
@@ -0,0 +1,102 @@
+# Structures
+
+There are three types of structures ("structs") that can be created using the
+`struct` keyword:
+
+* Tuple structs, which are, basically, named tuples.
+* The classic [C structs][c_struct]
+* Unit structs, which are field-less, are useful for generics.
+
+```rust,editable
+// An attribute to hide warnings for unused code.
+#![allow(dead_code)]
+
+#[derive(Debug)]
+struct Person {
+ name: String,
+ age: u8,
+}
+
+// A unit struct
+struct Unit;
+
+// A tuple struct
+struct Pair(i32, f32);
+
+// A struct with two fields
+struct Point {
+ x: f32,
+ y: f32,
+}
+
+// Structs can be reused as fields of another struct
+struct Rectangle {
+ // A rectangle can be specified by where the top left and bottom right
+ // corners are in space.
+ top_left: Point,
+ bottom_right: Point,
+}
+
+fn main() {
+ // Create struct with field init shorthand
+ let name = String::from("Peter");
+ let age = 27;
+ let peter = Person { name, age };
+
+ // Print debug struct
+ println!("{:?}", peter);
+
+ // Instantiate a `Point`
+ let point: Point = Point { x: 10.3, y: 0.4 };
+
+ // Access the fields of the point
+ println!("point coordinates: ({}, {})", point.x, point.y);
+
+ // Make a new point by using struct update syntax to use the fields of our
+ // other one
+ let bottom_right = Point { x: 5.2, ..point };
+
+ // `bottom_right.y` will be the same as `point.y` because we used that field
+ // from `point`
+ println!("second point: ({}, {})", bottom_right.x, bottom_right.y);
+
+ // Destructure the point using a `let` binding
+ let Point { x: left_edge, y: top_edge } = point;
+
+ let _rectangle = Rectangle {
+ // struct instantiation is an expression too
+ top_left: Point { x: left_edge, y: top_edge },
+ bottom_right: bottom_right,
+ };
+
+ // Instantiate a unit struct
+ let _unit = Unit;
+
+ // Instantiate a tuple struct
+ let pair = Pair(1, 0.1);
+
+ // Access the fields of a tuple struct
+ println!("pair contains {:?} and {:?}", pair.0, pair.1);
+
+ // Destructure a tuple struct
+ let Pair(integer, decimal) = pair;
+
+ println!("pair contains {:?} and {:?}", integer, decimal);
+}
+```
+
+### Activity
+
+1. Add a function `rect_area` which calculates the area of a `Rectangle` (try
+ using nested destructuring).
+2. Add a function `square` which takes a `Point` and a `f32` as arguments, and
+ returns a `Rectangle` with its top left corner on the point, and a width and
+ height corresponding to the `f32`.
+
+### See also
+
+[`attributes`][attributes], and [destructuring][destructuring]
+
+[attributes]: ../attribute.md
+[c_struct]: https://en.wikipedia.org/wiki/Struct_(C_programming_language)
+[destructuring]: ../flow_control/match/destructuring.md
diff --git a/src/doc/rust-by-example/src/error.md b/src/doc/rust-by-example/src/error.md
new file mode 100644
index 000000000..ea6c1b17f
--- /dev/null
+++ b/src/doc/rust-by-example/src/error.md
@@ -0,0 +1,31 @@
+# Error handling
+
+Error handling is the process of handling the possibility of failure. For
+example, failing to read a file and then continuing to use that *bad* input
+would clearly be problematic. Noticing and explicitly managing those errors
+saves the rest of the program from various pitfalls.
+
+There are various ways to deal with errors in Rust, which are described in the
+following subchapters. They all have more or less subtle differences and different
+use cases. As a rule of thumb:
+
+An explicit `panic` is mainly useful for tests and dealing with unrecoverable errors.
+For prototyping it can be useful, for example when dealing with functions that
+haven't been implemented yet, but in those cases the more descriptive `unimplemented`
+is better. In tests `panic` is a reasonable way to explicitly fail.
+
+The `Option` type is for when a value is optional or when the lack of a value is
+not an error condition. For example the parent of a directory - `/` and `C:` don't
+have one. When dealing with `Option`s, `unwrap` is fine for prototyping and cases
+where it's absolutely certain that there is guaranteed to be a value. However `expect`
+is more useful since it lets you specify an error message in case something goes
+wrong anyway.
+
+When there is a chance that things do go wrong and the caller has to deal with the
+problem, use `Result`. You can `unwrap` and `expect` them as well (please don't
+do that unless it's a test or quick prototype).
+
+For a more rigorous discussion of error handling, refer to the error
+handling section in the [official book][book].
+
+[book]: https://doc.rust-lang.org/book/ch09-00-error-handling.html
diff --git a/src/doc/rust-by-example/src/error/abort_unwind.md b/src/doc/rust-by-example/src/error/abort_unwind.md
new file mode 100644
index 000000000..d38af3ce1
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/abort_unwind.md
@@ -0,0 +1,51 @@
+# `abort` and `unwind`
+
+The previous section illustrates the error handling mechanism `panic`. Different code paths can be conditionally compiled based on the panic setting. The current values available are `unwind` and `abort`.
+
+
+Building on the prior lemonade example, we explicitly use the panic strategy to exercise different lines of code.
+
+```rust,editable,mdbook-runnable
+
+fn drink(beverage: &str) {
+ // You shouldn't drink too much sugary beverages.
+ if beverage == "lemonade" {
+ if cfg!(panic="abort"){ println!("This is not your party. Run!!!!");}
+ else{ println!("Spit it out!!!!");}
+ }
+ else{ println!("Some refreshing {} is all I need.", beverage); }
+}
+
+fn main() {
+ drink("water");
+ drink("lemonade");
+}
+```
+
+Here is another example focusing on rewriting `drink()` and explicitly use the `unwind` keyword.
+
+```rust,editable
+
+#[cfg(panic = "unwind")]
+fn ah(){ println!("Spit it out!!!!");}
+
+#[cfg(not(panic="unwind"))]
+fn ah(){ println!("This is not your party. Run!!!!");}
+
+fn drink(beverage: &str){
+ if beverage == "lemonade"{ ah();}
+ else{println!("Some refreshing {} is all I need.", beverage);}
+}
+
+fn main() {
+ drink("water");
+ drink("lemonade");
+}
+```
+
+The panic strategy can be set from the command line by using `abort` or `unwind`.
+
+```console
+rustc lemonade.rs -C panic=abort
+```
+
diff --git a/src/doc/rust-by-example/src/error/iter_result.md b/src/doc/rust-by-example/src/error/iter_result.md
new file mode 100644
index 000000000..e77e21ff6
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/iter_result.md
@@ -0,0 +1,100 @@
+# Iterating over `Result`s
+
+An `Iter::map` operation might fail, for example:
+
+```rust,editable
+fn main() {
+ let strings = vec!["tofu", "93", "18"];
+ let numbers: Vec<_> = strings
+ .into_iter()
+ .map(|s| s.parse::<i32>())
+ .collect();
+ println!("Results: {:?}", numbers);
+}
+```
+
+Let's step through strategies for handling this.
+
+## Ignore the failed items with `filter_map()`
+
+`filter_map` calls a function and filters out the results that are `None`.
+
+```rust,editable
+fn main() {
+ let strings = vec!["tofu", "93", "18"];
+ let numbers: Vec<_> = strings
+ .into_iter()
+ .filter_map(|s| s.parse::<i32>().ok())
+ .collect();
+ println!("Results: {:?}", numbers);
+}
+```
+
+## Collect the failed items with `map_err()` and `filter_map()`
+
+`map_err` calls a function with the error, so by adding that to the previous
+`filter_map` solution we can save them off to the side while iterating.
+
+```rust,editable
+fn main() {
+ let strings = vec!["42", "tofu", "93", "999", "18"];
+ let mut errors = vec![];
+ let numbers: Vec<_> = strings
+ .into_iter()
+ .map(|s| s.parse::<u8>())
+ .filter_map(|r| r.map_err(|e| errors.push(e)).ok())
+ .collect();
+ println!("Numbers: {:?}", numbers);
+ println!("Errors: {:?}", errors);
+}
+```
+
+## Fail the entire operation with `collect()`
+
+`Result` implements `FromIter` so that a vector of results (`Vec<Result<T, E>>`)
+can be turned into a result with a vector (`Result<Vec<T>, E>`). Once an
+`Result::Err` is found, the iteration will terminate.
+
+```rust,editable
+fn main() {
+ let strings = vec!["tofu", "93", "18"];
+ let numbers: Result<Vec<_>, _> = strings
+ .into_iter()
+ .map(|s| s.parse::<i32>())
+ .collect();
+ println!("Results: {:?}", numbers);
+}
+```
+
+This same technique can be used with `Option`.
+
+## Collect all valid values and failures with `partition()`
+
+```rust,editable
+fn main() {
+ let strings = vec!["tofu", "93", "18"];
+ let (numbers, errors): (Vec<_>, Vec<_>) = strings
+ .into_iter()
+ .map(|s| s.parse::<i32>())
+ .partition(Result::is_ok);
+ println!("Numbers: {:?}", numbers);
+ println!("Errors: {:?}", errors);
+}
+```
+
+When you look at the results, you'll note that everything is still wrapped in
+`Result`. A little more boilerplate is needed for this.
+
+```rust,editable
+fn main() {
+ let strings = vec!["tofu", "93", "18"];
+ let (numbers, errors): (Vec<_>, Vec<_>) = strings
+ .into_iter()
+ .map(|s| s.parse::<i32>())
+ .partition(Result::is_ok);
+ let numbers: Vec<_> = numbers.into_iter().map(Result::unwrap).collect();
+ let errors: Vec<_> = errors.into_iter().map(Result::unwrap_err).collect();
+ println!("Numbers: {:?}", numbers);
+ println!("Errors: {:?}", errors);
+}
+```
diff --git a/src/doc/rust-by-example/src/error/multiple_error_types.md b/src/doc/rust-by-example/src/error/multiple_error_types.md
new file mode 100644
index 000000000..610bbfcb8
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/multiple_error_types.md
@@ -0,0 +1,36 @@
+# Multiple error types
+
+The previous examples have always been very convenient; `Result`s interact
+with other `Result`s and `Option`s interact with other `Option`s.
+
+Sometimes an `Option` needs to interact with a `Result`, or a
+`Result<T, Error1>` needs to interact with a `Result<T, Error2>`. In those
+cases, we want to manage our different error types in a way that makes them
+composable and easy to interact with.
+
+In the following code, two instances of `unwrap` generate different error
+types. `Vec::first` returns an `Option`, while `parse::<i32>` returns a
+`Result<i32, ParseIntError>`:
+
+```rust,editable,ignore,mdbook-runnable
+fn double_first(vec: Vec<&str>) -> i32 {
+ let first = vec.first().unwrap(); // Generate error 1
+ 2 * first.parse::<i32>().unwrap() // Generate error 2
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ println!("The first doubled is {}", double_first(numbers));
+
+ println!("The first doubled is {}", double_first(empty));
+ // Error 1: the input vector is empty
+
+ println!("The first doubled is {}", double_first(strings));
+ // Error 2: the element doesn't parse to a number
+}
+```
+
+Over the next sections, we'll see several strategies for handling these kind of problems.
diff --git a/src/doc/rust-by-example/src/error/multiple_error_types/boxing_errors.md b/src/doc/rust-by-example/src/error/multiple_error_types/boxing_errors.md
new file mode 100644
index 000000000..84b0c41e5
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/multiple_error_types/boxing_errors.md
@@ -0,0 +1,64 @@
+# `Box`ing errors
+
+A way to write simple code while preserving the original errors is to [`Box`][box]
+them. The drawback is that the underlying error type is only known at runtime and not
+[statically determined][dynamic_dispatch].
+
+The stdlib helps in boxing our errors by having `Box` implement conversion from
+any type that implements the `Error` trait into the trait object `Box<Error>`,
+via [`From`][from].
+
+```rust,editable
+use std::error;
+use std::fmt;
+
+// Change the alias to `Box<error::Error>`.
+type Result<T> = std::result::Result<T, Box<dyn error::Error>>;
+
+#[derive(Debug, Clone)]
+struct EmptyVec;
+
+impl fmt::Display for EmptyVec {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "invalid first item to double")
+ }
+}
+
+impl error::Error for EmptyVec {}
+
+fn double_first(vec: Vec<&str>) -> Result<i32> {
+ vec.first()
+ .ok_or_else(|| EmptyVec.into()) // Converts to Box
+ .and_then(|s| {
+ s.parse::<i32>()
+ .map_err(|e| e.into()) // Converts to Box
+ .map(|i| 2 * i)
+ })
+}
+
+fn print(result: Result<i32>) {
+ match result {
+ Ok(n) => println!("The first doubled is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ print(double_first(numbers));
+ print(double_first(empty));
+ print(double_first(strings));
+}
+```
+
+### See also:
+
+[Dynamic dispatch][dynamic_dispatch] and [`Error` trait][error]
+
+[box]: https://doc.rust-lang.org/std/boxed/struct.Box.html
+[dynamic_dispatch]: https://doc.rust-lang.org/book/ch17-02-trait-objects.html#trait-objects-perform-dynamic-dispatch
+[error]: https://doc.rust-lang.org/std/error/trait.Error.html
+[from]: https://doc.rust-lang.org/std/convert/trait.From.html
diff --git a/src/doc/rust-by-example/src/error/multiple_error_types/define_error_type.md b/src/doc/rust-by-example/src/error/multiple_error_types/define_error_type.md
new file mode 100644
index 000000000..4c374276d
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/multiple_error_types/define_error_type.md
@@ -0,0 +1,68 @@
+# Defining an error type
+
+Sometimes it simplifies the code to mask all of the different errors with a
+single type of error. We'll show this with a custom error.
+
+Rust allows us to define our own error types. In general, a "good" error type:
+
+* Represents different errors with the same type
+* Presents nice error messages to the user
+* Is easy to compare with other types
+ - Good: `Err(EmptyVec)`
+ - Bad: `Err("Please use a vector with at least one element".to_owned())`
+* Can hold information about the error
+ - Good: `Err(BadChar(c, position))`
+ - Bad: `Err("+ cannot be used here".to_owned())`
+* Composes well with other errors
+
+```rust,editable
+use std::fmt;
+
+type Result<T> = std::result::Result<T, DoubleError>;
+
+// Define our error types. These may be customized for our error handling cases.
+// Now we will be able to write our own errors, defer to an underlying error
+// implementation, or do something in between.
+#[derive(Debug, Clone)]
+struct DoubleError;
+
+// Generation of an error is completely separate from how it is displayed.
+// There's no need to be concerned about cluttering complex logic with the display style.
+//
+// Note that we don't store any extra info about the errors. This means we can't state
+// which string failed to parse without modifying our types to carry that information.
+impl fmt::Display for DoubleError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "invalid first item to double")
+ }
+}
+
+fn double_first(vec: Vec<&str>) -> Result<i32> {
+ vec.first()
+ // Change the error to our new type.
+ .ok_or(DoubleError)
+ .and_then(|s| {
+ s.parse::<i32>()
+ // Update to the new error type here also.
+ .map_err(|_| DoubleError)
+ .map(|i| 2 * i)
+ })
+}
+
+fn print(result: Result<i32>) {
+ match result {
+ Ok(n) => println!("The first doubled is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ print(double_first(numbers));
+ print(double_first(empty));
+ print(double_first(strings));
+}
+```
diff --git a/src/doc/rust-by-example/src/error/multiple_error_types/option_result.md b/src/doc/rust-by-example/src/error/multiple_error_types/option_result.md
new file mode 100644
index 000000000..d2273f698
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/multiple_error_types/option_result.md
@@ -0,0 +1,56 @@
+# Pulling `Result`s out of `Option`s
+
+The most basic way of handling mixed error types is to just embed them in each
+other.
+
+```rust,editable
+use std::num::ParseIntError;
+
+fn double_first(vec: Vec<&str>) -> Option<Result<i32, ParseIntError>> {
+ vec.first().map(|first| {
+ first.parse::<i32>().map(|n| 2 * n)
+ })
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ println!("The first doubled is {:?}", double_first(numbers));
+
+ println!("The first doubled is {:?}", double_first(empty));
+ // Error 1: the input vector is empty
+
+ println!("The first doubled is {:?}", double_first(strings));
+ // Error 2: the element doesn't parse to a number
+}
+```
+
+There are times when we'll want to stop processing on errors (like with
+[`?`][enter_question_mark]) but keep going when the `Option` is `None`. A
+couple of combinators come in handy to swap the `Result` and `Option`.
+
+```rust,editable
+use std::num::ParseIntError;
+
+fn double_first(vec: Vec<&str>) -> Result<Option<i32>, ParseIntError> {
+ let opt = vec.first().map(|first| {
+ first.parse::<i32>().map(|n| 2 * n)
+ });
+
+ opt.map_or(Ok(None), |r| r.map(Some))
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ println!("The first doubled is {:?}", double_first(numbers));
+ println!("The first doubled is {:?}", double_first(empty));
+ println!("The first doubled is {:?}", double_first(strings));
+}
+```
+
+[enter_question_mark]: ../result/enter_question_mark.md
diff --git a/src/doc/rust-by-example/src/error/multiple_error_types/reenter_question_mark.md b/src/doc/rust-by-example/src/error/multiple_error_types/reenter_question_mark.md
new file mode 100644
index 000000000..61f80fc3e
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/multiple_error_types/reenter_question_mark.md
@@ -0,0 +1,79 @@
+# Other uses of `?`
+
+Notice in the previous example that our immediate reaction to calling
+`parse` is to `map` the error from a library error into a boxed
+error:
+
+```rust,ignore
+.and_then(|s| s.parse::<i32>()
+ .map_err(|e| e.into())
+```
+
+Since this is a simple and common operation, it would be convenient if it
+could be elided. Alas, because `and_then` is not sufficiently flexible, it
+cannot. However, we can instead use `?`.
+
+`?` was previously explained as either `unwrap` or `return Err(err)`.
+This is only mostly true. It actually means `unwrap` or
+`return Err(From::from(err))`. Since `From::from` is a conversion utility
+between different types, this means that if you `?` where the error is
+convertible to the return type, it will convert automatically.
+
+Here, we rewrite the previous example using `?`. As a result, the
+`map_err` will go away when `From::from` is implemented for our error type:
+
+```rust,editable
+use std::error;
+use std::fmt;
+
+// Change the alias to `Box<dyn error::Error>`.
+type Result<T> = std::result::Result<T, Box<dyn error::Error>>;
+
+#[derive(Debug)]
+struct EmptyVec;
+
+impl fmt::Display for EmptyVec {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "invalid first item to double")
+ }
+}
+
+impl error::Error for EmptyVec {}
+
+// The same structure as before but rather than chain all `Results`
+// and `Options` along, we `?` to get the inner value out immediately.
+fn double_first(vec: Vec<&str>) -> Result<i32> {
+ let first = vec.first().ok_or(EmptyVec)?;
+ let parsed = first.parse::<i32>()?;
+ Ok(2 * parsed)
+}
+
+fn print(result: Result<i32>) {
+ match result {
+ Ok(n) => println!("The first doubled is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ print(double_first(numbers));
+ print(double_first(empty));
+ print(double_first(strings));
+}
+```
+
+This is actually fairly clean now. Compared with the original `panic`, it
+is very similar to replacing the `unwrap` calls with `?` except that the
+return types are `Result`. As a result, they must be destructured at the
+top level.
+
+### See also:
+
+[`From::from`][from] and [`?`][q_mark]
+
+[from]: https://doc.rust-lang.org/std/convert/trait.From.html
+[q_mark]: https://doc.rust-lang.org/reference/expressions/operator-expr.html#the-question-mark-operator
diff --git a/src/doc/rust-by-example/src/error/multiple_error_types/wrap_error.md b/src/doc/rust-by-example/src/error/multiple_error_types/wrap_error.md
new file mode 100644
index 000000000..3da598493
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/multiple_error_types/wrap_error.md
@@ -0,0 +1,96 @@
+# Wrapping errors
+
+An alternative to boxing errors is to wrap them in your own error type.
+
+```rust,editable
+use std::error;
+use std::error::Error;
+use std::num::ParseIntError;
+use std::fmt;
+
+type Result<T> = std::result::Result<T, DoubleError>;
+
+#[derive(Debug)]
+enum DoubleError {
+ EmptyVec,
+ // We will defer to the parse error implementation for their error.
+ // Supplying extra info requires adding more data to the type.
+ Parse(ParseIntError),
+}
+
+impl fmt::Display for DoubleError {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ match *self {
+ DoubleError::EmptyVec =>
+ write!(f, "please use a vector with at least one element"),
+ // The wrapped error contains additional information and is available
+ // via the source() method.
+ DoubleError::Parse(..) =>
+ write!(f, "the provided string could not be parsed as int"),
+ }
+ }
+}
+
+impl error::Error for DoubleError {
+ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+ match *self {
+ DoubleError::EmptyVec => None,
+ // The cause is the underlying implementation error type. Is implicitly
+ // cast to the trait object `&error::Error`. This works because the
+ // underlying type already implements the `Error` trait.
+ DoubleError::Parse(ref e) => Some(e),
+ }
+ }
+}
+
+// Implement the conversion from `ParseIntError` to `DoubleError`.
+// This will be automatically called by `?` if a `ParseIntError`
+// needs to be converted into a `DoubleError`.
+impl From<ParseIntError> for DoubleError {
+ fn from(err: ParseIntError) -> DoubleError {
+ DoubleError::Parse(err)
+ }
+}
+
+fn double_first(vec: Vec<&str>) -> Result<i32> {
+ let first = vec.first().ok_or(DoubleError::EmptyVec)?;
+ // Here we implicitly use the `ParseIntError` implementation of `From` (which
+ // we defined above) in order to create a `DoubleError`.
+ let parsed = first.parse::<i32>()?;
+
+ Ok(2 * parsed)
+}
+
+fn print(result: Result<i32>) {
+ match result {
+ Ok(n) => println!("The first doubled is {}", n),
+ Err(e) => {
+ println!("Error: {}", e);
+ if let Some(source) = e.source() {
+ println!(" Caused by: {}", source);
+ }
+ },
+ }
+}
+
+fn main() {
+ let numbers = vec!["42", "93", "18"];
+ let empty = vec![];
+ let strings = vec!["tofu", "93", "18"];
+
+ print(double_first(numbers));
+ print(double_first(empty));
+ print(double_first(strings));
+}
+```
+
+This adds a bit more boilerplate for handling errors and might not be needed in
+all applications. There are some libraries that can take care of the boilerplate
+for you.
+
+### See also:
+
+[`From::from`][from] and [`Enums`][enums]
+
+[from]: https://doc.rust-lang.org/std/convert/trait.From.html
+[enums]: ../../custom_types/enum.md
diff --git a/src/doc/rust-by-example/src/error/option_unwrap.md b/src/doc/rust-by-example/src/error/option_unwrap.md
new file mode 100644
index 000000000..5192767fc
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/option_unwrap.md
@@ -0,0 +1,65 @@
+# `Option` & `unwrap`
+
+In the last example, we showed that we can induce program failure at will.
+We told our program to `panic` if we drink a sugary lemonade.
+But what if we expect _some_ drink but don't receive one?
+That case would be just as bad, so it needs to be handled!
+
+We *could* test this against the null string (`""`) as we do with a lemonade.
+Since we're using Rust, let's instead have the compiler point out cases
+where there's no drink.
+
+An `enum` called `Option<T>` in the `std` library is used when absence is a
+possibility. It manifests itself as one of two "options":
+
+* `Some(T)`: An element of type `T` was found
+* `None`: No element was found
+
+These cases can either be explicitly handled via `match` or implicitly with
+`unwrap`. Implicit handling will either return the inner element or `panic`.
+
+Note that it's possible to manually customize `panic` with [expect][expect],
+but `unwrap` otherwise leaves us with a less meaningful output than explicit
+handling. In the following example, explicit handling yields a more
+controlled result while retaining the option to `panic` if desired.
+
+```rust,editable,ignore,mdbook-runnable
+// The adult has seen it all, and can handle any drink well.
+// All drinks are handled explicitly using `match`.
+fn give_adult(drink: Option<&str>) {
+ // Specify a course of action for each case.
+ match drink {
+ Some("lemonade") => println!("Yuck! Too sugary."),
+ Some(inner) => println!("{}? How nice.", inner),
+ None => println!("No drink? Oh well."),
+ }
+}
+
+// Others will `panic` before drinking sugary drinks.
+// All drinks are handled implicitly using `unwrap`.
+fn drink(drink: Option<&str>) {
+ // `unwrap` returns a `panic` when it receives a `None`.
+ let inside = drink.unwrap();
+ if inside == "lemonade" { panic!("AAAaaaaa!!!!"); }
+
+ println!("I love {}s!!!!!", inside);
+}
+
+fn main() {
+ let water = Some("water");
+ let lemonade = Some("lemonade");
+ let void = None;
+
+ give_adult(water);
+ give_adult(lemonade);
+ give_adult(void);
+
+ let coffee = Some("coffee");
+ let nothing = None;
+
+ drink(coffee);
+ drink(nothing);
+}
+```
+
+[expect]: https://doc.rust-lang.org/std/option/enum.Option.html#method.expect
diff --git a/src/doc/rust-by-example/src/error/option_unwrap/and_then.md b/src/doc/rust-by-example/src/error/option_unwrap/and_then.md
new file mode 100644
index 000000000..c065f2043
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/option_unwrap/and_then.md
@@ -0,0 +1,76 @@
+# Combinators: `and_then`
+
+`map()` was described as a chainable way to simplify `match` statements.
+However, using `map()` on a function that returns an `Option<T>` results
+in the nested `Option<Option<T>>`. Chaining multiple calls together can
+then become confusing. That's where another combinator called `and_then()`,
+known in some languages as flatmap, comes in.
+
+`and_then()` calls its function input with the wrapped value and returns the result. If the `Option` is `None`, then it returns `None` instead.
+
+In the following example, `cookable_v2()` results in an `Option<Food>`.
+Using `map()` instead of `and_then()` would have given an
+`Option<Option<Food>>`, which is an invalid type for `eat()`.
+
+```rust,editable
+#![allow(dead_code)]
+
+#[derive(Debug)] enum Food { CordonBleu, Steak, Sushi }
+#[derive(Debug)] enum Day { Monday, Tuesday, Wednesday }
+
+// We don't have the ingredients to make Sushi.
+fn have_ingredients(food: Food) -> Option<Food> {
+ match food {
+ Food::Sushi => None,
+ _ => Some(food),
+ }
+}
+
+// We have the recipe for everything except Cordon Bleu.
+fn have_recipe(food: Food) -> Option<Food> {
+ match food {
+ Food::CordonBleu => None,
+ _ => Some(food),
+ }
+}
+
+// To make a dish, we need both the recipe and the ingredients.
+// We can represent the logic with a chain of `match`es:
+fn cookable_v1(food: Food) -> Option<Food> {
+ match have_recipe(food) {
+ None => None,
+ Some(food) => match have_ingredients(food) {
+ None => None,
+ Some(food) => Some(food),
+ },
+ }
+}
+
+// This can conveniently be rewritten more compactly with `and_then()`:
+fn cookable_v2(food: Food) -> Option<Food> {
+ have_recipe(food).and_then(have_ingredients)
+}
+
+fn eat(food: Food, day: Day) {
+ match cookable_v2(food) {
+ Some(food) => println!("Yay! On {:?} we get to eat {:?}.", day, food),
+ None => println!("Oh no. We don't get to eat on {:?}?", day),
+ }
+}
+
+fn main() {
+ let (cordon_bleu, steak, sushi) = (Food::CordonBleu, Food::Steak, Food::Sushi);
+
+ eat(cordon_bleu, Day::Monday);
+ eat(steak, Day::Tuesday);
+ eat(sushi, Day::Wednesday);
+}
+```
+
+### See also:
+
+[closures][closures], [`Option`][option], and [`Option::and_then()`][and_then]
+
+[closures]: ../../fn/closures.md
+[option]: https://doc.rust-lang.org/std/option/enum.Option.html
+[and_then]: https://doc.rust-lang.org/std/option/enum.Option.html#method.and_then
diff --git a/src/doc/rust-by-example/src/error/option_unwrap/defaults.md b/src/doc/rust-by-example/src/error/option_unwrap/defaults.md
new file mode 100644
index 000000000..c998ad9ad
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/option_unwrap/defaults.md
@@ -0,0 +1,123 @@
+# Unpacking options and defaults
+
+The is more than one way to unpack an `Option` and fall back on a default if it is `None`. To choose the one that meets our needs, we need to consider the following:
+* do we need eager or lazy evaluation?
+* do we need to keep the original empty value intact, or modify it in place?
+
+## `or()` is chainable, evaluates eagerly, keeps empty value intact
+
+`or()`is chainable and eagerly evaluates its argument, as is shown in the following example. Note that because `or`'s arguments are evaluated eagerly, the variable passed to `or` is moved.
+
+```
+#[derive(Debug)]
+enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
+
+fn main() {
+ let apple = Some(Fruit::Apple);
+ let orange = Some(Fruit::Orange);
+ let no_fruit: Option<Fruit> = None;
+
+ let first_available_fruit = no_fruit.or(orange).or(apple);
+ println!("first_available_fruit: {:?}", first_available_fruit);
+ // first_available_fruit: Some(Orange)
+
+ // `or` moves its argument.
+ // In the example above, `or(orange)` returned a `Some`, so `or(apple)` was not invoked.
+ // But the variable named `apple` has been moved regardless, and cannot be used anymore.
+ // println!("Variable apple was moved, so this line won't compile: {:?}", apple);
+ // TODO: uncomment the line above to see the compiler error
+ }
+```
+
+## `or_else()` is chainable, evaluates lazily, keeps empty value intact
+
+Another alternative is to use `or_else`, which is also chainable, and evaluates lazily, as is shown in the following example:
+
+```
+#[derive(Debug)]
+enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
+
+fn main() {
+ let apple = Some(Fruit::Apple);
+ let no_fruit: Option<Fruit> = None;
+ let get_kiwi_as_fallback = || {
+ println!("Providing kiwi as fallback");
+ Some(Fruit::Kiwi)
+ };
+ let get_lemon_as_fallback = || {
+ println!("Providing lemon as fallback");
+ Some(Fruit::Lemon)
+ };
+
+ let first_available_fruit = no_fruit
+ .or_else(get_kiwi_as_fallback)
+ .or_else(get_lemon_as_fallback);
+ println!("first_available_fruit: {:?}", first_available_fruit);
+ // Providing kiwi as fallback
+ // first_available_fruit: Some(Kiwi)
+}
+```
+
+## `get_or_insert()` evaluates eagerly, modifies empty value im place
+
+To make sure that an `Option` contains a value, we can use `get_or_insert` to modify it in place with a fallback value, as is shown in the following example. Note that `get_or_insert` eagerly evaluaes its parameter, so variable `apple` is moved:
+
+```
+#[derive(Debug)]
+enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
+
+fn main() {
+ let mut my_fruit: Option<Fruit> = None;
+ let apple = Fruit::Apple;
+ let first_available_fruit = my_fruit.get_or_insert(apple);
+ println!("my_fruit is: {:?}", first_available_fruit);
+ println!("first_available_fruit is: {:?}", first_available_fruit);
+ // my_fruit is: Apple
+ // first_available_fruit is: Apple
+ //println!("Variable named `apple` is moved: {:?}", apple);
+ // TODO: uncomment the line above to see the compliler error
+}
+```
+
+## `get_or_insert_with()` evaluates lazily, modifies empty value im place
+
+Instead of explicitly providing a value to fall back on, we can pass a closure to `get_or_insert_with`, as follows:
+```
+#[derive(Debug)]
+enum Fruit { Apple, Orange, Banana, Kiwi, Lemon }
+
+fn main() {
+ let mut my_fruit: Option<Fruit> = None;
+ let get_lemon_as_fallback = || {
+ println!("Providing lemon as fallback");
+ Fruit::Lemon
+ };
+ let first_available_fruit = my_fruit
+ .get_or_insert_with(get_lemon_as_fallback);
+ println!("my_fruit is: {:?}", first_available_fruit);
+ println!("first_available_fruit is: {:?}", first_available_fruit);
+ // Providing lemon as fallback
+ // my_fruit is: Lemon
+ // first_available_fruit is: Lemon
+
+ // If the Option has a value, it is left unchanged, and the closure is not invoked
+ let mut my_apple = Some(Fruit::Apple);
+ let should_be_apple = my_apple.get_or_insert_with(get_lemon_as_fallback);
+ println!("should_be_apple is: {:?}", should_be_apple);
+ println!("my_apple is unchanged: {:?}", my_apple);
+ // The output is a follows. Note that the closure `get_lemon_as_fallback` is not invoked
+ // should_be_apple is: Apple
+ // my_apple is unchanged: Some(Apple)
+}
+```
+
+### See also:
+
+[`closures`][closures], [`get_or_insert`][get_or_insert], [`get_or_insert_with`][get_or_insert_with], ,[`moved variables`][moved], [`or`][or], [`or_else`][or_else]
+
+[closures]: https://doc.rust-lang.org/book/ch13-01-closures.html
+[get_or_insert]: https://doc.rust-lang.org/core/option/enum.Option.html#method.get_or_insert
+[get_or_insert_with]: https://doc.rust-lang.org/core/option/enum.Option.html#method.get_or_insert_with
+[moved]: https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html
+[or]: https://doc.rust-lang.org/core/option/enum.Option.html#method.or
+[or_else]: https://doc.rust-lang.org/core/option/enum.Option.html#method.or_else
diff --git a/src/doc/rust-by-example/src/error/option_unwrap/map.md b/src/doc/rust-by-example/src/error/option_unwrap/map.md
new file mode 100644
index 000000000..6682e317a
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/option_unwrap/map.md
@@ -0,0 +1,86 @@
+# Combinators: `map`
+
+`match` is a valid method for handling `Option`s. However, you may
+eventually find heavy usage tedious, especially with operations only valid
+with an input. In these cases, [combinators][combinators] can be used to
+manage control flow in a modular fashion.
+
+`Option` has a built in method called `map()`, a combinator for the simple
+mapping of `Some -> Some` and `None -> None`. Multiple `map()` calls can be
+chained together for even more flexibility.
+
+In the following example, `process()` replaces all functions previous
+to it while staying compact.
+
+```rust,editable
+#![allow(dead_code)]
+
+#[derive(Debug)] enum Food { Apple, Carrot, Potato }
+
+#[derive(Debug)] struct Peeled(Food);
+#[derive(Debug)] struct Chopped(Food);
+#[derive(Debug)] struct Cooked(Food);
+
+// Peeling food. If there isn't any, then return `None`.
+// Otherwise, return the peeled food.
+fn peel(food: Option<Food>) -> Option<Peeled> {
+ match food {
+ Some(food) => Some(Peeled(food)),
+ None => None,
+ }
+}
+
+// Chopping food. If there isn't any, then return `None`.
+// Otherwise, return the chopped food.
+fn chop(peeled: Option<Peeled>) -> Option<Chopped> {
+ match peeled {
+ Some(Peeled(food)) => Some(Chopped(food)),
+ None => None,
+ }
+}
+
+// Cooking food. Here, we showcase `map()` instead of `match` for case handling.
+fn cook(chopped: Option<Chopped>) -> Option<Cooked> {
+ chopped.map(|Chopped(food)| Cooked(food))
+}
+
+// A function to peel, chop, and cook food all in sequence.
+// We chain multiple uses of `map()` to simplify the code.
+fn process(food: Option<Food>) -> Option<Cooked> {
+ food.map(|f| Peeled(f))
+ .map(|Peeled(f)| Chopped(f))
+ .map(|Chopped(f)| Cooked(f))
+}
+
+// Check whether there's food or not before trying to eat it!
+fn eat(food: Option<Cooked>) {
+ match food {
+ Some(food) => println!("Mmm. I love {:?}", food),
+ None => println!("Oh no! It wasn't edible."),
+ }
+}
+
+fn main() {
+ let apple = Some(Food::Apple);
+ let carrot = Some(Food::Carrot);
+ let potato = None;
+
+ let cooked_apple = cook(chop(peel(apple)));
+ let cooked_carrot = cook(chop(peel(carrot)));
+ // Let's try the simpler looking `process()` now.
+ let cooked_potato = process(potato);
+
+ eat(cooked_apple);
+ eat(cooked_carrot);
+ eat(cooked_potato);
+}
+```
+
+### See also:
+
+[closures][closures], [`Option`][option], [`Option::map()`][map]
+
+[combinators]: https://doc.rust-lang.org/reference/glossary.html#combinator
+[closures]: ../../fn/closures.md
+[option]: https://doc.rust-lang.org/std/option/enum.Option.html
+[map]: https://doc.rust-lang.org/std/option/enum.Option.html#method.map
diff --git a/src/doc/rust-by-example/src/error/option_unwrap/question_mark.md b/src/doc/rust-by-example/src/error/option_unwrap/question_mark.md
new file mode 100644
index 000000000..831625229
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/option_unwrap/question_mark.md
@@ -0,0 +1,58 @@
+# Unpacking options with `?`
+
+You can unpack `Option`s by using `match` statements, but it's often easier to
+use the `?` operator. If `x` is an `Option`, then evaluating `x?` will return
+the underlying value if `x` is `Some`, otherwise it will terminate whatever
+function is being executed and return `None`.
+
+```rust,editable
+fn next_birthday(current_age: Option<u8>) -> Option<String> {
+ // If `current_age` is `None`, this returns `None`.
+ // If `current_age` is `Some`, the inner `u8` gets assigned to `next_age`
+ let next_age: u8 = current_age? + 1;
+ Some(format!("Next year I will be {}", next_age))
+}
+```
+
+You can chain many `?`s together to make your code much more readable.
+
+```rust,editable
+struct Person {
+ job: Option<Job>,
+}
+
+#[derive(Clone, Copy)]
+struct Job {
+ phone_number: Option<PhoneNumber>,
+}
+
+#[derive(Clone, Copy)]
+struct PhoneNumber {
+ area_code: Option<u8>,
+ number: u32,
+}
+
+impl Person {
+
+ // Gets the area code of the phone number of the person's job, if it exists.
+ fn work_phone_area_code(&self) -> Option<u8> {
+ // This would need many nested `match` statements without the `?` operator.
+ // It would take a lot more code - try writing it yourself and see which
+ // is easier.
+ self.job?.phone_number?.area_code
+ }
+}
+
+fn main() {
+ let p = Person {
+ job: Some(Job {
+ phone_number: Some(PhoneNumber {
+ area_code: Some(61),
+ number: 439222222,
+ }),
+ }),
+ };
+
+ assert_eq!(p.work_phone_area_code(), Some(61));
+}
+```
diff --git a/src/doc/rust-by-example/src/error/panic.md b/src/doc/rust-by-example/src/error/panic.md
new file mode 100644
index 000000000..5524dbf6f
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/panic.md
@@ -0,0 +1,19 @@
+# `panic`
+
+The simplest error handling mechanism we will see is `panic`. It prints an
+error message, starts unwinding the stack, and usually exits the program.
+Here, we explicitly call `panic` on our error condition:
+
+```rust,editable,ignore,mdbook-runnable
+fn drink(beverage: &str) {
+ // You shouldn't drink too much sugary beverages.
+ if beverage == "lemonade" { panic!("AAAaaaaa!!!!"); }
+
+ println!("Some refreshing {} is all I need.", beverage);
+}
+
+fn main() {
+ drink("water");
+ drink("lemonade");
+}
+```
diff --git a/src/doc/rust-by-example/src/error/result.md b/src/doc/rust-by-example/src/error/result.md
new file mode 100644
index 000000000..d779bfdad
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/result.md
@@ -0,0 +1,83 @@
+# `Result`
+
+[`Result`][result] is a richer version of the [`Option`][option] type that
+describes possible *error* instead of possible *absence*.
+
+That is, `Result<T, E>` could have one of two outcomes:
+
+* `Ok(T)`: An element `T` was found
+* `Err(E)`: An error was found with element `E`
+
+By convention, the expected outcome is `Ok` while the unexpected outcome is `Err`.
+
+Like `Option`, `Result` has many methods associated with it. `unwrap()`, for
+example, either yields the element `T` or `panic`s. For case handling,
+there are many combinators between `Result` and `Option` that overlap.
+
+In working with Rust, you will likely encounter methods that return the
+`Result` type, such as the [`parse()`][parse] method. It might not always
+be possible to parse a string into the other type, so `parse()` returns a
+`Result` indicating possible failure.
+
+Let's see what happens when we successfully and unsuccessfully `parse()` a string:
+
+```rust,editable,ignore,mdbook-runnable
+fn multiply(first_number_str: &str, second_number_str: &str) -> i32 {
+ // Let's try using `unwrap()` to get the number out. Will it bite us?
+ let first_number = first_number_str.parse::<i32>().unwrap();
+ let second_number = second_number_str.parse::<i32>().unwrap();
+ first_number * second_number
+}
+
+fn main() {
+ let twenty = multiply("10", "2");
+ println!("double is {}", twenty);
+
+ let tt = multiply("t", "2");
+ println!("double is {}", tt);
+}
+```
+
+In the unsuccessful case, `parse()` leaves us with an error for `unwrap()`
+to `panic` on. Additionally, the `panic` exits our program and provides an
+unpleasant error message.
+
+To improve the quality of our error message, we should be more specific
+about the return type and consider explicitly handling the error.
+
+## Using `Result` in `main`
+
+The `Result` type can also be the return type of the `main` function if
+specified explicitly. Typically the `main` function will be of the form:
+
+```rust
+fn main() {
+ println!("Hello World!");
+}
+```
+
+However `main` is also able to have a return type of `Result`. If an error
+occurs within the `main` function it will return an error code and print a debug
+representation of the error (using the [`Debug`] trait). The following example
+shows such a scenario and touches on aspects covered in [the following section].
+
+```rust,editable
+use std::num::ParseIntError;
+
+fn main() -> Result<(), ParseIntError> {
+ let number_str = "10";
+ let number = match number_str.parse::<i32>() {
+ Ok(number) => number,
+ Err(e) => return Err(e),
+ };
+ println!("{}", number);
+ Ok(())
+}
+```
+
+
+[option]: https://doc.rust-lang.org/std/option/enum.Option.html
+[result]: https://doc.rust-lang.org/std/result/enum.Result.html
+[parse]: https://doc.rust-lang.org/std/primitive.str.html#method.parse
+[`Debug`]: https://doc.rust-lang.org/std/fmt/trait.Debug.html
+[the following section]: result/early_returns.md
diff --git a/src/doc/rust-by-example/src/error/result/early_returns.md b/src/doc/rust-by-example/src/error/result/early_returns.md
new file mode 100644
index 000000000..e76615131
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/result/early_returns.md
@@ -0,0 +1,46 @@
+# Early returns
+
+In the previous example, we explicitly handled the errors using combinators.
+Another way to deal with this case analysis is to use a combination of
+`match` statements and *early returns*.
+
+That is, we can simply stop executing the function and return the error if
+one occurs. For some, this form of code can be easier to both read and
+write. Consider this version of the previous example, rewritten using early returns:
+
+```rust,editable
+use std::num::ParseIntError;
+
+fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
+ let first_number = match first_number_str.parse::<i32>() {
+ Ok(first_number) => first_number,
+ Err(e) => return Err(e),
+ };
+
+ let second_number = match second_number_str.parse::<i32>() {
+ Ok(second_number) => second_number,
+ Err(e) => return Err(e),
+ };
+
+ Ok(first_number * second_number)
+}
+
+fn print(result: Result<i32, ParseIntError>) {
+ match result {
+ Ok(n) => println!("n is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ print(multiply("10", "2"));
+ print(multiply("t", "2"));
+}
+```
+
+At this point, we've learned to explicitly handle errors using combinators
+and early returns. While we generally want to avoid panicking, explicitly
+handling all of our errors is cumbersome.
+
+In the next section, we'll introduce `?` for the cases where we simply
+need to `unwrap` without possibly inducing `panic`.
diff --git a/src/doc/rust-by-example/src/error/result/enter_question_mark.md b/src/doc/rust-by-example/src/error/result/enter_question_mark.md
new file mode 100644
index 000000000..ca954b1ac
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/result/enter_question_mark.md
@@ -0,0 +1,75 @@
+# Introducing `?`
+
+Sometimes we just want the simplicity of `unwrap` without the possibility of
+a `panic`. Until now, `unwrap` has forced us to nest deeper and deeper when
+what we really wanted was to get the variable *out*. This is exactly the purpose of `?`.
+
+Upon finding an `Err`, there are two valid actions to take:
+
+1. `panic!` which we already decided to try to avoid if possible
+2. `return` because an `Err` means it cannot be handled
+
+`?` is *almost*[^†] exactly equivalent to an `unwrap` which `return`s
+instead of `panic`king on `Err`s. Let's see how we can simplify the earlier
+example that used combinators:
+
+```rust,editable
+use std::num::ParseIntError;
+
+fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
+ let first_number = first_number_str.parse::<i32>()?;
+ let second_number = second_number_str.parse::<i32>()?;
+
+ Ok(first_number * second_number)
+}
+
+fn print(result: Result<i32, ParseIntError>) {
+ match result {
+ Ok(n) => println!("n is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ print(multiply("10", "2"));
+ print(multiply("t", "2"));
+}
+```
+
+## The `try!` macro
+
+Before there was `?`, the same functionality was achieved with the `try!` macro.
+The `?` operator is now recommended, but you may still find `try!` when looking
+at older code. The same `multiply` function from the previous example
+would look like this using `try!`:
+
+```rust,editable,edition2015
+// To compile and run this example without errors, while using Cargo, change the value
+// of the `edition` field, in the `[package]` section of the `Cargo.toml` file, to "2015".
+
+use std::num::ParseIntError;
+
+fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
+ let first_number = try!(first_number_str.parse::<i32>());
+ let second_number = try!(second_number_str.parse::<i32>());
+
+ Ok(first_number * second_number)
+}
+
+fn print(result: Result<i32, ParseIntError>) {
+ match result {
+ Ok(n) => println!("n is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ print(multiply("10", "2"));
+ print(multiply("t", "2"));
+}
+```
+
+
+[^†]: See [re-enter ?][re_enter_?] for more details.
+
+[re_enter_?]: ../multiple_error_types/reenter_question_mark.md
diff --git a/src/doc/rust-by-example/src/error/result/result_alias.md b/src/doc/rust-by-example/src/error/result/result_alias.md
new file mode 100644
index 000000000..c4073980f
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/result/result_alias.md
@@ -0,0 +1,46 @@
+# aliases for `Result`
+
+How about when we want to reuse a specific `Result` type many times?
+Recall that Rust allows us to create [aliases][typealias]. Conveniently,
+we can define one for the specific `Result` in question.
+
+At a module level, creating aliases can be particularly helpful. Errors
+found in a specific module often have the same `Err` type, so a single alias
+can succinctly define *all* associated `Results`. This is so useful that the
+`std` library even supplies one: [`io::Result`][io_result]!
+
+Here's a quick example to show off the syntax:
+
+```rust,editable
+use std::num::ParseIntError;
+
+// Define a generic alias for a `Result` with the error type `ParseIntError`.
+type AliasedResult<T> = Result<T, ParseIntError>;
+
+// Use the above alias to refer to our specific `Result` type.
+fn multiply(first_number_str: &str, second_number_str: &str) -> AliasedResult<i32> {
+ first_number_str.parse::<i32>().and_then(|first_number| {
+ second_number_str.parse::<i32>().map(|second_number| first_number * second_number)
+ })
+}
+
+// Here, the alias again allows us to save some space.
+fn print(result: AliasedResult<i32>) {
+ match result {
+ Ok(n) => println!("n is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ print(multiply("10", "2"));
+ print(multiply("t", "2"));
+}
+```
+
+### See also:
+
+[`io::Result`][io_result]
+
+[typealias]: ../../types/alias.md
+[io_result]: https://doc.rust-lang.org/std/io/type.Result.html
diff --git a/src/doc/rust-by-example/src/error/result/result_map.md b/src/doc/rust-by-example/src/error/result/result_map.md
new file mode 100644
index 000000000..24537c318
--- /dev/null
+++ b/src/doc/rust-by-example/src/error/result/result_map.md
@@ -0,0 +1,88 @@
+# `map` for `Result`
+
+Panicking in the previous example's `multiply` does not make for robust code.
+Generally, we want to return the error to the caller so it can decide what is
+the right way to respond to errors.
+
+We first need to know what kind of error type we are dealing with. To determine
+the `Err` type, we look to [`parse()`][parse], which is implemented with the
+[`FromStr`][from_str] trait for [`i32`][i32]. As a result, the `Err` type is
+specified as [`ParseIntError`][parse_int_error].
+
+In the example below, the straightforward `match` statement leads to code
+that is overall more cumbersome.
+
+```rust,editable
+use std::num::ParseIntError;
+
+// With the return type rewritten, we use pattern matching without `unwrap()`.
+fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
+ match first_number_str.parse::<i32>() {
+ Ok(first_number) => {
+ match second_number_str.parse::<i32>() {
+ Ok(second_number) => {
+ Ok(first_number * second_number)
+ },
+ Err(e) => Err(e),
+ }
+ },
+ Err(e) => Err(e),
+ }
+}
+
+fn print(result: Result<i32, ParseIntError>) {
+ match result {
+ Ok(n) => println!("n is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ // This still presents a reasonable answer.
+ let twenty = multiply("10", "2");
+ print(twenty);
+
+ // The following now provides a much more helpful error message.
+ let tt = multiply("t", "2");
+ print(tt);
+}
+```
+
+Luckily, `Option`'s `map`, `and_then`, and many other combinators are also
+implemented for `Result`. [`Result`][result] contains a complete listing.
+
+```rust,editable
+use std::num::ParseIntError;
+
+// As with `Option`, we can use combinators such as `map()`.
+// This function is otherwise identical to the one above and reads:
+// Modify n if the value is valid, otherwise pass on the error.
+fn multiply(first_number_str: &str, second_number_str: &str) -> Result<i32, ParseIntError> {
+ first_number_str.parse::<i32>().and_then(|first_number| {
+ second_number_str.parse::<i32>().map(|second_number| first_number * second_number)
+ })
+}
+
+fn print(result: Result<i32, ParseIntError>) {
+ match result {
+ Ok(n) => println!("n is {}", n),
+ Err(e) => println!("Error: {}", e),
+ }
+}
+
+fn main() {
+ // This still presents a reasonable answer.
+ let twenty = multiply("10", "2");
+ print(twenty);
+
+ // The following now provides a much more helpful error message.
+ let tt = multiply("t", "2");
+ print(tt);
+}
+```
+
+[parse]: https://doc.rust-lang.org/std/primitive.str.html#method.parse
+[from_str]: https://doc.rust-lang.org/std/str/trait.FromStr.html
+[i32]: https://doc.rust-lang.org/std/primitive.i32.html
+[parse_int_error]: https://doc.rust-lang.org/std/num/struct.ParseIntError.html
+[result]: https://doc.rust-lang.org/std/result/enum.Result.html
diff --git a/src/doc/rust-by-example/src/expression.md b/src/doc/rust-by-example/src/expression.md
new file mode 100644
index 000000000..27a278d02
--- /dev/null
+++ b/src/doc/rust-by-example/src/expression.md
@@ -0,0 +1,54 @@
+# Expressions
+
+A Rust program is (mostly) made up of a series of statements:
+
+```rust,editable
+fn main() {
+ // statement
+ // statement
+ // statement
+}
+```
+
+There are a few kinds of statements in Rust. The most common two are declaring
+a variable binding, and using a `;` with an expression:
+
+```rust,editable
+fn main() {
+ // variable binding
+ let x = 5;
+
+ // expression;
+ x;
+ x + 1;
+ 15;
+}
+```
+
+Blocks are expressions too, so they can be used as values in
+assignments. The last expression in the block will be assigned to the
+place expression such as a local variable. However, if the last expression of the block ends with a
+semicolon, the return value will be `()`.
+
+```rust,editable
+fn main() {
+ let x = 5u32;
+
+ let y = {
+ let x_squared = x * x;
+ let x_cube = x_squared * x;
+
+ // This expression will be assigned to `y`
+ x_cube + x_squared + x
+ };
+
+ let z = {
+ // The semicolon suppresses this expression and `()` is assigned to `z`
+ 2 * x;
+ };
+
+ println!("x is {:?}", x);
+ println!("y is {:?}", y);
+ println!("z is {:?}", z);
+}
+```
diff --git a/src/doc/rust-by-example/src/flow_control.md b/src/doc/rust-by-example/src/flow_control.md
new file mode 100644
index 000000000..c8a2f9ed8
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control.md
@@ -0,0 +1,4 @@
+# Flow of Control
+
+An essential part of any programming languages are ways to modify control flow:
+`if`/`else`, `for`, and others. Let's talk about them in Rust.
diff --git a/src/doc/rust-by-example/src/flow_control/for.md b/src/doc/rust-by-example/src/flow_control/for.md
new file mode 100644
index 000000000..b5d5d6272
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/for.md
@@ -0,0 +1,125 @@
+# for loops
+
+## for and range
+
+The `for in` construct can be used to iterate through an `Iterator`.
+One of the easiest ways to create an iterator is to use the range
+notation `a..b`. This yields values from `a` (inclusive) to `b`
+(exclusive) in steps of one.
+
+Let's write FizzBuzz using `for` instead of `while`.
+
+```rust,editable
+fn main() {
+ // `n` will take the values: 1, 2, ..., 100 in each iteration
+ for n in 1..101 {
+ if n % 15 == 0 {
+ println!("fizzbuzz");
+ } else if n % 3 == 0 {
+ println!("fizz");
+ } else if n % 5 == 0 {
+ println!("buzz");
+ } else {
+ println!("{}", n);
+ }
+ }
+}
+```
+
+Alternatively, `a..=b` can be used for a range that is inclusive on both ends.
+The above can be written as:
+
+```rust,editable
+fn main() {
+ // `n` will take the values: 1, 2, ..., 100 in each iteration
+ for n in 1..=100 {
+ if n % 15 == 0 {
+ println!("fizzbuzz");
+ } else if n % 3 == 0 {
+ println!("fizz");
+ } else if n % 5 == 0 {
+ println!("buzz");
+ } else {
+ println!("{}", n);
+ }
+ }
+}
+```
+
+## for and iterators
+
+The `for in` construct is able to interact with an `Iterator` in several ways.
+As discussed in the section on the [Iterator][iter] trait, by default the `for`
+loop will apply the `into_iter` function to the collection. However, this is
+not the only means of converting collections into iterators.
+
+`into_iter`, `iter` and `iter_mut` all handle the conversion of a collection
+into an iterator in different ways, by providing different views on the data
+within.
+
+* `iter` - This borrows each element of the collection through each iteration.
+ Thus leaving the collection untouched and available for reuse after the loop.
+
+```rust,editable
+fn main() {
+ let names = vec!["Bob", "Frank", "Ferris"];
+
+ for name in names.iter() {
+ match name {
+ &"Ferris" => println!("There is a rustacean among us!"),
+ // TODO ^ Try deleting the & and matching just "Ferris"
+ _ => println!("Hello {}", name),
+ }
+ }
+
+ println!("names: {:?}", names);
+}
+```
+
+* `into_iter` - This consumes the collection so that on each iteration the exact
+ data is provided. Once the collection has been consumed it is no longer
+ available for reuse as it has been 'moved' within the loop.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ let names = vec!["Bob", "Frank", "Ferris"];
+
+ for name in names.into_iter() {
+ match name {
+ "Ferris" => println!("There is a rustacean among us!"),
+ _ => println!("Hello {}", name),
+ }
+ }
+
+ println!("names: {:?}", names);
+ // FIXME ^ Comment out this line
+}
+```
+
+* `iter_mut` - This mutably borrows each element of the collection, allowing for
+ the collection to be modified in place.
+
+```rust,editable
+fn main() {
+ let mut names = vec!["Bob", "Frank", "Ferris"];
+
+ for name in names.iter_mut() {
+ *name = match name {
+ &mut "Ferris" => "There is a rustacean among us!",
+ _ => "Hello",
+ }
+ }
+
+ println!("names: {:?}", names);
+}
+```
+
+In the above snippets note the type of `match` branch, that is the key
+difference in the types of iteration. The difference in type then of course
+implies differing actions that are able to be performed.
+
+### See also:
+
+[Iterator][iter]
+
+[iter]: ../trait/iter.md
diff --git a/src/doc/rust-by-example/src/flow_control/if_else.md b/src/doc/rust-by-example/src/flow_control/if_else.md
new file mode 100644
index 000000000..d761aa838
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/if_else.md
@@ -0,0 +1,37 @@
+# if/else
+
+Branching with `if`-`else` is similar to other languages. Unlike many of them,
+the boolean condition doesn't need to be surrounded by parentheses, and each
+condition is followed by a block. `if`-`else` conditionals are expressions,
+and, all branches must return the same type.
+
+```rust,editable
+fn main() {
+ let n = 5;
+
+ if n < 0 {
+ print!("{} is negative", n);
+ } else if n > 0 {
+ print!("{} is positive", n);
+ } else {
+ print!("{} is zero", n);
+ }
+
+ let big_n =
+ if n < 10 && n > -10 {
+ println!(", and is a small number, increase ten-fold");
+
+ // This expression returns an `i32`.
+ 10 * n
+ } else {
+ println!(", and is a big number, halve the number");
+
+ // This expression must return an `i32` as well.
+ n / 2
+ // TODO ^ Try suppressing this expression with a semicolon.
+ };
+ // ^ Don't forget to put a semicolon here! All `let` bindings need it.
+
+ println!("{} -> {}", n, big_n);
+}
+```
diff --git a/src/doc/rust-by-example/src/flow_control/if_let.md b/src/doc/rust-by-example/src/flow_control/if_let.md
new file mode 100644
index 000000000..3742b6f68
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/if_let.md
@@ -0,0 +1,128 @@
+# if let
+
+For some use cases, when matching enums, `match` is awkward. For example:
+
+```rust
+// Make `optional` of type `Option<i32>`
+let optional = Some(7);
+
+match optional {
+ Some(i) => {
+ println!("This is a really long string and `{:?}`", i);
+ // ^ Needed 2 indentations just so we could destructure
+ // `i` from the option.
+ },
+ _ => {},
+ // ^ Required because `match` is exhaustive. Doesn't it seem
+ // like wasted space?
+};
+
+```
+
+`if let` is cleaner for this use case and in addition allows various
+failure options to be specified:
+
+```rust,editable
+fn main() {
+ // All have type `Option<i32>`
+ let number = Some(7);
+ let letter: Option<i32> = None;
+ let emoticon: Option<i32> = None;
+
+ // The `if let` construct reads: "if `let` destructures `number` into
+ // `Some(i)`, evaluate the block (`{}`).
+ if let Some(i) = number {
+ println!("Matched {:?}!", i);
+ }
+
+ // If you need to specify a failure, use an else:
+ if let Some(i) = letter {
+ println!("Matched {:?}!", i);
+ } else {
+ // Destructure failed. Change to the failure case.
+ println!("Didn't match a number. Let's go with a letter!");
+ }
+
+ // Provide an altered failing condition.
+ let i_like_letters = false;
+
+ if let Some(i) = emoticon {
+ println!("Matched {:?}!", i);
+ // Destructure failed. Evaluate an `else if` condition to see if the
+ // alternate failure branch should be taken:
+ } else if i_like_letters {
+ println!("Didn't match a number. Let's go with a letter!");
+ } else {
+ // The condition evaluated false. This branch is the default:
+ println!("I don't like letters. Let's go with an emoticon :)!");
+ }
+}
+```
+
+In the same way, `if let` can be used to match any enum value:
+
+```rust,editable
+// Our example enum
+enum Foo {
+ Bar,
+ Baz,
+ Qux(u32)
+}
+
+fn main() {
+ // Create example variables
+ let a = Foo::Bar;
+ let b = Foo::Baz;
+ let c = Foo::Qux(100);
+
+ // Variable a matches Foo::Bar
+ if let Foo::Bar = a {
+ println!("a is foobar");
+ }
+
+ // Variable b does not match Foo::Bar
+ // So this will print nothing
+ if let Foo::Bar = b {
+ println!("b is foobar");
+ }
+
+ // Variable c matches Foo::Qux which has a value
+ // Similar to Some() in the previous example
+ if let Foo::Qux(value) = c {
+ println!("c is {}", value);
+ }
+
+ // Binding also works with `if let`
+ if let Foo::Qux(value @ 100) = c {
+ println!("c is one hundred");
+ }
+}
+```
+
+Another benefit is that `if let` allows us to match non-parameterized enum variants. This is true even in cases where the enum doesn't implement or derive `PartialEq`. In such cases `if Foo::Bar == a` would fail to compile, because instances of the enum cannot be equated, however `if let` will continue to work.
+
+Would you like a challenge? Fix the following example to use `if let`:
+
+```rust,editable,ignore,mdbook-runnable
+// This enum purposely neither implements nor derives PartialEq.
+// That is why comparing Foo::Bar == a fails below.
+enum Foo {Bar}
+
+fn main() {
+ let a = Foo::Bar;
+
+ // Variable a matches Foo::Bar
+ if Foo::Bar == a {
+ // ^-- this causes a compile-time error. Use `if let` instead.
+ println!("a is foobar");
+ }
+}
+```
+
+### See also:
+
+[`enum`][enum], [`Option`][option], and the [RFC][if_let_rfc]
+
+[enum]: ../custom_types/enum.md
+[if_let_rfc]: https://github.com/rust-lang/rfcs/pull/160
+[option]: ../std/option.md
diff --git a/src/doc/rust-by-example/src/flow_control/loop.md b/src/doc/rust-by-example/src/flow_control/loop.md
new file mode 100644
index 000000000..4a2405b7b
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/loop.md
@@ -0,0 +1,36 @@
+# loop
+
+Rust provides a `loop` keyword to indicate an infinite loop.
+
+The `break` statement can be used to exit a loop at anytime, whereas the
+`continue` statement can be used to skip the rest of the iteration and start a
+new one.
+
+```rust,editable
+fn main() {
+ let mut count = 0u32;
+
+ println!("Let's count until infinity!");
+
+ // Infinite loop
+ loop {
+ count += 1;
+
+ if count == 3 {
+ println!("three");
+
+ // Skip the rest of this iteration
+ continue;
+ }
+
+ println!("{}", count);
+
+ if count == 5 {
+ println!("OK, that's enough");
+
+ // Exit this loop
+ break;
+ }
+ }
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/flow_control/loop/nested.md b/src/doc/rust-by-example/src/flow_control/loop/nested.md
new file mode 100644
index 000000000..01c55a559
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/loop/nested.md
@@ -0,0 +1,29 @@
+# Nesting and labels
+
+It's possible to `break` or `continue` outer loops when dealing with nested
+loops. In these cases, the loops must be annotated with some `'label`, and the
+label must be passed to the `break`/`continue` statement.
+
+```rust,editable
+#![allow(unreachable_code)]
+
+fn main() {
+ 'outer: loop {
+ println!("Entered the outer loop");
+
+ 'inner: loop {
+ println!("Entered the inner loop");
+
+ // This would break only the inner loop
+ //break;
+
+ // This breaks the outer loop
+ break 'outer;
+ }
+
+ println!("This point will never be reached");
+ }
+
+ println!("Exited the outer loop");
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/flow_control/loop/return.md b/src/doc/rust-by-example/src/flow_control/loop/return.md
new file mode 100644
index 000000000..8511b1e86
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/loop/return.md
@@ -0,0 +1,22 @@
+# Returning from loops
+
+One of the uses of a `loop` is to retry an operation until it succeeds. If the
+operation returns a value though, you might need to pass it to the rest of the
+code: put it after the `break`, and it will be returned by the `loop`
+expression.
+
+```rust,editable
+fn main() {
+ let mut counter = 0;
+
+ let result = loop {
+ counter += 1;
+
+ if counter == 10 {
+ break counter * 2;
+ }
+ };
+
+ assert_eq!(result, 20);
+}
+```
diff --git a/src/doc/rust-by-example/src/flow_control/match.md b/src/doc/rust-by-example/src/flow_control/match.md
new file mode 100644
index 000000000..6beeea366
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match.md
@@ -0,0 +1,37 @@
+# match
+
+Rust provides pattern matching via the `match` keyword, which can be used like
+a C `switch`. The first matching arm is evaluated and all possible values must be
+covered.
+
+```rust,editable
+fn main() {
+ let number = 13;
+ // TODO ^ Try different values for `number`
+
+ println!("Tell me about {}", number);
+ match number {
+ // Match a single value
+ 1 => println!("One!"),
+ // Match several values
+ 2 | 3 | 5 | 7 | 11 => println!("This is a prime"),
+ // TODO ^ Try adding 13 to the list of prime values
+ // Match an inclusive range
+ 13..=19 => println!("A teen"),
+ // Handle the rest of cases
+ _ => println!("Ain't special"),
+ // TODO ^ Try commenting out this catch-all arm
+ }
+
+ let boolean = true;
+ // Match is an expression too
+ let binary = match boolean {
+ // The arms of a match must cover all the possible values
+ false => 0,
+ true => 1,
+ // TODO ^ Try commenting out one of these arms
+ };
+
+ println!("{} -> {}", boolean, binary);
+}
+```
diff --git a/src/doc/rust-by-example/src/flow_control/match/binding.md b/src/doc/rust-by-example/src/flow_control/match/binding.md
new file mode 100644
index 000000000..ccbb7c2ad
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/binding.md
@@ -0,0 +1,54 @@
+# Binding
+
+Indirectly accessing a variable makes it impossible to branch and use that
+variable without re-binding. `match` provides the `@` sigil for binding values to
+names:
+
+```rust,editable
+// A function `age` which returns a `u32`.
+fn age() -> u32 {
+ 15
+}
+
+fn main() {
+ println!("Tell me what type of person you are");
+
+ match age() {
+ 0 => println!("I haven't celebrated my first birthday yet"),
+ // Could `match` 1 ..= 12 directly but then what age
+ // would the child be? Instead, bind to `n` for the
+ // sequence of 1 ..= 12. Now the age can be reported.
+ n @ 1 ..= 12 => println!("I'm a child of age {:?}", n),
+ n @ 13 ..= 19 => println!("I'm a teen of age {:?}", n),
+ // Nothing bound. Return the result.
+ n => println!("I'm an old person of age {:?}", n),
+ }
+}
+```
+
+You can also use binding to "destructure" `enum` variants, such as `Option`:
+
+```rust,editable
+fn some_number() -> Option<u32> {
+ Some(42)
+}
+
+fn main() {
+ match some_number() {
+ // Got `Some` variant, match if its value, bound to `n`,
+ // is equal to 42.
+ Some(n @ 42) => println!("The Answer: {}!", n),
+ // Match any other number.
+ Some(n) => println!("Not interesting... {}", n),
+ // Match anything else (`None` variant).
+ _ => (),
+ }
+}
+```
+
+### See also:
+[`functions`][functions], [`enums`][enums] and [`Option`][option]
+
+[functions]: ../../fn.md
+[enums]: ../../custom_types/enum.md
+[option]: ../../std/option.md
diff --git a/src/doc/rust-by-example/src/flow_control/match/destructuring.md b/src/doc/rust-by-example/src/flow_control/match/destructuring.md
new file mode 100644
index 000000000..74df9fe6c
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/destructuring.md
@@ -0,0 +1,16 @@
+# Destructuring
+
+A `match` block can destructure items in a variety of ways.
+
+* [Destructuring Tuples][tuple]
+* [Destructuring Arrays and Slices][slice]
+* [Destructuring Enums][enum]
+* [Destructuring Pointers][refs]
+* [Destructuring Structures][struct]
+
+
+[enum]: destructuring/destructure_enum.md
+[refs]: destructuring/destructure_pointers.md
+[struct]: destructuring/destructure_structures.md
+[tuple]: destructuring/destructure_tuple.md
+[slice]: destructuring/destructure_slice.md
diff --git a/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_enum.md b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_enum.md
new file mode 100644
index 000000000..60d896945
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_enum.md
@@ -0,0 +1,54 @@
+# enums
+
+An `enum` is destructured similarly:
+
+```rust,editable
+// `allow` required to silence warnings because only
+// one variant is used.
+#[allow(dead_code)]
+enum Color {
+ // These 3 are specified solely by their name.
+ Red,
+ Blue,
+ Green,
+ // These likewise tie `u32` tuples to different names: color models.
+ RGB(u32, u32, u32),
+ HSV(u32, u32, u32),
+ HSL(u32, u32, u32),
+ CMY(u32, u32, u32),
+ CMYK(u32, u32, u32, u32),
+}
+
+fn main() {
+ let color = Color::RGB(122, 17, 40);
+ // TODO ^ Try different variants for `color`
+
+ println!("What color is it?");
+ // An `enum` can be destructured using a `match`.
+ match color {
+ Color::Red => println!("The color is Red!"),
+ Color::Blue => println!("The color is Blue!"),
+ Color::Green => println!("The color is Green!"),
+ Color::RGB(r, g, b) =>
+ println!("Red: {}, green: {}, and blue: {}!", r, g, b),
+ Color::HSV(h, s, v) =>
+ println!("Hue: {}, saturation: {}, value: {}!", h, s, v),
+ Color::HSL(h, s, l) =>
+ println!("Hue: {}, saturation: {}, lightness: {}!", h, s, l),
+ Color::CMY(c, m, y) =>
+ println!("Cyan: {}, magenta: {}, yellow: {}!", c, m, y),
+ Color::CMYK(c, m, y, k) =>
+ println!("Cyan: {}, magenta: {}, yellow: {}, key (black): {}!",
+ c, m, y, k),
+ // Don't need another arm because all variants have been examined
+ }
+}
+```
+
+### See also:
+
+[`#[allow(...)]`][allow], [color models][color_models] and [`enum`][enum]
+
+[allow]: ../../../attribute/unused.md
+[color_models]: https://en.wikipedia.org/wiki/Color_model
+[enum]: ../../../custom_types/enum.md
diff --git a/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_pointers.md b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_pointers.md
new file mode 100644
index 000000000..a48aeaa6e
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_pointers.md
@@ -0,0 +1,65 @@
+# pointers/ref
+
+For pointers, a distinction needs to be made between destructuring
+and dereferencing as they are different concepts which are used
+differently from languages like C/C++.
+
+ * Dereferencing uses `*`
+ * Destructuring uses `&`, `ref`, and `ref mut`
+
+```rust,editable
+fn main() {
+ // Assign a reference of type `i32`. The `&` signifies there
+ // is a reference being assigned.
+ let reference = &4;
+
+ match reference {
+ // If `reference` is pattern matched against `&val`, it results
+ // in a comparison like:
+ // `&i32`
+ // `&val`
+ // ^ We see that if the matching `&`s are dropped, then the `i32`
+ // should be assigned to `val`.
+ &val => println!("Got a value via destructuring: {:?}", val),
+ }
+
+ // To avoid the `&`, you dereference before matching.
+ match *reference {
+ val => println!("Got a value via dereferencing: {:?}", val),
+ }
+
+ // What if you don't start with a reference? `reference` was a `&`
+ // because the right side was already a reference. This is not
+ // a reference because the right side is not one.
+ let _not_a_reference = 3;
+
+ // Rust provides `ref` for exactly this purpose. It modifies the
+ // assignment so that a reference is created for the element; this
+ // reference is assigned.
+ let ref _is_a_reference = 3;
+
+ // Accordingly, by defining 2 values without references, references
+ // can be retrieved via `ref` and `ref mut`.
+ let value = 5;
+ let mut mut_value = 6;
+
+ // Use `ref` keyword to create a reference.
+ match value {
+ ref r => println!("Got a reference to a value: {:?}", r),
+ }
+
+ // Use `ref mut` similarly.
+ match mut_value {
+ ref mut m => {
+ // Got a reference. Gotta dereference it before we can
+ // add anything to it.
+ *m += 10;
+ println!("We added 10. `mut_value`: {:?}", m);
+ },
+ }
+}
+```
+
+### See also:
+
+[The ref pattern](../../../scope/borrow/ref.md)
diff --git a/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_slice.md b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_slice.md
new file mode 100644
index 000000000..54552972a
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_slice.md
@@ -0,0 +1,48 @@
+# arrays/slices
+
+Like tuples, arrays and slices can be destructured this way:
+
+```rust,editable
+fn main() {
+ // Try changing the values in the array, or make it a slice!
+ let array = [1, -2, 6];
+
+ match array {
+ // Binds the second and the third elements to the respective variables
+ [0, second, third] =>
+ println!("array[0] = 0, array[1] = {}, array[2] = {}", second, third),
+
+ // Single values can be ignored with _
+ [1, _, third] => println!(
+ "array[0] = 1, array[2] = {} and array[1] was ignored",
+ third
+ ),
+
+ // You can also bind some and ignore the rest
+ [-1, second, ..] => println!(
+ "array[0] = -1, array[1] = {} and all the other ones were ignored",
+ second
+ ),
+ // The code below would not compile
+ // [-1, second] => ...
+
+ // Or store them in another array/slice (the type depends on
+ // that of the value that is being matched against)
+ [3, second, tail @ ..] => println!(
+ "array[0] = 3, array[1] = {} and the other elements were {:?}",
+ second, tail
+ ),
+
+ // Combining these patterns, we can, for example, bind the first and
+ // last values, and store the rest of them in a single array
+ [first, middle @ .., last] => println!(
+ "array[0] = {}, middle = {:?}, array[2] = {}",
+ first, middle, last
+ ),
+ }
+}
+```
+
+### See also:
+
+[Arrays and Slices](../../../primitives/array.md)
diff --git a/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_structures.md b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_structures.md
new file mode 100644
index 000000000..9e43b70c1
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_structures.md
@@ -0,0 +1,32 @@
+# structs
+
+Similarly, a `struct` can be destructured as shown:
+
+```rust,editable
+fn main() {
+ struct Foo {
+ x: (u32, u32),
+ y: u32,
+ }
+
+ // Try changing the values in the struct to see what happens
+ let foo = Foo { x: (1, 2), y: 3 };
+
+ match foo {
+ Foo { x: (1, b), y } => println!("First of x is 1, b = {}, y = {} ", b, y),
+
+ // you can destructure structs and rename the variables,
+ // the order is not important
+ Foo { y: 2, x: i } => println!("y is 2, i = {:?}", i),
+
+ // and you can also ignore some variables:
+ Foo { y, .. } => println!("y = {}, we don't care about x", y),
+ // this will give an error: pattern does not mention field `x`
+ //Foo { y } => println!("y = {}", y),
+ }
+}
+```
+
+### See also:
+
+[Structs](../../../custom_types/structs.md)
diff --git a/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_tuple.md b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_tuple.md
new file mode 100644
index 000000000..32a77da08
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/destructuring/destructure_tuple.md
@@ -0,0 +1,27 @@
+# tuples
+
+Tuples can be destructured in a `match` as follows:
+
+```rust,editable
+fn main() {
+ let triple = (0, -2, 3);
+ // TODO ^ Try different values for `triple`
+
+ println!("Tell me about {:?}", triple);
+ // Match can be used to destructure a tuple
+ match triple {
+ // Destructure the second and third elements
+ (0, y, z) => println!("First is `0`, `y` is {:?}, and `z` is {:?}", y, z),
+ (1, ..) => println!("First is `1` and the rest doesn't matter"),
+ (.., 2) => println!("last is `2` and the rest doesn't matter"),
+ (3, .., 4) => println!("First is `3`, last is `4`, and the rest doesn't matter"),
+ // `..` can be used to ignore the rest of the tuple
+ _ => println!("It doesn't matter what they are"),
+ // `_` means don't bind the value to a variable
+ }
+}
+```
+
+### See also:
+
+[Tuples](../../../primitives/tuples.md)
diff --git a/src/doc/rust-by-example/src/flow_control/match/guard.md b/src/doc/rust-by-example/src/flow_control/match/guard.md
new file mode 100644
index 000000000..6dba58f13
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/match/guard.md
@@ -0,0 +1,45 @@
+# Guards
+
+A `match` *guard* can be added to filter the arm.
+
+```rust,editable
+enum Temperature {
+ Celsius(i32),
+ Farenheit(i32),
+}
+
+fn main() {
+ let temperature = Temperature::Celsius(35);
+ // ^ TODO try different values for `temperature`
+
+ match temperature {
+ Temperature::Celsius(t) if t > 30 => println!("{}C is above 30 Celsius", t),
+ // The `if condition` part ^ is a guard
+ Temperature::Celsius(t) => println!("{}C is below 30 Celsius", t),
+
+ Temperature::Farenheit(t) if t > 86 => println!("{}F is above 86 Farenheit", t),
+ Temperature::Farenheit(t) => println!("{}F is below 86 Farenheit", t),
+ }
+}
+```
+
+Note that the compiler won't take guard conditions into account when checking
+if all patterns are covered by the match expression.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ let number: u8 = 4;
+
+ match number {
+ i if i == 0 => println!("Zero"),
+ i if i > 0 => println!("Greater than zero"),
+ // _ => unreachable!("Should never happen."),
+ // TODO ^ uncomment to fix compilation
+ }
+}
+```
+
+### See also:
+
+[Tuples](../../primitives/tuples.md)
+[Enums](../../custom_types/enum.md)
diff --git a/src/doc/rust-by-example/src/flow_control/while.md b/src/doc/rust-by-example/src/flow_control/while.md
new file mode 100644
index 000000000..01a8dc9ec
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/while.md
@@ -0,0 +1,30 @@
+# while
+
+The `while` keyword can be used to run a loop while a condition is true.
+
+Let's write the infamous [FizzBuzz][fizzbuzz] using a `while` loop.
+
+```rust,editable
+fn main() {
+ // A counter variable
+ let mut n = 1;
+
+ // Loop while `n` is less than 101
+ while n < 101 {
+ if n % 15 == 0 {
+ println!("fizzbuzz");
+ } else if n % 3 == 0 {
+ println!("fizz");
+ } else if n % 5 == 0 {
+ println!("buzz");
+ } else {
+ println!("{}", n);
+ }
+
+ // Increment counter
+ n += 1;
+ }
+}
+```
+
+[fizzbuzz]: https://en.wikipedia.org/wiki/Fizz_buzz
diff --git a/src/doc/rust-by-example/src/flow_control/while_let.md b/src/doc/rust-by-example/src/flow_control/while_let.md
new file mode 100644
index 000000000..897375a8e
--- /dev/null
+++ b/src/doc/rust-by-example/src/flow_control/while_let.md
@@ -0,0 +1,62 @@
+# while let
+
+Similar to `if let`, `while let` can make awkward `match` sequences
+more tolerable. Consider the following sequence that increments `i`:
+
+```rust
+// Make `optional` of type `Option<i32>`
+let mut optional = Some(0);
+
+// Repeatedly try this test.
+loop {
+ match optional {
+ // If `optional` destructures, evaluate the block.
+ Some(i) => {
+ if i > 9 {
+ println!("Greater than 9, quit!");
+ optional = None;
+ } else {
+ println!("`i` is `{:?}`. Try again.", i);
+ optional = Some(i + 1);
+ }
+ // ^ Requires 3 indentations!
+ },
+ // Quit the loop when the destructure fails:
+ _ => { break; }
+ // ^ Why should this be required? There must be a better way!
+ }
+}
+```
+
+Using `while let` makes this sequence much nicer:
+
+```rust,editable
+fn main() {
+ // Make `optional` of type `Option<i32>`
+ let mut optional = Some(0);
+
+ // This reads: "while `let` destructures `optional` into
+ // `Some(i)`, evaluate the block (`{}`). Else `break`.
+ while let Some(i) = optional {
+ if i > 9 {
+ println!("Greater than 9, quit!");
+ optional = None;
+ } else {
+ println!("`i` is `{:?}`. Try again.", i);
+ optional = Some(i + 1);
+ }
+ // ^ Less rightward drift and doesn't require
+ // explicitly handling the failing case.
+ }
+ // ^ `if let` had additional optional `else`/`else if`
+ // clauses. `while let` does not have these.
+}
+```
+
+### See also:
+
+[`enum`][enum], [`Option`][option], and the [RFC][while_let_rfc]
+
+[enum]: ../custom_types/enum.md
+[option]: ../std/option.md
+[while_let_rfc]: https://github.com/rust-lang/rfcs/pull/214
diff --git a/src/doc/rust-by-example/src/fn.md b/src/doc/rust-by-example/src/fn.md
new file mode 100644
index 000000000..e77552271
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn.md
@@ -0,0 +1,51 @@
+# Functions
+
+Functions are declared using the `fn` keyword. Its arguments are type
+annotated, just like variables, and, if the function returns a value, the
+return type must be specified after an arrow `->`.
+
+The final expression in the function will be used as return value.
+Alternatively, the `return` statement can be used to return a value earlier
+from within the function, even from inside loops or `if` statements.
+
+Let's rewrite FizzBuzz using functions!
+
+```rust,editable
+// Unlike C/C++, there's no restriction on the order of function definitions
+fn main() {
+ // We can use this function here, and define it somewhere later
+ fizzbuzz_to(100);
+}
+
+// Function that returns a boolean value
+fn is_divisible_by(lhs: u32, rhs: u32) -> bool {
+ // Corner case, early return
+ if rhs == 0 {
+ return false;
+ }
+
+ // This is an expression, the `return` keyword is not necessary here
+ lhs % rhs == 0
+}
+
+// Functions that "don't" return a value, actually return the unit type `()`
+fn fizzbuzz(n: u32) -> () {
+ if is_divisible_by(n, 15) {
+ println!("fizzbuzz");
+ } else if is_divisible_by(n, 3) {
+ println!("fizz");
+ } else if is_divisible_by(n, 5) {
+ println!("buzz");
+ } else {
+ println!("{}", n);
+ }
+}
+
+// When a function returns `()`, the return type can be omitted from the
+// signature
+fn fizzbuzz_to(n: u32) {
+ for n in 1..=n {
+ fizzbuzz(n);
+ }
+}
+```
diff --git a/src/doc/rust-by-example/src/fn/closures.md b/src/doc/rust-by-example/src/fn/closures.md
new file mode 100644
index 000000000..0c1b999ef
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures.md
@@ -0,0 +1,47 @@
+# Closures
+
+Closures are functions that can capture the enclosing environment. For
+example, a closure that captures the `x` variable:
+
+```Rust
+|val| val + x
+```
+
+The syntax and capabilities of closures make them very convenient for
+on the fly usage. Calling a closure is exactly like calling a function.
+However, both input and return types *can* be inferred and input
+variable names *must* be specified.
+
+Other characteristics of closures include:
+* using `||` instead of `()` around input variables.
+* optional body delimination (`{}`) for a single expression (mandatory otherwise).
+* the ability to capture the outer environment variables.
+
+```rust,editable
+fn main() {
+ // Increment via closures and functions.
+ fn function(i: i32) -> i32 { i + 1 }
+
+ // Closures are anonymous, here we are binding them to references
+ // Annotation is identical to function annotation but is optional
+ // as are the `{}` wrapping the body. These nameless functions
+ // are assigned to appropriately named variables.
+ let closure_annotated = |i: i32| -> i32 { i + 1 };
+ let closure_inferred = |i | i + 1 ;
+
+ let i = 1;
+ // Call the function and closures.
+ println!("function: {}", function(i));
+ println!("closure_annotated: {}", closure_annotated(i));
+ println!("closure_inferred: {}", closure_inferred(i));
+ // Once closure's type has been inferred, it cannot be inferred again with another type.
+ //println!("cannot reuse closure_inferred with another type: {}", closure_inferred(42i64));
+ // TODO: uncomment the line above and see the compiler error.
+
+ // A closure taking no arguments which returns an `i32`.
+ // The return type is inferred.
+ let one = || 1;
+ println!("closure returning one: {}", one());
+
+}
+```
diff --git a/src/doc/rust-by-example/src/fn/closures/anonymity.md b/src/doc/rust-by-example/src/fn/closures/anonymity.md
new file mode 100644
index 000000000..7008a446b
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/anonymity.md
@@ -0,0 +1,56 @@
+# Type anonymity
+
+Closures succinctly capture variables from enclosing scopes. Does this have
+any consequences? It surely does. Observe how using a closure as a function
+parameter requires [generics], which is necessary because of how they are
+defined:
+
+```rust
+// `F` must be generic.
+fn apply<F>(f: F) where
+ F: FnOnce() {
+ f();
+}
+```
+
+When a closure is defined, the compiler implicitly creates a new
+anonymous structure to store the captured variables inside, meanwhile
+implementing the functionality via one of the `traits`: `Fn`, `FnMut`, or
+`FnOnce` for this unknown type. This type is assigned to the variable which
+is stored until calling.
+
+Since this new type is of unknown type, any usage in a function will require
+generics. However, an unbounded type parameter `<T>` would still be ambiguous
+and not be allowed. Thus, bounding by one of the `traits`: `Fn`, `FnMut`, or
+`FnOnce` (which it implements) is sufficient to specify its type.
+
+```rust,editable
+// `F` must implement `Fn` for a closure which takes no
+// inputs and returns nothing - exactly what is required
+// for `print`.
+fn apply<F>(f: F) where
+ F: Fn() {
+ f();
+}
+
+fn main() {
+ let x = 7;
+
+ // Capture `x` into an anonymous type and implement
+ // `Fn` for it. Store it in `print`.
+ let print = || println!("{}", x);
+
+ apply(print);
+}
+```
+
+### See also:
+
+[A thorough analysis][thorough_analysis], [`Fn`][fn], [`FnMut`][fn_mut],
+and [`FnOnce`][fn_once]
+
+[generics]: ../../generics.md
+[fn]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+[fn_mut]: https://doc.rust-lang.org/std/ops/trait.FnMut.html
+[fn_once]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html
+[thorough_analysis]: https://huonw.github.io/blog/2015/05/finding-closure-in-rust/
diff --git a/src/doc/rust-by-example/src/fn/closures/capture.md b/src/doc/rust-by-example/src/fn/closures/capture.md
new file mode 100644
index 000000000..061ef1c7b
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/capture.md
@@ -0,0 +1,115 @@
+# Capturing
+
+Closures are inherently flexible and will do what the functionality requires
+to make the closure work without annotation. This allows capturing to
+flexibly adapt to the use case, sometimes moving and sometimes borrowing.
+Closures can capture variables:
+
+* by reference: `&T`
+* by mutable reference: `&mut T`
+* by value: `T`
+
+They preferentially capture variables by reference and only go lower when
+required.
+
+```rust,editable
+fn main() {
+ use std::mem;
+
+ let color = String::from("green");
+
+ // A closure to print `color` which immediately borrows (`&`) `color` and
+ // stores the borrow and closure in the `print` variable. It will remain
+ // borrowed until `print` is used the last time.
+ //
+ // `println!` only requires arguments by immutable reference so it doesn't
+ // impose anything more restrictive.
+ let print = || println!("`color`: {}", color);
+
+ // Call the closure using the borrow.
+ print();
+
+ // `color` can be borrowed immutably again, because the closure only holds
+ // an immutable reference to `color`.
+ let _reborrow = &color;
+ print();
+
+ // A move or reborrow is allowed after the final use of `print`
+ let _color_moved = color;
+
+
+ let mut count = 0;
+ // A closure to increment `count` could take either `&mut count` or `count`
+ // but `&mut count` is less restrictive so it takes that. Immediately
+ // borrows `count`.
+ //
+ // A `mut` is required on `inc` because a `&mut` is stored inside. Thus,
+ // calling the closure mutates the closure which requires a `mut`.
+ let mut inc = || {
+ count += 1;
+ println!("`count`: {}", count);
+ };
+
+ // Call the closure using a mutable borrow.
+ inc();
+
+ // The closure still mutably borrows `count` because it is called later.
+ // An attempt to reborrow will lead to an error.
+ // let _reborrow = &count;
+ // ^ TODO: try uncommenting this line.
+ inc();
+
+ // The closure no longer needs to borrow `&mut count`. Therefore, it is
+ // possible to reborrow without an error
+ let _count_reborrowed = &mut count;
+
+
+ // A non-copy type.
+ let movable = Box::new(3);
+
+ // `mem::drop` requires `T` so this must take by value. A copy type
+ // would copy into the closure leaving the original untouched.
+ // A non-copy must move and so `movable` immediately moves into
+ // the closure.
+ let consume = || {
+ println!("`movable`: {:?}", movable);
+ mem::drop(movable);
+ };
+
+ // `consume` consumes the variable so this can only be called once.
+ consume();
+ // consume();
+ // ^ TODO: Try uncommenting this line.
+}
+```
+
+Using `move` before vertical pipes forces closure
+to take ownership of captured variables:
+
+```rust,editable
+fn main() {
+ // `Vec` has non-copy semantics.
+ let haystack = vec![1, 2, 3];
+
+ let contains = move |needle| haystack.contains(needle);
+
+ println!("{}", contains(&1));
+ println!("{}", contains(&4));
+
+ // println!("There're {} elements in vec", haystack.len());
+ // ^ Uncommenting above line will result in compile-time error
+ // because borrow checker doesn't allow re-using variable after it
+ // has been moved.
+
+ // Removing `move` from closure's signature will cause closure
+ // to borrow _haystack_ variable immutably, hence _haystack_ is still
+ // available and uncommenting above line will not cause an error.
+}
+```
+
+### See also:
+
+[`Box`][box] and [`std::mem::drop`][drop]
+
+[box]: ../../std/box.md
+[drop]: https://doc.rust-lang.org/std/mem/fn.drop.html
diff --git a/src/doc/rust-by-example/src/fn/closures/closure_examples.md b/src/doc/rust-by-example/src/fn/closures/closure_examples.md
new file mode 100644
index 000000000..2455523ad
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/closure_examples.md
@@ -0,0 +1,3 @@
+# Examples in `std`
+
+This section contains a few examples of using closures from the `std` library. \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/fn/closures/closure_examples/iter_any.md b/src/doc/rust-by-example/src/fn/closures/closure_examples/iter_any.md
new file mode 100644
index 000000000..fe7fc39f8
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/closure_examples/iter_any.md
@@ -0,0 +1,54 @@
+# Iterator::any
+
+`Iterator::any` is a function which when passed an iterator, will return
+`true` if any element satisfies the predicate. Otherwise `false`. Its
+signature:
+
+```rust,ignore
+pub trait Iterator {
+ // The type being iterated over.
+ type Item;
+
+ // `any` takes `&mut self` meaning the caller may be borrowed
+ // and modified, but not consumed.
+ fn any<F>(&mut self, f: F) -> bool where
+ // `FnMut` meaning any captured variable may at most be
+ // modified, not consumed. `Self::Item` states it takes
+ // arguments to the closure by value.
+ F: FnMut(Self::Item) -> bool;
+}
+```
+
+```rust,editable
+fn main() {
+ let vec1 = vec![1, 2, 3];
+ let vec2 = vec![4, 5, 6];
+
+ // `iter()` for vecs yields `&i32`. Destructure to `i32`.
+ println!("2 in vec1: {}", vec1.iter() .any(|&x| x == 2));
+ // `into_iter()` for vecs yields `i32`. No destructuring required.
+ println!("2 in vec2: {}", vec2.into_iter().any(| x| x == 2));
+
+ // `iter()` only borrows `vec1` and its elements, so they can be used again
+ println!("vec1 len: {}", vec1.len());
+ println!("First element of vec1 is: {}", vec1[0]);
+ // `into_iter()` does move `vec2` and its elements, so they cannot be used again
+ // println!("First element of vec2 is: {}", vec2[0]);
+ // println!("vec2 len: {}", vec2.len());
+ // TODO: uncomment two lines above and see compiler errors.
+
+ let array1 = [1, 2, 3];
+ let array2 = [4, 5, 6];
+
+ // `iter()` for arrays yields `&i32`.
+ println!("2 in array1: {}", array1.iter() .any(|&x| x == 2));
+ // `into_iter()` for arrays yields `i32`.
+ println!("2 in array2: {}", array2.into_iter().any(|x| x == 2));
+}
+```
+
+### See also:
+
+[`std::iter::Iterator::any`][any]
+
+[any]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.any
diff --git a/src/doc/rust-by-example/src/fn/closures/closure_examples/iter_find.md b/src/doc/rust-by-example/src/fn/closures/closure_examples/iter_find.md
new file mode 100644
index 000000000..0a79f7c9d
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/closure_examples/iter_find.md
@@ -0,0 +1,81 @@
+# Searching through iterators
+
+`Iterator::find` is a function which iterates over an iterator and searches for the
+first value which satisfies some condition. If none of the values satisfy the
+condition, it returns `None`. Its signature:
+
+```rust,ignore
+pub trait Iterator {
+ // The type being iterated over.
+ type Item;
+
+ // `find` takes `&mut self` meaning the caller may be borrowed
+ // and modified, but not consumed.
+ fn find<P>(&mut self, predicate: P) -> Option<Self::Item> where
+ // `FnMut` meaning any captured variable may at most be
+ // modified, not consumed. `&Self::Item` states it takes
+ // arguments to the closure by reference.
+ P: FnMut(&Self::Item) -> bool;
+}
+```
+
+```rust,editable
+fn main() {
+ let vec1 = vec![1, 2, 3];
+ let vec2 = vec![4, 5, 6];
+
+ // `iter()` for vecs yields `&i32`.
+ let mut iter = vec1.iter();
+ // `into_iter()` for vecs yields `i32`.
+ let mut into_iter = vec2.into_iter();
+
+ // `iter()` for vecs yields `&i32`, and we want to reference one of its
+ // items, so we have to destructure `&&i32` to `i32`
+ println!("Find 2 in vec1: {:?}", iter .find(|&&x| x == 2));
+ // `into_iter()` for vecs yields `i32`, and we want to reference one of
+ // its items, so we have to destructure `&i32` to `i32`
+ println!("Find 2 in vec2: {:?}", into_iter.find(| &x| x == 2));
+
+ let array1 = [1, 2, 3];
+ let array2 = [4, 5, 6];
+
+ // `iter()` for arrays yields `&i32`
+ println!("Find 2 in array1: {:?}", array1.iter() .find(|&&x| x == 2));
+ // `into_iter()` for arrays yields `i32`
+ println!("Find 2 in array2: {:?}", array2.into_iter().find(|&x| x == 2));
+}
+```
+
+`Iterator::find` gives you a reference to the item. But if you want the _index_ of the
+item, use `Iterator::position`.
+
+```rust,editable
+fn main() {
+ let vec = vec![1, 9, 3, 3, 13, 2];
+
+ // `iter()` for vecs yields `&i32` and `position()` does not take a reference, so
+ // we have to destructure `&i32` to `i32`
+ let index_of_first_even_number = vec.iter().position(|&x| x % 2 == 0);
+ assert_eq!(index_of_first_even_number, Some(5));
+
+ // `into_iter()` for vecs yields `i32` and `position()` does not take a reference, so
+ // we do not have to destructure
+ let index_of_first_negative_number = vec.into_iter().position(|x| x < 0);
+ assert_eq!(index_of_first_negative_number, None);
+}
+```
+
+### See also:
+
+[`std::iter::Iterator::find`][find]
+
+[`std::iter::Iterator::find_map`][find_map]
+
+[`std::iter::Iterator::position`][position]
+
+[`std::iter::Iterator::rposition`][rposition]
+
+[find]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.find
+[find_map]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.find_map
+[position]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.position
+[rposition]: https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.rposition
diff --git a/src/doc/rust-by-example/src/fn/closures/input_functions.md b/src/doc/rust-by-example/src/fn/closures/input_functions.md
new file mode 100644
index 000000000..0cf9cd1cb
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/input_functions.md
@@ -0,0 +1,38 @@
+# Input functions
+
+Since closures may be used as arguments, you might wonder if the same can be said
+about functions. And indeed they can! If you declare a function that takes a
+closure as parameter, then any function that satisfies the trait bound of that
+closure can be passed as a parameter.
+
+```rust,editable
+// Define a function which takes a generic `F` argument
+// bounded by `Fn`, and calls it
+fn call_me<F: Fn()>(f: F) {
+ f();
+}
+
+// Define a wrapper function satisfying the `Fn` bound
+fn function() {
+ println!("I'm a function!");
+}
+
+fn main() {
+ // Define a closure satisfying the `Fn` bound
+ let closure = || println!("I'm a closure!");
+
+ call_me(closure);
+ call_me(function);
+}
+```
+
+As an additional note, the `Fn`, `FnMut`, and `FnOnce` `traits` dictate how
+a closure captures variables from the enclosing scope.
+
+### See also:
+
+[`Fn`][fn], [`FnMut`][fn_mut], and [`FnOnce`][fn_once]
+
+[fn]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+[fn_mut]: https://doc.rust-lang.org/std/ops/trait.FnMut.html
+[fn_once]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html
diff --git a/src/doc/rust-by-example/src/fn/closures/input_parameters.md b/src/doc/rust-by-example/src/fn/closures/input_parameters.md
new file mode 100644
index 000000000..8f4307ff5
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/input_parameters.md
@@ -0,0 +1,93 @@
+# As input parameters
+
+While Rust chooses how to capture variables on the fly mostly without type
+annotation, this ambiguity is not allowed when writing functions. When
+taking a closure as an input parameter, the closure's complete type must be
+annotated using one of a few `traits`, and they're determined by what the
+closure does with captured value. In order of decreasing restriction,
+they are:
+
+* `Fn`: the closure uses the captured value by reference (`&T`)
+* `FnMut`: the closure uses the captured value by mutable reference (`&mut T`)
+* `FnOnce`: the closure uses the captured value by value (`T`)
+
+On a variable-by-variable basis, the compiler will capture variables in the
+least restrictive manner possible.
+
+For instance, consider a parameter annotated as `FnOnce`. This specifies
+that the closure *may* capture by `&T`, `&mut T`, or `T`, but the compiler
+will ultimately choose based on how the captured variables are used in the
+closure.
+
+This is because if a move is possible, then any type of borrow should also
+be possible. Note that the reverse is not true. If the parameter is
+annotated as `Fn`, then capturing variables by `&mut T` or `T` are not
+allowed.
+
+In the following example, try swapping the usage of `Fn`, `FnMut`, and
+`FnOnce` to see what happens:
+
+```rust,editable
+// A function which takes a closure as an argument and calls it.
+// <F> denotes that F is a "Generic type parameter"
+fn apply<F>(f: F) where
+ // The closure takes no input and returns nothing.
+ F: FnOnce() {
+ // ^ TODO: Try changing this to `Fn` or `FnMut`.
+
+ f();
+}
+
+// A function which takes a closure and returns an `i32`.
+fn apply_to_3<F>(f: F) -> i32 where
+ // The closure takes an `i32` and returns an `i32`.
+ F: Fn(i32) -> i32 {
+
+ f(3)
+}
+
+fn main() {
+ use std::mem;
+
+ let greeting = "hello";
+ // A non-copy type.
+ // `to_owned` creates owned data from borrowed one
+ let mut farewell = "goodbye".to_owned();
+
+ // Capture 2 variables: `greeting` by reference and
+ // `farewell` by value.
+ let diary = || {
+ // `greeting` is by reference: requires `Fn`.
+ println!("I said {}.", greeting);
+
+ // Mutation forces `farewell` to be captured by
+ // mutable reference. Now requires `FnMut`.
+ farewell.push_str("!!!");
+ println!("Then I screamed {}.", farewell);
+ println!("Now I can sleep. zzzzz");
+
+ // Manually calling drop forces `farewell` to
+ // be captured by value. Now requires `FnOnce`.
+ mem::drop(farewell);
+ };
+
+ // Call the function which applies the closure.
+ apply(diary);
+
+ // `double` satisfies `apply_to_3`'s trait bound
+ let double = |x| 2 * x;
+
+ println!("3 doubled: {}", apply_to_3(double));
+}
+```
+
+### See also:
+
+[`std::mem::drop`][drop], [`Fn`][fn], [`FnMut`][fnmut], [Generics][generics], [where][where] and [`FnOnce`][fnonce]
+
+[drop]: https://doc.rust-lang.org/std/mem/fn.drop.html
+[fn]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+[fnmut]: https://doc.rust-lang.org/std/ops/trait.FnMut.html
+[fnonce]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html
+[generics]: ../../generics.md
+[where]: ../../generics/where.md
diff --git a/src/doc/rust-by-example/src/fn/closures/output_parameters.md b/src/doc/rust-by-example/src/fn/closures/output_parameters.md
new file mode 100644
index 000000000..6cad1735b
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/closures/output_parameters.md
@@ -0,0 +1,56 @@
+# As output parameters
+
+Closures as input parameters are possible, so returning closures as
+output parameters should also be possible. However, anonymous
+closure types are, by definition, unknown, so we have to use
+`impl Trait` to return them.
+
+The valid traits for returning a closure are:
+
+* `Fn`
+* `FnMut`
+* `FnOnce`
+
+Beyond this, the `move` keyword must be used, which signals that all captures
+occur by value. This is required because any captures by reference would be
+dropped as soon as the function exited, leaving invalid references in the
+closure.
+
+```rust,editable
+fn create_fn() -> impl Fn() {
+ let text = "Fn".to_owned();
+
+ move || println!("This is a: {}", text)
+}
+
+fn create_fnmut() -> impl FnMut() {
+ let text = "FnMut".to_owned();
+
+ move || println!("This is a: {}", text)
+}
+
+fn create_fnonce() -> impl FnOnce() {
+ let text = "FnOnce".to_owned();
+
+ move || println!("This is a: {}", text)
+}
+
+fn main() {
+ let fn_plain = create_fn();
+ let mut fn_mut = create_fnmut();
+ let fn_once = create_fnonce();
+
+ fn_plain();
+ fn_mut();
+ fn_once();
+}
+```
+
+### See also:
+
+[`Fn`][fn], [`FnMut`][fnmut], [Generics][generics] and [impl Trait][impltrait].
+
+[fn]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+[fnmut]: https://doc.rust-lang.org/std/ops/trait.FnMut.html
+[generics]: ../../generics.md
+[impltrait]: ../../trait/impl_trait.md
diff --git a/src/doc/rust-by-example/src/fn/diverging.md b/src/doc/rust-by-example/src/fn/diverging.md
new file mode 100644
index 000000000..52e1f819a
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/diverging.md
@@ -0,0 +1,69 @@
+# Diverging functions
+
+Diverging functions never return. They are marked using `!`, which is an empty type.
+
+```rust
+fn foo() -> ! {
+ panic!("This call never returns.");
+}
+```
+
+As opposed to all the other types, this one cannot be instantiated, because the
+set of all possible values this type can have is empty. Note that, it is
+different from the `()` type, which has exactly one possible value.
+
+For example, this function returns as usual, although there is no information
+in the return value.
+
+```rust
+fn some_fn() {
+ ()
+}
+
+fn main() {
+ let a: () = some_fn();
+ println!("This function returns and you can see this line.")
+}
+```
+
+As opposed to this function, which will never return the control back to the caller.
+
+```rust,ignore
+#![feature(never_type)]
+
+fn main() {
+ let x: ! = panic!("This call never returns.");
+ println!("You will never see this line!");
+}
+```
+
+Although this might seem like an abstract concept, it is in fact very useful and
+often handy. The main advantage of this type is that it can be cast to any other
+one and therefore used at places where an exact type is required, for instance
+in `match` branches. This allows us to write code like this:
+
+```rust
+fn main() {
+ fn sum_odd_numbers(up_to: u32) -> u32 {
+ let mut acc = 0;
+ for i in 0..up_to {
+ // Notice that the return type of this match expression must be u32
+ // because of the type of the "addition" variable.
+ let addition: u32 = match i%2 == 1 {
+ // The "i" variable is of type u32, which is perfectly fine.
+ true => i,
+ // On the other hand, the "continue" expression does not return
+ // u32, but it is still fine, because it never returns and therefore
+ // does not violate the type requirements of the match expression.
+ false => continue,
+ };
+ acc += addition;
+ }
+ acc
+ }
+ println!("Sum of odd numbers up to 9 (excluding): {}", sum_odd_numbers(9));
+}
+```
+
+It is also the return type of functions that loop forever (e.g. `loop {}`) like
+network servers or functions that terminate the process (e.g. `exit()`).
diff --git a/src/doc/rust-by-example/src/fn/hof.md b/src/doc/rust-by-example/src/fn/hof.md
new file mode 100644
index 000000000..88918cb52
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/hof.md
@@ -0,0 +1,50 @@
+# Higher Order Functions
+
+Rust provides Higher Order Functions (HOF). These are functions that
+take one or more functions and/or produce a more useful function. HOFs
+and lazy iterators give Rust its functional flavor.
+
+```rust,editable
+fn is_odd(n: u32) -> bool {
+ n % 2 == 1
+}
+
+fn main() {
+ println!("Find the sum of all the squared odd numbers under 1000");
+ let upper = 1000;
+
+ // Imperative approach
+ // Declare accumulator variable
+ let mut acc = 0;
+ // Iterate: 0, 1, 2, ... to infinity
+ for n in 0.. {
+ // Square the number
+ let n_squared = n * n;
+
+ if n_squared >= upper {
+ // Break loop if exceeded the upper limit
+ break;
+ } else if is_odd(n_squared) {
+ // Accumulate value, if it's odd
+ acc += n_squared;
+ }
+ }
+ println!("imperative style: {}", acc);
+
+ // Functional approach
+ let sum_of_squared_odd_numbers: u32 =
+ (0..).map(|n| n * n) // All natural numbers squared
+ .take_while(|&n_squared| n_squared < upper) // Below upper limit
+ .filter(|&n_squared| is_odd(n_squared)) // That are odd
+ .sum(); // Sum them
+ println!("functional style: {}", sum_of_squared_odd_numbers);
+}
+```
+
+[Option][option]
+and
+[Iterator][iter]
+implement their fair share of HOFs.
+
+[option]: https://doc.rust-lang.org/core/option/enum.Option.html
+[iter]: https://doc.rust-lang.org/core/iter/trait.Iterator.html
diff --git a/src/doc/rust-by-example/src/fn/methods.md b/src/doc/rust-by-example/src/fn/methods.md
new file mode 100644
index 000000000..bd5d997f0
--- /dev/null
+++ b/src/doc/rust-by-example/src/fn/methods.md
@@ -0,0 +1,118 @@
+# Associated functions & Methods
+
+Some functions are connected to a particular type. These come in two forms:
+associated functions, and methods. Associated functions are functions that
+are defined on a type generally, while methods are associated functions that are
+called on a particular instance of a type.
+
+```rust,editable
+struct Point {
+ x: f64,
+ y: f64,
+}
+
+// Implementation block, all `Point` associated functions & methods go in here
+impl Point {
+ // This is an "associated function" because this function is associated with
+ // a particular type, that is, Point.
+ //
+ // Associated functions don't need to be called with an instance.
+ // These functions are generally used like constructors.
+ fn origin() -> Point {
+ Point { x: 0.0, y: 0.0 }
+ }
+
+ // Another associated function, taking two arguments:
+ fn new(x: f64, y: f64) -> Point {
+ Point { x: x, y: y }
+ }
+}
+
+struct Rectangle {
+ p1: Point,
+ p2: Point,
+}
+
+impl Rectangle {
+ // This is a method
+ // `&self` is sugar for `self: &Self`, where `Self` is the type of the
+ // caller object. In this case `Self` = `Rectangle`
+ fn area(&self) -> f64 {
+ // `self` gives access to the struct fields via the dot operator
+ let Point { x: x1, y: y1 } = self.p1;
+ let Point { x: x2, y: y2 } = self.p2;
+
+ // `abs` is a `f64` method that returns the absolute value of the
+ // caller
+ ((x1 - x2) * (y1 - y2)).abs()
+ }
+
+ fn perimeter(&self) -> f64 {
+ let Point { x: x1, y: y1 } = self.p1;
+ let Point { x: x2, y: y2 } = self.p2;
+
+ 2.0 * ((x1 - x2).abs() + (y1 - y2).abs())
+ }
+
+ // This method requires the caller object to be mutable
+ // `&mut self` desugars to `self: &mut Self`
+ fn translate(&mut self, x: f64, y: f64) {
+ self.p1.x += x;
+ self.p2.x += x;
+
+ self.p1.y += y;
+ self.p2.y += y;
+ }
+}
+
+// `Pair` owns resources: two heap allocated integers
+struct Pair(Box<i32>, Box<i32>);
+
+impl Pair {
+ // This method "consumes" the resources of the caller object
+ // `self` desugars to `self: Self`
+ fn destroy(self) {
+ // Destructure `self`
+ let Pair(first, second) = self;
+
+ println!("Destroying Pair({}, {})", first, second);
+
+ // `first` and `second` go out of scope and get freed
+ }
+}
+
+fn main() {
+ let rectangle = Rectangle {
+ // Associated functions are called using double colons
+ p1: Point::origin(),
+ p2: Point::new(3.0, 4.0),
+ };
+
+ // Methods are called using the dot operator
+ // Note that the first argument `&self` is implicitly passed, i.e.
+ // `rectangle.perimeter()` === `Rectangle::perimeter(&rectangle)`
+ println!("Rectangle perimeter: {}", rectangle.perimeter());
+ println!("Rectangle area: {}", rectangle.area());
+
+ let mut square = Rectangle {
+ p1: Point::origin(),
+ p2: Point::new(1.0, 1.0),
+ };
+
+ // Error! `rectangle` is immutable, but this method requires a mutable
+ // object
+ //rectangle.translate(1.0, 0.0);
+ // TODO ^ Try uncommenting this line
+
+ // Okay! Mutable objects can call mutable methods
+ square.translate(1.0, 1.0);
+
+ let pair = Pair(Box::new(1), Box::new(2));
+
+ pair.destroy();
+
+ // Error! Previous `destroy` call "consumed" `pair`
+ //pair.destroy();
+ // TODO ^ Try uncommenting this line
+}
+```
diff --git a/src/doc/rust-by-example/src/generics.md b/src/doc/rust-by-example/src/generics.md
new file mode 100644
index 000000000..2cfd54ffb
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics.md
@@ -0,0 +1,64 @@
+# Generics
+
+*Generics* is the topic of generalizing types and functionalities to broader
+cases. This is extremely useful for reducing code duplication in many ways,
+but can call for rather involved syntax. Namely, being generic requires
+taking great care to specify over which types a generic type
+is actually considered valid. The simplest and most common use of generics
+is for type parameters.
+
+A type parameter is specified as generic by the use of angle brackets and upper
+[camel case][camelcase]: `<Aaa, Bbb, ...>`. "Generic type parameters" are
+typically represented as `<T>`. In Rust, "generic" also describes anything that
+accepts one or more generic type parameters `<T>`. Any type specified as a
+generic type parameter is generic, and everything else is concrete (non-generic).
+
+For example, defining a *generic function* named `foo` that takes an argument
+`T` of any type:
+
+```rust,ignore
+fn foo<T>(arg: T) { ... }
+```
+
+Because `T` has been specified as a generic type parameter using `<T>`, it
+is considered generic when used here as `(arg: T)`. This is the case even if `T`
+has previously been defined as a `struct`.
+
+This example shows some of the syntax in action:
+
+```rust,editable
+// A concrete type `A`.
+struct A;
+
+// In defining the type `Single`, the first use of `A` is not preceded by `<A>`.
+// Therefore, `Single` is a concrete type, and `A` is defined as above.
+struct Single(A);
+// ^ Here is `Single`s first use of the type `A`.
+
+// Here, `<T>` precedes the first use of `T`, so `SingleGen` is a generic type.
+// Because the type parameter `T` is generic, it could be anything, including
+// the concrete type `A` defined at the top.
+struct SingleGen<T>(T);
+
+fn main() {
+ // `Single` is concrete and explicitly takes `A`.
+ let _s = Single(A);
+
+ // Create a variable `_char` of type `SingleGen<char>`
+ // and give it the value `SingleGen('a')`.
+ // Here, `SingleGen` has a type parameter explicitly specified.
+ let _char: SingleGen<char> = SingleGen('a');
+
+ // `SingleGen` can also have a type parameter implicitly specified:
+ let _t = SingleGen(A); // Uses `A` defined at the top.
+ let _i32 = SingleGen(6); // Uses `i32`.
+ let _char = SingleGen('a'); // Uses `char`.
+}
+```
+
+### See also:
+
+[`structs`][structs]
+
+[structs]: custom_types/structs.md
+[camelcase]: https://en.wikipedia.org/wiki/CamelCase
diff --git a/src/doc/rust-by-example/src/generics/assoc_items.md b/src/doc/rust-by-example/src/generics/assoc_items.md
new file mode 100644
index 000000000..7a3871bb7
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/assoc_items.md
@@ -0,0 +1,15 @@
+# Associated items
+
+"Associated Items" refers to a set of rules pertaining to [`item`][items]s
+of various types. It is an extension to `trait` generics, and allows
+`trait`s to internally define new items.
+
+One such item is called an *associated type*, providing simpler usage
+patterns when the `trait` is generic over its container type.
+
+### See also:
+
+[RFC][RFC]
+
+[items]: https://doc.rust-lang.org/reference/items.html
+[RFC]: https://github.com/rust-lang/rfcs/blob/master/text/0195-associated-items.md
diff --git a/src/doc/rust-by-example/src/generics/assoc_items/the_problem.md b/src/doc/rust-by-example/src/generics/assoc_items/the_problem.md
new file mode 100644
index 000000000..bc6f7636b
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/assoc_items/the_problem.md
@@ -0,0 +1,67 @@
+# The Problem
+
+A `trait` that is generic over its container type has type specification
+requirements - users of the `trait` *must* specify all of its generic types.
+
+In the example below, the `Contains` `trait` allows the use of the generic
+types `A` and `B`. The trait is then implemented for the `Container` type,
+specifying `i32` for `A` and `B` so that it can be used with `fn difference()`.
+
+Because `Contains` is generic, we are forced to explicitly state *all* of the
+generic types for `fn difference()`. In practice, we want a way to express that
+`A` and `B` are determined by the *input* `C`. As you will see in the next
+section, associated types provide exactly that capability.
+
+```rust,editable
+struct Container(i32, i32);
+
+// A trait which checks if 2 items are stored inside of container.
+// Also retrieves first or last value.
+trait Contains<A, B> {
+ fn contains(&self, _: &A, _: &B) -> bool; // Explicitly requires `A` and `B`.
+ fn first(&self) -> i32; // Doesn't explicitly require `A` or `B`.
+ fn last(&self) -> i32; // Doesn't explicitly require `A` or `B`.
+}
+
+impl Contains<i32, i32> for Container {
+ // True if the numbers stored are equal.
+ fn contains(&self, number_1: &i32, number_2: &i32) -> bool {
+ (&self.0 == number_1) && (&self.1 == number_2)
+ }
+
+ // Grab the first number.
+ fn first(&self) -> i32 { self.0 }
+
+ // Grab the last number.
+ fn last(&self) -> i32 { self.1 }
+}
+
+// `C` contains `A` and `B`. In light of that, having to express `A` and
+// `B` again is a nuisance.
+fn difference<A, B, C>(container: &C) -> i32 where
+ C: Contains<A, B> {
+ container.last() - container.first()
+}
+
+fn main() {
+ let number_1 = 3;
+ let number_2 = 10;
+
+ let container = Container(number_1, number_2);
+
+ println!("Does container contain {} and {}: {}",
+ &number_1, &number_2,
+ container.contains(&number_1, &number_2));
+ println!("First number: {}", container.first());
+ println!("Last number: {}", container.last());
+
+ println!("The difference is: {}", difference(&container));
+}
+```
+
+### See also:
+
+[`struct`s][structs], and [`trait`s][traits]
+
+[structs]: ../../custom_types/structs.md
+[traits]: ../../trait.md
diff --git a/src/doc/rust-by-example/src/generics/assoc_items/types.md b/src/doc/rust-by-example/src/generics/assoc_items/types.md
new file mode 100644
index 000000000..317370468
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/assoc_items/types.md
@@ -0,0 +1,85 @@
+# Associated types
+
+The use of "Associated types" improves the overall readability of code
+by moving inner types locally into a trait as *output* types. Syntax
+for the `trait` definition is as follows:
+
+```rust
+// `A` and `B` are defined in the trait via the `type` keyword.
+// (Note: `type` in this context is different from `type` when used for
+// aliases).
+trait Contains {
+ type A;
+ type B;
+
+ // Updated syntax to refer to these new types generically.
+ fn contains(&self, _: &Self::A, _: &Self::B) -> bool;
+}
+```
+
+Note that functions that use the `trait` `Contains` are no longer required
+to express `A` or `B` at all:
+
+```rust,ignore
+// Without using associated types
+fn difference<A, B, C>(container: &C) -> i32 where
+ C: Contains<A, B> { ... }
+
+// Using associated types
+fn difference<C: Contains>(container: &C) -> i32 { ... }
+```
+
+Let's rewrite the example from the previous section using associated types:
+
+```rust,editable
+struct Container(i32, i32);
+
+// A trait which checks if 2 items are stored inside of container.
+// Also retrieves first or last value.
+trait Contains {
+ // Define generic types here which methods will be able to utilize.
+ type A;
+ type B;
+
+ fn contains(&self, _: &Self::A, _: &Self::B) -> bool;
+ fn first(&self) -> i32;
+ fn last(&self) -> i32;
+}
+
+impl Contains for Container {
+ // Specify what types `A` and `B` are. If the `input` type
+ // is `Container(i32, i32)`, the `output` types are determined
+ // as `i32` and `i32`.
+ type A = i32;
+ type B = i32;
+
+ // `&Self::A` and `&Self::B` are also valid here.
+ fn contains(&self, number_1: &i32, number_2: &i32) -> bool {
+ (&self.0 == number_1) && (&self.1 == number_2)
+ }
+ // Grab the first number.
+ fn first(&self) -> i32 { self.0 }
+
+ // Grab the last number.
+ fn last(&self) -> i32 { self.1 }
+}
+
+fn difference<C: Contains>(container: &C) -> i32 {
+ container.last() - container.first()
+}
+
+fn main() {
+ let number_1 = 3;
+ let number_2 = 10;
+
+ let container = Container(number_1, number_2);
+
+ println!("Does container contain {} and {}: {}",
+ &number_1, &number_2,
+ container.contains(&number_1, &number_2));
+ println!("First number: {}", container.first());
+ println!("Last number: {}", container.last());
+
+ println!("The difference is: {}", difference(&container));
+}
+```
diff --git a/src/doc/rust-by-example/src/generics/bounds.md b/src/doc/rust-by-example/src/generics/bounds.md
new file mode 100644
index 000000000..5d7e849a8
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/bounds.md
@@ -0,0 +1,81 @@
+# Bounds
+
+When working with generics, the type parameters often must use traits as *bounds* to
+stipulate what functionality a type implements. For example, the following
+example uses the trait `Display` to print and so it requires `T` to be bound
+by `Display`; that is, `T` *must* implement `Display`.
+
+```rust,ignore
+// Define a function `printer` that takes a generic type `T` which
+// must implement trait `Display`.
+fn printer<T: Display>(t: T) {
+ println!("{}", t);
+}
+```
+
+Bounding restricts the generic to types that conform to the bounds. That is:
+
+```rust,ignore
+struct S<T: Display>(T);
+
+// Error! `Vec<T>` does not implement `Display`. This
+// specialization will fail.
+let s = S(vec![1]);
+```
+
+Another effect of bounding is that generic instances are allowed to access the
+[methods] of traits specified in the bounds. For example:
+
+```rust,editable
+// A trait which implements the print marker: `{:?}`.
+use std::fmt::Debug;
+
+trait HasArea {
+ fn area(&self) -> f64;
+}
+
+impl HasArea for Rectangle {
+ fn area(&self) -> f64 { self.length * self.height }
+}
+
+#[derive(Debug)]
+struct Rectangle { length: f64, height: f64 }
+#[allow(dead_code)]
+struct Triangle { length: f64, height: f64 }
+
+// The generic `T` must implement `Debug`. Regardless
+// of the type, this will work properly.
+fn print_debug<T: Debug>(t: &T) {
+ println!("{:?}", t);
+}
+
+// `T` must implement `HasArea`. Any type which meets
+// the bound can access `HasArea`'s function `area`.
+fn area<T: HasArea>(t: &T) -> f64 { t.area() }
+
+fn main() {
+ let rectangle = Rectangle { length: 3.0, height: 4.0 };
+ let _triangle = Triangle { length: 3.0, height: 4.0 };
+
+ print_debug(&rectangle);
+ println!("Area: {}", rectangle.area());
+
+ //print_debug(&_triangle);
+ //println!("Area: {}", _triangle.area());
+ // ^ TODO: Try uncommenting these.
+ // | Error: Does not implement either `Debug` or `HasArea`.
+}
+```
+
+As an additional note, [`where`][where] clauses can also be used to apply bounds in
+some cases to be more expressive.
+
+### See also:
+
+[`std::fmt`][fmt], [`struct`s][structs], and [`trait`s][traits]
+
+[fmt]: ../hello/print.md
+[methods]: ../fn/methods.md
+[structs]: ../custom_types/structs.md
+[traits]: ../trait.md
+[where]: ../generics/where.md
diff --git a/src/doc/rust-by-example/src/generics/bounds/testcase_empty.md b/src/doc/rust-by-example/src/generics/bounds/testcase_empty.md
new file mode 100644
index 000000000..e956a57e4
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/bounds/testcase_empty.md
@@ -0,0 +1,43 @@
+# Testcase: empty bounds
+
+A consequence of how bounds work is that even if a `trait` doesn't
+include any functionality, you can still use it as a bound. `Eq` and
+`Copy` are examples of such `trait`s from the `std` library.
+
+```rust,editable
+struct Cardinal;
+struct BlueJay;
+struct Turkey;
+
+trait Red {}
+trait Blue {}
+
+impl Red for Cardinal {}
+impl Blue for BlueJay {}
+
+// These functions are only valid for types which implement these
+// traits. The fact that the traits are empty is irrelevant.
+fn red<T: Red>(_: &T) -> &'static str { "red" }
+fn blue<T: Blue>(_: &T) -> &'static str { "blue" }
+
+fn main() {
+ let cardinal = Cardinal;
+ let blue_jay = BlueJay;
+ let _turkey = Turkey;
+
+ // `red()` won't work on a blue jay nor vice versa
+ // because of the bounds.
+ println!("A cardinal is {}", red(&cardinal));
+ println!("A blue jay is {}", blue(&blue_jay));
+ //println!("A turkey is {}", red(&_turkey));
+ // ^ TODO: Try uncommenting this line.
+}
+```
+
+### See also:
+
+[`std::cmp::Eq`][eq], [`std::marker::Copy`][copy], and [`trait`s][traits]
+
+[eq]: https://doc.rust-lang.org/std/cmp/trait.Eq.html
+[copy]: https://doc.rust-lang.org/std/marker/trait.Copy.html
+[traits]: ../../trait.md
diff --git a/src/doc/rust-by-example/src/generics/gen_fn.md b/src/doc/rust-by-example/src/generics/gen_fn.md
new file mode 100644
index 000000000..264057687
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/gen_fn.md
@@ -0,0 +1,59 @@
+# Functions
+
+The same set of rules can be applied to functions: a type `T` becomes
+generic when preceded by `<T>`.
+
+Using generic functions sometimes requires explicitly specifying type
+parameters. This may be the case if the function is called where the return type
+is generic, or if the compiler doesn't have enough information to infer
+the necessary type parameters.
+
+A function call with explicitly specified type parameters looks like:
+`fun::<A, B, ...>()`.
+
+```rust,editable
+struct A; // Concrete type `A`.
+struct S(A); // Concrete type `S`.
+struct SGen<T>(T); // Generic type `SGen`.
+
+// The following functions all take ownership of the variable passed into
+// them and immediately go out of scope, freeing the variable.
+
+// Define a function `reg_fn` that takes an argument `_s` of type `S`.
+// This has no `<T>` so this is not a generic function.
+fn reg_fn(_s: S) {}
+
+// Define a function `gen_spec_t` that takes an argument `_s` of type `SGen<T>`.
+// It has been explicitly given the type parameter `A`, but because `A` has not
+// been specified as a generic type parameter for `gen_spec_t`, it is not generic.
+fn gen_spec_t(_s: SGen<A>) {}
+
+// Define a function `gen_spec_i32` that takes an argument `_s` of type `SGen<i32>`.
+// It has been explicitly given the type parameter `i32`, which is a specific type.
+// Because `i32` is not a generic type, this function is also not generic.
+fn gen_spec_i32(_s: SGen<i32>) {}
+
+// Define a function `generic` that takes an argument `_s` of type `SGen<T>`.
+// Because `SGen<T>` is preceded by `<T>`, this function is generic over `T`.
+fn generic<T>(_s: SGen<T>) {}
+
+fn main() {
+ // Using the non-generic functions
+ reg_fn(S(A)); // Concrete type.
+ gen_spec_t(SGen(A)); // Implicitly specified type parameter `A`.
+ gen_spec_i32(SGen(6)); // Implicitly specified type parameter `i32`.
+
+ // Explicitly specified type parameter `char` to `generic()`.
+ generic::<char>(SGen('a'));
+
+ // Implicitly specified type parameter `char` to `generic()`.
+ generic(SGen('c'));
+}
+```
+
+### See also:
+
+[functions][fn] and [`struct`s][structs]
+
+[fn]: ../fn.md
+[structs]: ../custom_types/structs.md
diff --git a/src/doc/rust-by-example/src/generics/gen_trait.md b/src/doc/rust-by-example/src/generics/gen_trait.md
new file mode 100644
index 000000000..6847dfea8
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/gen_trait.md
@@ -0,0 +1,45 @@
+# Traits
+
+Of course `trait`s can also be generic. Here we define one which reimplements
+the `Drop` `trait` as a generic method to `drop` itself and an input.
+
+```rust,editable
+// Non-copyable types.
+struct Empty;
+struct Null;
+
+// A trait generic over `T`.
+trait DoubleDrop<T> {
+ // Define a method on the caller type which takes an
+ // additional single parameter `T` and does nothing with it.
+ fn double_drop(self, _: T);
+}
+
+// Implement `DoubleDrop<T>` for any generic parameter `T` and
+// caller `U`.
+impl<T, U> DoubleDrop<T> for U {
+ // This method takes ownership of both passed arguments,
+ // deallocating both.
+ fn double_drop(self, _: T) {}
+}
+
+fn main() {
+ let empty = Empty;
+ let null = Null;
+
+ // Deallocate `empty` and `null`.
+ empty.double_drop(null);
+
+ //empty;
+ //null;
+ // ^ TODO: Try uncommenting these lines.
+}
+```
+
+### See also:
+
+[`Drop`][Drop], [`struct`][structs], and [`trait`][traits]
+
+[Drop]: https://doc.rust-lang.org/std/ops/trait.Drop.html
+[structs]: ../custom_types/structs.md
+[traits]: ../trait.md
diff --git a/src/doc/rust-by-example/src/generics/impl.md b/src/doc/rust-by-example/src/generics/impl.md
new file mode 100644
index 000000000..69554316e
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/impl.md
@@ -0,0 +1,56 @@
+# Implementation
+
+Similar to functions, implementations require care to remain generic.
+
+```rust
+struct S; // Concrete type `S`
+struct GenericVal<T>(T); // Generic type `GenericVal`
+
+// impl of GenericVal where we explicitly specify type parameters:
+impl GenericVal<f32> {} // Specify `f32`
+impl GenericVal<S> {} // Specify `S` as defined above
+
+// `<T>` Must precede the type to remain generic
+impl<T> GenericVal<T> {}
+```
+
+```rust,editable
+struct Val {
+ val: f64,
+}
+
+struct GenVal<T> {
+ gen_val: T,
+}
+
+// impl of Val
+impl Val {
+ fn value(&self) -> &f64 {
+ &self.val
+ }
+}
+
+// impl of GenVal for a generic type `T`
+impl<T> GenVal<T> {
+ fn value(&self) -> &T {
+ &self.gen_val
+ }
+}
+
+fn main() {
+ let x = Val { val: 3.0 };
+ let y = GenVal { gen_val: 3i32 };
+
+ println!("{}, {}", x.value(), y.value());
+}
+```
+
+### See also:
+
+[functions returning references][fn], [`impl`][methods], and [`struct`][structs]
+
+
+[fn]: ../scope/lifetime/fn.md
+[methods]: ../fn/methods.md
+[specialization_plans]: https://blog.rust-lang.org/2015/05/11/traits.html#the-future
+[structs]: ../custom_types/structs.md
diff --git a/src/doc/rust-by-example/src/generics/multi_bounds.md b/src/doc/rust-by-example/src/generics/multi_bounds.md
new file mode 100644
index 000000000..969ba6417
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/multi_bounds.md
@@ -0,0 +1,37 @@
+# Multiple bounds
+
+Multiple bounds for a single type can be applied with a `+`. Like normal, different types are
+separated with `,`.
+
+```rust,editable
+use std::fmt::{Debug, Display};
+
+fn compare_prints<T: Debug + Display>(t: &T) {
+ println!("Debug: `{:?}`", t);
+ println!("Display: `{}`", t);
+}
+
+fn compare_types<T: Debug, U: Debug>(t: &T, u: &U) {
+ println!("t: `{:?}`", t);
+ println!("u: `{:?}`", u);
+}
+
+fn main() {
+ let string = "words";
+ let array = [1, 2, 3];
+ let vec = vec![1, 2, 3];
+
+ compare_prints(&string);
+ //compare_prints(&array);
+ // TODO ^ Try uncommenting this.
+
+ compare_types(&array, &vec);
+}
+```
+
+### See also:
+
+[`std::fmt`][fmt] and [`trait`s][traits]
+
+[fmt]: ../hello/print.md
+[traits]: ../trait.md
diff --git a/src/doc/rust-by-example/src/generics/new_types.md b/src/doc/rust-by-example/src/generics/new_types.md
new file mode 100644
index 000000000..c819002c2
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/new_types.md
@@ -0,0 +1,59 @@
+# New Type Idiom
+
+The `newtype` idiom gives compile time guarantees that the right type of value is supplied
+to a program.
+
+For example, an age verification function that checks age in years, *must* be given
+a value of type `Years`.
+
+```rust, editable
+struct Years(i64);
+
+struct Days(i64);
+
+impl Years {
+ pub fn to_days(&self) -> Days {
+ Days(self.0 * 365)
+ }
+}
+
+
+impl Days {
+ /// truncates partial years
+ pub fn to_years(&self) -> Years {
+ Years(self.0 / 365)
+ }
+}
+
+fn old_enough(age: &Years) -> bool {
+ age.0 >= 18
+}
+
+fn main() {
+ let age = Years(5);
+ let age_days = age.to_days();
+ println!("Old enough {}", old_enough(&age));
+ println!("Old enough {}", old_enough(&age_days.to_years()));
+ // println!("Old enough {}", old_enough(&age_days));
+}
+```
+
+Uncomment the last print statement to observe that the type supplied must be `Years`.
+
+To obtain the `newtype`'s value as the base type, you may use the tuple or destructuring syntax like so:
+```rust, editable
+struct Years(i64);
+
+fn main() {
+ let years = Years(42);
+ let years_as_primitive_1: i64 = years.0; // Tuple
+ let Years(years_as_primitive_2) = years; // Destructuring
+}
+```
+
+### See also:
+
+[`structs`][struct]
+
+[struct]: ../custom_types/structs.md
+
diff --git a/src/doc/rust-by-example/src/generics/phantom.md b/src/doc/rust-by-example/src/generics/phantom.md
new file mode 100644
index 000000000..8743a3ed6
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/phantom.md
@@ -0,0 +1,63 @@
+# Phantom type parameters
+
+A phantom type parameter is one that doesn't show up at runtime,
+but is checked statically (and only) at compile time.
+
+Data types can use extra generic type parameters to act as markers
+or to perform type checking at compile time. These extra parameters
+hold no storage values, and have no runtime behavior.
+
+In the following example, we combine [std::marker::PhantomData]
+with the phantom type parameter concept to create tuples containing
+different data types.
+
+```rust,editable
+use std::marker::PhantomData;
+
+// A phantom tuple struct which is generic over `A` with hidden parameter `B`.
+#[derive(PartialEq)] // Allow equality test for this type.
+struct PhantomTuple<A, B>(A, PhantomData<B>);
+
+// A phantom type struct which is generic over `A` with hidden parameter `B`.
+#[derive(PartialEq)] // Allow equality test for this type.
+struct PhantomStruct<A, B> { first: A, phantom: PhantomData<B> }
+
+// Note: Storage is allocated for generic type `A`, but not for `B`.
+// Therefore, `B` cannot be used in computations.
+
+fn main() {
+ // Here, `f32` and `f64` are the hidden parameters.
+ // PhantomTuple type specified as `<char, f32>`.
+ let _tuple1: PhantomTuple<char, f32> = PhantomTuple('Q', PhantomData);
+ // PhantomTuple type specified as `<char, f64>`.
+ let _tuple2: PhantomTuple<char, f64> = PhantomTuple('Q', PhantomData);
+
+ // Type specified as `<char, f32>`.
+ let _struct1: PhantomStruct<char, f32> = PhantomStruct {
+ first: 'Q',
+ phantom: PhantomData,
+ };
+ // Type specified as `<char, f64>`.
+ let _struct2: PhantomStruct<char, f64> = PhantomStruct {
+ first: 'Q',
+ phantom: PhantomData,
+ };
+
+ // Compile-time Error! Type mismatch so these cannot be compared:
+ // println!("_tuple1 == _tuple2 yields: {}",
+ // _tuple1 == _tuple2);
+
+ // Compile-time Error! Type mismatch so these cannot be compared:
+ // println!("_struct1 == _struct2 yields: {}",
+ // _struct1 == _struct2);
+}
+```
+
+### See also:
+
+[Derive], [struct], and [TupleStructs]
+
+[Derive]: ../trait/derive.md
+[struct]: ../custom_types/structs.md
+[TupleStructs]: ../custom_types/structs.md
+[std::marker::PhantomData]: https://doc.rust-lang.org/std/marker/struct.PhantomData.html
diff --git a/src/doc/rust-by-example/src/generics/phantom/testcase_units.md b/src/doc/rust-by-example/src/generics/phantom/testcase_units.md
new file mode 100644
index 000000000..c3b9cbd2e
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/phantom/testcase_units.md
@@ -0,0 +1,88 @@
+# Testcase: unit clarification
+
+A useful method of unit conversions can be examined by implementing `Add`
+with a phantom type parameter. The `Add` `trait` is examined below:
+
+```rust,ignore
+// This construction would impose: `Self + RHS = Output`
+// where RHS defaults to Self if not specified in the implementation.
+pub trait Add<RHS = Self> {
+ type Output;
+
+ fn add(self, rhs: RHS) -> Self::Output;
+}
+
+// `Output` must be `T<U>` so that `T<U> + T<U> = T<U>`.
+impl<U> Add for T<U> {
+ type Output = T<U>;
+ ...
+}
+```
+
+The whole implementation:
+
+```rust,editable
+use std::ops::Add;
+use std::marker::PhantomData;
+
+/// Create void enumerations to define unit types.
+#[derive(Debug, Clone, Copy)]
+enum Inch {}
+#[derive(Debug, Clone, Copy)]
+enum Mm {}
+
+/// `Length` is a type with phantom type parameter `Unit`,
+/// and is not generic over the length type (that is `f64`).
+///
+/// `f64` already implements the `Clone` and `Copy` traits.
+#[derive(Debug, Clone, Copy)]
+struct Length<Unit>(f64, PhantomData<Unit>);
+
+/// The `Add` trait defines the behavior of the `+` operator.
+impl<Unit> Add for Length<Unit> {
+ type Output = Length<Unit>;
+
+ // add() returns a new `Length` struct containing the sum.
+ fn add(self, rhs: Length<Unit>) -> Length<Unit> {
+ // `+` calls the `Add` implementation for `f64`.
+ Length(self.0 + rhs.0, PhantomData)
+ }
+}
+
+fn main() {
+ // Specifies `one_foot` to have phantom type parameter `Inch`.
+ let one_foot: Length<Inch> = Length(12.0, PhantomData);
+ // `one_meter` has phantom type parameter `Mm`.
+ let one_meter: Length<Mm> = Length(1000.0, PhantomData);
+
+ // `+` calls the `add()` method we implemented for `Length<Unit>`.
+ //
+ // Since `Length` implements `Copy`, `add()` does not consume
+ // `one_foot` and `one_meter` but copies them into `self` and `rhs`.
+ let two_feet = one_foot + one_foot;
+ let two_meters = one_meter + one_meter;
+
+ // Addition works.
+ println!("one foot + one_foot = {:?} in", two_feet.0);
+ println!("one meter + one_meter = {:?} mm", two_meters.0);
+
+ // Nonsensical operations fail as they should:
+ // Compile-time Error: type mismatch.
+ //let one_feter = one_foot + one_meter;
+}
+```
+
+### See also:
+
+[Borrowing (`&`)], [Bounds (`X: Y`)], [enum], [impl & self],
+[Overloading], [ref], [Traits (`X for Y`)], and [TupleStructs].
+
+[Borrowing (`&`)]: ../../scope/borrow.md
+[Bounds (`X: Y`)]: ../../generics/bounds.md
+[enum]: ../../custom_types/enum.md
+[impl & self]: ../../fn/methods.md
+[Overloading]: ../../trait/ops.md
+[ref]: ../../scope/borrow/ref.md
+[Traits (`X for Y`)]: ../../trait.md
+[TupleStructs]: ../../custom_types/structs.md
+[std::marker::PhantomData]: https://doc.rust-lang.org/std/marker/struct.PhantomData.html
diff --git a/src/doc/rust-by-example/src/generics/where.md b/src/doc/rust-by-example/src/generics/where.md
new file mode 100644
index 000000000..f35f03f92
--- /dev/null
+++ b/src/doc/rust-by-example/src/generics/where.md
@@ -0,0 +1,55 @@
+# Where clauses
+
+A bound can also be expressed using a `where` clause immediately
+before the opening `{`, rather than at the type's first mention.
+Additionally, `where` clauses can apply bounds to arbitrary types,
+rather than just to type parameters.
+
+Some cases that a `where` clause is useful:
+
+* When specifying generic types and bounds separately is clearer:
+
+```rust,ignore
+impl <A: TraitB + TraitC, D: TraitE + TraitF> MyTrait<A, D> for YourType {}
+
+// Expressing bounds with a `where` clause
+impl <A, D> MyTrait<A, D> for YourType where
+ A: TraitB + TraitC,
+ D: TraitE + TraitF {}
+```
+
+* When using a `where` clause is more expressive than using normal syntax.
+The `impl` in this example cannot be directly expressed without a `where` clause:
+
+```rust,editable
+use std::fmt::Debug;
+
+trait PrintInOption {
+ fn print_in_option(self);
+}
+
+// Because we would otherwise have to express this as `T: Debug` or
+// use another method of indirect approach, this requires a `where` clause:
+impl<T> PrintInOption for T where
+ Option<T>: Debug {
+ // We want `Option<T>: Debug` as our bound because that is what's
+ // being printed. Doing otherwise would be using the wrong bound.
+ fn print_in_option(self) {
+ println!("{:?}", Some(self));
+ }
+}
+
+fn main() {
+ let vec = vec![1, 2, 3];
+
+ vec.print_in_option();
+}
+```
+
+### See also:
+
+[RFC][where], [`struct`][struct], and [`trait`][trait]
+
+[struct]: ../custom_types/structs.md
+[trait]: ../trait.md
+[where]: https://github.com/rust-lang/rfcs/blob/master/text/0135-where.md
diff --git a/src/doc/rust-by-example/src/hello.md b/src/doc/rust-by-example/src/hello.md
new file mode 100644
index 000000000..2a8d3153f
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello.md
@@ -0,0 +1,49 @@
+# Hello World
+
+This is the source code of the traditional Hello World program.
+
+```rust,editable
+// This is a comment, and is ignored by the compiler
+// You can test this code by clicking the "Run" button over there ->
+// or if you prefer to use your keyboard, you can use the "Ctrl + Enter" shortcut
+
+// This code is editable, feel free to hack it!
+// You can always return to the original code by clicking the "Reset" button ->
+
+// This is the main function
+fn main() {
+ // Statements here are executed when the compiled binary is called
+
+ // Print text to the console
+ println!("Hello World!");
+}
+```
+
+`println!` is a [*macro*][macros] that prints text to the
+console.
+
+A binary can be generated using the Rust compiler: `rustc`.
+
+```bash
+$ rustc hello.rs
+```
+
+`rustc` will produce a `hello` binary that can be executed.
+
+```bash
+$ ./hello
+Hello World!
+```
+
+### Activity
+
+Click 'Run' above to see the expected output. Next, add a new
+line with a second `println!` macro so that the output
+shows:
+
+```text
+Hello World!
+I'm a Rustacean!
+```
+
+[macros]: macros.md
diff --git a/src/doc/rust-by-example/src/hello/comment.md b/src/doc/rust-by-example/src/hello/comment.md
new file mode 100644
index 000000000..8cd1ccf55
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello/comment.md
@@ -0,0 +1,51 @@
+# Comments
+
+Any program requires comments, and Rust supports
+a few different varieties:
+
+* *Regular comments* which are ignored by the compiler:
+ * `// Line comments which go to the end of the line.`
+ * `/* Block comments which go to the closing delimiter. */`
+* *Doc comments* which are parsed into HTML library
+ [documentation][docs]:
+ * `/// Generate library docs for the following item.`
+ * `//! Generate library docs for the enclosing item.`
+
+```rust,editable
+fn main() {
+ // This is an example of a line comment
+ // There are two slashes at the beginning of the line
+ // And nothing written inside these will be read by the compiler
+
+ // println!("Hello, world!");
+
+ // Run it. See? Now try deleting the two slashes, and run it again.
+
+ /*
+ * This is another type of comment, a block comment. In general,
+ * line comments are the recommended comment style. But
+ * block comments are extremely useful for temporarily disabling
+ * chunks of code. /* Block comments can be /* nested, */ */
+ * so it takes only a few keystrokes to comment out everything
+ * in this main() function. /*/*/* Try it yourself! */*/*/
+ */
+
+ /*
+ Note: The previous column of `*` was entirely for style. There's
+ no actual need for it.
+ */
+
+ // You can manipulate expressions more easily with block comments
+ // than with line comments. Try deleting the comment delimiters
+ // to change the result:
+ let x = 5 + /* 90 + */ 5;
+ println!("Is `x` 10 or 100? x = {}", x);
+}
+
+```
+
+### See also:
+
+[Library documentation][docs]
+
+[docs]: ../meta/doc.md
diff --git a/src/doc/rust-by-example/src/hello/print.md b/src/doc/rust-by-example/src/hello/print.md
new file mode 100644
index 000000000..34dc9f0dd
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello/print.md
@@ -0,0 +1,111 @@
+# Formatted print
+
+Printing is handled by a series of [`macros`][macros] defined in [`std::fmt`][fmt]
+some of which include:
+
+* `format!`: write formatted text to [`String`][string]
+* `print!`: same as `format!` but the text is printed to the console (io::stdout).
+* `println!`: same as `print!` but a newline is appended.
+* `eprint!`: same as `print!` but the text is printed to the standard error (io::stderr).
+* `eprintln!`: same as `eprint!` but a newline is appended.
+
+All parse text in the same fashion. As a plus, Rust checks formatting
+correctness at compile time.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ // In general, the `{}` will be automatically replaced with any
+ // arguments. These will be stringified.
+ println!("{} days", 31);
+
+ // Positional arguments can be used. Specifying an integer inside `{}`
+ // determines which additional argument will be replaced. Arguments start
+ // at 0 immediately after the format string
+ println!("{0}, this is {1}. {1}, this is {0}", "Alice", "Bob");
+
+ // As can named arguments.
+ println!("{subject} {verb} {object}",
+ object="the lazy dog",
+ subject="the quick brown fox",
+ verb="jumps over");
+
+ // Different formatting can be invoked by specifying the format character after a
+ // `:`.
+ println!("Base 10 repr: {}", 69420);
+ println!("Base 2 (binary) repr: {:b}", 69420);
+ println!("Base 8 (octal) repr: {:o}", 69420);
+ println!("Base 16 (hexadecimal) repr: {:x}", 69420);
+ println!("Base 16 (hexadecimal) repr: {:X}", 69420);
+
+ // You can right-align text with a specified width. This will output
+ // " 1". 4 white spaces and a "1", for a total width of 5.
+ println!("{number:>5}", number=1);
+
+ // You can pad numbers with extra zeroes. This will output "00001".
+ println!("{number:0>5}", number=1);
+
+ // You can use named arguments in the format specifier by appending a `$`
+ println!("{number:0>width$}", number=1, width=5);
+
+
+ // Rust even checks to make sure the correct number of arguments are
+ // used.
+ println!("My name is {0}, {1} {0}", "Bond");
+ // FIXME ^ Add the missing argument: "James"
+
+ // Only types that implement fmt::Display can be formatted with `{}`. User-
+ // defined types do not implement fmt::Display by default
+
+ #[allow(dead_code)]
+ struct Structure(i32);
+
+ // This will not compile because `Structure` does not implement
+ // fmt::Display
+ //println!("This struct `{}` won't print...", Structure(3));
+ // TODO ^ Try uncommenting this line
+
+ // For Rust 1.58 and above, you can directly capture the argument from a
+ // surrounding variable. Just like the above, this will output
+ // " 1". 5 white spaces and a "1".
+ let number: f64 = 1.0;
+ let width: usize = 5;
+ println!("{number:>width$}");
+}
+```
+
+[`std::fmt`][fmt] contains many [`traits`][traits] which govern the display
+of text. The base form of two important ones are listed below:
+
+* `fmt::Debug`: Uses the `{:?}` marker. Format text for debugging purposes.
+* `fmt::Display`: Uses the `{}` marker. Format text in a more elegant, user
+friendly fashion.
+
+Here, we used `fmt::Display` because the std library provides implementations
+for these types. To print text for custom types, more steps are required.
+
+Implementing the `fmt::Display` trait automatically implements the
+[`ToString`] trait which allows us to [convert] the type to [`String`][string].
+
+### Activities
+
+ * Fix the issue in the above code (see FIXME) so that it runs without
+ error.
+ * Try uncommenting the line that attempts to format the `Structure` struct (see TODO)
+ * Add a `println!` macro call that prints: `Pi is roughly 3.142` by controlling
+ the number of decimal places shown. For the purposes of this exercise,
+ use `let pi = 3.141592` as an estimate for pi. (Hint: you may need to
+ check the [`std::fmt`][fmt] documentation for setting the number of
+ decimals to display)
+
+### See also:
+
+[`std::fmt`][fmt], [`macros`][macros], [`struct`][structs],
+and [`traits`][traits]
+
+[fmt]: https://doc.rust-lang.org/std/fmt/
+[macros]: ../macros.md
+[string]: ../std/str.md
+[structs]: ../custom_types/structs.md
+[traits]: https://doc.rust-lang.org/std/fmt/#formatting-traits
+[`ToString`]: https://doc.rust-lang.org/std/string/trait.ToString.html
+[convert]: ../conversion/string.md
diff --git a/src/doc/rust-by-example/src/hello/print/fmt.md b/src/doc/rust-by-example/src/hello/print/fmt.md
new file mode 100644
index 000000000..82c3e0145
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello/print/fmt.md
@@ -0,0 +1,93 @@
+# Formatting
+
+We've seen that formatting is specified via a *format string*:
+
+* `format!("{}", foo)` -> `"3735928559"`
+* `format!("0x{:X}", foo)` ->
+ [`"0xDEADBEEF"`][deadbeef]
+* `format!("0o{:o}", foo)` -> `"0o33653337357"`
+
+The same variable (`foo`) can be formatted differently depending on which
+*argument type* is used: `X` vs `o` vs *unspecified*.
+
+This formatting functionality is implemented via traits, and there is one trait
+for each argument type. The most common formatting trait is `Display`, which
+handles cases where the argument type is left unspecified: `{}` for instance.
+
+```rust,editable
+use std::fmt::{self, Formatter, Display};
+
+struct City {
+ name: &'static str,
+ // Latitude
+ lat: f32,
+ // Longitude
+ lon: f32,
+}
+
+impl Display for City {
+ // `f` is a buffer, and this method must write the formatted string into it
+ fn fmt(&self, f: &mut Formatter) -> fmt::Result {
+ let lat_c = if self.lat >= 0.0 { 'N' } else { 'S' };
+ let lon_c = if self.lon >= 0.0 { 'E' } else { 'W' };
+
+ // `write!` is like `format!`, but it will write the formatted string
+ // into a buffer (the first argument)
+ write!(f, "{}: {:.3}°{} {:.3}°{}",
+ self.name, self.lat.abs(), lat_c, self.lon.abs(), lon_c)
+ }
+}
+
+#[derive(Debug)]
+struct Color {
+ red: u8,
+ green: u8,
+ blue: u8,
+}
+
+fn main() {
+ for city in [
+ City { name: "Dublin", lat: 53.347778, lon: -6.259722 },
+ City { name: "Oslo", lat: 59.95, lon: 10.75 },
+ City { name: "Vancouver", lat: 49.25, lon: -123.1 },
+ ].iter() {
+ println!("{}", *city);
+ }
+ for color in [
+ Color { red: 128, green: 255, blue: 90 },
+ Color { red: 0, green: 3, blue: 254 },
+ Color { red: 0, green: 0, blue: 0 },
+ ].iter() {
+ // Switch this to use {} once you've added an implementation
+ // for fmt::Display.
+ println!("{:?}", *color);
+ }
+}
+```
+
+You can view a [full list of formatting traits][fmt_traits] and their argument
+types in the [`std::fmt`][fmt] documentation.
+
+### Activity
+Add an implementation of the `fmt::Display` trait for the `Color` struct above
+so that the output displays as:
+
+```text
+RGB (128, 255, 90) 0x80FF5A
+RGB (0, 3, 254) 0x0003FE
+RGB (0, 0, 0) 0x000000
+```
+
+Two hints if you get stuck:
+ * You [may need to list each color more than once][named_parameters],
+ * You can [pad with zeros to a width of 2][fmt_width] with `:0>2`.
+
+### See also:
+
+[`std::fmt`][fmt]
+
+[named_parameters]: https://doc.rust-lang.org/std/fmt/#named-parameters
+[deadbeef]: https://en.wikipedia.org/wiki/Deadbeef#Magic_debug_values
+[fmt]: https://doc.rust-lang.org/std/fmt/
+[fmt_traits]: https://doc.rust-lang.org/std/fmt/#formatting-traits
+[fmt_width]: https://doc.rust-lang.org/std/fmt/#width
diff --git a/src/doc/rust-by-example/src/hello/print/print_debug.md b/src/doc/rust-by-example/src/hello/print/print_debug.md
new file mode 100644
index 000000000..161b0b772
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello/print/print_debug.md
@@ -0,0 +1,84 @@
+# Debug
+
+All types which want to use `std::fmt` formatting `traits` require an
+implementation to be printable. Automatic implementations are only provided
+for types such as in the `std` library. All others *must* be manually
+implemented somehow.
+
+The `fmt::Debug` `trait` makes this very straightforward. *All* types can
+`derive` (automatically create) the `fmt::Debug` implementation. This is
+not true for `fmt::Display` which must be manually implemented.
+
+```rust
+// This structure cannot be printed either with `fmt::Display` or
+// with `fmt::Debug`.
+struct UnPrintable(i32);
+
+// The `derive` attribute automatically creates the implementation
+// required to make this `struct` printable with `fmt::Debug`.
+#[derive(Debug)]
+struct DebugPrintable(i32);
+```
+
+All `std` library types are automatically printable with `{:?}` too:
+
+```rust,editable
+// Derive the `fmt::Debug` implementation for `Structure`. `Structure`
+// is a structure which contains a single `i32`.
+#[derive(Debug)]
+struct Structure(i32);
+
+// Put a `Structure` inside of the structure `Deep`. Make it printable
+// also.
+#[derive(Debug)]
+struct Deep(Structure);
+
+fn main() {
+ // Printing with `{:?}` is similar to with `{}`.
+ println!("{:?} months in a year.", 12);
+ println!("{1:?} {0:?} is the {actor:?} name.",
+ "Slater",
+ "Christian",
+ actor="actor's");
+
+ // `Structure` is printable!
+ println!("Now {:?} will print!", Structure(3));
+
+ // The problem with `derive` is there is no control over how
+ // the results look. What if I want this to just show a `7`?
+ println!("Now {:?} will print!", Deep(Structure(7)));
+}
+```
+
+So `fmt::Debug` definitely makes this printable but sacrifices some
+elegance. Rust also provides "pretty printing" with `{:#?}`.
+
+```rust,editable
+#[derive(Debug)]
+struct Person<'a> {
+ name: &'a str,
+ age: u8
+}
+
+fn main() {
+ let name = "Peter";
+ let age = 27;
+ let peter = Person { name, age };
+
+ // Pretty print
+ println!("{:#?}", peter);
+}
+```
+
+One can manually implement `fmt::Display` to control the display.
+
+### See also:
+
+[`attributes`][attributes], [`derive`][derive], [`std::fmt`][fmt],
+and [`struct`][structs]
+
+[attributes]: https://doc.rust-lang.org/reference/attributes.html
+[derive]: ../../trait/derive.md
+[fmt]: https://doc.rust-lang.org/std/fmt/
+[structs]: ../../custom_types/structs.md
+
diff --git a/src/doc/rust-by-example/src/hello/print/print_display.md b/src/doc/rust-by-example/src/hello/print/print_display.md
new file mode 100644
index 000000000..fdae9648a
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello/print/print_display.md
@@ -0,0 +1,129 @@
+# Display
+
+`fmt::Debug` hardly looks compact and clean, so it is often advantageous to
+customize the output appearance. This is done by manually implementing
+[`fmt::Display`][fmt], which uses the `{}` print marker. Implementing it
+looks like this:
+
+```rust
+// Import (via `use`) the `fmt` module to make it available.
+use std::fmt;
+
+// Define a structure for which `fmt::Display` will be implemented. This is
+// a tuple struct named `Structure` that contains an `i32`.
+struct Structure(i32);
+
+// To use the `{}` marker, the trait `fmt::Display` must be implemented
+// manually for the type.
+impl fmt::Display for Structure {
+ // This trait requires `fmt` with this exact signature.
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ // Write strictly the first element into the supplied output
+ // stream: `f`. Returns `fmt::Result` which indicates whether the
+ // operation succeeded or failed. Note that `write!` uses syntax which
+ // is very similar to `println!`.
+ write!(f, "{}", self.0)
+ }
+}
+```
+
+`fmt::Display` may be cleaner than `fmt::Debug` but this presents
+a problem for the `std` library. How should ambiguous types be displayed?
+For example, if the `std` library implemented a single style for all
+`Vec<T>`, what style should it be? Would it be either of these two?
+
+* `Vec<path>`: `/:/etc:/home/username:/bin` (split on `:`)
+* `Vec<number>`: `1,2,3` (split on `,`)
+
+No, because there is no ideal style for all types and the `std` library
+doesn't presume to dictate one. `fmt::Display` is not implemented for `Vec<T>`
+or for any other generic containers. `fmt::Debug` must then be used for these
+generic cases.
+
+This is not a problem though because for any new *container* type which is
+*not* generic,`fmt::Display` can be implemented.
+
+```rust,editable
+use std::fmt; // Import `fmt`
+
+// A structure holding two numbers. `Debug` will be derived so the results can
+// be contrasted with `Display`.
+#[derive(Debug)]
+struct MinMax(i64, i64);
+
+// Implement `Display` for `MinMax`.
+impl fmt::Display for MinMax {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ // Use `self.number` to refer to each positional data point.
+ write!(f, "({}, {})", self.0, self.1)
+ }
+}
+
+// Define a structure where the fields are nameable for comparison.
+#[derive(Debug)]
+struct Point2D {
+ x: f64,
+ y: f64,
+}
+
+// Similarly, implement `Display` for `Point2D`
+impl fmt::Display for Point2D {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ // Customize so only `x` and `y` are denoted.
+ write!(f, "x: {}, y: {}", self.x, self.y)
+ }
+}
+
+fn main() {
+ let minmax = MinMax(0, 14);
+
+ println!("Compare structures:");
+ println!("Display: {}", minmax);
+ println!("Debug: {:?}", minmax);
+
+ let big_range = MinMax(-300, 300);
+ let small_range = MinMax(-3, 3);
+
+ println!("The big range is {big} and the small is {small}",
+ small = small_range,
+ big = big_range);
+
+ let point = Point2D { x: 3.3, y: 7.2 };
+
+ println!("Compare points:");
+ println!("Display: {}", point);
+ println!("Debug: {:?}", point);
+
+ // Error. Both `Debug` and `Display` were implemented, but `{:b}`
+ // requires `fmt::Binary` to be implemented. This will not work.
+ // println!("What does Point2D look like in binary: {:b}?", point);
+}
+```
+
+So, `fmt::Display` has been implemented but `fmt::Binary` has not, and
+therefore cannot be used. `std::fmt` has many such [`traits`][traits] and
+each requires its own implementation. This is detailed further in
+[`std::fmt`][fmt].
+
+### Activity
+
+After checking the output of the above example, use the `Point2D` struct as a
+guide to add a `Complex` struct to the example. When printed in the same
+way, the output should be:
+
+```txt
+Display: 3.3 + 7.2i
+Debug: Complex { real: 3.3, imag: 7.2 }
+```
+
+### See also:
+
+[`derive`][derive], [`std::fmt`][fmt], [`macros`][macros], [`struct`][structs],
+[`trait`][traits], and [`use`][use]
+
+[derive]: ../../trait/derive.md
+[fmt]: https://doc.rust-lang.org/std/fmt/
+[macros]: ../../macros.md
+[structs]: ../../custom_types/structs.md
+[traits]: https://doc.rust-lang.org/std/fmt/#formatting-traits
+[use]: ../../mod/use.md
diff --git a/src/doc/rust-by-example/src/hello/print/print_display/testcase_list.md b/src/doc/rust-by-example/src/hello/print/print_display/testcase_list.md
new file mode 100644
index 000000000..63e400b6a
--- /dev/null
+++ b/src/doc/rust-by-example/src/hello/print/print_display/testcase_list.md
@@ -0,0 +1,71 @@
+# Testcase: List
+
+Implementing `fmt::Display` for a structure where the elements must each be
+handled sequentially is tricky. The problem is that each `write!` generates a
+`fmt::Result`. Proper handling of this requires dealing with *all* the
+results. Rust provides the `?` operator for exactly this purpose.
+
+Using `?` on `write!` looks like this:
+
+```rust,ignore
+// Try `write!` to see if it errors. If it errors, return
+// the error. Otherwise continue.
+write!(f, "{}", value)?;
+```
+
+With `?` available, implementing `fmt::Display` for a `Vec` is
+straightforward:
+
+```rust,editable
+use std::fmt; // Import the `fmt` module.
+
+// Define a structure named `List` containing a `Vec`.
+struct List(Vec<i32>);
+
+impl fmt::Display for List {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ // Extract the value using tuple indexing,
+ // and create a reference to `vec`.
+ let vec = &self.0;
+
+ write!(f, "[")?;
+
+ // Iterate over `v` in `vec` while enumerating the iteration
+ // count in `count`.
+ for (count, v) in vec.iter().enumerate() {
+ // For every element except the first, add a comma.
+ // Use the ? operator to return on errors.
+ if count != 0 { write!(f, ", ")?; }
+ write!(f, "{}", v)?;
+ }
+
+ // Close the opened bracket and return a fmt::Result value.
+ write!(f, "]")
+ }
+}
+
+fn main() {
+ let v = List(vec![1, 2, 3]);
+ println!("{}", v);
+}
+```
+
+### Activity
+
+Try changing the program so that the index of each element in the vector is also printed. The new output should look like this:
+
+```rust,ignore
+[0: 1, 1: 2, 2: 3]
+```
+
+### See also:
+
+[`for`][for], [`ref`][ref], [`Result`][result], [`struct`][struct],
+[`?`][q_mark], and [`vec!`][vec]
+
+[for]: ../../../flow_control/for.md
+[result]: ../../../std/result.md
+[ref]: ../../../scope/borrow/ref.md
+[struct]: ../../../custom_types/structs.md
+[q_mark]: ../../../std/result/question_mark.md
+[vec]: ../../../std/vec.md
diff --git a/src/doc/rust-by-example/src/index.md b/src/doc/rust-by-example/src/index.md
new file mode 100644
index 000000000..fecc1906a
--- /dev/null
+++ b/src/doc/rust-by-example/src/index.md
@@ -0,0 +1,66 @@
+# Rust by Example
+
+[Rust][rust] is a modern systems programming language focusing on safety, speed,
+and concurrency. It accomplishes these goals by being memory safe without using
+garbage collection.
+
+Rust by Example (RBE) is a collection of runnable examples that illustrate various Rust
+concepts and standard libraries. To get even more out of these examples, don't forget
+to [install Rust locally][install] and check out the [official docs][std].
+Additionally for the curious, you can also [check out the source code for this site][home].
+
+Now let's begin!
+
+- [Hello World](hello.md) - Start with a traditional Hello World program.
+
+- [Primitives](primitives.md) - Learn about signed integers, unsigned integers and other primitives.
+
+- [Custom Types](custom_types.md) - `struct` and `enum`.
+
+- [Variable Bindings](variable_bindings.md) - mutable bindings, scope, shadowing.
+
+- [Types](types.md) - Learn about changing and defining types.
+
+- [Conversion](conversion.md)
+
+- [Expressions](expression.md)
+
+- [Flow of Control](flow_control.md) - `if`/`else`, `for`, and others.
+
+- [Functions](fn.md) - Learn about Methods, Closures and High Order Functions.
+
+- [Modules](mod.md) - Organize code using modules
+
+- [Crates](crates.md) - A crate is a compilation unit in Rust. Learn to create a library.
+
+- [Cargo](cargo.md) - Go through some basic features of the official Rust package management tool.
+
+- [Attributes](attribute.md) - An attribute is metadata applied to some module, crate or item.
+
+- [Generics](generics.md) - Learn about writing a function or data type which can work for multiple types of arguments.
+
+- [Scoping rules](scope.md) - Scopes play an important part in ownership, borrowing, and lifetimes.
+
+- [Traits](trait.md) - A trait is a collection of methods defined for an unknown type: `Self`
+
+- [Macros](macros.md)
+
+- [Error handling](error.md) - Learn Rust way of handling failures.
+
+- [Std library types](std.md) - Learn about some custom types provided by `std` library.
+
+- [Std misc](std_misc.md) - More custom types for file handling, threads.
+
+- [Testing](testing.md) - All sorts of testing in Rust.
+
+- [Unsafe Operations](unsafe.md)
+
+- [Compatibility](compatibility.md)
+
+- [Meta](meta.md) - Documentation, Benchmarking.
+
+
+[rust]: https://www.rust-lang.org/
+[install]: https://www.rust-lang.org/tools/install
+[std]: https://doc.rust-lang.org/std/
+[home]: https://github.com/rust-lang/rust-by-example
diff --git a/src/doc/rust-by-example/src/macros.md b/src/doc/rust-by-example/src/macros.md
new file mode 100644
index 000000000..ffeb923e5
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros.md
@@ -0,0 +1,40 @@
+# macro_rules!
+
+Rust provides a powerful macro system that allows metaprogramming. As you've
+seen in previous chapters, macros look like functions, except that their name
+ends with a bang `!`, but instead of generating a function call, macros are
+expanded into source code that gets compiled with the rest of the program.
+However, unlike macros in C and other languages, Rust macros are expanded into
+abstract syntax trees, rather than string preprocessing, so you don't get
+unexpected precedence bugs.
+
+Macros are created using the `macro_rules!` macro.
+
+```rust,editable
+// This is a simple macro named `say_hello`.
+macro_rules! say_hello {
+ // `()` indicates that the macro takes no argument.
+ () => {
+ // The macro will expand into the contents of this block.
+ println!("Hello!");
+ };
+}
+
+fn main() {
+ // This call will expand into `println!("Hello");`
+ say_hello!()
+}
+```
+
+So why are macros useful?
+
+1. Don't repeat yourself. There are many cases where you may need similar
+ functionality in multiple places but with different types. Often, writing a
+ macro is a useful way to avoid repeating code. (More on this later)
+
+2. Domain-specific languages. Macros allow you to define special syntax for a
+ specific purpose. (More on this later)
+
+3. Variadic interfaces. Sometimes you want to define an interface that takes a
+ variable number of arguments. An example is `println!` which could take any
+ number of arguments, depending on the format string!. (More on this later)
diff --git a/src/doc/rust-by-example/src/macros/designators.md b/src/doc/rust-by-example/src/macros/designators.md
new file mode 100644
index 000000000..78183030a
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/designators.md
@@ -0,0 +1,67 @@
+# Designators
+
+The arguments of a macro are prefixed by a dollar sign `$` and type annotated
+with a *designator*:
+
+```rust,editable
+macro_rules! create_function {
+ // This macro takes an argument of designator `ident` and
+ // creates a function named `$func_name`.
+ // The `ident` designator is used for variable/function names.
+ ($func_name:ident) => {
+ fn $func_name() {
+ // The `stringify!` macro converts an `ident` into a string.
+ println!("You called {:?}()",
+ stringify!($func_name));
+ }
+ };
+}
+
+// Create functions named `foo` and `bar` with the above macro.
+create_function!(foo);
+create_function!(bar);
+
+macro_rules! print_result {
+ // This macro takes an expression of type `expr` and prints
+ // it as a string along with its result.
+ // The `expr` designator is used for expressions.
+ ($expression:expr) => {
+ // `stringify!` will convert the expression *as it is* into a string.
+ println!("{:?} = {:?}",
+ stringify!($expression),
+ $expression);
+ };
+}
+
+fn main() {
+ foo();
+ bar();
+
+ print_result!(1u32 + 1);
+
+ // Recall that blocks are expressions too!
+ print_result!({
+ let x = 1u32;
+
+ x * x + 2 * x - 1
+ });
+}
+```
+
+These are some of the available designators:
+
+* `block`
+* `expr` is used for expressions
+* `ident` is used for variable/function names
+* `item`
+* `literal` is used for literal constants
+* `pat` (*pattern*)
+* `path`
+* `stmt` (*statement*)
+* `tt` (*token tree*)
+* `ty` (*type*)
+* `vis` (*visibility qualifier*)
+
+For a complete list, see the [Rust Reference].
+
+[Rust Reference]: https://doc.rust-lang.org/reference/macros-by-example.html
diff --git a/src/doc/rust-by-example/src/macros/dry.md b/src/doc/rust-by-example/src/macros/dry.md
new file mode 100644
index 000000000..ca015272a
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/dry.md
@@ -0,0 +1,75 @@
+# DRY (Don't Repeat Yourself)
+
+Macros allow writing DRY code by factoring out the common parts of functions
+and/or test suites. Here is an example that implements and tests the `+=`, `*=`
+and `-=` operators on `Vec<T>`:
+
+```rust,editable
+use std::ops::{Add, Mul, Sub};
+
+macro_rules! assert_equal_len {
+ // The `tt` (token tree) designator is used for
+ // operators and tokens.
+ ($a:expr, $b:expr, $func:ident, $op:tt) => {
+ assert!($a.len() == $b.len(),
+ "{:?}: dimension mismatch: {:?} {:?} {:?}",
+ stringify!($func),
+ ($a.len(),),
+ stringify!($op),
+ ($b.len(),));
+ };
+}
+
+macro_rules! op {
+ ($func:ident, $bound:ident, $op:tt, $method:ident) => {
+ fn $func<T: $bound<T, Output=T> + Copy>(xs: &mut Vec<T>, ys: &Vec<T>) {
+ assert_equal_len!(xs, ys, $func, $op);
+
+ for (x, y) in xs.iter_mut().zip(ys.iter()) {
+ *x = $bound::$method(*x, *y);
+ // *x = x.$method(*y);
+ }
+ }
+ };
+}
+
+// Implement `add_assign`, `mul_assign`, and `sub_assign` functions.
+op!(add_assign, Add, +=, add);
+op!(mul_assign, Mul, *=, mul);
+op!(sub_assign, Sub, -=, sub);
+
+mod test {
+ use std::iter;
+ macro_rules! test {
+ ($func:ident, $x:expr, $y:expr, $z:expr) => {
+ #[test]
+ fn $func() {
+ for size in 0usize..10 {
+ let mut x: Vec<_> = iter::repeat($x).take(size).collect();
+ let y: Vec<_> = iter::repeat($y).take(size).collect();
+ let z: Vec<_> = iter::repeat($z).take(size).collect();
+
+ super::$func(&mut x, &y);
+
+ assert_eq!(x, z);
+ }
+ }
+ };
+ }
+
+ // Test `add_assign`, `mul_assign`, and `sub_assign`.
+ test!(add_assign, 1u32, 2u32, 3u32);
+ test!(mul_assign, 2u32, 3u32, 6u32);
+ test!(sub_assign, 3u32, 2u32, 1u32);
+}
+```
+
+```shell
+$ rustc --test dry.rs && ./dry
+running 3 tests
+test test::mul_assign ... ok
+test test::add_assign ... ok
+test test::sub_assign ... ok
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured
+```
diff --git a/src/doc/rust-by-example/src/macros/dsl.md b/src/doc/rust-by-example/src/macros/dsl.md
new file mode 100644
index 000000000..9aaeda34c
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/dsl.md
@@ -0,0 +1,44 @@
+# Domain Specific Languages (DSLs)
+
+A DSL is a mini "language" embedded in a Rust macro. It is completely valid
+Rust because the macro system expands into normal Rust constructs, but it looks
+like a small language. This allows you to define concise or intuitive syntax for
+some special functionality (within bounds).
+
+Suppose that I want to define a little calculator API. I would like to supply
+an expression and have the output printed to console.
+
+```rust,editable
+macro_rules! calculate {
+ (eval $e:expr) => {
+ {
+ let val: usize = $e; // Force types to be integers
+ println!("{} = {}", stringify!{$e}, val);
+ }
+ };
+}
+
+fn main() {
+ calculate! {
+ eval 1 + 2 // hehehe `eval` is _not_ a Rust keyword!
+ }
+
+ calculate! {
+ eval (1 + 2) * (3 / 4)
+ }
+}
+```
+
+Output:
+
+```txt
+1 + 2 = 3
+(1 + 2) * (3 / 4) = 0
+```
+
+This was a very simple example, but much more complex interfaces have been
+developed, such as [`lazy_static`](https://crates.io/crates/lazy_static) or
+[`clap`](https://crates.io/crates/clap).
+
+Also, note the two pairs of braces in the macro. The outer ones are
+part of the syntax of `macro_rules!`, in addition to `()` or `[]`.
diff --git a/src/doc/rust-by-example/src/macros/overload.md b/src/doc/rust-by-example/src/macros/overload.md
new file mode 100644
index 000000000..84d341a56
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/overload.md
@@ -0,0 +1,31 @@
+# Overload
+
+Macros can be overloaded to accept different combinations of arguments.
+In that regard, `macro_rules!` can work similarly to a match block:
+
+```rust,editable
+// `test!` will compare `$left` and `$right`
+// in different ways depending on how you invoke it:
+macro_rules! test {
+ // Arguments don't need to be separated by a comma.
+ // Any template can be used!
+ ($left:expr; and $right:expr) => {
+ println!("{:?} and {:?} is {:?}",
+ stringify!($left),
+ stringify!($right),
+ $left && $right)
+ };
+ // ^ each arm must end with a semicolon.
+ ($left:expr; or $right:expr) => {
+ println!("{:?} or {:?} is {:?}",
+ stringify!($left),
+ stringify!($right),
+ $left || $right)
+ };
+}
+
+fn main() {
+ test!(1i32 + 1 == 2i32; and 2i32 * 2 == 4i32);
+ test!(true; or false);
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/macros/repeat.md b/src/doc/rust-by-example/src/macros/repeat.md
new file mode 100644
index 000000000..3b8a2b6e5
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/repeat.md
@@ -0,0 +1,28 @@
+# Repeat
+
+Macros can use `+` in the argument list to indicate that an argument may
+repeat at least once, or `*`, to indicate that the argument may repeat zero or
+more times.
+
+In the following example, surrounding the matcher with `$(...),+` will
+match one or more expression, separated by commas.
+Also note that the semicolon is optional on the last case.
+
+```rust,editable
+// `find_min!` will calculate the minimum of any number of arguments.
+macro_rules! find_min {
+ // Base case:
+ ($x:expr) => ($x);
+ // `$x` followed by at least one `$y,`
+ ($x:expr, $($y:expr),+) => (
+ // Call `find_min!` on the tail `$y`
+ std::cmp::min($x, find_min!($($y),+))
+ )
+}
+
+fn main() {
+ println!("{}", find_min!(1));
+ println!("{}", find_min!(1 + 2, 2));
+ println!("{}", find_min!(5, 2 * 3, 4));
+}
+```
diff --git a/src/doc/rust-by-example/src/macros/syntax.md b/src/doc/rust-by-example/src/macros/syntax.md
new file mode 100644
index 000000000..d00e2695c
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/syntax.md
@@ -0,0 +1,12 @@
+# Syntax
+
+In following subsections, we will show how to define macros in Rust.
+There are three basic ideas:
+
+- [Patterns and Designators][designators]
+- [Overloading][overloading]
+- [Repetition][repetition]
+
+[designators]: designators.md
+[overloading]: overload.md
+[repetition]: repeat.md
diff --git a/src/doc/rust-by-example/src/macros/variadics.md b/src/doc/rust-by-example/src/macros/variadics.md
new file mode 100644
index 000000000..0ba36e63d
--- /dev/null
+++ b/src/doc/rust-by-example/src/macros/variadics.md
@@ -0,0 +1,41 @@
+# Variadic Interfaces
+
+A _variadic_ interface takes an arbitrary number of arguments. For example,
+`println!` can take an arbitrary number of arguments, as determined by the
+format string.
+
+We can extend our `calculate!` macro from the previous section to be variadic:
+
+```rust,editable
+macro_rules! calculate {
+ // The pattern for a single `eval`
+ (eval $e:expr) => {
+ {
+ let val: usize = $e; // Force types to be integers
+ println!("{} = {}", stringify!{$e}, val);
+ }
+ };
+
+ // Decompose multiple `eval`s recursively
+ (eval $e:expr, $(eval $es:expr),+) => {{
+ calculate! { eval $e }
+ calculate! { $(eval $es),+ }
+ }};
+}
+
+fn main() {
+ calculate! { // Look ma! Variadic `calculate!`!
+ eval 1 + 2,
+ eval 3 + 4,
+ eval (2 * 3) + 1
+ }
+}
+```
+
+Output:
+
+```txt
+1 + 2 = 3
+3 + 4 = 7
+(2 * 3) + 1 = 7
+```
diff --git a/src/doc/rust-by-example/src/meta.md b/src/doc/rust-by-example/src/meta.md
new file mode 100644
index 000000000..367c7e121
--- /dev/null
+++ b/src/doc/rust-by-example/src/meta.md
@@ -0,0 +1,12 @@
+# Meta
+
+Some topics aren't exactly relevant to how you program but provide you
+tooling or infrastructure support which just makes things better for
+everyone. These topics include:
+
+- [Documentation][doc]: Generate library documentation for users via the included
+ `rustdoc`.
+- [Playpen][playpen]: Integrate the Rust Playpen (also known as the Rust Playground) in your documentation.
+
+[doc]: meta/doc.md
+[playpen]: meta/playpen.md
diff --git a/src/doc/rust-by-example/src/meta/doc.md b/src/doc/rust-by-example/src/meta/doc.md
new file mode 100644
index 000000000..63e0b4101
--- /dev/null
+++ b/src/doc/rust-by-example/src/meta/doc.md
@@ -0,0 +1,124 @@
+# Documentation
+
+Use `cargo doc` to build documentation in `target/doc`.
+
+Use `cargo test` to run all tests (including documentation tests), and `cargo test --doc` to only run documentation tests.
+
+These commands will appropriately invoke `rustdoc` (and `rustc`) as required.
+
+## Doc comments
+
+Doc comments are very useful for big projects that require documentation. When
+running `rustdoc`, these are the comments that get compiled into
+documentation. They are denoted by a `///`, and support [Markdown].
+
+````rust,editable,ignore
+#![crate_name = "doc"]
+
+/// A human being is represented here
+pub struct Person {
+ /// A person must have a name, no matter how much Juliet may hate it
+ name: String,
+}
+
+impl Person {
+ /// Returns a person with the name given them
+ ///
+ /// # Arguments
+ ///
+ /// * `name` - A string slice that holds the name of the person
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// // You can have rust code between fences inside the comments
+ /// // If you pass --test to `rustdoc`, it will even test it for you!
+ /// use doc::Person;
+ /// let person = Person::new("name");
+ /// ```
+ pub fn new(name: &str) -> Person {
+ Person {
+ name: name.to_string(),
+ }
+ }
+
+ /// Gives a friendly hello!
+ ///
+ /// Says "Hello, [name]" to the `Person` it is called on.
+ pub fn hello(& self) {
+ println!("Hello, {}!", self.name);
+ }
+}
+
+fn main() {
+ let john = Person::new("John");
+
+ john.hello();
+}
+````
+
+To run the tests, first build the code as a library, then tell `rustdoc` where
+to find the library so it can link it into each doctest program:
+
+```shell
+$ rustc doc.rs --crate-type lib
+$ rustdoc --test --extern doc="libdoc.rlib" doc.rs
+```
+
+## Doc attributes
+
+Below are a few examples of the most common `#[doc]` attributes used with `rustdoc`.
+
+### `inline`
+
+Used to inline docs, instead of linking out to separate page.
+
+```rust,ignore
+#[doc(inline)]
+pub use bar::Bar;
+
+/// bar docs
+mod bar {
+ /// the docs for Bar
+ pub struct Bar;
+}
+```
+
+### `no_inline`
+
+Used to prevent linking out to separate page or anywhere.
+
+```rust,ignore
+// Example from libcore/prelude
+#[doc(no_inline)]
+pub use crate::mem::drop;
+```
+
+### `hidden`
+
+Using this tells `rustdoc` not to include this in documentation:
+
+```rust,editable,ignore
+// Example from the futures-rs library
+#[doc(hidden)]
+pub use self::async_await::*;
+```
+
+For documentation, `rustdoc` is widely used by the community. It's what is used to generate the [std library docs](https://doc.rust-lang.org/std/).
+
+### See also:
+
+- [The Rust Book: Making Useful Documentation Comments][book]
+- [The rustdoc Book][rustdoc-book]
+- [The Reference: Doc comments][ref-comments]
+- [RFC 1574: API Documentation Conventions][api-conv]
+- [RFC 1946: Relative links to other items from doc comments (intra-rustdoc links)][intra-links]
+- [Is there any documentation style guide for comments? (reddit)][reddit]
+
+[markdown]: https://en.wikipedia.org/wiki/Markdown
+[book]: https://doc.rust-lang.org/book/ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments
+[ref-comments]: https://doc.rust-lang.org/stable/reference/comments.html#doc-comments
+[rustdoc-book]: https://doc.rust-lang.org/rustdoc/index.html
+[api-conv]: https://rust-lang.github.io/rfcs/1574-more-api-documentation-conventions.html#appendix-a-full-conventions-text
+[intra-links]: https://rust-lang.github.io/rfcs/1946-intra-rustdoc-links.html
+[reddit]: https://www.reddit.com/r/rust/comments/ahb50s/is_there_any_documentation_style_guide_for/
diff --git a/src/doc/rust-by-example/src/meta/playpen.md b/src/doc/rust-by-example/src/meta/playpen.md
new file mode 100644
index 000000000..a125f139d
--- /dev/null
+++ b/src/doc/rust-by-example/src/meta/playpen.md
@@ -0,0 +1,46 @@
+# Playpen
+
+The [Rust Playpen](https://github.com/rust-lang/rust-playpen) is a way to experiment with Rust code through a web interface. This project is now commonly referred to as [Rust Playground](https://play.rust-lang.org/).
+
+## Using it with `mdbook`
+
+In [`mdbook`][mdbook], you can make code examples playable and editable.
+
+```rust,editable
+fn main() {
+ println!("Hello World!");
+}
+```
+
+This allows the reader to both run your code sample, but also modify and tweak it. The key here is the adding the word `editable` to your codefence block separated by a comma.
+
+````markdown
+```rust,editable
+//...place your code here
+```
+````
+
+Additionally, you can add `ignore` if you want `mdbook` to skip your code when it builds and tests.
+
+````markdown
+```rust,editable,ignore
+//...place your code here
+```
+````
+
+## Using it with docs
+
+You may have noticed in some of the [official Rust docs][official-rust-docs] a button that says "Run", which opens the code sample up in a new tab in Rust Playground. This feature is enabled if you use the #[doc] attribute called [`html_playground_url`][html-playground-url].
+
+### See also:
+
+- [The Rust Playground][rust-playground]
+- [The next-gen playpen][next-gen-playpen]
+- [The rustdoc Book][rustdoc-book]
+
+[rust-playground]: https://play.rust-lang.org/
+[next-gen-playpen]: https://github.com/integer32llc/rust-playground/
+[mdbook]: https://github.com/rust-lang/mdBook
+[official-rust-docs]: https://doc.rust-lang.org/core/
+[rustdoc-book]: https://doc.rust-lang.org/rustdoc/what-is-rustdoc.html
+[html-playground-url]: https://doc.rust-lang.org/rustdoc/the-doc-attribute.html#html_playground_url
diff --git a/src/doc/rust-by-example/src/mod.md b/src/doc/rust-by-example/src/mod.md
new file mode 100644
index 000000000..f9a118348
--- /dev/null
+++ b/src/doc/rust-by-example/src/mod.md
@@ -0,0 +1,8 @@
+# Modules
+
+Rust provides a powerful module system that can be used to hierarchically split
+code in logical units (modules), and manage visibility (public/private) between
+them.
+
+A module is a collection of items: functions, structs, traits, `impl` blocks,
+and even other modules. \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/mod/split.md b/src/doc/rust-by-example/src/mod/split.md
new file mode 100644
index 000000000..2c78ee2b8
--- /dev/null
+++ b/src/doc/rust-by-example/src/mod/split.md
@@ -0,0 +1,96 @@
+# File hierarchy
+
+Modules can be mapped to a file/directory hierarchy. Let's break down the
+[visibility example][visibility] in files:
+
+```shell
+$ tree .
+.
+├── my
+│   ├── inaccessible.rs
+│   └── nested.rs
+├── my.rs
+└── split.rs
+```
+
+In `split.rs`:
+
+```rust,ignore
+// This declaration will look for a file named `my.rs` and will
+// insert its contents inside a module named `my` under this scope
+mod my;
+
+fn function() {
+ println!("called `function()`");
+}
+
+fn main() {
+ my::function();
+
+ function();
+
+ my::indirect_access();
+
+ my::nested::function();
+}
+
+```
+
+In `my.rs`:
+
+```rust,ignore
+// Similarly `mod inaccessible` and `mod nested` will locate the `nested.rs`
+// and `inaccessible.rs` files and insert them here under their respective
+// modules
+mod inaccessible;
+pub mod nested;
+
+pub fn function() {
+ println!("called `my::function()`");
+}
+
+fn private_function() {
+ println!("called `my::private_function()`");
+}
+
+pub fn indirect_access() {
+ print!("called `my::indirect_access()`, that\n> ");
+
+ private_function();
+}
+```
+
+In `my/nested.rs`:
+
+```rust,ignore
+pub fn function() {
+ println!("called `my::nested::function()`");
+}
+
+#[allow(dead_code)]
+fn private_function() {
+ println!("called `my::nested::private_function()`");
+}
+```
+
+In `my/inaccessible.rs`:
+
+```rust,ignore
+#[allow(dead_code)]
+pub fn public_function() {
+ println!("called `my::inaccessible::public_function()`");
+}
+```
+
+Let's check that things still work as before:
+
+```shell
+$ rustc split.rs && ./split
+called `my::function()`
+called `function()`
+called `my::indirect_access()`, that
+> called `my::private_function()`
+called `my::nested::function()`
+```
+
+[visibility]: visibility.md
diff --git a/src/doc/rust-by-example/src/mod/struct_visibility.md b/src/doc/rust-by-example/src/mod/struct_visibility.md
new file mode 100644
index 000000000..e7359413c
--- /dev/null
+++ b/src/doc/rust-by-example/src/mod/struct_visibility.md
@@ -0,0 +1,59 @@
+# Struct visibility
+
+Structs have an extra level of visibility with their fields. The visibility
+defaults to private, and can be overridden with the `pub` modifier. This
+visibility only matters when a struct is accessed from outside the module
+where it is defined, and has the goal of hiding information (encapsulation).
+
+```rust,editable
+mod my {
+ // A public struct with a public field of generic type `T`
+ pub struct OpenBox<T> {
+ pub contents: T,
+ }
+
+ // A public struct with a private field of generic type `T`
+ #[allow(dead_code)]
+ pub struct ClosedBox<T> {
+ contents: T,
+ }
+
+ impl<T> ClosedBox<T> {
+ // A public constructor method
+ pub fn new(contents: T) -> ClosedBox<T> {
+ ClosedBox {
+ contents: contents,
+ }
+ }
+ }
+}
+
+fn main() {
+ // Public structs with public fields can be constructed as usual
+ let open_box = my::OpenBox { contents: "public information" };
+
+ // and their fields can be normally accessed.
+ println!("The open box contains: {}", open_box.contents);
+
+ // Public structs with private fields cannot be constructed using field names.
+ // Error! `ClosedBox` has private fields
+ //let closed_box = my::ClosedBox { contents: "classified information" };
+ // TODO ^ Try uncommenting this line
+
+ // However, structs with private fields can be created using
+ // public constructors
+ let _closed_box = my::ClosedBox::new("classified information");
+
+ // and the private fields of a public struct cannot be accessed.
+ // Error! The `contents` field is private
+ //println!("The closed box contains: {}", _closed_box.contents);
+ // TODO ^ Try uncommenting this line
+}
+```
+
+### See also:
+
+[generics][generics] and [methods][methods]
+
+[generics]: ../generics.md
+[methods]: ../fn/methods.md \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/mod/super.md b/src/doc/rust-by-example/src/mod/super.md
new file mode 100644
index 000000000..038d4b127
--- /dev/null
+++ b/src/doc/rust-by-example/src/mod/super.md
@@ -0,0 +1,56 @@
+# `super` and `self`
+
+The `super` and `self` keywords can be used in the path to remove ambiguity
+when accessing items and to prevent unnecessary hardcoding of paths.
+
+```rust,editable
+fn function() {
+ println!("called `function()`");
+}
+
+mod cool {
+ pub fn function() {
+ println!("called `cool::function()`");
+ }
+}
+
+mod my {
+ fn function() {
+ println!("called `my::function()`");
+ }
+
+ mod cool {
+ pub fn function() {
+ println!("called `my::cool::function()`");
+ }
+ }
+
+ pub fn indirect_call() {
+ // Let's access all the functions named `function` from this scope!
+ print!("called `my::indirect_call()`, that\n> ");
+
+ // The `self` keyword refers to the current module scope - in this case `my`.
+ // Calling `self::function()` and calling `function()` directly both give
+ // the same result, because they refer to the same function.
+ self::function();
+ function();
+
+ // We can also use `self` to access another module inside `my`:
+ self::cool::function();
+
+ // The `super` keyword refers to the parent scope (outside the `my` module).
+ super::function();
+
+ // This will bind to the `cool::function` in the *crate* scope.
+ // In this case the crate scope is the outermost scope.
+ {
+ use crate::cool::function as root_function;
+ root_function();
+ }
+ }
+}
+
+fn main() {
+ my::indirect_call();
+}
+```
diff --git a/src/doc/rust-by-example/src/mod/use.md b/src/doc/rust-by-example/src/mod/use.md
new file mode 100644
index 000000000..7a57272b1
--- /dev/null
+++ b/src/doc/rust-by-example/src/mod/use.md
@@ -0,0 +1,55 @@
+# The `use` declaration
+
+The `use` declaration can be used to bind a full path to a new name, for easier
+access. It is often used like this:
+
+```rust,editable,ignore
+use crate::deeply::nested::{
+ my_first_function,
+ my_second_function,
+ AndATraitType
+};
+
+fn main() {
+ my_first_function();
+}
+```
+
+You can use the `as` keyword to bind imports to a different name:
+
+```rust,editable
+// Bind the `deeply::nested::function` path to `other_function`.
+use deeply::nested::function as other_function;
+
+fn function() {
+ println!("called `function()`");
+}
+
+mod deeply {
+ pub mod nested {
+ pub fn function() {
+ println!("called `deeply::nested::function()`");
+ }
+ }
+}
+
+fn main() {
+ // Easier access to `deeply::nested::function`
+ other_function();
+
+ println!("Entering block");
+ {
+ // This is equivalent to `use deeply::nested::function as function`.
+ // This `function()` will shadow the outer one.
+ use crate::deeply::nested::function;
+
+ // `use` bindings have a local scope. In this case, the
+ // shadowing of `function()` is only in this block.
+ function();
+
+ println!("Leaving block");
+ }
+
+ function();
+}
+```
diff --git a/src/doc/rust-by-example/src/mod/visibility.md b/src/doc/rust-by-example/src/mod/visibility.md
new file mode 100644
index 000000000..173122c72
--- /dev/null
+++ b/src/doc/rust-by-example/src/mod/visibility.md
@@ -0,0 +1,128 @@
+# Visibility
+
+By default, the items in a module have private visibility, but this can be
+overridden with the `pub` modifier. Only the public items of a module can be
+accessed from outside the module scope.
+
+```rust,editable
+// A module named `my_mod`
+mod my_mod {
+ // Items in modules default to private visibility.
+ fn private_function() {
+ println!("called `my_mod::private_function()`");
+ }
+
+ // Use the `pub` modifier to override default visibility.
+ pub fn function() {
+ println!("called `my_mod::function()`");
+ }
+
+ // Items can access other items in the same module,
+ // even when private.
+ pub fn indirect_access() {
+ print!("called `my_mod::indirect_access()`, that\n> ");
+ private_function();
+ }
+
+ // Modules can also be nested
+ pub mod nested {
+ pub fn function() {
+ println!("called `my_mod::nested::function()`");
+ }
+
+ #[allow(dead_code)]
+ fn private_function() {
+ println!("called `my_mod::nested::private_function()`");
+ }
+
+ // Functions declared using `pub(in path)` syntax are only visible
+ // within the given path. `path` must be a parent or ancestor module
+ pub(in crate::my_mod) fn public_function_in_my_mod() {
+ print!("called `my_mod::nested::public_function_in_my_mod()`, that\n> ");
+ public_function_in_nested();
+ }
+
+ // Functions declared using `pub(self)` syntax are only visible within
+ // the current module, which is the same as leaving them private
+ pub(self) fn public_function_in_nested() {
+ println!("called `my_mod::nested::public_function_in_nested()`");
+ }
+
+ // Functions declared using `pub(super)` syntax are only visible within
+ // the parent module
+ pub(super) fn public_function_in_super_mod() {
+ println!("called `my_mod::nested::public_function_in_super_mod()`");
+ }
+ }
+
+ pub fn call_public_function_in_my_mod() {
+ print!("called `my_mod::call_public_function_in_my_mod()`, that\n> ");
+ nested::public_function_in_my_mod();
+ print!("> ");
+ nested::public_function_in_super_mod();
+ }
+
+ // pub(crate) makes functions visible only within the current crate
+ pub(crate) fn public_function_in_crate() {
+ println!("called `my_mod::public_function_in_crate()`");
+ }
+
+ // Nested modules follow the same rules for visibility
+ mod private_nested {
+ #[allow(dead_code)]
+ pub fn function() {
+ println!("called `my_mod::private_nested::function()`");
+ }
+
+ // Private parent items will still restrict the visibility of a child item,
+ // even if it is declared as visible within a bigger scope.
+ #[allow(dead_code)]
+ pub(crate) fn restricted_function() {
+ println!("called `my_mod::private_nested::restricted_function()`");
+ }
+ }
+}
+
+fn function() {
+ println!("called `function()`");
+}
+
+fn main() {
+ // Modules allow disambiguation between items that have the same name.
+ function();
+ my_mod::function();
+
+ // Public items, including those inside nested modules, can be
+ // accessed from outside the parent module.
+ my_mod::indirect_access();
+ my_mod::nested::function();
+ my_mod::call_public_function_in_my_mod();
+
+ // pub(crate) items can be called from anywhere in the same crate
+ my_mod::public_function_in_crate();
+
+ // pub(in path) items can only be called from within the module specified
+ // Error! function `public_function_in_my_mod` is private
+ //my_mod::nested::public_function_in_my_mod();
+ // TODO ^ Try uncommenting this line
+
+ // Private items of a module cannot be directly accessed, even if
+ // nested in a public module:
+
+ // Error! `private_function` is private
+ //my_mod::private_function();
+ // TODO ^ Try uncommenting this line
+
+ // Error! `private_function` is private
+ //my_mod::nested::private_function();
+ // TODO ^ Try uncommenting this line
+
+ // Error! `private_nested` is a private module
+ //my_mod::private_nested::function();
+ // TODO ^ Try uncommenting this line
+
+ // Error! `private_nested` is a private module
+ //my_mod::private_nested::restricted_function();
+ // TODO ^ Try uncommenting this line
+}
+```
diff --git a/src/doc/rust-by-example/src/primitives.md b/src/doc/rust-by-example/src/primitives.md
new file mode 100644
index 000000000..6b579e5ea
--- /dev/null
+++ b/src/doc/rust-by-example/src/primitives.md
@@ -0,0 +1,63 @@
+# Primitives
+
+Rust provides access to a wide variety of `primitives`. A sample includes:
+
+
+### Scalar Types
+
+* signed integers: `i8`, `i16`, `i32`, `i64`, `i128` and `isize` (pointer size)
+* unsigned integers: `u8`, `u16`, `u32`, `u64`, `u128` and `usize` (pointer
+ size)
+* floating point: `f32`, `f64`
+* `char` Unicode scalar values like `'a'`, `'α'` and `'∞'` (4 bytes each)
+* `bool` either `true` or `false`
+* and the unit type `()`, whose only possible value is an empty tuple: `()`
+
+Despite the value of a unit type being a tuple, it is not considered a
+compound type because it does not contain multiple values.
+
+### Compound Types
+
+* arrays like `[1, 2, 3]`
+* tuples like `(1, true)`
+
+Variables can always be *type annotated*. Numbers may additionally be
+annotated via a *suffix* or *by default*. Integers default to `i32` and
+floats to `f64`. Note that Rust can also infer types from context.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ // Variables can be type annotated.
+ let logical: bool = true;
+
+ let a_float: f64 = 1.0; // Regular annotation
+ let an_integer = 5i32; // Suffix annotation
+
+ // Or a default will be used.
+ let default_float = 3.0; // `f64`
+ let default_integer = 7; // `i32`
+
+ // A type can also be inferred from context
+ let mut inferred_type = 12; // Type i64 is inferred from another line
+ inferred_type = 4294967296i64;
+
+ // A mutable variable's value can be changed.
+ let mut mutable = 12; // Mutable `i32`
+ mutable = 21;
+
+ // Error! The type of a variable can't be changed.
+ mutable = true;
+
+ // Variables can be overwritten with shadowing.
+ let mutable = true;
+}
+```
+
+### See also:
+
+[the `std` library][std], [`mut`][mut], [`inference`][inference], and [`shadowing`][shadowing]
+
+[std]: https://doc.rust-lang.org/std/
+[mut]: variable_bindings/mut.md
+[inference]: types/inference.md
+[shadowing]: variable_bindings/scope.md
diff --git a/src/doc/rust-by-example/src/primitives/array.md b/src/doc/rust-by-example/src/primitives/array.md
new file mode 100644
index 000000000..841c71c14
--- /dev/null
+++ b/src/doc/rust-by-example/src/primitives/array.md
@@ -0,0 +1,70 @@
+# Arrays and Slices
+
+An array is a collection of objects of the same type `T`, stored in contiguous
+memory. Arrays are created using brackets `[]`, and their length, which is known
+at compile time, is part of their type signature `[T; length]`.
+
+Slices are similar to arrays, but their length is not known at compile time.
+Instead, a slice is a two-word object, the first word is a pointer to the data,
+and the second word is the length of the slice. The word size is the same as
+usize, determined by the processor architecture e.g. 64 bits on an x86-64.
+Slices can be used to borrow a section of an array, and have the type signature
+`&[T]`.
+
+```rust,editable,ignore,mdbook-runnable
+use std::mem;
+
+// This function borrows a slice
+fn analyze_slice(slice: &[i32]) {
+ println!("first element of the slice: {}", slice[0]);
+ println!("the slice has {} elements", slice.len());
+}
+
+fn main() {
+ // Fixed-size array (type signature is superfluous)
+ let xs: [i32; 5] = [1, 2, 3, 4, 5];
+
+ // All elements can be initialized to the same value
+ let ys: [i32; 500] = [0; 500];
+
+ // Indexing starts at 0
+ println!("first element of the array: {}", xs[0]);
+ println!("second element of the array: {}", xs[1]);
+
+ // `len` returns the count of elements in the array
+ println!("number of elements in array: {}", xs.len());
+
+ // Arrays are stack allocated
+ println!("array occupies {} bytes", mem::size_of_val(&xs));
+
+ // Arrays can be automatically borrowed as slices
+ println!("borrow the whole array as a slice");
+ analyze_slice(&xs);
+
+ // Slices can point to a section of an array
+ // They are of the form [starting_index..ending_index]
+ // starting_index is the first position in the slice
+ // ending_index is one more than the last position in the slice
+ println!("borrow a section of the array as a slice");
+ analyze_slice(&ys[1 .. 4]);
+
+ // Example of empty slice `&[]`
+ let empty_array: [u32; 0] = [];
+ assert_eq!(&empty_array, &[]);
+ assert_eq!(&empty_array, &[][..]); // same but more verbose
+
+ // Arrays can be safely accessed using `.get`, which returns an
+ // `Option`. This can be matched as shown below, or used with
+ // `.expect()` if you would like the program to exit with a nice
+ // message instead of happily continue.
+ for i in 0..xs.len() + 1 { // OOPS, one element too far
+ match xs.get(i) {
+ Some(xval) => println!("{}: {}", i, xval),
+ None => println!("Slow down! {} is too far!", i),
+ }
+ }
+
+ // Out of bound indexing causes compile error
+ //println!("{}", xs[5]);
+}
+```
diff --git a/src/doc/rust-by-example/src/primitives/literals.md b/src/doc/rust-by-example/src/primitives/literals.md
new file mode 100644
index 000000000..4927e6af8
--- /dev/null
+++ b/src/doc/rust-by-example/src/primitives/literals.md
@@ -0,0 +1,46 @@
+# Literals and operators
+
+Integers `1`, floats `1.2`, characters `'a'`, strings `"abc"`, booleans `true`
+and the unit type `()` can be expressed using literals.
+
+Integers can, alternatively, be expressed using hexadecimal, octal or binary
+notation using these prefixes respectively: `0x`, `0o` or `0b`.
+
+Underscores can be inserted in numeric literals to improve readability, e.g.
+`1_000` is the same as `1000`, and `0.000_001` is the same as `0.000001`.
+
+We need to tell the compiler the type of the literals we use. For now,
+we'll use the `u32` suffix to indicate that the literal is an unsigned 32-bit
+integer, and the `i32` suffix to indicate that it's a signed 32-bit integer.
+
+The operators available and their precedence [in Rust][rust op-prec] are similar to other
+[C-like languages][op-prec].
+
+```rust,editable
+fn main() {
+ // Integer addition
+ println!("1 + 2 = {}", 1u32 + 2);
+
+ // Integer subtraction
+ println!("1 - 2 = {}", 1i32 - 2);
+ // TODO ^ Try changing `1i32` to `1u32` to see why the type is important
+
+ // Short-circuiting boolean logic
+ println!("true AND false is {}", true && false);
+ println!("true OR false is {}", true || false);
+ println!("NOT true is {}", !true);
+
+ // Bitwise operations
+ println!("0011 AND 0101 is {:04b}", 0b0011u32 & 0b0101);
+ println!("0011 OR 0101 is {:04b}", 0b0011u32 | 0b0101);
+ println!("0011 XOR 0101 is {:04b}", 0b0011u32 ^ 0b0101);
+ println!("1 << 5 is {}", 1u32 << 5);
+ println!("0x80 >> 2 is 0x{:x}", 0x80u32 >> 2);
+
+ // Use underscores to improve readability!
+ println!("One million is written as {}", 1_000_000u32);
+}
+```
+
+[rust op-prec]: https://doc.rust-lang.org/reference/expressions.html#expression-precedence
+[op-prec]: https://en.wikipedia.org/wiki/Operator_precedence#Programming_languages
diff --git a/src/doc/rust-by-example/src/primitives/tuples.md b/src/doc/rust-by-example/src/primitives/tuples.md
new file mode 100644
index 000000000..f4b59c04b
--- /dev/null
+++ b/src/doc/rust-by-example/src/primitives/tuples.md
@@ -0,0 +1,97 @@
+# Tuples
+
+A tuple is a collection of values of different types. Tuples are constructed
+using parentheses `()`, and each tuple itself is a value with type signature
+`(T1, T2, ...)`, where `T1`, `T2` are the types of its members. Functions can
+use tuples to return multiple values, as tuples can hold any number of values.
+
+```rust,editable
+// Tuples can be used as function arguments and as return values
+fn reverse(pair: (i32, bool)) -> (bool, i32) {
+ // `let` can be used to bind the members of a tuple to variables
+ let (int_param, bool_param) = pair;
+
+ (bool_param, int_param)
+}
+
+// The following struct is for the activity.
+#[derive(Debug)]
+struct Matrix(f32, f32, f32, f32);
+
+fn main() {
+ // A tuple with a bunch of different types
+ let long_tuple = (1u8, 2u16, 3u32, 4u64,
+ -1i8, -2i16, -3i32, -4i64,
+ 0.1f32, 0.2f64,
+ 'a', true);
+
+ // Values can be extracted from the tuple using tuple indexing
+ println!("long tuple first value: {}", long_tuple.0);
+ println!("long tuple second value: {}", long_tuple.1);
+
+ // Tuples can be tuple members
+ let tuple_of_tuples = ((1u8, 2u16, 2u32), (4u64, -1i8), -2i16);
+
+ // Tuples are printable
+ println!("tuple of tuples: {:?}", tuple_of_tuples);
+
+ // But long Tuples (more than 12 elements) cannot be printed
+ // let too_long_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13);
+ // println!("too long tuple: {:?}", too_long_tuple);
+ // TODO ^ Uncomment the above 2 lines to see the compiler error
+
+ let pair = (1, true);
+ println!("pair is {:?}", pair);
+
+ println!("the reversed pair is {:?}", reverse(pair));
+
+ // To create one element tuples, the comma is required to tell them apart
+ // from a literal surrounded by parentheses
+ println!("one element tuple: {:?}", (5u32,));
+ println!("just an integer: {:?}", (5u32));
+
+ //tuples can be destructured to create bindings
+ let tuple = (1, "hello", 4.5, true);
+
+ let (a, b, c, d) = tuple;
+ println!("{:?}, {:?}, {:?}, {:?}", a, b, c, d);
+
+ let matrix = Matrix(1.1, 1.2, 2.1, 2.2);
+ println!("{:?}", matrix);
+
+}
+```
+
+### Activity
+
+ 1. *Recap*: Add the `fmt::Display` trait to the `Matrix` struct in the above example,
+ so that if you switch from printing the debug format `{:?}` to the display
+ format `{}`, you see the following output:
+
+ ```text
+ ( 1.1 1.2 )
+ ( 2.1 2.2 )
+ ```
+
+ You may want to refer back to the example for [print display][print_display].
+ 2. Add a `transpose` function using the `reverse` function as a template, which
+ accepts a matrix as an argument, and returns a matrix in which two elements
+ have been swapped. For example:
+
+ ```rust,ignore
+ println!("Matrix:\n{}", matrix);
+ println!("Transpose:\n{}", transpose(matrix));
+ ```
+
+ results in the output:
+
+ ```text
+ Matrix:
+ ( 1.1 1.2 )
+ ( 2.1 2.2 )
+ Transpose:
+ ( 1.1 2.1 )
+ ( 1.2 2.2 )
+ ```
+
+[print_display]: ../hello/print/print_display.md
diff --git a/src/doc/rust-by-example/src/scope.md b/src/doc/rust-by-example/src/scope.md
new file mode 100644
index 000000000..ac7013278
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope.md
@@ -0,0 +1,5 @@
+# Scoping rules
+
+Scopes play an important part in ownership, borrowing, and lifetimes.
+That is, they indicate to the compiler when borrows are valid, when
+resources can be freed, and when variables are created or destroyed. \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/scope/borrow.md b/src/doc/rust-by-example/src/scope/borrow.md
new file mode 100644
index 000000000..72c70e736
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/borrow.md
@@ -0,0 +1,49 @@
+# Borrowing
+
+Most of the time, we'd like to access data without taking ownership over
+it. To accomplish this, Rust uses a *borrowing* mechanism. Instead of
+passing objects by value (`T`), objects can be passed by reference (`&T`).
+
+The compiler statically guarantees (via its borrow checker) that references
+*always* point to valid objects. That is, while references to an object
+exist, the object cannot be destroyed.
+
+```rust,editable,ignore,mdbook-runnable
+// This function takes ownership of a box and destroys it
+fn eat_box_i32(boxed_i32: Box<i32>) {
+ println!("Destroying box that contains {}", boxed_i32);
+}
+
+// This function borrows an i32
+fn borrow_i32(borrowed_i32: &i32) {
+ println!("This int is: {}", borrowed_i32);
+}
+
+fn main() {
+ // Create a boxed i32, and a stacked i32
+ let boxed_i32 = Box::new(5_i32);
+ let stacked_i32 = 6_i32;
+
+ // Borrow the contents of the box. Ownership is not taken,
+ // so the contents can be borrowed again.
+ borrow_i32(&boxed_i32);
+ borrow_i32(&stacked_i32);
+
+ {
+ // Take a reference to the data contained inside the box
+ let _ref_to_i32: &i32 = &boxed_i32;
+
+ // Error!
+ // Can't destroy `boxed_i32` while the inner value is borrowed later in scope.
+ eat_box_i32(boxed_i32);
+ // FIXME ^ Comment out this line
+
+ // Attempt to borrow `_ref_to_i32` after inner value is destroyed
+ borrow_i32(_ref_to_i32);
+ // `_ref_to_i32` goes out of scope and is no longer borrowed.
+ }
+
+ // `boxed_i32` can now give up ownership to `eat_box` and be destroyed
+ eat_box_i32(boxed_i32);
+}
+```
diff --git a/src/doc/rust-by-example/src/scope/borrow/alias.md b/src/doc/rust-by-example/src/scope/borrow/alias.md
new file mode 100644
index 000000000..9cfd5fe5d
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/borrow/alias.md
@@ -0,0 +1,58 @@
+# Aliasing
+
+Data can be immutably borrowed any number of times, but while immutably
+borrowed, the original data can't be mutably borrowed. On the other hand, only
+*one* mutable borrow is allowed at a time. The original data can be borrowed
+again only *after* the mutable reference has been used for the last time.
+
+```rust,editable
+struct Point { x: i32, y: i32, z: i32 }
+
+fn main() {
+ let mut point = Point { x: 0, y: 0, z: 0 };
+
+ let borrowed_point = &point;
+ let another_borrow = &point;
+
+ // Data can be accessed via the references and the original owner
+ println!("Point has coordinates: ({}, {}, {})",
+ borrowed_point.x, another_borrow.y, point.z);
+
+ // Error! Can't borrow `point` as mutable because it's currently
+ // borrowed as immutable.
+ // let mutable_borrow = &mut point;
+ // TODO ^ Try uncommenting this line
+
+ // The borrowed values are used again here
+ println!("Point has coordinates: ({}, {}, {})",
+ borrowed_point.x, another_borrow.y, point.z);
+
+ // The immutable references are no longer used for the rest of the code so
+ // it is possible to reborrow with a mutable reference.
+ let mutable_borrow = &mut point;
+
+ // Change data via mutable reference
+ mutable_borrow.x = 5;
+ mutable_borrow.y = 2;
+ mutable_borrow.z = 1;
+
+ // Error! Can't borrow `point` as immutable because it's currently
+ // borrowed as mutable.
+ // let y = &point.y;
+ // TODO ^ Try uncommenting this line
+
+ // Error! Can't print because `println!` takes an immutable reference.
+ // println!("Point Z coordinate is {}", point.z);
+ // TODO ^ Try uncommenting this line
+
+ // Ok! Mutable references can be passed as immutable to `println!`
+ println!("Point has coordinates: ({}, {}, {})",
+ mutable_borrow.x, mutable_borrow.y, mutable_borrow.z);
+
+ // The mutable reference is no longer used for the rest of the code so it
+ // is possible to reborrow
+ let new_borrowed_point = &point;
+ println!("Point now has coordinates: ({}, {}, {})",
+ new_borrowed_point.x, new_borrowed_point.y, new_borrowed_point.z);
+}
+```
diff --git a/src/doc/rust-by-example/src/scope/borrow/mut.md b/src/doc/rust-by-example/src/scope/borrow/mut.md
new file mode 100644
index 000000000..62119bb48
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/borrow/mut.md
@@ -0,0 +1,59 @@
+# Mutability
+
+Mutable data can be mutably borrowed using `&mut T`. This is called
+a *mutable reference* and gives read/write access to the borrower.
+In contrast, `&T` borrows the data via an immutable reference, and
+the borrower can read the data but not modify it:
+
+```rust,editable,ignore,mdbook-runnable
+#[allow(dead_code)]
+#[derive(Clone, Copy)]
+struct Book {
+ // `&'static str` is a reference to a string allocated in read only memory
+ author: &'static str,
+ title: &'static str,
+ year: u32,
+}
+
+// This function takes a reference to a book
+fn borrow_book(book: &Book) {
+ println!("I immutably borrowed {} - {} edition", book.title, book.year);
+}
+
+// This function takes a reference to a mutable book and changes `year` to 2014
+fn new_edition(book: &mut Book) {
+ book.year = 2014;
+ println!("I mutably borrowed {} - {} edition", book.title, book.year);
+}
+
+fn main() {
+ // Create an immutable Book named `immutabook`
+ let immutabook = Book {
+ // string literals have type `&'static str`
+ author: "Douglas Hofstadter",
+ title: "Gödel, Escher, Bach",
+ year: 1979,
+ };
+
+ // Create a mutable copy of `immutabook` and call it `mutabook`
+ let mut mutabook = immutabook;
+
+ // Immutably borrow an immutable object
+ borrow_book(&immutabook);
+
+ // Immutably borrow a mutable object
+ borrow_book(&mutabook);
+
+ // Borrow a mutable object as mutable
+ new_edition(&mut mutabook);
+
+ // Error! Cannot borrow an immutable object as mutable
+ new_edition(&mut immutabook);
+ // FIXME ^ Comment out this line
+}
+```
+
+### See also:
+[`static`][static]
+
+[static]: ../lifetime/static_lifetime.md
diff --git a/src/doc/rust-by-example/src/scope/borrow/ref.md b/src/doc/rust-by-example/src/scope/borrow/ref.md
new file mode 100644
index 000000000..3c035f64c
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/borrow/ref.md
@@ -0,0 +1,57 @@
+# The ref pattern
+
+When doing pattern matching or destructuring via the `let` binding, the `ref`
+keyword can be used to take references to the fields of a struct/tuple. The
+example below shows a few instances where this can be useful:
+
+```rust,editable
+#[derive(Clone, Copy)]
+struct Point { x: i32, y: i32 }
+
+fn main() {
+ let c = 'Q';
+
+ // A `ref` borrow on the left side of an assignment is equivalent to
+ // an `&` borrow on the right side.
+ let ref ref_c1 = c;
+ let ref_c2 = &c;
+
+ println!("ref_c1 equals ref_c2: {}", *ref_c1 == *ref_c2);
+
+ let point = Point { x: 0, y: 0 };
+
+ // `ref` is also valid when destructuring a struct.
+ let _copy_of_x = {
+ // `ref_to_x` is a reference to the `x` field of `point`.
+ let Point { x: ref ref_to_x, y: _ } = point;
+
+ // Return a copy of the `x` field of `point`.
+ *ref_to_x
+ };
+
+ // A mutable copy of `point`
+ let mut mutable_point = point;
+
+ {
+ // `ref` can be paired with `mut` to take mutable references.
+ let Point { x: _, y: ref mut mut_ref_to_y } = mutable_point;
+
+ // Mutate the `y` field of `mutable_point` via a mutable reference.
+ *mut_ref_to_y = 1;
+ }
+
+ println!("point is ({}, {})", point.x, point.y);
+ println!("mutable_point is ({}, {})", mutable_point.x, mutable_point.y);
+
+ // A mutable tuple that includes a pointer
+ let mut mutable_tuple = (Box::new(5u32), 3u32);
+
+ {
+ // Destructure `mutable_tuple` to change the value of `last`.
+ let (_, ref mut last) = mutable_tuple;
+ *last = 2u32;
+ }
+
+ println!("tuple is {:?}", mutable_tuple);
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/scope/lifetime.md b/src/doc/rust-by-example/src/scope/lifetime.md
new file mode 100644
index 000000000..33ffcae71
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime.md
@@ -0,0 +1,42 @@
+# Lifetimes
+
+A *lifetime* is a construct the compiler (or more specifically, its *borrow
+checker*) uses to ensure all borrows are valid. Specifically, a variable's
+lifetime begins when it is created and ends when it is destroyed. While
+lifetimes and scopes are often referred to together, they are not the same.
+
+Take, for example, the case where we borrow a variable via `&`. The
+borrow has a lifetime that is determined by where it is declared. As a result,
+the borrow is valid as long as it ends before the lender is destroyed. However,
+the scope of the borrow is determined by where the reference is used.
+
+In the following example and in the rest of this section, we will see how
+lifetimes relate to scopes, as well as how the two differ.
+
+```rust,editable
+// Lifetimes are annotated below with lines denoting the creation
+// and destruction of each variable.
+// `i` has the longest lifetime because its scope entirely encloses
+// both `borrow1` and `borrow2`. The duration of `borrow1` compared
+// to `borrow2` is irrelevant since they are disjoint.
+fn main() {
+ let i = 3; // Lifetime for `i` starts. ────────────────┐
+ // │
+ { // │
+ let borrow1 = &i; // `borrow1` lifetime starts. ──┐│
+ // ││
+ println!("borrow1: {}", borrow1); // ││
+ } // `borrow1 ends. ──────────────────────────────────┘│
+ // │
+ // │
+ { // │
+ let borrow2 = &i; // `borrow2` lifetime starts. ──┐│
+ // ││
+ println!("borrow2: {}", borrow2); // ││
+ } // `borrow2` ends. ─────────────────────────────────┘│
+ // │
+} // Lifetime ends. ─────────────────────────────────────┘
+```
+
+Note that no names or types are assigned to label lifetimes.
+This restricts how lifetimes will be able to be used as we will see.
diff --git a/src/doc/rust-by-example/src/scope/lifetime/elision.md b/src/doc/rust-by-example/src/scope/lifetime/elision.md
new file mode 100644
index 000000000..d1897e7e6
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/elision.md
@@ -0,0 +1,43 @@
+# Elision
+
+Some lifetime patterns are overwhelmingly common and so the borrow checker
+will allow you to omit them to save typing and to improve readability.
+This is known as elision. Elision exists in Rust solely because these patterns
+are common.
+
+The following code shows a few examples of elision. For a more comprehensive
+description of elision, see [lifetime elision][elision] in the book.
+
+```rust,editable
+// `elided_input` and `annotated_input` essentially have identical signatures
+// because the lifetime of `elided_input` is inferred by the compiler:
+fn elided_input(x: &i32) {
+ println!("`elided_input`: {}", x);
+}
+
+fn annotated_input<'a>(x: &'a i32) {
+ println!("`annotated_input`: {}", x);
+}
+
+// Similarly, `elided_pass` and `annotated_pass` have identical signatures
+// because the lifetime is added implicitly to `elided_pass`:
+fn elided_pass(x: &i32) -> &i32 { x }
+
+fn annotated_pass<'a>(x: &'a i32) -> &'a i32 { x }
+
+fn main() {
+ let x = 3;
+
+ elided_input(&x);
+ annotated_input(&x);
+
+ println!("`elided_pass`: {}", elided_pass(&x));
+ println!("`annotated_pass`: {}", annotated_pass(&x));
+}
+```
+
+### See also:
+
+[elision][elision]
+
+[elision]: https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision
diff --git a/src/doc/rust-by-example/src/scope/lifetime/explicit.md b/src/doc/rust-by-example/src/scope/lifetime/explicit.md
new file mode 100644
index 000000000..f0ecdf5fc
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/explicit.md
@@ -0,0 +1,75 @@
+# Explicit annotation
+
+The borrow checker uses explicit lifetime annotations to determine
+how long references should be valid. In cases where lifetimes are not
+elided[^1], Rust requires explicit annotations to determine what the
+lifetime of a reference should be. The syntax for explicitly annotating
+a lifetime uses an apostrophe character as follows:
+
+```rust,ignore
+foo<'a>
+// `foo` has a lifetime parameter `'a`
+```
+
+Similar to [closures][anonymity], using lifetimes requires generics.
+Additionally, this lifetime syntax indicates that the lifetime of `foo`
+may not exceed that of `'a`. Explicit annotation of a type has the form
+`&'a T` where `'a` has already been introduced.
+
+In cases with multiple lifetimes, the syntax is similar:
+
+```rust,ignore
+foo<'a, 'b>
+// `foo` has lifetime parameters `'a` and `'b`
+```
+
+In this case, the lifetime of `foo` cannot exceed that of either `'a` *or* `'b`.
+
+See the following example for explicit lifetime annotation in use:
+
+```rust,editable,ignore,mdbook-runnable
+// `print_refs` takes two references to `i32` which have different
+// lifetimes `'a` and `'b`. These two lifetimes must both be at
+// least as long as the function `print_refs`.
+fn print_refs<'a, 'b>(x: &'a i32, y: &'b i32) {
+ println!("x is {} and y is {}", x, y);
+}
+
+// A function which takes no arguments, but has a lifetime parameter `'a`.
+fn failed_borrow<'a>() {
+ let _x = 12;
+
+ // ERROR: `_x` does not live long enough
+ let y: &'a i32 = &_x;
+ // Attempting to use the lifetime `'a` as an explicit type annotation
+ // inside the function will fail because the lifetime of `&_x` is shorter
+ // than that of `y`. A short lifetime cannot be coerced into a longer one.
+}
+
+fn main() {
+ // Create variables to be borrowed below.
+ let (four, nine) = (4, 9);
+
+ // Borrows (`&`) of both variables are passed into the function.
+ print_refs(&four, &nine);
+ // Any input which is borrowed must outlive the borrower.
+ // In other words, the lifetime of `four` and `nine` must
+ // be longer than that of `print_refs`.
+
+ failed_borrow();
+ // `failed_borrow` contains no references to force `'a` to be
+ // longer than the lifetime of the function, but `'a` is longer.
+ // Because the lifetime is never constrained, it defaults to `'static`.
+}
+```
+
+[^1]: [elision] implicitly annotates lifetimes and so is different.
+
+### See also:
+
+[generics][generics] and [closures][closures]
+
+[anonymity]: ../../fn/closures/anonymity.md
+[closures]: ../../fn/closures.md
+[elision]: elision.md
+[generics]: ../../generics.md
diff --git a/src/doc/rust-by-example/src/scope/lifetime/fn.md b/src/doc/rust-by-example/src/scope/lifetime/fn.md
new file mode 100644
index 000000000..6c5c8afe6
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/fn.md
@@ -0,0 +1,63 @@
+# Functions
+
+Ignoring [elision], function signatures with lifetimes have a few constraints:
+
+* any reference *must* have an annotated lifetime.
+* any reference being returned *must* have the same lifetime as an input or
+be `static`.
+
+Additionally, note that returning references without input is banned if it
+would result in returning references to invalid data. The following example shows
+off some valid forms of functions with lifetimes:
+
+```rust,editable
+// One input reference with lifetime `'a` which must live
+// at least as long as the function.
+fn print_one<'a>(x: &'a i32) {
+ println!("`print_one`: x is {}", x);
+}
+
+// Mutable references are possible with lifetimes as well.
+fn add_one<'a>(x: &'a mut i32) {
+ *x += 1;
+}
+
+// Multiple elements with different lifetimes. In this case, it
+// would be fine for both to have the same lifetime `'a`, but
+// in more complex cases, different lifetimes may be required.
+fn print_multi<'a, 'b>(x: &'a i32, y: &'b i32) {
+ println!("`print_multi`: x is {}, y is {}", x, y);
+}
+
+// Returning references that have been passed in is acceptable.
+// However, the correct lifetime must be returned.
+fn pass_x<'a, 'b>(x: &'a i32, _: &'b i32) -> &'a i32 { x }
+
+//fn invalid_output<'a>() -> &'a String { &String::from("foo") }
+// The above is invalid: `'a` must live longer than the function.
+// Here, `&String::from("foo")` would create a `String`, followed by a
+// reference. Then the data is dropped upon exiting the scope, leaving
+// a reference to invalid data to be returned.
+
+fn main() {
+ let x = 7;
+ let y = 9;
+
+ print_one(&x);
+ print_multi(&x, &y);
+
+ let z = pass_x(&x, &y);
+ print_one(z);
+
+ let mut t = 3;
+ add_one(&mut t);
+ print_one(&t);
+}
+```
+
+### See also:
+
+[functions][fn]
+
+[elision]: elision.md
+[fn]: fn.md
diff --git a/src/doc/rust-by-example/src/scope/lifetime/lifetime_bounds.md b/src/doc/rust-by-example/src/scope/lifetime/lifetime_bounds.md
new file mode 100644
index 000000000..3d635bde1
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/lifetime_bounds.md
@@ -0,0 +1,53 @@
+# Bounds
+
+Just like generic types can be bounded, lifetimes (themselves generic)
+use bounds as well. The `:` character has a slightly different meaning here,
+but `+` is the same. Note how the following read:
+
+1. `T: 'a`: *All* references in `T` must outlive lifetime `'a`.
+2. `T: Trait + 'a`: Type `T` must implement trait `Trait` and *all* references
+in `T` must outlive `'a`.
+
+The example below shows the above syntax in action used after keyword `where`:
+
+```rust,editable
+use std::fmt::Debug; // Trait to bound with.
+
+#[derive(Debug)]
+struct Ref<'a, T: 'a>(&'a T);
+// `Ref` contains a reference to a generic type `T` that has
+// an unknown lifetime `'a`. `T` is bounded such that any
+// *references* in `T` must outlive `'a`. Additionally, the lifetime
+// of `Ref` may not exceed `'a`.
+
+// A generic function which prints using the `Debug` trait.
+fn print<T>(t: T) where
+ T: Debug {
+ println!("`print`: t is {:?}", t);
+}
+
+// Here a reference to `T` is taken where `T` implements
+// `Debug` and all *references* in `T` outlive `'a`. In
+// addition, `'a` must outlive the function.
+fn print_ref<'a, T>(t: &'a T) where
+ T: Debug + 'a {
+ println!("`print_ref`: t is {:?}", t);
+}
+
+fn main() {
+ let x = 7;
+ let ref_x = Ref(&x);
+
+ print_ref(&ref_x);
+ print(ref_x);
+}
+```
+
+### See also:
+
+[generics][generics], [bounds in generics][bounds], and
+[multiple bounds in generics][multibounds]
+
+[generics]: ../../generics.md
+[bounds]: ../../generics/bounds.md
+[multibounds]: ../../generics/multi_bounds.md
diff --git a/src/doc/rust-by-example/src/scope/lifetime/lifetime_coercion.md b/src/doc/rust-by-example/src/scope/lifetime/lifetime_coercion.md
new file mode 100644
index 000000000..96090f480
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/lifetime_coercion.md
@@ -0,0 +1,31 @@
+# Coercion
+
+A longer lifetime can be coerced into a shorter one
+so that it works inside a scope it normally wouldn't work in.
+This comes in the form of inferred coercion by the Rust compiler,
+and also in the form of declaring a lifetime difference:
+
+```rust,editable
+// Here, Rust infers a lifetime that is as short as possible.
+// The two references are then coerced to that lifetime.
+fn multiply<'a>(first: &'a i32, second: &'a i32) -> i32 {
+ first * second
+}
+
+// `<'a: 'b, 'b>` reads as lifetime `'a` is at least as long as `'b`.
+// Here, we take in an `&'a i32` and return a `&'b i32` as a result of coercion.
+fn choose_first<'a: 'b, 'b>(first: &'a i32, _: &'b i32) -> &'b i32 {
+ first
+}
+
+fn main() {
+ let first = 2; // Longer lifetime
+
+ {
+ let second = 3; // Shorter lifetime
+
+ println!("The product is {}", multiply(&first, &second));
+ println!("{} is the first", choose_first(&first, &second));
+ };
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/scope/lifetime/methods.md b/src/doc/rust-by-example/src/scope/lifetime/methods.md
new file mode 100644
index 000000000..1e1eb96f4
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/methods.md
@@ -0,0 +1,28 @@
+# Methods
+
+Methods are annotated similarly to functions:
+
+```rust,editable
+struct Owner(i32);
+
+impl Owner {
+ // Annotate lifetimes as in a standalone function.
+ fn add_one<'a>(&'a mut self) { self.0 += 1; }
+ fn print<'a>(&'a self) {
+ println!("`print`: {}", self.0);
+ }
+}
+
+fn main() {
+ let mut owner = Owner(18);
+
+ owner.add_one();
+ owner.print();
+}
+```
+
+### See also:
+
+[methods]
+
+[methods]: ../../fn/methods.md
diff --git a/src/doc/rust-by-example/src/scope/lifetime/static_lifetime.md b/src/doc/rust-by-example/src/scope/lifetime/static_lifetime.md
new file mode 100644
index 000000000..3f31693fa
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/static_lifetime.md
@@ -0,0 +1,110 @@
+# Static
+
+Rust has a few reserved lifetime names. One of those is `'static`. You
+might encounter it in two situations:
+
+```rust, editable
+// A reference with 'static lifetime:
+let s: &'static str = "hello world";
+
+// 'static as part of a trait bound:
+fn generic<T>(x: T) where T: 'static {}
+```
+
+Both are related but subtly different and this is a common source for
+confusion when learning Rust. Here are some examples for each situation:
+
+## Reference lifetime
+
+As a reference lifetime `'static` indicates that the data pointed to by
+the reference lives for the entire lifetime of the running program.
+It can still be coerced to a shorter lifetime.
+
+There are two ways to make a variable with `'static` lifetime, and both
+are stored in the read-only memory of the binary:
+
+* Make a constant with the `static` declaration.
+* Make a `string` literal which has type: `&'static str`.
+
+See the following example for a display of each method:
+
+```rust,editable
+// Make a constant with `'static` lifetime.
+static NUM: i32 = 18;
+
+// Returns a reference to `NUM` where its `'static`
+// lifetime is coerced to that of the input argument.
+fn coerce_static<'a>(_: &'a i32) -> &'a i32 {
+ &NUM
+}
+
+fn main() {
+ {
+ // Make a `string` literal and print it:
+ let static_string = "I'm in read-only memory";
+ println!("static_string: {}", static_string);
+
+ // When `static_string` goes out of scope, the reference
+ // can no longer be used, but the data remains in the binary.
+ }
+
+ {
+ // Make an integer to use for `coerce_static`:
+ let lifetime_num = 9;
+
+ // Coerce `NUM` to lifetime of `lifetime_num`:
+ let coerced_static = coerce_static(&lifetime_num);
+
+ println!("coerced_static: {}", coerced_static);
+ }
+
+ println!("NUM: {} stays accessible!", NUM);
+}
+```
+
+## Trait bound
+
+As a trait bound, it means the type does not contain any non-static
+references. Eg. the receiver can hold on to the type for as long as
+they want and it will never become invalid until they drop it.
+
+It's important to understand this means that any owned data always passes
+a `'static` lifetime bound, but a reference to that owned data generally
+does not:
+
+```rust,editable,compile_fail
+use std::fmt::Debug;
+
+fn print_it( input: impl Debug + 'static ) {
+ println!( "'static value passed in is: {:?}", input );
+}
+
+fn main() {
+ // i is owned and contains no references, thus it's 'static:
+ let i = 5;
+ print_it(i);
+
+ // oops, &i only has the lifetime defined by the scope of
+ // main(), so it's not 'static:
+ print_it(&i);
+}
+```
+The compiler will tell you:
+```ignore
+error[E0597]: `i` does not live long enough
+ --> src/lib.rs:15:15
+ |
+15 | print_it(&i);
+ | ---------^^--
+ | | |
+ | | borrowed value does not live long enough
+ | argument requires that `i` is borrowed for `'static`
+16 | }
+ | - `i` dropped here while still borrowed
+```
+
+### See also:
+
+[`'static` constants][static_const]
+
+[static_const]: ../../custom_types/constants.md
diff --git a/src/doc/rust-by-example/src/scope/lifetime/struct.md b/src/doc/rust-by-example/src/scope/lifetime/struct.md
new file mode 100644
index 000000000..aca0bfe62
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/struct.md
@@ -0,0 +1,46 @@
+# Structs
+
+Annotation of lifetimes in structures are also similar to functions:
+
+```rust,editable
+// A type `Borrowed` which houses a reference to an
+// `i32`. The reference to `i32` must outlive `Borrowed`.
+#[derive(Debug)]
+struct Borrowed<'a>(&'a i32);
+
+// Similarly, both references here must outlive this structure.
+#[derive(Debug)]
+struct NamedBorrowed<'a> {
+ x: &'a i32,
+ y: &'a i32,
+}
+
+// An enum which is either an `i32` or a reference to one.
+#[derive(Debug)]
+enum Either<'a> {
+ Num(i32),
+ Ref(&'a i32),
+}
+
+fn main() {
+ let x = 18;
+ let y = 15;
+
+ let single = Borrowed(&x);
+ let double = NamedBorrowed { x: &x, y: &y };
+ let reference = Either::Ref(&x);
+ let number = Either::Num(y);
+
+ println!("x is borrowed in {:?}", single);
+ println!("x and y are borrowed in {:?}", double);
+ println!("x is borrowed in {:?}", reference);
+ println!("y is *not* borrowed in {:?}", number);
+}
+```
+
+### See also:
+
+[`struct`s][structs]
+
+
+[structs]: ../../custom_types/structs.md
diff --git a/src/doc/rust-by-example/src/scope/lifetime/trait.md b/src/doc/rust-by-example/src/scope/lifetime/trait.md
new file mode 100644
index 000000000..3c26df119
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/lifetime/trait.md
@@ -0,0 +1,33 @@
+# Traits
+
+Annotation of lifetimes in trait methods basically are similar to functions.
+Note that `impl` may have annotation of lifetimes too.
+
+```rust,editable
+// A struct with annotation of lifetimes.
+#[derive(Debug)]
+struct Borrowed<'a> {
+ x: &'a i32,
+}
+
+// Annotate lifetimes to impl.
+impl<'a> Default for Borrowed<'a> {
+ fn default() -> Self {
+ Self {
+ x: &10,
+ }
+ }
+}
+
+fn main() {
+ let b: Borrowed = Default::default();
+ println!("b is {:?}", b);
+}
+```
+
+### See also:
+
+[`trait`s][trait]
+
+
+[trait]: ../../trait.md
diff --git a/src/doc/rust-by-example/src/scope/move.md b/src/doc/rust-by-example/src/scope/move.md
new file mode 100644
index 000000000..0433e8ac1
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/move.md
@@ -0,0 +1,60 @@
+# Ownership and moves
+
+Because variables are in charge of freeing their own resources,
+**resources can only have one owner**. This also prevents resources
+from being freed more than once. Note that not all variables own
+resources (e.g. [references]).
+
+When doing assignments (`let x = y`) or passing function arguments by value
+(`foo(x)`), the *ownership* of the resources is transferred. In Rust-speak,
+this is known as a *move*.
+
+After moving resources, the previous owner can no longer be used. This avoids
+creating dangling pointers.
+
+```rust,editable
+// This function takes ownership of the heap allocated memory
+fn destroy_box(c: Box<i32>) {
+ println!("Destroying a box that contains {}", c);
+
+ // `c` is destroyed and the memory freed
+}
+
+fn main() {
+ // _Stack_ allocated integer
+ let x = 5u32;
+
+ // *Copy* `x` into `y` - no resources are moved
+ let y = x;
+
+ // Both values can be independently used
+ println!("x is {}, and y is {}", x, y);
+
+ // `a` is a pointer to a _heap_ allocated integer
+ let a = Box::new(5i32);
+
+ println!("a contains: {}", a);
+
+ // *Move* `a` into `b`
+ let b = a;
+ // The pointer address of `a` is copied (not the data) into `b`.
+ // Both are now pointers to the same heap allocated data, but
+ // `b` now owns it.
+
+ // Error! `a` can no longer access the data, because it no longer owns the
+ // heap memory
+ //println!("a contains: {}", a);
+ // TODO ^ Try uncommenting this line
+
+ // This function takes ownership of the heap allocated memory from `b`
+ destroy_box(b);
+
+ // Since the heap memory has been freed at this point, this action would
+ // result in dereferencing freed memory, but it's forbidden by the compiler
+ // Error! Same reason as the previous Error
+ //println!("b contains: {}", b);
+ // TODO ^ Try uncommenting this line
+}
+```
+
+[references]: ../flow_control/match/destructuring/destructure_pointers.md
diff --git a/src/doc/rust-by-example/src/scope/move/mut.md b/src/doc/rust-by-example/src/scope/move/mut.md
new file mode 100644
index 000000000..3dddc4a17
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/move/mut.md
@@ -0,0 +1,24 @@
+# Mutability
+
+Mutability of data can be changed when ownership is transferred.
+
+```rust,editable
+fn main() {
+ let immutable_box = Box::new(5u32);
+
+ println!("immutable_box contains {}", immutable_box);
+
+ // Mutability error
+ //*immutable_box = 4;
+
+ // *Move* the box, changing the ownership (and mutability)
+ let mut mutable_box = immutable_box;
+
+ println!("mutable_box contains {}", mutable_box);
+
+ // Modify the contents of the box
+ *mutable_box = 4;
+
+ println!("mutable_box now contains {}", mutable_box);
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/scope/move/partial_move.md b/src/doc/rust-by-example/src/scope/move/partial_move.md
new file mode 100644
index 000000000..21d85a8b3
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/move/partial_move.md
@@ -0,0 +1,48 @@
+# Partial moves
+
+Within the [destructuring] of a single variable, both `by-move` and
+`by-reference` pattern bindings can be used at the same time. Doing
+this will result in a _partial move_ of the variable, which means
+that parts of the variable will be moved while other parts stay. In
+such a case, the parent variable cannot be used afterwards as a
+whole, however the parts that are only referenced (and not moved)
+can still be used.
+
+```rust,editable
+fn main() {
+ #[derive(Debug)]
+ struct Person {
+ name: String,
+ age: Box<u8>,
+ }
+
+ let person = Person {
+ name: String::from("Alice"),
+ age: Box::new(20),
+ };
+
+ // `name` is moved out of person, but `age` is referenced
+ let Person { name, ref age } = person;
+
+ println!("The person's age is {}", age);
+
+ println!("The person's name is {}", name);
+
+ // Error! borrow of partially moved value: `person` partial move occurs
+ //println!("The person struct is {:?}", person);
+
+ // `person` cannot be used but `person.age` can be used as it is not moved
+ println!("The person's age from person struct is {}", person.age);
+}
+```
+(In this example, we store the `age` variable on the heap to
+illustrate the partial move: deleting `ref` in the above code would
+give an error as the ownership of `person.age` would be moved to the
+variable `age`. If `Person.age` were stored on the stack, `ref` would
+not be required as the definition of `age` would copy the data from
+`person.age` without moving it.)
+
+### See also:
+[destructuring][destructuring]
+
+[destructuring]: ../../flow_control/match/destructuring.md
diff --git a/src/doc/rust-by-example/src/scope/raii.md b/src/doc/rust-by-example/src/scope/raii.md
new file mode 100644
index 000000000..7b6bca618
--- /dev/null
+++ b/src/doc/rust-by-example/src/scope/raii.md
@@ -0,0 +1,96 @@
+# RAII
+
+Variables in Rust do more than just hold data in the stack: they also *own*
+resources, e.g. `Box<T>` owns memory in the heap. Rust enforces [RAII][raii]
+(Resource Acquisition Is Initialization), so whenever an object goes out of
+scope, its destructor is called and its owned resources are freed.
+
+This behavior shields against *resource leak* bugs, so you'll never have to
+manually free memory or worry about memory leaks again! Here's a quick showcase:
+
+```rust,editable
+// raii.rs
+fn create_box() {
+ // Allocate an integer on the heap
+ let _box1 = Box::new(3i32);
+
+ // `_box1` is destroyed here, and memory gets freed
+}
+
+fn main() {
+ // Allocate an integer on the heap
+ let _box2 = Box::new(5i32);
+
+ // A nested scope:
+ {
+ // Allocate an integer on the heap
+ let _box3 = Box::new(4i32);
+
+ // `_box3` is destroyed here, and memory gets freed
+ }
+
+ // Creating lots of boxes just for fun
+ // There's no need to manually free memory!
+ for _ in 0u32..1_000 {
+ create_box();
+ }
+
+ // `_box2` is destroyed here, and memory gets freed
+}
+```
+
+Of course, we can double check for memory errors using [`valgrind`][valgrind]:
+
+```shell
+$ rustc raii.rs && valgrind ./raii
+==26873== Memcheck, a memory error detector
+==26873== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
+==26873== Using Valgrind-3.9.0 and LibVEX; rerun with -h for copyright info
+==26873== Command: ./raii
+==26873==
+==26873==
+==26873== HEAP SUMMARY:
+==26873== in use at exit: 0 bytes in 0 blocks
+==26873== total heap usage: 1,013 allocs, 1,013 frees, 8,696 bytes allocated
+==26873==
+==26873== All heap blocks were freed -- no leaks are possible
+==26873==
+==26873== For counts of detected and suppressed errors, rerun with: -v
+==26873== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
+```
+
+No leaks here!
+
+## Destructor
+
+The notion of a destructor in Rust is provided through the [`Drop`] trait. The
+destructor is called when the resource goes out of scope. This trait is not
+required to be implemented for every type, only implement it for your type if
+you require its own destructor logic.
+
+Run the below example to see how the [`Drop`] trait works. When the variable in
+the `main` function goes out of scope the custom destructor will be invoked.
+
+```rust,editable
+struct ToDrop;
+
+impl Drop for ToDrop {
+ fn drop(&mut self) {
+ println!("ToDrop is being dropped");
+ }
+}
+
+fn main() {
+ let x = ToDrop;
+ println!("Made a ToDrop!");
+}
+```
+
+### See also:
+
+[Box][box]
+
+[raii]: https://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
+[box]: ../std/box.md
+[valgrind]: http://valgrind.org/info/
+[`Drop`]: https://doc.rust-lang.org/std/ops/trait.Drop.html
diff --git a/src/doc/rust-by-example/src/std.md b/src/doc/rust-by-example/src/std.md
new file mode 100644
index 000000000..8863c788a
--- /dev/null
+++ b/src/doc/rust-by-example/src/std.md
@@ -0,0 +1,17 @@
+# Std library types
+
+The `std` library provides many custom types which expands drastically on
+the `primitives`. Some of these include:
+
+* growable `String`s like: `"hello world"`
+* growable vectors: `[1, 2, 3]`
+* optional types: `Option<i32>`
+* error handling types: `Result<i32, i32>`
+* heap allocated pointers: `Box<i32>`
+
+### See also:
+
+[primitives] and [the std library][std]
+
+[primitives]: primitives.md
+[std]: https://doc.rust-lang.org/std/
diff --git a/src/doc/rust-by-example/src/std/arc.md b/src/doc/rust-by-example/src/std/arc.md
new file mode 100644
index 000000000..f4c1ce80e
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/arc.md
@@ -0,0 +1,33 @@
+# Arc
+
+When shared ownership between threads is needed, `Arc`(Atomically Reference
+Counted) can be used. This struct, via the `Clone` implementation can create
+a reference pointer for the location of a value in the memory heap while
+increasing the reference counter. As it shares ownership between threads, when
+the last reference pointer to a value is out of scope, the variable is dropped.
+
+```rust,editable
+use std::time::Duration;
+use std::sync::Arc;
+use std::thread;
+
+fn main() {
+ // This variable declaration is where its value is specified.
+ let apple = Arc::new("the same apple");
+
+ for _ in 0..10 {
+ // Here there is no value specification as it is a pointer to a
+ // reference in the memory heap.
+ let apple = Arc::clone(&apple);
+
+ thread::spawn(move || {
+ // As Arc was used, threads can be spawned using the value allocated
+ // in the Arc variable pointer's location.
+ println!("{:?}", apple);
+ });
+ }
+
+ // Make sure all Arc instances are printed from spawned threads.
+ thread::sleep(Duration::from_secs(1));
+}
+```
diff --git a/src/doc/rust-by-example/src/std/box.md b/src/doc/rust-by-example/src/std/box.md
new file mode 100644
index 000000000..0740c07d6
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/box.md
@@ -0,0 +1,77 @@
+# Box, stack and heap
+
+All values in Rust are stack allocated by default. Values can be *boxed*
+(allocated on the heap) by creating a `Box<T>`. A box is a smart pointer to a
+heap allocated value of type `T`. When a box goes out of scope, its destructor
+is called, the inner object is destroyed, and the memory on the heap is freed.
+
+Boxed values can be dereferenced using the `*` operator; this removes one layer
+of indirection.
+
+```rust,editable
+use std::mem;
+
+#[allow(dead_code)]
+#[derive(Debug, Clone, Copy)]
+struct Point {
+ x: f64,
+ y: f64,
+}
+
+// A Rectangle can be specified by where its top left and bottom right
+// corners are in space
+#[allow(dead_code)]
+struct Rectangle {
+ top_left: Point,
+ bottom_right: Point,
+}
+
+fn origin() -> Point {
+ Point { x: 0.0, y: 0.0 }
+}
+
+fn boxed_origin() -> Box<Point> {
+ // Allocate this point on the heap, and return a pointer to it
+ Box::new(Point { x: 0.0, y: 0.0 })
+}
+
+fn main() {
+ // (all the type annotations are superfluous)
+ // Stack allocated variables
+ let point: Point = origin();
+ let rectangle: Rectangle = Rectangle {
+ top_left: origin(),
+ bottom_right: Point { x: 3.0, y: -4.0 }
+ };
+
+ // Heap allocated rectangle
+ let boxed_rectangle: Box<Rectangle> = Box::new(Rectangle {
+ top_left: origin(),
+ bottom_right: Point { x: 3.0, y: -4.0 },
+ });
+
+ // The output of functions can be boxed
+ let boxed_point: Box<Point> = Box::new(origin());
+
+ // Double indirection
+ let box_in_a_box: Box<Box<Point>> = Box::new(boxed_origin());
+
+ println!("Point occupies {} bytes on the stack",
+ mem::size_of_val(&point));
+ println!("Rectangle occupies {} bytes on the stack",
+ mem::size_of_val(&rectangle));
+
+ // box size == pointer size
+ println!("Boxed point occupies {} bytes on the heap",
+ mem::size_of_val(&boxed_point));
+ println!("Boxed rectangle occupies {} bytes on the heap",
+ mem::size_of_val(&boxed_rectangle));
+ println!("Boxed box occupies {} bytes on the heap",
+ mem::size_of_val(&box_in_a_box));
+
+ // Copy the data contained in `boxed_point` into `unboxed_point`
+ let unboxed_point: Point = *boxed_point;
+ println!("Unboxed point occupies {} bytes on the stack",
+ mem::size_of_val(&unboxed_point));
+}
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/std/hash.md b/src/doc/rust-by-example/src/std/hash.md
new file mode 100644
index 000000000..94faacbf2
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/hash.md
@@ -0,0 +1,64 @@
+# HashMap
+
+Where vectors store values by an integer index, `HashMap`s store values by key.
+`HashMap` keys can be booleans, integers, strings,
+or any other type that implements the `Eq` and `Hash` traits.
+More on this in the next section.
+
+Like vectors, `HashMap`s are growable, but HashMaps can also shrink themselves
+when they have excess space.
+You can create a HashMap with a certain starting capacity using
+`HashMap::with_capacity(uint)`, or use `HashMap::new()` to get a HashMap
+with a default initial capacity (recommended).
+
+```rust,editable
+use std::collections::HashMap;
+
+fn call(number: &str) -> &str {
+ match number {
+ "798-1364" => "We're sorry, the call cannot be completed as dialed.
+ Please hang up and try again.",
+ "645-7689" => "Hello, this is Mr. Awesome's Pizza. My name is Fred.
+ What can I get for you today?",
+ _ => "Hi! Who is this again?"
+ }
+}
+
+fn main() {
+ let mut contacts = HashMap::new();
+
+ contacts.insert("Daniel", "798-1364");
+ contacts.insert("Ashley", "645-7689");
+ contacts.insert("Katie", "435-8291");
+ contacts.insert("Robert", "956-1745");
+
+ // Takes a reference and returns Option<&V>
+ match contacts.get(&"Daniel") {
+ Some(&number) => println!("Calling Daniel: {}", call(number)),
+ _ => println!("Don't have Daniel's number."),
+ }
+
+ // `HashMap::insert()` returns `None`
+ // if the inserted value is new, `Some(value)` otherwise
+ contacts.insert("Daniel", "164-6743");
+
+ match contacts.get(&"Ashley") {
+ Some(&number) => println!("Calling Ashley: {}", call(number)),
+ _ => println!("Don't have Ashley's number."),
+ }
+
+ contacts.remove(&"Ashley");
+
+ // `HashMap::iter()` returns an iterator that yields
+ // (&'a key, &'a value) pairs in arbitrary order.
+ for (contact, &number) in contacts.iter() {
+ println!("Calling {}: {}", contact, call(number));
+ }
+}
+```
+
+For more information on how hashing and hash maps
+(sometimes called hash tables) work, have a look at
+[Hash Table Wikipedia][wiki-hash]
+
+[wiki-hash]: https://en.wikipedia.org/wiki/Hash_table
diff --git a/src/doc/rust-by-example/src/std/hash/alt_key_types.md b/src/doc/rust-by-example/src/std/hash/alt_key_types.md
new file mode 100644
index 000000000..ab94819b2
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/hash/alt_key_types.md
@@ -0,0 +1,89 @@
+# Alternate/custom key types
+
+Any type that implements the `Eq` and `Hash` traits can be a key in `HashMap`.
+This includes:
+
+* `bool` (though not very useful since there is only two possible keys)
+* `int`, `uint`, and all variations thereof
+* `String` and `&str` (protip: you can have a `HashMap` keyed by `String`
+and call `.get()` with an `&str`)
+
+Note that `f32` and `f64` do *not* implement `Hash`,
+likely because [floating-point precision errors][floating]
+would make using them as hashmap keys horribly error-prone.
+
+All collection classes implement `Eq` and `Hash`
+if their contained type also respectively implements `Eq` and `Hash`.
+For example, `Vec<T>` will implement `Hash` if `T` implements `Hash`.
+
+You can easily implement `Eq` and `Hash` for a custom type with just one line:
+`#[derive(PartialEq, Eq, Hash)]`
+
+The compiler will do the rest. If you want more control over the details,
+you can implement `Eq` and/or `Hash` yourself.
+This guide will not cover the specifics of implementing `Hash`.
+
+To play around with using a `struct` in `HashMap`,
+let's try making a very simple user logon system:
+
+```rust,editable
+use std::collections::HashMap;
+
+// Eq requires that you derive PartialEq on the type.
+#[derive(PartialEq, Eq, Hash)]
+struct Account<'a>{
+ username: &'a str,
+ password: &'a str,
+}
+
+struct AccountInfo<'a>{
+ name: &'a str,
+ email: &'a str,
+}
+
+type Accounts<'a> = HashMap<Account<'a>, AccountInfo<'a>>;
+
+fn try_logon<'a>(accounts: &Accounts<'a>,
+ username: &'a str, password: &'a str){
+ println!("Username: {}", username);
+ println!("Password: {}", password);
+ println!("Attempting logon...");
+
+ let logon = Account {
+ username,
+ password,
+ };
+
+ match accounts.get(&logon) {
+ Some(account_info) => {
+ println!("Successful logon!");
+ println!("Name: {}", account_info.name);
+ println!("Email: {}", account_info.email);
+ },
+ _ => println!("Login failed!"),
+ }
+}
+
+fn main(){
+ let mut accounts: Accounts = HashMap::new();
+
+ let account = Account {
+ username: "j.everyman",
+ password: "password123",
+ };
+
+ let account_info = AccountInfo {
+ name: "John Everyman",
+ email: "j.everyman@email.com",
+ };
+
+ accounts.insert(account, account_info);
+
+ try_logon(&accounts, "j.everyman", "psasword123");
+
+ try_logon(&accounts, "j.everyman", "password123");
+}
+```
+
+[hash]: https://en.wikipedia.org/wiki/Hash_function
+[floating]: https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
diff --git a/src/doc/rust-by-example/src/std/hash/hashset.md b/src/doc/rust-by-example/src/std/hash/hashset.md
new file mode 100644
index 000000000..63d5af878
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/hash/hashset.md
@@ -0,0 +1,76 @@
+# HashSet
+
+Consider a `HashSet` as a `HashMap` where we just care about the keys (
+`HashSet<T>` is, in actuality, just a wrapper around `HashMap<T, ()>`).
+
+"What's the point of that?" you ask. "I could just store the keys in a `Vec`."
+
+A `HashSet`'s unique feature is that
+it is guaranteed to not have duplicate elements.
+That's the contract that any set collection fulfills.
+`HashSet` is just one implementation. (see also: [`BTreeSet`][treeset])
+
+If you insert a value that is already present in the `HashSet`,
+(i.e. the new value is equal to the existing and they both have the same hash),
+then the new value will replace the old.
+
+This is great for when you never want more than one of something,
+or when you want to know if you've already got something.
+
+But sets can do more than that.
+
+Sets have 4 primary operations (all of the following calls return an iterator):
+
+* `union`: get all the unique elements in both sets.
+
+* `difference`: get all the elements that are in the first set but not the second.
+
+* `intersection`: get all the elements that are only in *both* sets.
+
+* `symmetric_difference`:
+get all the elements that are in one set or the other, but *not* both.
+
+Try all of these in the following example:
+
+```rust,editable,ignore,mdbook-runnable
+use std::collections::HashSet;
+
+fn main() {
+ let mut a: HashSet<i32> = vec![1i32, 2, 3].into_iter().collect();
+ let mut b: HashSet<i32> = vec![2i32, 3, 4].into_iter().collect();
+
+ assert!(a.insert(4));
+ assert!(a.contains(&4));
+
+ // `HashSet::insert()` returns false if
+ // there was a value already present.
+ assert!(b.insert(4), "Value 4 is already in set B!");
+ // FIXME ^ Comment out this line
+
+ b.insert(5);
+
+ // If a collection's element type implements `Debug`,
+ // then the collection implements `Debug`.
+ // It usually prints its elements in the format `[elem1, elem2, ...]`
+ println!("A: {:?}", a);
+ println!("B: {:?}", b);
+
+ // Print [1, 2, 3, 4, 5] in arbitrary order
+ println!("Union: {:?}", a.union(&b).collect::<Vec<&i32>>());
+
+ // This should print [1]
+ println!("Difference: {:?}", a.difference(&b).collect::<Vec<&i32>>());
+
+ // Print [2, 3, 4] in arbitrary order.
+ println!("Intersection: {:?}", a.intersection(&b).collect::<Vec<&i32>>());
+
+ // Print [1, 5]
+ println!("Symmetric Difference: {:?}",
+ a.symmetric_difference(&b).collect::<Vec<&i32>>());
+}
+```
+
+(Examples are adapted from the [documentation.][hash-set])
+
+[treeset]: https://doc.rust-lang.org/std/collections/struct.BTreeSet.html
+[hash-set]: https://doc.rust-lang.org/std/collections/struct.HashSet.html#method.difference
diff --git a/src/doc/rust-by-example/src/std/option.md b/src/doc/rust-by-example/src/std/option.md
new file mode 100644
index 000000000..30927e87e
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/option.md
@@ -0,0 +1,50 @@
+# `Option`
+
+Sometimes it's desirable to catch the failure of some parts of a program
+instead of calling `panic!`; this can be accomplished using the `Option` enum.
+
+The `Option<T>` enum has two variants:
+
+* `None`, to indicate failure or lack of value, and
+* `Some(value)`, a tuple struct that wraps a `value` with type `T`.
+
+```rust,editable,ignore,mdbook-runnable
+// An integer division that doesn't `panic!`
+fn checked_division(dividend: i32, divisor: i32) -> Option<i32> {
+ if divisor == 0 {
+ // Failure is represented as the `None` variant
+ None
+ } else {
+ // Result is wrapped in a `Some` variant
+ Some(dividend / divisor)
+ }
+}
+
+// This function handles a division that may not succeed
+fn try_division(dividend: i32, divisor: i32) {
+ // `Option` values can be pattern matched, just like other enums
+ match checked_division(dividend, divisor) {
+ None => println!("{} / {} failed!", dividend, divisor),
+ Some(quotient) => {
+ println!("{} / {} = {}", dividend, divisor, quotient)
+ },
+ }
+}
+
+fn main() {
+ try_division(4, 2);
+ try_division(1, 0);
+
+ // Binding `None` to a variable needs to be type annotated
+ let none: Option<i32> = None;
+ let _equivalent_none = None::<i32>;
+
+ let optional_float = Some(0f32);
+
+ // Unwrapping a `Some` variant will extract the value wrapped.
+ println!("{:?} unwraps to {:?}", optional_float, optional_float.unwrap());
+
+ // Unwrapping a `None` variant will `panic!`
+ println!("{:?} unwraps to {:?}", none, none.unwrap());
+}
+```
diff --git a/src/doc/rust-by-example/src/std/panic.md b/src/doc/rust-by-example/src/std/panic.md
new file mode 100644
index 000000000..b22000494
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/panic.md
@@ -0,0 +1,54 @@
+# `panic!`
+
+The `panic!` macro can be used to generate a panic and start unwinding
+its stack. While unwinding, the runtime will take care of freeing all the
+resources *owned* by the thread by calling the destructor of all its objects.
+
+Since we are dealing with programs with only one thread, `panic!` will cause the
+program to report the panic message and exit.
+
+```rust,editable,ignore,mdbook-runnable
+// Re-implementation of integer division (/)
+fn division(dividend: i32, divisor: i32) -> i32 {
+ if divisor == 0 {
+ // Division by zero triggers a panic
+ panic!("division by zero");
+ } else {
+ dividend / divisor
+ }
+}
+
+// The `main` task
+fn main() {
+ // Heap allocated integer
+ let _x = Box::new(0i32);
+
+ // This operation will trigger a task failure
+ division(3, 0);
+
+ println!("This point won't be reached!");
+
+ // `_x` should get destroyed at this point
+}
+```
+
+Let's check that `panic!` doesn't leak memory.
+
+```shell
+$ rustc panic.rs && valgrind ./panic
+==4401== Memcheck, a memory error detector
+==4401== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
+==4401== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for copyright info
+==4401== Command: ./panic
+==4401==
+thread '<main>' panicked at 'division by zero', panic.rs:5
+==4401==
+==4401== HEAP SUMMARY:
+==4401== in use at exit: 0 bytes in 0 blocks
+==4401== total heap usage: 18 allocs, 18 frees, 1,648 bytes allocated
+==4401==
+==4401== All heap blocks were freed -- no leaks are possible
+==4401==
+==4401== For counts of detected and suppressed errors, rerun with: -v
+==4401== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
+```
diff --git a/src/doc/rust-by-example/src/std/rc.md b/src/doc/rust-by-example/src/std/rc.md
new file mode 100644
index 000000000..36b10907d
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/rc.md
@@ -0,0 +1,54 @@
+# `Rc`
+
+When multiple ownership is needed, `Rc`(Reference Counting) can be used. `Rc` keeps track of the number of the references which means the number of owners of the value wrapped inside an `Rc`.
+
+Reference count of an `Rc` increases by 1 whenever an `Rc` is cloned, and decreases by 1 whenever one cloned `Rc` is dropped out of the scope. When an `Rc`'s reference count becomes zero (which means there are no remaining owners), both the `Rc` and the value are all dropped.
+
+Cloning an `Rc` never performs a deep copy. Cloning creates just another pointer to the wrapped value, and increments the count.
+
+```rust,editable
+use std::rc::Rc;
+
+fn main() {
+ let rc_examples = "Rc examples".to_string();
+ {
+ println!("--- rc_a is created ---");
+
+ let rc_a: Rc<String> = Rc::new(rc_examples);
+ println!("Reference Count of rc_a: {}", Rc::strong_count(&rc_a));
+
+ {
+ println!("--- rc_a is cloned to rc_b ---");
+
+ let rc_b: Rc<String> = Rc::clone(&rc_a);
+ println!("Reference Count of rc_b: {}", Rc::strong_count(&rc_b));
+ println!("Reference Count of rc_a: {}", Rc::strong_count(&rc_a));
+
+ // Two `Rc`s are equal if their inner values are equal
+ println!("rc_a and rc_b are equal: {}", rc_a.eq(&rc_b));
+
+ // We can use methods of a value directly
+ println!("Length of the value inside rc_a: {}", rc_a.len());
+ println!("Value of rc_b: {}", rc_b);
+
+ println!("--- rc_b is dropped out of scope ---");
+ }
+
+ println!("Reference Count of rc_a: {}", Rc::strong_count(&rc_a));
+
+ println!("--- rc_a is dropped out of scope ---");
+ }
+
+ // Error! `rc_examples` already moved into `rc_a`
+ // And when `rc_a` is dropped, `rc_examples` is dropped together
+ // println!("rc_examples: {}", rc_examples);
+ // TODO ^ Try uncommenting this line
+}
+```
+
+### See also:
+
+[std::rc][1] and [std::sync::arc][2].
+
+[1]: https://doc.rust-lang.org/std/rc/index.html
+[2]: https://doc.rust-lang.org/std/sync/struct.Arc.html
diff --git a/src/doc/rust-by-example/src/std/result.md b/src/doc/rust-by-example/src/std/result.md
new file mode 100644
index 000000000..b812b9de9
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/result.md
@@ -0,0 +1,74 @@
+# `Result`
+
+We've seen that the `Option` enum can be used as a return value from functions
+that may fail, where `None` can be returned to indicate failure. However,
+sometimes it is important to express *why* an operation failed. To do this we
+have the `Result` enum.
+
+The `Result<T, E>` enum has two variants:
+
+* `Ok(value)` which indicates that the operation succeeded, and wraps the
+ `value` returned by the operation. (`value` has type `T`)
+* `Err(why)`, which indicates that the operation failed, and wraps `why`,
+ which (hopefully) explains the cause of the failure. (`why` has type `E`)
+
+```rust,editable,ignore,mdbook-runnable
+mod checked {
+ // Mathematical "errors" we want to catch
+ #[derive(Debug)]
+ pub enum MathError {
+ DivisionByZero,
+ NonPositiveLogarithm,
+ NegativeSquareRoot,
+ }
+
+ pub type MathResult = Result<f64, MathError>;
+
+ pub fn div(x: f64, y: f64) -> MathResult {
+ if y == 0.0 {
+ // This operation would `fail`, instead let's return the reason of
+ // the failure wrapped in `Err`
+ Err(MathError::DivisionByZero)
+ } else {
+ // This operation is valid, return the result wrapped in `Ok`
+ Ok(x / y)
+ }
+ }
+
+ pub fn sqrt(x: f64) -> MathResult {
+ if x < 0.0 {
+ Err(MathError::NegativeSquareRoot)
+ } else {
+ Ok(x.sqrt())
+ }
+ }
+
+ pub fn ln(x: f64) -> MathResult {
+ if x <= 0.0 {
+ Err(MathError::NonPositiveLogarithm)
+ } else {
+ Ok(x.ln())
+ }
+ }
+}
+
+// `op(x, y)` === `sqrt(ln(x / y))`
+fn op(x: f64, y: f64) -> f64 {
+ // This is a three level match pyramid!
+ match checked::div(x, y) {
+ Err(why) => panic!("{:?}", why),
+ Ok(ratio) => match checked::ln(ratio) {
+ Err(why) => panic!("{:?}", why),
+ Ok(ln) => match checked::sqrt(ln) {
+ Err(why) => panic!("{:?}", why),
+ Ok(sqrt) => sqrt,
+ },
+ },
+ }
+}
+
+fn main() {
+ // Will this fail?
+ println!("{}", op(1.0, 10.0));
+}
+```
diff --git a/src/doc/rust-by-example/src/std/result/question_mark.md b/src/doc/rust-by-example/src/std/result/question_mark.md
new file mode 100644
index 000000000..66dbd2d1e
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/result/question_mark.md
@@ -0,0 +1,78 @@
+# `?`
+
+Chaining results using match can get pretty untidy; luckily, the `?` operator
+can be used to make things pretty again. `?` is used at the end of an expression
+returning a `Result`, and is equivalent to a match expression, where the
+`Err(err)` branch expands to an early `return Err(From::from(err))`, and the `Ok(ok)`
+branch expands to an `ok` expression.
+
+```rust,editable,ignore,mdbook-runnable
+mod checked {
+ #[derive(Debug)]
+ enum MathError {
+ DivisionByZero,
+ NonPositiveLogarithm,
+ NegativeSquareRoot,
+ }
+
+ type MathResult = Result<f64, MathError>;
+
+ fn div(x: f64, y: f64) -> MathResult {
+ if y == 0.0 {
+ Err(MathError::DivisionByZero)
+ } else {
+ Ok(x / y)
+ }
+ }
+
+ fn sqrt(x: f64) -> MathResult {
+ if x < 0.0 {
+ Err(MathError::NegativeSquareRoot)
+ } else {
+ Ok(x.sqrt())
+ }
+ }
+
+ fn ln(x: f64) -> MathResult {
+ if x <= 0.0 {
+ Err(MathError::NonPositiveLogarithm)
+ } else {
+ Ok(x.ln())
+ }
+ }
+
+ // Intermediate function
+ fn op_(x: f64, y: f64) -> MathResult {
+ // if `div` "fails", then `DivisionByZero` will be `return`ed
+ let ratio = div(x, y)?;
+
+ // if `ln` "fails", then `NonPositiveLogarithm` will be `return`ed
+ let ln = ln(ratio)?;
+
+ sqrt(ln)
+ }
+
+ pub fn op(x: f64, y: f64) {
+ match op_(x, y) {
+ Err(why) => panic!("{}", match why {
+ MathError::NonPositiveLogarithm
+ => "logarithm of non-positive number",
+ MathError::DivisionByZero
+ => "division by zero",
+ MathError::NegativeSquareRoot
+ => "square root of negative number",
+ }),
+ Ok(value) => println!("{}", value),
+ }
+ }
+}
+
+fn main() {
+ checked::op(1.0, 10.0);
+}
+```
+
+Be sure to check the [documentation][docs],
+as there are many methods to map/compose `Result`.
+
+[docs]: https://doc.rust-lang.org/std/result/index.html
diff --git a/src/doc/rust-by-example/src/std/str.md b/src/doc/rust-by-example/src/std/str.md
new file mode 100644
index 000000000..26d8fd109
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/str.md
@@ -0,0 +1,166 @@
+# Strings
+
+There are two types of strings in Rust: `String` and `&str`.
+
+A `String` is stored as a vector of bytes (`Vec<u8>`), but guaranteed to
+always be a valid UTF-8 sequence. `String` is heap allocated, growable and not
+null terminated.
+
+`&str` is a slice (`&[u8]`) that always points to a valid UTF-8 sequence, and
+can be used to view into a `String`, just like `&[T]` is a view into `Vec<T>`.
+
+```rust,editable
+fn main() {
+ // (all the type annotations are superfluous)
+ // A reference to a string allocated in read only memory
+ let pangram: &'static str = "the quick brown fox jumps over the lazy dog";
+ println!("Pangram: {}", pangram);
+
+ // Iterate over words in reverse, no new string is allocated
+ println!("Words in reverse");
+ for word in pangram.split_whitespace().rev() {
+ println!("> {}", word);
+ }
+
+ // Copy chars into a vector, sort and remove duplicates
+ let mut chars: Vec<char> = pangram.chars().collect();
+ chars.sort();
+ chars.dedup();
+
+ // Create an empty and growable `String`
+ let mut string = String::new();
+ for c in chars {
+ // Insert a char at the end of string
+ string.push(c);
+ // Insert a string at the end of string
+ string.push_str(", ");
+ }
+
+ // The trimmed string is a slice to the original string, hence no new
+ // allocation is performed
+ let chars_to_trim: &[char] = &[' ', ','];
+ let trimmed_str: &str = string.trim_matches(chars_to_trim);
+ println!("Used characters: {}", trimmed_str);
+
+ // Heap allocate a string
+ let alice = String::from("I like dogs");
+ // Allocate new memory and store the modified string there
+ let bob: String = alice.replace("dog", "cat");
+
+ println!("Alice says: {}", alice);
+ println!("Bob says: {}", bob);
+}
+```
+
+More `str`/`String` methods can be found under the
+[std::str][str] and
+[std::string][string]
+modules
+
+## Literals and escapes
+
+There are multiple ways to write string literals with special characters in them.
+All result in a similar `&str` so it's best to use the form that is the most
+convenient to write. Similarly there are multiple ways to write byte string literals,
+which all result in `&[u8; N]`.
+
+Generally special characters are escaped with a backslash character: `\`.
+This way you can add any character to your string, even unprintable ones
+and ones that you don't know how to type. If you want a literal backslash,
+escape it with another one: `\\`
+
+String or character literal delimiters occuring within a literal must be escaped: `"\""`, `'\''`.
+
+```rust,editable
+fn main() {
+ // You can use escapes to write bytes by their hexadecimal values...
+ let byte_escape = "I'm writing \x52\x75\x73\x74!";
+ println!("What are you doing\x3F (\\x3F means ?) {}", byte_escape);
+
+ // ...or Unicode code points.
+ let unicode_codepoint = "\u{211D}";
+ let character_name = "\"DOUBLE-STRUCK CAPITAL R\"";
+
+ println!("Unicode character {} (U+211D) is called {}",
+ unicode_codepoint, character_name );
+
+
+ let long_string = "String literals
+ can span multiple lines.
+ The linebreak and indentation here ->\
+ <- can be escaped too!";
+ println!("{}", long_string);
+}
+```
+
+Sometimes there are just too many characters that need to be escaped or it's just
+much more convenient to write a string out as-is. This is where raw string literals come into play.
+
+```rust, editable
+fn main() {
+ let raw_str = r"Escapes don't work here: \x3F \u{211D}";
+ println!("{}", raw_str);
+
+ // If you need quotes in a raw string, add a pair of #s
+ let quotes = r#"And then I said: "There is no escape!""#;
+ println!("{}", quotes);
+
+ // If you need "# in your string, just use more #s in the delimiter.
+ // You can use up to 65535 #s.
+ let longer_delimiter = r###"A string with "# in it. And even "##!"###;
+ println!("{}", longer_delimiter);
+}
+```
+
+Want a string that's not UTF-8? (Remember, `str` and `String` must be valid UTF-8).
+Or maybe you want an array of bytes that's mostly text? Byte strings to the rescue!
+
+```rust, editable
+use std::str;
+
+fn main() {
+ // Note that this is not actually a `&str`
+ let bytestring: &[u8; 21] = b"this is a byte string";
+
+ // Byte arrays don't have the `Display` trait, so printing them is a bit limited
+ println!("A byte string: {:?}", bytestring);
+
+ // Byte strings can have byte escapes...
+ let escaped = b"\x52\x75\x73\x74 as bytes";
+ // ...but no unicode escapes
+ // let escaped = b"\u{211D} is not allowed";
+ println!("Some escaped bytes: {:?}", escaped);
+
+
+ // Raw byte strings work just like raw strings
+ let raw_bytestring = br"\u{211D} is not escaped here";
+ println!("{:?}", raw_bytestring);
+
+ // Converting a byte array to `str` can fail
+ if let Ok(my_str) = str::from_utf8(raw_bytestring) {
+ println!("And the same as text: '{}'", my_str);
+ }
+
+ let _quotes = br#"You can also use "fancier" formatting, \
+ like with normal raw strings"#;
+
+ // Byte strings don't have to be UTF-8
+ let shift_jis = b"\x82\xe6\x82\xa8\x82\xb1\x82\xbb"; // "ようこそ" in SHIFT-JIS
+
+ // But then they can't always be converted to `str`
+ match str::from_utf8(shift_jis) {
+ Ok(my_str) => println!("Conversion successful: '{}'", my_str),
+ Err(e) => println!("Conversion failed: {:?}", e),
+ };
+}
+```
+
+For conversions between character encodings check out the [encoding][encoding-crate] crate.
+
+A more detailed listing of the ways to write string literals and escape characters
+is given in the ['Tokens' chapter][tokens] of the Rust Reference.
+
+[str]: https://doc.rust-lang.org/std/str/
+[string]: https://doc.rust-lang.org/std/string/
+[tokens]: https://doc.rust-lang.org/reference/tokens.html
+[encoding-crate]: https://crates.io/crates/encoding
diff --git a/src/doc/rust-by-example/src/std/vec.md b/src/doc/rust-by-example/src/std/vec.md
new file mode 100644
index 000000000..f5cb1cae0
--- /dev/null
+++ b/src/doc/rust-by-example/src/std/vec.md
@@ -0,0 +1,70 @@
+# Vectors
+
+Vectors are re-sizable arrays. Like slices, their size is not known at compile
+time, but they can grow or shrink at any time. A vector is represented using
+3 parameters:
+- pointer to the data
+- length
+- capacity
+
+The capacity indicates how much memory is reserved for the vector. The vector
+can grow as long as the length is smaller than the capacity. When this threshold
+needs to be surpassed, the vector is reallocated with a larger capacity.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ // Iterators can be collected into vectors
+ let collected_iterator: Vec<i32> = (0..10).collect();
+ println!("Collected (0..10) into: {:?}", collected_iterator);
+
+ // The `vec!` macro can be used to initialize a vector
+ let mut xs = vec![1i32, 2, 3];
+ println!("Initial vector: {:?}", xs);
+
+ // Insert new element at the end of the vector
+ println!("Push 4 into the vector");
+ xs.push(4);
+ println!("Vector: {:?}", xs);
+
+ // Error! Immutable vectors can't grow
+ collected_iterator.push(0);
+ // FIXME ^ Comment out this line
+
+ // The `len` method yields the number of elements currently stored in a vector
+ println!("Vector length: {}", xs.len());
+
+ // Indexing is done using the square brackets (indexing starts at 0)
+ println!("Second element: {}", xs[1]);
+
+ // `pop` removes the last element from the vector and returns it
+ println!("Pop last element: {:?}", xs.pop());
+
+ // Out of bounds indexing yields a panic
+ println!("Fourth element: {}", xs[3]);
+ // FIXME ^ Comment out this line
+
+ // `Vector`s can be easily iterated over
+ println!("Contents of xs:");
+ for x in xs.iter() {
+ println!("> {}", x);
+ }
+
+ // A `Vector` can also be iterated over while the iteration
+ // count is enumerated in a separate variable (`i`)
+ for (i, x) in xs.iter().enumerate() {
+ println!("In position {} we have value {}", i, x);
+ }
+
+ // Thanks to `iter_mut`, mutable `Vector`s can also be iterated
+ // over in a way that allows modifying each value
+ for x in xs.iter_mut() {
+ *x *= 3;
+ }
+ println!("Updated vector: {:?}", xs);
+}
+```
+
+More `Vec` methods can be found under the
+[std::vec][vec] module
+
+[vec]: https://doc.rust-lang.org/std/vec/
diff --git a/src/doc/rust-by-example/src/std_misc.md b/src/doc/rust-by-example/src/std_misc.md
new file mode 100644
index 000000000..ac9c57864
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc.md
@@ -0,0 +1,17 @@
+# Std misc
+
+Many other types are provided by the std library to support
+things such as:
+
+* Threads
+* Channels
+* File I/O
+
+These expand beyond what the [primitives] provide.
+
+### See also:
+
+[primitives] and [the std library][std]
+
+[primitives]: primitives.md
+[std]: https://doc.rust-lang.org/std/
diff --git a/src/doc/rust-by-example/src/std_misc/arg.md b/src/doc/rust-by-example/src/std_misc/arg.md
new file mode 100644
index 000000000..b5dd89ce6
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/arg.md
@@ -0,0 +1,37 @@
+# Program arguments
+
+## Standard Library
+
+The command line arguments can be accessed using `std::env::args`, which
+returns an iterator that yields a `String` for each argument:
+
+```rust,editable
+use std::env;
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ // The first argument is the path that was used to call the program.
+ println!("My path is {}.", args[0]);
+
+ // The rest of the arguments are the passed command line parameters.
+ // Call the program like this:
+ // $ ./args arg1 arg2
+ println!("I got {:?} arguments: {:?}.", args.len() - 1, &args[1..]);
+}
+```
+
+```shell
+$ ./args 1 2 3
+My path is ./args.
+I got 3 arguments: ["1", "2", "3"].
+```
+
+## Crates
+
+Alternatively, there are numerous crates that can provide extra functionality
+when creating command-line applications. The [Rust Cookbook] exhibits best
+practices on how to use one of the more popular command line argument crates,
+`clap`.
+
+[Rust Cookbook]: https://rust-lang-nursery.github.io/rust-cookbook/cli/arguments.html
diff --git a/src/doc/rust-by-example/src/std_misc/arg/matching.md b/src/doc/rust-by-example/src/std_misc/arg/matching.md
new file mode 100644
index 000000000..4cb68eabf
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/arg/matching.md
@@ -0,0 +1,94 @@
+# Argument parsing
+
+Matching can be used to parse simple arguments:
+
+```rust,editable
+use std::env;
+
+fn increase(number: i32) {
+ println!("{}", number + 1);
+}
+
+fn decrease(number: i32) {
+ println!("{}", number - 1);
+}
+
+fn help() {
+ println!("usage:
+match_args <string>
+ Check whether given string is the answer.
+match_args {{increase|decrease}} <integer>
+ Increase or decrease given integer by one.");
+}
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ match args.len() {
+ // no arguments passed
+ 1 => {
+ println!("My name is 'match_args'. Try passing some arguments!");
+ },
+ // one argument passed
+ 2 => {
+ match args[1].parse() {
+ Ok(42) => println!("This is the answer!"),
+ _ => println!("This is not the answer."),
+ }
+ },
+ // one command and one argument passed
+ 3 => {
+ let cmd = &args[1];
+ let num = &args[2];
+ // parse the number
+ let number: i32 = match num.parse() {
+ Ok(n) => {
+ n
+ },
+ Err(_) => {
+ eprintln!("error: second argument not an integer");
+ help();
+ return;
+ },
+ };
+ // parse the command
+ match &cmd[..] {
+ "increase" => increase(number),
+ "decrease" => decrease(number),
+ _ => {
+ eprintln!("error: invalid command");
+ help();
+ },
+ }
+ },
+ // all the other cases
+ _ => {
+ // show a help message
+ help();
+ }
+ }
+}
+```
+
+```shell
+$ ./match_args Rust
+This is not the answer.
+$ ./match_args 42
+This is the answer!
+$ ./match_args do something
+error: second argument not an integer
+usage:
+match_args <string>
+ Check whether given string is the answer.
+match_args {increase|decrease} <integer>
+ Increase or decrease given integer by one.
+$ ./match_args do 42
+error: invalid command
+usage:
+match_args <string>
+ Check whether given string is the answer.
+match_args {increase|decrease} <integer>
+ Increase or decrease given integer by one.
+$ ./match_args increase 42
+43
+```
diff --git a/src/doc/rust-by-example/src/std_misc/channels.md b/src/doc/rust-by-example/src/std_misc/channels.md
new file mode 100644
index 000000000..8c4d45165
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/channels.md
@@ -0,0 +1,55 @@
+# Channels
+
+Rust provides asynchronous `channels` for communication between threads. Channels
+allow a unidirectional flow of information between two end-points: the
+`Sender` and the `Receiver`.
+
+```rust,editable
+use std::sync::mpsc::{Sender, Receiver};
+use std::sync::mpsc;
+use std::thread;
+
+static NTHREADS: i32 = 3;
+
+fn main() {
+ // Channels have two endpoints: the `Sender<T>` and the `Receiver<T>`,
+ // where `T` is the type of the message to be transferred
+ // (type annotation is superfluous)
+ let (tx, rx): (Sender<i32>, Receiver<i32>) = mpsc::channel();
+ let mut children = Vec::new();
+
+ for id in 0..NTHREADS {
+ // The sender endpoint can be copied
+ let thread_tx = tx.clone();
+
+ // Each thread will send its id via the channel
+ let child = thread::spawn(move || {
+ // The thread takes ownership over `thread_tx`
+ // Each thread queues a message in the channel
+ thread_tx.send(id).unwrap();
+
+ // Sending is a non-blocking operation, the thread will continue
+ // immediately after sending its message
+ println!("thread {} finished", id);
+ });
+
+ children.push(child);
+ }
+
+ // Here, all the messages are collected
+ let mut ids = Vec::with_capacity(NTHREADS as usize);
+ for _ in 0..NTHREADS {
+ // The `recv` method picks a message from the channel
+ // `recv` will block the current thread if there are no messages available
+ ids.push(rx.recv());
+ }
+
+ // Wait for the threads to complete any remaining work
+ for child in children {
+ child.join().expect("oops! the child thread panicked");
+ }
+
+ // Show the order in which the messages were sent
+ println!("{:?}", ids);
+}
+```
diff --git a/src/doc/rust-by-example/src/std_misc/ffi.md b/src/doc/rust-by-example/src/std_misc/ffi.md
new file mode 100644
index 000000000..71977e66f
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/ffi.md
@@ -0,0 +1,56 @@
+# Foreign Function Interface
+
+Rust provides a Foreign Function Interface (FFI) to C libraries. Foreign
+functions must be declared inside an `extern` block annotated with a `#[link]`
+attribute containing the name of the foreign library.
+
+```rust,ignore
+use std::fmt;
+
+// this extern block links to the libm library
+#[link(name = "m")]
+extern {
+ // this is a foreign function
+ // that computes the square root of a single precision complex number
+ fn csqrtf(z: Complex) -> Complex;
+
+ fn ccosf(z: Complex) -> Complex;
+}
+
+// Since calling foreign functions is considered unsafe,
+// it's common to write safe wrappers around them.
+fn cos(z: Complex) -> Complex {
+ unsafe { ccosf(z) }
+}
+
+fn main() {
+ // z = -1 + 0i
+ let z = Complex { re: -1., im: 0. };
+
+ // calling a foreign function is an unsafe operation
+ let z_sqrt = unsafe { csqrtf(z) };
+
+ println!("the square root of {:?} is {:?}", z, z_sqrt);
+
+ // calling safe API wrapped around unsafe operation
+ println!("cos({:?}) = {:?}", z, cos(z));
+}
+
+// Minimal implementation of single precision complex numbers
+#[repr(C)]
+#[derive(Clone, Copy)]
+struct Complex {
+ re: f32,
+ im: f32,
+}
+
+impl fmt::Debug for Complex {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ if self.im < 0. {
+ write!(f, "{}-{}i", self.re, -self.im)
+ } else {
+ write!(f, "{}+{}i", self.re, self.im)
+ }
+ }
+}
+```
diff --git a/src/doc/rust-by-example/src/std_misc/file.md b/src/doc/rust-by-example/src/std_misc/file.md
new file mode 100644
index 000000000..60e28cfb3
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/file.md
@@ -0,0 +1,11 @@
+# File I/O
+
+The `File` struct represents a file that has been opened (it wraps a file
+descriptor), and gives read and/or write access to the underlying file.
+
+Since many things can go wrong when doing file I/O, all the `File` methods
+return the `io::Result<T>` type, which is an alias for `Result<T, io::Error>`.
+
+This makes the failure of all I/O operations *explicit*. Thanks to this, the
+programmer can see all the failure paths, and is encouraged to handle them in
+a proactive manner. \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/std_misc/file/create.md b/src/doc/rust-by-example/src/std_misc/file/create.md
new file mode 100644
index 000000000..709213c9d
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/file/create.md
@@ -0,0 +1,58 @@
+# `create`
+
+The `create` function opens a file in write-only mode. If the file
+already existed, the old content is destroyed. Otherwise, a new file is
+created.
+
+```rust,ignore
+static LOREM_IPSUM: &str =
+ "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
+cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
+proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+";
+
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::Path;
+
+fn main() {
+ let path = Path::new("lorem_ipsum.txt");
+ let display = path.display();
+
+ // Open a file in write-only mode, returns `io::Result<File>`
+ let mut file = match File::create(&path) {
+ Err(why) => panic!("couldn't create {}: {}", display, why),
+ Ok(file) => file,
+ };
+
+ // Write the `LOREM_IPSUM` string to `file`, returns `io::Result<()>`
+ match file.write_all(LOREM_IPSUM.as_bytes()) {
+ Err(why) => panic!("couldn't write to {}: {}", display, why),
+ Ok(_) => println!("successfully wrote to {}", display),
+ }
+}
+```
+
+Here's the expected successful output:
+
+```shell
+$ rustc create.rs && ./create
+successfully wrote to lorem_ipsum.txt
+$ cat lorem_ipsum.txt
+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
+quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
+consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
+cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
+proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+```
+
+(As in the previous example, you are encouraged to test this example under
+failure conditions.)
+
+There is [`OpenOptions`] struct that can be used to configure how a file is opened.
+
+[`OpenOptions`]: https://doc.rust-lang.org/std/fs/struct.OpenOptions.html
diff --git a/src/doc/rust-by-example/src/std_misc/file/open.md b/src/doc/rust-by-example/src/std_misc/file/open.md
new file mode 100644
index 000000000..77a5470fa
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/file/open.md
@@ -0,0 +1,46 @@
+# `open`
+
+The `open` function can be used to open a file in read-only mode.
+
+A `File` owns a resource, the file descriptor and takes care of closing the
+file when it is `drop`ed.
+
+```rust,editable,ignore
+use std::fs::File;
+use std::io::prelude::*;
+use std::path::Path;
+
+fn main() {
+ // Create a path to the desired file
+ let path = Path::new("hello.txt");
+ let display = path.display();
+
+ // Open the path in read-only mode, returns `io::Result<File>`
+ let mut file = match File::open(&path) {
+ Err(why) => panic!("couldn't open {}: {}", display, why),
+ Ok(file) => file,
+ };
+
+ // Read the file contents into a string, returns `io::Result<usize>`
+ let mut s = String::new();
+ match file.read_to_string(&mut s) {
+ Err(why) => panic!("couldn't read {}: {}", display, why),
+ Ok(_) => print!("{} contains:\n{}", display, s),
+ }
+
+ // `file` goes out of scope, and the "hello.txt" file gets closed
+}
+```
+
+Here's the expected successful output:
+
+```shell
+$ echo "Hello World!" > hello.txt
+$ rustc open.rs && ./open
+hello.txt contains:
+Hello World!
+```
+
+(You are encouraged to test the previous example under different failure
+conditions: `hello.txt` doesn't exist, or `hello.txt` is not readable,
+etc.)
diff --git a/src/doc/rust-by-example/src/std_misc/file/read_lines.md b/src/doc/rust-by-example/src/std_misc/file/read_lines.md
new file mode 100644
index 000000000..6792b1706
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/file/read_lines.md
@@ -0,0 +1,44 @@
+# `read_lines`
+
+The method `lines()` returns an iterator over the lines
+of a file.
+
+`File::open` expects a generic, `AsRef<Path>`. That's what
+`read_lines()` expects as input.
+
+```rust,no_run
+use std::fs::File;
+use std::io::{self, BufRead};
+use std::path::Path;
+
+fn main() {
+ // File hosts must exist in current path before this produces output
+ if let Ok(lines) = read_lines("./hosts") {
+ // Consumes the iterator, returns an (Optional) String
+ for line in lines {
+ if let Ok(ip) = line {
+ println!("{}", ip);
+ }
+ }
+ }
+}
+
+// The output is wrapped in a Result to allow matching on errors
+// Returns an Iterator to the Reader of the lines of the file.
+fn read_lines<P>(filename: P) -> io::Result<io::Lines<io::BufReader<File>>>
+where P: AsRef<Path>, {
+ let file = File::open(filename)?;
+ Ok(io::BufReader::new(file).lines())
+}
+```
+
+Running this program simply prints the lines individually.
+```shell
+$ echo -e "127.0.0.1\n192.168.0.1\n" > hosts
+$ rustc read_lines.rs && ./read_lines
+127.0.0.1
+192.168.0.1
+```
+
+This process is more efficient than creating a `String` in memory
+especially working with larger files. \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/std_misc/fs.md b/src/doc/rust-by-example/src/std_misc/fs.md
new file mode 100644
index 000000000..48e4d4d66
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/fs.md
@@ -0,0 +1,146 @@
+# Filesystem Operations
+
+The `std::fs` module contains several functions that deal with the filesystem.
+
+```rust,ignore
+use std::fs;
+use std::fs::{File, OpenOptions};
+use std::io;
+use std::io::prelude::*;
+use std::os::unix;
+use std::path::Path;
+
+// A simple implementation of `% cat path`
+fn cat(path: &Path) -> io::Result<String> {
+ let mut f = File::open(path)?;
+ let mut s = String::new();
+ match f.read_to_string(&mut s) {
+ Ok(_) => Ok(s),
+ Err(e) => Err(e),
+ }
+}
+
+// A simple implementation of `% echo s > path`
+fn echo(s: &str, path: &Path) -> io::Result<()> {
+ let mut f = File::create(path)?;
+
+ f.write_all(s.as_bytes())
+}
+
+// A simple implementation of `% touch path` (ignores existing files)
+fn touch(path: &Path) -> io::Result<()> {
+ match OpenOptions::new().create(true).write(true).open(path) {
+ Ok(_) => Ok(()),
+ Err(e) => Err(e),
+ }
+}
+
+fn main() {
+ println!("`mkdir a`");
+ // Create a directory, returns `io::Result<()>`
+ match fs::create_dir("a") {
+ Err(why) => println!("! {:?}", why.kind()),
+ Ok(_) => {},
+ }
+
+ println!("`echo hello > a/b.txt`");
+ // The previous match can be simplified using the `unwrap_or_else` method
+ echo("hello", &Path::new("a/b.txt")).unwrap_or_else(|why| {
+ println!("! {:?}", why.kind());
+ });
+
+ println!("`mkdir -p a/c/d`");
+ // Recursively create a directory, returns `io::Result<()>`
+ fs::create_dir_all("a/c/d").unwrap_or_else(|why| {
+ println!("! {:?}", why.kind());
+ });
+
+ println!("`touch a/c/e.txt`");
+ touch(&Path::new("a/c/e.txt")).unwrap_or_else(|why| {
+ println!("! {:?}", why.kind());
+ });
+
+ println!("`ln -s ../b.txt a/c/b.txt`");
+ // Create a symbolic link, returns `io::Result<()>`
+ if cfg!(target_family = "unix") {
+ unix::fs::symlink("../b.txt", "a/c/b.txt").unwrap_or_else(|why| {
+ println!("! {:?}", why.kind());
+ });
+ }
+
+ println!("`cat a/c/b.txt`");
+ match cat(&Path::new("a/c/b.txt")) {
+ Err(why) => println!("! {:?}", why.kind()),
+ Ok(s) => println!("> {}", s),
+ }
+
+ println!("`ls a`");
+ // Read the contents of a directory, returns `io::Result<Vec<Path>>`
+ match fs::read_dir("a") {
+ Err(why) => println!("! {:?}", why.kind()),
+ Ok(paths) => for path in paths {
+ println!("> {:?}", path.unwrap().path());
+ },
+ }
+
+ println!("`rm a/c/e.txt`");
+ // Remove a file, returns `io::Result<()>`
+ fs::remove_file("a/c/e.txt").unwrap_or_else(|why| {
+ println!("! {:?}", why.kind());
+ });
+
+ println!("`rmdir a/c/d`");
+ // Remove an empty directory, returns `io::Result<()>`
+ fs::remove_dir("a/c/d").unwrap_or_else(|why| {
+ println!("! {:?}", why.kind());
+ });
+}
+
+```
+
+Here's the expected successful output:
+
+```shell
+$ rustc fs.rs && ./fs
+`mkdir a`
+`echo hello > a/b.txt`
+`mkdir -p a/c/d`
+`touch a/c/e.txt`
+`ln -s ../b.txt a/c/b.txt`
+`cat a/c/b.txt`
+> hello
+`ls a`
+> "a/b.txt"
+> "a/c"
+`rm a/c/e.txt`
+`rmdir a/c/d`
+```
+
+And the final state of the `a` directory is:
+
+```shell
+$ tree a
+a
+|-- b.txt
+`-- c
+ `-- b.txt -> ../b.txt
+
+1 directory, 2 files
+```
+
+An alternative way to define the function `cat` is with `?` notation:
+
+```rust,ignore
+fn cat(path: &Path) -> io::Result<String> {
+ let mut f = File::open(path)?;
+ let mut s = String::new();
+ f.read_to_string(&mut s)?;
+ Ok(s)
+}
+```
+
+### See also:
+
+[`cfg!`][cfg]
+
+[cfg]: ../attribute/cfg.md
diff --git a/src/doc/rust-by-example/src/std_misc/path.md b/src/doc/rust-by-example/src/std_misc/path.md
new file mode 100644
index 000000000..48d85c144
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/path.md
@@ -0,0 +1,57 @@
+# Path
+
+The `Path` struct represents file paths in the underlying filesystem. There are
+two flavors of `Path`: `posix::Path`, for UNIX-like systems, and
+`windows::Path`, for Windows. The prelude exports the appropriate
+platform-specific `Path` variant.
+
+A `Path` can be created from an `OsStr`, and provides several methods to get
+information from the file/directory the path points to.
+
+A `Path` is immutable. The owned version of `Path` is `PathBuf`. The relation
+between `Path` and `PathBuf` is similar to that of `str` and `String`:
+a `PathBuf` can be mutated in-place, and can be dereferenced to a `Path`.
+
+Note that a `Path` is *not* internally represented as an UTF-8 string, but
+instead is stored as a vector of bytes (`Vec<u8>`). Therefore, converting a
+`Path` to a `&str` is *not* free and may fail (an `Option` is returned).
+
+```rust,editable
+use std::path::Path;
+
+fn main() {
+ // Create a `Path` from an `&'static str`
+ let path = Path::new(".");
+
+ // The `display` method returns a `Display`able structure
+ let _display = path.display();
+
+ // `join` merges a path with a byte container using the OS specific
+ // separator, and returns a `PathBuf`
+ let mut new_path = path.join("a").join("b");
+
+ // `push` extends the `PathBuf` with a `&Path`
+ new_path.push("c");
+ new_path.push("myfile.tar.gz");
+
+ // `set_file_name` updates the file name of the `PathBuf`
+ new_path.set_file_name("package.tgz");
+
+ // Convert the `PathBuf` into a string slice
+ match new_path.to_str() {
+ None => panic!("new path is not a valid UTF-8 sequence"),
+ Some(s) => println!("new path is {}", s),
+ }
+}
+
+```
+
+Be sure to check at other `Path` methods (`posix::Path` or `windows::Path`) and
+the `Metadata` struct.
+
+### See also:
+
+[OsStr][1] and [Metadata][2].
+
+[1]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html
+[2]: https://doc.rust-lang.org/std/fs/struct.Metadata.html
diff --git a/src/doc/rust-by-example/src/std_misc/process.md b/src/doc/rust-by-example/src/std_misc/process.md
new file mode 100644
index 000000000..9c9423090
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/process.md
@@ -0,0 +1,29 @@
+# Child processes
+
+The `process::Output` struct represents the output of a finished child process,
+and the `process::Command` struct is a process builder.
+
+```rust,editable,ignore
+use std::process::Command;
+
+fn main() {
+ let output = Command::new("rustc")
+ .arg("--version")
+ .output().unwrap_or_else(|e| {
+ panic!("failed to execute process: {}", e)
+ });
+
+ if output.status.success() {
+ let s = String::from_utf8_lossy(&output.stdout);
+
+ print!("rustc succeeded and stdout was:\n{}", s);
+ } else {
+ let s = String::from_utf8_lossy(&output.stderr);
+
+ print!("rustc failed and stderr was:\n{}", s);
+ }
+}
+```
+
+(You are encouraged to try the previous example with an incorrect flag passed
+to `rustc`)
diff --git a/src/doc/rust-by-example/src/std_misc/process/pipe.md b/src/doc/rust-by-example/src/std_misc/process/pipe.md
new file mode 100644
index 000000000..fb0be0ea1
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/process/pipe.md
@@ -0,0 +1,46 @@
+# Pipes
+
+The `std::Child` struct represents a running child process, and exposes the
+`stdin`, `stdout` and `stderr` handles for interaction with the underlying
+process via pipes.
+
+```rust,ignore
+use std::io::prelude::*;
+use std::process::{Command, Stdio};
+
+static PANGRAM: &'static str =
+"the quick brown fox jumped over the lazy dog\n";
+
+fn main() {
+ // Spawn the `wc` command
+ let process = match Command::new("wc")
+ .stdin(Stdio::piped())
+ .stdout(Stdio::piped())
+ .spawn() {
+ Err(why) => panic!("couldn't spawn wc: {}", why),
+ Ok(process) => process,
+ };
+
+ // Write a string to the `stdin` of `wc`.
+ //
+ // `stdin` has type `Option<ChildStdin>`, but since we know this instance
+ // must have one, we can directly `unwrap` it.
+ match process.stdin.unwrap().write_all(PANGRAM.as_bytes()) {
+ Err(why) => panic!("couldn't write to wc stdin: {}", why),
+ Ok(_) => println!("sent pangram to wc"),
+ }
+
+ // Because `stdin` does not live after the above calls, it is `drop`ed,
+ // and the pipe is closed.
+ //
+ // This is very important, otherwise `wc` wouldn't start processing the
+ // input we just sent.
+
+ // The `stdout` field also has type `Option<ChildStdout>` so must be unwrapped.
+ let mut s = String::new();
+ match process.stdout.unwrap().read_to_string(&mut s) {
+ Err(why) => panic!("couldn't read wc stdout: {}", why),
+ Ok(_) => print!("wc responded with:\n{}", s),
+ }
+}
+```
diff --git a/src/doc/rust-by-example/src/std_misc/process/wait.md b/src/doc/rust-by-example/src/std_misc/process/wait.md
new file mode 100644
index 000000000..ea7dd54a8
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/process/wait.md
@@ -0,0 +1,21 @@
+# Wait
+
+If you'd like to wait for a `process::Child` to finish, you must call
+`Child::wait`, which will return a `process::ExitStatus`.
+
+```rust,ignore
+use std::process::Command;
+
+fn main() {
+ let mut child = Command::new("sleep").arg("5").spawn().unwrap();
+ let _result = child.wait().unwrap();
+
+ println!("reached end of main");
+}
+```
+
+```bash
+$ rustc wait.rs && ./wait
+# `wait` keeps running for 5 seconds until the `sleep 5` command finishes
+reached end of main
+```
diff --git a/src/doc/rust-by-example/src/std_misc/threads.md b/src/doc/rust-by-example/src/std_misc/threads.md
new file mode 100644
index 000000000..2f37d1c4a
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/threads.md
@@ -0,0 +1,30 @@
+# Threads
+
+Rust provides a mechanism for spawning native OS threads via the `spawn`
+function, the argument of this function is a moving closure.
+
+```rust,editable
+use std::thread;
+
+const NTHREADS: u32 = 10;
+
+// This is the `main` thread
+fn main() {
+ // Make a vector to hold the children which are spawned.
+ let mut children = vec![];
+
+ for i in 0..NTHREADS {
+ // Spin up another thread
+ children.push(thread::spawn(move || {
+ println!("this is thread number {}", i);
+ }));
+ }
+
+ for child in children {
+ // Wait for the thread to finish. Returns a result.
+ let _ = child.join();
+ }
+}
+```
+
+These threads will be scheduled by the OS.
diff --git a/src/doc/rust-by-example/src/std_misc/threads/testcase_mapreduce.md b/src/doc/rust-by-example/src/std_misc/threads/testcase_mapreduce.md
new file mode 100644
index 000000000..28075164f
--- /dev/null
+++ b/src/doc/rust-by-example/src/std_misc/threads/testcase_mapreduce.md
@@ -0,0 +1,144 @@
+# Testcase: map-reduce
+
+Rust makes it very easy to parallelise data processing, without many of the headaches traditionally associated with such an attempt.
+
+The standard library provides great threading primitives out of the box.
+These, combined with Rust's concept of Ownership and aliasing rules, automatically prevent
+data races.
+
+The aliasing rules (one writable reference XOR many readable references) automatically prevent
+you from manipulating state that is visible to other threads. (Where synchronisation is needed,
+there are synchronisation
+primitives like `Mutex`es or `Channel`s.)
+
+In this example, we will calculate the sum of all digits in a block of numbers.
+We will do this by parcelling out chunks of the block into different threads. Each thread will sum
+its tiny block of digits, and subsequently we will sum the intermediate sums produced by each
+thread.
+
+Note that, although we're passing references across thread boundaries, Rust understands that we're
+only passing read-only references, and that thus no unsafety or data races can occur. Because
+we're `move`-ing the data segments into the thread, Rust will also ensure the data is kept alive
+until the threads exit, so no dangling pointers occur.
+
+```rust,editable
+use std::thread;
+
+// This is the `main` thread
+fn main() {
+
+ // This is our data to process.
+ // We will calculate the sum of all digits via a threaded map-reduce algorithm.
+ // Each whitespace separated chunk will be handled in a different thread.
+ //
+ // TODO: see what happens to the output if you insert spaces!
+ let data = "86967897737416471853297327050364959
+11861322575564723963297542624962850
+70856234701860851907960690014725639
+38397966707106094172783238747669219
+52380795257888236525459303330302837
+58495327135744041048897885734297812
+69920216438980873548808413720956532
+16278424637452589860345374828574668";
+
+ // Make a vector to hold the child-threads which we will spawn.
+ let mut children = vec![];
+
+ /*************************************************************************
+ * "Map" phase
+ *
+ * Divide our data into segments, and apply initial processing
+ ************************************************************************/
+
+ // split our data into segments for individual calculation
+ // each chunk will be a reference (&str) into the actual data
+ let chunked_data = data.split_whitespace();
+
+ // Iterate over the data segments.
+ // .enumerate() adds the current loop index to whatever is iterated
+ // the resulting tuple "(index, element)" is then immediately
+ // "destructured" into two variables, "i" and "data_segment" with a
+ // "destructuring assignment"
+ for (i, data_segment) in chunked_data.enumerate() {
+ println!("data segment {} is \"{}\"", i, data_segment);
+
+ // Process each data segment in a separate thread
+ //
+ // spawn() returns a handle to the new thread,
+ // which we MUST keep to access the returned value
+ //
+ // 'move || -> u32' is syntax for a closure that:
+ // * takes no arguments ('||')
+ // * takes ownership of its captured variables ('move') and
+ // * returns an unsigned 32-bit integer ('-> u32')
+ //
+ // Rust is smart enough to infer the '-> u32' from
+ // the closure itself so we could have left that out.
+ //
+ // TODO: try removing the 'move' and see what happens
+ children.push(thread::spawn(move || -> u32 {
+ // Calculate the intermediate sum of this segment:
+ let result = data_segment
+ // iterate over the characters of our segment..
+ .chars()
+ // .. convert text-characters to their number value..
+ .map(|c| c.to_digit(10).expect("should be a digit"))
+ // .. and sum the resulting iterator of numbers
+ .sum();
+
+ // println! locks stdout, so no text-interleaving occurs
+ println!("processed segment {}, result={}", i, result);
+
+ // "return" not needed, because Rust is an "expression language", the
+ // last evaluated expression in each block is automatically its value.
+ result
+
+ }));
+ }
+
+
+ /*************************************************************************
+ * "Reduce" phase
+ *
+ * Collect our intermediate results, and combine them into a final result
+ ************************************************************************/
+
+ // combine each thread's intermediate results into a single final sum.
+ //
+ // we use the "turbofish" ::<> to provide sum() with a type hint.
+ //
+ // TODO: try without the turbofish, by instead explicitly
+ // specifying the type of final_result
+ let final_result = children.into_iter().map(|c| c.join().unwrap()).sum::<u32>();
+
+ println!("Final sum result: {}", final_result);
+}
+
+
+```
+
+### Assignments
+It is not wise to let our number of threads depend on user inputted data.
+What if the user decides to insert a lot of spaces? Do we _really_ want to spawn 2,000 threads?
+Modify the program so that the data is always chunked into a limited number of chunks,
+defined by a static constant at the beginning of the program.
+
+### See also:
+* [Threads][thread]
+* [vectors][vectors] and [iterators][iterators]
+* [closures][closures], [move][move] semantics and [`move` closures][move_closure]
+* [destructuring][destructuring] assignments
+* [turbofish notation][turbofish] to help type inference
+* [unwrap vs. expect][unwrap]
+* [enumerate][enumerate]
+
+[thread]: ../threads.md
+[vectors]: ../../std/vec.md
+[iterators]: ../../trait/iter.md
+[destructuring]: https://doc.rust-lang.org/book/ch18-03-pattern-syntax.html#destructuring-to-break-apart-values
+[closures]: ../../fn/closures.md
+[move]: ../../scope/move.md
+[move_closure]: https://doc.rust-lang.org/book/ch13-01-closures.html#closures-can-capture-their-environment
+[turbofish]: https://doc.rust-lang.org/book/appendix-02-operators.html?highlight=turbofish
+[unwrap]: ../../error/option_unwrap.md
+[enumerate]: https://doc.rust-lang.org/book/loops.html#enumerate
diff --git a/src/doc/rust-by-example/src/testing.md b/src/doc/rust-by-example/src/testing.md
new file mode 100644
index 000000000..6de0ca63f
--- /dev/null
+++ b/src/doc/rust-by-example/src/testing.md
@@ -0,0 +1,26 @@
+# Testing
+
+Rust is a programming language that cares a lot about correctness and it
+includes support for writing software tests within the language itself.
+
+Testing comes in three styles:
+
+* [Unit][unit] testing.
+* [Doc][doc] testing.
+* [Integration][integration] testing.
+
+Also Rust has support for specifying additional dependencies for tests:
+
+* [Dev-dependencies][dev-dependencies]
+
+## See Also
+
+* [The Book][doc-testing] chapter on testing
+* [API Guidelines][doc-nursery] on doc-testing
+
+[unit]: testing/unit_testing.md
+[doc]: testing/doc_testing.md
+[integration]: testing/integration_testing.md
+[dev-dependencies]: testing/dev_dependencies.md
+[doc-testing]: https://doc.rust-lang.org/book/ch11-00-testing.html
+[doc-nursery]: https://rust-lang-nursery.github.io/api-guidelines/documentation.html
diff --git a/src/doc/rust-by-example/src/testing/dev_dependencies.md b/src/doc/rust-by-example/src/testing/dev_dependencies.md
new file mode 100644
index 000000000..0899845ee
--- /dev/null
+++ b/src/doc/rust-by-example/src/testing/dev_dependencies.md
@@ -0,0 +1,39 @@
+# Development dependencies
+
+Sometimes there is a need to have dependencies for tests (or examples,
+or benchmarks) only. Such dependencies are added to `Cargo.toml` in the
+`[dev-dependencies]` section. These dependencies are not propagated to other
+packages which depend on this package.
+
+One such example is [`pretty_assertions`](https://docs.rs/pretty_assertions/1.0.0/pretty_assertions/index.html), which extends standard `assert_eq!` and `assert_ne!` macros, to provide colorful diff.
+File `Cargo.toml`:
+
+```toml
+# standard crate data is left out
+[dev-dependencies]
+pretty_assertions = "1"
+```
+
+File `src/lib.rs`:
+
+```rust,ignore
+pub fn add(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use pretty_assertions::assert_eq; // crate for test-only use. Cannot be used in non-test code.
+
+ #[test]
+ fn test_add() {
+ assert_eq!(add(2, 3), 5);
+ }
+}
+```
+
+## See Also
+[Cargo][cargo] docs on specifying dependencies.
+
+[cargo]: http://doc.crates.io/specifying-dependencies.html
diff --git a/src/doc/rust-by-example/src/testing/doc_testing.md b/src/doc/rust-by-example/src/testing/doc_testing.md
new file mode 100644
index 000000000..2fac440f9
--- /dev/null
+++ b/src/doc/rust-by-example/src/testing/doc_testing.md
@@ -0,0 +1,111 @@
+# Documentation testing
+
+The primary way of documenting a Rust project is through annotating the source
+code. Documentation comments are written in [markdown] and support code
+blocks in them. Rust takes care about correctness, so these code blocks are
+compiled and used as documentation tests.
+
+```rust,ignore
+/// First line is a short summary describing function.
+///
+/// The next lines present detailed documentation. Code blocks start with
+/// triple backquotes and have implicit `fn main()` inside
+/// and `extern crate <cratename>`. Assume we're testing `doccomments` crate:
+///
+/// ```
+/// let result = doccomments::add(2, 3);
+/// assert_eq!(result, 5);
+/// ```
+pub fn add(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+/// Usually doc comments may include sections "Examples", "Panics" and "Failures".
+///
+/// The next function divides two numbers.
+///
+/// # Examples
+///
+/// ```
+/// let result = doccomments::div(10, 2);
+/// assert_eq!(result, 5);
+/// ```
+///
+/// # Panics
+///
+/// The function panics if the second argument is zero.
+///
+/// ```rust,should_panic
+/// // panics on division by zero
+/// doccomments::div(10, 0);
+/// ```
+pub fn div(a: i32, b: i32) -> i32 {
+ if b == 0 {
+ panic!("Divide-by-zero error");
+ }
+
+ a / b
+}
+```
+
+Code blocks in documentation are automatically tested
+when running the regular `cargo test` command:
+
+```shell
+$ cargo test
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Doc-tests doccomments
+
+running 3 tests
+test src/lib.rs - add (line 7) ... ok
+test src/lib.rs - div (line 21) ... ok
+test src/lib.rs - div (line 31) ... ok
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+## Motivation behind documentation tests
+
+The main purpose of documentation tests is to serve as examples that exercise
+the functionality, which is one of the most important
+[guidelines][question-instead-of-unwrap]. It allows using examples from docs as
+complete code snippets. But using `?` makes compilation fail since `main`
+returns `unit`. The ability to hide some source lines from documentation comes
+to the rescue: one may write `fn try_main() -> Result<(), ErrorType>`, hide it
+and `unwrap` it in hidden `main`. Sounds complicated? Here's an example:
+
+```rust,ignore
+/// Using hidden `try_main` in doc tests.
+///
+/// ```
+/// # // hidden lines start with `#` symbol, but they're still compilable!
+/// # fn try_main() -> Result<(), String> { // line that wraps the body shown in doc
+/// let res = try::try_div(10, 2)?;
+/// # Ok(()) // returning from try_main
+/// # }
+/// # fn main() { // starting main that'll unwrap()
+/// # try_main().unwrap(); // calling try_main and unwrapping
+/// # // so that test will panic in case of error
+/// # }
+/// ```
+pub fn try_div(a: i32, b: i32) -> Result<i32, String> {
+ if b == 0 {
+ Err(String::from("Divide-by-zero"))
+ } else {
+ Ok(a / b)
+ }
+}
+```
+
+## See Also
+
+* [RFC505][RFC505] on documentation style
+* [API Guidelines][doc-nursery] on documentation guidelines
+
+[doc-nursery]: https://rust-lang-nursery.github.io/api-guidelines/documentation.html
+[markdown]: https://daringfireball.net/projects/markdown/
+[RFC505]: https://github.com/rust-lang/rfcs/blob/master/text/0505-api-comment-conventions.md
+[question-instead-of-unwrap]: https://rust-lang-nursery.github.io/api-guidelines/documentation.html#examples-use--not-try-not-unwrap-c-question-mark
diff --git a/src/doc/rust-by-example/src/testing/integration_testing.md b/src/doc/rust-by-example/src/testing/integration_testing.md
new file mode 100644
index 000000000..60406e302
--- /dev/null
+++ b/src/doc/rust-by-example/src/testing/integration_testing.md
@@ -0,0 +1,82 @@
+# Integration testing
+
+[Unit tests][unit] are testing one module in isolation at a time: they're small
+and can test private code. Integration tests are external to your crate and use
+only its public interface in the same way any other code would. Their purpose is
+to test that many parts of your library work correctly together.
+
+Cargo looks for integration tests in `tests` directory next to `src`.
+
+File `src/lib.rs`:
+
+```rust,ignore
+// Define this in a crate called `adder`.
+pub fn add(a: i32, b: i32) -> i32 {
+ a + b
+}
+```
+
+File with test: `tests/integration_test.rs`:
+
+```rust,ignore
+#[test]
+fn test_add() {
+ assert_eq!(adder::add(3, 2), 5);
+}
+```
+
+Running tests with `cargo test` command:
+
+```shell
+$ cargo test
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Running target/debug/deps/integration_test-bcd60824f5fbfe19
+
+running 1 test
+test test_add ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Doc-tests adder
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+Each Rust source file in the `tests` directory is compiled as a separate crate. In
+order to share some code between integration tests we can make a module with public
+functions, importing and using it within tests.
+
+File `tests/common/mod.rs`:
+
+```rust,ignore
+pub fn setup() {
+ // some setup code, like creating required files/directories, starting
+ // servers, etc.
+}
+```
+
+File with test: `tests/integration_test.rs`
+
+```rust,ignore
+// importing common module.
+mod common;
+
+#[test]
+fn test_add() {
+ // using common code.
+ common::setup();
+ assert_eq!(adder::add(3, 2), 5);
+}
+```
+
+Creating the module as `tests/common.rs` also works, but is not recommended
+because the test runner will treat the file as a test crate and try to run tests
+inside it.
+
+[unit]: unit_testing.md
+[mod]: ../mod.md
diff --git a/src/doc/rust-by-example/src/testing/unit_testing.md b/src/doc/rust-by-example/src/testing/unit_testing.md
new file mode 100644
index 000000000..cd8770664
--- /dev/null
+++ b/src/doc/rust-by-example/src/testing/unit_testing.md
@@ -0,0 +1,262 @@
+# Unit testing
+
+Tests are Rust functions that verify that the non-test code is functioning in
+the expected manner. The bodies of test functions typically perform some setup,
+run the code we want to test, then assert whether the results are what we
+expect.
+
+Most unit tests go into a `tests` [mod][mod] with the `#[cfg(test)]` [attribute][attribute].
+Test functions are marked with the `#[test]` attribute.
+
+Tests fail when something in the test function [panics][panic]. There are some
+helper [macros][macros]:
+
+* `assert!(expression)` - panics if expression evaluates to `false`.
+* `assert_eq!(left, right)` and `assert_ne!(left, right)` - testing left and
+ right expressions for equality and inequality respectively.
+
+```rust,ignore
+pub fn add(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+// This is a really bad adding function, its purpose is to fail in this
+// example.
+#[allow(dead_code)]
+fn bad_add(a: i32, b: i32) -> i32 {
+ a - b
+}
+
+#[cfg(test)]
+mod tests {
+ // Note this useful idiom: importing names from outer (for mod tests) scope.
+ use super::*;
+
+ #[test]
+ fn test_add() {
+ assert_eq!(add(1, 2), 3);
+ }
+
+ #[test]
+ fn test_bad_add() {
+ // This assert would fire and test will fail.
+ // Please note, that private functions can be tested too!
+ assert_eq!(bad_add(1, 2), 3);
+ }
+}
+```
+
+Tests can be run with `cargo test`.
+
+```shell
+$ cargo test
+
+running 2 tests
+test tests::test_bad_add ... FAILED
+test tests::test_add ... ok
+
+failures:
+
+---- tests::test_bad_add stdout ----
+ thread 'tests::test_bad_add' panicked at 'assertion failed: `(left == right)`
+ left: `-1`,
+ right: `3`', src/lib.rs:21:8
+note: Run with `RUST_BACKTRACE=1` for a backtrace.
+
+
+failures:
+ tests::test_bad_add
+
+test result: FAILED. 1 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+## Tests and `?`
+None of the previous unit test examples had a return type. But in Rust 2018,
+your unit tests can return `Result<()>`, which lets you use `?` in them! This
+can make them much more concise.
+
+```rust,editable
+fn sqrt(number: f64) -> Result<f64, String> {
+ if number >= 0.0 {
+ Ok(number.powf(0.5))
+ } else {
+ Err("negative floats don't have square roots".to_owned())
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_sqrt() -> Result<(), String> {
+ let x = 4.0;
+ assert_eq!(sqrt(x)?.powf(2.0), x);
+ Ok(())
+ }
+}
+```
+
+See ["The Edition Guide"][editionguide] for more details.
+
+## Testing panics
+
+To check functions that should panic under certain circumstances, use attribute
+`#[should_panic]`. This attribute accepts optional parameter `expected = ` with
+the text of the panic message. If your function can panic in multiple ways, it helps
+make sure your test is testing the correct panic.
+
+```rust,ignore
+pub fn divide_non_zero_result(a: u32, b: u32) -> u32 {
+ if b == 0 {
+ panic!("Divide-by-zero error");
+ } else if a < b {
+ panic!("Divide result is zero");
+ }
+ a / b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_divide() {
+ assert_eq!(divide_non_zero_result(10, 2), 5);
+ }
+
+ #[test]
+ #[should_panic]
+ fn test_any_panic() {
+ divide_non_zero_result(1, 0);
+ }
+
+ #[test]
+ #[should_panic(expected = "Divide result is zero")]
+ fn test_specific_panic() {
+ divide_non_zero_result(1, 10);
+ }
+}
+```
+
+Running these tests gives us:
+
+```shell
+$ cargo test
+
+running 3 tests
+test tests::test_any_panic ... ok
+test tests::test_divide ... ok
+test tests::test_specific_panic ... ok
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Doc-tests tmp-test-should-panic
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+## Running specific tests
+
+To run specific tests one may specify the test name to `cargo test` command.
+
+```shell
+$ cargo test test_any_panic
+running 1 test
+test tests::test_any_panic ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 2 filtered out
+
+ Doc-tests tmp-test-should-panic
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+To run multiple tests one may specify part of a test name that matches all the
+tests that should be run.
+
+```shell
+$ cargo test panic
+running 2 tests
+test tests::test_any_panic ... ok
+test tests::test_specific_panic ... ok
+
+test result: ok. 2 passed; 0 failed; 0 ignored; 0 measured; 1 filtered out
+
+ Doc-tests tmp-test-should-panic
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+## Ignoring tests
+
+Tests can be marked with the `#[ignore]` attribute to exclude some tests. Or to run
+them with command `cargo test -- --ignored`
+
+```rust
+pub fn add(a: i32, b: i32) -> i32 {
+ a + b
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_add() {
+ assert_eq!(add(2, 2), 4);
+ }
+
+ #[test]
+ fn test_add_hundred() {
+ assert_eq!(add(100, 2), 102);
+ assert_eq!(add(2, 100), 102);
+ }
+
+ #[test]
+ #[ignore]
+ fn ignored_test() {
+ assert_eq!(add(0, 0), 0);
+ }
+}
+```
+
+```shell
+$ cargo test
+running 3 tests
+test tests::ignored_test ... ignored
+test tests::test_add ... ok
+test tests::test_add_hundred ... ok
+
+test result: ok. 2 passed; 0 failed; 1 ignored; 0 measured; 0 filtered out
+
+ Doc-tests tmp-ignore
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+$ cargo test -- --ignored
+running 1 test
+test tests::ignored_test ... ok
+
+test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Doc-tests tmp-ignore
+
+running 0 tests
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+[attribute]: ../attribute.md
+[panic]: ../std/panic.md
+[macros]: ../macros.md
+[mod]: ../mod.md
+[editionguide]: https://doc.rust-lang.org/edition-guide/rust-2018/error-handling-and-panics/question-mark-in-main-and-tests.html
diff --git a/src/doc/rust-by-example/src/trait.md b/src/doc/rust-by-example/src/trait.md
new file mode 100644
index 000000000..d4d409468
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait.md
@@ -0,0 +1,80 @@
+# Traits
+
+A `trait` is a collection of methods defined for an unknown type:
+`Self`. They can access other methods declared in the same trait.
+
+Traits can be implemented for any data type. In the example below,
+we define `Animal`, a group of methods. The `Animal` `trait` is
+then implemented for the `Sheep` data type, allowing the use of
+methods from `Animal` with a `Sheep`.
+
+```rust,editable
+struct Sheep { naked: bool, name: &'static str }
+
+trait Animal {
+ // Associated function signature; `Self` refers to the implementor type.
+ fn new(name: &'static str) -> Self;
+
+ // Method signatures; these will return a string.
+ fn name(&self) -> &'static str;
+ fn noise(&self) -> &'static str;
+
+ // Traits can provide default method definitions.
+ fn talk(&self) {
+ println!("{} says {}", self.name(), self.noise());
+ }
+}
+
+impl Sheep {
+ fn is_naked(&self) -> bool {
+ self.naked
+ }
+
+ fn shear(&mut self) {
+ if self.is_naked() {
+ // Implementor methods can use the implementor's trait methods.
+ println!("{} is already naked...", self.name());
+ } else {
+ println!("{} gets a haircut!", self.name);
+
+ self.naked = true;
+ }
+ }
+}
+
+// Implement the `Animal` trait for `Sheep`.
+impl Animal for Sheep {
+ // `Self` is the implementor type: `Sheep`.
+ fn new(name: &'static str) -> Sheep {
+ Sheep { name: name, naked: false }
+ }
+
+ fn name(&self) -> &'static str {
+ self.name
+ }
+
+ fn noise(&self) -> &'static str {
+ if self.is_naked() {
+ "baaaaah?"
+ } else {
+ "baaaaah!"
+ }
+ }
+
+ // Default trait methods can be overridden.
+ fn talk(&self) {
+ // For example, we can add some quiet contemplation.
+ println!("{} pauses briefly... {}", self.name, self.noise());
+ }
+}
+
+fn main() {
+ // Type annotation is necessary in this case.
+ let mut dolly: Sheep = Animal::new("Dolly");
+ // TODO ^ Try removing the type annotations.
+
+ dolly.talk();
+ dolly.shear();
+ dolly.talk();
+}
+```
diff --git a/src/doc/rust-by-example/src/trait/clone.md b/src/doc/rust-by-example/src/trait/clone.md
new file mode 100644
index 000000000..5d6747a47
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/clone.md
@@ -0,0 +1,55 @@
+# Clone
+
+When dealing with resources, the default behavior is to transfer them during
+assignments or function calls. However, sometimes we need to make a
+copy of the resource as well.
+
+The [`Clone`][clone] trait helps us do exactly this. Most commonly, we can
+use the `.clone()` method defined by the `Clone` trait.
+
+```rust,editable
+// A unit struct without resources
+#[derive(Debug, Clone, Copy)]
+struct Unit;
+
+// A tuple struct with resources that implements the `Clone` trait
+#[derive(Clone, Debug)]
+struct Pair(Box<i32>, Box<i32>);
+
+fn main() {
+ // Instantiate `Unit`
+ let unit = Unit;
+ // Copy `Unit`, there are no resources to move
+ let copied_unit = unit;
+
+ // Both `Unit`s can be used independently
+ println!("original: {:?}", unit);
+ println!("copy: {:?}", copied_unit);
+
+ // Instantiate `Pair`
+ let pair = Pair(Box::new(1), Box::new(2));
+ println!("original: {:?}", pair);
+
+ // Move `pair` into `moved_pair`, moves resources
+ let moved_pair = pair;
+ println!("moved: {:?}", moved_pair);
+
+ // Error! `pair` has lost its resources
+ //println!("original: {:?}", pair);
+ // TODO ^ Try uncommenting this line
+
+ // Clone `moved_pair` into `cloned_pair` (resources are included)
+ let cloned_pair = moved_pair.clone();
+ // Drop the original pair using std::mem::drop
+ drop(moved_pair);
+
+ // Error! `moved_pair` has been dropped
+ //println!("copy: {:?}", moved_pair);
+ // TODO ^ Try uncommenting this line
+
+ // The result from .clone() can still be used!
+ println!("clone: {:?}", cloned_pair);
+}
+```
+
+[clone]: https://doc.rust-lang.org/std/clone/trait.Clone.html
diff --git a/src/doc/rust-by-example/src/trait/derive.md b/src/doc/rust-by-example/src/trait/derive.md
new file mode 100644
index 000000000..4769efe62
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/derive.md
@@ -0,0 +1,77 @@
+# Derive
+
+The compiler is capable of providing basic implementations for some traits via
+the `#[derive]` [attribute][attribute]. These traits can still be
+manually implemented if a more complex behavior is required.
+
+The following is a list of derivable traits:
+* Comparison traits:
+ [`Eq`][eq], [`PartialEq`][partial-eq], [`Ord`][ord], [`PartialOrd`][partial-ord].
+* [`Clone`][clone], to create `T` from `&T` via a copy.
+* [`Copy`][copy], to give a type 'copy semantics' instead of 'move semantics'.
+* [`Hash`][hash], to compute a hash from `&T`.
+* [`Default`][default], to create an empty instance of a data type.
+* [`Debug`][debug], to format a value using the `{:?}` formatter.
+
+```rust,editable
+// `Centimeters`, a tuple struct that can be compared
+#[derive(PartialEq, PartialOrd)]
+struct Centimeters(f64);
+
+// `Inches`, a tuple struct that can be printed
+#[derive(Debug)]
+struct Inches(i32);
+
+impl Inches {
+ fn to_centimeters(&self) -> Centimeters {
+ let &Inches(inches) = self;
+
+ Centimeters(inches as f64 * 2.54)
+ }
+}
+
+// `Seconds`, a tuple struct with no additional attributes
+struct Seconds(i32);
+
+fn main() {
+ let _one_second = Seconds(1);
+
+ // Error: `Seconds` can't be printed; it doesn't implement the `Debug` trait
+ //println!("One second looks like: {:?}", _one_second);
+ // TODO ^ Try uncommenting this line
+
+ // Error: `Seconds` can't be compared; it doesn't implement the `PartialEq` trait
+ //let _this_is_true = (_one_second == _one_second);
+ // TODO ^ Try uncommenting this line
+
+ let foot = Inches(12);
+
+ println!("One foot equals {:?}", foot);
+
+ let meter = Centimeters(100.0);
+
+ let cmp =
+ if foot.to_centimeters() < meter {
+ "smaller"
+ } else {
+ "bigger"
+ };
+
+ println!("One foot is {} than one meter.", cmp);
+}
+```
+
+### See also:
+[`derive`][derive]
+
+[attribute]: ../attribute.md
+[eq]: https://doc.rust-lang.org/std/cmp/trait.Eq.html
+[partial-eq]: https://doc.rust-lang.org/std/cmp/trait.PartialEq.html
+[ord]: https://doc.rust-lang.org/std/cmp/trait.Ord.html
+[partial-ord]: https://doc.rust-lang.org/std/cmp/trait.PartialOrd.html
+[clone]: https://doc.rust-lang.org/std/clone/trait.Clone.html
+[copy]: https://doc.rust-lang.org/core/marker/trait.Copy.html
+[hash]: https://doc.rust-lang.org/std/hash/trait.Hash.html
+[default]: https://doc.rust-lang.org/std/default/trait.Default.html
+[debug]: https://doc.rust-lang.org/std/fmt/trait.Debug.html
+[derive]: https://doc.rust-lang.org/reference/attributes.html#derive
diff --git a/src/doc/rust-by-example/src/trait/disambiguating.md b/src/doc/rust-by-example/src/trait/disambiguating.md
new file mode 100644
index 000000000..ae80d4acb
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/disambiguating.md
@@ -0,0 +1,64 @@
+# Disambiguating overlapping traits
+
+A type can implement many different traits. What if two traits both require
+the same name? For example, many traits might have a method named `get()`.
+They might even have different return types!
+
+Good news: because each trait implementation gets its own `impl` block, it's
+clear which trait's `get` method you're implementing.
+
+What about when it comes time to _call_ those methods? To disambiguate between
+them, we have to use Fully Qualified Syntax.
+
+```rust,editable
+trait UsernameWidget {
+ // Get the selected username out of this widget
+ fn get(&self) -> String;
+}
+
+trait AgeWidget {
+ // Get the selected age out of this widget
+ fn get(&self) -> u8;
+}
+
+// A form with both a UsernameWidget and an AgeWidget
+struct Form {
+ username: String,
+ age: u8,
+}
+
+impl UsernameWidget for Form {
+ fn get(&self) -> String {
+ self.username.clone()
+ }
+}
+
+impl AgeWidget for Form {
+ fn get(&self) -> u8 {
+ self.age
+ }
+}
+
+fn main() {
+ let form = Form {
+ username: "rustacean".to_owned(),
+ age: 28,
+ };
+
+ // If you uncomment this line, you'll get an error saying
+ // "multiple `get` found". Because, after all, there are multiple methods
+ // named `get`.
+ // println!("{}", form.get());
+
+ let username = <Form as UsernameWidget>::get(&form);
+ assert_eq!("rustacean".to_owned(), username);
+ let age = <Form as AgeWidget>::get(&form);
+ assert_eq!(28, age);
+}
+```
+
+### See also:
+
+[The Rust Programming Language chapter on Fully Qualified syntax][trpl_fqsyntax]
+
+[trpl_fqsyntax]: https://doc.rust-lang.org/book/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name
diff --git a/src/doc/rust-by-example/src/trait/drop.md b/src/doc/rust-by-example/src/trait/drop.md
new file mode 100644
index 000000000..7aeaca717
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/drop.md
@@ -0,0 +1,57 @@
+# Drop
+
+The [`Drop`][Drop] trait only has one method: `drop`, which is called automatically
+when an object goes out of scope. The main use of the `Drop` trait is to free the
+resources that the implementor instance owns.
+
+`Box`, `Vec`, `String`, `File`, and `Process` are some examples of types that
+implement the `Drop` trait to free resources. The `Drop` trait can also be
+manually implemented for any custom data type.
+
+The following example adds a print to console to the `drop` function to announce
+when it is called.
+
+```rust,editable
+struct Droppable {
+ name: &'static str,
+}
+
+// This trivial implementation of `drop` adds a print to console.
+impl Drop for Droppable {
+ fn drop(&mut self) {
+ println!("> Dropping {}", self.name);
+ }
+}
+
+fn main() {
+ let _a = Droppable { name: "a" };
+
+ // block A
+ {
+ let _b = Droppable { name: "b" };
+
+ // block B
+ {
+ let _c = Droppable { name: "c" };
+ let _d = Droppable { name: "d" };
+
+ println!("Exiting block B");
+ }
+ println!("Just exited block B");
+
+ println!("Exiting block A");
+ }
+ println!("Just exited block A");
+
+ // Variable can be manually dropped using the `drop` function
+ drop(_a);
+ // TODO ^ Try commenting this line
+
+ println!("end of the main function");
+
+ // `_a` *won't* be `drop`ed again here, because it already has been
+ // (manually) `drop`ed
+}
+```
+
+[Drop]: https://doc.rust-lang.org/std/ops/trait.Drop.html \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/trait/dyn.md b/src/doc/rust-by-example/src/trait/dyn.md
new file mode 100644
index 000000000..5b2f8c2f3
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/dyn.md
@@ -0,0 +1,47 @@
+# Returning Traits with `dyn`
+
+The Rust compiler needs to know how much space every function's return type requires. This means all your functions have to return a concrete type. Unlike other languages, if you have a trait like `Animal`, you can't write a function that returns `Animal`, because its different implementations will need different amounts of memory.
+
+However, there's an easy workaround. Instead of returning a trait object directly, our functions return a `Box` which _contains_ some `Animal`. A `box` is just a reference to some memory in the heap. Because a reference has a statically-known size, and the compiler can guarantee it points to a heap-allocated `Animal`, we can return a trait from our function!
+
+Rust tries to be as explicit as possible whenever it allocates memory on the heap. So if your function returns a pointer-to-trait-on-heap in this way, you need to write the return type with the `dyn` keyword, e.g. `Box<dyn Animal>`.
+
+```rust,editable
+struct Sheep {}
+struct Cow {}
+
+trait Animal {
+ // Instance method signature
+ fn noise(&self) -> &'static str;
+}
+
+// Implement the `Animal` trait for `Sheep`.
+impl Animal for Sheep {
+ fn noise(&self) -> &'static str {
+ "baaaaah!"
+ }
+}
+
+// Implement the `Animal` trait for `Cow`.
+impl Animal for Cow {
+ fn noise(&self) -> &'static str {
+ "moooooo!"
+ }
+}
+
+// Returns some struct that implements Animal, but we don't know which one at compile time.
+fn random_animal(random_number: f64) -> Box<dyn Animal> {
+ if random_number < 0.5 {
+ Box::new(Sheep {})
+ } else {
+ Box::new(Cow {})
+ }
+}
+
+fn main() {
+ let random_number = 0.234;
+ let animal = random_animal(random_number);
+ println!("You've randomly chosen an animal, and it says {}", animal.noise());
+}
+
+``` \ No newline at end of file
diff --git a/src/doc/rust-by-example/src/trait/impl_trait.md b/src/doc/rust-by-example/src/trait/impl_trait.md
new file mode 100644
index 000000000..34bc06bfd
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/impl_trait.md
@@ -0,0 +1,128 @@
+# `impl Trait`
+
+`impl Trait` can be used in two locations:
+
+1. as an argument type
+2. as a return type
+
+## As an argument type
+
+If your function is generic over a trait but you don't mind the specific type, you can simplify the function declaration using `impl Trait` as the type of the argument.
+
+For example, consider the following code:
+
+```rust,editable
+fn parse_csv_document<R: std::io::BufRead>(src: R) -> std::io::Result<Vec<Vec<String>>> {
+ src.lines()
+ .map(|line| {
+ // For each line in the source
+ line.map(|line| {
+ // If the line was read successfully, process it, if not, return the error
+ line.split(',') // Split the line separated by commas
+ .map(|entry| String::from(entry.trim())) // Remove leading and trailing whitespace
+ .collect() // Collect all strings in a row into a Vec<String>
+ })
+ })
+ .collect() // Collect all lines into a Vec<Vec<String>>
+}
+```
+
+`parse_csv_document` is generic, allowing it to take any type which implements BufRead, such as `BufReader<File>` or `[u8]`,
+but it's not important what type `R` is, and `R` is only used to declare the type of `src`, so the function can also be written as:
+
+```rust,editable
+fn parse_csv_document(src: impl std::io::BufRead) -> std::io::Result<Vec<Vec<String>>> {
+ src.lines()
+ .map(|line| {
+ // For each line in the source
+ line.map(|line| {
+ // If the line was read successfully, process it, if not, return the error
+ line.split(',') // Split the line separated by commas
+ .map(|entry| String::from(entry.trim())) // Remove leading and trailing whitespace
+ .collect() // Collect all strings in a row into a Vec<String>
+ })
+ })
+ .collect() // Collect all lines into a Vec<Vec<String>>
+}
+```
+
+Note that using `impl Trait` as an argument type means that you cannot explicitly state what form of the function you use, i.e. `parse_csv_document::<std::io::Empty>(std::io::empty())` will not work with the second example.
+
+
+## As a return type
+
+If your function returns a type that implements `MyTrait`, you can write its
+return type as `-> impl MyTrait`. This can help simplify your type signatures quite a lot!
+
+```rust,editable
+use std::iter;
+use std::vec::IntoIter;
+
+// This function combines two `Vec<i32>` and returns an iterator over it.
+// Look how complicated its return type is!
+fn combine_vecs_explicit_return_type(
+ v: Vec<i32>,
+ u: Vec<i32>,
+) -> iter::Cycle<iter::Chain<IntoIter<i32>, IntoIter<i32>>> {
+ v.into_iter().chain(u.into_iter()).cycle()
+}
+
+// This is the exact same function, but its return type uses `impl Trait`.
+// Look how much simpler it is!
+fn combine_vecs(
+ v: Vec<i32>,
+ u: Vec<i32>,
+) -> impl Iterator<Item=i32> {
+ v.into_iter().chain(u.into_iter()).cycle()
+}
+
+fn main() {
+ let v1 = vec![1, 2, 3];
+ let v2 = vec![4, 5];
+ let mut v3 = combine_vecs(v1, v2);
+ assert_eq!(Some(1), v3.next());
+ assert_eq!(Some(2), v3.next());
+ assert_eq!(Some(3), v3.next());
+ assert_eq!(Some(4), v3.next());
+ assert_eq!(Some(5), v3.next());
+ println!("all done");
+}
+```
+
+More importantly, some Rust types can't be written out. For example, every
+closure has its own unnamed concrete type. Before `impl Trait` syntax, you had
+to allocate on the heap in order to return a closure. But now you can do it all
+statically, like this:
+
+```rust,editable
+// Returns a function that adds `y` to its input
+fn make_adder_function(y: i32) -> impl Fn(i32) -> i32 {
+ let closure = move |x: i32| { x + y };
+ closure
+}
+
+fn main() {
+ let plus_one = make_adder_function(1);
+ assert_eq!(plus_one(2), 3);
+}
+```
+
+You can also use `impl Trait` to return an iterator that uses `map` or `filter`
+closures! This makes using `map` and `filter` easier. Because closure types don't
+have names, you can't write out an explicit return type if your function returns
+iterators with closures. But with `impl Trait` you can do this easily:
+
+```rust,editable
+fn double_positives<'a>(numbers: &'a Vec<i32>) -> impl Iterator<Item = i32> + 'a {
+ numbers
+ .iter()
+ .filter(|x| x > &&0)
+ .map(|x| x * 2)
+}
+
+fn main() {
+ let singles = vec![-3, -2, 2, 3];
+ let doubles = double_positives(&singles);
+ assert_eq!(doubles.collect::<Vec<i32>>(), vec![4, 6]);
+}
+```
diff --git a/src/doc/rust-by-example/src/trait/iter.md b/src/doc/rust-by-example/src/trait/iter.md
new file mode 100644
index 000000000..db773123c
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/iter.md
@@ -0,0 +1,88 @@
+# Iterators
+
+The [`Iterator`][iter] trait is used to implement iterators over collections
+such as arrays.
+
+The trait requires only a method to be defined for the `next` element,
+which may be manually defined in an `impl` block or automatically
+defined (as in arrays and ranges).
+
+As a point of convenience for common situations, the `for` construct
+turns some collections into iterators using the [`.into_iter()`][intoiter] method.
+
+```rust,editable
+struct Fibonacci {
+ curr: u32,
+ next: u32,
+}
+
+// Implement `Iterator` for `Fibonacci`.
+// The `Iterator` trait only requires a method to be defined for the `next` element.
+impl Iterator for Fibonacci {
+ // We can refer to this type using Self::Item
+ type Item = u32;
+
+ // Here, we define the sequence using `.curr` and `.next`.
+ // The return type is `Option<T>`:
+ // * When the `Iterator` is finished, `None` is returned.
+ // * Otherwise, the next value is wrapped in `Some` and returned.
+ // We use Self::Item in the return type, so we can change
+ // the type without having to update the function signatures.
+ fn next(&mut self) -> Option<Self::Item> {
+ let current = self.curr;
+
+ self.curr = self.next;
+ self.next = current + self.next;
+
+ // Since there's no endpoint to a Fibonacci sequence, the `Iterator`
+ // will never return `None`, and `Some` is always returned.
+ Some(current)
+ }
+}
+
+// Returns a Fibonacci sequence generator
+fn fibonacci() -> Fibonacci {
+ Fibonacci { curr: 0, next: 1 }
+}
+
+fn main() {
+ // `0..3` is an `Iterator` that generates: 0, 1, and 2.
+ let mut sequence = 0..3;
+
+ println!("Four consecutive `next` calls on 0..3");
+ println!("> {:?}", sequence.next());
+ println!("> {:?}", sequence.next());
+ println!("> {:?}", sequence.next());
+ println!("> {:?}", sequence.next());
+
+ // `for` works through an `Iterator` until it returns `None`.
+ // Each `Some` value is unwrapped and bound to a variable (here, `i`).
+ println!("Iterate through 0..3 using `for`");
+ for i in 0..3 {
+ println!("> {}", i);
+ }
+
+ // The `take(n)` method reduces an `Iterator` to its first `n` terms.
+ println!("The first four terms of the Fibonacci sequence are: ");
+ for i in fibonacci().take(4) {
+ println!("> {}", i);
+ }
+
+ // The `skip(n)` method shortens an `Iterator` by dropping its first `n` terms.
+ println!("The next four terms of the Fibonacci sequence are: ");
+ for i in fibonacci().skip(4).take(4) {
+ println!("> {}", i);
+ }
+
+ let array = [1u32, 3, 3, 7];
+
+ // The `iter` method produces an `Iterator` over an array/slice.
+ println!("Iterate the following array {:?}", &array);
+ for i in array.iter() {
+ println!("> {}", i);
+ }
+}
+```
+
+[intoiter]: https://doc.rust-lang.org/std/iter/trait.IntoIterator.html
+[iter]: https://doc.rust-lang.org/core/iter/trait.Iterator.html
diff --git a/src/doc/rust-by-example/src/trait/ops.md b/src/doc/rust-by-example/src/trait/ops.md
new file mode 100644
index 000000000..3d4aa3bc8
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/ops.md
@@ -0,0 +1,61 @@
+# Operator Overloading
+
+In Rust, many of the operators can be overloaded via traits. That is, some operators can
+be used to accomplish different tasks based on their input arguments. This is possible
+because operators are syntactic sugar for method calls. For example, the `+` operator in
+`a + b` calls the `add` method (as in `a.add(b)`). This `add` method is part of the `Add`
+trait. Hence, the `+` operator can be used by any implementor of the `Add` trait.
+
+A list of the traits, such as `Add`, that overload operators can be found in [`core::ops`][ops].
+
+```rust,editable
+use std::ops;
+
+struct Foo;
+struct Bar;
+
+#[derive(Debug)]
+struct FooBar;
+
+#[derive(Debug)]
+struct BarFoo;
+
+// The `std::ops::Add` trait is used to specify the functionality of `+`.
+// Here, we make `Add<Bar>` - the trait for addition with a RHS of type `Bar`.
+// The following block implements the operation: Foo + Bar = FooBar
+impl ops::Add<Bar> for Foo {
+ type Output = FooBar;
+
+ fn add(self, _rhs: Bar) -> FooBar {
+ println!("> Foo.add(Bar) was called");
+
+ FooBar
+ }
+}
+
+// By reversing the types, we end up implementing non-commutative addition.
+// Here, we make `Add<Foo>` - the trait for addition with a RHS of type `Foo`.
+// This block implements the operation: Bar + Foo = BarFoo
+impl ops::Add<Foo> for Bar {
+ type Output = BarFoo;
+
+ fn add(self, _rhs: Foo) -> BarFoo {
+ println!("> Bar.add(Foo) was called");
+
+ BarFoo
+ }
+}
+
+fn main() {
+ println!("Foo + Bar = {:?}", Foo + Bar);
+ println!("Bar + Foo = {:?}", Bar + Foo);
+}
+```
+
+### See Also
+
+[Add][add], [Syntax Index][syntax]
+
+[add]: https://doc.rust-lang.org/core/ops/trait.Add.html
+[ops]: https://doc.rust-lang.org/core/ops/
+[syntax]:https://doc.rust-lang.org/book/appendix-02-operators.html
diff --git a/src/doc/rust-by-example/src/trait/supertraits.md b/src/doc/rust-by-example/src/trait/supertraits.md
new file mode 100644
index 000000000..5a735af1a
--- /dev/null
+++ b/src/doc/rust-by-example/src/trait/supertraits.md
@@ -0,0 +1,44 @@
+# Supertraits
+
+Rust doesn't have "inheritance", but you can define a trait as being a superset
+of another trait. For example:
+
+```rust,editable
+trait Person {
+ fn name(&self) -> String;
+}
+
+// Person is a supertrait of Student.
+// Implementing Student requires you to also impl Person.
+trait Student: Person {
+ fn university(&self) -> String;
+}
+
+trait Programmer {
+ fn fav_language(&self) -> String;
+}
+
+// CompSciStudent (computer science student) is a subtrait of both Programmer
+// and Student. Implementing CompSciStudent requires you to impl both supertraits.
+trait CompSciStudent: Programmer + Student {
+ fn git_username(&self) -> String;
+}
+
+fn comp_sci_student_greeting(student: &dyn CompSciStudent) -> String {
+ format!(
+ "My name is {} and I attend {}. My favorite language is {}. My Git username is {}",
+ student.name(),
+ student.university(),
+ student.fav_language(),
+ student.git_username()
+ )
+}
+
+fn main() {}
+```
+
+### See also:
+
+[The Rust Programming Language chapter on supertraits][trpl_supertraits]
+
+[trpl_supertraits]: https://doc.rust-lang.org/book/ch19-03-advanced-traits.html#using-supertraits-to-require-one-traits-functionality-within-another-trait
diff --git a/src/doc/rust-by-example/src/types.md b/src/doc/rust-by-example/src/types.md
new file mode 100644
index 000000000..1d3b50aab
--- /dev/null
+++ b/src/doc/rust-by-example/src/types.md
@@ -0,0 +1,13 @@
+# Types
+
+Rust provides several mechanisms to change or define the type of primitive and
+user defined types. The following sections cover:
+* [Casting] between primitive types
+* Specifying the desired type of [literals]
+* Using [type inference]
+* [Aliasing] types
+
+[Casting]: types/cast.md
+[literals]: types/literals.md
+[type inference]: types/inference.md
+[Aliasing]: types/alias.md
diff --git a/src/doc/rust-by-example/src/types/alias.md b/src/doc/rust-by-example/src/types/alias.md
new file mode 100644
index 000000000..1d004587c
--- /dev/null
+++ b/src/doc/rust-by-example/src/types/alias.md
@@ -0,0 +1,32 @@
+# Aliasing
+
+The `type` statement can be used to give a new name to an existing type. Types
+must have `UpperCamelCase` names, or the compiler will raise a warning. The
+exception to this rule are the primitive types: `usize`, `f32`, etc.
+
+```rust,editable
+// `NanoSecond`, `Inch`, and `U64` are new names for `u64`.
+type NanoSecond = u64;
+type Inch = u64;
+type U64 = u64;
+
+fn main() {
+ // `NanoSecond` = `Inch` = `U64` = `u64`.
+ let nanoseconds: NanoSecond = 5 as U64;
+ let inches: Inch = 2 as U64;
+
+ // Note that type aliases *don't* provide any extra type safety, because
+ // aliases are *not* new types
+ println!("{} nanoseconds + {} inches = {} unit?",
+ nanoseconds,
+ inches,
+ nanoseconds + inches);
+}
+```
+
+The main use of aliases is to reduce boilerplate; for example the `IoResult<T>` type
+is an alias for the `Result<T, IoError>` type.
+
+### See also:
+
+[Attributes](../attribute.md)
diff --git a/src/doc/rust-by-example/src/types/cast.md b/src/doc/rust-by-example/src/types/cast.md
new file mode 100644
index 000000000..6182874cd
--- /dev/null
+++ b/src/doc/rust-by-example/src/types/cast.md
@@ -0,0 +1,89 @@
+# Casting
+
+Rust provides no implicit type conversion (coercion) between primitive types.
+But, explicit type conversion (casting) can be performed using the `as` keyword.
+
+Rules for converting between integral types follow C conventions generally,
+except in cases where C has undefined behavior. The behavior of all casts
+between integral types is well defined in Rust.
+
+```rust,editable,ignore,mdbook-runnable
+// Suppress all warnings from casts which overflow.
+#![allow(overflowing_literals)]
+
+fn main() {
+ let decimal = 65.4321_f32;
+
+ // Error! No implicit conversion
+ let integer: u8 = decimal;
+ // FIXME ^ Comment out this line
+
+ // Explicit conversion
+ let integer = decimal as u8;
+ let character = integer as char;
+
+ // Error! There are limitations in conversion rules.
+ // A float cannot be directly converted to a char.
+ let character = decimal as char;
+ // FIXME ^ Comment out this line
+
+ println!("Casting: {} -> {} -> {}", decimal, integer, character);
+
+ // when casting any value to an unsigned type, T,
+ // T::MAX + 1 is added or subtracted until the value
+ // fits into the new type
+
+ // 1000 already fits in a u16
+ println!("1000 as a u16 is: {}", 1000 as u16);
+
+ // 1000 - 256 - 256 - 256 = 232
+ // Under the hood, the first 8 least significant bits (LSB) are kept,
+ // while the rest towards the most significant bit (MSB) get truncated.
+ println!("1000 as a u8 is : {}", 1000 as u8);
+ // -1 + 256 = 255
+ println!(" -1 as a u8 is : {}", (-1i8) as u8);
+
+ // For positive numbers, this is the same as the modulus
+ println!("1000 mod 256 is : {}", 1000 % 256);
+
+ // When casting to a signed type, the (bitwise) result is the same as
+ // first casting to the corresponding unsigned type. If the most significant
+ // bit of that value is 1, then the value is negative.
+
+ // Unless it already fits, of course.
+ println!(" 128 as a i16 is: {}", 128 as i16);
+
+ // 128 as i8 -> -128, whose two's complement in eight bits is:
+ println!(" 128 as a i8 is : {}", 128 as i8);
+
+ // repeating the example above
+ // 1000 as u8 -> 232
+ println!("1000 as a u8 is : {}", 1000 as u8);
+ // and the two's complement of 232 is -24
+ println!(" 232 as a i8 is : {}", 232 as i8);
+
+ // Since Rust 1.45, the `as` keyword performs a *saturating cast*
+ // when casting from float to int. If the floating point value exceeds
+ // the upper bound or is less than the lower bound, the returned value
+ // will be equal to the bound crossed.
+
+ // 300.0 is 255
+ println!("300.0 is {}", 300.0_f32 as u8);
+ // -100.0 as u8 is 0
+ println!("-100.0 as u8 is {}", -100.0_f32 as u8);
+ // nan as u8 is 0
+ println!("nan as u8 is {}", f32::NAN as u8);
+
+ // This behavior incurs a small runtime cost and can be avoided
+ // with unsafe methods, however the results might overflow and
+ // return **unsound values**. Use these methods wisely:
+ unsafe {
+ // 300.0 is 44
+ println!("300.0 is {}", 300.0_f32.to_int_unchecked::<u8>());
+ // -100.0 as u8 is 156
+ println!("-100.0 as u8 is {}", (-100.0_f32).to_int_unchecked::<u8>());
+ // nan as u8 is 0
+ println!("nan as u8 is {}", f32::NAN.to_int_unchecked::<u8>());
+ }
+}
+```
diff --git a/src/doc/rust-by-example/src/types/inference.md b/src/doc/rust-by-example/src/types/inference.md
new file mode 100644
index 000000000..5d10301f4
--- /dev/null
+++ b/src/doc/rust-by-example/src/types/inference.md
@@ -0,0 +1,28 @@
+# Inference
+
+The type inference engine is pretty smart. It does more than looking at the
+type of the value expression
+during an initialization. It also looks at how the variable is used afterwards
+to infer its type. Here's an advanced example of type inference:
+
+```rust,editable
+fn main() {
+ // Because of the annotation, the compiler knows that `elem` has type u8.
+ let elem = 5u8;
+
+ // Create an empty vector (a growable array).
+ let mut vec = Vec::new();
+ // At this point the compiler doesn't know the exact type of `vec`, it
+ // just knows that it's a vector of something (`Vec<_>`).
+
+ // Insert `elem` in the vector.
+ vec.push(elem);
+ // Aha! Now the compiler knows that `vec` is a vector of `u8`s (`Vec<u8>`)
+ // TODO ^ Try commenting out the `vec.push(elem)` line
+
+ println!("{:?}", vec);
+}
+```
+
+No type annotation of variables was needed, the compiler is happy and so is the
+programmer!
diff --git a/src/doc/rust-by-example/src/types/literals.md b/src/doc/rust-by-example/src/types/literals.md
new file mode 100644
index 000000000..fd26b9dca
--- /dev/null
+++ b/src/doc/rust-by-example/src/types/literals.md
@@ -0,0 +1,40 @@
+# Literals
+
+Numeric literals can be type annotated by adding the type as a suffix. As an example,
+to specify that the literal `42` should have the type `i32`, write `42i32`.
+
+The type of unsuffixed numeric literals will depend on how they are used. If no
+constraint exists, the compiler will use `i32` for integers, and `f64` for
+floating-point numbers.
+
+```rust,editable
+fn main() {
+ // Suffixed literals, their types are known at initialization
+ let x = 1u8;
+ let y = 2u32;
+ let z = 3f32;
+
+ // Unsuffixed literals, their types depend on how they are used
+ let i = 1;
+ let f = 1.0;
+
+ // `size_of_val` returns the size of a variable in bytes
+ println!("size of `x` in bytes: {}", std::mem::size_of_val(&x));
+ println!("size of `y` in bytes: {}", std::mem::size_of_val(&y));
+ println!("size of `z` in bytes: {}", std::mem::size_of_val(&z));
+ println!("size of `i` in bytes: {}", std::mem::size_of_val(&i));
+ println!("size of `f` in bytes: {}", std::mem::size_of_val(&f));
+}
+```
+
+There are some concepts used in the previous code that haven't been explained
+yet, here's a brief explanation for the impatient readers:
+
+* `std::mem::size_of_val` is a function, but called with its *full path*. Code
+ can be split in logical units called *modules*. In this case, the
+ `size_of_val` function is defined in the `mem` module, and the `mem` module
+ is defined in the `std` *crate*. For more details, see
+ [modules][mod] and [crates][crate].
+
+[mod]: ../mod.md
+[crate]: ../crates.md
diff --git a/src/doc/rust-by-example/src/unsafe.md b/src/doc/rust-by-example/src/unsafe.md
new file mode 100644
index 000000000..1eeec6ba3
--- /dev/null
+++ b/src/doc/rust-by-example/src/unsafe.md
@@ -0,0 +1,61 @@
+# Unsafe Operations
+
+As an introduction to this section, to borrow from [the official docs][unsafe],
+"one should try to minimize the amount of unsafe code in a code base." With that
+in mind, let's get started! Unsafe annotations in Rust are used to bypass
+protections put in place by the compiler; specifically, there are four primary
+things that unsafe is used for:
+
+* dereferencing raw pointers
+* calling functions or methods which are `unsafe` (including calling a function
+ over FFI, see [a previous chapter](std_misc/ffi.md) of the book)
+* accessing or modifying static mutable variables
+* implementing unsafe traits
+
+### Raw Pointers
+Raw pointers `*` and references `&T` function similarly, but references are
+always safe because they are guaranteed to point to valid data due to the
+borrow checker. Dereferencing a raw pointer can only be done through an unsafe
+block.
+
+```rust,editable
+fn main() {
+ let raw_p: *const u32 = &10;
+
+ unsafe {
+ assert!(*raw_p == 10);
+ }
+}
+```
+
+### Calling Unsafe Functions
+Some functions can be declared as `unsafe`, meaning it is the programmer's
+responsibility to ensure correctness instead of the compiler's. One example
+of this is [`std::slice::from_raw_parts`] which will create a slice given a
+pointer to the first element and a length.
+
+```rust,editable
+use std::slice;
+
+fn main() {
+ let some_vector = vec![1, 2, 3, 4];
+
+ let pointer = some_vector.as_ptr();
+ let length = some_vector.len();
+
+ unsafe {
+ let my_slice: &[u32] = slice::from_raw_parts(pointer, length);
+
+ assert_eq!(some_vector.as_slice(), my_slice);
+ }
+}
+```
+
+For `slice::from_raw_parts`, one of the assumptions which *must* be upheld is
+that the pointer passed in points to valid memory and that the memory pointed to
+is of the correct type. If these invariants aren't upheld then the program's
+behaviour is undefined and there is no knowing what will happen.
+
+
+[unsafe]: https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html
+[`std::slice::from_raw_parts`]: https://doc.rust-lang.org/std/slice/fn.from_raw_parts.html
diff --git a/src/doc/rust-by-example/src/unsafe/asm.md b/src/doc/rust-by-example/src/unsafe/asm.md
new file mode 100644
index 000000000..ee6b8088a
--- /dev/null
+++ b/src/doc/rust-by-example/src/unsafe/asm.md
@@ -0,0 +1,443 @@
+# Inline assembly
+
+Rust provides support for inline assembly via the `asm!` macro.
+It can be used to embed handwritten assembly in the assembly output generated by the compiler.
+Generally this should not be necessary, but might be where the required performance or timing
+cannot be otherwise achieved. Accessing low level hardware primitives, e.g. in kernel code, may also demand this functionality.
+
+> **Note**: the examples here are given in x86/x86-64 assembly, but other architectures are also supported.
+
+Inline assembly is currently supported on the following architectures:
+- x86 and x86-64
+- ARM
+- AArch64
+- RISC-V
+
+## Basic usage
+
+Let us start with the simplest possible example:
+
+```rust
+use std::arch::asm;
+
+unsafe {
+ asm!("nop");
+}
+```
+
+This will insert a NOP (no operation) instruction into the assembly generated by the compiler.
+Note that all `asm!` invocations have to be inside an `unsafe` block, as they could insert
+arbitrary instructions and break various invariants. The instructions to be inserted are listed
+in the first argument of the `asm!` macro as a string literal.
+
+## Inputs and outputs
+
+Now inserting an instruction that does nothing is rather boring. Let us do something that
+actually acts on data:
+
+```rust
+use std::arch::asm;
+
+let x: u64;
+unsafe {
+ asm!("mov {}, 5", out(reg) x);
+}
+assert_eq!(x, 5);
+```
+
+This will write the value `5` into the `u64` variable `x`.
+You can see that the string literal we use to specify instructions is actually a template string.
+It is governed by the same rules as Rust [format strings][format-syntax].
+The arguments that are inserted into the template however look a bit different than you may
+be familiar with. First we need to specify if the variable is an input or an output of the
+inline assembly. In this case it is an output. We declared this by writing `out`.
+We also need to specify in what kind of register the assembly expects the variable.
+In this case we put it in an arbitrary general purpose register by specifying `reg`.
+The compiler will choose an appropriate register to insert into
+the template and will read the variable from there after the inline assembly finishes executing.
+
+[format-syntax]: https://doc.rust-lang.org/std/fmt/#syntax
+
+Let us see another example that also uses an input:
+
+```rust
+use std::arch::asm;
+
+let i: u64 = 3;
+let o: u64;
+unsafe {
+ asm!(
+ "mov {0}, {1}",
+ "add {0}, 5",
+ out(reg) o,
+ in(reg) i,
+ );
+}
+assert_eq!(o, 8);
+```
+
+This will add `5` to the input in variable `i` and write the result to variable `o`.
+The particular way this assembly does this is first copying the value from `i` to the output,
+and then adding `5` to it.
+
+The example shows a few things:
+
+First, we can see that `asm!` allows multiple template string arguments; each
+one is treated as a separate line of assembly code, as if they were all joined
+together with newlines between them. This makes it easy to format assembly
+code.
+
+Second, we can see that inputs are declared by writing `in` instead of `out`.
+
+Third, we can see that we can specify an argument number, or name as in any format string.
+For inline assembly templates this is particularly useful as arguments are often used more than once.
+For more complex inline assembly using this facility is generally recommended, as it improves
+readability, and allows reordering instructions without changing the argument order.
+
+We can further refine the above example to avoid the `mov` instruction:
+
+```rust
+use std::arch::asm;
+
+let mut x: u64 = 3;
+unsafe {
+ asm!("add {0}, 5", inout(reg) x);
+}
+assert_eq!(x, 8);
+```
+
+We can see that `inout` is used to specify an argument that is both input and output.
+This is different from specifying an input and output separately in that it is guaranteed to assign both to the same register.
+
+It is also possible to specify different variables for the input and output parts of an `inout` operand:
+
+```rust
+use std::arch::asm;
+
+let x: u64 = 3;
+let y: u64;
+unsafe {
+ asm!("add {0}, 5", inout(reg) x => y);
+}
+assert_eq!(y, 8);
+```
+
+## Late output operands
+
+The Rust compiler is conservative with its allocation of operands. It is assumed that an `out`
+can be written at any time, and can therefore not share its location with any other argument.
+However, to guarantee optimal performance it is important to use as few registers as possible,
+so they won't have to be saved and reloaded around the inline assembly block.
+To achieve this Rust provides a `lateout` specifier. This can be used on any output that is
+written only after all inputs have been consumed.
+There is also a `inlateout` variant of this specifier.
+
+Here is an example where `inlateout` *cannot* be used in `release` mode or other optimized cases:
+
+```rust
+use std::arch::asm;
+
+let mut a: u64 = 4;
+let b: u64 = 4;
+let c: u64 = 4;
+unsafe {
+ asm!(
+ "add {0}, {1}",
+ "add {0}, {2}",
+ inout(reg) a,
+ in(reg) b,
+ in(reg) c,
+ );
+}
+assert_eq!(a, 12);
+```
+The above could work well in unoptimized cases (`Debug` mode), but if you want optimized performance (`release` mode or other optimized cases), it could not work.
+
+That is because in optimized cases, the compiler is free to allocate the same register for inputs `b` and `c` since it knows they have the same value. However it must allocate a separate register for `a` since it uses `inout` and not `inlateout`. If `inlateout` was used, then `a` and `c` could be allocated to the same register, in which case the first instruction to overwrite the value of `c` and cause the assembly code to produce the wrong result.
+
+However the following example can use `inlateout` since the output is only modified after all input registers have been read:
+
+```rust
+use std::arch::asm;
+
+let mut a: u64 = 4;
+let b: u64 = 4;
+unsafe {
+ asm!("add {0}, {1}", inlateout(reg) a, in(reg) b);
+}
+assert_eq!(a, 8);
+```
+
+As you can see, this assembly fragment will still work correctly if `a` and `b` are assigned to the same register.
+
+## Explicit register operands
+
+Some instructions require that the operands be in a specific register.
+Therefore, Rust inline assembly provides some more specific constraint specifiers.
+While `reg` is generally available on any architecture, explicit registers are highly architecture specific. E.g. for x86 the general purpose registers `eax`, `ebx`, `ecx`, `edx`, `ebp`, `esi`, and `edi` among others can be addressed by their name.
+
+```rust,no_run
+use std::arch::asm;
+
+let cmd = 0xd1;
+unsafe {
+ asm!("out 0x64, eax", in("eax") cmd);
+}
+```
+
+In this example we call the `out` instruction to output the content of the `cmd` variable to port `0x64`. Since the `out` instruction only accepts `eax` (and its sub registers) as operand we had to use the `eax` constraint specifier.
+
+> **Note**: unlike other operand types, explicit register operands cannot be used in the template string: you can't use `{}` and should write the register name directly instead. Also, they must appear at the end of the operand list after all other operand types.
+
+Consider this example which uses the x86 `mul` instruction:
+
+```rust
+use std::arch::asm;
+
+fn mul(a: u64, b: u64) -> u128 {
+ let lo: u64;
+ let hi: u64;
+
+ unsafe {
+ asm!(
+ // The x86 mul instruction takes rax as an implicit input and writes
+ // the 128-bit result of the multiplication to rax:rdx.
+ "mul {}",
+ in(reg) a,
+ inlateout("rax") b => lo,
+ lateout("rdx") hi
+ );
+ }
+
+ ((hi as u128) << 64) + lo as u128
+}
+```
+
+This uses the `mul` instruction to multiply two 64-bit inputs with a 128-bit result.
+The only explicit operand is a register, that we fill from the variable `a`.
+The second operand is implicit, and must be the `rax` register, which we fill from the variable `b`.
+The lower 64 bits of the result are stored in `rax` from which we fill the variable `lo`.
+The higher 64 bits are stored in `rdx` from which we fill the variable `hi`.
+
+## Clobbered registers
+
+In many cases inline assembly will modify state that is not needed as an output.
+Usually this is either because we have to use a scratch register in the assembly or because instructions modify state that we don't need to further examine.
+This state is generally referred to as being "clobbered".
+We need to tell the compiler about this since it may need to save and restore this state around the inline assembly block.
+
+```rust
+use core::arch::asm;
+
+fn main() {
+ // three entries of four bytes each
+ let mut name_buf = [0_u8; 12];
+ // String is stored as ascii in ebx, edx, ecx in order
+ // Because ebx is reserved, the asm needs to preserve the value of it.
+ // So we push and pop it around the main asm.
+ // (in 64 bit mode for 64 bit processors, 32 bit processors would use ebx)
+
+ unsafe {
+ asm!(
+ "push rbx",
+ "cpuid",
+ "mov [rdi], ebx",
+ "mov [rdi + 4], edx",
+ "mov [rdi + 8], ecx",
+ "pop rbx",
+ // We use a pointer to an array for storing the values to simplify
+ // the Rust code at the cost of a couple more asm instructions
+ // This is more explicit with how the asm works however, as opposed
+ // to explicit register outputs such as `out("ecx") val`
+ // The *pointer itself* is only an input even though it's written behind
+ in("rdi") name_buf.as_mut_ptr(),
+ // select cpuid 0, also specify eax as clobbered
+ inout("eax") 0 => _,
+ // cpuid clobbers these registers too
+ out("ecx") _,
+ out("edx") _,
+ );
+ }
+
+ let name = core::str::from_utf8(&name_buf).unwrap();
+ println!("CPU Manufacturer ID: {}", name);
+}
+```
+
+In the example above we use the `cpuid` instruction to read the CPU manufacturer ID.
+This instruction writes to `eax` with the maximum supported `cpuid` argument and `ebx`, `edx`, and `ecx` with the CPU manufacturer ID as ASCII bytes in that order.
+
+Even though `eax` is never read we still need to tell the compiler that the register has been modified so that the compiler can save any values that were in these registers before the asm. This is done by declaring it as an output but with `_` instead of a variable name, which indicates that the output value is to be discarded.
+
+This code also works around the limitation that `ebx` is a reserved register by LLVM. That means that LLVM assumes that it has full control over the register and it must be restored to its original state before exiting the asm block, so it cannot be used as an input or output **except** if the compiler uses it to fulfill a general register class (e.g. `in(reg)`). This makes `reg` operands dangerous when using reserved registers as we could unknowingly corrupt out input or output because they share the same register.
+
+To work around this we use `rdi` to store the pointer to the output array, save `ebx` via `push`, read from `ebx` inside the asm block into the array and then restoring `ebx` to its original state via `pop`. The `push` and `pop` use the full 64-bit `rbx` version of the register to ensure that the entire register is saved. On 32 bit targets the code would instead use `ebx` in the `push`/`pop`.
+
+This can also be used with a general register class to obtain a scratch register for use inside the asm code:
+
+```rust
+use std::arch::asm;
+
+// Multiply x by 6 using shifts and adds
+let mut x: u64 = 4;
+unsafe {
+ asm!(
+ "mov {tmp}, {x}",
+ "shl {tmp}, 1",
+ "shl {x}, 2",
+ "add {x}, {tmp}",
+ x = inout(reg) x,
+ tmp = out(reg) _,
+ );
+}
+assert_eq!(x, 4 * 6);
+```
+
+## Symbol operands and ABI clobbers
+
+By default, `asm!` assumes that any register not specified as an output will have its contents preserved by the assembly code. The [`clobber_abi`] argument to `asm!` tells the compiler to automatically insert the necessary clobber operands according to the given calling convention ABI: any register which is not fully preserved in that ABI will be treated as clobbered. Multiple `clobber_abi` arguments may be provided and all clobbers from all specified ABIs will be inserted.
+
+[`clobber_abi`]: ../../reference/inline-assembly.html#abi-clobbers
+
+```rust
+use std::arch::asm;
+
+extern "C" fn foo(arg: i32) -> i32 {
+ println!("arg = {}", arg);
+ arg * 2
+}
+
+fn call_foo(arg: i32) -> i32 {
+ unsafe {
+ let result;
+ asm!(
+ "call {}",
+ // Function pointer to call
+ in(reg) foo,
+ // 1st argument in rdi
+ in("rdi") arg,
+ // Return value in rax
+ out("rax") result,
+ // Mark all registers which are not preserved by the "C" calling
+ // convention as clobbered.
+ clobber_abi("C"),
+ );
+ result
+ }
+}
+```
+
+## Register template modifiers
+
+In some cases, fine control is needed over the way a register name is formatted when inserted into the template string. This is needed when an architecture's assembly language has several names for the same register, each typically being a "view" over a subset of the register (e.g. the low 32 bits of a 64-bit register).
+
+By default the compiler will always choose the name that refers to the full register size (e.g. `rax` on x86-64, `eax` on x86, etc).
+
+This default can be overriden by using modifiers on the template string operands, just like you would with format strings:
+
+```rust
+use std::arch::asm;
+
+let mut x: u16 = 0xab;
+
+unsafe {
+ asm!("mov {0:h}, {0:l}", inout(reg_abcd) x);
+}
+
+assert_eq!(x, 0xabab);
+```
+
+In this example, we use the `reg_abcd` register class to restrict the register allocator to the 4 legacy x86 registers (`ax`, `bx`, `cx`, `dx`) of which the first two bytes can be addressed independently.
+
+Let us assume that the register allocator has chosen to allocate `x` in the `ax` register.
+The `h` modifier will emit the register name for the high byte of that register and the `l` modifier will emit the register name for the low byte. The asm code will therefore be expanded as `mov ah, al` which copies the low byte of the value into the high byte.
+
+If you use a smaller data type (e.g. `u16`) with an operand and forget to use template modifiers, the compiler will emit a warning and suggest the correct modifier to use.
+
+## Memory address operands
+
+Sometimes assembly instructions require operands passed via memory addresses/memory locations.
+You have to manually use the memory address syntax specified by the target architecture.
+For example, on x86/x86_64 using Intel assembly syntax, you should wrap inputs/outputs in `[]` to indicate they are memory operands:
+
+```rust
+use std::arch::asm;
+
+fn load_fpu_control_word(control: u16) {
+ unsafe {
+ asm!("fldcw [{}]", in(reg) &control, options(nostack));
+ }
+}
+```
+
+## Labels
+
+Any reuse of a named label, local or otherwise, can result in an assembler or linker error or may cause other strange behavior. Reuse of a named label can happen in a variety of ways including:
+
+- explicitly: using a label more than once in one `asm!` block, or multiple times across blocks.
+- implicitly via inlining: the compiler is allowed to instantiate multiple copies of an `asm!` block, for example when the function containing it is inlined in multiple places.
+- implicitly via LTO: LTO can cause code from *other crates* to be placed in the same codegen unit, and so could bring in arbitrary labels.
+
+As a consequence, you should only use GNU assembler **numeric** [local labels] inside inline assembly code. Defining symbols in assembly code may lead to assembler and/or linker errors due to duplicate symbol definitions.
+
+Moreover, on x86 when using the default Intel syntax, due to [an LLVM bug], you shouldn't use labels exclusively made of `0` and `1` digits, e.g. `0`, `11` or `101010`, as they may end up being interpreted as binary values. Using `options(att_syntax)` will avoid any ambiguity, but that affects the syntax of the _entire_ `asm!` block. (See [Options](#options), below, for more on `options`.)
+
+```rust
+use std::arch::asm;
+
+let mut a = 0;
+unsafe {
+ asm!(
+ "mov {0}, 10",
+ "2:",
+ "sub {0}, 1",
+ "cmp {0}, 3",
+ "jle 2f",
+ "jmp 2b",
+ "2:",
+ "add {0}, 2",
+ out(reg) a
+ );
+}
+assert_eq!(a, 5);
+```
+
+This will decrement the `{0}` register value from 10 to 3, then add 2 and store it in `a`.
+
+This example shows a few things:
+
+- First, that the same number can be used as a label multiple times in the same inline block.
+- Second, that when a numeric label is used as a reference (as an instruction operand, for example), the suffixes “b” (“backward”) or ”f” (“forward”) should be added to the numeric label. It will then refer to the nearest label defined by this number in this direction.
+
+[local labels]: https://sourceware.org/binutils/docs/as/Symbol-Names.html#Local-Labels
+[an LLVM bug]: https://bugs.llvm.org/show_bug.cgi?id=36144
+
+## Options
+
+By default, an inline assembly block is treated the same way as an external FFI function call with a custom calling convention: it may read/write memory, have observable side effects, etc. However, in many cases it is desirable to give the compiler more information about what the assembly code is actually doing so that it can optimize better.
+
+Let's take our previous example of an `add` instruction:
+
+```rust
+use std::arch::asm;
+
+let mut a: u64 = 4;
+let b: u64 = 4;
+unsafe {
+ asm!(
+ "add {0}, {1}",
+ inlateout(reg) a, in(reg) b,
+ options(pure, nomem, nostack),
+ );
+}
+assert_eq!(a, 8);
+```
+
+Options can be provided as an optional final argument to the `asm!` macro. We specified three options here:
+- `pure` means that the asm code has no observable side effects and that its output depends only on its inputs. This allows the compiler optimizer to call the inline asm fewer times or even eliminate it entirely.
+- `nomem` means that the asm code does not read or write to memory. By default the compiler will assume that inline assembly can read or write any memory address that is accessible to it (e.g. through a pointer passed as an operand, or a global).
+- `nostack` means that the asm code does not push any data onto the stack. This allows the compiler to use optimizations such as the stack red zone on x86-64 to avoid stack pointer adjustments.
+
+These allow the compiler to better optimize code using `asm!`, for example by eliminating pure `asm!` blocks whose outputs are not needed.
+
+See the [reference](../../reference/inline-assembly.html) for the full list of available options and their effects.
diff --git a/src/doc/rust-by-example/src/variable_bindings.md b/src/doc/rust-by-example/src/variable_bindings.md
new file mode 100644
index 000000000..4e23c11c8
--- /dev/null
+++ b/src/doc/rust-by-example/src/variable_bindings.md
@@ -0,0 +1,31 @@
+# Variable Bindings
+
+Rust provides type safety via static typing. Variable bindings can be type
+annotated when declared. However, in most cases, the compiler will be able
+to infer the type of the variable from the context, heavily reducing the
+annotation burden.
+
+Values (like literals) can be bound to variables, using the `let` binding.
+
+```rust,editable
+fn main() {
+ let an_integer = 1u32;
+ let a_boolean = true;
+ let unit = ();
+
+ // copy `an_integer` into `copied_integer`
+ let copied_integer = an_integer;
+
+ println!("An integer: {:?}", copied_integer);
+ println!("A boolean: {:?}", a_boolean);
+ println!("Meet the unit value: {:?}", unit);
+
+ // The compiler warns about unused variable bindings; these warnings can
+ // be silenced by prefixing the variable name with an underscore
+ let _unused_variable = 3u32;
+
+ let noisy_unused_variable = 2u32;
+ // FIXME ^ Prefix with an underscore to suppress the warning
+ // Please note that warnings may not be shown in a browser
+}
+```
diff --git a/src/doc/rust-by-example/src/variable_bindings/declare.md b/src/doc/rust-by-example/src/variable_bindings/declare.md
new file mode 100644
index 000000000..e9dee6a13
--- /dev/null
+++ b/src/doc/rust-by-example/src/variable_bindings/declare.md
@@ -0,0 +1,34 @@
+# Declare first
+
+It's possible to declare variable bindings first, and initialize them later.
+However, this form is seldom used, as it may lead to the use of uninitialized
+variables.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ // Declare a variable binding
+ let a_binding;
+
+ {
+ let x = 2;
+
+ // Initialize the binding
+ a_binding = x * x;
+ }
+
+ println!("a binding: {}", a_binding);
+
+ let another_binding;
+
+ // Error! Use of uninitialized binding
+ println!("another binding: {}", another_binding);
+ // FIXME ^ Comment out this line
+
+ another_binding = 1;
+
+ println!("another binding: {}", another_binding);
+}
+```
+
+The compiler forbids use of uninitialized variables, as this would lead to
+undefined behavior.
diff --git a/src/doc/rust-by-example/src/variable_bindings/freeze.md b/src/doc/rust-by-example/src/variable_bindings/freeze.md
new file mode 100644
index 000000000..b399570ff
--- /dev/null
+++ b/src/doc/rust-by-example/src/variable_bindings/freeze.md
@@ -0,0 +1,24 @@
+# Freezing
+
+When data is bound by the same name immutably, it also *freezes*. *Frozen* data can't be
+modified until the immutable binding goes out of scope:
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ let mut _mutable_integer = 7i32;
+
+ {
+ // Shadowing by immutable `_mutable_integer`
+ let _mutable_integer = _mutable_integer;
+
+ // Error! `_mutable_integer` is frozen in this scope
+ _mutable_integer = 50;
+ // FIXME ^ Comment out this line
+
+ // `_mutable_integer` goes out of scope
+ }
+
+ // Ok! `_mutable_integer` is not frozen in this scope
+ _mutable_integer = 3;
+}
+```
diff --git a/src/doc/rust-by-example/src/variable_bindings/mut.md b/src/doc/rust-by-example/src/variable_bindings/mut.md
new file mode 100644
index 000000000..0925132f2
--- /dev/null
+++ b/src/doc/rust-by-example/src/variable_bindings/mut.md
@@ -0,0 +1,24 @@
+# Mutability
+
+Variable bindings are immutable by default, but this can be overridden using
+the `mut` modifier.
+
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ let _immutable_binding = 1;
+ let mut mutable_binding = 1;
+
+ println!("Before mutation: {}", mutable_binding);
+
+ // Ok
+ mutable_binding += 1;
+
+ println!("After mutation: {}", mutable_binding);
+
+ // Error!
+ _immutable_binding += 1;
+ // FIXME ^ Comment out this line
+}
+```
+
+The compiler will throw a detailed diagnostic about mutability errors.
diff --git a/src/doc/rust-by-example/src/variable_bindings/scope.md b/src/doc/rust-by-example/src/variable_bindings/scope.md
new file mode 100644
index 000000000..9e3c79e3e
--- /dev/null
+++ b/src/doc/rust-by-example/src/variable_bindings/scope.md
@@ -0,0 +1,46 @@
+# Scope and Shadowing
+
+Variable bindings have a scope, and are constrained to live in a *block*. A
+block is a collection of statements enclosed by braces `{}`.
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ // This binding lives in the main function
+ let long_lived_binding = 1;
+
+ // This is a block, and has a smaller scope than the main function
+ {
+ // This binding only exists in this block
+ let short_lived_binding = 2;
+
+ println!("inner short: {}", short_lived_binding);
+ }
+ // End of the block
+
+ // Error! `short_lived_binding` doesn't exist in this scope
+ println!("outer short: {}", short_lived_binding);
+ // FIXME ^ Comment out this line
+
+ println!("outer long: {}", long_lived_binding);
+}
+```
+Also, [variable shadowing][variable-shadow] is allowed.
+```rust,editable,ignore,mdbook-runnable
+fn main() {
+ let shadowed_binding = 1;
+
+ {
+ println!("before being shadowed: {}", shadowed_binding);
+
+ // This binding *shadows* the outer one
+ let shadowed_binding = "abc";
+
+ println!("shadowed in inner block: {}", shadowed_binding);
+ }
+ println!("outside inner block: {}", shadowed_binding);
+
+ // This binding *shadows* the previous binding
+ let shadowed_binding = 2;
+ println!("shadowed in outer block: {}", shadowed_binding);
+}
+```
+[variable-shadow]: https://en.wikipedia.org/wiki/Variable_shadowing
diff --git a/src/doc/rust-by-example/triagebot.toml b/src/doc/rust-by-example/triagebot.toml
new file mode 100644
index 000000000..fa0824ac5
--- /dev/null
+++ b/src/doc/rust-by-example/triagebot.toml
@@ -0,0 +1 @@
+[assign]
diff --git a/src/doc/rust.css b/src/doc/rust.css
new file mode 100644
index 000000000..d33ab0326
--- /dev/null
+++ b/src/doc/rust.css
@@ -0,0 +1,355 @@
+/* General structure */
+
+body {
+ margin: 0 auto;
+ padding: 0 15px;
+ font-size: 18px;
+ color: #333;
+ line-height: 1.428571429;
+
+ -webkit-box-sizing: unset;
+ -moz-box-sizing: unset;
+ box-sizing: unset;
+}
+@media (min-width: 768px) {
+ body {
+ max-width: 750px;
+ }
+}
+
+h2, h3, h4, h5, h6 {
+ font-weight: 400;
+ line-height: 1.1;
+}
+h1, h2, h3 {
+ margin-top: 20px;
+ margin-bottom: 15px;
+}
+h1 {
+ margin-bottom: 20px;
+ line-height: 1.1;
+}
+h4, h5, h6 {
+ margin-top: 12px;
+ margin-bottom: 10px;
+ padding: 5px 10px;
+}
+h5, h6 {
+ color: black;
+ text-decoration: underline;
+}
+
+h1 {
+ font-size: 28px;
+ font-weight: 500;
+ padding: .1em .4em;
+ border-bottom: 2px solid #ddd;
+}
+h1.title {
+ line-height: 1.5em;
+}
+h2 {
+ font-size: 26px;
+ padding: .2em .5em;
+ border-bottom: 1px solid #ddd;
+}
+h3 {
+ font-size: 24px;
+ padding: .2em .7em;
+ border-bottom: 1px solid #DDE8FC;
+}
+h4 {
+ font-size: 22px;
+ border-bottom: none;
+}
+h5 {
+ font-size: 20px;
+}
+h6 {
+ font-size: 18px;
+}
+@media (min-width: 992px) {
+ h1 {
+ font-size: 36px;
+ }
+ h2 {
+ font-size: 30px;
+ }
+ h3 {
+ font-size: 26px;
+ }
+}
+
+nav {
+ column-count: 2;
+ -moz-column-count: 2;
+ -webkit-column-count: 2;
+ font-size: 15px;
+ margin: 0 0 1em 0;
+}
+p {
+ margin: 0 0 1em 0;
+}
+
+strong {
+ font-weight: bold;
+}
+
+em {
+ font-style: italic;
+}
+
+footer {
+ border-top: 1px solid #ddd;
+ font-size: 14px;
+ font-style: italic;
+ padding-top: 5px;
+ margin-top: 3em;
+ margin-bottom: 1em;
+}
+
+/* Links layout */
+
+a {
+ text-decoration: none;
+ color: #428BCA;
+ background: transparent;
+}
+a:hover, a:focus {
+ color: #2A6496;
+ text-decoration: underline;
+}
+a:focus {
+ outline: thin dotted #333;
+ outline: 5px auto -webkit-focus-ring-color;
+ outline-offset: -2px;
+}
+a:hover, a:active {
+ outline: 0;
+}
+
+h1 a:link, h1 a:visited, h2 a:link, h2 a:visited,
+h3 a:link, h3 a:visited, h4 a:link, h4 a:visited,
+h5 a:link, h5 a:visited {color: black;}
+
+/* Code */
+
+pre, code {
+ word-wrap: break-word;
+}
+pre {
+ border-left: 2px solid #eee;
+ white-space: pre-wrap;
+ padding-right: 0;
+ margin: 20px 0;
+ font-size: 15px;
+ word-break: break-all;
+}
+code {
+ padding: 0 2px;
+ color: #8D1A38;
+}
+pre code {
+ padding: 0;
+ font-size: inherit;
+ color: inherit;
+}
+
+a > code {
+ color: #428BCA;
+}
+
+.section-header > a > code {
+ color: #8D1A38;
+}
+
+#versioninfo {
+ text-align: center;
+ margin: 0.5em;
+ font-size: 1.1em;
+}
+@media (min-width: 992px) {
+ #versioninfo {
+ font-size: 0.8em;
+ position: fixed;
+ bottom: 0px;
+ right: 0px;
+ }
+ .white-sticker {
+ background-color: #fff;
+ margin: 2px;
+ padding: 0 2px;
+ border-radius: .2em;
+ }
+}
+#versioninfo a.hash {
+ color: gray;
+ font-size: 80%;
+}
+
+blockquote {
+ color: #000;
+ margin: 20px 0;
+ padding: 15px 20px;
+ background-color: #f2f7f9;
+ border-top: .1em solid #e5eef2;
+ border-bottom: .1em solid #e5eef2;
+}
+blockquote p {
+ font-size: 17px;
+ font-weight: 300;
+ line-height: 1.4;
+}
+blockquote p:last-child {
+ margin-bottom: 0;
+}
+
+ul ul, ol ul, ul ol, ol ol {
+ margin-bottom: 0;
+}
+dl {
+ margin-bottom: 20px;
+}
+dd {
+ margin-left: 0;
+}
+
+nav ul {
+ list-style-type: none;
+ margin: 0;
+ padding-left: 0px;
+}
+
+/* Only display one level of hierarchy in the TOC */
+nav ul ul {
+ display: none;
+}
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+}
+
+hr {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ border: 0;
+ border-top: 1px solid #eeeeee;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow-x: auto;
+ display: block;
+}
+
+table tr.odd {
+ background: #eee;
+}
+
+table td,
+table th {
+ border: 1px solid #ddd;
+ padding: 5px;
+}
+
+/* Code snippets */
+
+a.test-arrow {
+ color: #f5f5f5
+}
+
+.unstable-feature {
+ border: 2px solid red;
+ padding: 5px;
+}
+
+@media (min-width: 1170px) {
+ pre {
+ font-size: 15px;
+ }
+}
+
+@media print {
+ * {
+ text-shadow: none !important;
+ color: #000 !important;
+ background: transparent !important;
+ box-shadow: none !important;
+ }
+ a, a:visited {
+ text-decoration: underline;
+ }
+ p a[href]:after {
+ content: " (" attr(href) ")";
+ }
+ footer a[href]:after {
+ content: "";
+ }
+ a[href^="javascript:"]:after, a[href^="#"]:after {
+ content: "";
+ }
+ pre, blockquote {
+ border: 1px solid #999;
+ page-break-inside: avoid;
+ }
+ @page {
+ margin: 2cm .5cm;
+ }
+ h1:not(.title), h2, h3 {
+ border-bottom: 0px none;
+ }
+ p, h2, h3 {
+ orphans: 3;
+ widows: 3;
+ }
+ h2, h3 {
+ page-break-after: avoid;
+ }
+ table {
+ border-collapse: collapse !important;
+ }
+ table td, table th {
+ background-color: #fff !important;
+ }
+}
+
+#keyword-table-marker + table thead { display: none; }
+#keyword-table-marker + table td { border: none; }
+#keyword-table-marker + table {
+ margin-left: 2em;
+ margin-bottom: 1em;
+}
+
+.error-described {
+ position: relative;
+}
+
+.tooltip .tooltiptext {
+ width: 120px;
+ display: none;
+ text-align: center;
+ padding: 5px 3px;
+ border-radius: 6px;
+ margin-left: 5px;
+ top: -5px;
+ left: 105%;
+ z-index: 1;
+}
+
+.tooltip:hover .tooltiptext {
+ display: inline;
+}
+
+.tooltip .tooltiptext::after {
+ content: " ";
+ position: absolute;
+ top: 50%;
+ left: 13px;
+ margin-top: -5px;
+ border-width: 5px;
+ border-style: solid;
+}
diff --git a/src/doc/rust.md b/src/doc/rust.md
new file mode 100644
index 000000000..5008b228c
--- /dev/null
+++ b/src/doc/rust.md
@@ -0,0 +1,3 @@
+% The Rust Reference Manual
+
+The manual has moved, and is now called [the reference](reference/index.html).
diff --git a/src/doc/rustc-dev-guide/.editorconfig b/src/doc/rustc-dev-guide/.editorconfig
new file mode 100644
index 000000000..cb3312517
--- /dev/null
+++ b/src/doc/rustc-dev-guide/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[src/*]
+end_of_line = lf
+insert_final_newline = true
+
+[ci/*.sh]
+indent_style = space
+indent_size = 2
diff --git a/src/doc/rustc-dev-guide/.github/workflows/ci.yml b/src/doc/rustc-dev-guide/.github/workflows/ci.yml
new file mode 100644
index 000000000..c571d408d
--- /dev/null
+++ b/src/doc/rustc-dev-guide/.github/workflows/ci.yml
@@ -0,0 +1,80 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ schedule:
+ # Run at 18:00 UTC every day
+ - cron: '0 18 * * *'
+
+jobs:
+ ci:
+ if: github.repository == 'rust-lang/rustc-dev-guide'
+ runs-on: ubuntu-latest
+ env:
+ MDBOOK_VERSION: 0.4.12
+ MDBOOK_LINKCHECK_VERSION: 0.7.2
+ MDBOOK_MERMAID_VERSION: 0.10.0
+ MDBOOK_TOC_VERSION: 0.6.1
+ DEPLOY_DIR: book/html
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ # linkcheck needs the base commit.
+ fetch-depth: 0
+
+ - name: Cache binaries
+ id: mdbook-cache
+ uses: actions/cache@v2
+ with:
+ path: |
+ ~/.cargo/bin
+ key: ${{ runner.os }}-${{ env.MDBOOK_VERSION }}--${{ env.MDBOOK_LINKCHECK_VERSION }}--${{ env.MDBOOK_TOC_VERSION }}--${{ env.MDBOOK_MERMAID_VERSION }}
+
+ - name: Cache linkcheck
+ uses: actions/cache@v2
+ with:
+ path: |
+ ~/book/linkcheck
+ key: ${{ runner.os }}-${{ hashFiles('./book/linkcheck') }}
+
+ - name: Check line lengths
+ if: github.event_name != 'push'
+ run: |
+ shopt -s globstar
+ MAX_LINE_LENGTH=100 bash ci/check_line_lengths.sh src/**/*.md
+
+ - name: Install latest nightly Rust toolchain
+ if: steps.mdbook-cache.outputs.cache-hit != 'true'
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+
+ - name: Install Dependencies
+ if: steps.mdbook-cache.outputs.cache-hit != 'true'
+ run: |
+ cargo install mdbook --version ${{ env.MDBOOK_VERSION }}
+ cargo install mdbook-linkcheck --version ${{ env.MDBOOK_LINKCHECK_VERSION }}
+ cargo install mdbook-toc --version ${{ env.MDBOOK_TOC_VERSION }}
+ cargo install mdbook-mermaid --version ${{ env.MDBOOK_MERMAID_VERSION }}
+
+ - name: Check build
+ run: mdbook build
+
+ - name: Deploy to gh-pages
+ if: github.event_name == 'push'
+ run: |
+ touch "${{ env.DEPLOY_DIR }}/.nojekyll"
+ cp CNAME "${{ env.DEPLOY_DIR }}"
+ cd "${{ env.DEPLOY_DIR }}"
+ rm -rf .git
+ git init
+ git config user.name "Deploy from CI"
+ git config user.email ""
+ git add .
+ git commit -m "Deploy ${GITHUB_SHA} to gh-pages"
+ git push --quiet -f "https://x-token:${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}" HEAD:gh-pages
diff --git a/src/doc/rustc-dev-guide/.github/workflows/date-check.yml b/src/doc/rustc-dev-guide/.github/workflows/date-check.yml
new file mode 100644
index 000000000..b808876a4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/.github/workflows/date-check.yml
@@ -0,0 +1,49 @@
+name: Date-Check
+
+on:
+ schedule:
+ # Run at noon UTC every 1st of the month
+ - cron: '00 12 01 * *'
+
+ # Allow manually starting the workflow
+ workflow_dispatch:
+
+jobs:
+ date-check:
+ if: github.repository == 'rust-lang/rustc-dev-guide'
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+
+ - name: Ensure Rust is up-to-date
+ run: |
+ rustup update stable
+
+ - name: Run `date-check`
+ working-directory: ci/date-check
+ run: |
+ cargo run -- ../../src/ > ../../date-check-output.txt
+
+ - name: Open issue
+ uses: actions/github-script@v3
+ with:
+ github-token: ${{secrets.GITHUB_TOKEN}}
+ script: |
+ const fs = require('fs');
+
+ const rawText = fs.readFileSync('date-check-output.txt', { encoding: 'utf8' });
+ const title = rawText.split('\n')[0];
+ if (title != 'empty') {
+ const body = rawText.split('\n').slice(1).join('\n');
+ github.issues.create({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ title,
+ body,
+ });
+ console.log('Opened issue.');
+ } else {
+ console.log('No dates to triage.');
+ }
diff --git a/src/doc/rustc-dev-guide/CNAME b/src/doc/rustc-dev-guide/CNAME
new file mode 100644
index 000000000..a59cd86cd
--- /dev/null
+++ b/src/doc/rustc-dev-guide/CNAME
@@ -0,0 +1 @@
+rustc-dev-guide.rust-lang.org
diff --git a/src/doc/rustc-dev-guide/CODE_OF_CONDUCT.md b/src/doc/rustc-dev-guide/CODE_OF_CONDUCT.md
new file mode 100644
index 000000000..42f287fbb
--- /dev/null
+++ b/src/doc/rustc-dev-guide/CODE_OF_CONDUCT.md
@@ -0,0 +1,3 @@
+# The Rust Code of Conduct
+
+This repository follows the [Code of Conduct](https://www.rust-lang.org/conduct.html) of the Rust organization.
diff --git a/src/doc/rustc-dev-guide/LICENSE-APACHE b/src/doc/rustc-dev-guide/LICENSE-APACHE
new file mode 100644
index 000000000..16fe87b06
--- /dev/null
+++ b/src/doc/rustc-dev-guide/LICENSE-APACHE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/src/doc/rustc-dev-guide/LICENSE-MIT b/src/doc/rustc-dev-guide/LICENSE-MIT
new file mode 100644
index 000000000..31aa79387
--- /dev/null
+++ b/src/doc/rustc-dev-guide/LICENSE-MIT
@@ -0,0 +1,23 @@
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/src/doc/rustc-dev-guide/README.md b/src/doc/rustc-dev-guide/README.md
new file mode 100644
index 000000000..006ea3231
--- /dev/null
+++ b/src/doc/rustc-dev-guide/README.md
@@ -0,0 +1,127 @@
+[![CI](https://github.com/rust-lang/rustc-dev-guide/actions/workflows/ci.yml/badge.svg)](https://github.com/rust-lang/rustc-dev-guide/actions/workflows/ci.yml)
+
+
+This is a collaborative effort to build a guide that explains how rustc
+works. The aim of the guide is to help new contributors get oriented
+to rustc, as well as to help more experienced folks in figuring out
+some new part of the compiler that they haven't worked on before.
+
+[You can read the latest version of the guide here.](https://rustc-dev-guide.rust-lang.org/)
+
+You may also find the rustdocs [for the compiler itself][rustdocs] useful.
+Note that these are not intended as a guide; it's recommended that you search
+for the docs you're looking for instead of reading them top to bottom.
+
+[rustdocs]: https://doc.rust-lang.org/nightly/nightly-rustc
+
+For documentation on developing the standard library, see
+[`std-dev-guide`](https://std-dev-guide.rust-lang.org/).
+
+### Contributing to the guide
+
+The guide is useful today, but it has a lot of work still to go.
+
+If you'd like to help improve the guide, we'd love to have you! You can find
+plenty of issues on the [issue
+tracker](https://github.com/rust-lang/rustc-dev-guide/issues). Just post a
+comment on the issue you would like to work on to make sure that we don't
+accidentally duplicate work. If you think something is missing, please open an
+issue about it!
+
+**In general, if you don't know how the compiler works, that is not a
+problem!** In that case, what we will do is to schedule a bit of time
+for you to talk with someone who **does** know the code, or who wants
+to pair with you and figure it out. Then you can work on writing up
+what you learned.
+
+In general, when writing about a particular part of the compiler's code, we
+recommend that you link to the relevant parts of the [rustc
+rustdocs][rustdocs].
+
+### Build Instructions
+
+To build a local static HTML site, install [`mdbook`](https://github.com/rust-lang/mdBook) with:
+
+```
+> cargo install mdbook mdbook-linkcheck mdbook-toc
+```
+
+and execute the following command in the root of the repository:
+
+```
+> mdbook build
+```
+
+The build files are found in the `book` directory.
+
+### Link Validations
+
+We use `mdbook-linkcheck` to validate URLs included in our documentation.
+`linkcheck` will be run automatically when you build with the instructions in the section above.
+
+### Table of Contents
+
+We use `mdbook-toc` to auto-generate TOCs for long sections. You can invoke the preprocessor by
+including the `<!-- toc -->` marker at the place where you want the TOC.
+
+### Pre-commit script
+
+We also test that line lengths are less than 100 columns. To test this locally,
+you can run `ci/check_line_lengths.sh`.
+
+You can also set this to run automatically.
+
+On Linux:
+
+```bash
+ln -s ../../ci/check_line_lengths.sh .git/hooks/pre-commit
+```
+
+On Windows:
+
+```powershell
+New-Item -Path .git/hooks/pre-commit -ItemType HardLink -Value <absolute_path/to/check_line_lengths.sh>
+```
+
+## How to fix toolstate failures
+
+> **NOTE**: Currently, we do not track the rustc-dev-guide toolstate due to
+[spurious failures](https://github.com/rust-lang/rust/pull/71731),
+but we leave these instructions for when we do it again in the future.
+
+1. You will get a ping from the toolstate commit. e.g. https://github.com/rust-lang-nursery/rust-toolstate/commit/8ffa0e4c30ac9ba8546b7046e5c4ccc2b96ebdd4
+
+2. The commit contains a link to the PR that caused the breakage. e.g. https://github.com/rust-lang/rust/pull/64321
+
+3. If you go to that PR's thread, there is a post from bors with a link to the CI status: https://github.com/rust-lang/rust/pull/64321#issuecomment-529763807
+
+4. Follow the check-actions link to get to the Actions page for that build
+
+5. There will be approximately 1 billion different jobs for the build. They are for different configurations and platforms. The rustc-dev-guide build only runs on the Linux x86_64-gnu-tools job. So click on that job in the list, which is about 60% down in the list.
+
+6. Click the Run build step in the job to get the console log for the step.
+
+7. Click on the log and Ctrl-f to get a search box in the log
+
+8. Search for rustc-dev-guide. This gets you to the place where the links are checked. It is usually ~11K lines into the log.
+
+9. Look at the links in the log near that point in the log
+
+10. Fix those links in the rustc-dev-guide (by making a PR in the rustc-dev-guide repo)
+
+11. Make a PR on the rust-lang/rust repo to update the rustc-dev-guide git submodule in src/docs/rustc-dev-guide.
+To make a PR, the following steps are useful.
+
+```bash
+# Assuming you already cloned the rust-lang/rust repo and you're in the correct directory
+git submodule update --remote src/doc/rustc-dev-guide
+git add -u
+git commit -m "Update rustc-dev-guide"
+# Note that you can use -i, which is short for --incremental, in the following command
+./x.py test --incremental src/doc/rustc-dev-guide # This is optional and should succeed anyway
+# Open a PR in rust-lang/rust
+```
+
+12. Wait for PR to merge
+
+Voilà!
diff --git a/src/doc/rustc-dev-guide/book.toml b/src/doc/rustc-dev-guide/book.toml
new file mode 100644
index 000000000..51dc8ecb0
--- /dev/null
+++ b/src/doc/rustc-dev-guide/book.toml
@@ -0,0 +1,45 @@
+[book]
+title = "Guide to Rustc Development"
+author = "Rustc developers"
+description = "A guide to developing rustc"
+
+[build]
+create-missing = false
+
+[preprocessor.toc]
+command = "mdbook-toc"
+renderer = ["html"]
+
+[preprocessor.mermaid]
+command = "mdbook-mermaid"
+
+[output.html]
+git-repository-url = "https://github.com/rust-lang/rustc-dev-guide"
+edit-url-template = "https://github.com/rust-lang/rustc-dev-guide/tree/master/{path}?mode=edit"
+additional-js = ["mermaid.min.js", "mermaid-init.js"]
+
+[output.html.fold]
+enable = true
+level = 0
+
+[output.linkcheck]
+command = "ci/linkcheck.sh"
+follow-web-links = true
+exclude = [
+ "crates\\.io",
+ "gcc\\.godbolt\\.org",
+ "youtube\\.com",
+ "youtu\\.be",
+ "dl\\.acm\\.org",
+ "cs\\.bgu\\.ac\\.il",
+ "www\\.amazon\\.com",
+ "www\\.rustaceans\\.org",
+ "play\\.rust-lang\\.org",
+ "tomlee\\.co"
+]
+cache-timeout = 86400
+warning-policy = "error"
+
+[output.html.redirect]
+"/compiletest.html" = "tests/compiletest.html"
+"/diagnostics/sessiondiagnostic.html" = "diagnostics/diagnostic-structs.html"
diff --git a/src/doc/rustc-dev-guide/ci/check-in.sh b/src/doc/rustc-dev-guide/ci/check-in.sh
new file mode 100755
index 000000000..4477789c7
--- /dev/null
+++ b/src/doc/rustc-dev-guide/ci/check-in.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+set -eu
+
+# This is not a very smart script
+if [ $# != 2 ]; then
+ echo "usage: $0 <since> <number-of-prs-merged>"
+ if [ $# = 0 ]; then
+ echo "help: you can find the last check-in at" \
+ "https://rust-lang.zulipchat.com/#narrow/stream/238009-t-compiler.2Fmeetings/search/wg-rustc-dev-guide"
+ elif [ $# = 1 ] ; then
+ echo "help: you can find the number of PRs merged at" \
+ "https://github.com/rust-lang/rustc-dev-guide/pulls?q=is%3Apr+is%3Amerged+updated%3A%3E$1"
+ fi
+ exit 1
+fi
+
+curl() {
+ command curl -s "$@"
+}
+
+# Get recently updated PRs
+curl "https://api.github.com/repos/rust-lang/rustc-dev-guide/pulls?state=closed&per_page=$2" \
+ | jq '[.[] | select(.merged_at > "'"$1"'")]' > pulls.json
+
+show_pulls() {
+ jq -r '.[] | { title, number, html_url, user: .user.login } | "- " + .title + " [#" + (.number | tostring) + "](" + .html_url + ")"'
+}
+
+echo "### Most notable changes"
+echo
+show_pulls < pulls.json
+echo
+echo "### Most notable WIPs"
+echo
+# If there are more than 30 PRs open at a time, you'll need to set `per_page`.
+# For now this seems unlikely.
+curl "https://api.github.com/repos/rust-lang/rustc-dev-guide/pulls?state=open" | show_pulls
diff --git a/src/doc/rustc-dev-guide/ci/check_line_lengths.sh b/src/doc/rustc-dev-guide/ci/check_line_lengths.sh
new file mode 100755
index 000000000..31cda5c65
--- /dev/null
+++ b/src/doc/rustc-dev-guide/ci/check_line_lengths.sh
@@ -0,0 +1,43 @@
+#!/usr/bin/env bash
+
+if [ "$1" == "--help" ]; then
+ echo 'Usage:' "[MAX_LINE_LENGTH=n] $0 [file ...]"
+ exit 1
+fi
+
+if [ "$MAX_LINE_LENGTH" == "" ]; then
+ MAX_LINE_LENGTH=100
+fi
+
+if [ "$1" == "" ]; then
+ shopt -s globstar
+ files=( src/**/*.md )
+else
+ files=( "$@" )
+fi
+
+echo "Checking line lengths in all source files <= $MAX_LINE_LENGTH chars..."
+
+echo "Offending files and lines:"
+(( bad_lines = 0 ))
+(( inside_block = 0 ))
+for file in "${files[@]}"; do
+ echo "$file"
+ (( line_no = 0 ))
+ while IFS="" read -r line || [[ -n "$line" ]] ; do
+ (( line_no++ ))
+ if [[ "$line" =~ ^'```' ]] ; then
+ (( inside_block = !$inside_block ))
+ continue
+ fi
+ if ! (( $inside_block )) \
+ && ! [[ "$line" =~ " | "|"-|-"|"://"|"]:"|\[\^[^\ ]+\]: ]] \
+ && (( "${#line}" > $MAX_LINE_LENGTH )) ; then
+ (( bad_lines++ ))
+ echo -e "\t$line_no : $line"
+ fi
+ done < "$file"
+done
+
+echo "$bad_lines offending lines found."
+(( $bad_lines == 0 ))
diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock b/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock
new file mode 100644
index 000000000..00fa3def8
--- /dev/null
+++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.lock
@@ -0,0 +1,133 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aho-corasick"
+version = "0.7.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
+dependencies = [
+ "memchr",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
+
+[[package]]
+name = "chrono"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
+dependencies = [
+ "libc",
+ "num-integer",
+ "num-traits",
+ "time",
+ "winapi",
+]
+
+[[package]]
+name = "date-check"
+version = "0.1.0"
+dependencies = [
+ "chrono",
+ "glob",
+ "regex",
+]
+
+[[package]]
+name = "glob"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
+
+[[package]]
+name = "libc"
+version = "0.2.82"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89203f3fba0a3795506acaad8ebce3c80c0af93f994d5a1d7a0b1eeb23271929"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "num-integer"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
+dependencies = [
+ "autocfg",
+ "num-traits",
+]
+
+[[package]]
+name = "num-traits"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
+dependencies = [
+ "autocfg",
+]
+
+[[package]]
+name = "regex"
+version = "1.5.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.6.26"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49b3de9ec5dc0a3417da371aab17d729997c15010e7fd24ff707773a33bddb64"
+
+[[package]]
+name = "time"
+version = "0.1.44"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
+dependencies = [
+ "libc",
+ "wasi",
+ "winapi",
+]
+
+[[package]]
+name = "wasi"
+version = "0.10.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
diff --git a/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml
new file mode 100644
index 000000000..472529511
--- /dev/null
+++ b/src/doc/rustc-dev-guide/ci/date-check/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "date-check"
+version = "0.1.0"
+authors = ["Noah Lev <camelidcamel@gmail.com>"]
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+glob = "0.3"
+regex = "1"
+chrono = "0.4"
diff --git a/src/doc/rustc-dev-guide/ci/date-check/src/main.rs b/src/doc/rustc-dev-guide/ci/date-check/src/main.rs
new file mode 100644
index 000000000..bbea2bf38
--- /dev/null
+++ b/src/doc/rustc-dev-guide/ci/date-check/src/main.rs
@@ -0,0 +1,242 @@
+use std::{
+ collections::BTreeMap,
+ convert::TryInto as _,
+ env, fmt, fs,
+ path::{Path, PathBuf},
+};
+
+use chrono::{Datelike as _, TimeZone as _, Utc};
+use glob::glob;
+use regex::Regex;
+
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+struct Date {
+ year: u32,
+ month: u32,
+}
+
+impl Date {
+ fn months_since(self, other: Date) -> Option<u32> {
+ let self_chrono = Utc.ymd(self.year.try_into().unwrap(), self.month, 1);
+ let other_chrono = Utc.ymd(other.year.try_into().unwrap(), other.month, 1);
+ let duration_since = self_chrono.signed_duration_since(other_chrono);
+ let months_since = duration_since.num_days() / 30;
+ if months_since < 0 {
+ None
+ } else {
+ Some(months_since.try_into().unwrap())
+ }
+ }
+}
+
+impl fmt::Display for Date {
+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+ write!(f, "{:04}-{:02}", self.year, self.month)
+ }
+}
+
+fn make_date_regex() -> Regex {
+ Regex::new(
+ r"(?x) # insignificant whitespace mode
+ <!--\s*
+ [dD]ate:\s*
+ (?P<y>\d{4}) # year
+ -
+ (?P<m>\d{2}) # month
+ \s*-->",
+ )
+ .unwrap()
+}
+
+fn collect_dates_from_file(date_regex: &Regex, text: &str) -> Vec<(usize, Date)> {
+ let mut line = 1;
+ let mut end_of_last_cap = 0;
+ date_regex
+ .captures_iter(&text)
+ .map(|cap| {
+ (
+ cap.get(0).unwrap().range(),
+ Date {
+ year: cap["y"].parse().unwrap(),
+ month: cap["m"].parse().unwrap(),
+ },
+ )
+ })
+ .map(|(byte_range, date)| {
+ line += text[end_of_last_cap..byte_range.end]
+ .chars()
+ .filter(|c| *c == '\n')
+ .count();
+ end_of_last_cap = byte_range.end;
+ (line, date)
+ })
+ .collect()
+}
+
+fn collect_dates(paths: impl Iterator<Item = PathBuf>) -> BTreeMap<PathBuf, Vec<(usize, Date)>> {
+ let date_regex = make_date_regex();
+ let mut data = BTreeMap::new();
+ for path in paths {
+ let text = fs::read_to_string(&path).unwrap();
+ let dates = collect_dates_from_file(&date_regex, &text);
+ if !dates.is_empty() {
+ data.insert(path, dates);
+ }
+ }
+ data
+}
+
+fn filter_dates(
+ current_month: Date,
+ min_months_since: u32,
+ dates_by_file: impl Iterator<Item = (PathBuf, Vec<(usize, Date)>)>,
+) -> impl Iterator<Item = (PathBuf, Vec<(usize, Date)>)> {
+ dates_by_file
+ .map(move |(path, dates)| {
+ (
+ path,
+ dates
+ .into_iter()
+ .filter(|(_, date)| {
+ current_month
+ .months_since(*date)
+ .expect("found date that is after current month")
+ >= min_months_since
+ })
+ .collect::<Vec<_>>(),
+ )
+ })
+ .filter(|(_, dates)| !dates.is_empty())
+}
+
+fn main() {
+ let root_dir = env::args()
+ .nth(1)
+ .expect("expect root Markdown directory as CLI argument");
+ let root_dir_path = Path::new(&root_dir);
+ let glob_pat = format!("{}/**/*.md", root_dir);
+ let today_chrono = Utc::today();
+ let current_month = Date {
+ year: today_chrono.year_ce().1,
+ month: today_chrono.month(),
+ };
+
+ let dates_by_file = collect_dates(glob(&glob_pat).unwrap().map(Result::unwrap));
+ let dates_by_file: BTreeMap<_, _> =
+ filter_dates(current_month, 6, dates_by_file.into_iter()).collect();
+
+ if dates_by_file.is_empty() {
+ println!("empty");
+ } else {
+ println!("Date Reference Triage for {}", current_month);
+ println!("## Procedure");
+ println!();
+ println!(
+ "Each of these dates should be checked to see if the docs they annotate are \
+ up-to-date. Each date should be updated (in the Markdown file where it appears) to \
+ use the current month ({current_month}), or removed if the docs it annotates are not \
+ expected to fall out of date quickly.",
+ current_month = current_month
+ );
+ println!();
+ println!(
+ "Please check off each date once a PR to update it (and, if applicable, its \
+ surrounding docs) has been merged. Please also mention that you are working on a \
+ particular set of dates so duplicate work is avoided."
+ );
+ println!();
+ println!("Finally, once all the dates have been updated, please close this issue.");
+ println!();
+ println!("## Dates");
+ println!();
+
+ for (path, dates) in dates_by_file {
+ println!(
+ "- [ ] {}",
+ path.strip_prefix(&root_dir_path).unwrap().display()
+ );
+ for (line, date) in dates {
+ println!(" - [ ] line {}: {}", line, date);
+ }
+ }
+ println!();
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn test_months_since() {
+ let date1 = Date {
+ year: 2020,
+ month: 3,
+ };
+ let date2 = Date {
+ year: 2021,
+ month: 1,
+ };
+ assert_eq!(date2.months_since(date1), Some(10));
+ }
+
+ #[test]
+ fn test_date_regex() {
+ let regex = make_date_regex();
+ assert!(regex.is_match("foo <!-- date: 2021-01 --> bar"));
+ }
+
+ #[test]
+ fn test_date_regex_capitalized() {
+ let regex = make_date_regex();
+ assert!(regex.is_match("foo <!-- Date: 2021-08 --> bar"));
+ }
+
+ #[test]
+ fn test_collect_dates_from_file() {
+ let text = "Test1\n<!-- date: 2021-01 -->\nTest2\nFoo<!-- date: 2021-02 \
+ -->\nTest3\nTest4\nFoo<!-- date: 2021-03 -->Bar\n<!-- date: 2021-04 \
+ -->\nTest5\nTest6\nTest7\n<!-- date: \n\n2021-05 -->\nTest8
+ ";
+ assert_eq!(
+ collect_dates_from_file(&make_date_regex(), text),
+ vec![
+ (
+ 2,
+ Date {
+ year: 2021,
+ month: 1,
+ }
+ ),
+ (
+ 4,
+ Date {
+ year: 2021,
+ month: 2,
+ }
+ ),
+ (
+ 7,
+ Date {
+ year: 2021,
+ month: 3,
+ }
+ ),
+ (
+ 8,
+ Date {
+ year: 2021,
+ month: 4,
+ }
+ ),
+ (
+ 14,
+ Date {
+ year: 2021,
+ month: 5,
+ }
+ ),
+ ]
+ );
+ }
+}
diff --git a/src/doc/rustc-dev-guide/ci/linkcheck.sh b/src/doc/rustc-dev-guide/ci/linkcheck.sh
new file mode 100755
index 000000000..5d49d1337
--- /dev/null
+++ b/src/doc/rustc-dev-guide/ci/linkcheck.sh
@@ -0,0 +1,31 @@
+#!/usr/bin/env bash
+
+set -e
+set -o pipefail
+
+# https://docs.github.com/en/actions/reference/environment-variables
+if [ "$GITHUB_EVENT_NAME" = "schedule" ] ; then # running in scheduled job
+ FLAGS=""
+
+ echo "Doing full link check."
+ set -x
+elif [ "$GITHUB_EVENT_NAME" = "pull_request" ] ; then # running in PR CI build
+ if [ -z "$BASE_SHA" ]; then
+ echo "error: unexpected state: BASE_SHA must be non-empty in CI"
+ exit 1
+ fi
+
+ CHANGED_FILES=$(git diff --name-only $BASE_SHA... | tr '\n' ' ')
+ FLAGS="--no-cache -f $CHANGED_FILES"
+
+ echo "Checking files changed since $BASE_SHA: $CHANGED_FILES"
+ set -x
+else # running locally
+ COMMIT_RANGE=master...
+ CHANGED_FILES=$(git diff --name-only $COMMIT_RANGE | tr '\n' ' ')
+ FLAGS="-f $CHANGED_FILES"
+
+ echo "Checking files changed in $COMMIT_RANGE: $CHANGED_FILES"
+fi
+
+exec mdbook-linkcheck $FLAGS
diff --git a/src/doc/rustc-dev-guide/examples/rustc-driver-example.rs b/src/doc/rustc-dev-guide/examples/rustc-driver-example.rs
new file mode 100644
index 000000000..4203fe96a
--- /dev/null
+++ b/src/doc/rustc-dev-guide/examples/rustc-driver-example.rs
@@ -0,0 +1,94 @@
+#![feature(rustc_private)]
+
+// NOTE: For the example to compile, you will need to first run the following:
+// rustup component add rustc-dev llvm-tools-preview
+
+// version: 1.62.0-nightly (7c4b47696 2022-04-30)
+
+extern crate rustc_error_codes;
+extern crate rustc_errors;
+extern crate rustc_hash;
+extern crate rustc_hir;
+extern crate rustc_interface;
+extern crate rustc_session;
+extern crate rustc_span;
+
+use std::{path, process, str};
+
+use rustc_errors::registry;
+use rustc_hash::{FxHashMap, FxHashSet};
+use rustc_session::config::{self, CheckCfg};
+use rustc_span::source_map;
+
+fn main() {
+ let out = process::Command::new("rustc")
+ .arg("--print=sysroot")
+ .current_dir(".")
+ .output()
+ .unwrap();
+ let sysroot = str::from_utf8(&out.stdout).unwrap().trim();
+ let config = rustc_interface::Config {
+ // Command line options
+ opts: config::Options {
+ maybe_sysroot: Some(path::PathBuf::from(sysroot)),
+ ..config::Options::default()
+ },
+ // cfg! configuration in addition to the default ones
+ crate_cfg: FxHashSet::default(), // FxHashSet<(String, Option<String>)>
+ crate_check_cfg: CheckCfg::default(), // CheckCfg
+ input: config::Input::Str {
+ name: source_map::FileName::Custom("main.rs".into()),
+ input: r#"
+static HELLO: &str = "Hello, world!";
+fn main() {
+ println!("{HELLO}");
+}
+"#
+ .into(),
+ },
+ input_path: None, // Option<PathBuf>
+ output_dir: None, // Option<PathBuf>
+ output_file: None, // Option<PathBuf>
+ file_loader: None, // Option<Box<dyn FileLoader + Send + Sync>>
+ diagnostic_output: rustc_session::DiagnosticOutput::Default,
+ lint_caps: FxHashMap::default(), // FxHashMap<lint::LintId, lint::Level>
+ // This is a callback from the driver that is called when [`ParseSess`] is created.
+ parse_sess_created: None, //Option<Box<dyn FnOnce(&mut ParseSess) + Send>>
+ // This is a callback from the driver that is called when we're registering lints;
+ // it is called during plugin registration when we have the LintStore in a non-shared state.
+ //
+ // Note that if you find a Some here you probably want to call that function in the new
+ // function being registered.
+ register_lints: None, // Option<Box<dyn Fn(&Session, &mut LintStore) + Send + Sync>>
+ // This is a callback from the driver that is called just after we have populated
+ // the list of queries.
+ //
+ // The second parameter is local providers and the third parameter is external providers.
+ override_queries: None, // Option<fn(&Session, &mut ty::query::Providers<'_>, &mut ty::query::Providers<'_>)>
+ // Registry of diagnostics codes.
+ registry: registry::Registry::new(&rustc_error_codes::DIAGNOSTICS),
+ make_codegen_backend: None,
+ };
+ rustc_interface::run_compiler(config, |compiler| {
+ compiler.enter(|queries| {
+ // Parse the program and print the syntax tree.
+ let parse = queries.parse().unwrap().take();
+ println!("{parse:?}");
+ // Analyze the program and inspect the types of definitions.
+ queries.global_ctxt().unwrap().take().enter(|tcx| {
+ for id in tcx.hir().items() {
+ let hir = tcx.hir();
+ let item = hir.item(id);
+ match item.kind {
+ rustc_hir::ItemKind::Static(_, _, _) | rustc_hir::ItemKind::Fn(_, _, _) => {
+ let name = item.ident;
+ let ty = tcx.type_of(hir.local_def_id(item.hir_id()));
+ println!("{name:?}:\t{ty:?}")
+ }
+ _ => (),
+ }
+ }
+ })
+ });
+ });
+}
diff --git a/src/doc/rustc-dev-guide/examples/rustc-driver-getting-diagnostics.rs b/src/doc/rustc-dev-guide/examples/rustc-driver-getting-diagnostics.rs
new file mode 100644
index 000000000..1d3a4034e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/examples/rustc-driver-getting-diagnostics.rs
@@ -0,0 +1,96 @@
+#![feature(rustc_private)]
+
+// NOTE: For the example to compile, you will need to first run the following:
+// rustup component add rustc-dev llvm-tools-preview
+
+// version: 1.62.0-nightly (7c4b47696 2022-04-30)
+
+extern crate rustc_error_codes;
+extern crate rustc_errors;
+extern crate rustc_hash;
+extern crate rustc_hir;
+extern crate rustc_interface;
+extern crate rustc_session;
+extern crate rustc_span;
+
+use rustc_errors::registry;
+use rustc_session::config::{self, CheckCfg};
+use rustc_span::source_map;
+use std::io;
+use std::path;
+use std::process;
+use std::str;
+use std::sync;
+
+// Buffer diagnostics in a Vec<u8>.
+#[derive(Clone)]
+pub struct DiagnosticSink(sync::Arc<sync::Mutex<Vec<u8>>>);
+
+impl io::Write for DiagnosticSink {
+ fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
+ self.0.lock().unwrap().write(buf)
+ }
+ fn flush(&mut self) -> io::Result<()> {
+ self.0.lock().unwrap().flush()
+ }
+}
+
+fn main() {
+ let out = process::Command::new("rustc")
+ .arg("--print=sysroot")
+ .current_dir(".")
+ .output()
+ .unwrap();
+ let sysroot = str::from_utf8(&out.stdout).unwrap().trim();
+ let buffer = sync::Arc::new(sync::Mutex::new(Vec::new()));
+ let config = rustc_interface::Config {
+ opts: config::Options {
+ maybe_sysroot: Some(path::PathBuf::from(sysroot)),
+ // Configure the compiler to emit diagnostics in compact JSON format.
+ error_format: config::ErrorOutputType::Json {
+ pretty: false,
+ json_rendered: rustc_errors::emitter::HumanReadableErrorType::Default(
+ rustc_errors::emitter::ColorConfig::Never,
+ ),
+ },
+ ..config::Options::default()
+ },
+ // This program contains a type error.
+ input: config::Input::Str {
+ name: source_map::FileName::Custom("main.rs".into()),
+ input: "
+fn main() {
+ let x: &str = 1;
+}
+"
+ .into(),
+ },
+ // Redirect the diagnostic output of the compiler to a buffer.
+ diagnostic_output: rustc_session::DiagnosticOutput::Raw(Box::from(DiagnosticSink(
+ buffer.clone(),
+ ))),
+ crate_cfg: rustc_hash::FxHashSet::default(),
+ crate_check_cfg: CheckCfg::default(),
+ input_path: None,
+ output_dir: None,
+ output_file: None,
+ file_loader: None,
+ lint_caps: rustc_hash::FxHashMap::default(),
+ parse_sess_created: None,
+ register_lints: None,
+ override_queries: None,
+ registry: registry::Registry::new(&rustc_error_codes::DIAGNOSTICS),
+ make_codegen_backend: None,
+ };
+ rustc_interface::run_compiler(config, |compiler| {
+ compiler.enter(|queries| {
+ queries.global_ctxt().unwrap().take().enter(|tcx| {
+ // Run the analysis phase on the local crate to trigger the type error.
+ let _ = tcx.analysis(());
+ });
+ });
+ });
+ // Read buffered diagnostics.
+ let diagnostics = String::from_utf8(buffer.lock().unwrap().clone()).unwrap();
+ println!("{diagnostics}");
+}
diff --git a/src/doc/rustc-dev-guide/examples/rustc-driver-interacting-with-the-ast.rs b/src/doc/rustc-dev-guide/examples/rustc-driver-interacting-with-the-ast.rs
new file mode 100644
index 000000000..231994a97
--- /dev/null
+++ b/src/doc/rustc-dev-guide/examples/rustc-driver-interacting-with-the-ast.rs
@@ -0,0 +1,93 @@
+#![feature(rustc_private)]
+
+// NOTE: For the example to compile, you will need to first run the following:
+// rustup component add rustc-dev llvm-tools-preview
+
+// version: 1.62.0-nightly (7c4b47696 2022-04-30)
+
+extern crate rustc_ast_pretty;
+extern crate rustc_error_codes;
+extern crate rustc_errors;
+extern crate rustc_hash;
+extern crate rustc_hir;
+extern crate rustc_interface;
+extern crate rustc_session;
+extern crate rustc_span;
+
+use std::{path, process, str};
+
+use rustc_ast_pretty::pprust::item_to_string;
+use rustc_errors::registry;
+use rustc_session::config::{self, CheckCfg};
+use rustc_span::source_map;
+
+fn main() {
+ let out = process::Command::new("rustc")
+ .arg("--print=sysroot")
+ .current_dir(".")
+ .output()
+ .unwrap();
+ let sysroot = str::from_utf8(&out.stdout).unwrap().trim();
+ let config = rustc_interface::Config {
+ opts: config::Options {
+ maybe_sysroot: Some(path::PathBuf::from(sysroot)),
+ ..config::Options::default()
+ },
+ input: config::Input::Str {
+ name: source_map::FileName::Custom("main.rs".to_string()),
+ input: r#"
+fn main() {
+ let message = "Hello, World!";
+ println!("{message}");
+}
+"#
+ .to_string(),
+ },
+ diagnostic_output: rustc_session::DiagnosticOutput::Default,
+ crate_cfg: rustc_hash::FxHashSet::default(),
+ crate_check_cfg: CheckCfg::default(),
+ input_path: None,
+ output_dir: None,
+ output_file: None,
+ file_loader: None,
+ lint_caps: rustc_hash::FxHashMap::default(),
+ parse_sess_created: None,
+ register_lints: None,
+ override_queries: None,
+ make_codegen_backend: None,
+ registry: registry::Registry::new(&rustc_error_codes::DIAGNOSTICS),
+ };
+ rustc_interface::run_compiler(config, |compiler| {
+ compiler.enter(|queries| {
+ // TODO: add this to -Z unpretty
+ let ast_krate = queries.parse().unwrap().take();
+ for item in ast_krate.items {
+ println!("{}", item_to_string(&item));
+ }
+
+ // Analyze the crate and inspect the types under the cursor.
+ queries.global_ctxt().unwrap().take().enter(|tcx| {
+ // Every compilation contains a single crate.
+ let hir_krate = tcx.hir();
+ // Iterate over the top-level items in the crate, looking for the main function.
+ for id in hir_krate.items() {
+ let item = hir_krate.item(id);
+ // Use pattern-matching to find a specific node inside the main function.
+ if let rustc_hir::ItemKind::Fn(_, _, body_id) = item.kind {
+ let expr = &tcx.hir().body(body_id).value;
+ if let rustc_hir::ExprKind::Block(block, _) = expr.kind {
+ if let rustc_hir::StmtKind::Local(local) = block.stmts[0].kind {
+ if let Some(expr) = local.init {
+ let hir_id = expr.hir_id; // hir_id identifies the string "Hello, world!"
+ let def_id = tcx.hir().local_def_id(item.hir_id()); // def_id identifies the main function
+ let ty = tcx.typeck(def_id).node_type(hir_id);
+ println!("{expr:#?}: {ty:?}");
+ }
+ }
+ }
+ }
+ }
+ })
+ });
+ });
+}
diff --git a/src/doc/rustc-dev-guide/mermaid-init.js b/src/doc/rustc-dev-guide/mermaid-init.js
new file mode 100644
index 000000000..313a6e8bc
--- /dev/null
+++ b/src/doc/rustc-dev-guide/mermaid-init.js
@@ -0,0 +1 @@
+mermaid.initialize({startOnLoad:true});
diff --git a/src/doc/rustc-dev-guide/src/SUMMARY.md b/src/doc/rustc-dev-guide/src/SUMMARY.md
new file mode 100644
index 000000000..99b24fe59
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/SUMMARY.md
@@ -0,0 +1,181 @@
+# Summary
+
+[About this guide](./about-this-guide.md)
+
+[Getting Started](./getting-started.md)
+
+---
+
+# Building and debugging `rustc`
+
+- [How to Build and Run the Compiler](./building/how-to-build-and-run.md)
+ - [Prerequisites](./building/prerequisites.md)
+ - [Suggested Workflows](./building/suggested.md)
+ - [Distribution artifacts](./building/build-install-distribution-artifacts.md)
+ - [Building Documentation](./building/compiler-documenting.md)
+ - [Rustdoc overview](./rustdoc.md)
+ - [Adding a new target](./building/new-target.md)
+- [Testing the compiler](./tests/intro.md)
+ - [Running tests](./tests/running.md)
+ - [Testing with Docker](./tests/docker.md)
+ - [Testing with CI](./tests/ci.md)
+ - [Adding new tests](./tests/adding.md)
+ - [Compiletest](./tests/compiletest.md)
+ - [UI tests](./tests/ui.md)
+ - [Test headers](./tests/headers.md)
+ - [Performance testing](./tests/perf.md)
+ - [Crater](./tests/crater.md)
+- [Debugging the Compiler](./compiler-debugging.md)
+ - [Using the tracing/logging instrumentation](./tracing.md)
+- [Profiling the compiler](./profiling.md)
+ - [with the linux perf tool](./profiling/with_perf.md)
+ - [with Windows Performance Analyzer](./profiling/wpa_profiling.md)
+- [crates.io Dependencies](./crates-io.md)
+
+
+# Contributing to Rust
+
+- [Introduction](./contributing.md)
+- [About the compiler team](./compiler-team.md)
+- [Using Git](./git.md)
+- [Mastering @rustbot](./rustbot.md)
+- [Walkthrough: a typical contribution](./walkthrough.md)
+- [Bug Fix Procedure](./bug-fix-procedure.md)
+- [Implementing new features](./implementing_new_features.md)
+- [Stability attributes](./stability.md)
+- [Stabilizing Features](./stabilization_guide.md)
+- [Feature Gates](./feature-gates.md)
+- [Coding conventions](./conventions.md)
+- [Notification groups](notification-groups/about.md)
+ - [ARM](notification-groups/arm.md)
+ - [Cleanup Crew](notification-groups/cleanup-crew.md)
+ - [LLVM](notification-groups/llvm.md)
+ - [RISC-V](notification-groups/risc-v.md)
+ - [Windows](notification-groups/windows.md)
+- [Licenses](./licenses.md)
+
+# High-level Compiler Architecture
+
+- [Prologue](./part-2-intro.md)
+- [Overview of the Compiler](./overview.md)
+- [The compiler source code](./compiler-src.md)
+- [Bootstrapping](./building/bootstrapping.md)
+- [Queries: demand-driven compilation](./query.md)
+ - [The Query Evaluation Model in Detail](./queries/query-evaluation-model-in-detail.md)
+ - [Incremental compilation](./queries/incremental-compilation.md)
+ - [Incremental compilation In Detail](./queries/incremental-compilation-in-detail.md)
+ - [Debugging and Testing](./incrcomp-debugging.md)
+ - [Salsa](./salsa.md)
+- [Memory Management in Rustc](./memory.md)
+- [Serialization in Rustc](./serialization.md)
+- [Parallel Compilation](./parallel-rustc.md)
+- [Rustdoc internals](./rustdoc-internals.md)
+
+# Source Code Representation
+
+- [Prologue](./part-3-intro.md)
+- [Command-line arguments](./cli.md)
+- [The Rustc Driver and Interface](./rustc-driver.md)
+ - [Example: Type checking](./rustc-driver-interacting-with-the-ast.md)
+ - [Example: Getting diagnostics](./rustc-driver-getting-diagnostics.md)
+- [Syntax and the AST](./syntax-intro.md)
+ - [Lexing and Parsing](./the-parser.md)
+ - [Macro expansion](./macro-expansion.md)
+ - [Name resolution](./name-resolution.md)
+ - [`#[test]` Implementation](./test-implementation.md)
+ - [Panic Implementation](./panic-implementation.md)
+ - [AST Validation](./ast-validation.md)
+ - [Feature Gate Checking](./feature-gate-ck.md)
+ - [Lang Items](./lang-items.md)
+- [The HIR (High-level IR)](./hir.md)
+ - [Lowering AST to HIR](./lowering.md)
+ - [Debugging](./hir-debugging.md)
+- [The THIR (Typed High-level IR)](./thir.md)
+- [The MIR (Mid-level IR)](./mir/index.md)
+ - [MIR construction](./mir/construction.md)
+ - [MIR visitor and traversal](./mir/visitor.md)
+ - [MIR passes: getting the MIR for a function](./mir/passes.md)
+- [Identifiers in the Compiler](./identifiers.md)
+- [Closure expansion](./closure.md)
+- [Inline assembly](./asm.md)
+
+# Analysis
+
+- [Prologue](./part-4-intro.md)
+- [The `ty` module: representing types](./ty.md)
+ - [Generics and substitutions](./generics.md)
+ - [`TypeFolder` and `TypeFoldable`](./ty-fold.md)
+ - [Generic arguments](./generic_arguments.md)
+ - [Constants in the type system](./constants.md)
+- [Type inference](./type-inference.md)
+- [Trait solving](./traits/resolution.md)
+ - [Early and Late Bound Parameters](./early-late-bound.md)
+ - [Higher-ranked trait bounds](./traits/hrtb.md)
+ - [Caching subtleties](./traits/caching.md)
+ - [Specialization](./traits/specialization.md)
+ - [Chalk-based trait solving](./traits/chalk.md)
+ - [Lowering to logic](./traits/lowering-to-logic.md)
+ - [Goals and clauses](./traits/goals-and-clauses.md)
+ - [Canonical queries](./traits/canonical-queries.md)
+- [Type checking](./type-checking.md)
+ - [Method Lookup](./method-lookup.md)
+ - [Variance](./variance.md)
+ - [Opaque Types](./opaque-types-type-alias-impl-trait.md)
+ - [Inference details](./opaque-types-impl-trait-inference.md)
+- [Pattern and Exhaustiveness Checking](./pat-exhaustive-checking.md)
+- [MIR dataflow](./mir/dataflow.md)
+- [Drop elaboration](./mir/drop-elaboration.md)
+- [The borrow checker](./borrow_check.md)
+ - [Tracking moves and initialization](./borrow_check/moves_and_initialization.md)
+ - [Move paths](./borrow_check/moves_and_initialization/move_paths.md)
+ - [MIR type checker](./borrow_check/type_check.md)
+ - [Region inference](./borrow_check/region_inference.md)
+ - [Constraint propagation](./borrow_check/region_inference/constraint_propagation.md)
+ - [Lifetime parameters](./borrow_check/region_inference/lifetime_parameters.md)
+ - [Member constraints](./borrow_check/region_inference/member_constraints.md)
+ - [Placeholders and universes][pau]
+ - [Closure constraints](./borrow_check/region_inference/closure_constraints.md)
+ - [Error reporting](./borrow_check/region_inference/error_reporting.md)
+ - [Two-phase-borrows](./borrow_check/two_phase_borrows.md)
+- [Parameter Environments](./param_env.md)
+- [Errors and Lints](diagnostics.md)
+ - [Diagnostic and subdiagnostic structs](./diagnostics/diagnostic-structs.md)
+ - [Translation](./diagnostics/translation.md)
+ - [`LintStore`](./diagnostics/lintstore.md)
+ - [Diagnostic codes](./diagnostics/diagnostic-codes.md)
+ - [Diagnostic items](./diagnostics/diagnostic-items.md)
+ - [`ErrorGuaranteed`](./diagnostics/error-guaranteed.md)
+
+# MIR to Binaries
+
+- [Prologue](./part-5-intro.md)
+- [MIR optimizations](./mir/optimizations.md)
+- [Debugging](./mir/debugging.md)
+- [Constant evaluation](./const-eval.md)
+ - [miri const evaluator](./miri.md)
+- [Monomorphization](./backend/monomorph.md)
+- [Lowering MIR](./backend/lowering-mir.md)
+- [Code Generation](./backend/codegen.md)
+ - [Updating LLVM](./backend/updating-llvm.md)
+ - [Debugging LLVM](./backend/debugging.md)
+ - [Backend Agnostic Codegen](./backend/backend-agnostic.md)
+ - [Implicit Caller Location](./backend/implicit-caller-location.md)
+- [Libraries and Metadata](./backend/libs-and-metadata.md)
+- [Profile-guided Optimization](./profile-guided-optimization.md)
+- [LLVM Source-Based Code Coverage](./llvm-coverage-instrumentation.md)
+- [Sanitizers Support](./sanitizers.md)
+- [Debugging Support in the Rust Compiler](./debugging-support-in-rustc.md)
+
+---
+
+[Appendix A: Background topics](./appendix/background.md)
+[Appendix B: Glossary](./appendix/glossary.md)
+[Appendix C: Code Index](./appendix/code-index.md)
+[Appendix D: Compiler Lecture Series](./appendix/compiler-lecture.md)
+[Appendix E: Bibliography](./appendix/bibliography.md)
+
+[Appendix Z: HumorRust](./appendix/humorust.md)
+
+---
+
+[pau]: ./borrow_check/region_inference/placeholders_and_universes.md
diff --git a/src/doc/rustc-dev-guide/src/about-this-guide.md b/src/doc/rustc-dev-guide/src/about-this-guide.md
new file mode 100644
index 000000000..b2c71866c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/about-this-guide.md
@@ -0,0 +1,71 @@
+# About this guide
+
+This guide is meant to help document how rustc – the Rust compiler – works,
+as well as to help new contributors get involved in rustc development.
+
+There are seven parts to this guide:
+
+1. [Building and debugging `rustc`][p1]:
+ Contains information that should be useful no matter how you are contributing,
+ about building, debugging, profiling, etc.
+2. [Contributing to `rustc`][p2]:
+ Contains information that should be useful no matter how you are contributing,
+ about procedures for contribution, using git and Github, stabilizing features, etc.
+3. [High-Level Compiler Architecture][p3]:
+ Discusses the high-level architecture of the compiler and stages of the compile process.
+4. [Source Code Representation][p4]:
+ Describes the process of taking raw source code from the user
+ and transforming it into various forms that the compiler can work with easily.
+5. [Analysis][p5]:
+ discusses the analyses that the compiler uses to check various properties of the code
+ and inform later stages of the compile process (e.g., type checking).
+6. [From MIR to Binaries][p6]: How linked executable machine code is generated.
+7. [Appendices][p7] at the end with useful reference information.
+ There are a few of these with different information, including a glossary.
+
+[p1]: ./getting-started.md
+[p2]: ./contributing.md
+[p3]: ./part-2-intro.md
+[p4]: ./part-3-intro.md
+[p5]: ./part-4-intro.md
+[p6]: ./part-5-intro.md
+[p7]: ./appendix/background.md
+
+### Constant change
+
+Keep in mind that `rustc` is a real production-quality product,
+being worked upon continuously by a sizeable set of contributors.
+As such, it has its fair share of codebase churn and technical debt.
+In addition, many of the ideas discussed throughout this guide are idealized designs
+that are not fully realized yet.
+All this makes keeping this guide completely up to date on everything very hard!
+
+The Guide itself is of course open-source as well,
+and the sources can be found at the [GitHub repository].
+If you find any mistakes in the guide, please file an issue about it.
+Even better, open a PR with a correction!
+
+If you do contribute to the guide,
+please see the corresponding [subsection on writing documentation in this guide].
+
+[subsection on writing documentation in this guide]: contributing.md#contributing-to-rustc-dev-guide
+
+> “‘All conditioned things are impermanent’ —
+> when one sees this with wisdom, one turns away from suffering.”
+> _The Dhammapada, verse 277_
+
+## Other places to find information
+
+You might also find the following sites useful:
+
+- [rustc API docs] -- rustdoc documentation for the compiler
+- [Forge] -- contains documentation about Rust infrastructure, team procedures, and more
+- [compiler-team] -- the home-base for the Rust compiler team, with description
+ of the team procedures, active working groups, and the team calendar.
+- [std-dev-guide] -- a similar guide for developing the standard library.
+
+[GitHub repository]: https://github.com/rust-lang/rustc-dev-guide/
+[rustc API docs]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/
+[Forge]: https://forge.rust-lang.org/
+[compiler-team]: https://github.com/rust-lang/compiler-team/
+[std-dev-guide]: https://std-dev-guide.rust-lang.org/
diff --git a/src/doc/rustc-dev-guide/src/appendix/background.md b/src/doc/rustc-dev-guide/src/appendix/background.md
new file mode 100644
index 000000000..ae6136dd5
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/appendix/background.md
@@ -0,0 +1,332 @@
+# Background topics
+
+This section covers a numbers of common compiler terms that arise in
+this guide. We try to give the general definition while providing some
+Rust-specific context.
+
+<a name="cfg"></a>
+
+## What is a control-flow graph?
+
+A control-flow graph (CFG) is a common term from compilers. If you've ever
+used a flow-chart, then the concept of a control-flow graph will be
+pretty familiar to you. It's a representation of your program that
+clearly exposes the underlying control flow.
+
+A control-flow graph is structured as a set of **basic blocks**
+connected by edges. The key idea of a basic block is that it is a set
+of statements that execute "together" – that is, whenever you branch
+to a basic block, you start at the first statement and then execute
+all the remainder. Only at the end of the block is there the
+possibility of branching to more than one place (in MIR, we call that
+final statement the **terminator**):
+
+```mir
+bb0: {
+ statement0;
+ statement1;
+ statement2;
+ ...
+ terminator;
+}
+```
+
+Many expressions that you are used to in Rust compile down to multiple
+basic blocks. For example, consider an if statement:
+
+```rust,ignore
+a = 1;
+if some_variable {
+ b = 1;
+} else {
+ c = 1;
+}
+d = 1;
+```
+
+This would compile into four basic blocks in MIR. In textual form, it looks like
+this:
+
+```mir
+BB0: {
+ a = 1;
+ if some_variable {
+ goto BB1;
+ } else {
+ goto BB2;
+ }
+}
+
+BB1: {
+ b = 1;
+ goto BB3;
+}
+
+BB2: {
+ c = 1;
+ goto BB3;
+}
+
+BB3: {
+ d = 1;
+ ...
+}
+```
+
+In graphical form, it looks like this:
+
+```
+ BB0
+ +--------------------+
+ | a = 1; |
+ +--------------------+
+ / \
+ if some_variable else
+ / \
+ BB1 / \ BB2
+ +-----------+ +-----------+
+ | b = 1; | | c = 1; |
+ +-----------+ +-----------+
+ \ /
+ \ /
+ \ BB3 /
+ +----------+
+ | d = 1; |
+ | ... |
+ +----------+
+```
+
+When using a control-flow graph, a loop simply appears as a cycle in
+the graph, and the `break` keyword translates into a path out of that
+cycle.
+
+<a name="dataflow"></a>
+
+## What is a dataflow analysis?
+
+[*Static Program Analysis*](https://cs.au.dk/~amoeller/spa/) by Anders Møller
+and Michael I. Schwartzbach is an incredible resource!
+
+_Dataflow analysis_ is a type of static analysis that is common in many
+compilers. It describes a general technique, rather than a particular analysis.
+
+The basic idea is that we can walk over a [control-flow graph (CFG)](#cfg) and
+keep track of what some value could be. At the end of the walk, we might have
+shown that some claim is true or not necessarily true (e.g. "this variable must
+be initialized"). `rustc` tends to do dataflow analyses over the MIR, since MIR
+is already a CFG.
+
+For example, suppose we want to check that `x` is initialized before it is used
+in this snippet:
+
+```rust,ignore
+fn foo() {
+ let mut x;
+
+ if some_cond {
+ x = 1;
+ }
+
+ dbg!(x);
+}
+```
+
+A CFG for this code might look like this:
+
+```txt
+ +------+
+ | Init | (A)
+ +------+
+ | \
+ | if some_cond
+ else \ +-------+
+ | \| x = 1 | (B)
+ | +-------+
+ | /
+ +---------+
+ | dbg!(x) | (C)
+ +---------+
+```
+
+We can do the dataflow analysis as follows: we will start off with a flag `init`
+which indicates if we know `x` is initialized. As we walk the CFG, we will
+update the flag. At the end, we can check its value.
+
+So first, in block (A), the variable `x` is declared but not initialized, so
+`init = false`. In block (B), we initialize the value, so we know that `x` is
+initialized. So at the end of (B), `init = true`.
+
+Block (C) is where things get interesting. Notice that there are two incoming
+edges, one from (A) and one from (B), corresponding to whether `some_cond` is true or not.
+But we cannot know that! It could be the case the `some_cond` is always true,
+so that `x` is actually always initialized. It could also be the case that
+`some_cond` depends on something random (e.g. the time), so `x` may not be
+initialized. In general, we cannot know statically (due to [Rice's
+Theorem][rice]). So what should the value of `init` be in block (C)?
+
+[rice]: https://en.wikipedia.org/wiki/Rice%27s_theorem
+
+Generally, in dataflow analyses, if a block has multiple parents (like (C) in
+our example), its dataflow value will be some function of all its parents (and
+of course, what happens in (C)). Which function we use depends on the analysis
+we are doing.
+
+In this case, we want to be able to prove definitively that `x` must be
+initialized before use. This forces us to be conservative and assume that
+`some_cond` might be false sometimes. So our "merging function" is "and". That
+is, `init = true` in (C) if `init = true` in (A) _and_ in (B) (or if `x` is
+initialized in (C)). But this is not the case; in particular, `init = false` in
+(A), and `x` is not initialized in (C). Thus, `init = false` in (C); we can
+report an error that "`x` may not be initialized before use".
+
+There is definitely a lot more that can be said about dataflow analyses. There is an
+extensive body of research literature on the topic, including a lot of theory.
+We only discussed a forwards analysis, but backwards dataflow analysis is also
+useful. For example, rather than starting from block (A) and moving forwards,
+we might have started with the usage of `x` and moved backwards to try to find
+its initialization.
+
+<a name="quantified"></a>
+
+## What is "universally quantified"? What about "existentially quantified"?
+
+In math, a predicate may be _universally quantified_ or _existentially
+quantified_:
+
+- _Universal_ quantification:
+ - the predicate holds if it is true for all possible inputs.
+ - Traditional notation: ∀x: P(x). Read as "for all x, P(x) holds".
+- _Existential_ quantification:
+ - the predicate holds if there is any input where it is true, i.e., there
+ only has to be a single input.
+ - Traditional notation: ∃x: P(x). Read as "there exists x such that P(x) holds".
+
+In Rust, they come up in type checking and trait solving. For example,
+
+```rust,ignore
+fn foo<T>()
+```
+This function claims that the function is well-typed for all types `T`: `∀ T: well_typed(foo)`.
+
+Another example:
+
+```rust,ignore
+fn foo<'a>(_: &'a usize)
+```
+This function claims that for any lifetime `'a` (determined by the
+caller), it is well-typed: `∀ 'a: well_typed(foo)`.
+
+Another example:
+
+```rust,ignore
+fn foo<F>()
+where for<'a> F: Fn(&'a u8)
+```
+This function claims that it is well-typed for all types `F` such that for all
+lifetimes `'a`, `F: Fn(&'a u8)`: `∀ F: ∀ 'a: (F: Fn(&'a u8)) => well_typed(foo)`.
+
+One more example:
+
+```rust,ignore
+fn foo(_: dyn Debug)
+```
+This function claims that there exists some type `T` that implements `Debug`
+such that the function is well-typed: `∃ T: (T: Debug) and well_typed(foo)`.
+
+<a name="variance"></a>
+
+## What is a de Bruijn Index?
+
+[De Bruijn indices][wikideb] are a way of representing, using only integers,
+which variables are bound in which binders. They were originally invented for
+use in lambda calculus evaluation (see [this Wikipedia article][wikideb] for
+more). In `rustc`, we use de Bruijn indices to [represent generic types][sub].
+
+[wikideb]: https://en.wikipedia.org/wiki/De_Bruijn_index
+[sub]: ../generics.md
+
+Here is a basic example of how de Bruijn indices might be used for closures (we
+don't actually do this in `rustc` though!):
+
+```rust,ignore
+|x| {
+ f(x) // de Bruijn index of `x` is 1 because `x` is bound 1 level up
+
+ |y| {
+ g(x, y) // index of `x` is 2 because it is bound 2 levels up
+ // index of `y` is 1 because it is bound 1 level up
+ }
+}
+```
+
+## What are co- and contra-variance?
+
+Check out the subtyping chapter from the
+[Rust Nomicon](https://doc.rust-lang.org/nomicon/subtyping.html).
+
+See the [variance](../variance.html) chapter of this guide for more info on how
+the type checker handles variance.
+
+<a name="free-vs-bound"></a>
+
+## What is a "free region" or a "free variable"? What about "bound region"?
+
+Let's describe the concepts of free vs bound in terms of program
+variables, since that's the thing we're most familiar with.
+
+- Consider this expression, which creates a closure: `|a, b| a + b`.
+ Here, the `a` and `b` in `a + b` refer to the arguments that the closure will
+ be given when it is called. We say that the `a` and `b` there are **bound** to
+ the closure, and that the closure signature `|a, b|` is a **binder** for the
+ names `a` and `b` (because any references to `a` or `b` within refer to the
+ variables that it introduces).
+- Consider this expression: `a + b`. In this expression, `a` and `b` refer to
+ local variables that are defined *outside* of the expression. We say that
+ those variables **appear free** in the expression (i.e., they are **free**,
+ not **bound** (tied up)).
+
+So there you have it: a variable "appears free" in some
+expression/statement/whatever if it refers to something defined
+outside of that expressions/statement/whatever. Equivalently, we can
+then refer to the "free variables" of an expression – which is just
+the set of variables that "appear free".
+
+So what does this have to do with regions? Well, we can apply the
+analogous concept to type and regions. For example, in the type `&'a
+u32`, `'a` appears free. But in the type `for<'a> fn(&'a u32)`, it
+does not.
+
+# Further Reading About Compilers
+
+> Thanks to `mem`, `scottmcm`, and `Levi` on the official Discord for the
+> recommendations, and to `tinaun` for posting a link to a [twitter thread from
+> Graydon Hoare](https://twitter.com/graydon_pub/status/1039615569132118016)
+> which had some more recommendations!
+>
+> Other sources: https://gcc.gnu.org/wiki/ListOfCompilerBooks
+>
+> If you have other suggestions, please feel free to open an issue or PR.
+
+## Books
+- [Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/tapl/)
+- [Programming Language Pragmatics](https://www.cs.rochester.edu/~scott/pragmatics/)
+- [Practical Foundations for Programming Languages](https://www.cs.cmu.edu/~rwh/pfpl/2nded.pdf)
+- [Compilers: Principles, Techniques, and Tools, 2nd Edition](https://www.pearson.com/us/higher-education/program/Aho-Compilers-Principles-Techniques-and-Tools-2nd-Edition/PGM167067.html)
+- [Garbage Collection: Algorithms for Automatic Dynamic Memory Management](https://www.cs.kent.ac.uk/people/staff/rej/gcbook/)
+- [Linkers and Loaders](https://www.amazon.com/Linkers-Kaufmann-Software-Engineering-Programming/dp/1558604960) (There are also free versions of this, but the version we had linked seems to be offline at the moment.)
+- [Advanced Compiler Design and Implementation](https://www.goodreads.com/book/show/887908.Advanced_Compiler_Design_and_Implementation)
+- [Building an Optimizing Compiler](https://www.goodreads.com/book/show/2063103.Building_an_Optimizing_Compiler)
+- [Crafting Interpreters](http://www.craftinginterpreters.com/)
+
+## Courses
+- [University of Oregon Programming Languages Summer School archive](https://www.cs.uoregon.edu/research/summerschool/archives.html)
+
+## Wikis
+- [Wikipedia](https://en.wikipedia.org/wiki/List_of_programming_languages_by_type)
+- [Esoteric Programming Languages](https://esolangs.org/wiki/Main_Page)
+- [Stanford Encyclopedia of Philosophy](https://plato.stanford.edu/index.html)
+- [nLab](https://ncatlab.org/nlab/show/HomePage)
+
+## Misc Papers and Blog Posts
+- [Programming in Martin-Löf's Type Theory](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.118.6683&rep=rep1&type=pdf)
+- [Polymorphism, Subtyping, and Type Inference in MLsub](https://dl.acm.org/doi/10.1145/3093333.3009882)
diff --git a/src/doc/rustc-dev-guide/src/appendix/bibliography.md b/src/doc/rustc-dev-guide/src/appendix/bibliography.md
new file mode 100644
index 000000000..27529314c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/appendix/bibliography.md
@@ -0,0 +1,92 @@
+# Rust Bibliography
+
+This is a reading list of material relevant to Rust. It includes prior
+research that has - at one time or another - influenced the design of
+Rust, as well as publications about Rust.
+
+## Type system
+
+* [Region based memory management in Cyclone](https://www.cs.umd.edu/projects/cyclone/papers/cyclone-regions.pdf)
+* [Safe manual memory management in Cyclone](https://www.cs.umd.edu/projects/PL/cyclone/scp.pdf)
+* [Making ad-hoc polymorphism less ad hoc](https://dl.acm.org/doi/10.1145/75277.75283)
+* [Macros that work together](https://www.cs.utah.edu/plt/publications/jfp12-draft-fcdf.pdf)
+* [Traits: composable units of behavior](http://scg.unibe.ch/archive/papers/Scha03aTraits.pdf)
+* [Alias burying](https://dl.acm.org/doi/10.1002/spe.370) - We tried something similar and abandoned it.
+* [External uniqueness is unique enough](http://www.cs.uu.nl/research/techreps/UU-CS-2002-048.html)
+* [Uniqueness and Reference Immutability for Safe Parallelism](https://research.microsoft.com/pubs/170528/msr-tr-2012-79.pdf)
+* [Region Based Memory Management](https://www.cs.ucla.edu/~palsberg/tba/papers/tofte-talpin-iandc97.pdf)
+
+## Concurrency
+
+* [Singularity: rethinking the software stack](https://research.microsoft.com/pubs/69431/osr2007_rethinkingsoftwarestack.pdf)
+* [Language support for fast and reliable message passing in singularity OS](https://research.microsoft.com/pubs/67482/singsharp.pdf)
+* [Scheduling multithreaded computations by work stealing](http://supertech.csail.mit.edu/papers/steal.pdf)
+* [Thread scheduling for multiprogramming multiprocessors](https://www.eecis.udel.edu/%7Ecavazos/cisc879-spring2008/papers/arora98thread.pdf)
+* [The data locality of work stealing](http://www.aladdin.cs.cmu.edu/papers/pdfs/y2000/locality_spaa00.pdf)
+* [Dynamic circular work stealing deque](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.170.1097&rep=rep1&type=pdf) - The Chase/Lev deque
+* [Work-first and help-first scheduling policies for async-finish task parallelism](https://dl.acm.org/doi/10.1109/IPDPS.2009.5161079) - More general than fully-strict work stealing
+* [A Java fork/join calamity](https://web.archive.org/web/20190904045322/http://www.coopsoft.com/ar/CalamityArticle.html) - critique of Java's fork/join library, particularly its application of work stealing to non-strict computation
+* [Scheduling techniques for concurrent systems](https://www.stanford.edu/~ouster/cgi-bin/papers/coscheduling.pdf)
+* [Contention aware scheduling](https://www.blagodurov.net/files/a8-blagodurov.pdf)
+* [Balanced work stealing for time-sharing multicores](https://web.njit.edu/~dingxn/papers/BWS.pdf)
+* [Three layer cake for shared-memory programming](https://dl.acm.org/doi/10.1145/1953611.1953616)
+* [Non-blocking steal-half work queues](https://www.cs.bgu.ac.il/%7Ehendlerd/papers/p280-hendler.pdf)
+* [Reagents: expressing and composing fine-grained concurrency](https://aturon.github.io/academic/reagents.pdf)
+* [Algorithms for scalable synchronization of shared-memory multiprocessors](https://www.cs.rochester.edu/u/scott/papers/1991_TOCS_synch.pdf)
+* [Epoch-based reclamation](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-579.pdf).
+
+## Others
+
+* [Crash-only software](https://www.usenix.org/legacy/events/hotos03/tech/full_papers/candea/candea.pdf)
+* [Composing High-Performance Memory Allocators](https://people.cs.umass.edu/~emery/pubs/berger-pldi2001.pdf)
+* [Reconsidering Custom Memory Allocation](https://people.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf)
+
+## Papers *about* Rust
+
+* [GPU Programming in Rust: Implementing High Level Abstractions in a Systems
+ Level
+ Language](https://ieeexplore.ieee.org/document/6650903).
+ Early GPU work by Eric Holk.
+* [Parallel closures: a new twist on an old
+ idea](https://www.usenix.org/conference/hotpar12/parallel-closures-new-twist-old-idea)
+ - not exactly about Rust, but by nmatsakis
+* [Patina: A Formalization of the Rust Programming
+ Language](https://dada.cs.washington.edu/research/tr/2015/03/UW-CSE-15-03-02.pdf).
+ Early formalization of a subset of the type system, by Eric Reed.
+* [Experience Report: Developing the Servo Web Browser Engine using
+ Rust](https://arxiv.org/abs/1505.07383). By Lars Bergstrom.
+* [Implementing a Generic Radix Trie in
+ Rust](https://michaelsproul.github.io/rust_radix_paper/rust-radix-sproul.pdf). Undergrad
+ paper by Michael Sproul.
+* [Reenix: Implementing a Unix-Like Operating System in
+ Rust](https://scialex.github.io/reenix.pdf). Undergrad paper by Alex
+ Light.
+* [Evaluation of performance and productivity metrics of potential programming languages in the HPC environment](https://github.com/1wilkens/thesis-ba).
+ Bachelor's thesis by Florian Wilkens. Compares C, Go and Rust.
+* [Nom, a byte oriented, streaming, zero copy, parser combinators library
+ in Rust](http://spw15.langsec.org/papers/couprie-nom.pdf). By
+ Geoffroy Couprie, research for VLC.
+* [Graph-Based Higher-Order Intermediate
+ Representation](https://compilers.cs.uni-saarland.de/papers/lkh15_cgo.pdf). An
+ experimental IR implemented in Impala, a Rust-like language.
+* [Code Refinement of Stencil
+ Codes](https://compilers.cs.uni-saarland.de/papers/ppl14_web.pdf). Another
+ paper using Impala.
+* [Parallelization in Rust with fork-join and
+ friends](http://publications.lib.chalmers.se/records/fulltext/219016/219016.pdf). Linus
+ Farnstrand's master's thesis.
+* [Session Types for
+ Rust](https://munksgaard.me/papers/laumann-munksgaard-larsen.pdf). Philip
+ Munksgaard's master's thesis. Research for Servo.
+* [Ownership is Theft: Experiences Building an Embedded OS in Rust - Amit Levy, et. al.](https://amitlevy.com/papers/tock-plos2015.pdf)
+* [You can't spell trust without Rust](https://raw.githubusercontent.com/Gankro/thesis/master/thesis.pdf). Alexis Beingessner's master's thesis.
+* [Rust-Bio: a fast and safe bioinformatics library](https://academic.oup.com/bioinformatics/article/32/3/444/1743419). Johannes Köster
+* [Safe, Correct, and Fast Low-Level Networking](https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.704.1768). Robert Clipsham's master's thesis.
+* [Formalizing Rust traits](https://open.library.ubc.ca/cIRcle/collections/ubctheses/24/items/1.0220521). Jonatan Milewski's master's thesis.
+* [Rust as a Language for High Performance GC Implementation](https://users.cecs.anu.edu.au/~steveb/downloads/pdf/rust-ismm-2016.pdf)
+* [Simple Verification of Rust Programs via Functional Purification](https://github.com/Kha/electrolysis). Sebastian Ullrich's master's thesis.
+* [Writing parsers like it is 2017](http://spw17.langsec.org/papers/chifflier-parsing-in-2017.pdf) Pierre Chifflier and Geoffroy Couprie for the Langsec Workshop
+* [The Case for Writing a Kernel in Rust](https://www.tockos.org/assets/papers/rust-kernel-apsys2017.pdf)
+* [RustBelt: Securing the Foundations of the Rust Programming Language](https://plv.mpi-sws.org/rustbelt/popl18/)
+* [Oxide: The Essence of Rust](https://arxiv.org/abs/1903.00982). By Aaron Weiss, Olek Gierczak, Daniel Patterson, Nicholas D. Matsakis, and Amal Ahmed.
+* [Polymorphisation: Improving Rust compilation times through intelligent monomorphisation](https://davidtw.co/media/masters_dissertation.pdf). David Wood's master's thesis.
diff --git a/src/doc/rustc-dev-guide/src/appendix/code-index.md b/src/doc/rustc-dev-guide/src/appendix/code-index.md
new file mode 100644
index 000000000..f645c0118
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/appendix/code-index.md
@@ -0,0 +1,45 @@
+# Code Index
+
+rustc has a lot of important data structures. This is an attempt to give some
+guidance on where to learn more about some of the key data structures of the
+compiler.
+
+Item | Kind | Short description | Chapter | Declaration
+----------------|----------|-----------------------------|--------------------|-------------------
+`BodyId` | struct | One of four types of HIR node identifiers | [Identifiers in the HIR] | [compiler/rustc_hir/src/hir.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.BodyId.html)
+`Compiler` | struct | Represents a compiler session and can be used to drive a compilation. | [The Rustc Driver and Interface] | [compiler/rustc_interface/src/interface.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/interface/struct.Compiler.html)
+`ast::Crate` | struct | A syntax-level representation of a parsed crate | [The parser] | [compiler/rustc_ast/src/ast.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/ast/struct.Crate.html)
+`rustc_hir::Crate` | struct | A more abstract, compiler-friendly form of a crate's AST | [The Hir] | [compiler/rustc_hir/src/hir.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Crate.html)
+`DefId` | struct | One of four types of HIR node identifiers | [Identifiers in the HIR] | [compiler/rustc_hir/src/def_id.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.DefId.html)
+`DiagnosticBuilder` | struct | A struct for building up compiler diagnostics, such as errors or lints | [Emitting Diagnostics] | [compiler/rustc_errors/src/diagnostic_builder.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.DiagnosticBuilder.html)
+`DocContext` | struct | A state container used by rustdoc when crawling through a crate to gather its documentation | [Rustdoc] | [src/librustdoc/core.rs](https://github.com/rust-lang/rust/blob/master/src/librustdoc/core.rs)
+`HirId` | struct | One of four types of HIR node identifiers | [Identifiers in the HIR] | [compiler/rustc_hir/src/hir_id.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir_id/struct.HirId.html)
+`NodeId` | struct | One of four types of HIR node identifiers. Being phased out | [Identifiers in the HIR] | [compiler/rustc_ast/src/ast.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/node_id/struct.NodeId.html)
+`P` | struct | An owned immutable smart pointer. By contrast, `&T` is not owned, and `Box<T>` is not immutable. | None | [compiler/rustc_ast/src/ptr.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/ptr/struct.P.html)
+`ParamEnv` | struct | Information about generic parameters or `Self`, useful for working with associated or generic items | [Parameter Environment] | [compiler/rustc_middle/src/ty/mod.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.ParamEnv.html)
+`ParseSess` | struct | This struct contains information about a parsing session | [The parser] | [compiler/rustc_session/src/parse/parse.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/parse/struct.ParseSess.html)
+`Query` | struct | Represents the result of query to the `Compiler` interface and allows stealing, borrowing, and returning the results of compiler passes. | [The Rustc Driver and Interface] | [compiler/rustc_interface/src/queries.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/queries/struct.Query.html)
+`Rib` | struct | Represents a single scope of names | [Name resolution] | [compiler/rustc_resolve/src/lib.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/late/struct.Rib.html)
+`Session` | struct | The data associated with a compilation session | [The parser], [The Rustc Driver and Interface] | [compiler/rustc_session/src/session.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html)
+`SourceFile` | struct | Part of the `SourceMap`. Maps AST nodes to their source code for a single source file. Was previously called FileMap | [The parser] | [compiler/rustc_span/src/lib.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.SourceFile.html)
+`SourceMap` | struct | Maps AST nodes to their source code. It is composed of `SourceFile`s. Was previously called CodeMap | [The parser] | [compiler/rustc_span/src/source_map.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/source_map/struct.SourceMap.html)
+`Span` | struct | A location in the user's source code, used for error reporting primarily | [Emitting Diagnostics] | [compiler/rustc_span/src/span_encoding.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html)
+`StringReader` | struct | This is the lexer used during parsing. It consumes characters from the raw source code being compiled and produces a series of tokens for use by the rest of the parser | [The parser] | [compiler/rustc_parse/src/lexer/mod.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/lexer/struct.StringReader.html)
+`rustc_ast::token_stream::TokenStream` | struct | An abstract sequence of tokens, organized into `TokenTree`s | [The parser], [Macro expansion] | [compiler/rustc_ast/src/tokenstream.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/tokenstream/struct.TokenStream.html)
+`TraitDef` | struct | This struct contains a trait's definition with type information | [The `ty` modules] | [compiler/rustc_middle/src/ty/trait_def.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/trait_def/struct.TraitDef.html)
+`TraitRef` | struct | The combination of a trait and its input types (e.g. `P0: Trait<P1...Pn>`) | [Trait Solving: Goals and Clauses] | [compiler/rustc_middle/src/ty/sty.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TraitRef.html)
+`Ty<'tcx>` | struct | This is the internal representation of a type used for type checking | [Type checking] | [compiler/rustc_middle/src/ty/mod.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Ty.html)
+`TyCtxt<'tcx>` | struct | The "typing context". This is the central data structure in the compiler. It is the context that you use to perform all manner of queries | [The `ty` modules] | [compiler/rustc_middle/src/ty/context.rs](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html)
+
+[The HIR]: ../hir.html
+[Identifiers in the HIR]: ../hir.html#hir-id
+[The parser]: ../the-parser.html
+[The Rustc Driver and Interface]: ../rustc-driver.html
+[Type checking]: ../type-checking.html
+[The `ty` modules]: ../ty.html
+[Rustdoc]: ../rustdoc.html
+[Emitting Diagnostics]: ../diagnostics.html
+[Macro expansion]: ../macro-expansion.html
+[Name resolution]: ../name-resolution.html
+[Parameter Environment]: ../param_env.html
+[Trait Solving: Goals and Clauses]: ../traits/goals-and-clauses.html#domain-goals
diff --git a/src/doc/rustc-dev-guide/src/appendix/compiler-lecture.md b/src/doc/rustc-dev-guide/src/appendix/compiler-lecture.md
new file mode 100644
index 000000000..dabd2f087
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/appendix/compiler-lecture.md
@@ -0,0 +1,48 @@
+# Compiler Lecture Series
+
+These are videos where various experts explain different parts of the compiler:
+
+## General
+- [January 2019: Tom Tromey discusses debugging support in rustc](https://www.youtube.com/watch?v=elBxMRSNYr4)
+- [June 2019: Responsive compilers - Nicholas Matsakis - PLISS 2019](https://www.youtube.com/watch?v=N6b44kMS6OM)
+- [June 2019: Things I Learned (TIL) - Nicholas Matsakis - PLISS 2019](https://www.youtube.com/watch?v=LIYkT3p5gTs)
+
+## Rust Analyzer
+- [January 2019: How Salsa Works](https://www.youtube.com/watch?v=_muY4HjSqVw)
+- [January 2019: Salsa In More Depth](https://www.youtube.com/watch?v=i_IhACacPRY)
+- [January 2019: Rust analyzer guide](https://www.youtube.com/watch?v=ANKBNiSWyfc)
+- [February 2019: Rust analyzer syntax trees](https://www.youtube.com/watch?v=DGAuLWdCCAI)
+- [March 2019: rust-analyzer type-checker overview by flodiebold](https://www.youtube.com/watch?v=Lmp3P9WNL8o)
+- [March 2019: RLS 2.0, Salsa, and Name Resolution](https://www.youtube.com/watch?v=Xr-rBqLr-G4)
+
+## Type System
+- [July 2015: Felix Klock - Rust: A type system you didn't know you wanted - Curry On](https://www.youtube.com/watch?v=Q7lQCgnNWU0)
+- [November 2016: Felix Klock - Subtyping in Rust and Clarke's Third Law](https://www.youtube.com/watch?v=fI4RG_uq-WU)
+- [February 2019: Universes and Lifetimes](https://www.youtube.com/watch?v=iV1Z0xYXkck)
+- [April 2019: Representing types in rustc](https://www.youtube.com/watch?v=c01TsOsr3-c)
+- [March 2019: RFC #2229 Disjoint Field Capture plan](https://www.youtube.com/watch?v=UTXOptVMuIc)
+
+## Closures
+- [October 2018: closures and upvar capture](https://www.youtube.com/watch?v=fMopdkn5-Xw)
+- [October 2018: blitzerr closure upvar tys](https://www.youtube.com/watch?v=pLmVhSB-z4s)
+- [January 2019: Convert Closure Upvar Representation to Tuples with blitzerr](https://www.youtube.com/watch?v=2QCuNtISoYc)
+
+## Chalk
+- [July 2018: Coherence in Chalk by Sunjay Varma - Bay Area Rust Meetup](https://www.youtube.com/watch?v=rZqS4bLPL24)
+- [March 2019: rustc-chalk integration overview](https://www.youtube.com/watch?v=MBWtbDifPeU)
+- [April 2019: How the chalk-engine crate works](https://www.youtube.com/watch?v=Ny2928cGDoM)
+- [May 2019: How the chalk-engine crate works 2](https://www.youtube.com/watch?v=hmV66tB79LM)
+
+## Polonius
+- [March 2019: Polonius-rustc walkthrough](https://www.youtube.com/watch?v=i5KdU0ieb_A)
+- [May 2019: Polonius WG: Initialization and move tracking](https://www.youtube.com/watch?v=ilv9V-328HI)
+
+## Miri
+- [March 2019: oli-obk on miri and constant evaluation](https://www.youtube.com/watch?v=5Pm2C1YXrvM)
+
+## Async
+- [February 2019: async-await implementation plans](https://www.youtube.com/watch?v=xe2_whJWBC0)
+- [April 2019: async-await region inferencer](https://www.youtube.com/watch?v=hlOxfkUDLPQ)
+
+## Code Generation
+- [January 2019: Cranelift](https://www.youtube.com/watch?v=9OIA7DTFQWU)
diff --git a/src/doc/rustc-dev-guide/src/appendix/glossary.md b/src/doc/rustc-dev-guide/src/appendix/glossary.md
new file mode 100644
index 000000000..375db493c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/appendix/glossary.md
@@ -0,0 +1,98 @@
+# Glossary
+
+<!-- &nbsp;s are a workaround for https://github.com/badboy/mdbook-toc/issues/19 -->
+Term | Meaning
+------------------------------------------------------|--------
+<span id="arena">arena/arena allocation</span> &nbsp; | An _arena_ is a large memory buffer from which other memory allocations are made. This style of allocation is called _arena allocation_. See [this chapter](../memory.md) for more info.
+<span id="ast">AST</span> &nbsp; | The abstract syntax tree produced by the `rustc_ast` crate; reflects user syntax very closely.
+<span id="binder">binder</span> &nbsp; | A "binder" is a place where a variable or type is declared; for example, the `<T>` is a binder for the generic type parameter `T` in `fn foo<T>(..)`, and \|`a`\|` ...` is a binder for the parameter `a`. See [the background chapter for more](./background.md#free-vs-bound).
+<span id="body-id">BodyId</span> &nbsp; | An identifier that refers to a specific body (definition of a function or constant) in the crate. See [the HIR chapter for more](../hir.md#identifiers-in-the-hir).
+<span id="bound-var">bound variable</span> &nbsp; | A "bound variable" is one that is declared within an expression/term. For example, the variable `a` is bound within the closure expression \|`a`\|` a * 2`. See [the background chapter for more](./background.md#free-vs-bound)
+<span id="codegen">codegen</span> &nbsp; | The code to translate MIR into LLVM IR.
+<span id="codegen-unit">codegen unit</span> &nbsp; | When we produce LLVM IR, we group the Rust code into a number of codegen units (sometimes abbreviated as CGUs). Each of these units is processed by LLVM independently from one another, enabling parallelism. They are also the unit of incremental re-use. ([see more](../backend/codegen.md))
+<span id="completeness">completeness</span> &nbsp; | A technical term in type theory, it means that every type-safe program also type-checks. Having both soundness and completeness is very hard, and usually soundness is more important. (see "soundness").
+<span id="cfg">control-flow graph</span> &nbsp; | A representation of the control-flow of a program; see [the background chapter for more](./background.md#cfg)
+<span id="ctfe">CTFE</span> &nbsp; | Short for Compile-Time Function Evaluation, this is the ability of the compiler to evaluate `const fn`s at compile time. This is part of the compiler's constant evaluation system. ([see more](../const-eval.md))
+<span id="cx">cx</span> &nbsp; | We tend to use "cx" as an abbreviation for context. See also `tcx`, `infcx`, etc.
+<span id="ctxt">ctxt</span> &nbsp; | We also use "ctxt" as an abbreviation for context, e.g. [`TyCtxt`](#TyCtxt). See also [cx](#cx) or [tcx](#tcx).
+<span id="dag">DAG</span> &nbsp; | A directed acyclic graph is used during compilation to keep track of dependencies between queries. ([see more](../queries/incremental-compilation.md))
+<span id="data-flow">data-flow analysis</span> &nbsp; | A static analysis that figures out what properties are true at each point in the control-flow of a program; see [the background chapter for more](./background.md#dataflow).
+<span id="debruijn">DeBruijn Index</span> &nbsp; | A technique for describing which binder a variable is bound by using only integers. It has the benefit that it is invariant under variable renaming. ([see more](./background.md#what-is-a-debruijn-index))
+<span id="def-id">`DefId`</span> &nbsp; | An index identifying a definition (see `rustc_middle/src/hir/def_id.rs`). Uniquely identifies a `DefPath`. See [the HIR chapter for more](../hir.md#identifiers-in-the-hir).
+<span id="discriminant">discriminant</span> &nbsp; | The underlying value associated with an enum variant or generator state to indicate it as "active" (but not to be confused with its ["variant index"](#variant-idx)). At runtime, the discriminant of the active variant is encoded in the [tag](#tag).
+<span id="double-ptr">double pointer</span> &nbsp; | A pointer with additional metadata. See "fat pointer" for more.
+<span id="drop-glue">drop glue</span> &nbsp; | (internal) compiler-generated instructions that handle calling the destructors (`Drop`) for data types.
+<span id="dst">DST</span> &nbsp; | Short for Dynamically-Sized Type, this is a type for which the compiler cannot statically know the size in memory (e.g. `str` or `[u8]`). Such types don't implement `Sized` and cannot be allocated on the stack. They can only occur as the last field in a struct. They can only be used behind a pointer (e.g. `&str` or `&[u8]`).
+<span id="ebl">early-bound lifetime</span> &nbsp; | A lifetime region that is substituted at its definition site. Bound in an item's `Generics` and substituted using a `Substs`. Contrast with **late-bound lifetime**. ([see more](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.RegionKind.html#bound-regions))
+<span id="empty-type">empty type</span> &nbsp; | see "uninhabited type".
+<span id="fat-ptr">fat pointer</span> &nbsp; | A two word value carrying the address of some value, along with some further information necessary to put the value to use. Rust includes two kinds of "fat pointers": references to slices, and trait objects. A reference to a slice carries the starting address of the slice and its length. A trait object carries a value's address and a pointer to the trait's implementation appropriate to that value. "Fat pointers" are also known as "wide pointers", and "double pointers".
+<span id="free-var">free variable</span> &nbsp; | A "free variable" is one that is not bound within an expression or term; see [the background chapter for more](./background.md#free-vs-bound)
+<span id="generics">generics</span> &nbsp; | The set of generic type parameters defined on a type or item.
+<span id="hir">HIR</span> &nbsp; | The High-level IR, created by lowering and desugaring the AST. ([see more](../hir.md))
+<span id="hir-id">`HirId`</span> &nbsp; | Identifies a particular node in the HIR by combining a def-id with an "intra-definition offset". See [the HIR chapter for more](../hir.md#identifiers-in-the-hir).
+<span id="hir-map">HIR map</span> &nbsp; | The HIR map, accessible via `tcx.hir()`, allows you to quickly navigate the HIR and convert between various forms of identifiers.
+<span id="ice">ICE</span> &nbsp; | Short for internal compiler error, this is when the compiler crashes.
+<span id="ich">ICH</span> &nbsp; | Short for incremental compilation hash, these are used as fingerprints for things such as HIR and crate metadata, to check if changes have been made. This is useful in incremental compilation to see if part of a crate has changed and should be recompiled.
+<span id="infcx">infcx</span> &nbsp; | The type inference context (`InferCtxt`). (see `rustc_middle::infer`)
+<span id="inf-var">inference variable</span> &nbsp; | When doing type or region inference, an "inference variable" is a kind of special type/region that represents what you are trying to infer. Think of X in algebra. For example, if we are trying to infer the type of a variable in a program, we create an inference variable to represent that unknown type.
+<span id="intern">intern</span> &nbsp; | Interning refers to storing certain frequently-used constant data, such as strings, and then referring to the data by an identifier (e.g. a `Symbol`) rather than the data itself, to reduce memory usage and number of allocations. See [this chapter](../memory.md) for more info.
+<span id="intrinsic">intrinsic</span> &nbsp; | Intrinsics are special functions that are implemented in the compiler itself but exposed (often unstably) to users. They do magical and dangerous things. (See [`std::intrinsics`](https://doc.rust-lang.org/std/intrinsics/index.html))
+<span id="ir">IR</span> &nbsp; | Short for Intermediate Representation, a general term in compilers. During compilation, the code is transformed from raw source (ASCII text) to various IRs. In Rust, these are primarily HIR, MIR, and LLVM IR. Each IR is well-suited for some set of computations. For example, MIR is well-suited for the borrow checker, and LLVM IR is well-suited for codegen because LLVM accepts it.
+<span id="irlo">IRLO</span> &nbsp; | `IRLO` or `irlo` is sometimes used as an abbreviation for [internals.rust-lang.org](https://internals.rust-lang.org).
+<span id="item">item</span> &nbsp; | A kind of "definition" in the language, such as a static, const, use statement, module, struct, etc. Concretely, this corresponds to the `Item` type.
+<span id="lang-item">lang item</span> &nbsp; | Items that represent concepts intrinsic to the language itself, such as special built-in traits like `Sync` and `Send`; or traits representing operations such as `Add`; or functions that are called by the compiler. ([see more](https://doc.rust-lang.org/1.9.0/book/lang-items.html))
+<span id="lbl">late-bound lifetime</span> &nbsp; | A lifetime region that is substituted at its call site. Bound in a HRTB and substituted by specific functions in the compiler, such as `liberate_late_bound_regions`. Contrast with **early-bound lifetime**. ([see more](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.RegionKind.html#bound-regions))
+<span id="local-crate">local crate</span> &nbsp; | The crate currently being compiled. This is in contrast to "upstream crates" which refer to dependencies of the local crate.
+<span id="lto">LTO</span> &nbsp; | Short for Link-Time Optimizations, this is a set of optimizations offered by LLVM that occur just before the final binary is linked. These include optimizations like removing functions that are never used in the final program, for example. _ThinLTO_ is a variant of LTO that aims to be a bit more scalable and efficient, but possibly sacrifices some optimizations. You may also read issues in the Rust repo about "FatLTO", which is the loving nickname given to non-Thin LTO. LLVM documentation: [here][lto] and [here][thinlto].
+<span id="llvm">[LLVM]</span> &nbsp; | (actually not an acronym :P) an open-source compiler backend. It accepts LLVM IR and outputs native binaries. Various languages (e.g. Rust) can then implement a compiler front-end that outputs LLVM IR and use LLVM to compile to all the platforms LLVM supports.
+<span id="memoization">memoization</span> &nbsp; | The process of storing the results of (pure) computations (such as pure function calls) to avoid having to repeat them in the future. This is typically a trade-off between execution speed and memory usage.
+<span id="mir">MIR</span> &nbsp; | The Mid-level IR that is created after type-checking for use by borrowck and codegen. ([see more](../mir/index.md))
+<span id="miri">miri</span> &nbsp; | An interpreter for MIR used for constant evaluation. ([see more](../miri.md))
+<span id="mono">monomorphization</span> &nbsp; | The process of taking generic implementations of types and functions and instantiating them with concrete types. For example, in the code we might have `Vec<T>`, but in the final executable, we will have a copy of the `Vec` code for every concrete type used in the program (e.g. a copy for `Vec<usize>`, a copy for `Vec<MyStruct>`, etc).
+<span id="normalize">normalize</span> &nbsp; | A general term for converting to a more canonical form, but in the case of rustc typically refers to [associated type normalization](../traits/goals-and-clauses.md#normalizeprojection---type).
+<span id="newtype">newtype</span> &nbsp; | A wrapper around some other type (e.g., `struct Foo(T)` is a "newtype" for `T`). This is commonly used in Rust to give a stronger type for indices.
+<span id="niche">niche</span> &nbsp; | Invalid bit patterns for a type *that can be used* for layout optimizations. Some types cannot have certain bit patterns. For example, the `NonZero*` integers or the reference `&T` cannot be represented by a 0 bitstring. This means the compiler can perform layout optimizations by taking advantage of the invalid "niche value". An example application for this is the [*Discriminant elision on `Option`-like enums*](https://rust-lang.github.io/unsafe-code-guidelines/layout/enums.html#discriminant-elision-on-option-like-enums), which allows using a type's niche as the ["tag"](#tag) for an `enum` without requiring a separate field.
+<span id="nll">NLL</span> &nbsp; | Short for [non-lexical lifetimes](../borrow_check/region_inference.md), this is an extension to Rust's borrowing system to make it be based on the control-flow graph.
+<span id="node-id">node-id or NodeId</span> &nbsp; | An index identifying a particular node in the AST or HIR; gradually being phased out and replaced with `HirId`. See [the HIR chapter for more](../hir.md#identifiers-in-the-hir).
+<span id="obligation">obligation</span> &nbsp; | Something that must be proven by the trait system. ([see more](../traits/resolution.md))
+<span id="placeholder">placeholder</span> &nbsp; | **NOTE: skolemization is deprecated by placeholder** a way of handling subtyping around "for-all" types (e.g., `for<'a> fn(&'a u32)`) as well as solving higher-ranked trait bounds (e.g., `for<'a> T: Trait<'a>`). See [the chapter on placeholder and universes](../borrow_check/region_inference/placeholders_and_universes.md) for more details.
+<span id="point">point</span> &nbsp; | Used in the NLL analysis to refer to some particular location in the MIR; typically used to refer to a node in the control-flow graph.
+<span id="polymorphize">polymorphize</span> &nbsp; | An optimization that avoids unnecessary monomorphisation. ([see more](../backend/monomorph.md#polymorphization))
+<span id="projection">projection</span> &nbsp; | A general term for a "relative path", e.g. `x.f` is a "field projection", and `T::Item` is an ["associated type projection"](../traits/goals-and-clauses.md#trait-ref).
+<span id="pc">promoted constants</span> &nbsp; | Constants extracted from a function and lifted to static scope; see [this section](../mir/index.md#promoted) for more details.
+<span id="provider">provider</span> &nbsp; | The function that executes a query. ([see more](../query.md))
+<span id="quantified">quantified</span> &nbsp; | In math or logic, existential and universal quantification are used to ask questions like "is there any type T for which is true?" or "is this true for all types T?"; see [the background chapter for more](./background.md#quantified).
+<span id="query">query</span> &nbsp; | A sub-computation during compilation. Query results can be cached in the current session or to disk for incremental compilation. ([see more](../query.md))
+<span id="recovery">recovery</span> &nbsp; | Recovery refers to handling invalid syntax during parsing (e.g. a missing comma) and continuing to parse the AST. This avoid showing spurious errors to the user (e.g. showing 'missing field' errors when the struct definition contains errors).
+<span id="region">region</span> &nbsp; | Another term for "lifetime" often used in the literature and in the borrow checker.
+<span id="rib">rib</span> &nbsp; | A data structure in the name resolver that keeps track of a single scope for names. ([see more](../name-resolution.md))
+<span id="scrutinee">scrutinee</div> &nbsp; | A scrutinee is the expression that is matched on in `match` expressions and similar pattern matching constructs. For example, in `match x { A => 1, B => 2 }`, the expression `x` is the scrutinee.
+<span id="sess">sess</span> &nbsp; | The compiler session, which stores global data used throughout compilation
+<span id="side-tables">side tables</span> &nbsp; | Because the AST and HIR are immutable once created, we often carry extra information about them in the form of hashtables, indexed by the id of a particular node.
+<span id="sigil">sigil</span> &nbsp; | Like a keyword but composed entirely of non-alphanumeric tokens. For example, `&` is a sigil for references.
+<span id="soundness">soundness</span> &nbsp; | A technical term in type theory. Roughly, if a type system is sound, then a program that type-checks is type-safe. That is, one can never (in safe rust) force a value into a variable of the wrong type. (see "completeness").
+<span id="span">span</span> &nbsp; | A location in the user's source code, used for error reporting primarily. These are like a file-name/line-number/column tuple on steroids: they carry a start/end point, and also track macro expansions and compiler desugaring. All while being packed into a few bytes (really, it's an index into a table). See the [`Span`] datatype for more.
+<span id="substs">substs</span> &nbsp; | The substitutions for a given generic type or item (e.g. the `i32`, `u32` in `HashMap<i32, u32>`).
+<span id="sysroot">sysroot</span> &nbsp; | The directory for build artifacts that are loaded by the compiler at runtime. ([see more](../building/bootstrapping.html#what-is-a-sysroot))
+<span id="tag">tag</span> &nbsp; | The "tag" of an enum/generator encodes the [discriminant](#discriminant) of the active variant/state. Tags can either be "direct" (simply storing the discriminant in a field) or use a ["niche"](#niche).
+<span id="tcx">`tcx`</span> &nbsp; | Standard variable name for the "typing context" (`TyCtxt`), main data structure of the compiler. ([see more](../ty.md))
+<span id="lifetime-tcx">`'tcx`</span> &nbsp; | The lifetime of the allocation arenas used by `TyCtxt`. Most data interned during a compilation session will use this lifetime with the exception of HIR data which uses the `'hir` lifetime. ([see more](../ty.md))
+<span id="token">token</span> &nbsp; | The smallest unit of parsing. Tokens are produced after lexing ([see more](../the-parser.md)).
+<span id="tls">[TLS]</span> &nbsp; | Thread-Local Storage. Variables may be defined so that each thread has its own copy (rather than all threads sharing the variable). This has some interactions with LLVM. Not all platforms support TLS.
+<span id="trait-ref">trait reference</span> &nbsp; | The name of a trait along with a suitable set of input type/lifetimes. ([see more](../traits/goals-and-clauses.md#trait-ref))
+<span id="trans">trans</span> &nbsp; | Short for "translation", the code to translate MIR into LLVM IR. Renamed to codegen.
+<span id="ty">`Ty`</span> &nbsp; | The internal representation of a type. ([see more](../ty.md))
+<span id="tyctxt">`TyCtxt`</span> &nbsp; | The data structure often referred to as [`tcx`](#tcx) in code which provides access to session data and the query system.
+<span id="ufcs">UFCS</span> &nbsp; | Short for Universal Function Call Syntax, this is an unambiguous syntax for calling a method. ([see more](../type-checking.md))
+<span id="ut">uninhabited type</span> &nbsp; | A type which has _no_ values. This is not the same as a ZST, which has exactly 1 value. An example of an uninhabited type is `enum Foo {}`, which has no variants, and so, can never be created. The compiler can treat code that deals with uninhabited types as dead code, since there is no such value to be manipulated. `!` (the never type) is an uninhabited type. Uninhabited types are also called "empty types".
+<span id="upvar">upvar</span> &nbsp; | A variable captured by a closure from outside the closure.
+<span id="variance">variance</span> &nbsp; | Determines how changes to a generic type/lifetime parameter affect subtyping; for example, if `T` is a subtype of `U`, then `Vec<T>` is a subtype `Vec<U>` because `Vec` is *covariant* in its generic parameter. See [the background chapter](./background.md#variance) for a more general explanation. See the [variance chapter](../variance.md) for an explanation of how type checking handles variance.
+<span id="variant-idx">variant index</span> &nbsp; | In an enum, identifies a variant by assigning them indices starting at 0. This is purely internal and not to be confused with the ["discriminant"](#discriminant) which can be overwritten by the user (e.g. `enum Bool { True = 42, False = 0 }`).
+<span id="wide-ptr">wide pointer</span> &nbsp; | A pointer with additional metadata. See "fat pointer" for more.
+<span id="zst">ZST</span> &nbsp; | Zero-Sized Type. A type whose values have size 0 bytes. Since `2^0 = 1`, such types can have exactly one value. For example, `()` (unit) is a ZST. `struct Foo;` is also a ZST. The compiler can do some nice optimizations around ZSTs.
+
+[LLVM]: https://llvm.org/
+[lto]: https://llvm.org/docs/LinkTimeOptimization.html
+[`Span`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html
+[thinlto]: https://clang.llvm.org/docs/ThinLTO.html
+[TLS]: https://llvm.org/docs/LangRef.html#thread-local-storage-models
diff --git a/src/doc/rustc-dev-guide/src/appendix/humorust.md b/src/doc/rustc-dev-guide/src/appendix/humorust.md
new file mode 100644
index 000000000..bc8255439
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/appendix/humorust.md
@@ -0,0 +1,15 @@
+# Humor in Rust
+
+What's a project without a sense of humor? And frankly some of these are
+enlightening?
+
+- [Weird exprs test](https://github.com/rust-lang/rust/blob/master/src/test/ui/weird-exprs.rs)
+- [Ferris Rap](http://fitzgeraldnick.com/2018/12/13/rust-raps.html)
+- [The Genesis of Generic Germination](https://github.com/rust-lang/rust/pull/53645#issue-210543221)
+- [The Bastion of the Turbofish test](https://github.com/rust-lang/rust/blob/79d8a0fcefa5134db2a94739b1d18daa01fc6e9f/src/test/ui/bastion-of-the-turbofish.rs)
+- [Rust Koans](https://users.rust-lang.org/t/rust-koans/2408)
+- [`break rust;`](https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=0ab2bd6a9d722e0f05a95e2a5dcf89cc)
+- [The Nomicon Intro](https://doc.rust-lang.org/stable/nomicon/)
+- [`rustc-ty` renaming punfest](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/rustc-ty.20naming.20bikeshed.20.2F.20punfest.20%28was.3A.20design.20meeting.202.2E.2E.2E/near/189906455)
+- [try using their name "ferris" instead](https://github.com/rust-lang/rust/pull/91476)
+- [Forbid pineapple on pizza](https://github.com/rust-lang/rust/pull/70645)
diff --git a/src/doc/rustc-dev-guide/src/asm.md b/src/doc/rustc-dev-guide/src/asm.md
new file mode 100644
index 000000000..cd5430ffd
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/asm.md
@@ -0,0 +1,367 @@
+# Inline assembly
+
+<!-- toc -->
+
+## Overview
+
+Inline assembly in rustc mostly revolves around taking an `asm!` macro invocation and plumbing it
+through all of the compiler layers down to LLVM codegen. Throughout the various stages, an
+`InlineAsm` generally consists of 3 components:
+
+- The template string, which is stored as an array of `InlineAsmTemplatePiece`. Each piece
+represents either a literal or a placeholder for an operand (just like format strings).
+```rust
+pub enum InlineAsmTemplatePiece {
+ String(String),
+ Placeholder { operand_idx: usize, modifier: Option<char>, span: Span },
+}
+```
+
+- The list of operands to the `asm!` (`in`, `[late]out`, `in[late]out`, `sym`, `const`). These are
+represented differently at each stage of lowering, but follow a common pattern:
+ - `in`, `out` and `inout` all have an associated register class (`reg`) or explicit register
+(`"eax"`).
+ - `inout` has 2 forms: one with a single expression that is both read from and written to, and
+one with two separate expressions for the input and output parts.
+ - `out` and `inout` have a `late` flag (`lateout` / `inlateout`) to indicate that the register
+allocator is allowed to reuse an input register for this output.
+ - `out` and the split variant of `inout` allow `_` to be specified for an output, which means
+that the output is discarded. This is used to allocate scratch registers for assembly code.
+ - `const` refers to an anonymous constants and generally works like an inline const.
+ - `sym` is a bit special since it only accepts a path expression, which must point to a `static`
+or a `fn`.
+
+- The options set at the end of the `asm!` macro. The only ones that are of particular interest to
+rustc are `NORETURN` which makes `asm!` return `!` instead of `()`, and `RAW` which disables format
+string parsing. The remaining options are mostly passed through to LLVM with little processing.
+```rust
+bitflags::bitflags! {
+ pub struct InlineAsmOptions: u16 {
+ const PURE = 1 << 0;
+ const NOMEM = 1 << 1;
+ const READONLY = 1 << 2;
+ const PRESERVES_FLAGS = 1 << 3;
+ const NORETURN = 1 << 4;
+ const NOSTACK = 1 << 5;
+ const ATT_SYNTAX = 1 << 6;
+ const RAW = 1 << 7;
+ const MAY_UNWIND = 1 << 8;
+ }
+}
+```
+
+## AST
+
+`InlineAsm` is represented as an expression in the AST:
+
+```rust
+pub struct InlineAsm {
+ pub template: Vec<InlineAsmTemplatePiece>,
+ pub template_strs: Box<[(Symbol, Option<Symbol>, Span)]>,
+ pub operands: Vec<(InlineAsmOperand, Span)>,
+ pub clobber_abi: Option<(Symbol, Span)>,
+ pub options: InlineAsmOptions,
+ pub line_spans: Vec<Span>,
+}
+
+pub enum InlineAsmRegOrRegClass {
+ Reg(Symbol),
+ RegClass(Symbol),
+}
+
+pub enum InlineAsmOperand {
+ In {
+ reg: InlineAsmRegOrRegClass,
+ expr: P<Expr>,
+ },
+ Out {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ expr: Option<P<Expr>>,
+ },
+ InOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ expr: P<Expr>,
+ },
+ SplitInOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ in_expr: P<Expr>,
+ out_expr: Option<P<Expr>>,
+ },
+ Const {
+ anon_const: AnonConst,
+ },
+ Sym {
+ expr: P<Expr>,
+ },
+}
+```
+
+The `asm!` macro is implemented in `rustc_builtin_macros` and outputs an `InlineAsm` AST node. The
+template string is parsed using `fmt_macros`, positional and named operands are resolved to
+explicit operand indices. Since target information is not available to macro invocations,
+validation of the registers and register classes is deferred to AST lowering.
+
+## HIR
+
+`InlineAsm` is represented as an expression in the HIR:
+
+```rust
+pub struct InlineAsm<'hir> {
+ pub template: &'hir [InlineAsmTemplatePiece],
+ pub template_strs: &'hir [(Symbol, Option<Symbol>, Span)],
+ pub operands: &'hir [(InlineAsmOperand<'hir>, Span)],
+ pub options: InlineAsmOptions,
+ pub line_spans: &'hir [Span],
+}
+
+pub enum InlineAsmRegOrRegClass {
+ Reg(InlineAsmReg),
+ RegClass(InlineAsmRegClass),
+}
+
+pub enum InlineAsmOperand<'hir> {
+ In {
+ reg: InlineAsmRegOrRegClass,
+ expr: Expr<'hir>,
+ },
+ Out {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ expr: Option<Expr<'hir>>,
+ },
+ InOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ expr: Expr<'hir>,
+ },
+ SplitInOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ in_expr: Expr<'hir>,
+ out_expr: Option<Expr<'hir>>,
+ },
+ Const {
+ anon_const: AnonConst,
+ },
+ Sym {
+ expr: Expr<'hir>,
+ },
+}
+```
+
+AST lowering is where `InlineAsmRegOrRegClass` is converted from `Symbol`s to an actual register or
+register class. If any modifiers are specified for a template string placeholder, these are
+validated against the set allowed for that operand type. Finally, explicit registers for inputs and
+outputs are checked for conflicts (same register used for different operands).
+
+## Type checking
+
+Each register class has a whitelist of types that it may be used with. After the types of all
+operands have been determined, the `intrinsicck` pass will check that these types are in the
+whitelist. It also checks that split `inout` operands have compatible types and that `const`
+operands are integers or floats. Suggestions are emitted where needed if a template modifier should
+be used for an operand based on the type that was passed into it.
+
+## THIR
+
+`InlineAsm` is represented as an expression in the THIR:
+
+```rust
+crate enum ExprKind<'tcx> {
+ // [..]
+ InlineAsm {
+ template: &'tcx [InlineAsmTemplatePiece],
+ operands: Box<[InlineAsmOperand<'tcx>]>,
+ options: InlineAsmOptions,
+ line_spans: &'tcx [Span],
+ },
+}
+crate enum InlineAsmOperand<'tcx> {
+ In {
+ reg: InlineAsmRegOrRegClass,
+ expr: ExprId,
+ },
+ Out {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ expr: Option<ExprId>,
+ },
+ InOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ expr: ExprId,
+ },
+ SplitInOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ in_expr: ExprId,
+ out_expr: Option<ExprId>,
+ },
+ Const {
+ value: &'tcx Const<'tcx>,
+ span: Span,
+ },
+ SymFn {
+ expr: ExprId,
+ },
+ SymStatic {
+ def_id: DefId,
+ },
+}
+```
+
+The only significant change compared to HIR is that `Sym` has been lowered to either a `SymFn`
+whose `expr` is a `Literal` ZST of the `fn`, or a `SymStatic` which points to the `DefId` of a
+`static`.
+
+## MIR
+
+`InlineAsm` is represented as a `Terminator` in the MIR:
+
+```rust
+pub enum TerminatorKind<'tcx> {
+ // [..]
+
+ /// Block ends with an inline assembly block. This is a terminator since
+ /// inline assembly is allowed to diverge.
+ InlineAsm {
+ /// The template for the inline assembly, with placeholders.
+ template: &'tcx [InlineAsmTemplatePiece],
+
+ /// The operands for the inline assembly, as `Operand`s or `Place`s.
+ operands: Vec<InlineAsmOperand<'tcx>>,
+
+ /// Miscellaneous options for the inline assembly.
+ options: InlineAsmOptions,
+
+ /// Source spans for each line of the inline assembly code. These are
+ /// used to map assembler errors back to the line in the source code.
+ line_spans: &'tcx [Span],
+
+ /// Destination block after the inline assembly returns, unless it is
+ /// diverging (InlineAsmOptions::NORETURN).
+ destination: Option<BasicBlock>,
+ },
+}
+
+pub enum InlineAsmOperand<'tcx> {
+ In {
+ reg: InlineAsmRegOrRegClass,
+ value: Operand<'tcx>,
+ },
+ Out {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ place: Option<Place<'tcx>>,
+ },
+ InOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ in_value: Operand<'tcx>,
+ out_place: Option<Place<'tcx>>,
+ },
+ Const {
+ value: Box<Constant<'tcx>>,
+ },
+ SymFn {
+ value: Box<Constant<'tcx>>,
+ },
+ SymStatic {
+ def_id: DefId,
+ },
+}
+```
+
+As part of HAIR lowering, `InOut` and `SplitInOut` operands are lowered to a split form with a
+separate `in_value` and `out_place`.
+
+Semantically, the `InlineAsm` terminator is similar to the `Call` terminator except that it has
+multiple output places where a `Call` only has a single return place output.
+
+## Codegen
+
+Operands are lowered one more time before being passed to LLVM codegen:
+
+```rust
+pub enum InlineAsmOperandRef<'tcx, B: BackendTypes + ?Sized> {
+ In {
+ reg: InlineAsmRegOrRegClass,
+ value: OperandRef<'tcx, B::Value>,
+ },
+ Out {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ place: Option<PlaceRef<'tcx, B::Value>>,
+ },
+ InOut {
+ reg: InlineAsmRegOrRegClass,
+ late: bool,
+ in_value: OperandRef<'tcx, B::Value>,
+ out_place: Option<PlaceRef<'tcx, B::Value>>,
+ },
+ Const {
+ string: String,
+ },
+ SymFn {
+ instance: Instance<'tcx>,
+ },
+ SymStatic {
+ def_id: DefId,
+ },
+}
+```
+
+The operands are lowered to LLVM operands and constraint codes as follow:
+- `out` and the output part of `inout` operands are added first, as required by LLVM. Late output
+operands have a `=` prefix added to their constraint code, non-late output operands have a `=&`
+prefix added to their constraint code.
+- `in` operands are added normally.
+- `inout` operands are tied to the matching output operand.
+- `sym` operands are passed as function pointers or pointers, using the `"s"` constraint.
+- `const` operands are formatted to a string and directly inserted in the template string.
+
+The template string is converted to LLVM form:
+- `$` characters are escaped as `$$`.
+- `const` operands are converted to strings and inserted directly.
+- Placeholders are formatted as `${X:M}` where `X` is the operand index and `M` is the modifier
+character. Modifiers are converted from the Rust form to the LLVM form.
+
+The various options are converted to clobber constraints or LLVM attributes, refer to the
+[RFC](https://github.com/Amanieu/rfcs/blob/inline-asm/text/0000-inline-asm.md#mapping-to-llvm-ir)
+for more details.
+
+Note that LLVM is sometimes rather picky about what types it accepts for certain constraint codes
+so we sometimes need to insert conversions to/from a supported type. See the target-specific
+ISelLowering.cpp files in LLVM for details of what types are supported for each register class.
+
+## Adding support for new architectures
+
+Adding inline assembly support to an architecture is mostly a matter of defining the registers and
+register classes for that architecture. All the definitions for register classes are located in
+`compiler/rustc_target/asm/`.
+
+Additionally you will need to implement lowering of these register classes to LLVM constraint codes
+in `compiler/rustc_codegen_llvm/asm.rs`.
+
+When adding a new architecture, make sure to cross-reference with the LLVM source code:
+- LLVM has restrictions on which types can be used with a particular constraint code. Refer to the
+`getRegForInlineAsmConstraint` function in `lib/Target/${ARCH}/${ARCH}ISelLowering.cpp`.
+- LLVM reserves certain registers for its internal use, which causes them to not be saved/restored
+properly around inline assembly blocks. These registers are listed in the `getReservedRegs`
+function in `lib/Target/${ARCH}/${ARCH}RegisterInfo.cpp`. Any "conditionally" reserved register
+such as the frame/base pointer must always be treated as reserved for Rust purposes because we
+can't know ahead of time whether a function will require a frame/base pointer.
+
+## Tests
+
+Various tests for inline assembly are available:
+
+- `src/test/assembly/asm`
+- `src/test/ui/asm`
+- `src/test/codegen/asm-*`
+
+Every architecture supported by inline assembly must have exhaustive tests in
+`src/test/assembly/asm` which test all combinations of register classes and types.
diff --git a/src/doc/rustc-dev-guide/src/ast-validation.md b/src/doc/rustc-dev-guide/src/ast-validation.md
new file mode 100644
index 000000000..ff549ca62
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/ast-validation.md
@@ -0,0 +1,6 @@
+# AST Validation
+
+AST validation is the process of checking various correctness properties about
+the AST after macro expansion.
+
+**TODO**: write this chapter. [#656](https://github.com/rust-lang/rustc-dev-guide/issues/656)
diff --git a/src/doc/rustc-dev-guide/src/backend/backend-agnostic.md b/src/doc/rustc-dev-guide/src/backend/backend-agnostic.md
new file mode 100644
index 000000000..271e6a16f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/backend-agnostic.md
@@ -0,0 +1,207 @@
+# Backend Agnostic Codegen
+
+<!-- toc -->
+
+As of <!-- date: 2021-10 --> October 2021, `rustc_codegen_ssa` provides an
+abstract interface for all backends to implement, to allow other codegen
+backends (e.g. [Cranelift]).
+
+[Cranelift]: https://github.com/bytecodealliance/wasmtime/tree/HEAD/cranelift
+
+> The following is a copy/paste of a README from the rust-lang/rust repo.
+> Please submit a PR if it needs updating.
+
+# Refactoring of `rustc_codegen_llvm`
+by Denis Merigoux, October 23rd 2018
+
+## State of the code before the refactoring
+
+All the code related to the compilation of MIR into LLVM IR was contained
+inside the `rustc_codegen_llvm` crate. Here is the breakdown of the most
+important elements:
+* the `back` folder (7,800 LOC) implements the mechanisms for creating the
+ different object files and archive through LLVM, but also the communication
+ mechanisms for parallel code generation;
+* the `debuginfo` (3,200 LOC) folder contains all code that passes debug
+ information down to LLVM;
+* the `llvm` (2,200 LOC) folder defines the FFI necessary to communicate with
+ LLVM using the C++ API;
+* the `mir` (4,300 LOC) folder implements the actual lowering from MIR to LLVM
+ IR;
+* the `base.rs` (1,300 LOC) file contains some helper functions but also the
+ high-level code that launches the code generation and distributes the work.
+* the `builder.rs` (1,200 LOC) file contains all the functions generating
+ individual LLVM IR instructions inside a basic block;
+* the `common.rs` (450 LOC) contains various helper functions and all the
+ functions generating LLVM static values;
+* the `type_.rs` (300 LOC) defines most of the type translations to LLVM IR.
+
+The goal of this refactoring is to separate inside this crate code that is
+specific to the LLVM from code that can be reused for other rustc backends. For
+instance, the `mir` folder is almost entirely backend-specific but it relies
+heavily on other parts of the crate. The separation of the code must not affect
+the logic of the code nor its performance.
+
+For these reasons, the separation process involves two transformations that
+have to be done at the same time for the resulting code to compile :
+
+1. replace all the LLVM-specific types by generics inside function signatures
+ and structure definitions;
+2. encapsulate all functions calling the LLVM FFI inside a set of traits that
+ will define the interface between backend-agnostic code and the backend.
+
+While the LLVM-specific code will be left in `rustc_codegen_llvm`, all the new
+traits and backend-agnostic code will be moved in `rustc_codegen_ssa` (name
+suggestion by @eddyb).
+
+## Generic types and structures
+
+@irinagpopa started to parametrize the types of `rustc_codegen_llvm` by a
+generic `Value` type, implemented in LLVM by a reference `&'ll Value`. This
+work has been extended to all structures inside the `mir` folder and elsewhere,
+as well as for LLVM's `BasicBlock` and `Type` types.
+
+The two most important structures for the LLVM codegen are `CodegenCx` and
+`Builder`. They are parametrized by multiple lifetime parameters and the type
+for `Value`.
+
+```rust,ignore
+struct CodegenCx<'ll, 'tcx> {
+ /* ... */
+}
+
+struct Builder<'a, 'll, 'tcx> {
+ cx: &'a CodegenCx<'ll, 'tcx>,
+ /* ... */
+}
+```
+
+`CodegenCx` is used to compile one codegen-unit that can contain multiple
+functions, whereas `Builder` is created to compile one basic block.
+
+The code in `rustc_codegen_llvm` has to deal with multiple explicit lifetime
+parameters, that correspond to the following:
+* `'tcx` is the longest lifetime, that corresponds to the original `TyCtxt`
+ containing the program's information;
+* `'a` is a short-lived reference of a `CodegenCx` or another object inside a
+ struct;
+* `'ll` is the lifetime of references to LLVM objects such as `Value` or
+ `Type`.
+
+Although there are already many lifetime parameters in the code, making it
+generic uncovered situations where the borrow-checker was passing only due to
+the special nature of the LLVM objects manipulated (they are extern pointers).
+For instance, an additional lifetime parameter had to be added to
+`LocalAnalyser` in `analyse.rs`, leading to the definition:
+
+```rust,ignore
+struct LocalAnalyzer<'mir, 'a, 'tcx> {
+ /* ... */
+}
+```
+
+However, the two most important structures `CodegenCx` and `Builder` are not
+defined in the backend-agnostic code. Indeed, their content is highly specific
+of the backend and it makes more sense to leave their definition to the backend
+implementor than to allow just a narrow spot via a generic field for the
+backend's context.
+
+## Traits and interface
+
+Because they have to be defined by the backend, `CodegenCx` and `Builder` will
+be the structures implementing all the traits defining the backend's interface.
+These traits are defined in the folder `rustc_codegen_ssa/traits` and all the
+backend-agnostic code is parametrized by them. For instance, let us explain how
+a function in `base.rs` is parametrized:
+
+```rust,ignore
+pub fn codegen_instance<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>(
+ cx: &'a Bx::CodegenCx,
+ instance: Instance<'tcx>
+) {
+ /* ... */
+}
+```
+
+In this signature, we have the two lifetime parameters explained earlier and
+the master type `Bx` which satisfies the trait `BuilderMethods` corresponding
+to the interface satisfied by the `Builder` struct. The `BuilderMethods`
+defines an associated type `Bx::CodegenCx` that itself satisfies the
+`CodegenMethods` traits implemented by the struct `CodegenCx`.
+
+On the trait side, here is an example with part of the definition of
+`BuilderMethods` in `traits/builder.rs`:
+
+```rust,ignore
+pub trait BuilderMethods<'a, 'tcx>:
+ HasCodegen<'tcx>
+ + DebugInfoBuilderMethods<'tcx>
+ + ArgTypeMethods<'tcx>
+ + AbiBuilderMethods<'tcx>
+ + IntrinsicCallMethods<'tcx>
+ + AsmBuilderMethods<'tcx>
+{
+ fn new_block<'b>(
+ cx: &'a Self::CodegenCx,
+ llfn: Self::Function,
+ name: &'b str
+ ) -> Self;
+ /* ... */
+ fn cond_br(
+ &mut self,
+ cond: Self::Value,
+ then_llbb: Self::BasicBlock,
+ else_llbb: Self::BasicBlock,
+ );
+ /* ... */
+}
+```
+
+Finally, a master structure implementing the `ExtraBackendMethods` trait is
+used for high-level codegen-driving functions like `codegen_crate` in
+`base.rs`. For LLVM, it is the empty `LlvmCodegenBackend`.
+`ExtraBackendMethods` should be implemented by the same structure that
+implements the `CodegenBackend` defined in
+`rustc_codegen_utils/codegen_backend.rs`.
+
+During the traitification process, certain functions have been converted from
+methods of a local structure to methods of `CodegenCx` or `Builder` and a
+corresponding `self` parameter has been added. Indeed, LLVM stores information
+internally that it can access when called through its API. This information
+does not show up in a Rust data structure carried around when these methods are
+called. However, when implementing a Rust backend for `rustc`, these methods
+will need information from `CodegenCx`, hence the additional parameter (unused
+in the LLVM implementation of the trait).
+
+## State of the code after the refactoring
+
+The traits offer an API which is very similar to the API of LLVM. This is not
+the best solution since LLVM has a very special way of doing things: when
+adding another backend, the traits definition might be changed in order to
+offer more flexibility.
+
+However, the current separation between backend-agnostic and LLVM-specific code
+has allowed the reuse of a significant part of the old `rustc_codegen_llvm`.
+Here is the new LOC breakdown between backend-agnostic (BA) and LLVM for the
+most important elements:
+
+* `back` folder: 3,800 (BA) vs 4,100 (LLVM);
+* `mir` folder: 4,400 (BA) vs 0 (LLVM);
+* `base.rs`: 1,100 (BA) vs 250 (LLVM);
+* `builder.rs`: 1,400 (BA) vs 0 (LLVM);
+* `common.rs`: 350 (BA) vs 350 (LLVM);
+
+The `debuginfo` folder has been left almost untouched by the splitting and is
+specific to LLVM. Only its high-level features have been traitified.
+
+The new `traits` folder has 1500 LOC only for trait definitions. Overall, the
+27,000 LOC-sized old `rustc_codegen_llvm` code has been split into the new
+18,500 LOC-sized new `rustc_codegen_llvm` and the 12,000 LOC-sized
+`rustc_codegen_ssa`. We can say that this refactoring allowed the reuse of
+approximately 10,000 LOC that would otherwise have had to be duplicated between
+the multiple backends of `rustc`.
+
+The refactored version of `rustc`'s backend introduced no regression over the
+test suite nor in performance benchmark, which is in coherence with the nature
+of the refactoring that used only compile-time parametricity (no trait
+objects).
diff --git a/src/doc/rustc-dev-guide/src/backend/codegen.md b/src/doc/rustc-dev-guide/src/backend/codegen.md
new file mode 100644
index 000000000..1a6c2fa76
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/codegen.md
@@ -0,0 +1,76 @@
+# Code generation
+
+Code generation or "codegen" is the part of the compiler that actually
+generates an executable binary. Usually, rustc uses LLVM for code generation;
+there is also support for [Cranelift]. The key is that rustc doesn't implement
+codegen itself. It's worth noting, though, that in the Rust source code, many
+parts of the backend have `codegen` in their names (there are no hard
+boundaries).
+
+[Cranelift]: https://github.com/bytecodealliance/wasmtime/tree/HEAD/cranelift
+
+> NOTE: If you are looking for hints on how to debug code generation bugs,
+> please see [this section of the debugging chapter][debugging].
+
+[debugging]: ./debugging.md
+
+## What is LLVM?
+
+[LLVM](https://llvm.org) is "a collection of modular and reusable compiler and
+toolchain technologies". In particular, the LLVM project contains a pluggable
+compiler backend (also called "LLVM"), which is used by many compiler projects,
+including the `clang` C compiler and our beloved `rustc`.
+
+LLVM takes input in the form of LLVM IR. It is basically assembly code with
+additional low-level types and annotations added. These annotations are helpful
+for doing optimizations on the LLVM IR and outputted machine code. The end
+result of all this is (at long last) something executable (e.g. an ELF object,
+an EXE, or wasm).
+
+There are a few benefits to using LLVM:
+
+- We don't have to write a whole compiler backend. This reduces implementation
+ and maintenance burden.
+- We benefit from the large suite of advanced optimizations that the LLVM
+ project has been collecting.
+- We can automatically compile Rust to any of the platforms for which LLVM has
+ support. For example, as soon as LLVM added support for wasm, voila! rustc,
+ clang, and a bunch of other languages were able to compile to wasm! (Well,
+ there was some extra stuff to be done, but we were 90% there anyway).
+- We and other compiler projects benefit from each other. For example, when the
+ [Spectre and Meltdown security vulnerabilities][spectre] were discovered,
+ only LLVM needed to be patched.
+
+[spectre]: https://meltdownattack.com/
+
+## Running LLVM, linking, and metadata generation
+
+Once LLVM IR for all of the functions and statics, etc is built, it is time to
+start running LLVM and its optimization passes. LLVM IR is grouped into
+"modules". Multiple "modules" can be codegened at the same time to aid in
+multi-core utilization. These "modules" are what we refer to as _codegen
+units_. These units were established way back during monomorphization
+collection phase.
+
+Once LLVM produces objects from these modules, these objects are passed to the
+linker along with, optionally, the metadata object and an archive or an
+executable is produced.
+
+It is not necessarily the codegen phase described above that runs the
+optimizations. With certain kinds of LTO, the optimization might happen at the
+linking time instead. It is also possible for some optimizations to happen
+before objects are passed on to the linker and some to happen during the
+linking.
+
+This all happens towards the very end of compilation. The code for this can be
+found in [`rustc_codegen_ssa::back`][ssaback] and
+[`rustc_codegen_llvm::back`][llvmback]. Sadly, this piece of code is not
+really well-separated into LLVM-dependent code; the [`rustc_codegen_ssa`][ssa]
+contains a fair amount of code specific to the LLVM backend.
+
+Once these components are done with their work you end up with a number of
+files in your filesystem corresponding to the outputs you have requested.
+
+[ssa]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/index.html
+[ssaback]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/back/index.html
+[llvmback]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/back/index.html
diff --git a/src/doc/rustc-dev-guide/src/backend/debugging.md b/src/doc/rustc-dev-guide/src/backend/debugging.md
new file mode 100644
index 000000000..791a61fbe
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/debugging.md
@@ -0,0 +1,258 @@
+## Debugging LLVM
+
+> NOTE: If you are looking for info about code generation, please see [this
+> chapter][codegen] instead.
+
+[codegen]: ./codegen.md
+
+This section is about debugging compiler bugs in code generation (e.g. why the
+compiler generated some piece of code or crashed in LLVM). LLVM is a big
+project on its own that probably needs to have its own debugging document (not
+that I could find one). But here are some tips that are important in a rustc
+context:
+
+### Minimize the example
+
+As a general rule, compilers generate lots of information from analyzing code.
+Thus, a useful first step is usually to find a minimal example. One way to do
+this is to
+
+1. create a new crate that reproduces the issue (e.g. adding whatever crate is
+at fault as a dependency, and using it from there)
+
+2. minimize the crate by removing external dependencies; that is, moving
+everything relevant to the new crate
+
+3. further minimize the issue by making the code shorter (there are tools that
+help with this like `creduce`)
+
+For more discussion on methodology for steps 2 and 3 above, there is an
+[epic blog post][mcve-blog] from pnkfelix specifically about Rust program minimization.
+
+[mcve-blog]: https://blog.pnkfx.org/blog/2019/11/18/rust-bug-minimization-patterns/
+
+### Enable LLVM internal checks
+
+The official compilers (including nightlies) have LLVM assertions disabled,
+which means that LLVM assertion failures can show up as compiler crashes (not
+ICEs but "real" crashes) and other sorts of weird behavior. If you are
+encountering these, it is a good idea to try using a compiler with LLVM
+assertions enabled - either an "alt" nightly or a compiler you build yourself
+by setting `[llvm] assertions=true` in your config.toml - and see whether
+anything turns up.
+
+The rustc build process builds the LLVM tools into
+`./build/<host-triple>/llvm/bin`. They can be called directly.
+These tools include:
+ * [`llc`], which compiles bitcode (`.bc` files) to executable code; this can be used to
+ replicate LLVM backend bugs.
+ * [`opt`], a bitcode transformer that runs LLVM optimization passes.
+ * [`bugpoint`], which reduces large test cases to small, useful ones.
+ * and many others, some of which are referenced in the text below.
+
+[`llc`]: https://llvm.org/docs/CommandGuide/llc.html
+[`opt`]: https://llvm.org/docs/CommandGuide/opt.html
+[`bugpoint`]: https://llvm.org/docs/Bugpoint.html
+
+By default, the Rust build system does not check for changes to the LLVM source code or
+its build configuration settings. So, if you need to rebuild the LLVM that is linked
+into `rustc`, first delete the file `llvm-finished-building`, which should be located
+in `build/<host-triple>/llvm/`.
+
+The default rustc compilation pipeline has multiple codegen units, which is
+hard to replicate manually and means that LLVM is called multiple times in
+parallel. If you can get away with it (i.e. if it doesn't make your bug
+disappear), passing `-C codegen-units=1` to rustc will make debugging easier.
+
+### Get your hands on raw LLVM input
+
+For rustc to generate LLVM IR, you need to pass the `--emit=llvm-ir` flag. If
+you are building via cargo, use the `RUSTFLAGS` environment variable (e.g.
+`RUSTFLAGS='--emit=llvm-ir'`). This causes rustc to spit out LLVM IR into the
+target directory.
+
+`cargo llvm-ir [options] path` spits out the LLVM IR for a particular function
+at `path`. (`cargo install cargo-asm` installs `cargo asm` and `cargo
+llvm-ir`). `--build-type=debug` emits code for debug builds. There are also
+other useful options. Also, debug info in LLVM IR can clutter the output a lot:
+`RUSTFLAGS="-C debuginfo=0"` is really useful.
+
+`RUSTFLAGS="-C save-temps"` outputs LLVM bitcode (not the same as IR) at
+different stages during compilation, which is sometimes useful. The output LLVM
+bitcode will be in `.bc` files in the compiler's output directory, set via the
+`--out-dir DIR` argument to `rustc`.
+
+ * If you are hitting an assertion failure or segmentation fault from the LLVM
+ backend when invoking `rustc` itself, it is a good idea to try passing each
+ of these `.bc` files to the `llc` command, and see if you get the same
+ failure. (LLVM developers often prefer a bug reduced to a `.bc` file over one
+ that uses a Rust crate for its minimized reproduction.)
+
+ * To get human readable versions of the LLVM bitcode, one just needs to convert
+ the bitcode (`.bc`) files to `.ll` files using `llvm-dis`, which should be in
+ the target local compilation of rustc.
+
+
+Note that rustc emits different IR depending on whether `-O` is enabled, even
+without LLVM's optimizations, so if you want to play with the IR rustc emits,
+you should:
+
+```bash
+$ rustc +local my-file.rs --emit=llvm-ir -O -C no-prepopulate-passes \
+ -C codegen-units=1
+$ OPT=./build/$TRIPLE/llvm/bin/opt
+$ $OPT -S -O2 < my-file.ll > my
+```
+
+If you just want to get the LLVM IR during the LLVM pipeline, to e.g. see which
+IR causes an optimization-time assertion to fail, or to see when LLVM performs
+a particular optimization, you can pass the rustc flag `-C
+llvm-args=-print-after-all`, and possibly add `-C
+llvm-args='-filter-print-funcs=EXACT_FUNCTION_NAME` (e.g. `-C
+llvm-args='-filter-print-funcs=_ZN11collections3str21_$LT$impl$u20$str$GT$\
+7replace17hbe10ea2e7c809b0bE'`).
+
+That produces a lot of output into standard error, so you'll want to pipe that
+to some file. Also, if you are using neither `-filter-print-funcs` nor `-C
+codegen-units=1`, then, because the multiple codegen units run in parallel, the
+printouts will mix together and you won't be able to read anything.
+
+ * One caveat to the aforementioned methodology: the `-print` family of options
+ to LLVM only prints the IR unit that the pass runs on (e.g., just a
+ function), and does not include any referenced declarations, globals,
+ metadata, etc. This means you cannot in general feed the output of `-print`
+ into `llc` to reproduce a given problem.
+
+ * Within LLVM itself, calling `F.getParent()->dump()` at the beginning of
+ `SafeStackLegacyPass::runOnFunction` will dump the whole module, which
+ may provide better basis for reproduction. (However, you
+ should be able to get that same dump from the `.bc` files dumped by
+ `-C save-temps`.)
+
+If you want just the IR for a specific function (say, you want to see why it
+causes an assertion or doesn't optimize correctly), you can use `llvm-extract`,
+e.g.
+
+```bash
+$ ./build/$TRIPLE/llvm/bin/llvm-extract \
+ -func='_ZN11collections3str21_$LT$impl$u20$str$GT$7replace17hbe10ea2e7c809b0bE' \
+ -S \
+ < unextracted.ll \
+ > extracted.ll
+```
+
+### Investigate LLVM optimization passes
+
+If you are seeing incorrect behavior due to an optimization pass, a very handy
+LLVM option is `-opt-bisect-limit`, which takes an integer denoting the index
+value of the highest pass to run. Index values for taken passes are stable
+from run to run; by coupling this with software that automates bisecting the
+search space based on the resulting program, an errant pass can be quickly
+determined. When an `-opt-bisect-limit` is specified, all runs are displayed
+to standard error, along with their index and output indicating if the
+pass was run or skipped. Setting the limit to an index of -1 (e.g.,
+`RUSTFLAGS="-C llvm-args=-opt-bisect-limit=-1"`) will show all passes and
+their corresponding index values.
+
+If you want to play with the optimization pipeline, you can use the [`opt`] tool
+from `./build/<host-triple>/llvm/bin/` with the LLVM IR emitted by rustc.
+
+When investigating the implementation of LLVM itself, you should be
+aware of its [internal debug infrastructure][llvm-debug].
+This is provided in LLVM Debug builds, which you enable for rustc
+LLVM builds by changing this setting in the config.toml:
+```
+[llvm]
+# Indicates whether the LLVM assertions are enabled or not
+assertions = true
+
+# Indicates whether the LLVM build is a Release or Debug build
+optimize = false
+```
+The quick summary is:
+ * Setting `assertions=true` enables coarse-grain debug messaging.
+ * beyond that, setting `optimize=false` enables fine-grain debug messaging.
+ * `LLVM_DEBUG(dbgs() << msg)` in LLVM is like `debug!(msg)` in `rustc`.
+ * The `-debug` option turns on all messaging; it is like setting the
+ environment variable `RUSTC_LOG=debug` in `rustc`.
+ * The `-debug-only=<pass1>,<pass2>` variant is more selective; it is like
+ setting the environment variable `RUSTC_LOG=path1,path2` in `rustc`.
+
+[llvm-debug]: https://llvm.org/docs/ProgrammersManual.html#the-llvm-debug-macro-and-debug-option
+
+### Getting help and asking questions
+
+If you have some questions, head over to the [rust-lang Zulip] and
+specifically the `#t-compiler/wg-llvm` stream.
+
+[rust-lang Zulip]: https://rust-lang.zulipchat.com/
+
+### Compiler options to know and love
+
+The `-C help` and `-Z help` compiler switches will list out a variety
+of interesting options you may find useful. Here are a few of the most
+common that pertain to LLVM development (some of them are employed in the
+tutorial above):
+
+- The `--emit llvm-ir` option emits a `<filename>.ll` file with LLVM IR in textual format
+ - The `--emit llvm-bc` option emits in bytecode format (`<filename>.bc`)
+- Passing `-C llvm-args=<foo>` allows passing pretty much all the
+ options that tools like llc and opt would accept;
+ e.g. `-C llvm-args=-print-before-all` to print IR before every LLVM
+ pass.
+- The `-C no-prepopulate-passes` will avoid pre-populate the LLVM pass
+ manager with a list of passes. This will allow you to view the LLVM
+ IR that rustc generates, not the LLVM IR after optimizations.
+- The `-C passes=val` option allows you to supply a space separated list of extra LLVM passes to run
+- The `-C save-temps` option saves all temporary output files during compilation
+- The `-Z print-llvm-passes` option will print out LLVM optimization passes being run
+- The `-Z time-llvm-passes` option measures the time of each LLVM pass
+- The `-Z verify-llvm-ir` option will verify the LLVM IR for correctness
+- The `-Z no-parallel-llvm` will disable parallel compilation of distinct compilation units
+- The `-Z llvm-time-trace` option will output a Chrome profiler compatible JSON file
+ which contains details and timings for LLVM passes.
+- The `-C llvm-args=-opt-bisect-limit=<index>` option allows for bisecting LLVM
+ optimizations.
+
+### Filing LLVM bug reports
+
+When filing an LLVM bug report, you will probably want some sort of minimal
+working example that demonstrates the problem. The Godbolt compiler explorer is
+really helpful for this.
+
+1. Once you have some LLVM IR for the problematic code (see above), you can
+create a minimal working example with Godbolt. Go to
+[gcc.godbolt.org](https://gcc.godbolt.org).
+
+2. Choose `LLVM-IR` as programming language.
+
+3. Use `llc` to compile the IR to a particular target as is:
+ - There are some useful flags: `-mattr` enables target features, `-march=`
+ selects the target, `-mcpu=` selects the CPU, etc.
+ - Commands like `llc -march=help` output all architectures available, which
+ is useful because sometimes the Rust arch names and the LLVM names do not
+ match.
+ - If you have compiled rustc yourself somewhere, in the target directory
+ you have binaries for `llc`, `opt`, etc.
+
+4. If you want to optimize the LLVM-IR, you can use `opt` to see how the LLVM
+ optimizations transform it.
+
+5. Once you have a godbolt link demonstrating the issue, it is pretty easy to
+ fill in an LLVM bug. Just visit their [github issues page][llvm-issues].
+
+[llvm-issues]: https://github.com/llvm/llvm-project/issues
+
+### Porting bug fixes from LLVM
+
+Once you've identified the bug as an LLVM bug, you will sometimes
+find that it has already been reported and fixed in LLVM, but we haven't
+gotten the fix yet (or perhaps you are familiar enough with LLVM to fix it yourself).
+
+In that case, we can sometimes opt to port the fix for the bug
+directly to our own LLVM fork, so that rustc can use it more easily.
+Our fork of LLVM is maintained in [rust-lang/llvm-project]. Once
+you've landed the fix there, you'll also need to land a PR modifying
+our submodule commits -- ask around on Zulip for help.
+
+[rust-lang/llvm-project]: https://github.com/rust-lang/llvm-project/
diff --git a/src/doc/rustc-dev-guide/src/backend/implicit-caller-location.md b/src/doc/rustc-dev-guide/src/backend/implicit-caller-location.md
new file mode 100644
index 000000000..21554f5a4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/implicit-caller-location.md
@@ -0,0 +1,281 @@
+# Implicit Caller Location
+
+<!-- toc -->
+
+Approved in [RFC 2091], this feature enables the accurate reporting of caller location during panics
+initiated from functions like `Option::unwrap`, `Result::expect`, and `Index::index`. This feature
+adds the [`#[track_caller]`][attr-reference] attribute for functions, the
+[`caller_location`][intrinsic] intrinsic, and the stabilization-friendly
+[`core::panic::Location::caller`][wrapper] wrapper.
+
+## Motivating Example
+
+Take this example program:
+
+```rust
+fn main() {
+ let foo: Option<()> = None;
+ foo.unwrap(); // this should produce a useful panic message!
+}
+```
+
+Prior to Rust 1.42, panics like this `unwrap()` printed a location in core:
+
+```
+$ rustc +1.41.0 example.rs; example.exe
+thread 'main' panicked at 'called `Option::unwrap()` on a `None` value',...core\macros\mod.rs:15:40
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
+```
+
+As of 1.42, we get a much more helpful message:
+
+```
+$ rustc +1.42.0 example.rs; example.exe
+thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', example.rs:3:5
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
+```
+
+These error messages are achieved through a combination of changes to `panic!` internals to make use
+of `core::panic::Location::caller` and a number of `#[track_caller]` annotations in the standard
+library which propagate caller information.
+
+## Reading Caller Location
+
+Previously, `panic!` made use of the `file!()`, `line!()`, and `column!()` macros to construct a
+[`Location`] pointing to where the panic occurred. These macros couldn't be given an overridden
+location, so functions which intentionally invoked `panic!` couldn't provide their own location,
+hiding the actual source of error.
+
+Internally, `panic!()` now calls [`core::panic::Location::caller()`][wrapper] to find out where it
+was expanded. This function is itself annotated with `#[track_caller]` and wraps the
+[`caller_location`][intrinsic] compiler intrinsic implemented by rustc. This intrinsic is easiest
+explained in terms of how it works in a `const` context.
+
+## Caller Location in `const`
+
+There are two main phases to returning the caller location in a const context: walking up the stack
+to find the right location and allocating a const value to return.
+
+### Finding the right `Location`
+
+In a const context we "walk up the stack" from where the intrinsic is invoked, stopping when we
+reach the first function call in the stack which does *not* have the attribute. This walk is in
+[`InterpCx::find_closest_untracked_caller_location()`][const-find-closest].
+
+Starting at the bottom, we iterate up over stack [`Frame`][const-frame]s in the
+[`InterpCx::stack`][const-stack], calling
+[`InstanceDef::requires_caller_location`][requires-location] on the
+[`Instance`s from each `Frame`][frame-instance]. We stop once we find one that returns `false` and
+return the span of the *previous* frame which was the "topmost" tracked function.
+
+### Allocating a static `Location`
+
+Once we have a `Span`, we need to allocate static memory for the `Location`, which is performed by
+the [`TyCtxt::const_caller_location()`][const-location-query] query. Internally this calls
+[`InterpCx::alloc_caller_location()`][alloc-location] and results in a unique
+[memory kind][location-memory-kind] (`MemoryKind::CallerLocation`). The SSA codegen backend is able
+to emit code for these same values, and we use this code there as well.
+
+Once our `Location` has been allocated in static memory, our intrinsic returns a reference to it.
+
+## Generating code for `#[track_caller]` callees
+
+To generate efficient code for a tracked function and its callers, we need to provide the same
+behavior from the intrinsic's point of view without having a stack to walk up at runtime. We invert
+the approach: as we grow the stack down we pass an additional argument to calls of tracked functions
+rather than walking up the stack when the intrinsic is called. That additional argument can be
+returned wherever the caller location is queried.
+
+The argument we append is of type `&'static core::panic::Location<'static>`. A reference was chosen
+to avoid unnecessary copying because a pointer is a third the size of
+`std::mem::size_of::<core::panic::Location>() == 24` at time of writing.
+
+When generating a call to a function which is tracked, we pass the location argument the value of
+[`FunctionCx::get_caller_location`][fcx-get].
+
+If the calling function is tracked, `get_caller_location` returns the local in
+[`FunctionCx::caller_location`][fcx-location] which was populated by the current caller's caller.
+In these cases the intrinsic "returns" a reference which was actually provided in an argument to its
+caller.
+
+If the calling function is not tracked, `get_caller_location` allocates a `Location` static from
+the current `Span` and returns a reference to that.
+
+We more efficiently achieve the same behavior as a loop starting from the bottom by passing a single
+`&Location` value through the `caller_location` fields of multiple `FunctionCx`s as we grow the
+stack downward.
+
+### Codegen examples
+
+What does this transformation look like in practice? Take this example which uses the new feature:
+
+```rust
+#![feature(track_caller)]
+use std::panic::Location;
+
+#[track_caller]
+fn print_caller() {
+ println!("called from {}", Location::caller());
+}
+
+fn main() {
+ print_caller();
+}
+```
+
+Here `print_caller()` appears to take no arguments, but we compile it to something like this:
+
+```rust
+#![feature(panic_internals)]
+use std::panic::Location;
+
+fn print_caller(caller: &Location) {
+ println!("called from {}", caller);
+}
+
+fn main() {
+ print_caller(&Location::internal_constructor(file!(), line!(), column!()));
+}
+```
+
+### Dynamic Dispatch
+
+In codegen contexts we have to modify the callee ABI to pass this information down the stack, but
+the attribute expressly does *not* modify the type of the function. The ABI change must be
+transparent to type checking and remain sound in all uses.
+
+Direct calls to tracked functions will always know the full codegen flags for the callee and can
+generate appropriate code. Indirect callers won't have this information and it's not encoded in
+the type of the function pointer they call, so we generate a [`ReifyShim`] around the function
+whenever taking a pointer to it. This shim isn't able to report the actual location of the indirect
+call (the function's definition site is reported instead), but it prevents miscompilation and is
+probably the best we can do without modifying fully-stabilized type signatures.
+
+> *Note:* We always emit a [`ReifyShim`] when taking a pointer to a tracked function. While the
+> constraint here is imposed by codegen contexts, we don't know during MIR construction of the shim
+> whether we'll be called in a const context (safe to ignore shim) or in a codegen context (unsafe
+> to ignore shim). Even if we did know, the results from const and codegen contexts must agree.
+
+## The Attribute
+
+The `#[track_caller]` attribute is checked alongside other codegen attributes to ensure the
+function:
+
+* has the `"Rust"` ABI (as opposed to e.g., `"C"`)
+* is not a closure
+* is not `#[naked]`
+
+If the use is valid, we set [`CodegenFnAttrsFlags::TRACK_CALLER`][attrs-flags]. This flag influences
+the return value of [`InstanceDef::requires_caller_location`][requires-location] which is in turn
+used in both const and codegen contexts to ensure correct propagation.
+
+### Traits
+
+When applied to trait method implementations, the attribute works as it does for regular functions.
+
+When applied to a trait method prototype, the attribute applies to all implementations of the
+method. When applied to a default trait method implementation, the attribute takes effect on
+that implementation *and* any overrides.
+
+Examples:
+
+```rust
+#![feature(track_caller)]
+
+macro_rules! assert_tracked {
+ () => {{
+ let location = std::panic::Location::caller();
+ assert_eq!(location.file(), file!());
+ assert_ne!(location.line(), line!(), "line should be outside this fn");
+ println!("called at {}", location);
+ }};
+}
+
+trait TrackedFourWays {
+ /// All implementations inherit `#[track_caller]`.
+ #[track_caller]
+ fn blanket_tracked();
+
+ /// Implementors can annotate themselves.
+ fn local_tracked();
+
+ /// This implementation is tracked (overrides are too).
+ #[track_caller]
+ fn default_tracked() {
+ assert_tracked!();
+ }
+
+ /// Overrides of this implementation are tracked (it is too).
+ #[track_caller]
+ fn default_tracked_to_override() {
+ assert_tracked!();
+ }
+}
+
+/// This impl uses the default impl for `default_tracked` and provides its own for
+/// `default_tracked_to_override`.
+impl TrackedFourWays for () {
+ fn blanket_tracked() {
+ assert_tracked!();
+ }
+
+ #[track_caller]
+ fn local_tracked() {
+ assert_tracked!();
+ }
+
+ fn default_tracked_to_override() {
+ assert_tracked!();
+ }
+}
+
+fn main() {
+ <() as TrackedFourWays>::blanket_tracked();
+ <() as TrackedFourWays>::default_tracked();
+ <() as TrackedFourWays>::default_tracked_to_override();
+ <() as TrackedFourWays>::local_tracked();
+}
+```
+
+## Background/History
+
+Broadly speaking, this feature's goal is to improve common Rust error messages without breaking
+stability guarantees, requiring modifications to end-user source, relying on platform-specific
+debug-info, or preventing user-defined types from having the same error-reporting benefits.
+
+Improving the output of these panics has been a goal of proposals since at least mid-2016 (see
+[non-viable alternatives] in the approved RFC for details). It took two more years until RFC 2091
+was approved, much of its [rationale] for this feature's design having been discovered through the
+discussion around several earlier proposals.
+
+The design in the original RFC limited itself to implementations that could be done inside the
+compiler at the time without significant refactoring. However in the year and a half between the
+approval of the RFC and the actual implementation work, a [revised design] was proposed and written
+up on the tracking issue. During the course of implementing that, it was also discovered that an
+implementation was possible without modifying the number of arguments in a function's MIR, which
+would simplify later stages and unlock use in traits.
+
+Because the RFC's implementation strategy could not readily support traits, the semantics were not
+originally specified. They have since been implemented following the path which seemed most correct
+to the author and reviewers.
+
+[RFC 2091]: https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md
+[attr-reference]: https://doc.rust-lang.org/reference/attributes/diagnostics.html#the-track_caller-attribute
+[intrinsic]: https://doc.rust-lang.org/nightly/core/intrinsics/fn.caller_location.html
+[wrapper]: https://doc.rust-lang.org/nightly/core/panic/struct.Location.html#method.caller
+[non-viable alternatives]: https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md#non-viable-alternatives
+[rationale]: https://github.com/rust-lang/rfcs/blob/master/text/2091-inline-semantic.md#rationale
+[revised design]: https://github.com/rust-lang/rust/issues/47809#issuecomment-443538059
+[attrs-flags]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/middle/codegen_fn_attrs/struct.CodegenFnAttrFlags.html#associatedconstant.TRACK_CALLER
+[`ReifyShim`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.InstanceDef.html#variant.ReifyShim
+[`Location`]: https://doc.rust-lang.org/core/panic/struct.Location.html
+[const-find-closest]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.InterpCx.html#method.find_closest_untracked_caller_location
+[requires-location]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.InstanceDef.html#method.requires_caller_location
+[alloc-location]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.InterpCx.html#method.alloc_caller_location
+[fcx-location]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/struct.FunctionCx.html#structfield.caller_location
+[const-location-query]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.const_caller_location
+[location-memory-kind]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/enum.MemoryKind.html#variant.CallerLocation
+[const-frame]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.Frame.html
+[const-stack]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.InterpCx.html#structfield.stack
+[fcx-get]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/struct.FunctionCx.html#method.get_caller_location
+[frame-instance]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.Frame.html#structfield.instance
diff --git a/src/doc/rustc-dev-guide/src/backend/inline-asm.md b/src/doc/rustc-dev-guide/src/backend/inline-asm.md
new file mode 100644
index 000000000..f1a64b5ee
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/inline-asm.md
@@ -0,0 +1,5 @@
+# Inline Assembly
+
+**TODO**: You can find more info
+[here](https://github.com/rust-lang/rust/pull/69171#issue-375572066)
+[#1162](https://github.com/rust-lang/rustc-dev-guide/issues/1162)
diff --git a/src/doc/rustc-dev-guide/src/backend/libs-and-metadata.md b/src/doc/rustc-dev-guide/src/backend/libs-and-metadata.md
new file mode 100644
index 000000000..5e005c965
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/libs-and-metadata.md
@@ -0,0 +1,192 @@
+# Libraries and Metadata
+
+When the compiler sees a reference to an external crate, it needs to load some
+information about that crate. This chapter gives an overview of that process,
+and the supported file formats for crate libraries.
+
+## Libraries
+
+A crate dependency can be loaded from an `rlib`, `dylib`, or `rmeta` file. A
+key point of these file formats is that they contain `rustc`-specific
+[*metadata*](#metadata). This metadata allows the compiler to discover enough
+information about the external crate to understand the items it contains,
+which macros it exports, and *much* more.
+
+### rlib
+
+An `rlib` is an [archive file], which is similar to a tar file. This file
+format is specific to `rustc`, and may change over time. This file contains:
+
+* Object code, which is the result of code generation. This is used during
+ regular linking. There is a separate `.o` file for each [codegen unit]. The
+ codegen step can be skipped with the [`-C
+ linker-plugin-lto`][linker-plugin-lto] CLI option, which means each `.o`
+ file will only contain LLVM bitcode.
+* [LLVM bitcode], which is a binary representation of LLVM's intermediate
+ representation, which is embedded as a section in the `.o` files. This can
+ be used for [Link Time Optimization] (LTO). This can be removed with the
+ [`-C embed-bitcode=no`][embed-bitcode] CLI option to improve compile times
+ and reduce disk space if LTO is not needed.
+* `rustc` [metadata], in a file named `lib.rmeta`.
+* A symbol table, which is generally a list of symbols with offsets to the
+ object file that contain that symbol. This is pretty standard for archive
+ files.
+
+[archive file]: https://en.wikipedia.org/wiki/Ar_(Unix)
+[LLVM bitcode]: https://llvm.org/docs/BitCodeFormat.html
+[Link Time Optimization]: https://llvm.org/docs/LinkTimeOptimization.html
+[codegen unit]: ../backend/codegen.md
+[embed-bitcode]: https://doc.rust-lang.org/rustc/codegen-options/index.html#embed-bitcode
+[linker-plugin-lto]: https://doc.rust-lang.org/rustc/codegen-options/index.html#linker-plugin-lto
+
+### dylib
+
+A `dylib` is a platform-specific shared library. It includes the `rustc`
+[metadata] in a special link section called `.rustc` in a compressed format.
+
+### rmeta
+
+An `rmeta` file is custom binary format that contains the [metadata] for the
+crate. This file can be used for fast "checks" of a project by skipping all
+code generation (as is done with `cargo check`), collecting enough information
+for documentation (as is done with `cargo doc`), or for
+[pipelining](#pipelining). This file is created if the
+[`--emit=metadata`][emit] CLI option is used.
+
+`rmeta` files do not support linking, since they do not contain compiled
+object files.
+
+[emit]: https://doc.rust-lang.org/rustc/command-line-arguments.html#option-emit
+
+## Metadata
+
+The metadata contains a wide swath of different elements. This guide will not
+go into detail of every field it contains. You are encouraged to browse the
+[`CrateRoot`] definition to get a sense of the different elements it contains.
+Everything about metadata encoding and decoding is in the [`rustc_metadata`]
+package.
+
+Here are a few highlights of things it contains:
+
+* The version of the `rustc` compiler. The compiler will refuse to load files
+ from any other version.
+* The [Strict Version Hash](#strict-version-hash) (SVH). This helps ensure the
+ correct dependency is loaded.
+* The [Stable Crate Id](#stable-crate-id). This is a hash used
+ to identify crates.
+* Information about all the source files in the library. This can be used for
+ a variety of things, such as diagnostics pointing to sources in a
+ dependency.
+* Information about exported macros, traits, types, and items. Generally,
+ anything that's needed to be known when a path references something inside a
+ crate dependency.
+* Encoded [MIR]. This is optional, and only encoded if needed for code
+ generation. `cargo check` skips this for performance reasons.
+
+[`CrateRoot`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/struct.CrateRoot.html
+[`rustc_metadata`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/index.html
+[MIR]: ../mir/index.md
+
+### Strict Version Hash
+
+The Strict Version Hash ([SVH], also known as the "crate hash") is a 64-bit
+hash that is used to ensure that the correct crate dependencies are loaded. It
+is possible for a directory to contain multiple copies of the same dependency
+built with different settings, or built from different sources. The crate
+loader will skip any crates that have the wrong SVH.
+
+The SVH is also used for the [incremental compilation] session filename,
+though that usage is mostly historic.
+
+The hash includes a variety of elements:
+
+* Hashes of the HIR nodes.
+* All of the upstream crate hashes.
+* All of the source filenames.
+* Hashes of certain command-line flags (like `-C metadata` via the [Crate
+ Disambiguator](#crate-disambiguator), and all CLI options marked with
+ `[TRACKED]`).
+
+See [`compute_hir_hash`] for where the hash is actually computed.
+
+[SVH]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/svh/struct.Svh.html
+[incremental compilation]: ../queries/incremental-compilation.md
+[`compute_hir_hash`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast_lowering/struct.LoweringContext.html#method.compute_hir_hash
+
+### Stable Crate Id
+
+The [`StableCrateId`] is a 64-bit hash used to identify different crates with
+potentially the same name. It is a hash of the crate name and all the
+[`-C metadata`] CLI options computed in [`StableCrateId::new`]. It is
+used in a variety of places, such as symbol name mangling, crate loading, and
+much more.
+
+By default, all Rust symbols are mangled and incorporate the stable crate id.
+This allows multiple versions of the same crate to be included together. Cargo
+automatically generates `-C metadata` hashes based on a variety of factors,
+like the package version, source, and the target kind (a lib and test can have
+the same crate name, so they need to be disambiguated).
+
+[`StableCrateId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/def_id/struct.StableCrateId.html
+[`StableCrateId::new`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/def_id/struct.StableCrateId.html#method.new
+[`-C metadata`]: https://doc.rust-lang.org/rustc/codegen-options/index.html#metadata
+
+## Crate loading
+
+Crate loading can have quite a few subtle complexities. During [name
+resolution], when an external crate is referenced (via an `extern crate` or
+path), the resolver uses the [`CrateLoader`] which is responsible for finding
+the crate libraries and loading the [metadata] for them. After the dependency
+is loaded, the `CrateLoader` will provide the information the resolver needs
+to perform its job (such as expanding macros, resolving paths, etc.).
+
+To load each external crate, the `CrateLoader` uses a [`CrateLocator`] to
+actually find the correct files for one specific crate. There is some great
+documentation in the [`locator`] module that goes into detail on how loading
+works, and I strongly suggest reading it to get the full picture.
+
+The location of a dependency can come from several different places. Direct
+dependencies are usually passed with `--extern` flags, and the loader can look
+at those directly. Direct dependencies often have references to their own
+dependencies, which need to be loaded, too. These are usually found by
+scanning the directories passed with the `-L` flag for any file whose metadata
+contains a matching crate name and [SVH](#strict-version-hash). The loader
+will also look at the [sysroot] to find dependencies.
+
+As crates are loaded, they are kept in the [`CStore`] with the crate metadata
+wrapped in the [`CrateMetadata`] struct. After resolution and expansion, the
+`CStore` will make its way into the [`GlobalCtxt`] for the rest of
+compilation.
+
+[name resolution]: ../name-resolution.md
+[`CrateLoader`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/creader/struct.CrateLoader.html
+[`CrateLocator`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/locator/struct.CrateLocator.html
+[`locator`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/locator/index.html
+[`CStore`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/creader/struct.CStore.html
+[`CrateMetadata`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/decoder/struct.CrateMetadata.html
+[`GlobalCtxt`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.GlobalCtxt.html
+[sysroot]: ../building/bootstrapping.md#what-is-a-sysroot
+
+## Pipelining
+
+One trick to improve compile times is to start building a crate as soon as the
+metadata for its dependencies is available. For a library, there is no need to
+wait for the code generation of dependencies to finish. Cargo implements this
+technique by telling `rustc` to emit an [`rmeta`](#rmeta) file for each
+dependency as well as an [`rlib`](#rlib). As early as it can, `rustc` will
+save the `rmeta` file to disk before it continues to the code generation
+phase. The compiler sends a JSON message to let the build tool know that it
+can start building the next crate if possible.
+
+The [crate loading](#crate-loading) system is smart enough to know when it
+sees an `rmeta` file to use that if the `rlib` is not there (or has only been
+partially written).
+
+This pipelining isn't possible for binaries, because the linking phase will
+require the code generation of all its dependencies. In the future, it may be
+possible to further improve this scenario by splitting linking into a separate
+command (see [#64191]).
+
+[#64191]: https://github.com/rust-lang/rust/issues/64191
+
+[metadata]: #metadata
diff --git a/src/doc/rustc-dev-guide/src/backend/lowering-mir.md b/src/doc/rustc-dev-guide/src/backend/lowering-mir.md
new file mode 100644
index 000000000..8b9dbe7ce
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/lowering-mir.md
@@ -0,0 +1,57 @@
+# Lowering MIR to a Codegen IR
+
+Now that we have a list of symbols to generate from the collector, we need to
+generate some sort of codegen IR. In this chapter, we will assume LLVM IR,
+since that's what rustc usually uses. The actual monomorphization is performed
+as we go, while we do the translation.
+
+Recall that the backend is started by
+[`rustc_codegen_ssa::base::codegen_crate`][codegen1]. Eventually, this reaches
+[`rustc_codegen_ssa::mir::codegen_mir`][codegen2], which does the lowering from
+MIR to LLVM IR.
+
+[codegen1]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/base/fn.codegen_crate.html
+[codegen2]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/fn.codegen_mir.html
+
+The code is split into modules which handle particular MIR primitives:
+
+- [`rustc_codegen_ssa::mir::block`][mirblk] will deal with translating
+ blocks and their terminators. The most complicated and also the most
+ interesting thing this module does is generating code for function calls,
+ including the necessary unwinding handling IR.
+- [`rustc_codegen_ssa::mir::statement`][mirst] translates MIR statements.
+- [`rustc_codegen_ssa::mir::operand`][mirop] translates MIR operands.
+- [`rustc_codegen_ssa::mir::place`][mirpl] translates MIR place references.
+- [`rustc_codegen_ssa::mir::rvalue`][mirrv] translates MIR r-values.
+
+[mirblk]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/block/index.html
+[mirst]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/statement/index.html
+[mirop]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/operand/index.html
+[mirpl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/place/index.html
+[mirrv]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/rvalue/index.html
+
+Before a function is translated a number of simple and primitive analysis
+passes will run to help us generate simpler and more efficient LLVM IR. An
+example of such an analysis pass would be figuring out which variables are
+SSA-like, so that we can translate them to SSA directly rather than relying on
+LLVM's `mem2reg` for those variables. The analysis can be found in
+[`rustc_codegen_ssa::mir::analyze`][mirana].
+
+[mirana]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/analyze/index.html
+
+Usually a single MIR basic block will map to a LLVM basic block, with very few
+exceptions: intrinsic or function calls and less basic MIR statements like
+`assert` can result in multiple basic blocks. This is a perfect lede into the
+non-portable LLVM-specific part of the code generation. Intrinsic generation is
+fairly easy to understand as it involves very few abstraction levels in between
+and can be found in [`rustc_codegen_llvm::intrinsic`][llvmint].
+
+[llvmint]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/intrinsic/index.html
+
+Everything else will use the [builder interface][builder]. This is the code that gets
+called in the [`rustc_codegen_ssa::mir::*`][ssamir] modules discussed above.
+
+[builder]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/builder/index.html
+[ssamir]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/index.html
+
+> TODO: discuss how constants are generated
diff --git a/src/doc/rustc-dev-guide/src/backend/monomorph.md b/src/doc/rustc-dev-guide/src/backend/monomorph.md
new file mode 100644
index 000000000..416151ca9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/monomorph.md
@@ -0,0 +1,155 @@
+# Monomorphization
+
+<!-- toc -->
+
+As you probably know, Rust has a very expressive type system that has extensive
+support for generic types. But of course, assembly is not generic, so we need
+to figure out the concrete types of all the generics before the code can
+execute.
+
+Different languages handle this problem differently. For example, in some
+languages, such as Java, we may not know the most precise type of value until
+runtime. In the case of Java, this is ok because (almost) all variables are
+reference values anyway (i.e. pointers to a stack allocated object). This
+flexibility comes at the cost of performance, since all accesses to an object
+must dereference a pointer.
+
+Rust takes a different approach: it _monomorphizes_ all generic types. This
+means that compiler stamps out a different copy of the code of a generic
+function for each concrete type needed. For example, if I use a `Vec<u64>` and
+a `Vec<String>` in my code, then the generated binary will have two copies of
+the generated code for `Vec`: one for `Vec<u64>` and another for `Vec<String>`.
+The result is fast programs, but it comes at the cost of compile time (creating
+all those copies can take a while) and binary size (all those copies might take
+a lot of space).
+
+Monomorphization is the first step in the backend of the Rust compiler.
+
+## Collection
+
+First, we need to figure out what concrete types we need for all the generic
+things in our program. This is called _collection_, and the code that does this
+is called the _monomorphization collector_.
+
+Take this example:
+
+```rust
+fn banana() {
+ peach::<u64>();
+}
+
+fn main() {
+ banana();
+}
+```
+
+The monomorphization collector will give you a list of `[main, banana,
+peach::<u64>]`. These are the functions that will have machine code generated
+for them. Collector will also add things like statics to that list.
+
+See [the collector rustdocs][collect] for more info.
+
+[collect]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_monomorphize/collector/index.html
+
+The monomorphization collector is run just before MIR lowering and codegen.
+[`rustc_codegen_ssa::base::codegen_crate`][codegen1] calls the
+[`collect_and_partition_mono_items`][mono] query, which does monomorphization
+collection and then partitions them into [codegen
+units](../appendix/glossary.md#codegen-unit).
+
+## Codegen Unit (CGU) partitioning
+
+For better incremental build times, the CGU partitioner creates two CGU for each source level
+modules. One is for "stable" i.e. non-generic code and the other is more volatile code i.e.
+monomorphized/specialized instances.
+
+For dependencies, consider Crate A and Crate B, such that Crate B depends on Crate A.
+The following table lists different scenarios for a function in Crate A that might be used by one
+or more modules in Crate B.
+
+| Crate A function | Behavior |
+| - | - |
+| Non-generic function | Crate A function doesn't appear in any codegen units of Crate B |
+| Non-generic `#[inline]` function | Crate A function appears with in a single CGU of Crate B, and exists even after post-inlining stage|
+| Generic function | Regardless of inlining, all monomorphized (specialized) functions <br> from Crate A appear within a single codegen unit for Crate B. <br> The codegen unit exists even after the post inlining stage.|
+| Generic `#[inline]` function | - same - |
+
+For more details about the partitioner read the module level [documentation].
+
+[mono]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_monomorphize/partitioning/fn.collect_and_partition_mono_items.html
+[codegen1]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/base/fn.codegen_crate.html
+[documentation]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_monomorphize/partitioning/index.html
+
+## Polymorphization
+
+As mentioned above, monomorphization produces fast code, but it comes at the
+cost of compile time and binary size. [MIR optimizations][miropt] can help a
+bit with this.
+
+In addition to MIR optimizations, rustc attempts to determine when fewer
+copies of functions are necessary and avoid making those copies - known
+as "polymorphization". When a function-like item is found during
+monomorphization collection, the
+[`rustc_mir_monomorphize::polymorphize::unused_generic_params`][polymorph]
+query is invoked, which traverses the MIR of the item to determine on which
+generic parameters the item might not need duplicated.
+
+Currently, polymorphization only looks for unused generic parameters. These
+are relatively rare in functions, but closures inherit the generic
+parameters of their parent function and it is common for closures to not
+use those inherited parameters. Without polymorphization, a copy of these
+closures would be created for each copy of the parent function. By
+creating fewer copies, less LLVM IR is generated and needs processed.
+
+`unused_generic_params` returns a `FiniteBitSet<u64>` where a bit is set if
+the generic parameter of the corresponding index is unused. Any parameters
+after the first sixty-four are considered used.
+
+The results of polymorphization analysis are used in the
+[`Instance::polymorphize`][inst_polymorph] function to replace the
+[`Instance`][inst]'s substitutions for the unused generic parameters with their
+identity substitutions.
+
+Consider the example below:
+
+```rust
+fn foo<A, B>() {
+ let x: Option<B> = None;
+}
+
+fn main() {
+ foo::<u16, u32>();
+ foo::<u64, u32>();
+}
+```
+
+During monomorphization collection, `foo` will be collected with the
+substitutions `[u16, u32]` and `[u64, u32]` (from its invocations in `main`).
+`foo` has the identity substitutions `[A, B]` (or
+`[ty::Param(0), ty::Param(1)]`).
+
+Polymorphization will identify `A` as being unused and it will be replaced in
+the substitutions with the identity parameter before being added to the set
+of collected items - thereby reducing the copies from two (`[u16, u32]` and
+`[u64, u32]`) to one (`[A, u32]`).
+
+`unused_generic_params` will also invoked during code generation when the
+symbol name for `foo` is being computed for use in the callsites of `foo`
+(which have the regular substitutions present, otherwise there would be a
+symbol mismatch between the caller and the function).
+
+As a result of polymorphization, items collected during monomorphization
+cannot be assumed to be monomorphic.
+
+It is intended that polymorphization be extended to more advanced cases,
+such as where only the size/alignment of a generic parameter are required.
+
+More details on polymorphization are available in the
+[master's thesis][thesis] associated with polymorphization's initial
+implementation.
+
+[miropt]: ../mir/optimizations.md
+[polymorph]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_monomorphize/polymorphize/fn.unused_generic_params.html
+[inst]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/instance/struct.Instance.html
+[inst_polymorph]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/instance/struct.Instance.html#method.polymorphize
+[thesis]: https://davidtw.co/media/masters_dissertation.pdf
diff --git a/src/doc/rustc-dev-guide/src/backend/updating-llvm.md b/src/doc/rustc-dev-guide/src/backend/updating-llvm.md
new file mode 100644
index 000000000..0de0767b6
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/backend/updating-llvm.md
@@ -0,0 +1,194 @@
+# Updating LLVM
+
+<!-- toc -->
+
+The Rust compiler uses LLVM as its primary codegen backend today, and naturally
+we want to at least occasionally update this dependency! Currently we do not
+have a strict policy about when to update LLVM or what it can be updated to, but
+a few guidelines are applied:
+
+* We try to always support the latest released version of LLVM
+* We try to support the "last few" versions of LLVM (how many is changing over
+ time)
+* We allow moving to arbitrary commits during development.
+* Strongly prefer to upstream all patches to LLVM before including them in
+ rustc.
+
+This policy may change over time (or may actually start to exist as a formal
+policy!), but for now these are rough guidelines!
+
+## Why update LLVM?
+
+There are a few reasons nowadays that we want to update LLVM in one way or
+another:
+
+* A bug could have been fixed! Often we find bugs in the compiler and fix
+ them upstream in LLVM. We'll want to pull fixes back to the compiler itself as
+ they're merged upstream.
+
+* A new feature may be available in LLVM that we want to use in rustc,
+ but we don't want to wait for a full LLVM release to test it out.
+
+* LLVM itself may have a new release and we'd like to update to this LLVM
+ release.
+
+Each of these reasons has a different strategy for updating LLVM, and we'll go
+over them in detail here.
+
+## Bugfix Updates
+
+For updates of LLVM that are to fix a small bug, we cherry-pick the bugfix to
+the branch we're already using. The steps for this are:
+
+1. Make sure the bugfix is in upstream LLVM.
+2. Identify the branch that rustc is currently using. The `src/llvm-project`
+ submodule is always pinned to a branch of the
+ [rust-lang/llvm-project](https://github.com/rust-lang/llvm-project) repository.
+3. Fork the rust-lang/llvm-project repository
+4. Check out the appropriate branch (typically named `rustc/a.b-yyyy-mm-dd`)
+5. Cherry-pick the upstream commit onto the branch
+6. Push this branch to your fork
+7. Send a Pull Request to rust-lang/llvm-project to the same branch as before.
+ Be sure to reference the Rust and/or LLVM issue that you're fixing in the PR
+ description.
+8. Wait for the PR to be merged
+9. Send a PR to rust-lang/rust updating the `src/llvm-project` submodule with
+ your bugfix. This can be done locally with `git submodule update --remote
+ src/llvm-project` typically.
+10. Wait for PR to be merged
+
+The tl;dr; is that we can cherry-pick bugfixes at any time and pull them back
+into the rust-lang/llvm-project branch that we're using, and getting it into the
+compiler is just updating the submodule via a PR!
+
+Example PRs look like:
+[#59089](https://github.com/rust-lang/rust/pull/59089)
+
+## Feature updates
+
+> Note that this information is as of the time of this writing <!-- date:
+2021-10 --> (October 2021). The process for updating LLVM changes with
+practically all LLVM updates, so this may be out of date!
+
+Unlike bugfixes, updating to pick up a new feature of LLVM typically requires a
+lot more work. This is where we can't reasonably cherry-pick commits backwards
+so we need to do a full update. There's a lot of stuff to do here, so let's go
+through each in detail.
+
+1. Create a new branch in the [rust-lang/llvm-project repository]. This branch
+ should be named `rustc/a.b-yyyy-mm-dd` where `a.b` is the current version
+ number of LLVM in-tree at the time of the branch and the remaining part is
+ today's date. Move this branch to the commit in LLVM that you'd like, which
+ for this is probably the current LLVM HEAD.
+
+2. Apply Rust-specific patches to the llvm-project repository. All features and
+ bugfixes are upstream, but there's often some weird build-related patches
+ that don't make sense to upstream which we have on our repositories. These
+ patches are around the latest patches in the rust-lang/llvm-project branch
+ that rustc is currently using.
+
+3. Build the new LLVM in the `rust` repository. To do this you'll want to update
+ the `src/llvm-project` repository to your branch and the revision you've
+ created. It's also typically a good idea to update `.gitmodules` with the new
+ branch name of the LLVM submodule. Make sure you've committed changes to
+ `src/llvm-project` to ensure submodule updates aren't reverted. Some commands
+ you should execute are:
+
+ * `./x.py build src/llvm` - test that LLVM still builds
+ * `./x.py build src/tools/lld` - same for LLD
+ * `./x.py build` - build the rest of rustc
+
+ You'll likely need to update [`llvm-wrapper/*.cpp`][`llvm-wrapper`] to compile
+ with updated LLVM bindings. Note that you should use `#ifdef` and such to ensure
+ that the bindings still compile on older LLVM versions.
+
+ Note that `profile = "compiler"` and other defaults set by `./x.py setup`
+ download LLVM from CI instead of building it from source. You should
+ disable this temporarily to make sure your changes are being used, by setting
+ ```toml
+ [llvm]
+ download-ci-llvm = false
+ ```
+ in config.toml.
+
+4. Test for regressions across other platforms. LLVM often has at least one bug
+ for non-tier-1 architectures, so it's good to do some more testing before
+ sending this to bors! If you're low on resources you can send the PR as-is
+ now to bors, though, and it'll get tested anyway.
+
+ Ideally, build LLVM and test it on a few platforms:
+
+ * Linux
+ * macOS
+ * Windows
+
+ and afterwards run some docker containers that CI also does:
+
+ * `./src/ci/docker/run.sh wasm32`
+ * `./src/ci/docker/run.sh arm-android`
+ * `./src/ci/docker/run.sh dist-various-1`
+ * `./src/ci/docker/run.sh dist-various-2`
+ * `./src/ci/docker/run.sh armhf-gnu`
+
+5. Prepare a PR to `rust-lang/rust`. Work with maintainers of
+ `rust-lang/llvm-project` to get your commit in a branch of that repository,
+ and then you can send a PR to `rust-lang/rust`. You'll change at least
+ `src/llvm-project` and will likely also change [`llvm-wrapper`] as well.
+
+For prior art, previous LLVM updates look like
+[#62474](https://github.com/rust-lang/rust/pull/62474)
+[#62592](https://github.com/rust-lang/rust/pull/62592)
+[#67759](https://github.com/rust-lang/rust/pull/67759)
+[#73526](https://github.com/rust-lang/rust/pull/73526)
+[#81451](https://github.com/rust-lang/rust/pull/81451). Note that sometimes it's
+easiest to land [`llvm-wrapper`] compatibility as a PR before actually updating
+`src/llvm-project`. This way while you're working through LLVM issues others
+interested in trying out the new LLVM can benefit from work you've done to
+update the C++ bindings.
+
+[rust-lang/llvm-project repository]: https://github.com/rust-lang/llvm-project
+[`llvm-wrapper`]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_llvm/llvm-wrapper
+
+### Caveats and gotchas
+
+Ideally the above instructions are pretty smooth, but here's some caveats to
+keep in mind while going through them:
+
+* LLVM bugs are hard to find, don't hesitate to ask for help! Bisection is
+ definitely your friend here (yes LLVM takes forever to build, yet bisection is
+ still your friend)
+* If you've got general questions, [wg-llvm] can help you out.
+* Creating branches is a privileged operation on GitHub, so you'll need someone
+ with write access to create the branches for you most likely.
+
+[wg-llvm]: https://rust-lang.zulipchat.com/#narrow/stream/187780-t-compiler.2Fwg-llvm
+
+## New LLVM Release Updates
+
+Updating to a new release of LLVM is very similar to the "feature updates"
+section above. The release process for LLVM is often months-long though and we
+like to ensure compatibility ASAP. The main tweaks to the "feature updates"
+section above is generally around branch naming. The sequence of events
+typically looks like:
+
+1. LLVM announces that its latest release version has branched. This will show
+ up as a branch in https://github.com/llvm/llvm-project typically named
+ `release/$N.x` where `$N` is the version of LLVM that's being released.
+
+2. We then follow the "feature updates" section above to create a new branch of
+ LLVM in our rust-lang/llvm-project repository. This follows the same naming
+ convention of branches as usual, except that `a.b` is the new version. This
+ update is eventually landed in the rust-lang/rust repository.
+
+3. Over the next few months, LLVM will continually push commits to its
+ `release/a.b` branch. Often those are bug fixes we'd like to have as well.
+ The merge process for that is to use `git merge` itself to merge LLVM's
+ `release/a.b` branch with the branch created in step 2. This is typically
+ done multiple times when necessary while LLVM's release branch is baking.
+
+4. LLVM then announces the release of version `a.b`.
+
+5. After LLVM's official release, we follow the "feature update" section again
+ to create a new branch in the rust-lang/llvm-project repository, this time
+ with a new date. The commit history should look much cleaner as just a few
+ Rust-specific commits stacked on top of stock LLVM's release branch.
diff --git a/src/doc/rustc-dev-guide/src/borrow_check.md b/src/doc/rustc-dev-guide/src/borrow_check.md
new file mode 100644
index 000000000..8e2bb752a
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check.md
@@ -0,0 +1,59 @@
+# MIR borrow check
+
+The borrow check is Rust's "secret sauce" – it is tasked with
+enforcing a number of properties:
+
+- That all variables are initialized before they are used.
+- That you can't move the same value twice.
+- That you can't move a value while it is borrowed.
+- That you can't access a place while it is mutably borrowed (except through
+ the reference).
+- That you can't mutate a place while it is immutably borrowed.
+- etc
+
+The borrow checker operates on the MIR. An older implementation operated on the
+HIR. Doing borrow checking on MIR has several advantages:
+
+- The MIR is *far* less complex than the HIR; the radical desugaring
+ helps prevent bugs in the borrow checker. (If you're curious, you
+ can see
+ [a list of bugs that the MIR-based borrow checker fixes here][47366].)
+- Even more importantly, using the MIR enables ["non-lexical lifetimes"][nll],
+ which are regions derived from the control-flow graph.
+
+[47366]: https://github.com/rust-lang/rust/issues/47366
+[nll]: https://rust-lang.github.io/rfcs/2094-nll.html
+
+### Major phases of the borrow checker
+
+The borrow checker source is found in
+[the `rustc_borrow_ck` crate][b_c]. The main entry point is
+the [`mir_borrowck`] query.
+
+[b_c]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/index.html
+[`mir_borrowck`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/fn.mir_borrowck.html
+
+- We first create a **local copy** of the MIR. In the coming steps,
+ we will modify this copy in place to modify the types and things to
+ include references to the new regions that we are computing.
+- We then invoke [`replace_regions_in_mir`] to modify our local MIR.
+ Among other things, this function will replace all of the [regions](./appendix/glossary.md#region)
+ in the MIR with fresh [inference variables](./appendix/glossary.md#inf-var).
+- Next, we perform a number of
+ [dataflow analyses](./appendix/background.md#dataflow) that
+ compute what data is moved and when.
+- We then do a [second type check](borrow_check/type_check.md) across the MIR:
+ the purpose of this type check is to determine all of the constraints between
+ different regions.
+- Next, we do [region inference](borrow_check/region_inference.md), which computes
+ the values of each region — basically, the points in the control-flow graph where
+ each lifetime must be valid according to the constraints we collected.
+- At this point, we can compute the "borrows in scope" at each point.
+- Finally, we do a second walk over the MIR, looking at the actions it
+ does and reporting errors. For example, if we see a statement like
+ `*a + 1`, then we would check that the variable `a` is initialized
+ and that it is not mutably borrowed, as either of those would
+ require an error to be reported. Doing this check requires the results of all
+ the previous analyses.
+
+[`replace_regions_in_mir`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/nll/fn.replace_regions_in_mir.html
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization.md b/src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization.md
new file mode 100644
index 000000000..043db2f53
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization.md
@@ -0,0 +1,50 @@
+# Tracking moves and initialization
+
+Part of the borrow checker's job is to track which variables are
+"initialized" at any given point in time -- this also requires
+figuring out where moves occur and tracking those.
+
+## Initialization and moves
+
+From a user's perspective, initialization -- giving a variable some
+value -- and moves -- transferring ownership to another place -- might
+seem like distinct topics. Indeed, our borrow checker error messages
+often talk about them differently. But **within the borrow checker**,
+they are not nearly as separate. Roughly speaking, the borrow checker
+tracks the set of "initialized places" at any point in the source
+code. Assigning to a previously uninitialized local variable adds it
+to that set; moving from a local variable removes it from that set.
+
+Consider this example:
+
+```rust,ignore
+fn foo() {
+ let a: Vec<u32>;
+
+ // a is not initialized yet
+
+ a = vec![22];
+
+ // a is initialized here
+
+ std::mem::drop(a); // a is moved here
+
+ // a is no longer initialized here
+
+ let l = a.len(); //~ ERROR
+}
+```
+
+Here you can see that `a` starts off as uninitialized; once it is
+assigned, it becomes initialized. But when `drop(a)` is called, that
+moves `a` into the call, and hence it becomes uninitialized again.
+
+## Subsections
+
+To make it easier to peruse, this section is broken into a number of
+subsections:
+
+- [Move paths](./moves_and_initialization/move_paths.html) the
+ *move path* concept that we use to track which local variables (or parts of
+ local variables, in some cases) are initialized.
+- TODO *Rest not yet written* =)
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization/move_paths.md b/src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization/move_paths.md
new file mode 100644
index 000000000..4afec42f8
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/moves_and_initialization/move_paths.md
@@ -0,0 +1,129 @@
+# Move paths
+
+<!-- toc -->
+
+In reality, it's not enough to track initialization at the granularity
+of local variables. Rust also allows us to do moves and initialization
+at the field granularity:
+
+```rust,ignore
+fn foo() {
+ let a: (Vec<u32>, Vec<u32>) = (vec![22], vec![44]);
+
+ // a.0 and a.1 are both initialized
+
+ let b = a.0; // moves a.0
+
+ // a.0 is not initialized, but a.1 still is
+
+ let c = a.0; // ERROR
+ let d = a.1; // OK
+}
+```
+
+To handle this, we track initialization at the granularity of a **move
+path**. A [`MovePath`] represents some location that the user can
+initialize, move, etc. So e.g. there is a move-path representing the
+local variable `a`, and there is a move-path representing `a.0`. Move
+paths roughly correspond to the concept of a [`Place`] from MIR, but
+they are indexed in ways that enable us to do move analysis more
+efficiently.
+
+[`MovePath`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MovePath.html
+[`Place`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Place.html
+
+## Move path indices
+
+Although there is a [`MovePath`] data structure, they are never referenced
+directly. Instead, all the code passes around *indices* of type
+[`MovePathIndex`]. If you need to get information about a move path, you use
+this index with the [`move_paths` field of the `MoveData`][move_paths]. For
+example, to convert a [`MovePathIndex`] `mpi` into a MIR [`Place`], you might
+access the [`MovePath::place`] field like so:
+
+```rust,ignore
+move_data.move_paths[mpi].place
+```
+
+[move_paths]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MoveData.html#structfield.move_paths
+[`MovePath::place`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MovePath.html#structfield.place
+[`MovePathIndex`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MovePathIndex.html
+
+## Building move paths
+
+One of the first things we do in the MIR borrow check is to construct
+the set of move paths. This is done as part of the
+[`MoveData::gather_moves`] function. This function uses a MIR visitor
+called [`Gatherer`] to walk the MIR and look at how each [`Place`]
+within is accessed. For each such [`Place`], it constructs a
+corresponding [`MovePathIndex`]. It also records when/where that
+particular move path is moved/initialized, but we'll get to that in a
+later section.
+
+[`Gatherer`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/builder/struct.Gatherer.html
+[`MoveData::gather_moves`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MoveData.html#method.gather_moves
+
+### Illegal move paths
+
+We don't actually create a move-path for **every** [`Place`] that gets
+used. In particular, if it is illegal to move from a [`Place`], then
+there is no need for a [`MovePathIndex`]. Some examples:
+
+- You cannot move from a static variable, so we do not create a [`MovePathIndex`]
+ for static variables.
+- You cannot move an individual element of an array, so if we have e.g. `foo: [String; 3]`,
+ there would be no move-path for `foo[1]`.
+- You cannot move from inside of a borrowed reference, so if we have e.g. `foo: &String`,
+ there would be no move-path for `*foo`.
+
+These rules are enforced by the [`move_path_for`] function, which
+converts a [`Place`] into a [`MovePathIndex`] -- in error cases like
+those just discussed, the function returns an `Err`. This in turn
+means we don't have to bother tracking whether those places are
+initialized (which lowers overhead).
+
+[`move_path_for`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/builder/struct.Gatherer.html#method.move_path_for
+
+## Looking up a move-path
+
+If you have a [`Place`] and you would like to convert it to a [`MovePathIndex`], you
+can do that using the [`MovePathLookup`] structure found in the [`rev_lookup`] field
+of [`MoveData`]. There are two different methods:
+
+[`MoveData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MoveData.html
+[`MovePathLookup`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MovePathLookup.html
+[`rev_lookup`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MoveData.html#structfield.rev_lookup
+
+- [`find_local`], which takes a [`mir::Local`] representing a local
+ variable. This is the easier method, because we **always** create a
+ [`MovePathIndex`] for every local variable.
+- [`find`], which takes an arbitrary [`Place`]. This method is a bit
+ more annoying to use, precisely because we don't have a
+ [`MovePathIndex`] for **every** [`Place`] (as we just discussed in
+ the "illegal move paths" section). Therefore, [`find`] returns a
+ [`LookupResult`] indicating the closest path it was able to find
+ that exists (e.g., for `foo[1]`, it might return just the path for
+ `foo`).
+
+[`find`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MovePathLookup.html#method.find
+[`find_local`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MovePathLookup.html#method.find_local
+[`mir::Local`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Local.html
+[`LookupResult`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/enum.LookupResult.html
+
+## Cross-references
+
+As we noted above, move-paths are stored in a big vector and
+referenced via their [`MovePathIndex`]. However, within this vector,
+they are also structured into a tree. So for example if you have the
+[`MovePathIndex`] for `a.b.c`, you can go to its parent move-path
+`a.b`. You can also iterate over all children paths: so, from `a.b`,
+you might iterate to find the path `a.b.c` (here you are iterating
+just over the paths that are **actually referenced** in the source,
+not all **possible** paths that could have been referenced). These
+references are used for example in the
+[`find_in_move_path_or_its_descendants`] function, which determines
+whether a move-path (e.g., `a.b`) or any child of that move-path
+(e.g.,`a.b.c`) matches a given predicate.
+
+[`Place`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Place.html
+[`find_in_move_path_or_its_descendants`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/move_paths/struct.MoveData.html#method.find_in_move_path_or_its_descendants
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference.md
new file mode 100644
index 000000000..330c079b9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference.md
@@ -0,0 +1,238 @@
+# Region inference (NLL)
+
+<!-- toc -->
+
+The MIR-based region checking code is located in [the `rustc_mir::borrow_check`
+module][nll].
+
+[nll]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/index.html
+
+The MIR-based region analysis consists of two major functions:
+
+- [`replace_regions_in_mir`], invoked first, has two jobs:
+ - First, it finds the set of regions that appear within the
+ signature of the function (e.g., `'a` in `fn foo<'a>(&'a u32) {
+ ... }`). These are called the "universal" or "free" regions – in
+ particular, they are the regions that [appear free][fvb] in the
+ function body.
+ - Second, it replaces all the regions from the function body with
+ fresh inference variables. This is because (presently) those
+ regions are the results of lexical region inference and hence are
+ not of much interest. The intention is that – eventually – they
+ will be "erased regions" (i.e., no information at all), since we
+ won't be doing lexical region inference at all.
+- [`compute_regions`], invoked second: this is given as argument the
+ results of move analysis. It has the job of computing values for all
+ the inference variables that `replace_regions_in_mir` introduced.
+ - To do that, it first runs the [MIR type checker]. This is
+ basically a normal type-checker but specialized to MIR, which is
+ much simpler than full Rust, of course. Running the MIR type
+ checker will however create various [constraints][cp] between region
+ variables, indicating their potential values and relationships to
+ one another.
+ - After this, we perform [constraint propagation][cp] by creating a
+ [`RegionInferenceContext`] and invoking its [`solve`]
+ method.
+ - The [NLL RFC] also includes fairly thorough (and hopefully readable)
+ coverage.
+
+[cp]: ./region_inference/constraint_propagation.md
+[fvb]: ../appendix/background.md#free-vs-bound
+[`replace_regions_in_mir`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/nll/fn.replace_regions_in_mir.html
+[`compute_regions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/nll/fn.compute_regions.html
+[`RegionInferenceContext`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html
+[`solve`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.solve
+[NLL RFC]: https://rust-lang.github.io/rfcs/2094-nll.html
+[MIR type checker]: ./type_check.md
+
+## Universal regions
+
+The [`UniversalRegions`] type represents a collection of _universal_ regions
+corresponding to some MIR `DefId`. It is constructed in
+[`replace_regions_in_mir`] when we replace all regions with fresh inference
+variables. [`UniversalRegions`] contains indices for all the free regions in
+the given MIR along with any relationships that are _known_ to hold between
+them (e.g. implied bounds, where clauses, etc.).
+
+For example, given the MIR for the following function:
+
+```rust
+fn foo<'a>(x: &'a u32) {
+ // ...
+}
+```
+
+we would create a universal region for `'a` and one for `'static`. There may
+also be some complications for handling closures, but we will ignore those for
+the moment.
+
+TODO: write about _how_ these regions are computed.
+
+[`UniversalRegions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/universal_regions/struct.UniversalRegions.html
+
+<a name="region-variables"></a>
+
+## Region variables
+
+The value of a region can be thought of as a **set**. This set contains all
+points in the MIR where the region is valid along with any regions that are
+outlived by this region (e.g. if `'a: 'b`, then `end('b)` is in the set for
+`'a`); we call the domain of this set a `RegionElement`. In the code, the value
+for all regions is maintained in [the `rustc_borrowck::region_infer` module][ri].
+For each region we maintain a set storing what elements are present in its value (to make this
+efficient, we give each kind of element an index, the `RegionElementIndex`, and
+use sparse bitsets).
+
+[ri]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_borrowck/src/region_infer
+
+The kinds of region elements are as follows:
+
+- Each **[`location`]** in the MIR control-flow graph: a location is just
+ the pair of a basic block and an index. This identifies the point
+ **on entry** to the statement with that index (or the terminator, if
+ the index is equal to `statements.len()`).
+- There is an element `end('a)` for each universal region `'a`,
+ corresponding to some portion of the caller's (or caller's caller,
+ etc) control-flow graph.
+- Similarly, there is an element denoted `end('static)` corresponding
+ to the remainder of program execution after this function returns.
+- There is an element `!1` for each placeholder region `!1`. This
+ corresponds (intuitively) to some unknown set of other elements –
+ for details on placeholders, see the section
+ [placeholders and universes](region_inference/placeholders_and_universes.md).
+
+## Constraints
+
+Before we can infer the value of regions, we need to collect
+constraints on the regions. The full set of constraints is described
+in [the section on constraint propagation][cp], but the two most
+common sorts of constraints are:
+
+1. Outlives constraints. These are constraints that one region outlives another
+ (e.g. `'a: 'b`). Outlives constraints are generated by the [MIR type
+ checker].
+2. Liveness constraints. Each region needs to be live at points where it can be
+ used. These constraints are collected by [`generate_constraints`].
+
+[`generate_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/constraint_generation/fn.generate_constraints.html
+
+## Inference Overview
+
+So how do we compute the contents of a region? This process is called _region
+inference_. The high-level idea is pretty simple, but there are some details we
+need to take care of.
+
+Here is the high-level idea: we start off each region with the MIR locations we
+know must be in it from the liveness constraints. From there, we use all of the
+outlives constraints computed from the type checker to _propagate_ the
+constraints: for each region `'a`, if `'a: 'b`, then we add all elements of
+`'b` to `'a`, including `end('b)`. This all happens in
+[`propagate_constraints`].
+
+Then, we will check for errors. We first check that type tests are satisfied by
+calling [`check_type_tests`]. This checks constraints like `T: 'a`. Second, we
+check that universal regions are not "too big". This is done by calling
+[`check_universal_regions`]. This checks that for each region `'a` if `'a`
+contains the element `end('b)`, then we must already know that `'a: 'b` holds
+(e.g. from a where clause). If we don't already know this, that is an error...
+well, almost. There is some special handling for closures that we will discuss
+later.
+
+### Example
+
+Consider the following example:
+
+```rust,ignore
+fn foo<'a, 'b>(x: &'a usize) -> &'b usize {
+ x
+}
+```
+
+Clearly, this should not compile because we don't know if `'a` outlives `'b`
+(if it doesn't then the return value could be a dangling reference).
+
+Let's back up a bit. We need to introduce some free inference variables (as is
+done in [`replace_regions_in_mir`]). This example doesn't use the exact regions
+produced, but it (hopefully) is enough to get the idea across.
+
+```rust,ignore
+fn foo<'a, 'b>(x: &'a /* '#1 */ usize) -> &'b /* '#3 */ usize {
+ x // '#2, location L1
+}
+```
+
+Some notation: `'#1`, `'#3`, and `'#2` represent the universal regions for the
+argument, return value, and the expression `x`, respectively. Additionally, I
+will call the location of the expression `x` `L1`.
+
+So now we can use the liveness constraints to get the following starting points:
+
+Region | Contents
+--------|----------
+'#1 |
+'#2 | `L1`
+'#3 | `L1`
+
+Now we use the outlives constraints to expand each region. Specifically, we
+know that `'#2: '#3` ...
+
+Region | Contents
+--------|----------
+'#1 | `L1`
+'#2 | `L1, end('#3) // add contents of '#3 and end('#3)`
+'#3 | `L1`
+
+... and `'#1: '#2`, so ...
+
+Region | Contents
+--------|----------
+'#1 | `L1, end('#2), end('#3) // add contents of '#2 and end('#2)`
+'#2 | `L1, end('#3)`
+'#3 | `L1`
+
+Now, we need to check that no regions were too big (we don't have any type
+tests to check in this case). Notice that `'#1` now contains `end('#3)`, but
+we have no `where` clause or implied bound to say that `'a: 'b`... that's an
+error!
+
+### Some details
+
+The [`RegionInferenceContext`] type contains all of the information needed to
+do inference, including the universal regions from [`replace_regions_in_mir`] and
+the constraints computed for each region. It is constructed just after we
+compute the liveness constraints.
+
+Here are some of the fields of the struct:
+
+- [`constraints`]: contains all the outlives constraints.
+- [`liveness_constraints`]: contains all the liveness constraints.
+- [`universal_regions`]: contains the `UniversalRegions` returned by
+ [`replace_regions_in_mir`].
+- [`universal_region_relations`]: contains relations known to be true about
+ universal regions. For example, if we have a where clause that `'a: 'b`, that
+ relation is assumed to be true while borrow checking the implementation (it
+ is checked at the caller), so `universal_region_relations` would contain `'a:
+ 'b`.
+- [`type_tests`]: contains some constraints on types that we must check after
+ inference (e.g. `T: 'a`).
+- [`closure_bounds_mapping`]: used for propagating region constraints from
+ closures back out to the creator of the closure.
+
+[`constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.constraints
+[`liveness_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.liveness_constraints
+[`location`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Location.html
+[`universal_regions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.universal_regions
+[`universal_region_relations`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.universal_region_relations
+[`type_tests`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.type_tests
+[`closure_bounds_mapping`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.closure_bounds_mapping
+
+TODO: should we discuss any of the others fields? What about the SCCs?
+
+Ok, now that we have constructed a `RegionInferenceContext`, we can do
+inference. This is done by calling the [`solve`] method on the context. This
+is where we call [`propagate_constraints`] and then check the resulting type
+tests and universal regions, as discussed above.
+
+[`propagate_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.propagate_constraints
+[`check_type_tests`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.check_type_tests
+[`check_universal_regions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.check_universal_regions
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference/closure_constraints.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/closure_constraints.md
new file mode 100644
index 000000000..13230d037
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/closure_constraints.md
@@ -0,0 +1,10 @@
+# Propagating closure constraints
+
+When we are checking the type tests and universal regions, we may come
+across a constraint that we can't prove yet if we are in a closure
+body! However, the necessary constraints may actually hold (we just
+don't know it yet). Thus, if we are inside a closure, we just collect
+all the constraints we can't prove yet and return them. Later, when we
+are borrow check the MIR node that created the closure, we can also
+check that these constraints hold. At that time, if we can't prove
+they hold, we report an error.
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference/constraint_propagation.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/constraint_propagation.md
new file mode 100644
index 000000000..4c30d25e0
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/constraint_propagation.md
@@ -0,0 +1,224 @@
+# Constraint propagation
+
+<!-- toc -->
+
+The main work of the region inference is **constraint propagation**,
+which is done in the [`propagate_constraints`] function. There are
+three sorts of constraints that are used in NLL, and we'll explain how
+`propagate_constraints` works by "layering" those sorts of constraints
+on one at a time (each of them is fairly independent from the others):
+
+- liveness constraints (`R live at E`), which arise from liveness;
+- outlives constraints (`R1: R2`), which arise from subtyping;
+- [member constraints][m_c] (`member R_m of [R_c...]`), which arise from impl Trait.
+
+[`propagate_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.propagate_constraints
+[m_c]: ./member_constraints.md
+
+In this chapter, we'll explain the "heart" of constraint propagation,
+covering both liveness and outlives constraints.
+
+## Notation and high-level concepts
+
+Conceptually, region inference is a "fixed-point" computation. It is
+given some set of constraints `{C}` and it computes a set of values
+`Values: R -> {E}` that maps each region `R` to a set of elements
+`{E}` (see [here][riv] for more notes on region elements):
+
+- Initially, each region is mapped to an empty set, so `Values(R) =
+ {}` for all regions `R`.
+- Next, we process the constraints repeatedly until a fixed-point is reached:
+ - For each constraint C:
+ - Update `Values` as needed to satisfy the constraint
+
+[riv]: ../region_inference.md#region-variables
+
+As a simple example, if we have a liveness constraint `R live at E`,
+then we can apply `Values(R) = Values(R) union {E}` to make the
+constraint be satisfied. Similarly, if we have an outlives constraints
+`R1: R2`, we can apply `Values(R1) = Values(R1) union Values(R2)`.
+(Member constraints are more complex and we discuss them [in this section][m_c].)
+
+In practice, however, we are a bit more clever. Instead of applying
+the constraints in a loop, we can analyze the constraints and figure
+out the correct order to apply them, so that we only have to apply
+each constraint once in order to find the final result.
+
+Similarly, in the implementation, the `Values` set is stored in the
+`scc_values` field, but they are indexed not by a *region* but by a
+*strongly connected component* (SCC). SCCs are an optimization that
+avoids a lot of redundant storage and computation. They are explained
+in the section on outlives constraints.
+
+## Liveness constraints
+
+A **liveness constraint** arises when some variable whose type
+includes a region R is live at some [point] P. This simply means that
+the value of R must include the point P. Liveness constraints are
+computed by the MIR type checker.
+
+[point]: ../../appendix/glossary.md#point
+
+A liveness constraint `R live at E` is satisfied if `E` is a member of
+`Values(R)`. So to "apply" such a constraint to `Values`, we just have
+to compute `Values(R) = Values(R) union {E}`.
+
+The liveness values are computed in the type-check and passed to the
+region inference upon creation in the `liveness_constraints` argument.
+These are not represented as individual constraints like `R live at E`
+though; instead, we store a (sparse) bitset per region variable (of
+type [`LivenessValues`]). This way we only need a single bit for each
+liveness constraint.
+
+[`liveness_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.liveness_constraints
+[`LivenessValues`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/values/struct.LivenessValues.html
+
+One thing that is worth mentioning: All lifetime parameters are always
+considered to be live over the entire function body. This is because
+they correspond to some portion of the *caller's* execution, and that
+execution clearly includes the time spent in this function, since the
+caller is waiting for us to return.
+
+## Outlives constraints
+
+An outlives constraint `'a: 'b` indicates that the value of `'a` must
+be a **superset** of the value of `'b`. That is, an outlives
+constraint `R1: R2` is satisfied if `Values(R1)` is a superset of
+`Values(R2)`. So to "apply" such a constraint to `Values`, we just
+have to compute `Values(R1) = Values(R1) union Values(R2)`.
+
+One observation that follows from this is that if you have `R1: R2`
+and `R2: R1`, then `R1 = R2` must be true. Similarly, if you have:
+
+```txt
+R1: R2
+R2: R3
+R3: R4
+R4: R1
+```
+
+then `R1 = R2 = R3 = R4` follows. We take advantage of this to make things
+much faster, as described shortly.
+
+In the code, the set of outlives constraints is given to the region
+inference context on creation in a parameter of type
+[`OutlivesConstraintSet`]. The constraint set is basically just a list of `'a:
+'b` constraints.
+
+### The outlives constraint graph and SCCs
+
+In order to work more efficiently with outlives constraints, they are
+[converted into the form of a graph][graph-fn], where the nodes of the
+graph are region variables (`'a`, `'b`) and each constraint `'a: 'b`
+induces an edge `'a -> 'b`. This conversion happens in the
+[`RegionInferenceContext::new`] function that creates the inference
+context.
+
+[`OutlivesConstraintSet`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/constraints/struct.OutlivesConstraintSet.html
+[graph-fn]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/constraints/struct.OutlivesConstraintSet.html#method.graph
+[`RegionInferenceContext::new`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.new
+
+When using a graph representation, we can detect regions that must be equal
+by looking for cycles. That is, if you have a constraint like
+
+```txt
+'a: 'b
+'b: 'c
+'c: 'd
+'d: 'a
+```
+
+then this will correspond to a cycle in the graph containing the
+elements `'a...'d`.
+
+Therefore, one of the first things that we do in propagating region
+values is to compute the **strongly connected components** (SCCs) in
+the constraint graph. The result is stored in the [`constraint_sccs`]
+field. You can then easily find the SCC that a region `r` is a part of
+by invoking `constraint_sccs.scc(r)`.
+
+Working in terms of SCCs allows us to be more efficient: if we have a
+set of regions `'a...'d` that are part of a single SCC, we don't have
+to compute/store their values separately. We can just store one value
+**for the SCC**, since they must all be equal.
+
+If you look over the region inference code, you will see that a number
+of fields are defined in terms of SCCs. For example, the
+[`scc_values`] field stores the values of each SCC. To get the value
+of a specific region `'a` then, we first figure out the SCC that the
+region is a part of, and then find the value of that SCC.
+
+[`constraint_sccs`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.constraint_sccs
+[`scc_values`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#structfield.scc_values
+
+When we compute SCCs, we not only figure out which regions are a
+member of each SCC, we also figure out the edges between them. So for example
+consider this set of outlives constraints:
+
+```txt
+'a: 'b
+'b: 'a
+
+'a: 'c
+
+'c: 'd
+'d: 'c
+```
+
+Here we have two SCCs: S0 contains `'a` and `'b`, and S1 contains `'c`
+and `'d`. But these SCCs are not independent: because `'a: 'c`, that
+means that `S0: S1` as well. That is -- the value of `S0` must be a
+superset of the value of `S1`. One crucial thing is that this graph of
+SCCs is always a DAG -- that is, it never has cycles. This is because
+all the cycles have been removed to form the SCCs themselves.
+
+### Applying liveness constraints to SCCs
+
+The liveness constraints that come in from the type-checker are
+expressed in terms of regions -- that is, we have a map like
+`Liveness: R -> {E}`. But we want our final result to be expressed
+in terms of SCCs -- we can integrate these liveness constraints very
+easily just by taking the union:
+
+```txt
+for each region R:
+ let S be the SCC that contains R
+ Values(S) = Values(S) union Liveness(R)
+```
+
+In the region inferencer, this step is done in [`RegionInferenceContext::new`].
+
+### Applying outlives constraints
+
+Once we have computed the DAG of SCCs, we use that to structure out
+entire computation. If we have an edge `S1 -> S2` between two SCCs,
+that means that `Values(S1) >= Values(S2)` must hold. So, to compute
+the value of `S1`, we first compute the values of each successor `S2`.
+Then we simply union all of those values together. To use a
+quasi-iterator-like notation:
+
+```txt
+Values(S1) =
+ s1.successors()
+ .map(|s2| Values(s2))
+ .union()
+```
+
+In the code, this work starts in the [`propagate_constraints`]
+function, which iterates over all the SCCs. For each SCC `S1`, we
+compute its value by first computing the value of its
+successors. Since SCCs form a DAG, we don't have to be concerned about
+cycles, though we do need to keep a set around to track whether we
+have already processed a given SCC or not. For each successor `S2`, once
+we have computed `S2`'s value, we can union those elements into the
+value for `S1`. (Although we have to be careful in this process to
+properly handle [higher-ranked
+placeholders](./placeholders_and_universes.html). Note that the value
+for `S1` already contains the liveness constraints, since they were
+added in [`RegionInferenceContext::new`].
+
+Once that process is done, we now have the "minimal value" for `S1`,
+taking into account all of the liveness and outlives
+constraints. However, in order to complete the process, we must also
+consider [member constraints][m_c], which are described in [a later
+section][m_c].
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference/error_reporting.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/error_reporting.md
new file mode 100644
index 000000000..79b3e077c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/error_reporting.md
@@ -0,0 +1,3 @@
+# Reporting region errors
+
+TODO: we should discuss how to generate errors from the results of these analyses.
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference/lifetime_parameters.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/lifetime_parameters.md
new file mode 100644
index 000000000..2dbbc0c1e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/lifetime_parameters.md
@@ -0,0 +1,127 @@
+# Universal regions
+
+<!-- toc -->
+
+"Universal regions" is the name that the code uses to refer to "named
+lifetimes" -- e.g., lifetime parameters and `'static`. The name
+derives from the fact that such lifetimes are "universally quantified"
+(i.e., we must make sure the code is true for all values of those
+lifetimes). It is worth spending a bit of discussing how lifetime
+parameters are handled during region inference. Consider this example:
+
+```rust,ignore
+fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
+ x
+}
+```
+
+This example is intended not to compile, because we are returning `x`,
+which has type `&'a u32`, but our signature promises that we will
+return a `&'b u32` value. But how are lifetimes like `'a` and `'b`
+integrated into region inference, and how this error wind up being
+detected?
+
+## Universal regions and their relationships to one another
+
+Early on in region inference, one of the first things we do is to
+construct a [`UniversalRegions`] struct. This struct tracks the
+various universal regions in scope on a particular function. We also
+create a [`UniversalRegionRelations`] struct, which tracks their
+relationships to one another. So if you have e.g. `where 'a: 'b`, then
+the [`UniversalRegionRelations`] struct would track that `'a: 'b` is
+known to hold (which could be tested with the [`outlives`] function.
+
+[`UniversalRegions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/universal_regions/struct.UniversalRegions.html
+[`UniversalRegionRelations`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/type_check/free_region_relations/struct.UniversalRegionRelations.html
+[`outlives`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/type_check/free_region_relations/struct.UniversalRegionRelations.html#method.outlives
+
+## Everything is a region variable
+
+One important aspect of how NLL region inference works is that **all
+lifetimes** are represented as numbered variables. This means that the
+only variant of [`ty::RegionKind`] that we use is the [`ReVar`]
+variant. These region variables are broken into two major categories,
+based on their index:
+
+[`ty::RegionKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.RegionKind.html
+[`ReVar`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.RegionKind.html#variant.ReVar
+
+- 0..N: universal regions -- the ones we are discussing here. In this
+ case, the code must be correct with respect to any value of those
+ variables that meets the declared relationships.
+- N..M: existential regions -- inference variables where the region
+ inferencer is tasked with finding *some* suitable value.
+
+In fact, the universal regions can be further subdivided based on
+where they were brought into scope (see the [`RegionClassification`]
+type). These subdivisions are not important for the topics discussed
+here, but become important when we consider [closure constraint
+propagation](./closure_constraints.html), so we discuss them there.
+
+[`RegionClassification`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/universal_regions/enum.RegionClassification.html#variant.Local
+
+## Universal lifetimes as the elements of a region's value
+
+As noted previously, the value that we infer for each region is a set
+`{E}`. The elements of this set can be points in the control-flow
+graph, but they can also be an element `end('a)` corresponding to each
+universal lifetime `'a`. If the value for some region `R0` includes
+`end('a`), then this implies that `R0` must extend until the end of `'a`
+in the caller.
+
+## The "value" of a universal region
+
+During region inference, we compute a value for each universal region
+in the same way as we compute values for other regions. This value
+represents, effectively, the **lower bound** on that universal region
+-- the things that it must outlive. We now describe how we use this
+value to check for errors.
+
+## Liveness and universal regions
+
+All universal regions have an initial liveness constraint that
+includes the entire function body. This is because lifetime parameters
+are defined in the caller and must include the entirety of the
+function call that invokes this particular function. In addition, each
+universal region `'a` includes itself (that is, `end('a)`) in its
+liveness constraint (i.e., `'a` must extend until the end of
+itself). In the code, these liveness constraints are setup in
+[`init_free_and_bound_regions`].
+
+[`init_free_and_bound_regions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.init_free_and_bound_regions
+
+## Propagating outlives constraints for universal regions
+
+So, consider the first example of this section:
+
+```rust,ignore
+fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> &'b u32 {
+ x
+}
+```
+
+Here, returning `x` requires that `&'a u32 <: &'b u32`, which gives
+rise to an outlives constraint `'a: 'b`. Combined with our default liveness
+constraints we get:
+
+```txt
+'a live at {B, end('a)} // B represents the "function body"
+'b live at {B, end('b)}
+'a: 'b
+```
+
+When we process the `'a: 'b` constraint, therefore, we will add
+`end('b)` into the value for `'a`, resulting in a final value of `{B,
+end('a), end('b)}`.
+
+## Detecting errors
+
+Once we have finished constraint propagation, we then enforce a
+constraint that if some universal region `'a` includes an element
+`end('b)`, then `'a: 'b` must be declared in the function's bounds. If
+not, as in our example, that is an error. This check is done in the
+[`check_universal_regions`] function, which simply iterates over all
+universal regions, inspects their final value, and tests against the
+declared [`UniversalRegionRelations`].
+
+[`check_universal_regions`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/region_infer/struct.RegionInferenceContext.html#method.check_universal_regions
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference/member_constraints.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/member_constraints.md
new file mode 100644
index 000000000..c7c107e1e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/member_constraints.md
@@ -0,0 +1,193 @@
+# Member constraints
+
+<!-- toc -->
+
+A member constraint `'m member of ['c_1..'c_N]` expresses that the
+region `'m` must be *equal* to some **choice regions** `'c_i` (for
+some `i`). These constraints cannot be expressed by users, but they
+arise from `impl Trait` due to its lifetime capture rules. Consider a
+function such as the following:
+
+```rust,ignore
+fn make(a: &'a u32, b: &'b u32) -> impl Trait<'a, 'b> { .. }
+```
+
+Here, the true return type (often called the "hidden type") is only
+permitted to capture the lifetimes `'a` or `'b`. You can kind of see
+this more clearly by desugaring that `impl Trait` return type into its
+more explicit form:
+
+```rust,ignore
+type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;
+fn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> { .. }
+```
+
+Here, the idea is that the hidden type must be some type that could
+have been written in place of the `impl Trait<'x, 'y>` -- but clearly
+such a type can only reference the regions `'x` or `'y` (or
+`'static`!), as those are the only names in scope. This limitation is
+then translated into a restriction to only access `'a` or `'b` because
+we are returning `MakeReturn<'a, 'b>`, where `'x` and `'y` have been
+replaced with `'a` and `'b` respectively.
+
+## Detailed example
+
+To help us explain member constraints in more detail, let's spell out
+the `make` example in a bit more detail. First off, let's assume that
+you have some dummy trait:
+
+```rust,ignore
+trait Trait<'a, 'b> { }
+impl<T> Trait<'_, '_> for T { }
+```
+
+and this is the `make` function (in desugared form):
+
+```rust,ignore
+type MakeReturn<'x, 'y> = impl Trait<'x, 'y>;
+fn make(a: &'a u32, b: &'b u32) -> MakeReturn<'a, 'b> {
+ (a, b)
+}
+```
+
+What happens in this case is that the return type will be `(&'0 u32, &'1 u32)`,
+where `'0` and `'1` are fresh region variables. We will have the following
+region constraints:
+
+```txt
+'0 live at {L}
+'1 live at {L}
+'a: '0
+'b: '1
+'0 member of ['a, 'b, 'static]
+'1 member of ['a, 'b, 'static]
+```
+
+Here the "liveness set" `{L}` corresponds to that subset of the body
+where `'0` and `'1` are live -- basically the point from where the
+return tuple is constructed to where it is returned (in fact, `'0` and
+`'1` might have slightly different liveness sets, but that's not very
+interesting to the point we are illustrating here).
+
+The `'a: '0` and `'b: '1` constraints arise from subtyping. When we
+construct the `(a, b)` value, it will be assigned type `(&'0 u32, &'1
+u32)` -- the region variables reflect that the lifetimes of these
+references could be made smaller. For this value to be created from
+`a` and `b`, however, we do require that:
+
+```txt
+(&'a u32, &'b u32) <: (&'0 u32, &'1 u32)
+```
+
+which means in turn that `&'a u32 <: &'0 u32` and hence that `'a: '0`
+(and similarly that `&'b u32 <: &'1 u32`, `'b: '1`).
+
+Note that if we ignore member constraints, the value of `'0` would be
+inferred to some subset of the function body (from the liveness
+constraints, which we did not write explicitly). It would never become
+`'a`, because there is no need for it too -- we have a constraint that
+`'a: '0`, but that just puts a "cap" on how *large* `'0` can grow to
+become. Since we compute the *minimal* value that we can, we are happy
+to leave `'0` as being just equal to the liveness set. This is where
+member constraints come in.
+
+## Choices are always lifetime parameters
+
+At present, the "choice" regions from a member constraint are always lifetime
+parameters from the current function. As of <!-- date: 2021-10 --> October 2021,
+this falls out from the placement of impl Trait, though in the future it may not
+be the case. We take some advantage of this fact, as it simplifies the current
+code. In particular, we don't have to consider a case like `'0 member of ['1,
+'static]`, in which the value of both `'0` and `'1` are being inferred and hence
+changing. See [rust-lang/rust#61773][#61773] for more information.
+
+[#61773]: https://github.com/rust-lang/rust/issues/61773
+
+## Applying member constraints
+
+Member constraints are a bit more complex than other forms of
+constraints. This is because they have a "or" quality to them -- that
+is, they describe multiple choices that we must select from. E.g., in
+our example constraint `'0 member of ['a, 'b, 'static]`, it might be
+that `'0` is equal to `'a`, `'b`, *or* `'static`. How can we pick the
+correct one? What we currently do is to look for a *minimal choice*
+-- if we find one, then we will grow `'0` to be equal to that minimal
+choice. To find that minimal choice, we take two factors into
+consideration: lower and upper bounds.
+
+### Lower bounds
+
+The *lower bounds* are those lifetimes that `'0` *must outlive* --
+i.e., that `'0` must be larger than. In fact, when it comes time to
+apply member constraints, we've already *computed* the lower bounds of
+`'0` because we computed its minimal value (or at least, the lower
+bounds considering everything but member constraints).
+
+Let `LB` be the current value of `'0`. We know then that `'0: LB` must
+hold, whatever the final value of `'0` is. Therefore, we can rule out
+any choice `'choice` where `'choice: LB` does not hold.
+
+Unfortunately, in our example, this is not very helpful. The lower
+bound for `'0` will just be the liveness set `{L}`, and we know that
+all the lifetime parameters outlive that set. So we are left with the
+same set of choices here. (But in other examples, particularly those
+with different variance, lower bound constraints may be relevant.)
+
+### Upper bounds
+
+The *upper bounds* are those lifetimes that *must outlive* `'0` --
+i.e., that `'0` must be *smaller* than. In our example, this would be
+`'a`, because we have the constraint that `'a: '0`. In more complex
+examples, the chain may be more indirect.
+
+We can use upper bounds to rule out members in a very similar way to
+lower bounds. If UB is some upper bound, then we know that `UB:
+'0` must hold, so we can rule out any choice `'choice` where `UB:
+'choice` does not hold.
+
+In our example, we would be able to reduce our choice set from `['a,
+'b, 'static]` to just `['a]`. This is because `'0` has an upper bound
+of `'a`, and neither `'a: 'b` nor `'a: 'static` is known to hold.
+
+(For notes on how we collect upper bounds in the implementation, see
+[the section below](#collecting).)
+
+### Minimal choice
+
+After applying lower and upper bounds, we can still sometimes have
+multiple possibilities. For example, imagine a variant of our example
+using types with the opposite variance. In that case, we would have
+the constraint `'0: 'a` instead of `'a: '0`. Hence the current value
+of `'0` would be `{L, 'a}`. Using this as a lower bound, we would be
+able to narrow down the member choices to `['a, 'static]` because `'b:
+'a` is not known to hold (but `'a: 'a` and `'static: 'a` do hold). We
+would not have any upper bounds, so that would be our final set of choices.
+
+In that case, we apply the **minimal choice** rule -- basically, if
+one of our choices if smaller than the others, we can use that. In
+this case, we would opt for `'a` (and not `'static`).
+
+This choice is consistent with the general 'flow' of region
+propagation, which always aims to compute a minimal value for the
+region being inferred. However, it is somewhat arbitrary.
+
+<a name="collecting"></a>
+
+### Collecting upper bounds in the implementation
+
+In practice, computing upper bounds is a bit inconvenient, because our
+data structures are setup for the opposite. What we do is to compute
+the **reverse SCC graph** (we do this lazily and cache the result) --
+that is, a graph where `'a: 'b` induces an edge `SCC('b) ->
+SCC('a)`. Like the normal SCC graph, this is a DAG. We can then do a
+depth-first search starting from `SCC('0)` in this graph. This will
+take us to all the SCCs that must outlive `'0`.
+
+One wrinkle is that, as we walk the "upper bound" SCCs, their values
+will not yet have been fully computed. However, we **have** already
+applied their liveness constraints, so we have some information about
+their value. In particular, for any regions representing lifetime
+parameters, their value will contain themselves (i.e., the initial
+value for `'a` includes `'a` and the value for `'b` contains `'b`). So
+we can collect all of the lifetime parameters that are reachable,
+which is precisely what we are interested in.
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/region_inference/placeholders_and_universes.md b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/placeholders_and_universes.md
new file mode 100644
index 000000000..91c8c4526
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/region_inference/placeholders_and_universes.md
@@ -0,0 +1,442 @@
+# Placeholders and universes
+
+<!-- toc -->
+
+From time to time we have to reason about regions that we can't
+concretely know. For example, consider this program:
+
+```rust,ignore
+// A function that needs a static reference
+fn foo(x: &'static u32) { }
+
+fn bar(f: for<'a> fn(&'a u32)) {
+ // ^^^^^^^^^^^^^^^^^^^ a function that can accept **any** reference
+ let x = 22;
+ f(&x);
+}
+
+fn main() {
+ bar(foo);
+}
+```
+
+This program ought not to type-check: `foo` needs a static reference
+for its argument, and `bar` wants to be given a function that
+accepts **any** reference (so it can call it with something on its
+stack, for example). But *how* do we reject it and *why*?
+
+## Subtyping and Placeholders
+
+When we type-check `main`, and in particular the call `bar(foo)`, we
+are going to wind up with a subtyping relationship like this one:
+
+```text
+fn(&'static u32) <: for<'a> fn(&'a u32)
+---------------- -------------------
+the type of `foo` the type `bar` expects
+```
+
+We handle this sort of subtyping by taking the variables that are
+bound in the supertype and replacing them with
+[universally quantified](../../appendix/background.md#quantified)
+representatives, denoted like `!1` here. We call these regions "placeholder
+regions" – they represent, basically, "some unknown region".
+
+Once we've done that replacement, we have the following relation:
+
+```text
+fn(&'static u32) <: fn(&'!1 u32)
+```
+
+The key idea here is that this unknown region `'!1` is not related to
+any other regions. So if we can prove that the subtyping relationship
+is true for `'!1`, then it ought to be true for any region, which is
+what we wanted.
+
+So let's work through what happens next. To check if two functions are
+subtypes, we check if their arguments have the desired relationship
+(fn arguments are [contravariant](../../appendix/background.md#variance), so
+we swap the left and right here):
+
+```text
+&'!1 u32 <: &'static u32
+```
+
+According to the basic subtyping rules for a reference, this will be
+true if `'!1: 'static`. That is – if "some unknown region `!1`" outlives `'static`.
+Now, this *might* be true – after all, `'!1` could be `'static` –
+but we don't *know* that it's true. So this should yield up an error (eventually).
+
+## What is a universe?
+
+In the previous section, we introduced the idea of a placeholder
+region, and we denoted it `!1`. We call this number `1` the **universe
+index**. The idea of a "universe" is that it is a set of names that
+are in scope within some type or at some point. Universes are formed
+into a tree, where each child extends its parents with some new names.
+So the **root universe** conceptually contains global names, such as
+the lifetime `'static` or the type `i32`. In the compiler, we also
+put generic type parameters into this root universe (in this sense,
+there is not just one root universe, but one per item). So consider
+this function `bar`:
+
+```rust,ignore
+struct Foo { }
+
+fn bar<'a, T>(t: &'a T) {
+ ...
+}
+```
+
+Here, the root universe would consist of the lifetimes `'static` and
+`'a`. In fact, although we're focused on lifetimes here, we can apply
+the same concept to types, in which case the types `Foo` and `T` would
+be in the root universe (along with other global types, like `i32`).
+Basically, the root universe contains all the names that
+[appear free](../../appendix/background.md#free-vs-bound) in the body of `bar`.
+
+Now let's extend `bar` a bit by adding a variable `x`:
+
+```rust,ignore
+fn bar<'a, T>(t: &'a T) {
+ let x: for<'b> fn(&'b u32) = ...;
+}
+```
+
+Here, the name `'b` is not part of the root universe. Instead, when we
+"enter" into this `for<'b>` (e.g., by replacing it with a placeholder), we will create
+a child universe of the root, let's call it U1:
+
+```text
+U0 (root universe)
+│
+└─ U1 (child universe)
+```
+
+The idea is that this child universe U1 extends the root universe U0
+with a new name, which we are identifying by its universe number:
+`!1`.
+
+Now let's extend `bar` a bit by adding one more variable, `y`:
+
+```rust,ignore
+fn bar<'a, T>(t: &'a T) {
+ let x: for<'b> fn(&'b u32) = ...;
+ let y: for<'c> fn(&'c u32) = ...;
+}
+```
+
+When we enter *this* type, we will again create a new universe, which
+we'll call `U2`. Its parent will be the root universe, and U1 will be
+its sibling:
+
+```text
+U0 (root universe)
+│
+├─ U1 (child universe)
+│
+└─ U2 (child universe)
+```
+
+This implies that, while in U2, we can name things from U0 or U2, but
+not U1.
+
+**Giving existential variables a universe.** Now that we have this
+notion of universes, we can use it to extend our type-checker and
+things to prevent illegal names from leaking out. The idea is that we
+give each inference (existential) variable – whether it be a type or
+a lifetime – a universe. That variable's value can then only
+reference names visible from that universe. So for example if a
+lifetime variable is created in U0, then it cannot be assigned a value
+of `!1` or `!2`, because those names are not visible from the universe
+U0.
+
+**Representing universes with just a counter.** You might be surprised
+to see that the compiler doesn't keep track of a full tree of
+universes. Instead, it just keeps a counter – and, to determine if
+one universe can see another one, it just checks if the index is
+greater. For example, U2 can see U0 because 2 >= 0. But U0 cannot see
+U2, because 0 >= 2 is false.
+
+How can we get away with this? Doesn't this mean that we would allow
+U2 to also see U1? The answer is that, yes, we would, **if that
+question ever arose**. But because of the structure of our type
+checker etc, there is no way for that to happen. In order for
+something happening in the universe U1 to "communicate" with something
+happening in U2, they would have to have a shared inference variable X
+in common. And because everything in U1 is scoped to just U1 and its
+children, that inference variable X would have to be in U0. And since
+X is in U0, it cannot name anything from U1 (or U2). This is perhaps easiest
+to see by using a kind of generic "logic" example:
+
+```text
+exists<X> {
+ forall<Y> { ... /* Y is in U1 ... */ }
+ forall<Z> { ... /* Z is in U2 ... */ }
+}
+```
+
+Here, the only way for the two foralls to interact would be through X,
+but neither Y nor Z are in scope when X is declared, so its value
+cannot reference either of them.
+
+## Universes and placeholder region elements
+
+But where does that error come from? The way it happens is like this.
+When we are constructing the region inference context, we can tell
+from the type inference context how many placeholder variables exist
+(the `InferCtxt` has an internal counter). For each of those, we
+create a corresponding universal region variable `!n` and a "region
+element" `placeholder(n)`. This corresponds to "some unknown set of other
+elements". The value of `!n` is `{placeholder(n)}`.
+
+At the same time, we also give each existential variable a
+**universe** (also taken from the `InferCtxt`). This universe
+determines which placeholder elements may appear in its value: For
+example, a variable in universe U3 may name `placeholder(1)`, `placeholder(2)`, and
+`placeholder(3)`, but not `placeholder(4)`. Note that the universe of an inference
+variable controls what region elements **can** appear in its value; it
+does not say region elements **will** appear.
+
+## Placeholders and outlives constraints
+
+In the region inference engine, outlives constraints have the form:
+
+```text
+V1: V2 @ P
+```
+
+where `V1` and `V2` are region indices, and hence map to some region
+variable (which may be universally or existentially quantified). The
+`P` here is a "point" in the control-flow graph; it's not important
+for this section. This variable will have a universe, so let's call
+those universes `U(V1)` and `U(V2)` respectively. (Actually, the only
+one we are going to care about is `U(V1)`.)
+
+When we encounter this constraint, the ordinary procedure is to start
+a DFS from `P`. We keep walking so long as the nodes we are walking
+are present in `value(V2)` and we add those nodes to `value(V1)`. If
+we reach a return point, we add in any `end(X)` elements. That part
+remains unchanged.
+
+But then *after that* we want to iterate over the placeholder `placeholder(x)`
+elements in V2 (each of those must be visible to `U(V2)`, but we
+should be able to just assume that is true, we don't have to check
+it). We have to ensure that `value(V1)` outlives each of those
+placeholder elements.
+
+Now there are two ways that could happen. First, if `U(V1)` can see
+the universe `x` (i.e., `x <= U(V1)`), then we can just add `placeholder(x)`
+to `value(V1)` and be done. But if not, then we have to approximate:
+we may not know what set of elements `placeholder(x)` represents, but we
+should be able to compute some sort of **upper bound** B for it –
+some region B that outlives `placeholder(x)`. For now, we'll just use
+`'static` for that (since it outlives everything) – in the future, we
+can sometimes be smarter here (and in fact we have code for doing this
+already in other contexts). Moreover, since `'static` is in the root
+universe U0, we know that all variables can see it – so basically if
+we find that `value(V2)` contains `placeholder(x)` for some universe `x`
+that `V1` can't see, then we force `V1` to `'static`.
+
+## Extending the "universal regions" check
+
+After all constraints have been propagated, the NLL region inference
+has one final check, where it goes over the values that wound up being
+computed for each universal region and checks that they did not get
+'too large'. In our case, we will go through each placeholder region
+and check that it contains *only* the `placeholder(u)` element it is known to
+outlive. (Later, we might be able to know that there are relationships
+between two placeholder regions and take those into account, as we do
+for universal regions from the fn signature.)
+
+Put another way, the "universal regions" check can be considered to be
+checking constraints like:
+
+```text
+{placeholder(1)}: V1
+```
+
+where `{placeholder(1)}` is like a constant set, and V1 is the variable we
+made to represent the `!1` region.
+
+## Back to our example
+
+OK, so far so good. Now let's walk through what would happen with our
+first example:
+
+```text
+fn(&'static u32) <: fn(&'!1 u32) @ P // this point P is not imp't here
+```
+
+The region inference engine will create a region element domain like this:
+
+```text
+{ CFG; end('static); placeholder(1) }
+ --- ------------ ------- from the universe `!1`
+ | 'static is always in scope
+ all points in the CFG; not especially relevant here
+```
+
+It will always create two universal variables, one representing
+`'static` and one representing `'!1`. Let's call them Vs and V1. They
+will have initial values like so:
+
+```text
+Vs = { CFG; end('static) } // it is in U0, so can't name anything else
+V1 = { placeholder(1) }
+```
+
+From the subtyping constraint above, we would have an outlives constraint like
+
+```text
+'!1: 'static @ P
+```
+
+To process this, we would grow the value of V1 to include all of Vs:
+
+```text
+Vs = { CFG; end('static) }
+V1 = { CFG; end('static), placeholder(1) }
+```
+
+At that point, constraint propagation is complete, because all the
+outlives relationships are satisfied. Then we would go to the "check
+universal regions" portion of the code, which would test that no
+universal region grew too large.
+
+In this case, `V1` *did* grow too large – it is not known to outlive
+`end('static)`, nor any of the CFG – so we would report an error.
+
+## Another example
+
+What about this subtyping relationship?
+
+```text
+for<'a> fn(&'a u32, &'a u32)
+ <:
+for<'b, 'c> fn(&'b u32, &'c u32)
+```
+
+Here we would replace the bound region in the supertype with a placeholder, as before, yielding:
+
+```text
+for<'a> fn(&'a u32, &'a u32)
+ <:
+fn(&'!1 u32, &'!2 u32)
+```
+
+then we instantiate the variable on the left-hand side with an
+existential in universe U2, yielding the following (`?n` is a notation
+for an existential variable):
+
+```text
+fn(&'?3 u32, &'?3 u32)
+ <:
+fn(&'!1 u32, &'!2 u32)
+```
+
+Then we break this down further:
+
+```text
+&'!1 u32 <: &'?3 u32
+&'!2 u32 <: &'?3 u32
+```
+
+and even further, yield up our region constraints:
+
+```text
+'!1: '?3
+'!2: '?3
+```
+
+Note that, in this case, both `'!1` and `'!2` have to outlive the
+variable `'?3`, but the variable `'?3` is not forced to outlive
+anything else. Therefore, it simply starts and ends as the empty set
+of elements, and hence the type-check succeeds here.
+
+(This should surprise you a little. It surprised me when I first realized it.
+We are saying that if we are a fn that **needs both of its arguments to have
+the same region**, we can accept being called with **arguments with two
+distinct regions**. That seems intuitively unsound. But in fact, it's fine, as
+I tried to explain in [this issue][ohdeargoditsallbroken] on the Rust issue
+tracker long ago. The reason is that even if we get called with arguments of
+two distinct lifetimes, those two lifetimes have some intersection (the call
+itself), and that intersection can be our value of `'a` that we use as the
+common lifetime of our arguments. -nmatsakis)
+
+[ohdeargoditsallbroken]: https://github.com/rust-lang/rust/issues/32330#issuecomment-202536977
+
+## Final example
+
+Let's look at one last example. We'll extend the previous one to have
+a return type:
+
+```text
+for<'a> fn(&'a u32, &'a u32) -> &'a u32
+ <:
+for<'b, 'c> fn(&'b u32, &'c u32) -> &'b u32
+```
+
+Despite seeming very similar to the previous example, this case is going to get
+an error. That's good: the problem is that we've gone from a fn that promises
+to return one of its two arguments, to a fn that is promising to return the
+first one. That is unsound. Let's see how it plays out.
+
+First, we replace the bound region in the supertype with a placeholder:
+
+```text
+for<'a> fn(&'a u32, &'a u32) -> &'a u32
+ <:
+fn(&'!1 u32, &'!2 u32) -> &'!1 u32
+```
+
+Then we instantiate the subtype with existentials (in U2):
+
+```text
+fn(&'?3 u32, &'?3 u32) -> &'?3 u32
+ <:
+fn(&'!1 u32, &'!2 u32) -> &'!1 u32
+```
+
+And now we create the subtyping relationships:
+
+```text
+&'!1 u32 <: &'?3 u32 // arg 1
+&'!2 u32 <: &'?3 u32 // arg 2
+&'?3 u32 <: &'!1 u32 // return type
+```
+
+And finally the outlives relationships. Here, let V1, V2, and V3 be the
+variables we assign to `!1`, `!2`, and `?3` respectively:
+
+```text
+V1: V3
+V2: V3
+V3: V1
+```
+
+Those variables will have these initial values:
+
+```text
+V1 in U1 = {placeholder(1)}
+V2 in U2 = {placeholder(2)}
+V3 in U2 = {}
+```
+
+Now because of the `V3: V1` constraint, we have to add `placeholder(1)` into `V3` (and
+indeed it is visible from `V3`), so we get:
+
+```text
+V3 in U2 = {placeholder(1)}
+```
+
+then we have this constraint `V2: V3`, so we wind up having to enlarge
+`V2` to include `placeholder(1)` (which it can also see):
+
+```text
+V2 in U2 = {placeholder(1), placeholder(2)}
+```
+
+Now constraint propagation is done, but when we check the outlives
+relationships, we find that `V2` includes this new element `placeholder(1)`,
+so we report an error.
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/two_phase_borrows.md b/src/doc/rustc-dev-guide/src/borrow_check/two_phase_borrows.md
new file mode 100644
index 000000000..bcd487821
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/two_phase_borrows.md
@@ -0,0 +1,100 @@
+# Two-phase borrows
+
+Two-phase borrows are a more permissive version of mutable borrows that allow
+nested method calls such as `vec.push(vec.len())`. Such borrows first act as
+shared borrows in a "reservation" phase and can later be "activated" into a
+full mutable borrow.
+
+Only certain implicit mutable borrows can be two-phase, any `&mut` or `ref mut`
+in the source code is never a two-phase borrow. The cases where we generate a
+two-phase borrow are:
+
+1. The autoref borrow when calling a method with a mutable reference receiver.
+2. A mutable reborrow in function arguments.
+3. The implicit mutable borrow in an overloaded compound assignment operator.
+
+To give some examples:
+
+```rust2018
+// In the source code
+
+// Case 1:
+let mut v = Vec::new();
+v.push(v.len());
+let r = &mut Vec::new();
+r.push(r.len());
+
+// Case 2:
+std::mem::replace(r, vec![1, r.len()]);
+
+// Case 3:
+let mut x = std::num::Wrapping(2);
+x += x;
+```
+
+Expanding these enough to show the two-phase borrows:
+
+```rust,ignore
+// Case 1:
+let mut v = Vec::new();
+let temp1 = &two_phase v;
+let temp2 = v.len();
+Vec::push(temp1, temp2);
+let r = &mut Vec::new();
+let temp3 = &two_phase *r;
+let temp4 = r.len();
+Vec::push(temp3, temp4);
+
+// Case 2:
+let temp5 = &two_phase *r;
+let temp6 = vec![1, r.len()];
+std::mem::replace(temp5, temp6);
+
+// Case 3:
+let mut x = std::num::Wrapping(2);
+let temp7 = &two_phase x;
+let temp8 = x;
+std::ops::AddAssign::add_assign(temp7, temp8);
+```
+
+Whether a borrow can be two-phase is tracked by a flag on the [`AutoBorrow`]
+after type checking, which is then [converted] to a [`BorrowKind`] during MIR
+construction.
+
+Each two-phase borrow is assigned to a temporary that is only used once. As
+such we can define:
+
+* The point where the temporary is assigned to is called the *reservation*
+ point of the two-phase borrow.
+* The point where the temporary is used, which is effectively always a
+ function call, is called the *activation* point.
+
+The activation points are found using the [`GatherBorrows`] visitor. The
+[`BorrowData`] then holds both the reservation and activation points for the
+borrow.
+
+[`AutoBorrow`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/adjustment/enum.AutoBorrow.html
+[converted]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/cx/expr/trait.ToBorrowKind.html#method.to_borrow_kind
+[`BorrowKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.BorrowKind.html
+[`GatherBorrows`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/visit/trait.Visitor.html#method.visit_local
+[`BorrowData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/borrow_set/struct.BorrowData.html
+
+## Checking two-phase borrows
+
+Two-phase borrows are treated as if they were mutable borrows with the
+following exceptions:
+
+1. At every location in the MIR we [check] if any two-phase borrows are
+ activated at this location. If a live two phase borrow is activated at a
+ location, then we check that there are no borrows that conflict with the
+ two-phase borrow.
+2. At the reservation point we error if there are conflicting live *mutable*
+ borrows. And lint if there are any conflicting shared borrows.
+3. Between the reservation and the activation point, the two-phase borrow acts
+ as a shared borrow. We determine (in [`is_active`]) if we're at such a point
+ by using the [`Dominators`] for the MIR graph.
+4. After the activation point, the two-phase borrow acts as a mutable borrow.
+
+[check]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/struct.MirBorrowckCtxt.html#method.check_activations
+[`Dominators`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/graph/dominators/struct.Dominators.html
+[`is_active`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/path_utils/fn.is_active.html
diff --git a/src/doc/rustc-dev-guide/src/borrow_check/type_check.md b/src/doc/rustc-dev-guide/src/borrow_check/type_check.md
new file mode 100644
index 000000000..69456d870
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/borrow_check/type_check.md
@@ -0,0 +1,64 @@
+# The MIR type-check
+
+A key component of the borrow check is the
+[MIR type-check](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/type_check/index.html).
+This check walks the MIR and does a complete "type check" -- the same
+kind you might find in any other language. In the process of doing
+this type-check, we also uncover the region constraints that apply to
+the program.
+
+TODO -- elaborate further? Maybe? :)
+
+## User types
+
+At the start of MIR type-check, we replace all regions in the body with new unconstrained regions.
+However, this would cause us to accept the following program:
+```rust
+fn foo<'a>(x: &'a u32) {
+ let y: &'static u32 = x;
+}
+```
+By erasing the lifetimes in the type of `y` we no longer know that it is supposed to be `'static`,
+ignoring the intentions of the user.
+
+To deal with this we remember all places where the user explicitly mentioned a type during
+HIR type-check as [`CanonicalUserTypeAnnotations`][annot].
+
+There are two different annotations we care about:
+- explicit type ascriptions, e.g. `let y: &'static u32` results in `UserType::Ty(&'static u32)`.
+- explicit generic arguments, e.g. `x.foo<&'a u32, Vec<String>>`
+results in `UserType::TypeOf(foo_def_id, [&'a u32, Vec<String>])`.
+
+As we do not want the region inference from the HIR type-check to influence MIR typeck,
+we store the user type right after lowering it from the HIR.
+This means that it may still contain inference variables,
+which is why we are using **canonical** user type annotations.
+We replace all inference variables with existential bound variables instead.
+Something like `let x: Vec<_>` would therefore result in `exists<T> UserType::Ty(Vec<T>)`.
+
+A pattern like `let Foo(x): Foo<&'a u32>` has a user type `Foo<&'a u32>` but
+the actual type of `x` should only be `&'a u32`. For this, we use a [`UserTypeProjection`][proj].
+
+In the MIR, we deal with user types in two slightly different ways.
+
+Given a MIR local corresponding to a variable in a pattern which has an explicit type annotation,
+we require the type of that local to be equal to the type of the [`UserTypeProjection`][proj].
+This is directly stored in the [`LocalDecl`][decl].
+
+We also constrain the type of scrutinee expressions, e.g. the type of `x` in `let _: &'a u32 = x;`.
+Here `T_x` only has to be a subtype of the user type, so we instead use
+[`StatementKind::AscribeUserType`][stmt] for that.
+
+Note that we do not directly use the user type as the MIR typechecker
+doesn't really deal with type and const inference variables. We instead store the final
+[`inferred_type`][inf] from the HIR type-checker. During MIR typeck, we then replace its regions
+with new nll inference vars and relate it with the actual `UserType` to get the correct region
+constraints again.
+
+After the MIR type-check, all user type annotations get discarded, as they aren't needed anymore.
+
+[annot]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.CanonicalUserTypeAnnotation.html
+[proj]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.UserTypeProjection.html
+[decl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.LocalDecl.html
+[stmt]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.StatementKind.html#variant.AscribeUserType
+[inf]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.CanonicalUserTypeAnnotation.html#structfield.inferred_ty \ No newline at end of file
diff --git a/src/doc/rustc-dev-guide/src/bug-fix-procedure.md b/src/doc/rustc-dev-guide/src/bug-fix-procedure.md
new file mode 100644
index 000000000..8702f8aa9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/bug-fix-procedure.md
@@ -0,0 +1,334 @@
+# Rustc Bug Fix Procedure
+
+<!-- toc -->
+
+This page defines the best practices procedure for making bug fixes or soundness
+corrections in the compiler that can cause existing code to stop compiling. This
+text is based on
+[RFC 1589](https://github.com/rust-lang/rfcs/blob/master/text/1589-rustc-bug-fix-procedure.md).
+
+# Motivation
+
+[motivation]: #motivation
+
+From time to time, we encounter the need to make a bug fix, soundness
+correction, or other change in the compiler which will cause existing code to
+stop compiling. When this happens, it is important that we handle the change in
+a way that gives users of Rust a smooth transition. What we want to avoid is
+that existing programs suddenly stop compiling with opaque error messages: we
+would prefer to have a gradual period of warnings, with clear guidance as to
+what the problem is, how to fix it, and why the change was made. This RFC
+describes the procedure that we have been developing for handling breaking
+changes that aims to achieve that kind of smooth transition.
+
+One of the key points of this policy is that (a) warnings should be issued
+initially rather than hard errors if at all possible and (b) every change that
+causes existing code to stop compiling will have an associated tracking issue.
+This issue provides a point to collect feedback on the results of that change.
+Sometimes changes have unexpectedly large consequences or there may be a way to
+avoid the change that was not considered. In those cases, we may decide to
+change course and roll back the change, or find another solution (if warnings
+are being used, this is particularly easy to do).
+
+### What qualifies as a bug fix?
+
+Note that this RFC does not try to define when a breaking change is permitted.
+That is already covered under [RFC 1122][]. This document assumes that the
+change being made is in accordance with those policies. Here is a summary of the
+conditions from RFC 1122:
+
+- **Soundness changes:** Fixes to holes uncovered in the type system.
+- **Compiler bugs:** Places where the compiler is not implementing the specified
+ semantics found in an RFC or lang-team decision.
+- **Underspecified language semantics:** Clarifications to grey areas where the
+ compiler behaves inconsistently and no formal behavior had been previously
+ decided.
+
+Please see [the RFC][rfc 1122] for full details!
+
+# Detailed design
+
+[design]: #detailed-design
+
+The procedure for making a breaking change is as follows (each of these steps is
+described in more detail below):
+
+0. Do a **crater run** to assess the impact of the change.
+1. Make a **special tracking issue** dedicated to the change.
+1. Do not report an error right away. Instead, **issue forwards-compatibility
+ lint warnings**.
+ - Sometimes this is not straightforward. See the text below for suggestions
+ on different techniques we have employed in the past.
+ - For cases where warnings are infeasible:
+ - Report errors, but make every effort to give a targeted error message
+ that directs users to the tracking issue
+ - Submit PRs to all known affected crates that fix the issue
+ - or, at minimum, alert the owners of those crates to the problem and
+ direct them to the tracking issue
+1. Once the change has been in the wild for at least one cycle, we can
+ **stabilize the change**, converting those warnings into errors.
+
+Finally, for changes to `rustc_ast` that will affect plugins, the general policy
+is to batch these changes. That is discussed below in more detail.
+
+### Tracking issue
+
+Every breaking change should be accompanied by a **dedicated tracking issue**
+for that change. The main text of this issue should describe the change being
+made, with a focus on what users must do to fix their code. The issue should be
+approachable and practical; it may make sense to direct users to an RFC or some
+other issue for the full details. The issue also serves as a place where users
+can comment with questions or other concerns.
+
+A template for these breaking-change tracking issues can be found below. An
+example of how such an issue should look can be [found
+here][breaking-change-issue].
+
+The issue should be tagged with (at least) `B-unstable` and `T-compiler`.
+
+### Tracking issue template
+
+This is a template to use for tracking issues:
+
+```
+This is the **summary issue** for the `YOUR_LINT_NAME_HERE`
+future-compatibility warning and other related errors. The goal of
+this page is describe why this change was made and how you can fix
+code that is affected by it. It also provides a place to ask questions
+or register a complaint if you feel the change should not be made. For
+more information on the policy around future-compatibility warnings,
+see our [breaking change policy guidelines][guidelines].
+
+[guidelines]: LINK_TO_THIS_RFC
+
+#### What is the warning for?
+
+*Describe the conditions that trigger the warning and how they can be
+fixed. Also explain why the change was made.**
+
+#### When will this warning become a hard error?
+
+At the beginning of each 6-week release cycle, the Rust compiler team
+will review the set of outstanding future compatibility warnings and
+nominate some of them for **Final Comment Period**. Toward the end of
+the cycle, we will review any comments and make a final determination
+whether to convert the warning into a hard error or remove it
+entirely.
+```
+
+### Issuing future compatibility warnings
+
+The best way to handle a breaking change is to begin by issuing
+future-compatibility warnings. These are a special category of lint warning.
+Adding a new future-compatibility warning can be done as follows.
+
+```rust
+// 1. Define the lint in `compiler/rustc_middle/src/lint/builtin.rs`:
+declare_lint! {
+ pub YOUR_ERROR_HERE,
+ Warn,
+ "illegal use of foo bar baz"
+}
+
+// 2. Add to the list of HardwiredLints in the same file:
+impl LintPass for HardwiredLints {
+ fn get_lints(&self) -> LintArray {
+ lint_array!(
+ ..,
+ YOUR_ERROR_HERE
+ )
+ }
+}
+
+// 3. Register the lint in `compiler/rustc_lint/src/lib.rs`:
+store.register_future_incompatible(sess, vec![
+ ...,
+ FutureIncompatibleInfo {
+ id: LintId::of(YOUR_ERROR_HERE),
+ reference: "issue #1234", // your tracking issue here!
+ },
+]);
+
+// 4. Report the lint:
+tcx.lint_node(
+ lint::builtin::YOUR_ERROR_HERE,
+ path_id,
+ binding.span,
+ format!("some helper message here"));
+```
+
+#### Helpful techniques
+
+It can often be challenging to filter out new warnings from older, pre-existing
+errors. One technique that has been used in the past is to run the older code
+unchanged and collect the errors it would have reported. You can then issue
+warnings for any errors you would give which do not appear in that original set.
+Another option is to abort compilation after the original code completes if
+errors are reported: then you know that your new code will only execute when
+there were no errors before.
+
+#### Crater and crates.io
+
+We should always do a crater run to assess impact. It is polite and considerate
+to at least notify the authors of affected crates the breaking change. If we can
+submit PRs to fix the problem, so much the better.
+
+#### Is it ever acceptable to go directly to issuing errors?
+
+Changes that are believed to have negligible impact can go directly to issuing
+an error. One rule of thumb would be to check against `crates.io`: if fewer than
+10 **total** affected projects are found (**not** root errors), we can move
+straight to an error. In such cases, we should still make the "breaking change"
+page as before, and we should ensure that the error directs users to this page.
+In other words, everything should be the same except that users are getting an
+error, and not a warning. Moreover, we should submit PRs to the affected
+projects (ideally before the PR implementing the change lands in rustc).
+
+If the impact is not believed to be negligible (e.g., more than 10 crates are
+affected), then warnings are required (unless the compiler team agrees to grant
+a special exemption in some particular case). If implementing warnings is not
+feasible, then we should make an aggressive strategy of migrating crates before
+we land the change so as to lower the number of affected crates. Here are some
+techniques for approaching this scenario:
+
+1. Issue warnings for subparts of the problem, and reserve the new errors for
+ the smallest set of cases you can.
+2. Try to give a very precise error message that suggests how to fix the problem
+ and directs users to the tracking issue.
+3. It may also make sense to layer the fix:
+ - First, add warnings where possible and let those land before proceeding to
+ issue errors.
+ - Work with authors of affected crates to ensure that corrected versions are
+ available _before_ the fix lands, so that downstream users can use them.
+
+### Stabilization
+
+After a change is made, we will **stabilize** the change using the same process
+that we use for unstable features:
+
+- After a new release is made, we will go through the outstanding tracking
+ issues corresponding to breaking changes and nominate some of them for **final
+ comment period** (FCP).
+- The FCP for such issues lasts for one cycle. In the final week or two of the
+ cycle, we will review comments and make a final determination:
+
+ - Convert to error: the change should be made into a hard error.
+ - Revert: we should remove the warning and continue to allow the older code to
+ compile.
+ - Defer: can't decide yet, wait longer, or try other strategies.
+
+Ideally, breaking changes should have landed on the **stable branch** of the
+compiler before they are finalized.
+
+<a name="guide">
+
+### Removing a lint
+
+Once we have decided to make a "future warning" into a hard error, we need a PR
+that removes the custom lint. As an example, here are the steps required to
+remove the `overlapping_inherent_impls` compatibility lint. First, convert the
+name of the lint to uppercase (`OVERLAPPING_INHERENT_IMPLS`) ripgrep through the
+source for that string. We will basically by converting each place where this
+lint name is mentioned (in the compiler, we use the upper-case name, and a macro
+automatically generates the lower-case string; so searching for
+`overlapping_inherent_impls` would not find much).
+
+> NOTE: these exact files don't exist anymore, but the procedure is still the same.
+
+#### Remove the lint.
+
+The first reference you will likely find is the lint definition [in
+`rustc_session/src/lint/builtin.rs` that resembles this][defsource]:
+
+[defsource]: https://github.com/rust-lang/rust/blob/085d71c3efe453863739c1fb68fd9bd1beff214f/src/librustc/lint/builtin.rs#L171-L175
+
+```rust
+declare_lint! {
+ pub OVERLAPPING_INHERENT_IMPLS,
+ Deny, // this may also say Warning
+ "two overlapping inherent impls define an item with the same name were erroneously allowed"
+}
+```
+
+This `declare_lint!` macro creates the relevant data structures. Remove it. You
+will also find that there is a mention of `OVERLAPPING_INHERENT_IMPLS` later in
+the file as [part of a `lint_array!`][lintarraysource]; remove it too.
+
+[lintarraysource]: https://github.com/rust-lang/rust/blob/085d71c3efe453863739c1fb68fd9bd1beff214f/src/librustc/lint/builtin.rs#L252-L290
+
+Next, you see [a reference to `OVERLAPPING_INHERENT_IMPLS` in
+`rustc_lint/src/lib.rs`][futuresource]. This is defining the lint as a "future
+compatibility lint":
+
+```rust
+FutureIncompatibleInfo {
+ id: LintId::of(OVERLAPPING_INHERENT_IMPLS),
+ reference: "issue #36889 <https://github.com/rust-lang/rust/issues/36889>",
+},
+```
+
+Remove this too.
+
+#### Add the lint to the list of removed lists.
+
+In `compiler/rustc_lint/src/lib.rs` there is a list of "renamed and removed lints".
+You can add this lint to the list:
+
+```rust
+store.register_removed("overlapping_inherent_impls", "converted into hard error, see #36889");
+```
+
+where `#36889` is the tracking issue for your lint.
+
+#### Update the places that issue the lint
+
+Finally, the last class of references you will see are the places that actually
+**trigger** the lint itself (i.e., what causes the warnings to appear). These
+you do not want to delete. Instead, you want to convert them into errors. In
+this case, the [`add_lint` call][addlintsource] looks like this:
+
+```rust
+self.tcx.sess.add_lint(lint::builtin::OVERLAPPING_INHERENT_IMPLS,
+ node_id,
+ self.tcx.span_of_impl(item1).unwrap(),
+ msg);
+```
+
+We want to convert this into an error. In some cases, there may be an
+existing error for this scenario. In others, we will need to allocate a
+fresh diagnostic code. [Instructions for allocating a fresh diagnostic
+code can be found here.](./diagnostics/diagnostic-codes.md) You may want
+to mention in the extended description that the compiler behavior
+changed on this point, and include a reference to the tracking issue for
+the change.
+
+Let's say that we've adopted `E0592` as our code. Then we can change the
+`add_lint()` call above to something like:
+
+```rust
+struct_span_err!(self.tcx.sess, self.tcx.span_of_impl(item1).unwrap(), msg)
+ .emit();
+```
+
+#### Update tests
+
+Finally, run the test suite. These should be some tests that used to reference
+the `overlapping_inherent_impls` lint, those will need to be updated. In
+general, if the test used to have `#[deny(overlapping_inherent_impls)]`, that
+can just be removed.
+
+```
+./x.py test
+```
+
+#### All done!
+
+Open a PR. =)
+
+[addlintsource]: https://github.com/rust-lang/rust/blob/085d71c3efe453863739c1fb68fd9bd1beff214f/src/librustc_typeck/coherence/inherent.rs#L300-L303
+[futuresource]: https://github.com/rust-lang/rust/blob/085d71c3efe453863739c1fb68fd9bd1beff214f/src/librustc_lint/lib.rs#L202-L205
+
+<!-- -Links--------------------------------------------------------------------- -->
+
+[rfc 1122]: https://github.com/rust-lang/rfcs/blob/master/text/1122-language-semver.md
+[breaking-change-issue]: https://gist.github.com/nikomatsakis/631ec8b4af9a18b5d062d9d9b7d3d967
diff --git a/src/doc/rustc-dev-guide/src/building/bootstrapping.md b/src/doc/rustc-dev-guide/src/building/bootstrapping.md
new file mode 100644
index 000000000..fd54de20c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/bootstrapping.md
@@ -0,0 +1,415 @@
+# Bootstrapping the Compiler
+
+<!-- toc -->
+
+
+[*Bootstrapping*][boot] is the process of using a compiler to compile itself.
+More accurately, it means using an older compiler to compile a newer version
+of the same compiler.
+
+This raises a chicken-and-egg paradox: where did the first compiler come from?
+It must have been written in a different language. In Rust's case it was
+[written in OCaml][ocaml-compiler]. However it was abandoned long ago and the
+only way to build a modern version of rustc is a slightly less modern
+version.
+
+This is exactly how `x.py` works: it downloads the current beta release of
+rustc, then uses it to compile the new compiler.
+
+## Stages of bootstrapping
+
+Compiling `rustc` is done in stages.
+
+### Stage 0
+
+The stage0 compiler is usually the current _beta_ `rustc` compiler
+and its associated dynamic libraries,
+which `x.py` will download for you.
+(You can also configure `x.py` to use something else.)
+
+The stage0 compiler is then used only to compile `rustbuild`, `std`, and `rustc`.
+When compiling `rustc`, the stage0 compiler uses the freshly compiled `std`.
+There are two concepts at play here:
+a compiler (with its set of dependencies)
+and its 'target' or 'object' libraries (`std` and `rustc`).
+Both are staged, but in a staggered manner.
+
+### Stage 1
+
+The rustc source code is then compiled with the stage0 compiler to produce the stage1 compiler.
+
+### Stage 2
+
+We then rebuild our stage1 compiler with itself to produce the stage2 compiler.
+
+In theory, the stage1 compiler is functionally identical to the stage2 compiler,
+but in practice there are subtle differences.
+In particular, the stage1 compiler itself was built by stage0
+and hence not by the source in your working directory.
+This means that the symbol names used in the compiler source
+may not match the symbol names that would have been made by the stage1 compiler,
+which can cause problems for dynamic libraries and tests.
+
+The `stage2` compiler is the one distributed with `rustup` and all other install methods.
+However, it takes a very long time to build
+because one must first build the new compiler with an older compiler
+and then use that to build the new compiler with itself.
+For development, you usually only want the `stage1` compiler,
+which you can build with `./x.py build library`.
+See [Building the Compiler](./how-to-build-and-run.html#building-the-compiler).
+
+### Stage 3
+
+Stage 3 is optional. To sanity check our new compiler, we
+can build the libraries with the stage2 compiler. The result ought
+to be identical to before, unless something has broken.
+
+### Building the stages
+
+`x.py` tries to be helpful and pick the stage you most likely meant for each subcommand.
+These defaults are as follows:
+
+- `check`: `--stage 0`
+- `doc`: `--stage 0`
+- `build`: `--stage 1`
+- `test`: `--stage 1`
+- `dist`: `--stage 2`
+- `install`: `--stage 2`
+- `bench`: `--stage 2`
+
+You can always override the stage by passing `--stage N` explicitly.
+
+For more information about stages, [see below](#understanding-stages-of-bootstrap).
+
+## Complications of bootstrapping
+
+Since the build system uses the current beta compiler to build the stage-1
+bootstrapping compiler, the compiler source code can't use some features
+until they reach beta (because otherwise the beta compiler doesn't support
+them). On the other hand, for [compiler intrinsics][intrinsics] and internal
+features, the features _have_ to be used. Additionally, the compiler makes
+heavy use of nightly features (`#![feature(...)]`). How can we resolve this
+problem?
+
+There are two methods used:
+1. The build system sets `--cfg bootstrap` when building with `stage0`, so we
+can use `cfg(not(bootstrap))` to only use features when built with `stage1`.
+This is useful for e.g. features that were just stabilized, which require
+`#![feature(...)]` when built with `stage0`, but not for `stage1`.
+2. The build system sets `RUSTC_BOOTSTRAP=1`. This special variable means to
+_break the stability guarantees_ of rust: Allow using `#![feature(...)]` with
+a compiler that's not nightly. This should never be used except when
+bootstrapping the compiler.
+
+[boot]: https://en.wikipedia.org/wiki/Bootstrapping_(compilers)
+[intrinsics]: ../appendix/glossary.md#intrinsic
+[ocaml-compiler]: https://github.com/rust-lang/rust/tree/ef75860a0a72f79f97216f8aaa5b388d98da6480/src/boot
+
+## Contributing to bootstrap
+
+When you use the bootstrap system, you'll call it through `x.py`.
+However, most of the code lives in `src/bootstrap`.
+`bootstrap` has a difficult problem: it is written in Rust, but yet it is run
+before the Rust compiler is built! To work around this, there are two
+components of bootstrap: the main one written in rust, and `bootstrap.py`.
+`bootstrap.py` is what gets run by `x.py`. It takes care of downloading the
+`stage0` compiler, which will then build the bootstrap binary written in
+Rust.
+
+Because there are two separate codebases behind `x.py`, they need to
+be kept in sync. In particular, both `bootstrap.py` and the bootstrap binary
+parse `config.toml` and read the same command line arguments. `bootstrap.py`
+keeps these in sync by setting various environment variables, and the
+programs sometimes have to add arguments that are explicitly ignored, to be
+read by the other.
+
+### Adding a setting to config.toml
+
+This section is a work in progress. In the meantime, you can see an example
+contribution [here][bootstrap-build].
+
+[bootstrap-build]: https://github.com/rust-lang/rust/pull/71994
+
+## Understanding stages of bootstrap
+
+### Overview
+
+This is a detailed look into the separate bootstrap stages.
+
+The convention `x.py` uses is that:
+
+- A `--stage N` flag means to run the stage N compiler (`stageN/rustc`).
+- A "stage N artifact" is a build artifact that is _produced_ by the stage N compiler.
+- The stage N+1 compiler is assembled from stage N *artifacts*. This
+ process is called _uplifting_.
+
+#### Build artifacts
+
+Anything you can build with `x.py` is a _build artifact_.
+Build artifacts include, but are not limited to:
+
+- binaries, like `stage0-rustc/rustc-main`
+- shared objects, like `stage0-sysroot/rustlib/libstd-6fae108520cf72fe.so`
+- [rlib] files, like `stage0-sysroot/rustlib/libstd-6fae108520cf72fe.rlib`
+- HTML files generated by rustdoc, like `doc/std`
+
+[rlib]: ../serialization.md
+
+#### Examples
+
+- `./x.py build --stage 0` means to build with the beta `rustc`.
+- `./x.py doc --stage 0` means to document using the beta `rustdoc`.
+- `./x.py test --stage 0 library/std` means to run tests on the standard library
+ without building `rustc` from source ('build with stage 0, then test the
+ artifacts'). If you're working on the standard library, this is normally the
+ test command you want.
+- `./x.py test src/test/ui` means to build the stage 1 compiler and run
+ `compiletest` on it. If you're working on the compiler, this is normally the
+ test command you want.
+
+#### Examples of what *not* to do
+
+- `./x.py test --stage 0 src/test/ui` is not useful: it runs tests on the
+ _beta_ compiler and doesn't build `rustc` from source. Use `test src/test/ui`
+ instead, which builds stage 1 from source.
+- `./x.py test --stage 0 compiler/rustc` builds the compiler but runs no tests:
+ it's running `cargo test -p rustc`, but cargo doesn't understand Rust's
+ tests. You shouldn't need to use this, use `test` instead (without arguments).
+- `./x.py build --stage 0 compiler/rustc` builds the compiler, but does not build
+ libstd or even libcore. Most of the time, you'll want `./x.py build
+ library` instead, which allows compiling programs without needing to define
+ lang items.
+
+### Building vs. running
+
+Note that `build --stage N compiler/rustc` **does not** build the stage N compiler:
+instead it builds the stage N+1 compiler _using_ the stage N compiler.
+
+In short, _stage 0 uses the stage0 compiler to create stage0 artifacts which
+will later be uplifted to be the stage1 compiler_.
+
+In each stage, two major steps are performed:
+
+1. `std` is compiled by the stage N compiler.
+2. That `std` is linked to programs built by the stage N compiler,
+ including the stage N artifacts (stage N+1 compiler).
+
+This is somewhat intuitive if one thinks of the stage N artifacts as "just"
+another program we are building with the stage N compiler:
+`build --stage N compiler/rustc` is linking the stage N artifacts to the `std`
+built by the stage N compiler.
+
+Here is a chart of a full build using `x.py`:
+
+<img alt="A diagram of the rustc compilation phases" src="../img/rustc_stages.svg" class="center" />
+
+Keep in mind this diagram is a simplification, i.e. `rustdoc` can be built at
+different stages, the process is a bit different when passing flags such as
+`--keep-stage`, or if there are non-host targets.
+
+### Stages and `std`
+
+Note that there are two `std` libraries in play here:
+1. The library _linked_ to `stageN/rustc`, which was built by stage N-1 (stage N-1 `std`)
+2. The library _used to compile programs_ with `stageN/rustc`, which was
+ built by stage N (stage N `std`).
+
+Stage N `std` is pretty much necessary for any useful work with the stage N compiler.
+Without it, you can only compile programs with `#![no_core]` -- not terribly useful!
+
+The reason these need to be different is because they aren't necessarily ABI-compatible:
+there could be new layout optimizations, changes to MIR, or other changes
+to Rust metadata on nightly that aren't present in beta.
+
+This is also where `--keep-stage 1 library/std` comes into play. Since most
+changes to the compiler don't actually change the ABI, once you've produced a
+`std` in stage 1, you can probably just reuse it with a different compiler.
+If the ABI hasn't changed, you're good to go, no need to spend time
+recompiling that `std`.
+`--keep-stage` simply assumes the previous compile is fine and copies those
+artifacts into the appropriate place, skipping the cargo invocation.
+
+### Cross-compiling rustc
+
+*Cross-compiling* is the process of compiling code that will run on another architecture.
+For instance, you might want to build an ARM version of rustc using an x86 machine.
+Building stage2 `std` is different when you are cross-compiling.
+
+This is because `x.py` uses a trick: if `HOST` and `TARGET` are the same,
+it will reuse stage1 `std` for stage2! This is sound because stage1 `std`
+was compiled with the stage1 compiler, i.e. a compiler using the source code
+you currently have checked out. So it should be identical (and therefore ABI-compatible)
+to the `std` that `stage2/rustc` would compile.
+
+However, when cross-compiling, stage1 `std` will only run on the host.
+So the stage2 compiler has to recompile `std` for the target.
+
+(See in the table how stage2 only builds non-host `std` targets).
+
+### Why does only libstd use `cfg(bootstrap)`?
+
+The `rustc` generated by the stage0 compiler is linked to the freshly-built
+`std`, which means that for the most part only `std` needs to be cfg-gated,
+so that `rustc` can use features added to std immediately after their addition,
+without need for them to get into the downloaded beta.
+
+Note this is different from any other Rust program: stage1 `rustc`
+is built by the _beta_ compiler, but using the _master_ version of libstd!
+
+The only time `rustc` uses `cfg(bootstrap)` is when it adds internal lints
+that use diagnostic items. This happens very rarely.
+
+### What is a 'sysroot'?
+
+When you build a project with cargo, the build artifacts for dependencies
+are normally stored in `target/debug/deps`. This only contains dependencies cargo
+knows about; in particular, it doesn't have the standard library. Where do
+`std` or `proc_macro` come from? It comes from the **sysroot**, the root
+of a number of directories where the compiler loads build artifacts at runtime.
+The sysroot doesn't just store the standard library, though - it includes
+anything that needs to be loaded at runtime. That includes (but is not limited
+to):
+
+- `libstd`/`libtest`/`libproc_macro`
+- The compiler crates themselves, when using `rustc_private`. In-tree these
+ are always present; out of tree, you need to install `rustc-dev` with rustup.
+- `libLLVM.so`, the shared object file for the LLVM project. In-tree this is
+ either built from source or downloaded from CI; out-of-tree, you need to
+ install `llvm-tools-preview` with rustup.
+
+All the artifacts listed so far are *compiler* runtime dependencies. You can
+see them with `rustc --print sysroot`:
+
+```
+$ ls $(rustc --print sysroot)/lib
+libchalk_derive-0685d79833dc9b2b.so libstd-25c6acf8063a3802.so
+libLLVM-11-rust-1.50.0-nightly.so libtest-57470d2aa8f7aa83.so
+librustc_driver-4f0cc9f50e53f0ba.so libtracing_attributes-e4be92c35ab2a33b.so
+librustc_macros-5f0ec4a119c6ac86.so rustlib
+```
+
+There are also runtime dependencies for the standard library! These are in
+`lib/rustlib`, not `lib/` directly.
+
+```
+$ ls $(rustc --print sysroot)/lib/rustlib/x86_64-unknown-linux-gnu/lib | head -n 5
+libaddr2line-6c8e02b8fedc1e5f.rlib
+libadler-9ef2480568df55af.rlib
+liballoc-9c4002b5f79ba0e1.rlib
+libcfg_if-512eb53291f6de7e.rlib
+libcompiler_builtins-ef2408da76957905.rlib
+```
+
+`rustlib` includes libraries like `hashbrown` and `cfg_if`, which are not part
+of the public API of the standard library, but are used to implement it.
+`rustlib` is part of the search path for linkers, but `lib` will never be part
+of the search path.
+
+#### -Z force-unstable-if-unmarked
+
+Since `rustlib` is part of the search path, it means we have to be careful
+about which crates are included in it. In particular, all crates except for
+the standard library are built with the flag `-Z force-unstable-if-unmarked`,
+which means that you have to use `#![feature(rustc_private)]` in order to
+load it (as opposed to the standard library, which is always available).
+
+The `-Z force-unstable-if-unmarked` flag has a variety of purposes to help
+enforce that the correct crates are marked as unstable. It was introduced
+primarily to allow rustc and the standard library to link to arbitrary crates
+on crates.io which do not themselves use `staged_api`. `rustc` also relies on
+this flag to mark all of its crates as unstable with the `rustc_private`
+feature so that each crate does not need to be carefully marked with
+`unstable`.
+
+This flag is automatically applied to all of `rustc` and the standard library
+by the bootstrap scripts. This is needed because the compiler and all of its
+dependencies are shipped in the sysroot to all users.
+
+This flag has the following effects:
+
+- Marks the crate as "unstable" with the `rustc_private` feature if it is not
+ itself marked as stable or unstable.
+- Allows these crates to access other forced-unstable crates without any need
+ for attributes. Normally a crate would need a `#![feature(rustc_private)]`
+ attribute to use other unstable crates. However, that would make it
+ impossible for a crate from crates.io to access its own dependencies since
+ that crate won't have a `feature(rustc_private)` attribute, but *everything*
+ is compiled with `-Z force-unstable-if-unmarked`.
+
+Code which does not use `-Z force-unstable-if-unmarked` should include the
+`#![feature(rustc_private)]` crate attribute to access these force-unstable
+crates. This is needed for things that link `rustc`, such as `miri`, `rls`, or
+`clippy`.
+
+You can find more discussion about sysroots in:
+- The [rustdoc PR] explaining why it uses `extern crate` for dependencies loaded from sysroot
+- [Discussions about sysroot on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/deps.20in.20sysroot/)
+- [Discussions about building rustdoc out of tree](https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/How.20to.20create.20an.20executable.20accessing.20.60rustc_private.60.3F)
+
+[rustdoc PR]: https://github.com/rust-lang/rust/pull/76728
+
+### Directories and artifacts generated by `x.py`
+
+The following tables indicate the outputs of various stage actions:
+
+| Stage 0 Action | Output |
+|-----------------------------------------------------------|----------------------------------------------|
+| `beta` extracted | `build/HOST/stage0` |
+| `stage0` builds `bootstrap` | `build/bootstrap` |
+| `stage0` builds `test`/`std` | `build/HOST/stage0-std/TARGET` |
+| copy `stage0-std` (HOST only) | `build/HOST/stage0-sysroot/lib/rustlib/HOST` |
+| `stage0` builds `rustc` with `stage0-sysroot` | `build/HOST/stage0-rustc/HOST` |
+| copy `stage0-rustc` (except executable) | `build/HOST/stage0-sysroot/lib/rustlib/HOST` |
+| build `llvm` | `build/HOST/llvm` |
+| `stage0` builds `codegen` with `stage0-sysroot` | `build/HOST/stage0-codegen/HOST` |
+| `stage0` builds `rustdoc`, `clippy`, `miri`, with `stage0-sysroot` | `build/HOST/stage0-tools/HOST` |
+
+`--stage=0` stops here.
+
+| Stage 1 Action | Output |
+|-----------------------------------------------------|---------------------------------------|
+| copy (uplift) `stage0-rustc` executable to `stage1` | `build/HOST/stage1/bin` |
+| copy (uplift) `stage0-codegen` to `stage1` | `build/HOST/stage1/lib` |
+| copy (uplift) `stage0-sysroot` to `stage1` | `build/HOST/stage1/lib` |
+| `stage1` builds `test`/`std` | `build/HOST/stage1-std/TARGET` |
+| copy `stage1-std` (HOST only) | `build/HOST/stage1/lib/rustlib/HOST` |
+| `stage1` builds `rustc` | `build/HOST/stage1-rustc/HOST` |
+| copy `stage1-rustc` (except executable) | `build/HOST/stage1/lib/rustlib/HOST` |
+| `stage1` builds `codegen` | `build/HOST/stage1-codegen/HOST` |
+
+`--stage=1` stops here.
+
+| Stage 2 Action | Output |
+|--------------------------------------------------------|-----------------------------------------------------------------|
+| copy (uplift) `stage1-rustc` executable | `build/HOST/stage2/bin` |
+| copy (uplift) `stage1-sysroot` | `build/HOST/stage2/lib and build/HOST/stage2/lib/rustlib/HOST` |
+| `stage2` builds `test`/`std` (not HOST targets) | `build/HOST/stage2-std/TARGET` |
+| copy `stage2-std` (not HOST targets) | `build/HOST/stage2/lib/rustlib/TARGET` |
+| `stage2` builds `rustdoc`, `clippy`, `miri` | `build/HOST/stage2-tools/HOST` |
+| copy `rustdoc` | `build/HOST/stage2/bin` |
+
+`--stage=2` stops here.
+
+## Passing stage-specific flags to `rustc`
+
+`x.py` allows you to pass stage-specific flags to `rustc` when bootstrapping.
+The `RUSTFLAGS_BOOTSTRAP` environment variable is passed as RUSTFLAGS to the bootstrap stage
+(stage0), and `RUSTFLAGS_NOT_BOOTSTRAP` is passed when building artifacts for later stages.
+
+## Environment Variables
+
+During bootstrapping, there are a bunch of compiler-internal environment
+variables that are used. If you are trying to run an intermediate version of
+`rustc`, sometimes you may need to set some of these environment variables
+manually. Otherwise, you get an error like the following:
+
+```text
+thread 'main' panicked at 'RUSTC_STAGE was not set: NotPresent', library/core/src/result.rs:1165:5
+```
+
+If `./stageN/bin/rustc` gives an error about environment variables, that
+usually means something is quite wrong -- or you're trying to compile e.g.
+`rustc` or `std` or something that depends on environment variables. In
+the unlikely case that you actually need to invoke rustc in such a situation,
+you can find the environment variable values by adding the following flag to
+your `x.py` command: `--on-fail=print-env`.
diff --git a/src/doc/rustc-dev-guide/src/building/build-install-distribution-artifacts.md b/src/doc/rustc-dev-guide/src/building/build-install-distribution-artifacts.md
new file mode 100644
index 000000000..4ec3f958a
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/build-install-distribution-artifacts.md
@@ -0,0 +1,29 @@
+# Build distribution artifacts
+
+You might want to build and package up the compiler for distribution.
+You’ll want to run this command to do it:
+
+ ```bash
+ ./x.py dist
+ ```
+
+# Install distribution artifacts
+
+If you’ve built a distribution artifact you might want to install it and
+test that it works on your target system. You’ll want to run this command:
+
+ ```bash
+ ./x.py install
+ ```
+
+ Note: If you are testing out a modification to a compiler, you
+ might want to use it to compile some project.
+ Usually, you do not want to use `./x.py install` for testing.
+ Rather, you should create a toolchain as discussed in
+ [here][create-rustup-toolchain].
+
+ For example, if the toolchain you created is called foo, you
+ would then invoke it with `rustc +foo ...` (where ... represents
+ the rest of the arguments).
+
+[create-rustup-toolchain]: ./how-to-build-and-run.md#creating-a-rustup-toolchain \ No newline at end of file
diff --git a/src/doc/rustc-dev-guide/src/building/compiler-documenting.md b/src/doc/rustc-dev-guide/src/building/compiler-documenting.md
new file mode 100644
index 000000000..965e004c9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/compiler-documenting.md
@@ -0,0 +1,49 @@
+# Building documentation
+
+This chapter describes how to build documentation of toolchain components,
+like the standard library (std) or the compiler (rustc).
+
+- Document everything
+
+ This uses `rustdoc` from the beta toolchain,
+ so will produce (slightly) different output to stage 1 rustdoc,
+ as rustdoc is under active development:
+
+ ```bash
+ ./x.py doc
+ ```
+
+ If you want to be sure the documentation looks the same as on CI:
+
+ ```bash
+ ./x.py doc --stage 1
+ ```
+
+ This ensures that (current) rustdoc gets built,
+ then that is used to document the components.
+
+- Much like running individual tests or building specific components,
+ you can build just the documentation you want:
+
+ ```bash
+ ./x.py doc src/doc/book
+ ./x.py doc src/doc/nomicon
+ ./x.py doc compiler library
+ ```
+
+- Document internal rustc items
+
+ Compiler documentation is not built by default.
+ To create it by default with `x.py doc`, modify `config.toml`:
+
+ ```toml
+ [build]
+ compiler-docs = true
+ ```
+
+ Note that when enabled,
+ documentation for internal compiler items will also be built.
+
+ NOTE: The documentation for the compiler is found at [this link].
+
+[this link]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/
diff --git a/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md b/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md
new file mode 100644
index 000000000..cce9d766a
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/how-to-build-and-run.md
@@ -0,0 +1,298 @@
+# How to Build and Run the Compiler
+
+The compiler is built using a tool called `x.py`. You will need to
+have Python installed to run it.
+
+For instructions on how to install Python and other prerequisites,
+see [the next page](./prerequisites.md).
+
+## Get the source code
+
+The main repository is [`rust-lang/rust`][repo]. This contains the compiler,
+the standard library (including `core`, `alloc`, `test`, `proc_macro`, etc),
+and a bunch of tools (e.g. `rustdoc`, the bootstrapping infrastructure, etc).
+
+[repo]: https://github.com/rust-lang/rust
+
+The very first step to work on `rustc` is to clone the repository:
+
+```bash
+git clone https://github.com/rust-lang/rust.git
+cd rust
+```
+
+There are also submodules for things like LLVM, `clippy`, `miri`, etc. The
+build tool will automatically clone and sync these for you. But if you want to,
+you can do the following:
+
+```sh
+# first time
+git submodule update --init --recursive
+
+# subsequent times (to pull new commits)
+git submodule update
+```
+
+## Create a `config.toml`
+
+To start, run `./x.py setup`. This will do some initialization and create a
+`config.toml` for you with reasonable defaults. These defaults are specified
+indirectly via the `profile` setting, which points to one of the TOML files in
+`src/bootstrap/defaults.`
+
+Alternatively, you can write `config.toml` by hand. See `config.toml.example`
+for all the available settings and explanations of them. The following settings
+are of particular interest, and `config.toml.example` has full explanations.
+
+You may want to change some of the following settings (and possibly others, such as
+`llvm.ccache`):
+
+```toml
+[llvm]
+# Whether to use Rust CI built LLVM instead of locally building it.
+download-ci-llvm = true # Download a pre-built LLVM?
+assertions = true # LLVM assertions on?
+ccache = "/path/to/ccache" # Use ccache when building LLVM?
+
+[rust]
+debug-logging = true # Leave debug! and trace! calls in rustc?
+incremental = true # Build rustc with incremental compilation?
+```
+
+If you set `download-ci-llvm = true`, in some circumstances, such as when
+updating the version of LLVM used by `rustc`, you may want to temporarily
+disable this feature. See the ["Updating LLVM" section] for more.
+
+["Updating LLVM" section]: ../backend/updating-llvm.md#feature-updates
+
+If you have already built `rustc` and you change settings related to LLVM, then you may have to
+execute `rm -rf build` for subsequent configuration changes to take effect. Note that `./x.py
+clean` will not cause a rebuild of LLVM.
+
+## What is `x.py`?
+
+`x.py` is the script used to orchestrate the tooling in the `rustc` repository.
+It is the script that can build docs, run tests, and compile `rustc`.
+It is the now preferred way to build `rustc` and it replaces the old makefiles
+from before. Below are the different ways to utilize `x.py` in order to
+effectively deal with the repo for various common tasks.
+
+This chapter focuses on the basics to be productive, but
+if you want to learn more about `x.py`, read its README.md
+[here](https://github.com/rust-lang/rust/blob/master/src/bootstrap/README.md).
+To read more about the bootstrap process and why `x.py` is necessary,
+[read this chapter][bootstrap].
+
+### Running `x.py` slightly more conveniently
+
+There is a binary that wraps `x.py` called `x` in `src/tools/x`. All it does is
+run `x.py`, but it can be installed system-wide and run from any subdirectory
+of a checkout. It also looks up the appropriate version of `python` to use.
+
+You can install it with `cargo install --path src/tools/x`.
+
+[bootstrap]: ./bootstrapping.md
+
+## Building the Compiler
+
+To build a compiler, run `./x.py build`. This will build up to the stage1 compiler,
+including `rustdoc`, producing a usable compiler toolchain from the source
+code you have checked out.
+
+Note that building will require a relatively large amount of storage space.
+You may want to have upwards of 10 or 15 gigabytes available to build the compiler.
+
+There are many flags you can pass to the build command of `x.py` that can be
+beneficial to cutting down compile times or fitting other things you might
+need to change. They are:
+
+```txt
+Options:
+ -v, --verbose use verbose output (-vv for very verbose)
+ -i, --incremental use incremental compilation
+ --config FILE TOML configuration file for build
+ --build BUILD build target of the stage0 compiler
+ --host HOST host targets to build
+ --target TARGET target targets to build
+ --on-fail CMD command to run on failure
+ --stage N stage to build
+ --keep-stage N stage to keep without recompiling
+ --src DIR path to the root of the Rust checkout
+ -j, --jobs JOBS number of jobs to run in parallel
+ -h, --help print this help message
+```
+
+For hacking, often building the stage 1 compiler is enough, which saves a lot
+of time. But for final testing and release, the stage 2 compiler is used.
+
+`./x.py check` is really fast to build the Rust compiler.
+It is, in particular, very useful when you're doing some kind of
+"type-based refactoring", like renaming a method, or changing the
+signature of some function.
+
+Once you've created a `config.toml`, you are now ready to run
+`x.py`. There are a lot of options here, but let's start with what is
+probably the best "go to" command for building a local rust:
+
+```bash
+./x.py build library
+```
+
+This may *look* like it only builds the standard library, but that is not the case.
+What this command does is the following:
+
+- Build `std` using the stage0 compiler
+- Build `rustc` using the stage0 compiler
+ - This produces the stage1 compiler
+- Build `std` using the stage1 compiler
+
+This final product (stage1 compiler + libs built using that compiler)
+is what you need to build other Rust programs (unless you use `#![no_std]` or
+`#![no_core]`).
+
+You will probably find that building the stage1 `std` is a bottleneck for you** -- but fear not,
+there is a (hacky) workaround. See [the section on "recommended workflows"](./suggested.md) below.
+
+Note that this whole command just gives you a subset of the full `rustc`
+build. The **full** `rustc` build (what you get with `./x.py build
+--stage 2 compiler/rustc`) has quite a few more steps:
+
+- Build `rustc` with the stage1 compiler.
+ - The resulting compiler here is called the "stage2" compiler.
+- Build `std` with stage2 compiler.
+- Build `librustdoc` and a bunch of other things with the stage2 compiler.
+
+You almost never need to do this.
+
+## Build specific components
+
+If you are working on the standard library, you probably don't need to build
+the compiler unless you are planning to use a recently added nightly feature.
+Instead, you can just build using the bootstrap compiler.
+
+```bash
+./x.py build --stage 0 library
+```
+
+## Creating a rustup toolchain
+
+Once you have successfully built `rustc`, you will have created a bunch
+of files in your `build` directory. In order to actually run the
+resulting `rustc`, we recommend creating rustup toolchains. The first
+one will run the stage1 compiler (which we built above). The second
+will execute the stage2 compiler (which we did not build, but which
+you will likely need to build at some point; for example, if you want
+to run the entire test suite).
+
+```bash
+rustup toolchain link stage1 build/<host-triple>/stage1
+rustup toolchain link stage2 build/<host-triple>/stage2
+```
+
+The `<host-triple>` would typically be one of the following:
+
+- Linux: `x86_64-unknown-linux-gnu`
+- Mac: `x86_64-apple-darwin` or `aarch64-apple-darwin`
+- Windows: `x86_64-pc-windows-msvc`
+
+Now you can run the `rustc` you built with. If you run with `-vV`, you
+should see a version number ending in `-dev`, indicating a build from
+your local environment:
+
+```bash
+$ rustc +stage1 -vV
+rustc 1.48.0-dev
+binary: rustc
+commit-hash: unknown
+commit-date: unknown
+host: x86_64-unknown-linux-gnu
+release: 1.48.0-dev
+LLVM version: 11.0
+```
+
+The rustup toolchain points to the specified toolchain compiled in your `build` directory,
+so the rustup toolchain will be updated whenever `x.py build` or `x.py test` are run for
+that toolchain/stage.
+
+**Note:** the toolchain we've built does not include `cargo`. In this case, `rustup` will
+fall back to using `cargo` from the installed `nightly`, `beta`, or `stable` toolchain
+(in that order). If you need to use unstable `cargo` flags, be sure to run
+`rustup install nightly` if you haven't already. See the
+[rustup documentation on custom toolchains](https://rust-lang.github.io/rustup/concepts/toolchains.html#custom-toolchains).
+
+## Building targets for cross-compilation
+
+To produce a compiler that can cross-compile for other targets,
+pass any number of `target` flags to `x.py build`.
+For example, if your host platform is `x86_64-unknown-linux-gnu`
+and your cross-compilation target is `wasm32-wasi`, you can build with:
+
+```bash
+./x.py build --target x86_64-unknown-linux-gnu --target wasm32-wasi
+```
+
+Note that if you want the resulting compiler to be able to build crates that
+involve proc macros or build scripts, you must be sure to explicitly build target support for the
+host platform (in this case, `x86_64-unknown-linux-gnu`).
+
+If you want to always build for other targets without needing to pass flags to `x.py build`,
+you can configure this in the `[build]` section of your `config.toml` like so:
+
+```toml
+[build]
+target = ["x86_64-unknown-linux-gnu", "wasm32-wasi"]
+```
+
+Note that building for some targets requires having external dependencies installed
+(e.g. building musl targets requires a local copy of musl).
+Any target-specific configuration (e.g. the path to a local copy of musl)
+will need to be provided by your `config.toml`.
+Please see `config.toml.example` for information on target-specific configuration keys.
+
+For examples of the complete configuration necessary to build a target, please visit
+[the rustc book](https://doc.rust-lang.org/rustc/platform-support.html),
+select any target under the "Platform Support" heading on the left,
+and see the section related to building a compiler for that target.
+For targets without a corresponding page in the rustc book,
+it may be useful to [inspect the Dockerfiles](../tests/docker.md)
+that the Rust infrastructure itself uses to set up and configure cross-compilation.
+
+If you have followed the directions from the prior section on creating a rustup toolchain,
+then once you have built your compiler you will be able to use it to cross-compile like so:
+
+```bash
+cargo +stage1 build --target wasm32-wasi
+```
+
+## Other `x.py` commands
+
+Here are a few other useful `x.py` commands. We'll cover some of them in detail
+in other sections:
+
+- Building things:
+ - `./x.py build` – builds everything using the stage 1 compiler,
+ not just up to `std`
+ - `./x.py build --stage 2` – builds everything with the stage 2 compiler including
+ `rustdoc` (which doesn't take too long)
+- Running tests (see the [section on running tests](../tests/running.html) for
+ more details):
+ - `./x.py test library/std` – runs the unit tests and integration tests from `std`
+ - `./x.py test src/test/ui` – runs the `ui` test suite
+ - `./x.py test src/test/ui/const-generics` - runs all the tests in
+ the `const-generics/` subdirectory of the `ui` test suite
+ - `./x.py test src/test/ui/const-generics/const-types.rs` - runs
+ the single test `const-types.rs` from the `ui` test suite
+
+### Cleaning out build directories
+
+Sometimes you need to start fresh, but this is normally not the case.
+If you need to run this then `rustbuild` is most likely not acting right and
+you should file a bug as to what is going wrong. If you do need to clean
+everything up then you only need to run one command!
+
+```bash
+./x.py clean
+```
+
+`rm -rf build` works too, but then you have to rebuild LLVM, which can take
+a long time even on fast computers.
diff --git a/src/doc/rustc-dev-guide/src/building/new-target.md b/src/doc/rustc-dev-guide/src/building/new-target.md
new file mode 100644
index 000000000..77833fad1
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/new-target.md
@@ -0,0 +1,156 @@
+# Adding a new target
+
+These are a set of steps to add support for a new target. There are
+numerous end states and paths to get there, so not all sections may be
+relevant to your desired goal.
+
+## Specifying a new LLVM
+
+For very new targets, you may need to use a different fork of LLVM
+than what is currently shipped with Rust. In that case, navigate to
+the `src/llvm-project` git submodule (you might need to run `./x.py
+check` at least once so the submodule is updated), check out the
+appropriate commit for your fork, then commit that new submodule
+reference in the main Rust repository.
+
+An example would be:
+
+```
+cd src/llvm-project
+git remote add my-target-llvm some-llvm-repository
+git checkout my-target-llvm/my-branch
+cd ..
+git add llvm-project
+git commit -m 'Use my custom LLVM'
+```
+
+### Using pre-built LLVM
+
+If you have a local LLVM checkout that is already built, you may be
+able to configure Rust to treat your build as the system LLVM to avoid
+redundant builds.
+
+You can tell Rust to use a pre-built version of LLVM using the `target` section
+of `config.toml`:
+
+```toml
+[target.x86_64-unknown-linux-gnu]
+llvm-config = "/path/to/llvm/llvm-7.0.1/bin/llvm-config"
+```
+
+If you are attempting to use a system LLVM, we have observed the following paths
+before, though they may be different from your system:
+
+- `/usr/bin/llvm-config-8`
+- `/usr/lib/llvm-8/bin/llvm-config`
+
+Note that you need to have the LLVM `FileCheck` tool installed, which is used
+for codegen tests. This tool is normally built with LLVM, but if you use your
+own preinstalled LLVM, you will need to provide `FileCheck` in some other way.
+On Debian-based systems, you can install the `llvm-N-tools` package (where `N`
+is the LLVM version number, e.g. `llvm-8-tools`). Alternately, you can specify
+the path to `FileCheck` with the `llvm-filecheck` config item in `config.toml`
+or you can disable codegen test with the `codegen-tests` item in `config.toml`.
+
+## Creating a target specification
+
+You should start with a target JSON file. You can see the specification
+for an existing target using `--print target-spec-json`:
+
+```
+rustc -Z unstable-options --target=wasm32-unknown-unknown --print target-spec-json
+```
+
+Save that JSON to a file and modify it as appropriate for your target.
+
+### Adding a target specification
+
+Once you have filled out a JSON specification and been able to compile
+somewhat successfully, you can copy the specification into the
+compiler itself.
+
+You will need to add a line to the big table inside of the
+`supported_targets` macro in the `rustc_target::spec` module. You
+will then add a corresponding file for your new target containing a
+`target` function.
+
+Look for existing targets to use as examples.
+
+After adding your target to the `rustc_target` crate you may want to add
+`core`, `std`, ... with support for your new target. In that case you will
+probably need access to some `target_*` cfg. Unfortunately when building with
+stage0 (the beta compiler), you'll get an error that the target cfg is
+unexpected because stage0 doesn't know about the new target specification and
+we pass `--check-cfg` in order to tell it to check.
+
+To fix the errors you will need to manually add the unexpected value to the
+`EXTRA_CHECK_CFGS` list in `src/bootstrap/lib.rs`. Here is an example for
+adding `NEW_TARGET_OS` as `target_os`:
+```diff
+- (Some(Mode::Std), "target_os", Some(&["watchos"])),
++ // #[cfg(bootstrap)] NEW_TARGET_OS
++ (Some(Mode::Std), "target_os", Some(&["watchos", "NEW_TARGET_OS"])),
+```
+
+## Patching crates
+
+You may need to make changes to crates that the compiler depends on,
+such as [`libc`][] or [`cc`][]. If so, you can use Cargo's
+[`[patch]`][patch] ability. For example, if you want to use an
+unreleased version of `libc`, you can add it to the top-level
+`Cargo.toml` file:
+
+```diff
+diff --git a/Cargo.toml b/Cargo.toml
+index be15e50e2bc..4fb1248ba99 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -66,10 +66,11 @@ cargo = { path = "src/tools/cargo" }
+ [patch.crates-io]
+ # Similar to Cargo above we want the RLS to use a vendored version of `rustfmt`
+ # that we're shipping as well (to ensure that the rustfmt in RLS and the
+ # `rustfmt` executable are the same exact version).
+ rustfmt-nightly = { path = "src/tools/rustfmt" }
++libc = { git = "https://github.com/rust-lang/libc", rev = "0bf7ce340699dcbacabdf5f16a242d2219a49ee0" }
+
+ # See comments in `src/tools/rustc-workspace-hack/README.md` for what's going on
+ # here
+ rustc-workspace-hack = { path = 'src/tools/rustc-workspace-hack' }
+```
+
+After this, run `cargo update -p libc` to update the lockfiles.
+
+Beware that if you patch to a local `path` dependency, this will enable
+warnings for that dependency. Some dependencies are not warning-free, and due
+to the `deny-warnings` setting in `config.toml`, the build may suddenly start
+to fail. To work around the warnings, you may want to disable `deny-warnings`
+in the config, or modify the dependency to remove the warnings.
+
+[`libc`]: https://crates.io/crates/libc
+[`cc`]: https://crates.io/crates/cc
+[patch]: https://doc.rust-lang.org/stable/cargo/reference/overriding-dependencies.html#the-patch-section
+
+## Cross-compiling
+
+Once you have a target specification in JSON and in the code, you can
+cross-compile `rustc`:
+
+```
+DESTDIR=/path/to/install/in \
+./x.py install -i --stage 1 --host aarch64-apple-darwin.json --target aarch64-apple-darwin \
+compiler/rustc library/std
+```
+
+If your target specification is already available in the bootstrap
+compiler, you can use it instead of the JSON file for both arguments.
+
+## Promoting a target from tier 2 (target) to tier 2 (host)
+
+There are two levels of tier 2 targets:
+ a) Targets that are only cross-compiled (`rustup target add`)
+ b) Targets that [have a native toolchain][tier2-native] (`rustup toolchain install`)
+
+[tier2-native]: https://doc.rust-lang.org/nightly/rustc/target-tier-policy.html#tier-2-with-host-tools
+
+For an example of promoting a target from cross-compiled to native,
+see [#75914](https://github.com/rust-lang/rust/pull/75914).
diff --git a/src/doc/rustc-dev-guide/src/building/prerequisites.md b/src/doc/rustc-dev-guide/src/building/prerequisites.md
new file mode 100644
index 000000000..a5ab23d91
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/prerequisites.md
@@ -0,0 +1,85 @@
+# Prerequisites
+
+## Dependencies
+
+Before building the compiler, you need the following things installed:
+
+* `python` 3 or 2.7 (under the name `python`; `python2` or `python3` will not work)
+* `curl`
+* `git`
+* `ssl` which comes in `libssl-dev` or `openssl-devel`
+* `pkg-config` if you are compiling on Linux and targeting Linux
+
+If building LLVM from source (the default), you'll need additional tools:
+
+* `g++` 5.1 or later, `clang++` 3.5 or later, or MSVC 2017 or later.
+* `ninja`, or GNU `make` 3.81 or later (ninja is recommended, especially on Windows)
+* `cmake` 3.13.4 or later
+
+Otherwise, you'll need LLVM installed and `llvm-config` in your path.
+See [this section for more info][sysllvm].
+
+[sysllvm]: ./new-target.md#using-pre-built-llvm
+
+### Windows
+
+* Install [winget](https://github.com/microsoft/winget-cli)
+
+`winget` is a Windows package manager. It will make package installation easy
+on Windows.
+
+Run the following in a terminal:
+
+```powershell
+winget install -e Python.Python.3
+winget install -e Kitware.CMake
+```
+
+If any of those is installed already, winget will detect it.
+Then edit your systems `PATH` variable and add: `C:\Program Files\CMake\bin`.
+
+For more information about building on Windows,
+see [the `rust-lang/rust` README](https://github.com/rust-lang/rust#building-on-windows).
+
+## Hardware
+
+You will need an internet connection to build. The bootstrapping process
+involves updating git submodules and downloading a beta compiler. It doesn't
+need to be super fast, but that can help.
+
+There are no strict hardware requirements, but building the compiler is
+computationally expensive, so a beefier machine will help, and I wouldn't
+recommend trying to build on a Raspberry Pi! We recommend the following.
+* 30GB+ of free disk space. Otherwise, you will have to keep
+ clearing incremental caches. More space is better, the compiler is a bit of a
+ hog; it's a problem we are aware of.
+* 8GB+ RAM
+* 2+ cores. Having more cores really helps. 10 or 20 or more is not too many!
+
+Beefier machines will lead to much faster builds. If your machine is not very
+powerful, a common strategy is to only use `./x.py check` on your local machine
+and let the CI build test your changes when you push to a PR branch.
+
+Building the compiler takes more than half an hour on my moderately powerful
+laptop. The first time you build the compiler, LLVM will also be built unless
+you use CI-built LLVM ([see here][config]).
+
+Like `cargo`, the build system will use as many cores as possible. Sometimes
+this can cause you to run low on memory. You can use `-j` to adjust the number
+concurrent jobs. If a full build takes more than ~45 minutes to an hour, you
+are probably spending most of the time swapping memory in and out; try using
+`-j1`.
+
+If you don't have too much free disk space, you may want to turn off
+incremental compilation ([see here][config]). This will make compilation take
+longer (especially after a rebase), but will save a ton of space from the
+incremental caches.
+
+[config]: ./how-to-build-and-run.md#create-a-configtoml
+
+## `rustc` and toolchain installation
+
+Follow the installation given in the [Rust book][install] to install a working
+`rustc` and the necessary C/++ toolchain on your platform.
+
+[install]: https://doc.rust-lang.org/book/ch01-01-installation.html
diff --git a/src/doc/rustc-dev-guide/src/building/suggested.md b/src/doc/rustc-dev-guide/src/building/suggested.md
new file mode 100644
index 000000000..1c2229335
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/building/suggested.md
@@ -0,0 +1,298 @@
+# Suggested Workflows
+
+The full bootstrapping process takes quite a while. Here are some suggestions
+to make your life easier.
+
+## Installing a pre-push hook
+
+CI will automatically fail your build if it doesn't pass `tidy`, our
+internal tool for ensuring code quality. If you'd like, you can install a
+[Git hook](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
+that will automatically run `./x.py test tidy --bless` on each push, to ensure
+your code is up to par. If you decide later that this behavior is
+undesirable, you can delete the `pre-push` file in `.git/hooks`.
+
+A prebuilt git hook lives at [`src/etc/pre-push.sh`](https://github.com/rust-lang/rust/blob/master/src/etc/pre-push.sh) which can be copied into your `.git/hooks` folder as `pre-push` (without the `.sh` extension!).
+
+You can also install the hook as a step of running `./x.py setup`!
+
+## Configuring `rust-analyzer` for `rustc`
+
+`rust-analyzer` can help you check and format your code whenever you save
+a file. By default, `rust-analyzer` runs the `cargo check` and `rustfmt`
+commands, but you can override these commands to use more adapted versions
+of these tools when hacking on `rustc`. For example, for Visual Studio Code,
+you can write: <!-- date: 2022-04 --><!-- the date comment is for the edition below -->
+
+```JSON
+{
+ "rust-analyzer.checkOnSave.overrideCommand": [
+ "python3",
+ "x.py",
+ "check",
+ "--json-output"
+ ],
+ "rust-analyzer.rustfmt.overrideCommand": [
+ "./build/$TARGET_TRIPLE/stage0/bin/rustfmt",
+ "--edition=2021"
+ ],
+ "rust-analyzer.procMacro.enable": true,
+ "rust-analyzer.cargo.buildScripts.enable": true,
+ "rust-analyzer.cargo.buildScripts.overrideCommand": [
+ "python3",
+ "x.py",
+ "check",
+ "--json-output"
+ ],
+ "rust-analyzer.rustc.source": "./Cargo.toml",
+}
+```
+
+in your `.vscode/settings.json` file. This will ask `rust-analyzer` to use
+`./x.py check` to check the sources, and the stage 0 rustfmt to format them.
+
+> NOTE: Make sure to replace `TARGET_TRIPLE` in the `rust-analyzer.rustfmt.overrideCommand`
+> setting with the appropriate target triple for your machine. An example of such
+> a triple is `x86_64-unknown-linux-gnu`. An easy way to check your target triple
+> is to run `rustc -vV` and checking the `host` value of its output.
+
+If you have enough free disk space and you would like to be able to run `x.py` commands while
+rust-analyzer runs in the background, you can also add `--build-dir build-rust-analyzer` to the
+`overrideCommand` to avoid x.py locking.
+
+If you're running `coc.nvim`, you can use `:CocLocalConfig` to create a
+`.vim/coc-settings.json` and enter the same settings as above, but replacing
+`editor.formatOnSave: true,` with
+`"coc.preferences.formatOnSaveFiletypes": ["rust"],`.
+
+If running `./x.py check` on save is inconvenient, in VS Code you can use a [Build
+Task] instead:
+
+```JSON
+// .vscode/tasks.json
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "./x.py check",
+ "command": "./x.py check",
+ "type": "shell",
+ "problemMatcher": "$rustc",
+ "presentation": { "clear": true },
+ "group": { "kind": "build", "isDefault": true }
+ }
+ ]
+}
+```
+
+[Build Task]: https://code.visualstudio.com/docs/editor/tasks
+
+## Check, check, and check again
+
+When doing simple refactorings, it can be useful to run `./x.py check`
+continuously. If you set up `rust-analyzer` as described above, this will
+be done for you every time you save a file. Here you are just checking that
+the compiler can **build**, but often that is all you need (e.g., when renaming a
+method). You can then run `./x.py build` when you actually need to
+run tests.
+
+In fact, it is sometimes useful to put off tests even when you are not
+100% sure the code will work. You can then keep building up
+refactoring commits and only run the tests at some later time. You can
+then use `git bisect` to track down **precisely** which commit caused
+the problem. A nice side-effect of this style is that you are left
+with a fairly fine-grained set of commits at the end, all of which
+build and pass tests. This often helps reviewing.
+
+## Configuring `rustup` to use nightly
+
+Some parts of the bootstrap process uses pinned, nightly versions of tools like
+rustfmt. To make things like `cargo fmt` work correctly in your repo, run
+
+```console
+cd <path to rustc repo>
+rustup override set nightly
+```
+
+after [installing a nightly toolchain] with `rustup`. Don't forget to do this for all
+directories you have [setup a worktree for]. You may need to use the pinned
+nightly version from `src/stage0.json`, but often the normal `nightly` channel
+will work.
+
+**Note** see [the section on vscode] for how to configure it with this real rustfmt `x.py` uses,
+and [the section on rustup] for how to setup `rustup` toolchain for your bootstrapped compiler
+
+**Note** This does _not_ allow you to build `rustc` with cargo directly. You
+still have to use `x.py` to work on the compiler or standard library, this just
+lets you use `cargo fmt`.
+
+[installing a nightly toolchain]: https://rust-lang.github.io/rustup/concepts/channels.html?highlight=nightl#working-with-nightly-rust
+[setup a worktree for]: ./suggested.md#working-on-multiple-branches-at-the-same-time
+[the section on vscode]: suggested.md#configuring-rust-analyzer-for-rustc
+[the section on rustup]: how-to-build-and-run.md?highlight=rustup#creating-a-rustup-toolchain
+
+## Incremental builds with `--keep-stage`.
+
+Sometimes just checking
+whether the compiler builds is not enough. A common example is that
+you need to add a `debug!` statement to inspect the value of some
+state or better understand the problem. In that case, you really need
+a full build. By leveraging incremental, though, you can often get
+these builds to complete very fast (e.g., around 30 seconds). The only
+catch is this requires a bit of fudging and may produce compilers that
+don't work (but that is easily detected and fixed).
+
+The sequence of commands you want is as follows:
+
+- Initial build: `./x.py build library`
+ - As [documented previously], this will build a functional
+ stage1 compiler as part of running all stage0 commands (which include
+ building a `std` compatible with the stage1 compiler) as well as the
+ first few steps of the "stage 1 actions" up to "stage1 (sysroot stage1)
+ builds std".
+- Subsequent builds: `./x.py build library --keep-stage 1`
+ - Note that we added the `--keep-stage 1` flag here
+
+[documented previously]: ./how-to-build-and-run.md#building-the-compiler
+
+As mentioned, the effect of `--keep-stage 1` is that we just _assume_ that the
+old standard library can be re-used. If you are editing the compiler, this
+is almost always true: you haven't changed the standard library, after
+all. But sometimes, it's not true: for example, if you are editing
+the "metadata" part of the compiler, which controls how the compiler
+encodes types and other states into the `rlib` files, or if you are
+editing things that wind up in the metadata (such as the definition of
+the MIR).
+
+**The TL;DR is that you might get weird behavior from a compile when
+using `--keep-stage 1`** -- for example, strange
+[ICEs](../appendix/glossary.html#ice) or other panics. In that case, you
+should simply remove the `--keep-stage 1` from the command and
+rebuild. That ought to fix the problem.
+
+You can also use `--keep-stage 1` when running tests. Something like this:
+
+- Initial test run: `./x.py test src/test/ui`
+- Subsequent test run: `./x.py test src/test/ui --keep-stage 1`
+
+## Fine-tuning optimizations
+
+Setting `optimize = false` makes the compiler too slow for tests. However, to
+improve the test cycle, you can disable optimizations selectively only for the
+crates you'll have to rebuild
+([source](https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler/topic/incremental.20compilation.20question/near/202712165)).
+For example, when working on `rustc_mir_build`, the `rustc_mir_build` and
+`rustc_driver` crates take the most time to incrementally rebuild. You could
+therefore set the following in the root `Cargo.toml`:
+
+```toml
+[profile.release.package.rustc_mir_build]
+opt-level = 0
+[profile.release.package.rustc_driver]
+opt-level = 0
+```
+
+## Working on multiple branches at the same time
+
+Working on multiple branches in parallel can be a little annoying, since
+building the compiler on one branch will cause the old build and the
+incremental compilation cache to be overwritten. One solution would be
+to have multiple clones of the repository, but that would mean storing the
+Git metadata multiple times, and having to update each clone individually.
+
+Fortunately, Git has a better solution called [worktrees]. This lets you
+create multiple "working trees", which all share the same Git database.
+Moreover, because all of the worktrees share the same object database,
+if you update a branch (e.g. master) in any of them, you can use the new
+commits from any of the worktrees. One caveat, though, is that submodules
+do not get shared. They will still be cloned multiple times.
+
+[worktrees]: https://git-scm.com/docs/git-worktree
+
+Given you are inside the root directory for your Rust repository, you can
+create a "linked working tree" in a new "rust2" directory by running
+the following command:
+
+```bash
+git worktree add ../rust2
+```
+
+Creating a new worktree for a new branch based on `master` looks like:
+
+```bash
+git worktree add -b my-feature ../rust2 master
+```
+
+You can then use that rust2 folder as a separate workspace for modifying
+and building `rustc`!
+
+## Using nix-shell
+
+If you're using nix, you can use the following nix-shell to work on Rust:
+
+```nix
+{ pkgs ? import <nixpkgs> {} }:
+
+# This file contains a development shell for working on rustc.
+let
+ # Build configuration for rust-lang/rust. Based on `config.toml.example` from
+ # `1bd30ce2aac40c7698aa4a1b9520aa649ff2d1c5`.
+ config = pkgs.writeText "rustc-config" ''
+ profile = "compiler" # you may want to choose a different profile, like `library` or `tools`
+ changelog-seen = 2
+
+ [build]
+ # The path to (or name of) the GDB executable to use. This is only used for
+ # executing the debuginfo test suite.
+ gdb = "${pkgs.gdb}/bin/gdb"
+ python = "${pkgs.python3Full}/bin/python"
+
+ [rust]
+ debug = true
+ incremental = true
+ deny-warnings = false
+
+ # Indicates whether some LLVM tools, like llvm-objdump, will be made available in the
+ # sysroot.
+ llvm-tools = true
+
+ # Print backtrace on internal compiler errors during bootstrap
+ backtrace-on-ice = true
+ '';
+
+ ripgrepConfig =
+ let
+ # Files that are ignored by ripgrep when searching.
+ ignoreFile = pkgs.writeText "rustc-rgignore" ''
+ configure
+ config.toml.example
+ x.py
+ LICENSE-MIT
+ LICENSE-APACHE
+ COPYRIGHT
+ **/*.txt
+ **/*.toml
+ **/*.yml
+ **/*.nix
+ *.md
+ src/ci
+ src/etc/
+ src/llvm-emscripten/
+ src/llvm-project/
+ src/rtstartup/
+ src/rustllvm/
+ src/stdsimd/
+ src/tools/rls/rls-analysis/test_data/
+ '';
+ in
+ pkgs.writeText "rustc-ripgreprc" "--ignore-file=${ignoreFile}";
+in
+pkgs.mkShell {
+ name = "rustc";
+ nativeBuildInputs = with pkgs; [
+ gcc9 binutils cmake ninja openssl pkgconfig python39 git curl cacert patchelf nix psutils
+ ];
+ RIPGREP_CONFIG_PATH = ripgrepConfig;
+ RUST_BOOTSTRAP_CONFIG = config;
+}
+```
diff --git a/src/doc/rustc-dev-guide/src/cli.md b/src/doc/rustc-dev-guide/src/cli.md
new file mode 100644
index 000000000..408ae2070
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/cli.md
@@ -0,0 +1,33 @@
+# Command-line Arguments
+
+Command-line flags are documented in the [rustc book][cli-docs]. All *stable*
+flags should be documented there. Unstable flags should be documented in the
+[unstable book].
+
+See the [forge guide for new options] for details on the *procedure* for
+adding a new command-line argument.
+
+## Guidelines
+
+- Flags should be orthogonal to each other. For example, if we'd have a
+ json-emitting variant of multiple actions `foo` and `bar`, an additional
+ `--json` flag is better than adding `--foo-json` and `--bar-json`.
+- Avoid flags with the `no-` prefix. Instead, use the [`parse_bool`] function,
+ such as `-C embed-bitcode=no`.
+- Consider the behavior if the flag is passed multiple times. In some
+ situations, the values should be accumulated (in order!). In other
+ situations, subsequent flags should override previous flags (for example,
+ the lint-level flags). And some flags (like `-o`) should generate an error
+ if it is too ambiguous what multiple flags would mean.
+- Always give options a long descriptive name, if only for more understandable
+ compiler scripts.
+- The `--verbose` flag is for adding verbose information to `rustc`
+ output. For example, using it with the `--version`
+ flag gives information about the hashes of the compiler code.
+- Experimental flags and options must be guarded behind the `-Z
+ unstable-options` flag.
+
+[cli-docs]: https://doc.rust-lang.org/rustc/command-line-arguments.html
+[forge guide for new options]: https://forge.rust-lang.org/compiler/new_option.html
+[unstable book]: https://doc.rust-lang.org/nightly/unstable-book/
+[`parse_bool`]: https://github.com/rust-lang/rust/blob/e5335592e78354e33d798d20c04bcd677c1df62d/src/librustc_session/options.rs#L307-L313
diff --git a/src/doc/rustc-dev-guide/src/closure.md b/src/doc/rustc-dev-guide/src/closure.md
new file mode 100644
index 000000000..b43be3213
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/closure.md
@@ -0,0 +1,215 @@
+# Closure Expansion in rustc
+
+This section describes how rustc handles closures. Closures in Rust are
+effectively "desugared" into structs that contain the values they use (or
+references to the values they use) from their creator's stack frame. rustc has
+the job of figuring out which values a closure uses and how, so it can decide
+whether to capture a given variable by shared reference, mutable reference, or
+by move. rustc also has to figure out which of the closure traits ([`Fn`][fn],
+[`FnMut`][fn_mut], or [`FnOnce`][fn_once]) a closure is capable of
+implementing.
+
+[fn]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+[fn_mut]:https://doc.rust-lang.org/std/ops/trait.FnMut.html
+[fn_once]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html
+
+Let's start with a few examples:
+
+### Example 1
+
+To start, let's take a look at how the closure in the following example is desugared:
+
+```rust
+fn closure(f: impl Fn()) {
+ f();
+}
+
+fn main() {
+ let x: i32 = 10;
+ closure(|| println!("Hi {}", x)); // The closure just reads x.
+ println!("Value of x after return {}", x);
+}
+```
+
+Let's say the above is the content of a file called `immut.rs`. If we compile
+`immut.rs` using the following command. The [`-Z dump-mir=all`][dump-mir] flag will cause
+`rustc` to generate and dump the [MIR][mir] to a directory called `mir_dump`.
+```console
+> rustc +stage1 immut.rs -Z dump-mir=all
+```
+
+[mir]: ./mir/index.md
+[dump-mir]: ./mir/passes.md
+
+After we run this command, we will see a newly generated directory in our
+current working directory called `mir_dump`, which will contain several files.
+If we look at file `rustc.main.-------.mir_map.0.mir`, we will find, among
+other things, it also contains this line:
+
+```rust,ignore
+_4 = &_1;
+_3 = [closure@immut.rs:7:13: 7:36] { x: move _4 };
+```
+
+Note that in the MIR examples in this chapter, `_1` is `x`.
+
+Here in first line `_4 = &_1;`, the `mir_dump` tells us that `x` was borrowed
+as an immutable reference. This is what we would hope as our closure just
+reads `x`.
+
+### Example 2
+
+Here is another example:
+
+```rust
+fn closure(mut f: impl FnMut()) {
+ f();
+}
+
+fn main() {
+ let mut x: i32 = 10;
+ closure(|| {
+ x += 10; // The closure mutates the value of x
+ println!("Hi {}", x)
+ });
+ println!("Value of x after return {}", x);
+}
+```
+
+```rust,ignore
+_4 = &mut _1;
+_3 = [closure@mut.rs:7:13: 10:6] { x: move _4 };
+```
+This time along, in the line `_4 = &mut _1;`, we see that the borrow is changed to mutable borrow.
+Fair enough! The closure increments `x` by 10.
+
+### Example 3
+
+One more example:
+
+```rust
+fn closure(f: impl FnOnce()) {
+ f();
+}
+
+fn main() {
+ let x = vec![21];
+ closure(|| {
+ drop(x); // Makes x unusable after the fact.
+ });
+ // println!("Value of x after return {:?}", x);
+}
+```
+
+```rust,ignore
+_6 = [closure@move.rs:7:13: 9:6] { x: move _1 }; // bb16[3]: scope 1 at move.rs:7:13: 9:6
+```
+Here, `x` is directly moved into the closure and the access to it will not be permitted after the
+closure.
+
+## Inferences in the compiler
+
+Now let's dive into rustc code and see how all these inferences are done by the compiler.
+
+Let's start with defining a term that we will be using quite a bit in the rest of the discussion -
+*upvar*. An **upvar** is a variable that is local to the function where the closure is defined. So,
+in the above examples, **x** will be an upvar to the closure. They are also sometimes referred to as
+the *free variables* meaning they are not bound to the context of the closure.
+[`compiler/rustc_middle/src/ty/query/mod.rs`][upvars] defines a query called *upvars_mentioned*
+for this purpose.
+
+[upvars]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_query_impl/queries/struct.upvars_mentioned.html
+
+Other than lazy invocation, one other thing that distinguishes a closure from a
+normal function is that it can use the upvars. It borrows these upvars from its surrounding
+context; therefore the compiler has to determine the upvar's borrow type. The compiler starts with
+assigning an immutable borrow type and lowers the restriction (that is, changes it from
+**immutable** to **mutable** to **move**) as needed, based on the usage. In the Example 1 above, the
+closure only uses the variable for printing but does not modify it in any way and therefore, in the
+`mir_dump`, we find the borrow type for the upvar `x` to be immutable. In example 2, however, the
+closure modifies `x` and increments it by some value. Because of this mutation, the compiler, which
+started off assigning `x` as an immutable reference type, has to adjust it as a mutable reference.
+Likewise in the third example, the closure drops the vector and therefore this requires the variable
+`x` to be moved into the closure. Depending on the borrow kind, the closure has to implement the
+appropriate trait: `Fn` trait for immutable borrow, `FnMut` for mutable borrow,
+and `FnOnce` for move semantics.
+
+Most of the code related to the closure is in the
+[`compiler/rustc_typeck/src/check/upvar.rs`][upvar] file and the data structures are
+declared in the file [`compiler/rustc_middle/src/ty/mod.rs`][ty].
+
+[upvar]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/check/upvar/index.html
+[ty]:https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/index.html
+
+Before we go any further, let's discuss how we can examine the flow of control through the rustc
+codebase. For closures specifically, set the `RUST_LOG` env variable as below and collect the
+output in a file:
+
+```console
+> RUST_LOG=rustc_typeck::check::upvar rustc +stage1 -Z dump-mir=all \
+ <.rs file to compile> 2> <file where the output will be dumped>
+```
+
+This uses the stage1 compiler and enables `debug!` logging for the
+`rustc_typeck::check::upvar` module.
+
+The other option is to step through the code using lldb or gdb.
+
+1. `rust-lldb build/x86_64-apple-darwin/stage1/bin/rustc test.rs`
+2. In lldb:
+ 1. `b upvar.rs:134` // Setting the breakpoint on a certain line in the upvar.rs file`
+ 2. `r` // Run the program until it hits the breakpoint
+
+Let's start with [`upvar.rs`][upvar]. This file has something called
+the [`euv::ExprUseVisitor`] which walks the source of the closure and
+invokes a callback for each upvar that is borrowed, mutated, or moved.
+
+[`euv::ExprUseVisitor`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/expr_use_visitor/struct.ExprUseVisitor.html
+
+```rust
+fn main() {
+ let mut x = vec![21];
+ let _cl = || {
+ let y = x[0]; // 1.
+ x[0] += 1; // 2.
+ };
+}
+```
+
+In the above example, our visitor will be called twice, for the lines marked 1 and 2, once for a
+shared borrow and another one for a mutable borrow. It will also tell us what was borrowed.
+
+The callbacks are defined by implementing the [`Delegate`] trait. The
+[`InferBorrowKind`][ibk] type implements `Delegate` and keeps a map that
+records for each upvar which mode of capture was required. The modes of capture
+can be `ByValue` (moved) or `ByRef` (borrowed). For `ByRef` borrows, the possible
+[`BorrowKind`]s are `ImmBorrow`, `UniqueImmBorrow`, `MutBorrow` as defined in the
+[`compiler/rustc_middle/src/ty/mod.rs`][middle_ty].
+
+[`BorrowKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.BorrowKind.html
+[middle_ty]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/index.html
+
+`Delegate` defines a few different methods (the different callbacks):
+**consume** for *move* of a variable, **borrow** for a *borrow* of some kind
+(shared or mutable), and **mutate** when we see an *assignment* of something.
+
+All of these callbacks have a common argument *cmt* which stands for Category,
+Mutability and Type and is defined in
+[`compiler/rustc_middle/src/middle/mem_categorization.rs`][cmt]. Borrowing from the code
+comments, "`cmt` is a complete categorization of a value indicating where it
+originated and how it is located, as well as the mutability of the memory in
+which the value is stored". Based on the callback (consume, borrow etc.), we
+will call the relevant `adjust_upvar_borrow_kind_for_<something>` and pass the
+`cmt` along. Once the borrow type is adjusted, we store it in the table, which
+basically says what borrows were made for each closure.
+
+```rust,ignore
+self.tables
+ .borrow_mut()
+ .upvar_capture_map
+ .extend(delegate.adjust_upvar_captures);
+```
+
+[`Delegate`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/expr_use_visitor/trait.Delegate.html
+[ibk]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/check/upvar/struct.InferBorrowKind.html
+[cmt]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/mem_categorization/index.html
diff --git a/src/doc/rustc-dev-guide/src/compiler-debugging.md b/src/doc/rustc-dev-guide/src/compiler-debugging.md
new file mode 100644
index 000000000..8f46e896e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/compiler-debugging.md
@@ -0,0 +1,282 @@
+# Debugging the compiler
+[debugging]: #debugging
+
+<!-- toc -->
+
+This chapter contains a few tips to debug the compiler. These tips aim to be
+useful no matter what you are working on. Some of the other chapters have
+advice about specific parts of the compiler (e.g. the [Queries Debugging and
+Testing chapter](./incrcomp-debugging.html) or the [LLVM Debugging
+chapter](./backend/debugging.md)).
+
+## Configuring the compiler
+
+By default, rustc is built without most debug information. To enable debug info,
+set `debug = true` in your config.toml.
+
+Setting `debug = true` turns on many different debug options (e.g., `debug-assertions`,
+`debug-logging`, etc.) which can be individually tweaked if you want to, but many people
+simply set `debug = true`. Check out the comments in config.toml.example for more info.
+
+You will need to rebuild the compiler once you've changed any configuration options.
+
+## `-Z` flags
+
+The compiler has a bunch of `-Z` flags. These are unstable flags that are only
+enabled on nightly. Many of them are useful for debugging. To get a full listing
+of `-Z` flags, use `-Z help`.
+
+One useful flag is `-Z verbose`, which generally enables printing more info that
+could be useful for debugging.
+
+## Getting a backtrace
+[getting-a-backtrace]: #getting-a-backtrace
+
+When you have an ICE (panic in the compiler), you can set
+`RUST_BACKTRACE=1` to get the stack trace of the `panic!` like in
+normal Rust programs. IIRC backtraces **don't work** on MinGW,
+sorry. If you have trouble or the backtraces are full of `unknown`,
+you might want to find some way to use Linux, Mac, or MSVC on Windows.
+
+In the default configuration (without `debug` set to `true`), you don't have line numbers
+enabled, so the backtrace looks like this:
+
+```text
+stack backtrace:
+ 0: std::sys::imp::backtrace::tracing::imp::unwind_backtrace
+ 1: std::sys_common::backtrace::_print
+ 2: std::panicking::default_hook::{{closure}}
+ 3: std::panicking::default_hook
+ 4: std::panicking::rust_panic_with_hook
+ 5: std::panicking::begin_panic
+ (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
+ 32: rustc_typeck::check_crate
+ 33: <std::thread::local::LocalKey<T>>::with
+ 34: <std::thread::local::LocalKey<T>>::with
+ 35: rustc::ty::context::TyCtxt::create_and_enter
+ 36: rustc_driver::driver::compile_input
+ 37: rustc_driver::run_compiler
+```
+
+If you set `debug = true`, you will get line numbers for the stack trace.
+Then the backtrace will look like this:
+
+```text
+stack backtrace:
+ (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
+ at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:110
+ 7: rustc_typeck::check::cast::CastCheck::check
+ at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:572
+ at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:460
+ at /home/user/rust/compiler/rustc_typeck/src/check/cast.rs:370
+ (~~~~ LINES REMOVED BY ME FOR BREVITY ~~~~)
+ 33: rustc_driver::driver::compile_input
+ at /home/user/rust/compiler/rustc_driver/src/driver.rs:1010
+ at /home/user/rust/compiler/rustc_driver/src/driver.rs:212
+ 34: rustc_driver::run_compiler
+ at /home/user/rust/compiler/rustc_driver/src/lib.rs:253
+```
+
+## Getting a backtrace for errors
+[getting-a-backtrace-for-errors]: #getting-a-backtrace-for-errors
+
+If you want to get a backtrace to the point where the compiler emits an
+error message, you can pass the `-Z treat-err-as-bug=n`, which will make
+the compiler panic on the `nth` error on `delay_span_bug`. If you leave
+off `=n`, the compiler will assume `1` for `n` and thus panic on the
+first error it encounters.
+
+This can also help when debugging `delay_span_bug` calls - it will make
+the first `delay_span_bug` call panic, which will give you a useful backtrace.
+
+For example:
+
+```bash
+$ cat error.rs
+```
+
+```rust
+fn main() {
+ 1 + ();
+}
+```
+
+```bash
+$ rustc +stage1 error.rs
+error[E0277]: cannot add `()` to `{integer}`
+ --> error.rs:2:7
+ |
+2 | 1 + ();
+ | ^ no implementation for `{integer} + ()`
+ |
+ = help: the trait `Add<()>` is not implemented for `{integer}`
+
+error: aborting due to previous error
+```
+
+Now, where does the error above come from?
+
+```bash
+$ RUST_BACKTRACE=1 rustc +stage1 error.rs -Z treat-err-as-bug
+error[E0277]: the trait bound `{integer}: std::ops::Add<()>` is not satisfied
+ --> error.rs:2:7
+ |
+2 | 1 + ();
+ | ^ no implementation for `{integer} + ()`
+ |
+ = help: the trait `std::ops::Add<()>` is not implemented for `{integer}`
+
+error: internal compiler error: unexpected panic
+
+note: the compiler unexpectedly panicked. this is a bug.
+
+note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
+
+note: rustc 1.24.0-dev running on x86_64-unknown-linux-gnu
+
+note: run with `RUST_BACKTRACE=1` for a backtrace
+
+thread 'rustc' panicked at 'encountered error with `-Z treat_err_as_bug',
+/home/user/rust/compiler/rustc_errors/src/lib.rs:411:12
+note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose
+backtrace.
+stack backtrace:
+ (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~)
+ 7: rustc::traits::error_reporting::<impl rustc::infer::InferCtxt<'a, 'tcx>>
+ ::report_selection_error
+ at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:823
+ 8: rustc::traits::error_reporting::<impl rustc::infer::InferCtxt<'a, 'tcx>>
+ ::report_fulfillment_errors
+ at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:160
+ at /home/user/rust/compiler/rustc_middle/src/traits/error_reporting.rs:112
+ 9: rustc_typeck::check::FnCtxt::select_obligations_where_possible
+ at /home/user/rust/compiler/rustc_typeck/src/check/mod.rs:2192
+ (~~~ IRRELEVANT PART OF BACKTRACE REMOVED BY ME ~~~)
+ 36: rustc_driver::run_compiler
+ at /home/user/rust/compiler/rustc_driver/src/lib.rs:253
+```
+
+Cool, now I have a backtrace for the error!
+
+## Getting logging output
+
+The compiler uses the [`tracing`] crate for logging.
+
+[`tracing`]: https://docs.rs/tracing
+
+For details see [the guide section on tracing](./tracing.md)
+
+## Formatting Graphviz output (.dot files)
+[formatting-graphviz-output]: #formatting-graphviz-output
+
+Some compiler options for debugging specific features yield graphviz graphs -
+e.g. the `#[rustc_mir(borrowck_graphviz_postflow="suffix.dot")]` attribute
+dumps various borrow-checker dataflow graphs.
+
+These all produce `.dot` files. To view these files, install graphviz (e.g.
+`apt-get install graphviz`) and then run the following commands:
+
+```bash
+$ dot -T pdf maybe_init_suffix.dot > maybe_init_suffix.pdf
+$ firefox maybe_init_suffix.pdf # Or your favorite pdf viewer
+```
+
+## Viewing Spanview output (.html files)
+[viewing-spanview-output]: #viewing-spanview-output
+
+In addition to [graphviz output](#formatting-graphviz-output-dot-files), MIR debugging
+flags include an option to generate a MIR representation called `Spanview` that
+uses HTML to highlight code regions in the original source code and display
+compiler metadata associated with each region.
+[`-Z dump-mir-spanview`](./mir/debugging.md), for example, highlights spans
+associated with each MIR `Statement`, `Terminator`, and/or `BasicBlock`.
+
+These `.html` files use CSS features to dynamically expand spans obscured by
+overlapping spans, and native tooltips (based on the HTML `title` attribute) to
+reveal the actual MIR elements, as text.
+
+To view these files, simply use a modern browser, or a CSS-capable HTML preview
+feature in a modern IDE. (The default HTML preview pane in *VS Code* is known to
+work, for instance.)
+
+## Narrowing (Bisecting) Regressions
+
+The [cargo-bisect-rustc][bisect] tool can be used as a quick and easy way to
+find exactly which PR caused a change in `rustc` behavior. It automatically
+downloads `rustc` PR artifacts and tests them against a project you provide
+until it finds the regression. You can then look at the PR to get more context
+on *why* it was changed. See [this tutorial][bisect-tutorial] on how to use
+it.
+
+[bisect]: https://github.com/rust-lang/cargo-bisect-rustc
+[bisect-tutorial]: https://github.com/rust-lang/cargo-bisect-rustc/blob/master/TUTORIAL.md
+
+## Downloading Artifacts from Rust's CI
+
+The [rustup-toolchain-install-master][rtim] tool by kennytm can be used to
+download the artifacts produced by Rust's CI for a specific SHA1 -- this
+basically corresponds to the successful landing of some PR -- and then sets
+them up for your local use. This also works for artifacts produced by `@bors
+try`. This is helpful when you want to examine the resulting build of a PR
+without doing the build yourself.
+
+[rtim]: https://github.com/kennytm/rustup-toolchain-install-master
+
+## Debugging type layouts
+
+The (permanently) unstable `#[rustc_layout]` attribute can be used to dump
+the [`Layout`] of the type it is attached to. For example:
+
+```rust
+#![feature(rustc_attrs)]
+
+#[rustc_layout(debug)]
+type T<'a> = &'a u32;
+```
+
+Will emit the following:
+
+```text
+error: layout_of(&'a u32) = Layout {
+ fields: Primitive,
+ variants: Single {
+ index: 0,
+ },
+ abi: Scalar(
+ Scalar {
+ value: Pointer,
+ valid_range: 1..=18446744073709551615,
+ },
+ ),
+ largest_niche: Some(
+ Niche {
+ offset: Size {
+ raw: 0,
+ },
+ scalar: Scalar {
+ value: Pointer,
+ valid_range: 1..=18446744073709551615,
+ },
+ },
+ ),
+ align: AbiAndPrefAlign {
+ abi: Align {
+ pow2: 3,
+ },
+ pref: Align {
+ pow2: 3,
+ },
+ },
+ size: Size {
+ raw: 8,
+ },
+}
+ --> src/lib.rs:4:1
+ |
+4 | type T<'a> = &'a u32;
+ | ^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+```
+
+[`Layout`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/abi/struct.Layout.html
diff --git a/src/doc/rustc-dev-guide/src/compiler-src.md b/src/doc/rustc-dev-guide/src/compiler-src.md
new file mode 100644
index 000000000..ad6968bb4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/compiler-src.md
@@ -0,0 +1,203 @@
+# High-level overview of the compiler source
+
+<!-- toc -->
+
+Now that we have [seen what the compiler does](./overview.md), let's take a
+look at the structure of the [`rust-lang/rust`] repository, where the rustc
+source code lives.
+
+[`rust-lang/rust`]: https://github.com/rust-lang/rust
+
+> You may find it helpful to read the ["Overview of the compiler"](./overview.md)
+> chapter, which introduces how the compiler works, before this one.
+
+## Workspace structure
+
+The `rust-lang/rust` repository consists of a single large cargo workspace
+containing the compiler, the standard libraries (`core`, `alloc`, `std`,
+`proc_macro`, etc), and `rustdoc`, along with the build system and a bunch of
+tools and submodules for building a full Rust distribution.
+
+The repository consists of three main directories:
+
+- `compiler/` contains the source code for `rustc`. It consists of many crates
+ that together make up the compiler.
+
+- `library/` contains the standard libraries (`core`, `alloc`, `std`,
+ `proc_macro`, `test`), as well as the Rust runtime (`backtrace`, `rtstartup`,
+ `lang_start`).
+
+- `src/` contains the source code for rustdoc, clippy, cargo, the build system,
+ compiler tests, language docs, etc.
+
+## Compiler
+
+The compiler is implemented in the various `compiler/` crates.
+The `compiler/` crates all have names starting with `rustc_*`. These are a
+collection of around 50 interdependent crates ranging in size from tiny to
+huge. There is also the `rustc` crate which is the actual binary (i.e. the
+`main` function); it doesn't actually do anything besides calling the
+`rustc_driver` crate, which drives the various parts of compilation in other
+crates.
+
+The dependency structure of these crates is complex, but roughly it is
+something like this:
+
+- `rustc` (the binary) calls [`rustc_driver::main`][main].
+ - [`rustc_driver`] depends on a lot of other crates, but the main one is
+ [`rustc_interface`].
+ - [`rustc_interface`] depends on most of the other compiler crates. It
+ is a fairly generic interface for driving the whole compilation.
+ - Most of the other `rustc_*` crates depend on [`rustc_middle`],
+ which defines a lot of central data structures in the compiler.
+ - [`rustc_middle`] and most of the other crates depend on a
+ handful of crates representing the early parts of the
+ compiler (e.g. the parser), fundamental data structures (e.g.
+ [`Span`]), or error reporting: [`rustc_data_structures`],
+ [`rustc_span`], [`rustc_errors`], etc.
+
+[main]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/fn.main.html
+[`rustc_driver`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/index.html
+[`rustc_interface`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/index.html
+[`rustc_middle`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/index.html
+[`rustc_data_structures`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/index.html
+[`rustc_span`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/index.html
+[`Span`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html
+[`rustc_errors`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html
+
+You can see the exact dependencies by reading the `Cargo.toml` for the various
+crates, just like a normal Rust crate.
+
+One final thing: [`src/llvm-project`] is a submodule for our fork of LLVM.
+During bootstrapping, LLVM is built and the [`compiler/rustc_llvm`] crate
+contains Rust wrappers around LLVM (which is written in C++), so that the
+compiler can interface with it.
+
+Most of this book is about the compiler, so we won't have any further
+explanation of these crates here.
+
+[`src/llvm-project`]: https://github.com/rust-lang/rust/tree/master/src/
+[`compiler/rustc_llvm`]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_llvm
+
+### Big picture
+
+The dependency structure is influenced by two main factors:
+
+1. Organization. The compiler is a _huge_ codebase; it would be an impossibly
+ large crate. In part, the dependency structure reflects the code structure
+ of the compiler.
+2. Compile time. By breaking the compiler into multiple crates, we can take
+ better advantage of incremental/parallel compilation using cargo. In
+ particular, we try to have as few dependencies between crates as possible so
+ that we don't have to rebuild as many crates if you change one.
+
+At the very bottom of the dependency tree are a handful of crates that are used
+by the whole compiler (e.g. [`rustc_span`]). The very early parts of the
+compilation process (e.g. parsing and the AST) depend on only these.
+
+After the AST is constructed and other early analysis is done, the compiler's [query system][query]
+gets set up. The query system is set up in a clever way using function
+pointers. This allows us to break dependencies between crates, allowing more
+parallel compilation.
+The query system is defined in [`rustc_middle`], so nearly all
+subsequent parts of the compiler depend on this crate. It is a really large
+crate, leading to long compile times. Some efforts have been made to move stuff
+out of it with limited success. Another unfortunate side effect is that sometimes
+related functionality gets scattered across different crates. For example,
+linting functionality is scattered across earlier parts of the crate,
+[`rustc_lint`], [`rustc_middle`], and other places.
+
+[`rustc_lint`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/index.html
+
+Ideally there would be fewer, more
+cohesive crates, with incremental and parallel compilation making sure compile
+times stay reasonable. However, our incremental and parallel compilation haven't
+gotten good enough for that yet, so breaking things into separate crates has
+been our solution so far.
+
+At the top of the dependency tree are the [`rustc_interface`] and
+[`rustc_driver`] crates. [`rustc_interface`] is an unstable wrapper around the
+query system that helps to drive the various stages of compilation. Other
+consumers of the compiler may use this interface in different ways (e.g.
+rustdoc or maybe eventually rust-analyzer). The [`rustc_driver`] crate first
+parses command line arguments and then uses [`rustc_interface`] to drive the
+compilation to completion.
+
+[query]: ./query.md
+
+[orgch]: ./overview.md
+
+## rustdoc
+
+The bulk of `rustdoc` is in [`librustdoc`]. However, the `rustdoc` binary
+itself is [`src/tools/rustdoc`], which does nothing except call [`rustdoc::main`].
+
+There is also javascript and CSS for the rustdocs in [`src/tools/rustdoc-js`]
+and [`src/tools/rustdoc-themes`].
+
+You can read more about rustdoc in [this chapter][rustdocch].
+
+[`librustdoc`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustdoc/index.html
+[`rustdoc::main`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustdoc/fn.main.html
+[`src/tools/rustdoc`]: https://github.com/rust-lang/rust/tree/master/src/tools/rustdoc
+[`src/tools/rustdoc-js`]: https://github.com/rust-lang/rust/tree/master/src/tools/rustdoc-js
+[`src/tools/rustdoc-themes`]: https://github.com/rust-lang/rust/tree/master/src/tools/rustdoc-themes
+
+[rustdocch]: ./rustdoc.md
+
+## Tests
+
+The test suite for all of the above is in [`src/test/`]. You can read more
+about the test suite [in this chapter][testsch].
+
+The test harness itself is in [`src/tools/compiletest`].
+
+[testsch]: ./tests/intro.md
+
+[`src/test/`]: https://github.com/rust-lang/rust/tree/master/src/test
+[`src/tools/compiletest`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest
+
+## Build System
+
+There are a number of tools in the repository just for building the compiler,
+standard library, rustdoc, etc, along with testing, building a full Rust
+distribution, etc.
+
+One of the primary tools is [`src/bootstrap`]. You can read more about
+bootstrapping [in this chapter][bootstch]. The process may also use other tools
+from `src/tools/`, such as [`tidy`] or [`compiletest`].
+
+[`src/bootstrap`]: https://github.com/rust-lang/rust/tree/master/src/bootstrap
+[`tidy`]: https://github.com/rust-lang/rust/tree/master/src/tools/tidy
+[`compiletest`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest
+
+[bootstch]: ./building/bootstrapping.md
+
+## Standard library
+
+The standard library crates are all in `library/`. They have intuitive names
+like `std`, `core`, `alloc`, etc. There is also `proc_macro`, `test`, and
+other runtime libraries.
+
+This code is fairly similar to most other Rust crates except that it must be
+built in a special way because it can use unstable features.
+
+## Other
+
+There are a lot of other things in the `rust-lang/rust` repo that are related
+to building a full Rust distribution. Most of the time you don't need to worry
+about them.
+
+These include:
+- [`src/ci`]: The CI configuration. This actually quite extensive because we
+ run a lot of tests on a lot of platforms.
+- [`src/doc`]: Various documentation, including submodules for a few books.
+- [`src/etc`]: Miscellaneous utilities.
+- [`src/tools/rustc-workspace-hack`], and others: Various workarounds to make
+ cargo work with bootstrapping.
+- And more...
+
+[`src/ci`]: https://github.com/rust-lang/rust/tree/master/src/ci
+[`src/doc`]: https://github.com/rust-lang/rust/tree/master/src/doc
+[`src/etc`]: https://github.com/rust-lang/rust/tree/master/src/etc
+[`src/tools/rustc-workspace-hack`]: https://github.com/rust-lang/rust/tree/master/src/tools/rustc-workspace-hack
diff --git a/src/doc/rustc-dev-guide/src/compiler-team.md b/src/doc/rustc-dev-guide/src/compiler-team.md
new file mode 100644
index 000000000..abdeac3d2
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/compiler-team.md
@@ -0,0 +1,139 @@
+# About the compiler team
+
+rustc is maintained by the [Rust compiler team][team]. The people who belong to
+this team collectively work to track regressions and implement new features.
+Members of the Rust compiler team are people who have made significant
+contributions to rustc and its design.
+
+[team]: https://www.rust-lang.org/governance/teams/compiler
+
+## Discussion
+
+Currently the compiler team chats in Zulip:
+
+- Team chat occurs in the [`t-compiler`][zulip-t-compiler] stream on the Zulip instance
+- There are also a number of other associated Zulip streams,
+ such as [`t-compiler/help`][zulip-help], where people can ask for help
+ with rustc development, or [`t-compiler/meetings`][zulip-meetings],
+ where the team holds their weekly triage and steering meetings.
+
+## Expert map
+
+If you're interested in figuring out who can answer questions about a
+particular part of the compiler, or you'd just like to know who works on what,
+check out our [experts directory][experts].
+It contains a listing of the various parts of the compiler and a list of people
+who are experts on each one.
+
+[experts]: https://github.com/rust-lang/compiler-team/blob/master/content/experts/map.toml
+
+## Rust compiler meeting
+
+The compiler team has a weekly meeting where we do triage and try to
+generally stay on top of new bugs, regressions, and discuss important
+things in general.
+They are held on [Zulip][zulip-meetings]. It works roughly as follows:
+
+- **Announcements, MCPs/FCPs, and WG-check-ins:** We share some
+ announcements with the rest of the team about important things we want
+ everyone to be aware of. We also share the status of MCPs and FCPs and we
+ use the opportunity to have a couple of WGs giving us an update about
+ their work.
+- **Check for beta and stable nominations:** These are nominations of things to
+ backport to beta and stable respectively.
+ We then look for new cases where the compiler broke previously working
+ code in the wild. Regressions are important issues to fix, so it's
+ likely that they are tagged as P-critical or P-high; the major
+ exception would be bug fixes (though even there we often [aim to give
+ warnings first][procedure]).
+- **Review P-critical and P-high bugs:** P-critical and P-high bugs are
+ those that are sufficiently important for us to actively track
+ progress. P-critical and P-high bugs should ideally always have an
+ assignee.
+- **Check S-waiting-on-team and I-nominated issues:** These are issues where feedback from
+ the team is desired.
+- **Look over the performance triage report:** We check for PRs that made the
+ performance worse and try to decide if it's worth reverting the performance regression or if
+ the regression can be addressed in a future PR.
+
+The meeting currently takes place on Thursdays at 10am Boston time
+(UTC-4 typically, but daylight savings time sometimes makes things
+complicated).
+
+[procedure]: ./bug-fix-procedure.md
+[zulip-t-compiler]: https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler
+[zulip-help]: https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp
+[zulip-meetings]: https://rust-lang.zulipchat.com/#narrow/stream/238009-t-compiler.2Fmeetings
+
+## Team membership
+
+Membership in the Rust team is typically offered when someone has been
+making significant contributions to the compiler for some
+time. Membership is both a recognition but also an obligation:
+compiler team members are generally expected to help with upkeep as
+well as doing reviews and other work.
+
+If you are interested in becoming a compiler team member, the first
+thing to do is to start fixing some bugs, or get involved in a working
+group. One good way to find bugs is to look for
+[open issues tagged with E-easy](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy)
+or
+[E-mentor](https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-mentor).
+
+You can also dig through the graveyard of PRs that were
+[closed due to inactivity](https://github.com/rust-lang/rust/pulls?q=is%3Apr+label%3AS-inactive),
+some of them may contain work that is still useful - refer to the
+associated issues, if any - and only needs some finishing touches
+for which the original author didn't have time.
+
+### r+ rights
+
+Once you have made a number of individual PRs to rustc, we will often
+offer r+ privileges. This means that you have the right to instruct
+"bors" (the robot that manages which PRs get landed into rustc) to
+merge a PR
+([here are some instructions for how to talk to bors][homu-guide]).
+
+[homu-guide]: https://bors.rust-lang.org/
+
+The guidelines for reviewers are as follows:
+
+- You are always welcome to review any PR, regardless of who it is
+ assigned to. However, do not r+ PRs unless:
+ - You are confident in that part of the code.
+ - You are confident that nobody else wants to review it first.
+ - For example, sometimes people will express a desire to review a
+ PR before it lands, perhaps because it touches a particularly
+ sensitive part of the code.
+- Always be polite when reviewing: you are a representative of the
+ Rust project, so it is expected that you will go above and beyond
+ when it comes to the [Code of Conduct].
+
+[Code of Conduct]: https://www.rust-lang.org/policies/code-of-conduct
+
+### high-five
+
+Once you have r+ rights, you can also be added to the [high-five][hi5]
+rotation. high-five is the bot that assigns incoming PRs to
+reviewers. If you are added, you will be randomly selected to review
+PRs. If you find you are assigned a PR that you don't feel comfortable
+reviewing, you can also leave a comment like `r? @so-and-so` to assign
+to someone else — if you don't know who to request, just write `r?
+@nikomatsakis for reassignment` and @nikomatsakis will pick someone
+for you.
+
+[hi5]: https://github.com/rust-highfive
+
+Getting on the high-five list is much appreciated as it lowers the
+review burden for all of us! However, if you don't have time to give
+people timely feedback on their PRs, it may be better that you don't
+get on the list.
+
+### Full team membership
+
+Full team membership is typically extended once someone made many
+contributions to the Rust compiler over time, ideally (but not
+necessarily) to multiple areas. Sometimes this might be implementing a
+new feature, but it is also important — perhaps more important! — to
+have time and willingness to help out with general upkeep such as
+bugfixes, tracking regressions, and other less glamorous work.
diff --git a/src/doc/rustc-dev-guide/src/const-eval.md b/src/doc/rustc-dev-guide/src/const-eval.md
new file mode 100644
index 000000000..5a11f8cdd
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/const-eval.md
@@ -0,0 +1,45 @@
+# Constant Evaluation
+
+Constant evaluation is the process of computing values at compile time. For a
+specific item (constant/static/array length) this happens after the MIR for the
+item is borrow-checked and optimized. In many cases trying to const evaluate an
+item will trigger the computation of its MIR for the first time.
+
+Prominent examples are:
+
+* The initializer of a `static`
+* Array length
+ * needs to be known to reserve stack or heap space
+* Enum variant discriminants
+ * needs to be known to prevent two variants from having the same
+ discriminant
+* Patterns
+ * need to be known to check for overlapping patterns
+
+Additionally constant evaluation can be used to reduce the workload or binary
+size at runtime by precomputing complex operations at compiletime and only
+storing the result.
+
+Constant evaluation can be done by calling the `const_eval_*` functions of `TyCtxt`.
+They're the wrappers of the `const_eval` query.
+
+The `const_eval_*` functions use a [`ParamEnv`](./param_env.html) of environment
+in which the constant is evaluated (e.g. the function within which the constant is used)
+and a [`GlobalId`]. The `GlobalId` is made up of an `Instance` referring to a constant
+or static or of an `Instance` of a function and an index into the function's `Promoted` table.
+
+Constant evaluation returns a [`EvalToConstValueResult`] with either the error, or a
+representation of the constant. `static` initializers are always represented as
+[`miri`](./miri.html) virtual memory allocations (via [`ConstValue::ByRef`]).
+Other constants get represented as [`ConstValue::Scalar`]
+or [`ConstValue::Slice`] if possible. This means that the `const_eval_*`
+functions cannot be used to create miri-pointers to the evaluated constant.
+If you need the value of a constant inside Miri, you need to directly work with
+[`const_to_op`].
+
+[`GlobalId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/struct.GlobalId.html
+[`ConstValue::Scalar`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/value/enum.ConstValue.html#variant.Scalar
+[`ConstValue::Slice`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/value/enum.ConstValue.html#variant.Slice
+[`ConstValue::ByRef`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/value/enum.ConstValue.html#variant.ByRef
+[`EvalToConstValueResult`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/error/type.EvalToConstValueResult.html
+[`const_to_op`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.InterpCx.html#method.const_to_op
diff --git a/src/doc/rustc-dev-guide/src/constants.md b/src/doc/rustc-dev-guide/src/constants.md
new file mode 100644
index 000000000..4f1027b98
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/constants.md
@@ -0,0 +1,82 @@
+# Constants in the type system
+
+Constants used in the type system are represented as [`ty::Const`].
+The variants of their [`ty::ConstKind`] mostly mirror the variants of [`ty::TyKind`]
+with the two *additional* variants being `ConstKind::Value` and `ConstKind::Unevaluated`.
+
+## `WithOptConstParam` and dealing with the query system
+
+To typecheck constants used in the type system, we have to know their expected type.
+For const arguments in type dependent paths, e.g. `x.foo::<{ 3 + 4 }>()`, we don't know
+the expected type for `{ 3 + 4 }` until we are typechecking the containing function.
+
+As we may however have to evaluate that constant during this typecheck, we would get a cycle error.
+For more details, you can look at [this document](https://hackmd.io/@rust-const-generics/Bk5GHW-Iq).
+
+## Unevaluated constants
+
+*This section talks about what's happening with `feature(generic_const_exprs)` enabled.
+On stable we do not yet supply any generic parameters to anonymous constants,
+avoiding most of the issues mentioned here.*
+
+Unless a constant is either a simple literal, e.g. `[u8; 3]` or `foo::<{ 'c' }>()`,
+or a generic parameter, e.g. `[u8; N]`, converting a constant to its [`ty::Const`] representation
+returns an unevaluated constant. Even fully concrete constants which do not depend on
+generic parameters are not evaluated right away.
+
+Anonymous constants are typechecked separately from their containing item, e.g.
+```rust
+fn foo<const N: usize>() -> [u8; N + 1] {
+ [0; N + 1]
+}
+```
+is treated as
+```rust
+const ANON_CONST_1<const N: usize> = N + 1;
+const ANON_CONST_2<const N: usize> = N + 1;
+fn foo<const N: usize>() -> [u8; ANON_CONST_1::<N>] {
+ [0; ANON_CONST_2::<N>]
+}
+```
+
+### Unifying constants
+
+For the compiler, `ANON_CONST_1` and `ANON_CONST_2` are completely different, so
+we have to somehow look into unevaluated constants to check whether they should
+unify.
+
+For this we use [InferCtxt::try_unify_abstract_consts](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/struct.InferCtxt.html#method.try_unify_abstract_consts).
+This builds a custom AST for the two inputs from their THIR. This is then used for
+the actual comparison.
+
+### Lazy normalization for constants
+
+We do not eagerly evaluate constant as they can be used in the `where`-clauses of their
+parent item, for example:
+
+```rust
+#[feature(generic_const_exprs)]
+fn foo<T: Trait>()
+where
+ [u8; <T as Trait>::ASSOC + 1]: SomeOtherTrait,
+{}
+```
+
+The constant `<T as Trait>::ASSOC + 1` depends on the `T: Trait` bound of
+its parents caller bounds, but is also part of another bound itself.
+If we were to eagerly evaluate this constant while computing its parents bounds
+this would cause a query cycle.
+
+### Unused generic arguments of anonymous constants
+
+Anonymous constants inherit the generic parameters of their parent, which is
+why the array length in `foo<const N: usize>() -> [u8; N + 1]` can use `N`.
+
+Without any manual adjustments, this causes us to include parameters even if
+the constant doesn't use them in any way. This can cause
+[some interesting errors][pcg-unused-substs] and breaks some already stable code.
+
+[`ty::Const`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Const.html
+[`ty::ConstKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.ConstKind.html
+[`ty::TyKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html
+[pcg-unused-substs]: https://github.com/rust-lang/project-const-generics/blob/master/design-docs/anon-const-substs.md#unused-substs \ No newline at end of file
diff --git a/src/doc/rustc-dev-guide/src/contributing.md b/src/doc/rustc-dev-guide/src/contributing.md
new file mode 100644
index 000000000..45f8c9033
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/contributing.md
@@ -0,0 +1,595 @@
+# Contributing to Rust
+
+Thank you for your interest in contributing to Rust! There are many ways to
+contribute, and we appreciate all of them.
+
+<!-- toc -->
+
+If you have questions, please make a post on [internals.rust-lang.org][internals] or
+hop on the [Rust Discord server][rust-discord] or [Rust Zulip server][rust-zulip].
+
+As a reminder, all contributors are expected to follow our [Code of Conduct][coc].
+
+If this is your first time contributing, the [Getting Started] and
+[walkthrough] chapters can give you a good example of how a typical
+contribution would go.
+
+[internals]: https://internals.rust-lang.org
+[rust-discord]: http://discord.gg/rust-lang
+[rust-zulip]: https://rust-lang.zulipchat.com
+[coc]: https://www.rust-lang.org/conduct.html
+[walkthrough]: ./walkthrough.md
+[Getting Started]: ./getting-started.md
+
+## Feature Requests
+
+Feature requests need to go through a process to be approved by the relevant
+teams. Usually this requires a Final Comment Period (FCP) or even a Request for
+Comments (RFC). See [Getting Started] for more information about these processes.
+
+## Bug Reports
+
+While bugs are unfortunate, they're a reality in software. We can't fix what we
+don't know about, so please report liberally. If you're not sure if something
+is a bug or not, feel free to file a bug anyway.
+
+**If you believe reporting your bug publicly represents a security risk to Rust users,
+please follow our [instructions for reporting security vulnerabilities][vuln]**.
+
+[vuln]: https://www.rust-lang.org/policies/security
+
+If you're using the nightly channel, please check if the bug exists in the
+latest toolchain before filing your bug. It might be fixed already.
+
+If you have the chance, before reporting a bug, please [search existing
+issues](https://github.com/rust-lang/rust/issues?q=is%3Aissue),
+as it's possible that someone else has already reported your error. This doesn't
+always work, and sometimes it's hard to know what to search for, so consider this
+extra credit. We won't mind if you accidentally file a duplicate report.
+
+Similarly, to help others who encountered the bug find your issue, consider
+filing an issue with a descriptive title, which contains information that might
+be unique to it. This can be the language or compiler feature used, the
+conditions that trigger the bug, or part of the error message if there is any.
+An example could be: **"impossible case reached" on lifetime inference for impl
+Trait in return position**.
+
+Opening an issue is as easy as following [this
+link](https://github.com/rust-lang/rust/issues/new/choose) and filling out the fields
+in the appropriate provided template.
+
+## Pull Requests
+
+Pull requests (or PRs for short) are the primary mechanism we use to change Rust.
+GitHub itself has some [great documentation][about-pull-requests] on using the
+Pull Request feature. We use the "fork and pull" model [described here][development-models],
+where contributors push changes to their personal fork and create pull requests to
+bring those changes into the source repository. We have more info about how to use git
+when contributing to Rust under [the git section](./git.md).
+
+[about-pull-requests]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
+[development-models]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/getting-started/about-collaborative-development-models#fork-and-pull-model
+
+### r?
+
+All pull requests are reviewed by another person. We have a bot,
+[@rust-highfive][rust-highfive], that will automatically assign a random person
+to review your request based on which files you changed.
+
+If you want to request that a specific person reviews your pull request, you
+can add an `r?` to the pull request description or in a comment. For example,
+if you want to ask a review to @awesome-reviewer, add
+
+ r? @awesome-reviewer
+
+to the end of the pull request description, and [@rust-highfive][rust-highfive] will assign
+them instead of a random person. This is entirely optional.
+
+You can also assign a random reviewer from a specific team by writing `r? rust-lang/groupname`.
+So if you were making a diagnostics change, then you could get a reviewer from the diagnostics
+team by adding:
+
+ r? rust-lang/diagnostics
+
+For a full list of possible `groupname` check the `groups` section at the
+[rust highfive config file](https://github.com/rust-lang/highfive/blob/master/highfive/configs/rust-lang/rust.json).
+
+### CI
+
+In addition to being reviewed by a human, pull requests are automatically tested
+thanks to continuous integration (CI). Basically, every time you open and update
+a pull request, CI builds the compiler and tests it against the
+[compiler test suite][rctd], and also performs other tests such as checking that
+your pull request is in compliance with Rust's style guidelines.
+
+Running continuous integration tests allows PR authors to catch mistakes early
+without going through a first review cycle, and also helps reviewers stay aware
+of the status of a particular pull request.
+
+Rust has plenty of CI capacity, and you should never have to worry about wasting
+computational resources each time you push a change. It is also perfectly fine
+(and even encouraged!) to use the CI to test your changes if it can help your
+productivity. In particular, we don't recommend running the full `./x.py test` suite locally,
+since it takes a very long time to execute.
+
+### r+
+
+After someone has reviewed your pull request, they will leave an annotation
+on the pull request with an `r+`. It will look something like this:
+
+ @bors r+
+
+This tells [@bors], our lovable integration bot, that your pull request has
+been approved. The PR then enters the [merge queue][merge-queue], where [@bors]
+will run *all* the tests on *every* platform we support. If it all works out,
+[@bors] will merge your code into `master` and close the pull request.
+
+Depending on the scale of the change, you may see a slightly different form of `r+`:
+
+ @bors r+ rollup
+
+The additional `rollup` tells [@bors] that this change should always be "rolled up".
+Changes that are rolled up are tested and merged alongside other PRs, to
+speed the process up. Typically only small changes that are expected not to conflict
+with one another are marked as "always roll up".
+
+[rust-highfive]: https://github.com/rust-highfive
+[@bors]: https://github.com/bors
+[merge-queue]: https://bors.rust-lang.org/queue/rust
+
+### Opening a PR
+
+You are now ready to file a pull request? Great! Here are a few points you
+should be aware of.
+
+All pull requests should be filed against the `master` branch, except in very
+particular scenarios. Unless you know for sure that you should target another
+branch, `master` will be the right choice (it's also the default).
+
+Make sure your pull request is in compliance with Rust's style guidelines by running
+
+ $ ./x.py test tidy --bless
+
+We recommend to make this check before every pull request (and every new commit
+in a pull request); you can add [git hooks](https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)
+before every push to make sure you never forget to make this check. The
+CI will also run tidy and will fail if tidy fails.
+
+Rust follows a _no merge-commit policy_, meaning, when you encounter merge
+conflicts you are expected to always rebase instead of merging. E.g. always use
+rebase when bringing the latest changes from the master branch to your feature
+branch.
+
+If you encounter merge conflicts or when a reviewer asks you to perform some
+changes, your PR will get marked as `S-waiting-on-author`. When you resolve
+them, you should use `@rustbot` to mark it as `S-waiting-on-review`:
+
+ @rustbot label -S-waiting-on-author +S-waiting-on-review
+
+See [this chapter][labeling] for more details.
+
+GitHub allows [closing issues using keywords][closing-keywords]. This feature
+should be used to keep the issue tracker tidy. However, it is generally preferred
+to put the "closes #123" text in the PR description rather than the issue commit;
+particularly during rebasing, citing the issue number in the commit can "spam"
+the issue in question.
+
+[labeling]: ./rustbot.md#issue-relabeling
+[closing-keywords]: https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue
+
+### External Dependencies (subtree)
+
+As a developer to this repository, you don't have to treat the following external projects
+differently from other crates that are directly in this repo:
+
+* [Clippy](https://github.com/rust-lang/rust-clippy)
+* [rustfmt](https://github.com/rust-lang/rustfmt)
+* [rust-analyzer](https://github.com/rust-lang/rust-analyzer)
+
+In contrast to `submodule` dependencies
+(see below for those), the `subtree` dependencies are just regular files and directories which can
+be updated in tree. However, enhancements, bug fixes, etc. specific to these tools should be filed
+against the tools directly in their respective upstream repositories.
+
+#### Synchronizing a subtree
+
+Periodically the changes made to subtree based dependencies need to be synchronized between this
+repository and the upstream tool repositories.
+
+Subtree synchronizations are typically handled by the respective tool maintainers. Other users
+are welcome to submit synchronization PRs, however, in order to do so you you will need to modify
+your local git installation and follow a very precise set of instructions.
+These instructions are documented, along with several useful tips and tricks, in the
+[syncing subtree changes][clippy-sync-docs] section in Clippy's Contributing guide.
+The instructions are applicable for use with any subtree based tool, just be sure to
+use the correct corresponding subtree directory and remote repository.
+
+The synchronization process goes in two directions: `subtree push` and `subtree pull`.
+
+A `subtree push` takes all the changes that happened to the copy in this repo and creates commits
+on the remote repo that match the local changes. Every local
+commit that touched the subtree causes a commit on the remote repo, but
+is modified to move the files from the specified directory to the tool repo root.
+
+A `subtree pull` takes all changes since the last `subtree pull`
+from the tool repo and adds these commits to the rustc repo along with a merge commit that moves
+the tool changes into the specified directory in the Rust repository.
+
+It is recommended that you always do a push first and get that merged to the tool master branch.
+Then, when you do a pull, the merge works without conflicts.
+While it's definitely possible to resolve conflicts during a pull, you may have to redo the conflict
+resolution if your PR doesn't get merged fast enough and there are new conflicts. Do not try to
+rebase the result of a `git subtree pull`, rebasing merge commits is a bad idea in general.
+
+You always need to specify the `-P` prefix to the subtree directory and the corresponding remote
+repository. If you specify the wrong directory or repository
+you'll get very fun merges that try to push the wrong directory to the wrong remote repository.
+Luckily you can just abort this without any consequences by throwing away either the pulled commits
+in rustc or the pushed branch on the remote and try again. It is usually fairly obvious
+that this is happening because you suddenly get thousands of commits that want to be synchronized.
+
+[clippy-sync-docs]: https://doc.rust-lang.org/nightly/clippy/development/infrastructure/sync.html
+
+#### Creating a new subtree dependency
+
+If you want to create a new subtree dependency from an existing repository, call (from this
+repository's root directory!)
+
+```
+git subtree add -P src/tools/clippy https://github.com/rust-lang/rust-clippy.git master
+```
+
+This will create a new commit, which you may not rebase under any circumstances! Delete the commit
+and redo the operation if you need to rebase.
+
+Now you're done, the `src/tools/clippy` directory behaves as if Clippy were
+part of the rustc monorepo, so no one but you (or others that synchronize
+subtrees) actually needs to use `git subtree`.
+
+
+### External Dependencies (submodules)
+
+Currently building Rust will also build the following external projects:
+
+* [miri](https://github.com/rust-lang/miri)
+* [rls](https://github.com/rust-lang/rls/)
+
+We allow breakage of these tools in the nightly channel. Maintainers of these
+projects will be notified of the breakages and should fix them as soon as
+possible.
+
+After the external is fixed, one could add the changes with
+
+```sh
+git add path/to/submodule
+```
+
+outside the submodule.
+
+In order to prepare your tool-fixing PR, you can run the build locally by doing
+`./x.py build src/tools/TOOL`. If you will be editing the sources
+there, you may wish to set `submodules = false` in the `config.toml`
+to prevent `x.py` from resetting to the original branch.
+
+Breakage is not allowed in the beta and stable channels, and must be addressed
+before the PR is merged.
+
+#### Breaking Tools Built With The Compiler
+
+Rust's build system builds a number of tools that make use of the internals of
+the compiler and that are hosted in a separate repository, and included in Rust
+via git submodules. This includes [RLS](https://github.com/rust-lang/rls) and
+[Miri](https://github.com/rust-lang/Miri). If these tools break because of your
+changes, you may run into a sort of "chicken and egg" problem. These tools rely
+on the latest compiler to be built so you can't update them (in their own
+repositories) to reflect your changes to the compiler until those changes are
+merged into the compiler. At the same time, you can't get your changes merged
+into the compiler because the rust-lang/rust build won't pass until those tools
+build and pass their tests.
+
+Luckily, a feature was
+[added to Rust's build](https://github.com/rust-lang/rust/issues/45861) to make
+all of this easy to handle. The idea is that we allow these tools to be
+"broken", so that the rust-lang/rust build passes without trying to build them,
+then land the change in the compiler, and go update the tools that you
+broke. Some tools will require waiting for a nightly release before this can
+happen, while others use the builds uploaded after each bors merge and thus can
+be updated immediately (check the tool's documentation for details). Once you're
+done and the tools are working again, you go back in the compiler and update the
+tools so they can be distributed again.
+
+This should avoid a bunch of synchronization dances and is also much easier on contributors as
+there's no need to block on rls/miri/other tools changes going upstream.
+
+Here are those same steps in detail:
+
+1. (optional) First, if it doesn't exist already, create a `config.toml` by copying
+ `config.toml.example` in the root directory of the Rust repository.
+ Set `submodules = false` in the `[build]` section. This will prevent `x.py`
+ from resetting to the original branch after you make your changes. If you
+ need to [update any submodules to their latest versions](#updating-submodules),
+ see the section of this file about that for more information.
+2. (optional) Run `./x.py test src/tools/rls` (substituting the submodule
+ that broke for `rls`). Fix any errors in the submodule (and possibly others).
+3. (optional) Make commits for your changes and send them to upstream repositories as a PR.
+4. (optional) Maintainers of these submodules will **not** merge the PR. The PR can't be
+ merged because CI will be broken. You'll want to write a message on the PR referencing
+ your change, and how the PR should be merged once your change makes it into a nightly.
+5. Wait for your PR to merge.
+6. Wait for a nightly
+7. (optional) Help land your PR on the upstream repository now that your changes are in nightly.
+8. (optional) Send a PR to rust-lang/rust updating the submodule.
+
+#### Updating submodules
+
+These instructions are specific to updating `rls`, however they may apply
+to the other submodules as well. Please help by improving these instructions
+if you find any discrepancies or special cases that need to be addressed.
+
+To update the `rls` submodule, start by running the appropriate
+[`git submodule` command](https://git-scm.com/book/en/v2/Git-Tools-Submodules).
+For example, to update to the latest commit on the remote master branch,
+you may want to run:
+```
+git submodule update --remote src/tools/rls
+```
+If you run `./x.py build` now, and you are lucky, it may just work. If you see
+an error message about patches that did not resolve to any crates, you will need
+to complete a few more steps which are outlined with their rationale below.
+
+*(This error may change in the future to include more information.)*
+```
+error: failed to resolve patches for `https://github.com/rust-lang/rls`
+
+Caused by:
+ patch for `rls` in `https://github.com/rust-lang/rls` did not resolve to any crates
+failed to run: ~/rust/build/x86_64-unknown-linux-gnu/stage0/bin/cargo build --manifest-path ~/rust/src/bootstrap/Cargo.toml
+```
+
+The [`[patch]`][patchsec] section of `Cargo.toml` can be very useful for
+testing. In addition to that, you should read the [Overriding
+dependencies][overriding] section of the documentation.
+
+[patchsec]: http://doc.crates.io/manifest.html#the-patch-section
+[overriding]: http://doc.crates.io/specifying-dependencies.html#overriding-dependencies
+
+Specifically, the following [section in Overriding dependencies][testingbugfix]
+reveals what the problem is:
+
+[testingbugfix]: http://doc.crates.io/specifying-dependencies.html#testing-a-bugfix
+
+> Next up we need to ensure that our lock file is updated to use this new
+> version of uuid so our project uses the locally checked out copy instead of
+> one from crates.io. The way `[patch]` works is that it'll load the dependency
+> at ../path/to/uuid and then whenever crates.io is queried for versions of
+> uuid it'll also return the local version.
+>
+> This means that the version number of the local checkout is significant and
+> will affect whether the patch is used. Our manifest declared uuid = "1.0"
+> which means we'll only resolve to >= 1.0.0, < 2.0.0, and Cargo's greedy
+> resolution algorithm also means that we'll resolve to the maximum version
+> within that range. Typically this doesn't matter as the version of the git
+> repository will already be greater or match the maximum version published on
+> crates.io, but it's important to keep this in mind!
+
+This says that when we updated the submodule, the version number in our
+`src/tools/rls/Cargo.toml` changed. The new version is different from
+the version in `Cargo.lock`, so the build can no longer continue.
+
+To resolve this, we need to update `Cargo.lock`. Luckily, cargo provides a
+command to do this easily.
+
+```
+$ cargo update -p rls
+```
+
+This should change the version listed in `Cargo.lock` to the new version you updated
+the submodule to. Running `./x.py build` should work now.
+
+## Writing Documentation
+
+Documentation improvements are very welcome. The source of `doc.rust-lang.org`
+is located in [`src/doc`] in the tree, and standard API documentation is generated
+from the source code itself (e.g. [`lib.rs`]). Documentation pull requests function
+in the same way as other pull requests.
+
+[`src/doc`]: https://github.com/rust-lang/rust/tree/master/src/doc
+[`lib.rs`]: https://github.com/rust-lang/rust/blob/master/library/std/src/lib.rs#L1
+
+To find documentation-related issues, sort by the [A-docs label][adocs].
+
+[adocs]: https://github.com/rust-lang/rust/issues?q=is%3Aopen%20is%3Aissue%20label%3AA-docs
+
+You can find documentation style guidelines in [RFC 1574][rfc1574].
+
+[rfc1574]: https://github.com/rust-lang/rfcs/blob/master/text/1574-more-api-documentation-conventions.md#appendix-a-full-conventions-text
+
+In many cases, you don't need a full `./x.py doc --stage 2`, which will build
+the entire stage 2 compiler and compile the various books published on
+[doc.rust-lang.org][docs]. When updating documentation for the standard library,
+first try `./x.py doc library`. If that fails, or if you need to
+see the output from the latest version of `rustdoc`, add `--stage 1`.
+Results should appear in `build/$TARGET/doc`.
+
+[docs]: https://doc.rust-lang.org
+
+You can also use `rustdoc` directly to check small fixes. For example,
+`rustdoc src/doc/reference.md` will render reference to `doc/reference.html`.
+The CSS might be messed up, but you can verify that the HTML is right.
+
+### Contributing to rustc-dev-guide
+
+Contributions to the [rustc-dev-guide][rdg] are always welcome, and can be made directly at
+[the rust-lang/rustc-dev-guide repo][rdgrepo].
+The issue tracker in that repo is also a great way to find things that need doing.
+There are issues for beginners and advanced compiler devs alike!
+
+Just a few things to keep in mind:
+
+- Please limit line length to 100 characters. This is enforced by CI, and you can run the checks
+ locally with `ci/check_line_lengths.sh`.
+
+- When contributing text to the guide, please contextualize the information with some time period
+ and/or a reason so that the reader knows how much to trust or mistrust the information.
+ Aim to provide a reasonable amount of context, possibly including but not limited to:
+
+ - A reason for why the data may be out of date other than "change", as change is a constant across
+ the project.
+
+ - The date the comment was added, e.g. instead of writing _"Currently, ..."_
+ or _"As of now, ..."_, consider writing
+ _"As of January 2021, ..."_.
+ Try to format the date as `<MONTH> <YEAR>` to ease search.
+
+ - Additionally, include a machine-readable comment of the form `<!-- date:
+ 2022-04 -->` (if the current month is April 2022). We have an automated
+ tool that uses these (in `ci/date-check`).
+
+ So, for the month of April 2022, the comment would look like: `As of <!--
+ date: 2022-04 --> April 2022`. Make sure to put the comment *between* `as of`
+ and `April 2022`; see [PR #1066][rdg#1066] for the rationale.
+
+ - A link to a relevant WG, tracking issue, `rustc` rustdoc page, or similar, that may provide
+ further explanation for the change process or a way to verify that the information is not
+ outdated.
+
+- If a text grows rather long (more than a few page scrolls) or complicated (more than four
+ subsections) it might benefit from having a Table of Contents at the beginning, which you can
+ auto-generate by including the `<!-- toc -->` marker.
+
+[rdg]: https://rustc-dev-guide.rust-lang.org/
+[rdgrepo]: https://github.com/rust-lang/rustc-dev-guide
+[rdg#1066]: https://github.com/rust-lang/rustc-dev-guide/pull/1066
+
+## Issue Triage
+
+Sometimes, an issue will stay open, even though the bug has been fixed. And
+sometimes, the original bug may go stale because something has changed in the
+meantime.
+
+It can be helpful to go through older bug reports and make sure that they are
+still valid. Load up an older issue, double check that it's still true, and
+leave a comment letting us know if it is or is not. The [least recently
+updated sort][lru] is good for finding issues like this.
+
+[Thanks to `@rustbot`][rustbot], anyone can help triage issues by adding
+appropriate labels to issues that haven't been triaged yet:
+
+* Yellow, **A**-prefixed labels state which **area** of the project an issue
+ relates to.
+
+* Magenta, **B**-prefixed labels identify bugs which are **blockers**.
+
+* Dark blue, **beta-** labels track changes which need to be backported into
+ the beta branches.
+
+* Light purple, **C**-prefixed labels represent the **category** of an issue.
+
+* Green, **E**-prefixed labels explain the level of **experience** necessary
+ to fix the issue.
+
+* The dark blue **final-comment-period** label marks bugs that are using the
+ RFC signoff functionality of [rfcbot] and are currently in the final
+ comment period.
+
+* Red, **I**-prefixed labels indicate the **importance** of the issue. The
+ [I-nominated][inom] label indicates that an issue has been nominated for
+ discussion at the next meeting of the team tagged using a
+ **T**-prefixed label. Similarly, the [I-prioritize][ipri] indicates
+ that an issue has been requested to be prioritized by the appropriate
+ team.
+
+* The purple **metabug** label marks lists of bugs collected by other
+ categories.
+
+* Purple gray, **O**-prefixed labels are the **operating system** or platform
+ that this issue is specific to.
+
+* Orange, **P**-prefixed labels indicate a bug's **priority**. These labels
+ can be assigned by anyone that understand the issue and is able to
+ prioritize it, and replace the [I-prioritize][ipri] label.
+
+* The gray **proposed-final-comment-period** label marks bugs that are using
+ the RFC signoff functionality of [rfcbot] and are currently awaiting
+ signoff of all team members in order to enter the final comment period.
+
+* Pink, **regression**-prefixed labels track regressions from stable to the
+ release channels.
+
+* The light orange **relnotes** label marks issues that should be documented in
+ the release notes of the next release.
+
+* Gray, **S**-prefixed labels are used for tracking the **status** of pull
+ requests.
+
+* Blue, **T**-prefixed bugs denote which **team** the issue belongs to.
+
+If you're looking for somewhere to start, check out the [E-easy][eeasy] tag.
+
+[rustbot]: ./rustbot.md
+[inom]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AI-nominated
+[ipri]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AI-prioritize
+[eeasy]: https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3AE-easy
+[lru]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-asc
+[rfcbot]: https://github.com/anp/rfcbot-rs/
+
+## Out-of-tree Contributions
+
+There are a number of other ways to contribute to Rust that don't deal with
+rust-lang/rust:
+
+* Answer questions in the _Get Help!_ channels on the [Rust Discord
+ server][rust-discord], on [users.rust-lang.org][users], or on
+ [StackOverflow][so].
+* Participate in the [RFC process](https://github.com/rust-lang/rfcs).
+* Find a [requested community library][community-library], build it, and publish
+ it to [Crates.io](http://crates.io). Easier said than done, but very, very
+ valuable!
+
+[rust-discord]: https://discord.gg/rust-lang
+[users]: https://users.rust-lang.org/
+[so]: http://stackoverflow.com/questions/tagged/rust
+[community-library]: https://github.com/rust-lang/rfcs/labels/A-community-library
+
+## Helpful Links and Information
+
+For people new to Rust, and just starting to contribute, or even for
+more seasoned developers, some useful places to look for information
+are:
+
+* This guide contains information about how various parts of the
+ compiler work and how to contribute to the compiler
+* [Rust Forge][rustforge] contains additional documentation, including
+ write-ups of how to achieve common tasks
+* The [Rust Internals forum][rif], a place to ask questions and
+ discuss Rust's internals
+* The [generated documentation for Rust's compiler][gdfrustc]
+* The [Rust reference][rr], even though it doesn't specifically talk about
+ Rust's internals, is a great resource nonetheless
+* Although out of date, [Tom Lee's great blog article][tlgba] is very helpful
+* [rustaceans.org][ro] is helpful, but mostly dedicated to IRC
+* The [Rust Compiler Testing Docs][rctd]
+* For [@bors], [this cheat sheet][cheatsheet] is helpful
+* Google is always helpful when programming.
+ You can [search all Rust documentation][gsearchdocs] (the standard library,
+ the compiler, the books, the references, and the guides) to quickly find
+ information about the language and compiler.
+* You can also use Rustdoc's built-in search feature to find documentation on
+ types and functions within the crates you're looking at. You can also search
+ by type signature! For example, searching for `* -> vec` should find all
+ functions that return a `Vec<T>`.
+ _Hint:_ Find more tips and keyboard shortcuts by typing `?` on any Rustdoc
+ page!
+* Don't be afraid to ask! The Rust community is friendly and helpful.
+
+[rustc dev guide]: about-this-guide.md
+[gdfrustc]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/
+[gsearchdocs]: https://www.google.com/search?q=site:doc.rust-lang.org+your+query+here
+[stddocs]: https://doc.rust-lang.org/std
+[rif]: http://internals.rust-lang.org
+[rr]: https://doc.rust-lang.org/book/README.html
+[rustforge]: https://forge.rust-lang.org/
+[tlgba]: https://tomlee.co/2014/04/a-more-detailed-tour-of-the-rust-compiler/
+[ro]: https://www.rustaceans.org/
+[rctd]: tests/intro.md
+[cheatsheet]: https://bors.rust-lang.org/
diff --git a/src/doc/rustc-dev-guide/src/conventions.md b/src/doc/rustc-dev-guide/src/conventions.md
new file mode 100644
index 000000000..15d125377
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/conventions.md
@@ -0,0 +1,152 @@
+This file offers some tips on the coding conventions for rustc. This
+chapter covers [formatting](#formatting), [coding for correctness](#cc),
+[using crates from crates.io](#cio), and some tips on
+[structuring your PR for easy review](#er).
+
+<a name="formatting"></a>
+
+# Formatting and the tidy script
+
+rustc is moving towards the [Rust standard coding style][fmt].
+
+However, for now we don't use stable `rustfmt`; we use a pinned version with a
+special config, so this may result in different style from normal [`rustfmt`].
+Therefore, formatting this repository using `cargo fmt` is not recommended.
+
+Instead, formatting should be done using `./x.py fmt`. It's a good habit to run
+`./x.py fmt` before every commit, as this reduces conflicts later.
+
+Formatting is checked by the `tidy` script. It runs automatically when you do
+`./x.py test` and can be run in isolation with `./x.py fmt --check`.
+
+If you want to use format-on-save in your editor, the pinned version of
+`rustfmt` is built under `build/<target>/stage0/bin/rustfmt`. You'll have to
+pass the <!-- date: 2022-04 --> `--edition=2021` argument yourself when calling
+`rustfmt` directly.
+
+[fmt]: https://github.com/rust-dev-tools/fmt-rfcs
+[`rustfmt`]:https://github.com/rust-lang/rustfmt
+
+<a name="copyright"></a>
+
+### Copyright notice
+
+In the past, files began with a copyright and license notice. Please **omit**
+this notice for new files licensed under the standard terms (dual
+MIT/Apache-2.0).
+
+All of the copyright notices should be gone by now, but if you come across one
+in the rust-lang/rust repo, feel free to open a PR to remove it.
+
+## Line length
+
+Lines should be at most 100 characters. It's even better if you can
+keep things to 80.
+
+**Ignoring the line length limit.** Sometimes – in particular for
+tests – it can be necessary to exempt yourself from this limit. In
+that case, you can add a comment towards the top of the file like so:
+
+```rust
+// ignore-tidy-linelength
+```
+
+## Tabs vs spaces
+
+Prefer 4-space indent.
+
+<a name="cc"></a>
+
+# Coding for correctness
+
+Beyond formatting, there are a few other tips that are worth
+following.
+
+## Prefer exhaustive matches
+
+Using `_` in a match is convenient, but it means that when new
+variants are added to the enum, they may not get handled correctly.
+Ask yourself: if a new variant were added to this enum, what's the
+chance that it would want to use the `_` code, versus having some
+other treatment? Unless the answer is "low", then prefer an
+exhaustive match. (The same advice applies to `if let` and `while
+let`, which are effectively tests for a single variant.)
+
+## Use "TODO" comments for things you don't want to forget
+
+As a useful tool to yourself, you can insert a `// TODO` comment
+for something that you want to get back to before you land your PR:
+
+```rust,ignore
+fn do_something() {
+ if something_else {
+ unimplemented!(); // TODO write this
+ }
+}
+```
+
+The tidy script will report an error for a `// TODO` comment, so this
+code would not be able to land until the TODO is fixed (or removed).
+
+This can also be useful in a PR as a way to signal from one commit that you are
+leaving a bug that a later commit will fix:
+
+```rust,ignore
+if foo {
+ return true; // TODO wrong, but will be fixed in a later commit
+}
+```
+
+<a name="cio"></a>
+
+# Using crates from crates.io
+
+See the [crates.io dependencies][crates] section.
+
+<a name="er"></a>
+
+# How to structure your PR
+
+How you prepare the commits in your PR can make a big difference for the
+reviewer. Here are some tips.
+
+**Isolate "pure refactorings" into their own commit.** For example, if
+you rename a method, then put that rename into its own commit, along
+with the renames of all the uses.
+
+**More commits is usually better.** If you are doing a large change,
+it's almost always better to break it up into smaller steps that can
+be independently understood. The one thing to be aware of is that if
+you introduce some code following one strategy, then change it
+dramatically (versus adding to it) in a later commit, that
+'back-and-forth' can be confusing.
+
+**Format liberally.** While only the final commit of a PR must be correctly
+formatted, it is both easier to review and less noisy to format each commit
+individually using `./x.py fmt`.
+
+**No merges.** We do not allow merge commits into our history, other
+than those by bors. If you get a merge conflict, rebase instead via a
+command like `git rebase -i rust-lang/master` (presuming you use the
+name `rust-lang` for your remote).
+
+**Individual commits do not have to build (but it's nice).** We do not
+require that every intermediate commit successfully builds – we only
+expect to be able to bisect at a PR level. However, if you *can* make
+individual commits build, that is always helpful.
+
+# Naming conventions
+
+Apart from normal Rust style/naming conventions, there are also some specific
+to the compiler.
+
+- `cx` tends to be short for "context" and is often used as a suffix. For
+ example, `tcx` is a common name for the [Typing Context][tcx].
+
+- [`'tcx`][tcx] is used as the lifetime name for the Typing Context.
+
+- Because `crate` is a keyword, if you need a variable to represent something
+ crate-related, often the spelling is changed to `krate`.
+
+[tcx]: ./ty.md
+[crates]: ./crates-io.md
diff --git a/src/doc/rustc-dev-guide/src/crates-io.md b/src/doc/rustc-dev-guide/src/crates-io.md
new file mode 100644
index 000000000..8c8fd0c38
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/crates-io.md
@@ -0,0 +1,24 @@
+# crates.io Dependencies
+
+The Rust compiler supports building with some dependencies from `crates.io`.
+For example, `log` and `env_logger` come from `crates.io`.
+
+In general, you should avoid adding dependencies to the compiler for several
+reasons:
+
+- The dependency may not be high quality or well-maintained, whereas we want
+ the compiler to be high-quality.
+- The dependency may not be using a compatible license.
+- The dependency may have transitive dependencies that have one of the above
+ problems.
+
+As of <!-- date: 2022-02 --> February 2022, there is no official policy for vetting
+new dependencies to the compiler. Generally, new dependencies are not added
+to the compiler unless there is a good reason to do so.
+
+## Permitted dependencies
+
+The `tidy` tool has [a list of crates that are allowed]. To add a
+dependency that is not already in the compiler, you will need to add it to the list.
+
+[a list of crates that are allowed]: https://github.com/rust-lang/rust/blob/9d1b2106e23b1abd32fce1f17267604a5102f57a/src/tools/tidy/src/deps.rs#L73
diff --git a/src/doc/rustc-dev-guide/src/debugging-support-in-rustc.md b/src/doc/rustc-dev-guide/src/debugging-support-in-rustc.md
new file mode 100644
index 000000000..932b23b92
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/debugging-support-in-rustc.md
@@ -0,0 +1,354 @@
+# Debugging support in the Rust compiler
+
+<!-- toc -->
+
+This document explains the state of debugging tools support in the Rust compiler (rustc).
+It gives an overview of GDB, LLDB, WinDbg/CDB,
+as well as infrastructure around Rust compiler to debug Rust code.
+If you want to learn how to debug the Rust compiler itself,
+see [Debugging the Compiler].
+
+The material is gathered from the video,
+[Tom Tromey discusses debugging support in rustc].
+
+## Preliminaries
+
+### Debuggers
+
+According to Wikipedia
+
+> A [debugger or debugging tool] is a computer program that is used to test and debug
+> other programs (the "target" program).
+
+Writing a debugger from scratch for a language requires a lot of work, especially if
+debuggers have to be supported on various platforms. GDB and LLDB, however, can be
+extended to support debugging a language. This is the path that Rust has chosen.
+This document's main goal is to document the said debuggers support in Rust compiler.
+
+### DWARF
+
+According to the [DWARF] standard website
+
+> DWARF is a debugging file format used by many compilers and debuggers to support source level
+> debugging. It addresses the requirements of a number of procedural languages,
+> such as C, C++, and Fortran, and is designed to be extensible to other languages.
+> DWARF is architecture independent and applicable to any processor or operating system.
+> It is widely used on Unix, Linux and other operating systems,
+> as well as in stand-alone environments.
+
+DWARF reader is a program that consumes the DWARF format and creates debugger compatible output.
+This program may live in the compiler itself. DWARF uses a data structure called
+Debugging Information Entry (DIE) which stores the information as "tags" to denote functions,
+variables etc., e.g., `DW_TAG_variable`, `DW_TAG_pointer_type`, `DW_TAG_subprogram` etc.
+You can also invent your own tags and attributes.
+
+### CodeView/PDB
+
+[PDB] (Program Database) is a file format created by Microsoft that contains debug information.
+PDBs can be consumed by debuggers such as WinDbg/CDB and other tools to display debug information.
+A PDB contains multiple streams that describe debug information about a specific binary such
+as types, symbols, and source files used to compile the given binary. CodeView is another
+format which defines the structure of [symbol records] and [type records] that appear within
+PDB streams.
+
+## Supported debuggers
+
+### GDB
+
+#### Rust expression parser
+
+To be able to show debug output, we need an expression parser.
+This (GDB) expression parser is written in [Bison],
+and can parse only a subset of Rust expressions.
+GDB parser was written from scratch and has no relation to any other parser,
+including that of rustc.
+
+GDB has Rust-like value and type output. It can print values and types in a way
+that look like Rust syntax in the output. Or when you print a type as [ptype] in GDB,
+it also looks like Rust source code. Checkout the documentation in the [manual for GDB/Rust].
+
+#### Parser extensions
+
+Expression parser has a couple of extensions in it to facilitate features that you cannot do
+with Rust. Some limitations are listed in the [manual for GDB/Rust]. There is some special
+code in the DWARF reader in GDB to support the extensions.
+
+A couple of examples of DWARF reader support needed are as follows:
+
+1. Enum: Needed for support for enum types.
+ The Rust compiler writes the information about enum into DWARF,
+ and GDB reads the DWARF to understand where is the tag field,
+ or if there is a tag field,
+ or if the tag slot is shared with non-zero optimization etc.
+
+2. Dissect trait objects: DWARF extension where the trait object's description in the DWARF
+ also points to a stub description of the corresponding vtable which in turn points to the
+ concrete type for which this trait object exists. This means that you can do a `print *object`
+ for that trait object, and GDB will understand how to find the correct type of the payload in
+ the trait object.
+
+**TODO**: Figure out if the following should be mentioned in the GDB-Rust document rather than
+this guide page so there is no duplication. This is regarding the following comments:
+
+[This comment by Tom](https://github.com/rust-lang/rustc-dev-guide/pull/316#discussion_r284027340)
+> gdb's Rust extensions and limitations are documented in the gdb manual:
+https://sourceware.org/gdb/onlinedocs/gdb/Rust.html -- however, this neglects to mention that
+gdb convenience variables and registers follow the gdb $ convention, and that the Rust parser
+implements the gdb @ extension.
+
+[This question by Aman](https://github.com/rust-lang/rustc-dev-guide/pull/316#discussion_r285401353)
+> @tromey do you think we should mention this part in the GDB-Rust document rather than this
+document so there is no duplication etc.?
+
+### LLDB
+
+#### Rust expression parser
+
+This expression parser is written in C++. It is a type of [Recursive Descent parser].
+It implements slightly less of the Rust language than GDB.
+LLDB has Rust-like value and type output.
+
+#### Developer notes
+
+* LLDB has a plugin architecture but that does not work for language support.
+* GDB generally works better on Linux.
+
+### WinDbg/CDB
+
+Microsoft provides [Windows Debugging Tools] such as the Windows Debugger (WinDbg) and
+the Console Debugger (CDB) which both support debugging programs written in Rust. These
+debuggers parse the debug info for a binary from the `PDB`, if available, to construct a
+visualization to serve up in the debugger.
+
+#### Natvis
+
+Both WinDbg and CDB support defining and viewing custom visualizations for any given type
+within the debugger using the Natvis framework. The Rust compiler defines a set of Natvis
+files that define custom visualizations for a subset of types in the standard libraries such
+as, `std`, `core`, and `alloc`. These Natvis files are embedded into `PDBs` generated by the
+`*-pc-windows-msvc` target triples to automatically enable these custom visualizations when
+debugging. This default can be overridden by setting the `strip` rustc flag to either `debuginfo`
+or `symbols`.
+
+Rust has support for embedding Natvis files for crates outside of the standard libraries by
+using the `#[debugger_visualizer]` attribute.
+For more details on how to embed debugger visualizers,
+please refer to the `#[debugger_visualizer]` attribute in
+[the unstable book](https://doc.rust-lang.org/unstable-book/language-features/debugger-visualizer.html).
+
+## DWARF and `rustc`
+
+[DWARF] is the standard way compilers generate debugging information that debuggers read.
+It is _the_ debugging format on macOS and Linux.
+It is a multi-language and extensible format,
+and is mostly good enough for Rust's purposes.
+Hence, the current implementation reuses DWARF's concepts.
+This is true even if some of the concepts in DWARF do not align with Rust semantically because,
+generally, there can be some kind of mapping between the two.
+
+We have some DWARF extensions that the Rust compiler emits and the debuggers understand that
+are _not_ in the DWARF standard.
+
+* Rust compiler will emit DWARF for a virtual table, and this `vtable` object will have a
+ `DW_AT_containing_type` that points to the real type. This lets debuggers dissect a trait object
+ pointer to correctly find the payload. E.g., here's such a DIE, from a test case in the gdb
+ repository:
+
+ ```asm
+ <1><1a9>: Abbrev Number: 3 (DW_TAG_structure_type)
+ <1aa> DW_AT_containing_type: <0x1b4>
+ <1ae> DW_AT_name : (indirect string, offset: 0x23d): vtable
+ <1b2> DW_AT_byte_size : 0
+ <1b3> DW_AT_alignment : 8
+ ```
+
+* The other extension is that the Rust compiler can emit a tagless discriminated union.
+ See [DWARF feature request] for this item.
+
+### Current limitations of DWARF
+
+* Traits - require a bigger change than normal to DWARF, on how to represent Traits in DWARF.
+* DWARF provides no way to differentiate between Structs and Tuples. Rust compiler emits
+fields with `__0` and debuggers look for a sequence of such names to overcome this limitation.
+For example, in this case the debugger would look at a field via `x.__0` instead of `x.0`.
+This is resolved via the Rust parser in the debugger so now you can do `x.0`.
+
+DWARF relies on debuggers to know some information about platform ABI.
+Rust does not do that all the time.
+
+## Developer notes
+
+This section is from the talk about certain aspects of development.
+
+## What is missing
+
+### Code signing for LLDB debug server on macOS
+
+According to Wikipedia, [System Integrity Protection] is
+
+> System Integrity Protection (SIP, sometimes referred to as rootless) is a security feature
+> of Apple's macOS operating system introduced in OS X El Capitan. It comprises a number of
+> mechanisms that are enforced by the kernel. A centerpiece is the protection of system-owned
+> files and directories against modifications by processes without a specific "entitlement",
+> even when executed by the root user or a user with root privileges (sudo).
+
+It prevents processes using `ptrace` syscall. If a process wants to use `ptrace` it has to be
+code signed. The certificate that signs it has to be trusted on your machine.
+
+See [Apple developer documentation for System Integrity Protection].
+
+We may need to sign up with Apple and get the keys to do this signing. Tom has looked into if
+Mozilla cannot do this because it is at the maximum number of
+keys it is allowed to sign. Tom does not know if Mozilla could get more keys.
+
+Alternatively, Tom suggests that maybe a Rust legal entity is needed to get the keys via Apple.
+This problem is not technical in nature. If we had such a key we could sign GDB as well and
+ship that.
+
+### DWARF and Traits
+
+Rust traits are not emitted into DWARF at all. The impact of this is calling a method `x.method()`
+does not work as is. The reason being that method is implemented by a trait, as opposed
+to a type. That information is not present so finding trait methods is missing.
+
+DWARF has a notion of interface types (possibly added for Java). Tom's idea was to use this
+interface type as traits.
+
+DWARF only deals with concrete names, not the reference types. So, a given implementation of a
+trait for a type would be one of these interfaces (`DW_tag_interface` type). Also, the type for
+which it is implemented would describe all the interfaces this type implements. This requires a
+DWARF extension.
+
+Issue on Github: [https://github.com/rust-lang/rust/issues/33014]
+
+## Typical process for a Debug Info change (LLVM)
+
+LLVM has Debug Info (DI) builders. This is the primary thing that Rust calls into.
+This is why we need to change LLVM first because that is emitted first and not DWARF directly.
+This is a kind of metadata that you construct and hand-off to LLVM. For the Rustc/LLVM hand-off
+some LLVM DI builder methods are called to construct representation of a type.
+
+The steps of this process are as follows:
+
+1. LLVM needs changing.
+
+ LLVM does not emit Interface types at all, so this needs to be implemented in the LLVM first.
+
+ Get sign off on LLVM maintainers that this is a good idea.
+
+2. Change the DWARF extension.
+
+3. Update the debuggers.
+
+ Update DWARF readers, expression evaluators.
+
+4. Update Rust compiler.
+
+ Change it to emit this new information.
+
+### Procedural macro stepping
+
+A deeply profound question is that how do you actually debug a procedural macro?
+What is the location you emit for a macro expansion? Consider some of the following cases -
+
+* You can emit location of the invocation of the macro.
+* You can emit the location of the definition of the macro.
+* You can emit locations of the content of the macro.
+
+RFC: [https://github.com/rust-lang/rfcs/pull/2117]
+
+Focus is to let macros decide what to do. This can be achieved by having some kind of attribute
+that lets the macro tell the compiler where the line marker should be. This affects where you
+set the breakpoints and what happens when you step it.
+
+## Source file checksums in debug info
+
+Both DWARF and CodeView (PDB) support embedding a cryptographic hash of each source file that
+contributed to the associated binary.
+
+The cryptographic hash can be used by a debugger to verify that the source file matches the
+executable. If the source file does not match, the debugger can provide a warning to the user.
+
+The hash can also be used to prove that a given source file has not been modified since it was
+used to compile an executable. Because MD5 and SHA1 both have demonstrated vulnerabilities,
+using SHA256 is recommended for this application.
+
+The Rust compiler stores the hash for each source file in the corresponding `SourceFile` in
+the `SourceMap`. The hashes of input files to external crates are stored in `rlib` metadata.
+
+A default hashing algorithm is set in the target specification. This allows the target to
+specify the best hash available, since not all targets support all hash algorithms.
+
+The hashing algorithm for a target can also be overridden with the `-Z source-file-checksum=`
+command-line option.
+
+#### DWARF 5
+DWARF version 5 supports embedding an MD5 hash to validate the source file version in use.
+DWARF 5 - Section 6.2.4.1 opcode DW_LNCT_MD5
+
+#### LLVM
+LLVM IR supports MD5 and SHA1 (and SHA256 in LLVM 11+) source file checksums in the DIFile node.
+
+[LLVM DIFile documentation](https://llvm.org/docs/LangRef.html#difile)
+
+#### Microsoft Visual C++ Compiler /ZH option
+The MSVC compiler supports embedding MD5, SHA1, or SHA256 hashes in the PDB using the `/ZH`
+compiler option.
+
+[MSVC /ZH documentation](https://docs.microsoft.com/en-us/cpp/build/reference/zh)
+
+#### Clang
+Clang always embeds an MD5 checksum, though this does not appear in documentation.
+
+## Future work
+
+#### Name mangling changes
+
+* New demangler in `libiberty` (gcc source tree).
+* New demangler in LLVM or LLDB.
+
+**TODO**: Check the location of the demangler source. [#1157](https://github.com/rust-lang/rustc-dev-guide/issues/1157)
+
+#### Reuse Rust compiler for expressions
+
+This is an important idea because debuggers by and large do not try to implement type
+inference. You need to be much more explicit when you type into the debugger than your
+actual source code. So, you cannot just copy and paste an expression from your source
+code to debugger and expect the same answer but this would be nice. This can be helped
+by using compiler.
+
+It is certainly doable but it is a large project. You certainly need a bridge to the
+debugger because the debugger alone has access to the memory. Both GDB (gcc) and LLDB (clang)
+have this feature. LLDB uses Clang to compile code to JIT and GDB can do the same with GCC.
+
+Both debuggers expression evaluation implement both a superset and a subset of Rust.
+They implement just the expression language,
+but they also add some extensions like GDB has convenience variables.
+Therefore, if you are taking this route,
+then you not only need to do this bridge,
+but may have to add some mode to let the compiler understand some extensions.
+
+[Tom Tromey discusses debugging support in rustc]: https://www.youtube.com/watch?v=elBxMRSNYr4
+[Debugging the Compiler]: compiler-debugging.md
+[debugger or debugging tool]: https://en.wikipedia.org/wiki/Debugger
+[Bison]: https://www.gnu.org/software/bison/
+[ptype]: https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_109.html
+[rust-lang/lldb wiki page]: https://github.com/rust-lang/lldb/wiki
+[DWARF]: http://dwarfstd.org
+[manual for GDB/Rust]: https://sourceware.org/gdb/onlinedocs/gdb/Rust.html
+[GDB Bugzilla]: https://sourceware.org/bugzilla/
+[Recursive Descent parser]: https://en.wikipedia.org/wiki/Recursive_descent_parser
+[System Integrity Protection]: https://en.wikipedia.org/wiki/System_Integrity_Protection
+[https://github.com/rust-dev-tools/gdb]: https://github.com/rust-dev-tools/gdb
+[DWARF feature request]: http://dwarfstd.org/ShowIssue.php?issue=180517.2
+[https://docs.python.org/3/c-api/stable.html]: https://docs.python.org/3/c-api/stable.html
+[https://github.com/rust-lang/rfcs/pull/2117]: https://github.com/rust-lang/rfcs/pull/2117
+[https://github.com/rust-lang/rust/issues/33014]: https://github.com/rust-lang/rust/issues/33014
+[https://github.com/rust-lang/rust/issues/34457]: https://github.com/rust-lang/rust/issues/34457
+[Apple developer documentation for System Integrity Protection]: https://developer.apple.com/library/archive/releasenotes/MacOSX/WhatsNewInOSX/Articles/MacOSX10_11.html#//apple_ref/doc/uid/TP40016227-SW11
+[https://github.com/rust-lang/lldb]: https://github.com/rust-lang/lldb
+[https://github.com/rust-lang/llvm-project]: https://github.com/rust-lang/llvm-project
+[PDB]: https://llvm.org/docs/PDB/index.html
+[symbol records]: https://llvm.org/docs/PDB/CodeViewSymbols.html
+[type records]: https://llvm.org/docs/PDB/CodeViewTypes.html
+[Windows Debugging Tools]: https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/
diff --git a/src/doc/rustc-dev-guide/src/diagnostics.md b/src/doc/rustc-dev-guide/src/diagnostics.md
new file mode 100644
index 000000000..0f0bfd895
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics.md
@@ -0,0 +1,936 @@
+# Errors and Lints
+
+<!-- toc -->
+
+A lot of effort has been put into making `rustc` have great error messages.
+This chapter is about how to emit compile errors and lints from the compiler.
+
+## Diagnostic structure
+
+The main parts of a diagnostic error are the following:
+
+```
+error[E0000]: main error message
+ --> file.rs:LL:CC
+ |
+LL | <code>
+ | -^^^^- secondary label
+ | |
+ | primary label
+ |
+ = note: note without a `Span`, created with `.note`
+note: sub-diagnostic message for `.span_note`
+ --> file.rs:LL:CC
+ |
+LL | more code
+ | ^^^^
+```
+
+- Level (`error`, `warning`, etc.). It indicates the severity of the message.
+ (See [diagnostic levels](#diagnostic-levels))
+- Code (for example, for "mismatched types", it is `E0308`). It helps
+ users get more information about the current error through an extended
+ description of the problem in the error code index. Diagnostics created
+ by lints don't have a code in the emitted message.
+- Message. It is the main description of the problem. It should be general and
+ able to stand on its own, so that it can make sense even in isolation.
+- Diagnostic window. This contains several things:
+ - The path, line number and column of the beginning of the primary span.
+ - The users' affected code and its surroundings.
+ - Primary and secondary spans underlying the users' code. These spans can
+ optionally contain one or more labels.
+ - Primary spans should have enough text to describe the problem in such a
+ way that if it were the only thing being displayed (for example, in an
+ IDE) it would still make sense. Because it is "spatially aware" (it
+ points at the code), it can generally be more succinct than the error
+ message.
+ - If cluttered output can be foreseen in cases when multiple span labels
+ overlap, it is a good idea to tweak the output appropriately. For
+ example, the `if/else arms have incompatible types` error uses different
+ spans depending on whether the arms are all in the same line, if one of
+ the arms is empty and if none of those cases applies.
+- Sub-diagnostics. Any error can have multiple sub-diagnostics that look
+ similar to the main part of the error. These are used for cases where the
+ order of the explanation might not correspond with the order of the code. If
+ the order of the explanation can be "order free", leveraging secondary labels
+ in the main diagnostic is preferred, as it is typically less verbose.
+
+The text should be matter of fact and avoid capitalization and periods, unless
+multiple sentences are _needed_:
+
+```txt
+error: the fobrulator needs to be krontrificated
+```
+
+When code or an identifier must appear in a message or label, it should be
+surrounded with backticks:
+
+```txt
+error: the identifier `foo.bar` is invalid
+```
+
+### Error explanations
+
+Some errors include long form descriptions. They may be viewed with the
+`--explain` flag, or via the [error index]. Each explanation comes with an
+example of how to trigger it and advice on how to fix it.
+
+Please read [RFC 1567] for details on how to format and write long error
+codes.
+
+The descriptions are written in Markdown, and all of them are linked in the
+[`rustc_error_codes`] crate.
+
+As a general rule, give an error a code (with an associated explanation) if the
+explanation would give more information than the error itself. A lot of the time
+it's better to put all the information in the emitted error itself. However,
+sometimes that would make the error verbose or there are too many possible
+triggers to include useful information for all cases in the error, in which case
+it's a good idea to add an explanation.[^estebank]
+As always, if you are not sure, just ask your reviewer!
+
+[^estebank]: This rule of thumb was suggested by **@estebank** [here][estebank-comment].
+
+[`rustc_error_codes`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_error_codes/error_codes/index.html
+[error index]: https://doc.rust-lang.org/error-index.html
+[RFC 1567]: https://github.com/rust-lang/rfcs/blob/master/text/1567-long-error-codes-explanation-normalization.md
+[estebank-comment]: https://github.com/rust-lang/rustc-dev-guide/pull/967#issuecomment-733218283
+
+### Lints versus fixed diagnostics
+
+Some messages are emitted via [lints](#lints), where the user can control the
+level. Most diagnostics are hard-coded such that the user cannot control the
+level.
+
+Usually it is obvious whether a diagnostic should be "fixed" or a lint, but
+there are some grey areas.
+
+Here are a few examples:
+
+- Borrow checker errors: these are fixed errors. The user cannot adjust the
+ level of these diagnostics to silence the borrow checker.
+- Dead code: this is a lint. While the user probably doesn't want dead code in
+ their crate, making this a hard error would make refactoring and development
+ very painful.
+- [safe_packed_borrows future compatibility warning][safe_packed_borrows]:
+ this is a silencable lint related to safety. It was judged that the making
+ this a hard (fixed) error would cause too much breakage, so instead a
+ warning is emitted that eventually will be turned into a hard error.
+
+Hard-coded warnings (those using the `span_warn` methods) should be avoided
+for normal code, preferring to use lints instead. Some cases, such as warnings
+with CLI flags, will require the use of hard-coded warnings.
+
+See the `deny` [lint level](#diagnostic-levels) below for guidelines when to
+use an error-level lint instead of a fixed error.
+
+[safe_packed_borrows]: https://github.com/rust-lang/rust/issues/46043
+
+## Diagnostic output style guide
+
+- Write in plain simple English. If your message, when shown on a – possibly
+ small – screen (which hasn't been cleaned for a while), cannot be understood
+ by a normal programmer, who just came out of bed after a night partying,
+ it's too complex.
+- `Error`, `Warning`, `Note`, and `Help` messages start with a lowercase
+ letter and do not end with punctuation.
+- Error messages should be succinct. Users will see these error messages many
+ times, and more verbose descriptions can be viewed with the `--explain`
+ flag. That said, don't make it so terse that it's hard to understand.
+- The word "illegal" is illegal. Prefer "invalid" or a more specific word
+ instead.
+- Errors should document the span of code where they occur (use
+ [`rustc_errors::diagnostic_builder::DiagnosticBuilder`][diagbuild]'s
+ `span_*` methods or a diagnostic struct's `#[primary_span]` to easily do
+ this). Also `note` other spans that have contributed to the error if the span
+ isn't too large.
+- When emitting a message with span, try to reduce the span to the smallest
+ amount possible that still signifies the issue
+- Try not to emit multiple error messages for the same error. This may require
+ detecting duplicates.
+- When the compiler has too little information for a specific error message,
+ consult with the compiler team to add new attributes for library code that
+ allow adding more information. For example see
+ [`#[rustc_on_unimplemented]`](#rustc_on_unimplemented). Use these
+ annotations when available!
+- Keep in mind that Rust's learning curve is rather steep, and that the
+ compiler messages are an important learning tool.
+- When talking about the compiler, call it `the compiler`, not `Rust` or
+ `rustc`.
+
+### Lint naming
+
+From [RFC 0344], lint names should be consistent, with the following
+guidelines:
+
+The basic rule is: the lint name should make sense when read as "allow
+*lint-name*" or "allow *lint-name* items". For example, "allow
+`deprecated` items" and "allow `dead_code`" makes sense, while "allow
+`unsafe_block`" is ungrammatical (should be plural).
+
+- Lint names should state the bad thing being checked for, e.g. `deprecated`,
+ so that `#[allow(deprecated)]` (items) reads correctly. Thus `ctypes` is not
+ an appropriate name; `improper_ctypes` is.
+
+- Lints that apply to arbitrary items (like the stability lints) should just
+ mention what they check for: use `deprecated` rather than
+ `deprecated_items`. This keeps lint names short. (Again, think "allow
+ *lint-name* items".)
+
+- If a lint applies to a specific grammatical class, mention that class and
+ use the plural form: use `unused_variables` rather than `unused_variable`.
+ This makes `#[allow(unused_variables)]` read correctly.
+
+- Lints that catch unnecessary, unused, or useless aspects of code should use
+ the term `unused`, e.g. `unused_imports`, `unused_typecasts`.
+
+- Use snake case in the same way you would for function names.
+
+[RFC 0344]: https://github.com/rust-lang/rfcs/blob/master/text/0344-conventions-galore.md#lints
+
+### Diagnostic levels
+
+Guidelines for different diagnostic levels:
+
+- `error`: emitted when the compiler detects a problem that makes it unable to
+ compile the program, either because the program is invalid or the programmer
+ has decided to make a specific `warning` into an error.
+
+- `warning`: emitted when the compiler detects something odd about a program.
+ Care should be taken when adding warnings to avoid warning fatigue, and
+ avoid false-positives where there really isn't a problem with the code. Some
+ examples of when it is appropriate to issue a warning:
+
+ - A situation where the user *should* take action, such as swap out a
+ deprecated item, or use a `Result`, but otherwise doesn't prevent
+ compilation.
+ - Unnecessary syntax that can be removed without affecting the semantics of
+ the code. For example, unused code, or unnecessary `unsafe`.
+ - Code that is very likely to be incorrect, dangerous, or confusing, but the
+ language technically allows, and is not ready or confident enough to make
+ an error. For example `unused_comparisons` (out of bounds comparisons) or
+ `bindings_with_variant_name` (the user likely did not intend to create a
+ binding in a pattern).
+ - [Future-incompatible lints](#future-incompatible), where something was
+ accidentally or erroneously accepted in the past, but rejecting would
+ cause excessive breakage in the ecosystem.
+ - Stylistic choices. For example, camel or snake case, or the `dyn` trait
+ warning in the 2018 edition. These have a high bar to be added, and should
+ only be used in exceptional circumstances. Other stylistic choices should
+ either be allow-by-default lints, or part of other tools like Clippy or
+ rustfmt.
+
+- `help`: emitted following an `error` or `warning` to give additional
+ information to the user about how to solve their problem. These messages
+ often include a suggestion string and [`rustc_errors::Applicability`]
+ confidence level to guide automated source fixes by tools. See the
+ [Suggestions](#suggestions) section for more details.
+
+ The error or warning portion should *not* suggest how to fix the problem,
+ only the "help" sub-diagnostic should.
+
+- `note`: emitted to given more context and identify additional circumstances
+ and parts of the code that caused the warning or error. For example, the
+ borrow checker will note any previous conflicting borrows.
+
+ `help` vs `note`: `help` should be used to show changes the user can
+ possibly make to fix the problem. `note` should be used for everything else,
+ such as other context, information and facts, online resources to read, etc.
+
+Not to be confused with *lint levels*, whose guidelines are:
+
+- `forbid`: Lints should never default to `forbid`.
+- `deny`: Equivalent to `error` diagnostic level. Some examples:
+
+ - A future-incompatible or edition-based lint that has graduated from the
+ warning level.
+ - Something that has an extremely high confidence that is incorrect, but
+ still want an escape hatch to allow it to pass.
+
+- `warn`: Equivalent to the `warning` diagnostic level. See `warning` above
+ for guidelines.
+- `allow`: Examples of the kinds of lints that should default to `allow`:
+
+ - The lint has a too high false positive rate.
+ - The lint is too opinionated.
+ - The lint is experimental.
+ - The lint is used for enforcing something that is not normally enforced.
+ For example, the `unsafe_code` lint can be used to prevent usage of unsafe
+ code.
+
+More information about lint levels can be found in the [rustc
+book][rustc-lint-levels] and the [reference][reference-diagnostics].
+
+[`rustc_errors::Applicability`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/enum.Applicability.html
+[reference-diagnostics]: https://doc.rust-lang.org/nightly/reference/attributes/diagnostics.html#lint-check-attributes
+[rustc-lint-levels]: https://doc.rust-lang.org/nightly/rustc/lints/levels.html
+
+## Helpful tips and options
+
+### Finding the source of errors
+
+There are two main ways to find where a given error is emitted:
+
+- `grep` for either a sub-part of the error message/label or error code. This
+ usually works well and is straightforward, but there are some cases where
+ the code emitting the error is removed from the code where the error is
+ constructed behind a relatively deep call-stack. Even then, it is a good way
+ to get your bearings.
+- Invoking `rustc` with the nightly-only flag `-Z treat-err-as-bug=1`
+ will treat the first error being emitted as an Internal Compiler Error, which
+ allows you to get a
+ stack trace at the point the error has been emitted. Change the `1` to
+ something else if you wish to trigger on a later error.
+
+ There are limitations with this approach:
+ - Some calls get elided from the stack trace because they get inlined in the compiled `rustc`.
+ - The _construction_ of the error is far away from where it is _emitted_,
+ a problem similar to the one we faced with the `grep` approach.
+ In some cases, we buffer multiple errors in order to emit them in order.
+
+The regular development practices apply: judicious use of `debug!()` statements
+and use of a debugger to trigger break points in order to figure out in what
+order things are happening.
+
+## `Span`
+
+[`Span`][span] is the primary data structure in `rustc` used to represent a
+location in the code being compiled. `Span`s are attached to most constructs in
+HIR and MIR, allowing for more informative error reporting.
+
+[span]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html
+
+A `Span` can be looked up in a [`SourceMap`][sourcemap] to get a "snippet"
+useful for displaying errors with [`span_to_snippet`][sptosnip] and other
+similar methods on the `SourceMap`.
+
+[sourcemap]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/source_map/struct.SourceMap.html
+[sptosnip]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/source_map/struct.SourceMap.html#method.span_to_snippet
+
+## Error messages
+
+The [`rustc_errors`][errors] crate defines most of the utilities used for
+reporting errors.
+
+[errors]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html
+
+Diagnostics can be implemented as types which implement the `SessionDiagnostic`
+trait. This is preferred for new diagnostics as it enforces a separation
+between diagnostic emitting logic and the main code paths. For less-complex
+diagnostics, the `SessionDiagnostic` trait can be derived -- see [Diagnostic
+structs][diagnostic-structs]. Within the trait implementation, the APIs
+described below can be used as normal.
+
+[diagnostic-structs]: ./diagnostics/diagnostic-structs.md
+
+[`Session`][session] and [`ParseSess`][parsesses] have
+methods (or fields with methods) that allow reporting errors. These methods
+usually have names like `span_err` or `struct_span_err` or `span_warn`, etc...
+There are lots of them; they emit different types of "errors", such as
+warnings, errors, fatal errors, suggestions, etc.
+
+[parsesses]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/parse/struct.ParseSess.html
+[session]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html
+
+In general, there are two classes of such methods: ones that emit an error
+directly and ones that allow finer control over what to emit. For example,
+[`span_err`][spanerr] emits the given error message at the given `Span`, but
+[`struct_span_err`][strspanerr] instead returns a
+[`DiagnosticBuilder`][diagbuild].
+
+Most of these methods will accept strings, but it is recommended that typed
+identifiers for translatable diagnostics be used for new diagnostics (see
+[Translation][translation]).
+
+[translation]: ./diagnostics/translation.md
+
+`DiagnosticBuilder` allows you to add related notes and suggestions to an error
+before emitting it by calling the [`emit`][emit] method. (Failing to either
+emit or [cancel][cancel] a `DiagnosticBuilder` will result in an ICE.) See the
+[docs][diagbuild] for more info on what you can do.
+
+[spanerr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html#method.span_err
+[strspanerr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html#method.struct_span_err
+[diagbuild]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/diagnostic_builder/struct.DiagnosticBuilder.html
+[emit]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/diagnostic_builder/struct.DiagnosticBuilder.html#method.emit
+[cancel]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.Diagnostic.html#method.cancel
+
+```rust,ignore
+// Get a DiagnosticBuilder. This does _not_ emit an error yet.
+let mut err = sess.struct_span_err(sp, fluent::example::example_error);
+
+// In some cases, you might need to check if `sp` is generated by a macro to
+// avoid printing weird errors about macro-generated code.
+
+if let Ok(snippet) = sess.source_map().span_to_snippet(sp) {
+ // Use the snippet to generate a suggested fix
+ err.span_suggestion(suggestion_sp, fluent::example::try_qux_suggestion, format!("qux {}", snippet));
+} else {
+ // If we weren't able to generate a snippet, then emit a "help" message
+ // instead of a concrete "suggestion". In practice this is unlikely to be
+ // reached.
+ err.span_help(suggestion_sp, fluent::example::qux_suggestion);
+}
+
+// emit the error
+err.emit();
+```
+
+```fluent
+example-example-error = oh no! this is an error!
+ .try-qux-suggestion = try using a qux here
+ .qux-suggestion = you could use a qux here instead
+```
+
+## Suggestions
+
+In addition to telling the user exactly _why_ their code is wrong, it's
+oftentimes furthermore possible to tell them how to fix it. To this end,
+`DiagnosticBuilder` offers a structured suggestions API, which formats code
+suggestions pleasingly in the terminal, or (when the `--error-format json` flag
+is passed) as JSON for consumption by tools, most notably the [Rust Language
+Server][rls] and [`rustfix`][rustfix].
+
+[rls]: https://github.com/rust-lang/rls
+[rustfix]: https://github.com/rust-lang/rustfix
+
+Not all suggestions should be applied mechanically, they have a degree of
+confidence in the suggested code, from high
+(`Applicability::MachineApplicable`) to low (`Applicability::MaybeIncorrect`).
+Be conservative when choosing the level. Use the
+[`span_suggestion`][span_suggestion] method of `DiagnosticBuilder` to
+make a suggestion. The last argument provides a hint to tools whether
+the suggestion is mechanically applicable or not.
+
+Suggestions point to one or more spans with corresponding code that will
+replace their current content.
+
+The message that accompanies them should be understandable in the following
+contexts:
+
+- shown as an independent sub-diagnostic (this is the default output)
+- shown as a label pointing at the affected span (this is done automatically if
+some heuristics for verbosity are met)
+- shown as a `help` sub-diagnostic with no content (used for cases where the
+suggestion is obvious from the text, but we still want to let tools to apply
+them))
+- not shown (used for _very_ obvious cases, but we still want to allow tools to
+apply them)
+
+[span_suggestion]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.DiagnosticBuilder.html#method.span_suggestion
+
+For example, to make our `qux` suggestion machine-applicable, we would do:
+
+```rust,ignore
+let mut err = sess.struct_span_err(sp, fluent::example::message);
+
+if let Ok(snippet) = sess.source_map().span_to_snippet(sp) {
+ err.span_suggestion(
+ suggestion_sp,
+ fluent::example::try_qux_suggestion,
+ format!("qux {}", snippet),
+ Applicability::MachineApplicable,
+ );
+} else {
+ err.span_help(suggestion_sp, fluent::example::qux_suggestion);
+}
+
+err.emit();
+```
+
+This might emit an error like
+
+```console
+$ rustc mycode.rs
+error[E0999]: oh no! this is an error!
+ --> mycode.rs:3:5
+ |
+3 | sad()
+ | ^ help: try using a qux here: `qux sad()`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0999`.
+```
+
+In some cases, like when the suggestion spans multiple lines or when there are
+multiple suggestions, the suggestions are displayed on their own:
+
+```console
+error[E0999]: oh no! this is an error!
+ --> mycode.rs:3:5
+ |
+3 | sad()
+ | ^
+help: try using a qux here:
+ |
+3 | qux sad()
+ | ^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0999`.
+```
+
+The possible values of [`Applicability`][appl] are:
+
+- `MachineApplicable`: Can be applied mechanically.
+- `HasPlaceholders`: Cannot be applied mechanically because it has placeholder
+ text in the suggestions. For example: ```try adding a type: `let x:
+ <type>` ```.
+- `MaybeIncorrect`: Cannot be applied mechanically because the suggestion may
+ or may not be a good one.
+- `Unspecified`: Cannot be applied mechanically because we don't know which
+ of the above cases it falls into.
+
+[appl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/enum.Applicability.html
+
+### Suggestion Style Guide
+
+- Suggestions should not be a question. In particular, language like "did you
+ mean" should be avoided. Sometimes, it's unclear why a particular suggestion
+ is being made. In these cases, it's better to be upfront about what the
+ suggestion is.
+
+ Compare "did you mean: `Foo`" vs. "there is a struct with a similar name: `Foo`".
+
+- The message should not contain any phrases like "the following", "as shown",
+ etc. Use the span to convey what is being talked about.
+- The message may contain further instruction such as "to do xyz, use" or "to do
+ xyz, use abc".
+- The message may contain a name of a function, variable, or type, but avoid
+ whole expressions.
+
+## Lints
+
+The compiler linting infrastructure is defined in the [`rustc_middle::lint`][rlint]
+module.
+
+[rlint]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/lint/index.html
+
+### Declaring a lint
+
+The built-in compiler lints are defined in the [`rustc_lint`][builtin]
+crate. Lints that need to be implemented in other crates are defined in
+[`rustc_lint_defs`]. You should prefer to place lints in `rustc_lint` if
+possible. One benefit is that it is close to the dependency root, so it can be
+much faster to work on.
+
+[builtin]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/index.html
+[`rustc_lint_defs`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint_defs/index.html
+
+Every lint is implemented via a `struct` that implements the `LintPass` `trait`
+(you can also implement one of the more specific lint pass traits, either
+`EarlyLintPass` or `LateLintPass` depending on when is best for your lint to run).
+The trait implementation allows you to check certain syntactic constructs
+as the linter walks the AST. You can then choose to emit lints in a
+very similar way to compile errors.
+
+You also declare the metadata of a particular lint via the `declare_lint!`
+macro. This includes the name, the default level, a short description, and some
+more details.
+
+Note that the lint and the lint pass must be registered with the compiler.
+
+For example, the following lint checks for uses
+of `while true { ... }` and suggests using `loop { ... }` instead.
+
+```rust,ignore
+// Declare a lint called `WHILE_TRUE`
+declare_lint! {
+ WHILE_TRUE,
+
+ // warn-by-default
+ Warn,
+
+ // This string is the lint description
+ "suggest using `loop { }` instead of `while true { }`"
+}
+
+// This declares a struct and a lint pass, providing a list of associated lints. The
+// compiler currently doesn't use the associated lints directly (e.g., to not
+// run the pass or otherwise check that the pass emits the appropriate set of
+// lints). However, it's good to be accurate here as it's possible that we're
+// going to register the lints via the get_lints method on our lint pass (that
+// this macro generates).
+declare_lint_pass!(WhileTrue => [WHILE_TRUE]);
+
+// Helper function for `WhileTrue` lint.
+// Traverse through any amount of parenthesis and return the first non-parens expression.
+fn pierce_parens(mut expr: &ast::Expr) -> &ast::Expr {
+ while let ast::ExprKind::Paren(sub) = &expr.kind {
+ expr = sub;
+ }
+ expr
+}
+
+// `EarlyLintPass` has lots of methods. We only override the definition of
+// `check_expr` for this lint because that's all we need, but you could
+// override other methods for your own lint. See the rustc docs for a full
+// list of methods.
+impl EarlyLintPass for WhileTrue {
+ fn check_expr(&mut self, cx: &EarlyContext<'_>, e: &ast::Expr) {
+ if let ast::ExprKind::While(cond, ..) = &e.kind {
+ if let ast::ExprKind::Lit(ref lit) = pierce_parens(cond).kind {
+ if let ast::LitKind::Bool(true) = lit.kind {
+ if !lit.span.from_expansion() {
+ let condition_span = cx.sess.source_map().guess_head_span(e.span);
+ cx.struct_span_lint(WHILE_TRUE, condition_span, |lint| {
+ lint.build(fluent::example::use_loop)
+ .span_suggestion_short(
+ condition_span,
+ fluent::example::suggestion,
+ "loop".to_owned(),
+ Applicability::MachineApplicable,
+ )
+ .emit();
+ })
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+```fluent
+example-use-loop = denote infinite loops with `loop {"{"} ... {"}"}`
+ .suggestion = use `loop`
+```
+
+### Edition-gated lints
+
+Sometimes we want to change the behavior of a lint in a new edition. To do this,
+we just add the transition to our invocation of `declare_lint!`:
+
+```rust,ignore
+declare_lint! {
+ pub ANONYMOUS_PARAMETERS,
+ Allow,
+ "detects anonymous parameters",
+ Edition::Edition2018 => Warn,
+}
+```
+
+This makes the `ANONYMOUS_PARAMETERS` lint allow-by-default in the 2015 edition
+but warn-by-default in the 2018 edition.
+
+### Feature-gated lints
+
+Lints belonging to a feature should only be usable if the feature is enabled in the
+crate. To support this, lint declarations can contain a feature gate like so:
+
+```rust,ignore
+declare_lint! {
+ pub SOME_LINT_NAME,
+ Warn,
+ "a new and useful, but feature gated lint",
+ @feature_gate = sym::feature_name;
+}
+```
+
+### Future-incompatible lints
+
+The use of the term `future-incompatible` within the compiler has a slightly
+broader meaning than what rustc exposes to users of the compiler.
+
+Inside rustc, future-incompatible lints are for signalling to the user that code they have
+written may not compile in the future. In general, future-incompatible code
+exists for two reasons:
+* the user has written unsound code that the compiler mistakenly accepted. While
+it is within Rust's backwards compatibility guarantees to fix the soundness hole
+(breaking the user's code), the lint is there to warn the user that this will happen
+in some upcoming version of rustc *regardless of which edition the code uses*. This is the
+meaning that rustc exclusively exposes to users as "future incompatible".
+* the user has written code that will either no longer compiler *or* will change
+meaning in an upcoming *edition*. These are often called "edition lints" and can be
+typically seen in the various "edition compatibility" lint groups (e.g., `rust_2021_compatibility`)
+that are used to lint against code that will break if the user updates the crate's edition.
+
+A future-incompatible lint should be declared with the `@future_incompatible`
+additional "field":
+
+```rust,ignore
+declare_lint! {
+ pub ANONYMOUS_PARAMETERS,
+ Allow,
+ "detects anonymous parameters",
+ @future_incompatible = FutureIncompatibleInfo {
+ reference: "issue #41686 <https://github.com/rust-lang/rust/issues/41686>",
+ reason: FutureIncompatibilityReason::EditionError(Edition::Edition2018),
+ };
+}
+```
+
+Notice the `reason` field which describes why the future incompatible change is happening.
+This will change the diagnostic message the user receives as well as determine which
+lint groups the lint is added to. In the example above, the lint is an "edition lint"
+(since it's "reason" is `EditionError`) signifying to the user that the use of anonymous
+parameters will no longer compile in Rust 2018 and beyond.
+
+Inside [LintStore::register_lints][fi-lint-groupings], lints with `future_incompatible`
+fields get placed into either edition-based lint groups (if their `reason` is tied to
+an edition) or into the `future_incompatibility` lint group.
+
+[fi-lint-groupings]: https://github.com/rust-lang/rust/blob/51fd129ac12d5bfeca7d216c47b0e337bf13e0c2/compiler/rustc_lint/src/context.rs#L212-L237
+
+If you need a combination of options that's not supported by the
+`declare_lint!` macro, you can always change the `declare_lint!` macro
+to support this.
+
+### Renaming or removing a lint
+
+If it is determined that a lint is either improperly named or no longer needed,
+the lint must be registered for renaming or removal, which will trigger a warning if a user tries
+to use the old lint name. To declare a rename/remove, add a line with
+[`store.register_renamed`] or [`store.register_removed`] to the code of the
+[`rustc_lint::register_builtins`] function.
+
+```rust,ignore
+store.register_renamed("single_use_lifetime", "single_use_lifetimes");
+```
+
+[`store.register_renamed`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/struct.LintStore.html#method.register_renamed
+[`store.register_removed`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/struct.LintStore.html#method.register_removed
+[`rustc_lint::register_builtins`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/fn.register_builtins.html
+
+### Lint Groups
+
+Lints can be turned on in groups. These groups are declared in the
+[`register_builtins`][rbuiltins] function in [`rustc_lint::lib`][builtin]. The
+`add_lint_group!` macro is used to declare a new group.
+
+[rbuiltins]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/fn.register_builtins.html
+
+For example,
+
+```rust,ignore
+add_lint_group!(sess,
+ "nonstandard_style",
+ NON_CAMEL_CASE_TYPES,
+ NON_SNAKE_CASE,
+ NON_UPPER_CASE_GLOBALS);
+```
+
+This defines the `nonstandard_style` group which turns on the listed lints. A
+user can turn on these lints with a `!#[warn(nonstandard_style)]` attribute in
+the source code, or by passing `-W nonstandard-style` on the command line.
+
+Some lint groups are created automatically in `LintStore::register_lints`. For instance,
+any lint declared with `FutureIncompatibleInfo` where the reason is
+`FutureIncompatibilityReason::FutureReleaseError` (the default when
+`@future_incompatible` is used in `declare_lint!`), will be added to
+the `future_incompatible` lint group. Editions also have their own lint groups
+(e.g., `rust_2021_compatibility`) automatically generated for any lints signaling
+future-incompatible code that will break in the specified edition.
+
+### Linting early in the compiler
+
+On occasion, you may need to define a lint that runs before the linting system
+has been initialized (e.g. during parsing or macro expansion). This is
+problematic because we need to have computed lint levels to know whether we
+should emit a warning or an error or nothing at all.
+
+To solve this problem, we buffer the lints until the linting system is
+processed. [`Session`][sessbl] and [`ParseSess`][parsebl] both have
+`buffer_lint` methods that allow you to buffer a lint for later. The linting
+system automatically takes care of handling buffered lints later.
+
+[sessbl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html#method.buffer_lint
+[parsebl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/parse/struct.ParseSess.html#method.buffer_lint
+
+Thus, to define a lint that runs early in the compilation, one defines a lint
+like normal but invokes the lint with `buffer_lint`.
+
+#### Linting even earlier in the compiler
+
+The parser (`rustc_ast`) is interesting in that it cannot have dependencies on
+any of the other `rustc*` crates. In particular, it cannot depend on
+`rustc_middle::lint` or `rustc_lint`, where all of the compiler linting
+infrastructure is defined. That's troublesome!
+
+To solve this, `rustc_ast` defines its own buffered lint type, which
+`ParseSess::buffer_lint` uses. After macro expansion, these buffered lints are
+then dumped into the `Session::buffered_lints` used by the rest of the compiler.
+
+## JSON diagnostic output
+
+The compiler accepts an `--error-format json` flag to output
+diagnostics as JSON objects (for the benefit of tools such as `cargo
+fix` or the RLS). It looks like this:
+
+```console
+$ rustc json_error_demo.rs --error-format json
+{"message":"cannot add `&str` to `{integer}`","code":{"code":"E0277","explanation":"\nYou tried to use a type which doesn't implement some trait in a place which\nexpected that trait. Erroneous code example:\n\n```compile_fail,E0277\n// here we declare the Foo trait with a bar method\ntrait Foo {\n fn bar(&self);\n}\n\n// we now declare a function which takes an object implementing the Foo trait\nfn some_func<T: Foo>(foo: T) {\n foo.bar();\n}\n\nfn main() {\n // we now call the method with the i32 type, which doesn't implement\n // the Foo trait\n some_func(5i32); // error: the trait bound `i32 : Foo` is not satisfied\n}\n```\n\nIn order to fix this error, verify that the type you're using does implement\nthe trait. Example:\n\n```\ntrait Foo {\n fn bar(&self);\n}\n\nfn some_func<T: Foo>(foo: T) {\n foo.bar(); // we can now use this method since i32 implements the\n // Foo trait\n}\n\n// we implement the trait on the i32 type\nimpl Foo for i32 {\n fn bar(&self) {}\n}\n\nfn main() {\n some_func(5i32); // ok!\n}\n```\n\nOr in a generic context, an erroneous code example would look like:\n\n```compile_fail,E0277\nfn some_func<T>(foo: T) {\n println!(\"{:?}\", foo); // error: the trait `core::fmt::Debug` is not\n // implemented for the type `T`\n}\n\nfn main() {\n // We now call the method with the i32 type,\n // which *does* implement the Debug trait.\n some_func(5i32);\n}\n```\n\nNote that the error here is in the definition of the generic function: Although\nwe only call it with a parameter that does implement `Debug`, the compiler\nstill rejects the function: It must work with all possible input types. In\norder to make this example compile, we need to restrict the generic type we're\naccepting:\n\n```\nuse std::fmt;\n\n// Restrict the input type to types that implement Debug.\nfn some_func<T: fmt::Debug>(foo: T) {\n println!(\"{:?}\", foo);\n}\n\nfn main() {\n // Calling the method is still fine, as i32 implements Debug.\n some_func(5i32);\n\n // This would fail to compile now:\n // struct WithoutDebug;\n // some_func(WithoutDebug);\n}\n```\n\nRust only looks at the signature of the called function, as such it must\nalready specify all requirements that will be used for every type parameter.\n"},"level":"error","spans":[{"file_name":"json_error_demo.rs","byte_start":50,"byte_end":51,"line_start":4,"line_end":4,"column_start":7,"column_end":8,"is_primary":true,"text":[{"text":" a + b","highlight_start":7,"highlight_end":8}],"label":"no implementation for `{integer} + &str`","suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"the trait `std::ops::Add<&str>` is not implemented for `{integer}`","code":null,"level":"help","spans":[],"children":[],"rendered":null}],"rendered":"error[E0277]: cannot add `&str` to `{integer}`\n --> json_error_demo.rs:4:7\n |\n4 | a + b\n | ^ no implementation for `{integer} + &str`\n |\n = help: the trait `std::ops::Add<&str>` is not implemented for `{integer}`\n\n"}
+{"message":"aborting due to previous error","code":null,"level":"error","spans":[],"children":[],"rendered":"error: aborting due to previous error\n\n"}
+{"message":"For more information about this error, try `rustc --explain E0277`.","code":null,"level":"","spans":[],"children":[],"rendered":"For more information about this error, try `rustc --explain E0277`.\n"}
+```
+
+Note that the output is a series of lines, each of which is a JSON
+object, but the series of lines taken together is, unfortunately, not
+valid JSON, thwarting tools and tricks (such as [piping to `python3 -m
+json.tool`](https://docs.python.org/3/library/json.html#module-json.tool))
+that require such. (One speculates that this was intentional for LSP
+performance purposes, so that each line/object can be sent to RLS as
+it is flushed?)
+
+Also note the "rendered" field, which contains the "human" output as a
+string; this was introduced so that UI tests could both make use of
+the structured JSON and see the "human" output (well, _sans_ colors)
+without having to compile everything twice.
+
+The "human" readable and the json format emitter can be found under
+`rustc_errors`, both were moved from the `rustc_ast` crate to the
+[rustc_errors crate](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html).
+
+The JSON emitter defines [its own `Diagnostic`
+struct](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/json/struct.Diagnostic.html)
+(and sub-structs) for the JSON serialization. Don't confuse this with
+[`errors::Diagnostic`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.Diagnostic.html)!
+
+## `#[rustc_on_unimplemented(...)]`
+
+The `#[rustc_on_unimplemented]` attribute allows trait definitions to add specialized
+notes to error messages when an implementation was expected but not found.
+You can refer to the trait's generic arguments by name and to the resolved type using `Self`.
+
+For example:
+
+```rust,ignore
+#![feature(rustc_attrs)]
+
+#[rustc_on_unimplemented="an iterator over elements of type `{A}` \
+ cannot be built from a collection of type `{Self}`"]
+trait MyIterator<A> {
+ fn next(&mut self) -> A;
+}
+
+fn iterate_chars<I: MyIterator<char>>(i: I) {
+ // ...
+}
+
+fn main() {
+ iterate_chars(&[1, 2, 3][..]);
+}
+```
+
+When the user compiles this, they will see the following;
+
+```txt
+error[E0277]: the trait bound `&[{integer}]: MyIterator<char>` is not satisfied
+ --> <anon>:14:5
+ |
+14 | iterate_chars(&[1, 2, 3][..]);
+ | ^^^^^^^^^^^^^ an iterator over elements of type `char` cannot be built from a collection of type `&[{integer}]`
+ |
+ = help: the trait `MyIterator<char>` is not implemented for `&[{integer}]`
+ = note: required by `iterate_chars`
+```
+
+`rustc_on_unimplemented` also supports advanced filtering for better targeting
+of messages, as well as modifying specific parts of the error message. You
+target the text of:
+
+ - the main error message (`message`)
+ - the label (`label`)
+ - an extra note (`note`)
+
+For example, the following attribute
+
+```rust,ignore
+#[rustc_on_unimplemented(
+ message="message",
+ label="label",
+ note="note"
+)]
+trait MyIterator<A> {
+ fn next(&mut self) -> A;
+}
+```
+
+Would generate the following output:
+
+```text
+error[E0277]: message
+ --> <anon>:14:5
+ |
+14 | iterate_chars(&[1, 2, 3][..]);
+ | ^^^^^^^^^^^^^ label
+ |
+ = note: note
+ = help: the trait `MyIterator<char>` is not implemented for `&[{integer}]`
+ = note: required by `iterate_chars`
+```
+
+To allow more targeted error messages, it is possible to filter the
+application of these fields based on a variety of attributes when using
+`on`:
+
+ - `crate_local`: whether the code causing the trait bound to not be
+ fulfilled is part of the user's crate. This is used to avoid suggesting
+ code changes that would require modifying a dependency.
+ - Any of the generic arguments that can be substituted in the text can be
+ referred by name as well for filtering, like `Rhs="i32"`, except for
+ `Self`.
+ - `_Self`: to filter only on a particular calculated trait resolution, like
+ `Self="std::iter::Iterator<char>"`. This is needed because `Self` is a
+ keyword which cannot appear in attributes.
+ - `direct`: user-specified rather than derived obligation.
+ - `from_method`: usable both as boolean (whether the flag is present, like
+ `crate_local`) or matching against a particular method. Currently used
+ for `try`.
+ - `from_desugaring`: usable both as boolean (whether the flag is present)
+ or matching against a particular desugaring. The desugaring is identified
+ with its variant name in the `DesugaringKind` enum.
+
+For example, the `Iterator` trait can be annotated in the following way:
+
+```rust,ignore
+#[rustc_on_unimplemented(
+ on(
+ _Self="&str",
+ note="call `.chars()` or `.as_bytes()` on `{Self}`"
+ ),
+ message="`{Self}` is not an iterator",
+ label="`{Self}` is not an iterator",
+ note="maybe try calling `.iter()` or a similar method"
+)]
+pub trait Iterator {}
+```
+
+Which would produce the following outputs:
+
+```text
+error[E0277]: `Foo` is not an iterator
+ --> src/main.rs:4:16
+ |
+4 | for foo in Foo {}
+ | ^^^ `Foo` is not an iterator
+ |
+ = note: maybe try calling `.iter()` or a similar method
+ = help: the trait `std::iter::Iterator` is not implemented for `Foo`
+ = note: required by `std::iter::IntoIterator::into_iter`
+
+error[E0277]: `&str` is not an iterator
+ --> src/main.rs:5:16
+ |
+5 | for foo in "" {}
+ | ^^ `&str` is not an iterator
+ |
+ = note: call `.chars()` or `.bytes() on `&str`
+ = help: the trait `std::iter::Iterator` is not implemented for `&str`
+ = note: required by `std::iter::IntoIterator::into_iter`
+```
+
+If you need to filter on multiple attributes, you can use `all`, `any` or
+`not` in the following way:
+
+```rust,ignore
+#[rustc_on_unimplemented(
+ on(
+ all(_Self="&str", T="std::string::String"),
+ note="you can coerce a `{T}` into a `{Self}` by writing `&*variable`"
+ )
+)]
+pub trait From<T>: Sized { /* ... */ }
+```
diff --git a/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-codes.md b/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-codes.md
new file mode 100644
index 000000000..3618b43cd
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-codes.md
@@ -0,0 +1,79 @@
+# Diagnostic codes
+We generally try to assign each error message a unique code like `E0123`. These
+codes are defined in the compiler in the `diagnostics.rs` files found in each
+crate, which basically consist of macros. The codes come in two varieties: those
+that have an extended write-up, and those that do not. Whenever possible, if you
+are making a new code, you should write an extended write-up.
+
+### Allocating a fresh code
+
+Error codes are stored in `compiler/rustc_error_codes`.
+
+To create a new error, you first need to find the next available
+code. You can find it with `tidy`:
+
+```
+./x.py test tidy
+```
+
+This will invoke the tidy script, which generally checks that your code obeys
+our coding conventions. One of those jobs is to check that diagnostic codes are
+indeed unique. Once it is finished with that, tidy will print out the lowest
+unused code:
+
+```
+...
+tidy check (x86_64-apple-darwin)
+* 470 error codes
+* highest error code: E0591
+...
+```
+
+Here we see the highest error code in use is `E0591`, so we _probably_ want
+`E0592`. To be sure, run `rg E0592` and check, you should see no references.
+
+Ideally, you will write an extended description for your error,
+which will go in `rustc_error_codes/src/error_codes/E0592.md`.
+To register the error, open `rustc_error_codes/src/error_codes.rs` and add the
+code (in its proper numerical order) into` register_diagnostics!` macro, like
+this:
+
+```rust
+register_diagnostics! {
+ ...
+ E0592: include_str!("./error_codes/E0592.md"),
+}
+```
+
+But you can also add it without an extended description:
+
+```rust
+register_diagnostics! {
+ ...
+ E0592, // put a description here
+}
+```
+
+To actually issue the error, you can use the `struct_span_err!` macro:
+
+```rust
+struct_span_err!(self.tcx.sess, // some path to the session here
+ span, // whatever span in the source you want
+ E0592, // your new error code
+ fluent::example::an_error_message)
+ .emit() // actually issue the error
+```
+
+If you want to add notes or other snippets, you can invoke methods before you
+call `.emit()`:
+
+```rust
+struct_span_err!(...)
+ .span_label(another_span, fluent::example::example_label)
+ .span_note(another_span, fluent::example::separate_note)
+ .emit_()
+```
+
+For an example of a PR adding an error code, see [#76143].
+
+[#76143]: https://github.com/rust-lang/rust/pull/76143
diff --git a/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-items.md b/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-items.md
new file mode 100644
index 000000000..b6b6e0fa9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-items.md
@@ -0,0 +1,147 @@
+# Diagnostic Items
+While writing lints it's common to check for specific types, traits and
+functions. This raises the question on how to check for these. Types can be
+checked by their complete type path. However, this requires hard coding paths
+and can lead to misclassifications in some edge cases. To counteract this,
+rustc has introduced diagnostic items that are used to identify types via
+[`Symbol`]s.
+
+## Finding diagnostic items
+Diagnostic items are added to items inside `rustc`/`std`/`core` with the
+`rustc_diagnostic_item` attribute. The item for a specific type can be found by
+opening the source code in the documentation and looking for this attribute.
+Note that it's often added with the `cfg_attr` attribute to avoid compilation
+errors during tests. A definition often looks like this:
+
+```rs
+// This is the diagnostic item for this type vvvvvvv
+#[cfg_attr(not(test), rustc_diagnostic_item = "Penguin")]
+struct Penguin;
+```
+
+Diagnostic items are usually only added to traits, types and standalone
+functions. If the goal is to check for an associated type or method, please use
+the diagnostic item of the item and reference [*How To Use Diagnostic
+Items*](#how-to-use-diagnostic-items).
+
+## Adding diagnostic items
+A new diagnostic item can be added with these two steps:
+
+1. Find the target item inside the Rust repo. Now add the diagnostic item as a
+ string via the `rustc_diagnostic_item` attribute. This can sometimes cause
+ compilation errors while running tests. These errors can be avoided by using
+ the `cfg_attr` attribute with the `not(test)` condition (it's fine adding
+ then for all `rustc_diagnostic_item` attributes as a preventive manner). At
+ the end, it should look like this:
+
+ ```rs
+ // This will be the new diagnostic item vvv
+ #[cfg_attr(not(test), rustc_diagnostic_item = "Cat")]
+ struct Cat;
+ ```
+
+ For the naming conventions of diagnostic items, please refer to
+ [*Naming Conventions*](#naming-conventions).
+
+2. As of <!-- date: 2022-02 --> February 2022, diagnostic items in code are
+ accessed via symbols in [`rustc_span::symbol::sym`]. To add your newly
+ created diagnostic item simply open the module file and add the name (In
+ this case `Cat`) at the correct point in the list.
+
+Now you can create a pull request with your changes. :tada: (Note that when
+using diagnostic items in other projects like Clippy, it might take some time
+until the repos get synchronized.)
+
+## Naming conventions
+Diagnostic items don't have a set in stone naming convention yet. These are
+some guidelines that should be used for the future, but might differ from
+existing names:
+
+* Types, traits and enums are named using UpperCamelCase (Examples: `Iterator`,
+* `HashMap`, ...)
+* For type names that are used multiple times like `Writer` it's good to choose
+ a more precise name, maybe by adding the module to it. (Example: `IoWriter`)
+* Associated items should not get their own diagnostic items, but instead be
+ accessed indirectly by the diagnostic item of the type they're originating
+ from.
+* Freestanding functions like `std::mem::swap()` should be named using
+ `snake_case` with one important (export) module as a prefix (Example:
+ `mem_swap`, `cmp_max`)
+* Modules should usually not have a diagnostic item attached to them.
+ Diagnostic items were added to avoid the usage of paths, using them on
+ modules would therefore most likely to be counterproductive.
+
+## Using diagnostic items
+In rustc, diagnostic items are looked up via [`Symbol`]s from inside the
+[`rustc_span::symbol::sym`] module. These can then be mapped to [`DefId`]s
+using [`TyCtxt::get_diagnostic_item()`] or checked if they match a [`DefId`]
+using [`TyCtxt::is_diagnostic_item()`]. When mapping from a diagnostic item to
+a [`DefId`], the method will return a `Option<DefId>`. This can be `None` if
+either the symbol isn't a diagnostic item or the type is not registered, for
+instance when compiling with `#[no_std]`. All following examples are based on
+[`DefId`]s and their usage.
+
+### Example: Checking for a type
+```rust
+use rustc_span::symbol::sym;
+
+/// This example checks if the given type (`ty`) has the type `HashMap` using
+/// `TyCtxt::is_diagnostic_item()`
+fn example_1(cx: &LateContext<'_>, ty: Ty<'_>) -> bool {
+ match ty.kind() {
+ ty::Adt(adt, _) => cx.tcx.is_diagnostic_item(sym::HashMap, adt.did),
+ _ => false,
+ }
+}
+```
+
+### Example: Checking for a trait implementation
+```rust
+/// This example checks if a given [`DefId`] from a method is part of a trait
+/// implementation defined by a diagnostic item.
+fn is_diag_trait_item(
+ cx: &LateContext<'_>,
+ def_id: DefId,
+ diag_item: Symbol
+) -> bool {
+ if let Some(trait_did) = cx.tcx.trait_of_item(def_id) {
+ return cx.tcx.is_diagnostic_item(diag_item, trait_did);
+ }
+ false
+}
+```
+
+### Associated Types
+Associated types of diagnostic items can be accessed indirectly by first
+getting the [`DefId`] of the trait and then calling
+[`TyCtxt::associated_items()`]. This returns an [`AssocItems`] object which can
+be used for further checks. Checkout
+[`clippy_utils::ty::get_iterator_item_ty()`] for an example usage of this.
+
+### Usage in Clippy
+Clippy tries to use diagnostic items where possible and has developed some
+wrapper and utility functions. Please also refer to its documentation when
+using diagnostic items in Clippy. (See [*Common tools for writing
+lints*][clippy-Common-tools-for-writing-lints].)
+
+## Related issues
+This lists some related issues. These are probably only interesting to people
+who really want to take a deep dive into the topic :)
+
+* [rust#60966]: The Rust PR that introduced diagnostic items
+* [rust-clippy#5393]: Clippy's tracking issue for moving away from hard coded paths to
+ diagnostic item
+
+<!-- Links -->
+
+[`rustc_span::symbol::sym`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/symbol/sym/index.html
+[`Symbol`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/symbol/struct.Symbol.html
+[`DefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.DefId.html
+[`TyCtxt::get_diagnostic_item()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/context/struct.TyCtxt.html#method.get_diagnostic_item
+[`TyCtxt::is_diagnostic_item()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/context/struct.TyCtxt.html#method.is_diagnostic_item
+[`TyCtxt::associated_items()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/context/struct.TyCtxt.html#method.associated_items
+[`AssocItems`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/assoc/struct.AssocItems.html
+[`clippy_utils::ty::get_iterator_item_ty()`]: https://github.com/rust-lang/rust-clippy/blob/305177342fbc622c0b3cb148467bab4b9524c934/clippy_utils/src/ty.rs#L55-L72
+[clippy-Common-tools-for-writing-lints]: https://doc.rust-lang.org/nightly/clippy/development/common_tools_writing_lints.html
+[rust#60966]: https://github.com/rust-lang/rust/pull/60966
+[rust-clippy#5393]: https://github.com/rust-lang/rust-clippy/issues/5393
diff --git a/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-structs.md b/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-structs.md
new file mode 100644
index 000000000..f28350e03
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics/diagnostic-structs.md
@@ -0,0 +1,375 @@
+# Diagnostic and subdiagnostic structs
+rustc has two diagnostic derives that can be used to create simple diagnostics,
+which are recommended to be used when they are applicable:
+`#[derive(SessionDiagnostic)]` and `#[derive(SessionSubdiagnostic)]`.
+
+Diagnostics created with the derive macros can be translated into different
+languages and each has a slug that uniquely identifies the diagnostic.
+
+## `#[derive(SessionDiagnostic)]`
+Instead of using the `DiagnosticBuilder` API to create and emit diagnostics,
+the `SessionDiagnostic` derive can be used. `#[derive(SessionDiagnostic)]` is
+only applicable for simple diagnostics that don't require much logic in
+deciding whether or not to add additional subdiagnostics.
+
+Consider the [definition][defn] of the "field already declared" diagnostic
+shown below:
+
+```rust,ignore
+#[derive(SessionDiagnostic)]
+#[error(typeck::field_already_declared, code = "E0124")]
+pub struct FieldAlreadyDeclared {
+ pub field_name: Ident,
+ #[primary_span]
+ #[label]
+ pub span: Span,
+ #[label = "previous-decl-label"]
+ pub prev_span: Span,
+}
+```
+
+`SessionDiagnostic` can only be applied to structs. Every `SessionDiagnostic`
+has to have one attribute applied to the struct itself: either `#[error(..)]`
+for defining errors, or `#[warning(..)]` for defining warnings.
+
+If an error has an error code (e.g. "E0624"), then that can be specified using
+the `code` sub-attribute. Specifying a `code` isn't mandatory, but if you are
+porting a diagnostic that uses `DiagnosticBuilder` to use `SessionDiagnostic`
+then you should keep the code if there was one.
+
+Both `#[error(..)]` and `#[warning(..)]` must provide a slug as the first
+positional argument (a path to an item in `rustc_errors::fluent::*`). A slug
+uniquely identifies the diagnostic and is also how the compiler knows what
+error message to emit (in the default locale of the compiler, or in the locale
+requested by the user). See [translation documentation](./translation.md) to
+learn more about how translatable error messages are written and how slug
+items are generated.
+
+In our example, the Fluent message for the "field already declared" diagnostic
+looks like this:
+
+```fluent
+typeck-field-already-declared =
+ field `{$field_name}` is already declared
+ .label = field already declared
+ .previous-decl-label = `{$field_name}` first declared here
+```
+
+`typeck-field-already-declared` is the slug from our example and is followed
+by the diagnostic message.
+
+Every field of the `SessionDiagnostic` which does not have an annotation is
+available in Fluent messages as a variable, like `field_name` in the example
+above. Fields can be annotated `#[skip_arg]` if this is undesired.
+
+Using the `#[primary_span]` attribute on a field (that has type `Span`)
+indicates the primary span of the diagnostic which will have the main message
+of the diagnostic.
+
+Diagnostics are more than just their primary message, they often include
+labels, notes, help messages and suggestions, all of which can also be
+specified on a `SessionDiagnostic`.
+
+`#[label]`, `#[help]` and `#[note]` can all be applied to fields which have the
+type `Span`. Applying any of these attributes will create the corresponding
+subdiagnostic with that `Span`. These attributes will look for their
+diagnostic message in a Fluent attribute attached to the primary Fluent
+message. In our example, `#[label]` will look for
+`typeck-field-already-declared.label` (which has the message "field already
+declared"). If there is more than one subdiagnostic of the same type, then
+these attributes can also take a value that is the attribute name to look for
+(e.g. `previous-decl-label` in our example).
+
+Other types have special behavior when used in a `SessionDiagnostic` derive:
+
+- Any attribute applied to an `Option<T>` and will only emit a
+ subdiagnostic if the option is `Some(..)`.
+- Any attribute applied to a `Vec<T>` will be repeated for each element of the
+ vector.
+
+`#[help]` and `#[note]` can also be applied to the struct itself, in which case
+they work exactly like when applied to fields except the subdiagnostic won't
+have a `Span`. These attributes can also be applied to fields of type `()` for
+the same effect, which when combined with the `Option` type can be used to
+represent optional `#[note]`/`#[help]` subdiagnostics.
+
+Suggestions can be emitted using one of four field attributes:
+
+- `#[suggestion(message = "...", code = "...", applicability = "...")]`
+- `#[suggestion_hidden(message = "...", code = "...", applicability = "...")]`
+- `#[suggestion_short(message = "...", code = "...", applicability = "...")]`
+- `#[suggestion_verbose(message = "...", code = "...", applicability = "...")]`
+
+Suggestions must be applied on either a `Span` field or a `(Span,
+MachineApplicability)` field. Similarly to other field attributes, `message`
+specifies the Fluent attribute with the message and defaults to `.suggestion`.
+`code` specifies the code that should be suggested as a replacement and is a
+format string (e.g. `{field_name}` would be replaced by the value of the
+`field_name` field of the struct), not a Fluent identifier. `applicability` can
+be used to specify the applicability in the attribute, it cannot be used when
+the field's type contains an `Applicability`.
+
+In the end, the `SessionDiagnostic` derive will generate an implementation of
+`SessionDiagnostic` that looks like the following:
+
+```rust,ignore
+impl SessionDiagnostic for FieldAlreadyDeclared {
+ fn into_diagnostic(self, sess: &'_ rustc_session::Session) -> DiagnosticBuilder<'_> {
+ let mut diag = sess.struct_err_with_code(
+ rustc_errors::DiagnosticMessage::fluent("typeck-field-already-declared"),
+ rustc_errors::DiagnosticId::Error("E0124")
+ );
+ diag.set_span(self.span);
+ diag.span_label(
+ self.span,
+ rustc_errors::DiagnosticMessage::fluent_attr("typeck-field-already-declared", "label")
+ );
+ diag.span_label(
+ self.prev_span,
+ rustc_errors::DiagnosticMessage::fluent_attr("typeck-field-already-declared", "previous-decl-label")
+ );
+ diag
+ }
+}
+```
+
+Now that we've defined our diagnostic, how do we [use it][use]? It's quite
+straightforward, just create an instance of the struct and pass it to
+`emit_err` (or `emit_warning`):
+
+```rust,ignore
+tcx.sess.emit_err(FieldAlreadyDeclared {
+ field_name: f.ident,
+ span: f.span,
+ prev_span,
+});
+```
+
+### Reference
+`#[derive(SessionDiagnostic)]` supports the following attributes:
+
+- `#[error(slug, code = "...")]` or `#[warning(slug, code = "...")]`
+ - _Applied to struct._
+ - _Mandatory_
+ - Defines the struct to be representing an error or a warning.
+ - Slug (_Mandatory_)
+ - Uniquely identifies the diagnostic and corresponds to its Fluent message,
+ mandatory.
+ - A path to an item in `rustc_errors::fluent`. Always in a module starting
+ with a Fluent resource name (which is typically the name of the crate
+ that the diagnostic is from), e.g.
+ `rustc_errors::fluent::typeck::field_already_declared`
+ (`rustc_errors::fluent` is implicit in the attribute, so just
+ `typeck::field_already_declared`).
+ - See [translation documentation](./translation.md).
+ - `code = "..."` (_Optional_)
+ - Specifies the error code.
+- `#[note]` or `#[note = "..."]` (_Optional_)
+ - _Applied to struct or `Span`/`()` fields._
+ - Adds a note subdiagnostic.
+ - Value is the Fluent attribute (relative to the Fluent message specified by
+ `slug`) for the note's message
+ - Defaults to `note`.
+ - If applied to a `Span` field, creates a spanned note.
+- `#[help]` or `#[help = "..."]` (_Optional_)
+ - _Applied to struct or `Span`/`()` fields._
+ - Adds a help subdiagnostic.
+ - Value is the Fluent attribute (relative to the Fluent message specified by
+ `slug`) for the help's message.
+ - Defaults to `help`.
+ - If applied to a `Span` field, creates a spanned help.
+- `#[label]` or `#[label = "..."]` (_Optional_)
+ - _Applied to `Span` fields._
+ - Adds a label subdiagnostic.
+ - Value is the Fluent attribute (relative to the Fluent message specified by
+ `slug`) for the label's message.
+ - Defaults to `label`.
+- `#[suggestion{,_hidden,_short,_verbose}(message = "...", code = "...", applicability = "...")]`
+ (_Optional_)
+ - _Applied to `(Span, MachineApplicability)` or `Span` fields._
+ - Adds a suggestion subdiagnostic.
+ - `message = "..."` (_Mandatory_)
+ - Value is the Fluent attribute (relative to the Fluent message specified
+ by `slug`) for the suggestion's message.
+ - Defaults to `suggestion`.
+ - `code = "..."` (_Mandatory_)
+ - Value is a format string indicating the code to be suggested as a
+ replacement.
+ - `applicability = "..."` (_Optional_)
+ - String which must be one of `machine-applicable`, `maybe-incorrect`,
+ `has-placeholders` or `unspecified`.
+- `#[subdiagnostic]`
+ - _Applied to a type that implements `AddToDiagnostic` (from
+ `#[derive(SessionSubdiagnostic)]`)._
+ - Adds the subdiagnostic represented by the subdiagnostic struct.
+- `#[primary_span]` (_Optional_)
+ - _Applied to `Span` fields._
+ - Indicates the primary span of the diagnostic.
+- `#[skip_arg]` (_Optional_)
+ - _Applied to any field._
+ - Prevents the field from being provided as a diagnostic argument.
+
+## `#[derive(SessionSubdiagnostic)]`
+It is common in the compiler to write a function that conditionally adds a
+specific subdiagnostic to an error if it is applicable. Oftentimes these
+subdiagnostics could be represented using a diagnostic struct even if the
+overall diagnostic could not. In this circumstance, the `SessionSubdiagnostic`
+derive can be used to represent a partial diagnostic (e.g a note, label, help or
+suggestion) as a struct.
+
+Consider the [definition][subdiag_defn] of the "expected return type" label
+shown below:
+
+```rust
+#[derive(SessionSubdiagnostic)]
+pub enum ExpectedReturnTypeLabel<'tcx> {
+ #[label(typeck::expected_default_return_type)]
+ Unit {
+ #[primary_span]
+ span: Span,
+ },
+ #[label(typeck::expected_return_type)]
+ Other {
+ #[primary_span]
+ span: Span,
+ expected: Ty<'tcx>,
+ },
+}
+```
+
+Unlike `SessionDiagnostic`, `SessionSubdiagnostic` can be applied to structs or
+enums. Attributes that are placed on the type for structs are placed on each
+variants for enums (or vice versa). Each `SessionSubdiagnostic` should have one
+attribute applied to the struct or each variant, one of:
+
+- `#[label(..)]` for defining a label
+- `#[note(..)]` for defining a note
+- `#[help(..)]` for defining a help
+- `#[suggestion{,_hidden,_short,_verbose}(..)]` for defining a suggestion
+
+All of the above must provide a slug as the first positional argument (a path
+to an item in `rustc_errors::fluent::*`). A slug uniquely identifies the
+diagnostic and is also how the compiler knows what error message to emit (in
+the default locale of the compiler, or in the locale requested by the user).
+See [translation documentation](./translation.md) to learn more about how
+translatable error messages are written and how slug items are generated.
+
+In our example, the Fluent message for the "expected return type" label
+looks like this:
+
+```fluent
+typeck-expected-default-return-type = expected `()` because of default return type
+
+typeck-expected-return-type = expected `{$expected}` because of return type
+```
+
+Using the `#[primary_span]` attribute on a field (with type `Span`) will denote
+the primary span of the subdiagnostic. A primary span is only necessary for a
+label or suggestion, which can not be spanless.
+
+Every field of the type/variant which does not have an annotation is available
+in Fluent messages as a variable. Fields can be annotated `#[skip_arg]` if this
+is undesired.
+
+Like `SessionDiagnostic`, `SessionSubdiagnostic` supports `Option<T>` and
+`Vec<T>` fields.
+
+Suggestions can be emitted using one of four attributes on the type/variant:
+
+- `#[suggestion(message = "...", code = "...", applicability = "...")]`
+- `#[suggestion_hidden(message = "...", code = "...", applicability = "...")]`
+- `#[suggestion_short(message = "...", code = "...", applicability = "...")]`
+- `#[suggestion_verbose(message = "...", code = "...", applicability = "...")]`
+
+Suggestions require `#[primary_span]` be set on a field and can have the
+following sub-attributes:
+
+- `message` specifies the Fluent attribute with the message and defaults to
+ `.suggestion`.
+- `code` specifies the code that should be suggested as a replacement and is a
+ format string (e.g. `{field_name}` would be replaced by the value of the
+ `field_name` field of the struct), not a Fluent identifier.
+- `applicability` can be used to specify the applicability in the attribute, it
+ cannot be used when the field's type contains an `Applicability`.
+
+Applicabilities can also be specified as a field (of type `Applicability`)
+using the `#[applicability]` attribute.
+
+In the end, the `SessionSubdiagnostic` derive will generate an implementation
+of `SessionSubdiagnostic` that looks like the following:
+
+```rust
+impl<'tcx> AddToDiagnostic for ExpectedReturnTypeLabel<'tcx> {
+ fn add_to_diagnostic(self, diag: &mut rustc_errors::Diagnostic) {
+ use rustc_errors::{Applicability, IntoDiagnosticArg};
+ match self {
+ ExpectedReturnTypeLabel::Unit { span } => {
+ diag.span_label(span, DiagnosticMessage::fluent("typeck-expected-default-return-type"))
+ }
+ ExpectedReturnTypeLabel::Other { span, expected } => {
+ diag.set_arg("expected", expected);
+ diag.span_label(span, DiagnosticMessage::fluent("typeck-expected-return-type"))
+ }
+
+ }
+ }
+}
+```
+
+Once defined, a subdiagnostic can be used by passing it to the `subdiagnostic`
+function ([example][subdiag_use_1] and [example][subdiag_use_2]) on a
+diagnostic or by assigning it to a `#[subdiagnostic]`-annotated field of a
+diagnostic struct.
+
+### Reference
+`#[derive(SessionSubdiagnostic)]` supports the following attributes:
+
+- `#[label(slug)]`, `#[help(slug)]` or `#[note(slug)]`
+ - _Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes._
+ - _Mandatory_
+ - Defines the type to be representing a label, help or note.
+ - Slug (_Mandatory_)
+ - Uniquely identifies the diagnostic and corresponds to its Fluent message,
+ mandatory.
+ - A path to an item in `rustc_errors::fluent`. Always in a module starting
+ with a Fluent resource name (which is typically the name of the crate
+ that the diagnostic is from), e.g.
+ `rustc_errors::fluent::typeck::field_already_declared`
+ (`rustc_errors::fluent` is implicit in the attribute, so just
+ `typeck::field_already_declared`).
+ - See [translation documentation](./translation.md).
+- `#[suggestion{,_hidden,_short,_verbose}(message = "...", code = "...", applicability = "...")]`
+ - _Applied to struct or enum variant. Mutually exclusive with struct/enum variant attributes._
+ - _Mandatory_
+ - Defines the type to be representing a suggestion.
+ - `message = "..."` (_Mandatory_)
+ - Value is the Fluent attribute (relative to the Fluent message specified
+ by `slug`) for the suggestion's message.
+ - Defaults to `suggestion`.
+ - `code = "..."` (_Mandatory_)
+ - Value is a format string indicating the code to be suggested as a
+ replacement.
+ - `applicability = "..."` (_Optional_)
+ - _Mutually exclusive with `#[applicability]` on a field._
+ - Value is the applicability of the suggestion.
+ - String which must be one of:
+ - `machine-applicable`
+ - `maybe-incorrect`
+ - `has-placeholders`
+ - `unspecified`
+- `#[primary_span]` (_Mandatory_ for labels and suggestions; _optional_ otherwise)
+ - _Applied to `Span` fields._
+ - Indicates the primary span of the subdiagnostic.
+- `#[applicability]` (_Optional_; only applicable to suggestions)
+ - _Applied to `Applicability` fields._
+ - Indicates the applicability of the suggestion.
+- `#[skip_arg]` (_Optional_)
+ - _Applied to any field._
+ - Prevents the field from being provided as a diagnostic argument.
+
+[defn]: https://github.com/rust-lang/rust/blob/bbe9d27b8ff36da56638aa43d6d0cdfdf89a4e57/compiler/rustc_typeck/src/errors.rs#L65-L74
+[use]: https://github.com/rust-lang/rust/blob/eb82facb1626166188d49599a3313fc95201f556/compiler/rustc_typeck/src/collect.rs#L981-L985
+
+[subdiag_defn]: https://github.com/rust-lang/rust/blob/e70c60d34b9783a2fd3171d88d248c2e0ec8ecdd/compiler/rustc_typeck/src/errors.rs#L220-L233
+[subdiag_use_1]: https://github.com/rust-lang/rust/blob/e70c60d34b9783a2fd3171d88d248c2e0ec8ecdd/compiler/rustc_typeck/src/check/fn_ctxt/suggestions.rs#L556-L560
+[subdiag_use_2]: https://github.com/rust-lang/rust/blob/e70c60d34b9783a2fd3171d88d248c2e0ec8ecdd/compiler/rustc_typeck/src/check/fn_ctxt/suggestions.rs#L575-L579
diff --git a/src/doc/rustc-dev-guide/src/diagnostics/error-guaranteed.md b/src/doc/rustc-dev-guide/src/diagnostics/error-guaranteed.md
new file mode 100644
index 000000000..d92ba62ab
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics/error-guaranteed.md
@@ -0,0 +1,34 @@
+# `ErrorGuaranteed`
+The previous sections have been about the error message that a user of the
+compiler sees. But emitting an error can also have a second important side
+effect within the compiler source code: it generates an
+[`ErrorGuaranteed`][errorguar].
+
+`ErrorGuaranteed` is a zero-sized type that is unconstructable outside of the
+[`rustc_errors`][rerrors] crate. It is generated whenever an error is reported
+to the user, so that if your compiler code ever encounters a value of type
+`ErrorGuaranteed`, the compilation is _statically guaranteed to fail_. This is
+useful for avoiding unsoundness bugs because you can statically check that an
+error code path leads to a failure.
+
+There are some important considerations about the usage of `ErrorGuaranteed`:
+
+* It does _not_ convey information about the _kind_ of error. For example, the
+ error may be due (indirectly) to a `delay_span_bug` or other compiler error.
+ Thus, you should not rely on
+ `ErrorGuaranteed` when deciding whether to emit an error, or what kind of error
+ to emit.
+* `ErrorGuaranteed` should not be used to indicate that a compilation _will
+ emit_ an error in the future. It should be used to indicate that an error
+ _has already been_ emitted -- that is, the [`emit()`][emit] function has
+ already been called. For example, if we detect that a future part of the
+ compiler will error, we _cannot_ use `ErrorGuaranteed` unless we first emit
+ an error ourselves.
+
+Thankfully, in most cases, it should be statically impossible to abuse
+`ErrorGuaranteed`.
+
+[errorguar]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.ErrorGuaranteed.html
+[rerrors]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html
+[dsp]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/struct.Handler.html#method.delay_span_bug
+[emit]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/diagnostic_builder/struct.DiagnosticBuilder.html#method.emit
diff --git a/src/doc/rustc-dev-guide/src/diagnostics/lintstore.md b/src/doc/rustc-dev-guide/src/diagnostics/lintstore.md
new file mode 100644
index 000000000..39007f8d1
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics/lintstore.md
@@ -0,0 +1,123 @@
+# Lints
+This page documents some of the machinery around lint registration and how we
+run lints in the compiler.
+
+The [`LintStore`] is the central piece of infrastructure, around which
+everything rotates. It's not available during the early parts of compilation
+(i.e., before TyCtxt) in most code, as we need to fill it in with all of the
+lints, which can only happen after plugin registration.
+
+## Lints vs. lint passes
+There are two parts to the linting mechanism within the compiler: lints and
+lint passes. Unfortunately, a lot of the documentation we have refers to both
+of these as just "lints."
+
+First, we have the lint declarations themselves: this is where the name and
+default lint level and other metadata come from. These are normally defined by
+way of the [`declare_lint!`] macro, which boils down to a static with type
+`&rustc_session::lint::Lint`.
+
+As of <!-- date: 2022-02 --> February 2022, we lint against direct declarations
+without the use of the macro today (although this may change in the future, as
+the macro is somewhat unwieldy to add new fields to, like all macros).
+
+Lint declarations don't carry any "state" - they are merely global identifiers
+and descriptions of lints. We assert at runtime that they are not registered
+twice (by lint name).
+
+Lint passes are the meat of any lint. Notably, there is not a one-to-one
+relationship between lints and lint passes; a lint might not have any lint pass
+that emits it, it could have many, or just one -- the compiler doesn't track
+whether a pass is in any way associated with a particular lint, and frequently
+lints are emitted as part of other work (e.g., type checking, etc.).
+
+## Registration
+
+### High-level overview
+In [`rustc_interface::register_plugins`] the [`LintStore`] is created and all
+lints are registered.
+
+There are four 'sources' of lints:
+
+* internal lints: lints only used by the rustc codebase
+* builtin lints: lints built into the compiler and not provided by some outside
+ source
+* plugin lints: lints created by plugins through the plugin system.
+* `rustc_interface::Config`[`register_lints`]: lints passed into the compiler
+ during construction
+
+Lints are registered via the [`LintStore::register_lint`] function. This should
+happen just once for any lint, or an ICE will occur.
+
+Once the registration is complete, we "freeze" the lint store by placing it in
+an `Lrc`. Later in the driver, it's passed into the `GlobalCtxt` constructor
+where it lives in an immutable form from then on.
+
+Lint passes are registered separately into one of the categories
+(pre-expansion, early, late, late module). Passes are registered as a closure
+-- i.e., `impl Fn() -> Box<dyn X>`, where `dyn X` is either an early or late
+lint pass trait object. When we run the lint passes, we run the closure and
+then invoke the lint pass methods. The lint pass methods take `&mut self` so
+they can keep track of state internally.
+
+#### Internal lints
+These are lints used just by the compiler or plugins like `clippy`. They can be
+found in `rustc_lint::internal`.
+
+An example of such a lint is the check that lint passes are implemented using
+the `declare_lint_pass!` macro and not by hand. This is accomplished with the
+`LINT_PASS_IMPL_WITHOUT_MACRO` lint.
+
+Registration of these lints happens in the [`rustc_lint::register_internals`]
+function which is called when constructing a new lint store inside
+[`rustc_lint::new_lint_store`].
+
+### Builtin Lints
+These are primarily described in two places: `rustc_session::lint::builtin` and
+`rustc_lint::builtin`. Often the first provides the definitions for the lints
+themselves, and the latter provides the lint pass definitions (and
+implementations), but this is not always true.
+
+The builtin lint registration happens in the [`rustc_lint::register_builtins`]
+function. Just like with internal lints, this happens inside of
+[`rustc_lint::new_lint_store`].
+
+#### Plugin lints
+This is one of the primary use cases remaining for plugins/drivers. Plugins are
+given access to the mutable `LintStore` during registration (which happens
+inside of [`rustc_interface::register_plugins`]) and they can call any
+functions they need on the `LintStore`, just like rustc code.
+
+Plugins are intended to declare lints with the `plugin` field set to true
+(e.g., by way of the [`declare_tool_lint!`] macro), but this is purely for
+diagnostics and help text; otherwise plugin lints are mostly just as first
+class as rustc builtin lints.
+
+#### Driver lints
+These are the lints provided by drivers via the `rustc_interface::Config`
+[`register_lints`] field, which is a callback. Drivers should, if finding it
+already set, call the function currently set within the callback they add. The
+best way for drivers to get access to this is by overriding the
+`Callbacks::config` function which gives them direct access to the `Config`
+structure.
+
+## Compiler lint passes are combined into one pass
+Within the compiler, for performance reasons, we usually do not register dozens
+of lint passes. Instead, we have a single lint pass of each variety (e.g.,
+`BuiltinCombinedModuleLateLintPass`) which will internally call all of the
+individual lint passes; this is because then we get the benefits of static over
+dynamic dispatch for each of the (often empty) trait methods.
+
+Ideally, we'd not have to do this, since it adds to the complexity of
+understanding the code. However, with the current type-erased lint store
+approach, it is beneficial to do so for performance reasons.
+
+[`LintStore`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/struct.LintStore.html
+[`LintStore::register_lint`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/struct.LintStore.html#method.register_lints
+[`rustc_interface::register_plugins`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/passes/fn.register_plugins.html
+[`rustc_lint::register_builtins`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/fn.register_builtins.html
+[`rustc_lint::register_internals`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/fn.register_internals.html
+[`rustc_lint::new_lint_store`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lint/fn.new_lint_store.html
+[`declare_lint!`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/macro.declare_lint.html
+[`declare_tool_lint!`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/macro.declare_tool_lint.html
+[`register_lints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/interface/struct.Config.html#structfield.register_lints
diff --git a/src/doc/rustc-dev-guide/src/diagnostics/translation.md b/src/doc/rustc-dev-guide/src/diagnostics/translation.md
new file mode 100644
index 000000000..5c078ffb3
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/diagnostics/translation.md
@@ -0,0 +1,239 @@
+# Translation
+rustc's diagnostic infrastructure supports translatable diagnostics using
+[Fluent].
+
+## Writing translatable diagnostics
+There are two ways of writing translatable diagnostics:
+
+1. For simple diagnostics, using a diagnostic (or subdiagnostic) derive
+ ("simple" diagnostics being those that don't require a lot of logic in
+ deciding to emit subdiagnostics and can therefore be represented as
+ diagnostic structs). See [the diagnostic and subdiagnostic structs
+ documentation](./diagnostic-structs.md).
+2. Using typed identifiers with `DiagnosticBuilder` APIs (in
+ `SessionDiagnostic` implementations).
+
+When adding or changing a translatable diagnostic, you don't need to worry
+about the translations, only updating the original English message. Currently,
+each crate which defines translatable diagnostics has its own Fluent resource,
+such as `parser.ftl` or `typeck.ftl`.
+
+## Fluent
+Fluent is built around the idea of "asymmetric localization", which aims to
+decouple the expressiveness of translations from the grammar of the source
+language (English in rustc's case). Prior to translation, rustc's diagnostics
+relied heavily on interpolation to build the messages shown to the users.
+Interpolated strings are hard to translate because writing a natural-sounding
+translation might require more, less, or just different interpolation than the
+English string, all of which would require changes to the compiler's source
+code to support.
+
+Diagnostic messages are defined in Fluent resources. A combined set of Fluent
+resources for a given locale (e.g. `en-US`) is known as Fluent bundle.
+
+```fluent
+typeck-address-of-temporary-taken = cannot take address of a temporary
+```
+
+In the above example, `typeck-address-of-temporary-taken` is the identifier for
+a Fluent message and corresponds to the diagnostic message in English. Other
+Fluent resources can be written which would correspond to a message in another
+language. Each diagnostic therefore has at least one Fluent message.
+
+```fluent
+typeck-address-of-temporary-taken = cannot take address of a temporary
+ .label = temporary value
+```
+
+By convention, diagnostic messages for subdiagnostics are specified as
+"attributes" on Fluent messages (additional related messages, denoted by the
+`.<attribute-name>` syntax). In the above example, `label` is an attribute of
+`typeck-address-of-temporary-taken` which corresponds to the message for the
+label added to this diagnostic.
+
+Diagnostic messages often interpolate additional context into the message shown
+to the user, such as the name of a type or of a variable. Additional context to
+Fluent messages is provided as an "argument" to the diagnostic.
+
+```fluent
+typeck-struct-expr-non-exhaustive =
+ cannot create non-exhaustive {$what} using struct expression
+```
+
+In the above example, the Fluent message refers to an argument named `what`
+which is expected to exist (how arguments are provided to diagnostics is
+discussed in detail later).
+
+You can consult the [Fluent] documentation for other usage examples of Fluent
+and its syntax.
+
+### Guidelines for writing translatable messages
+For a message to be translatable into different languages, all of the
+information required by any language must be provided to the diagnostic as an
+argument (not just the information required in the English message).
+
+As the compiler team gain more experience writing diagnostics that have all of
+the information necessary to be translated into different languages, this page
+will be updated with more guidance. For now, the [Fluent] documentation has
+excellent examples of translating messages into different locales and the
+information that needs to be provided by the code to do so.
+
+### Compile-time validation and typed identifiers
+rustc's Fluent resources for the default locale (`en-US`) are in the
+[`compiler/rustc_error_messages/locales/en-US`] directory. Currently, each crate
+which defines translatable diagnostics has its own Fluent resource, such as
+`parser.ftl` or `typeck.ftl`.
+
+rustc's `fluent_messages` macro performs compile-time validation of Fluent
+resources and generates code to make it easier to refer to Fluent messages in
+diagnostics.
+
+Compile-time validation of Fluent resources will emit any parsing errors
+from Fluent resources while building the compiler, preventing invalid Fluent
+resources from causing panics in the compiler. Compile-time validation also
+emits an error if multiple Fluent messages have the same identifier.
+
+In `rustc_error_messages`, `fluent_messages` also generates a constant for each
+Fluent message which can be used to refer to messages when emitting
+diagnostics and guarantee that the message exists.
+
+```rust
+fluent_messages! {
+ typeck => "../locales/en-US/typeck.ftl",
+}
+```
+
+For example, given the following Fluent...
+
+```fluent
+typeck-field-multiply-specified-in-initializer =
+ field `{$ident}` specified more than once
+ .label = used more than once
+ .label-previous-use = first use of `{$ident}`
+```
+
+...then the `fluent_messages` macro will generate:
+
+```rust
+pub static DEFAULT_LOCALE_RESOURCES: &'static [&'static str] = &[
+ include_str!("../locales/en-US/typeck.ftl"),
+];
+
+mod fluent_generated {
+ mod typeck {
+ pub const field_multiply_specified_in_initializer: DiagnosticMessage =
+ DiagnosticMessage::new("typeck-field-multiply-specified-in-initializer");
+ pub const label: SubdiagnosticMessage =
+ SubdiagnosticMessage::attr("label");
+ pub const label_previous_use: SubdiagnosticMessage =
+ SubdiagnosticMessage::attr("previous-use-label");
+ }
+}
+```
+
+`rustc_error_messages::fluent_generated` is re-exported and primarily used as
+`rustc_errors::fluent`.
+
+```rust
+use rustc_errors::fluent;
+let mut err = sess.struct_span_err(span, fluent::typeck::field_multiply_specified_in_initializer);
+err.span_label(span, fluent::typeck::label);
+err.span_label(previous_use_span, fluent::typeck::previous_use_label);
+err.emit();
+```
+
+When emitting a diagnostic, these constants can be used like shown above.
+
+## Internals
+Various parts of rustc's diagnostic internals are modified in order to support
+translation.
+
+### Messages
+All of rustc's traditional diagnostic APIs (e.g. `struct_span_err` or `note`)
+take any message that can be converted into a `DiagnosticMessage` (or
+`SubdiagnosticMessage`).
+
+[`rustc_error_messages::DiagnosticMessage`] can represent legacy non-translatable
+diagnostic messages and translatable messages. Non-translatable messages are
+just `String`s. Translatable messages are just a `&'static str` with the
+identifier of the Fluent message (sometimes with an additional `&'static str`
+with an attribute).
+
+`DiagnosticMessage` never needs to be interacted with directly:
+`DiagnosticMessage` constants are created for each diagnostic message in a
+Fluent resource (described in more detail below), or `DiagnosticMessage`s will
+either be created in the macro-generated code of a diagnostic derive.
+
+`rustc_error_messages::SubdiagnosticMessage` is similar, it can correspond to a
+legacy non-translatable diagnostic message or the name of an attribute to a
+Fluent message. Translatable `SubdiagnosticMessage`s must be combined with a
+`DiagnosticMessage` (using `DiagnosticMessage::with_subdiagnostic_message`) to
+be emitted (an attribute name on its own is meaningless without a corresponding
+message identifier, which is what `DiagnosticMessage` provides).
+
+Both `DiagnosticMessage` and `SubdiagnosticMessage` implement `Into` for any
+type that can be converted into a string, and converts these into
+non-translatable diagnostics - this keeps all existing diagnostic calls
+working.
+
+### Arguments
+Additional context for Fluent messages which are interpolated into message
+contents needs to be provided to translatable diagnostics.
+
+Diagnostics have a `set_arg` function that can be used to provide this
+additional context to a diagnostic.
+
+Arguments have both a name (e.g. "what" in the earlier example) and a value.
+Argument values are represented using the `DiagnosticArgValue` type, which is
+just a string or a number. rustc types can implement `IntoDiagnosticArg` with
+conversion into a string or a number, common types like `Ty<'tcx>` already
+have such implementations.
+
+`set_arg` calls are handled transparently by diagnostic derives but need to be
+added manually when using diagnostic builder APIs.
+
+### Loading
+rustc makes a distinction between the "fallback bundle" for `en-US` that is used
+by default and when another locale is missing a message; and the primary fluent
+bundle which is requested by the user.
+
+Diagnostic emitters implement the `Emitter` trait which has two functions for
+accessing the fallback and primary fluent bundles (`fallback_fluent_bundle` and
+`fluent_bundle` respectively).
+
+`Emitter` also has member functions with default implementations for performing
+translation of a `DiagnosticMessage` using the results of
+`fallback_fluent_bundle` and `fluent_bundle`.
+
+All of the emitters in rustc load the fallback Fluent bundle lazily, only
+reading Fluent resources and parsing them when an error message is first being
+translated (for performance reasons - it doesn't make sense to do this if no
+error is being emitted). `rustc_error_messages::fallback_fluent_bundle` returns
+a `std::lazy::Lazy<FluentBundle>` which is provided to emitters and evaluated
+in the first call to `Emitter::fallback_fluent_bundle`.
+
+The primary Fluent bundle (for the user's desired locale) is expected to be
+returned by `Emitter::fluent_bundle`. This bundle is used preferentially when
+translating messages, the fallback bundle is only used if the primary bundle is
+missing a message or not provided.
+
+As of <!-- date: 2022-06 --> June 2022, there are no locale bundles
+distributed with the compiler, but mechanisms are implemented for loading
+bundles.
+
+- `-Ztranslate-additional-ftl` can be used to load a specific resource as the
+ primary bundle for testing purposes.
+- `-Ztranslate-lang` can be provided a language identifier (something like
+ `en-US`) and will load any Fluent resources found in
+ `$sysroot/share/locale/$locale/` directory (both the user provided
+ sysroot and any sysroot candidates).
+
+Primary bundles are not currently loaded lazily and if requested will be loaded
+at the start of compilation regardless of whether an error occurs. Lazily
+loading primary bundles is possible if it can be assumed that loading a bundle
+won't fail. Bundle loading can fail if a requested locale is missing, Fluent
+files are malformed, or a message is duplicated in multiple resources.
+
+[Fluent]: https://projectfluent.org
+[`compiler/rustc_error_messages/locales/en-US`]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_error_messages/locales/en-US
+[`rustc_error_messages::DiagnosticMessage`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_error_messages/enum.DiagnosticMessage.html
diff --git a/src/doc/rustc-dev-guide/src/early-late-bound.md b/src/doc/rustc-dev-guide/src/early-late-bound.md
new file mode 100644
index 000000000..29b2136b4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/early-late-bound.md
@@ -0,0 +1,107 @@
+# Early and Late Bound Variables
+
+In Rust, item definitions (like `fn`) can often have generic parameters, which
+are always [_universally_ quantified][quant]. That is, if you have a function
+like
+
+```rust
+fn foo<T>(x: T) { }
+```
+
+this function is defined "for all T" (not "for some specific T", which would be
+[_existentially_ quantified][quant]).
+
+[quant]: ./appendix/background.md#quantified
+
+While Rust *items* can be quantified over types, lifetimes, and constants, the
+types of values in Rust are only ever quantified over lifetimes. So you can
+have a type like `for<'a> fn(&'a u32)`, which represents a function pointer
+that takes a reference with any lifetime, or `for<'a> dyn Trait<'a>`, which is
+a `dyn` trait for a trait implemented for any lifetime; but we have no type
+like `for<T> fn(T)`, which would be a function that takes a value of *any type*
+as a parameter. This is a consequence of monomorphization -- to support a value
+of type `for<T> fn(T)`, we would need a single function pointer that can be
+used for a parameter of any type, but in Rust we generate customized code for
+each parameter type.
+
+One consequence of this asymmetry is a weird split in how we represent some
+generic types: _early-_ and _late-_ bound parameters.
+Basically, if we cannot represent a type (e.g. a universally quantified type),
+we have to bind it _early_ so that the unrepresentable type is never around.
+
+Consider the following example:
+
+```rust,ignore
+fn foo<'a, 'b, T>(x: &'a u32, y: &'b T) where T: 'b { ... }
+```
+
+We cannot treat `'a`, `'b`, and `T` in the same way. Types in Rust can't have
+`for<T> { .. }`, only `for<'a> {...}`, so whenever you reference `foo` the type
+you get back can't be `for<'a, 'b, T> fn(&'a u32, y: &'b T)`. Instead, the `T`
+must be substituted early. In particular, you have:
+
+```rust,ignore
+let x = foo; // T, 'b have to be substituted here
+x(...); // 'a substituted here, at the point of call
+x(...); // 'a substituted here with a different value
+```
+
+## Early-bound parameters
+
+Early-bound parameters in rustc are identified by an index, stored in the
+[`ParamTy`] struct for types or the [`EarlyBoundRegion`] struct for lifetimes.
+The index counts from the outermost declaration in scope. This means that as you
+add more binders inside, the index doesn't change.
+
+For example,
+
+```rust,ignore
+trait Foo<T> {
+ type Bar<U> = (Self, T, U);
+}
+```
+
+Here, the type `(Self, T, U)` would be `($0, $1, $2)`, where `$N` means a
+[`ParamTy`] with the index of `N`.
+
+In rustc, the [`Generics`] structure carries this information. So the
+[`Generics`] for `Bar` above would be just like for `U` and would indicate the
+'parent' generics of `Foo`, which declares `Self` and `T`. You can read more
+in [this chapter](./generics.md).
+
+[`ParamTy`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.ParamTy.html
+[`EarlyBoundRegion`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.EarlyBoundRegion.html
+[`Generics`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Generics.html
+
+## Late-bound parameters
+
+Late-bound parameters in `rustc` are handled quite differently (they are also
+specialized to lifetimes since, right now, only late-bound lifetimes are
+supported, though with GATs that has to change). We indicate their potential
+presence by a [`Binder`] type. The [`Binder`] doesn't know how many variables
+there are at that binding level. This can only be determined by walking the
+type itself and collecting them. So a type like `for<'a, 'b> ('a, 'b)` would be
+`for (^0.a, ^0.b)`. Here, we just write `for` because we don't know the names
+of the things bound within.
+
+Moreover, a reference to a late-bound lifetime is written `^0.a`:
+
+- The `0` is the index; it identifies that this lifetime is bound in the
+ innermost binder (the `for`).
+- The `a` is the "name"; late-bound lifetimes in rustc are identified by a
+ "name" -- the [`BoundRegionKind`] enum. This enum can contain a
+ [`DefId`][defid] or it might have various "anonymous" numbered names. The
+ latter arise from types like `fn(&u32, &u32)`, which are equivalent to
+ something like `for<'a, 'b> fn(&'a u32, &'b u32)`, but the names of those
+ lifetimes must be generated.
+
+This setup of not knowing the full set of variables at a binding level has some
+advantages and some disadvantages. The disadvantage is that you must walk the
+type to find out what is bound at the given level and so forth. The advantage
+is primarily that, when constructing types from Rust syntax, if we encounter
+anonymous regions like in `fn(&u32)`, we just create a fresh index and don't have
+to update the binder.
+
+[`Binder`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Binder.html
+[`BoundRegionKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.BoundRegionKind.html
+[defid]: ./hir.html#identifiers-in-the-hir
diff --git a/src/doc/rustc-dev-guide/src/feature-gate-ck.md b/src/doc/rustc-dev-guide/src/feature-gate-ck.md
new file mode 100644
index 000000000..c17747a11
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/feature-gate-ck.md
@@ -0,0 +1,3 @@
+# Feature Gate Checking
+
+**TODO**: this chapter [#1158](https://github.com/rust-lang/rustc-dev-guide/issues/1158)
diff --git a/src/doc/rustc-dev-guide/src/feature-gates.md b/src/doc/rustc-dev-guide/src/feature-gates.md
new file mode 100644
index 000000000..229281f2f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/feature-gates.md
@@ -0,0 +1,111 @@
+# Feature Gates
+
+This chapter is intended to provide basic help for adding, removing, and
+modifying feature gates.
+
+
+## Adding a feature gate
+
+See ["Stability in code"] for help with adding a new feature; this section just
+covers how to add the feature gate *declaration*.
+
+Add a feature gate declaration to `rustc_feature/src/active.rs` in the active
+`declare_features` block:
+
+```rust,ignore
+/// description of feature
+(active, $feature_name, "$current_nightly_version", Some($tracking_issue_number), $edition)
+```
+
+where `$edition` has the type `Option<Edition>`, and is typically
+just `None`.
+
+For example:
+
+```rust,ignore
+/// Allows defining identifiers beyond ASCII.
+(active, non_ascii_idents, "1.0.0", Some(55467), None),
+```
+
+Features can be marked as incomplete, and trigger the warn-by-default [`incomplete_features` lint]
+by setting their type to `incomplete`:
+
+```rust,ignore
+/// Allows unsized rvalues at arguments and parameters.
+(incomplete, unsized_locals, "1.30.0", Some(48055), None),
+```
+
+When added, the current version should be the one for the current nightly.
+Once the feature is moved to `accepted.rs`, the version is changed to that
+nightly version.
+
+
+## Removing a feature gate
+
+[removing]: #removing-a-feature-gate
+
+To remove a feature gate, follow these steps:
+
+1. Remove the feature gate declaration in `rustc_feature/src/active.rs`.
+ It will look like this:
+
+ ```rust,ignore
+ /// description of feature
+ (active, $feature_name, "$version", Some($tracking_issue_number), $edition)
+ ```
+
+2. Add a modified version of the feature gate declaration that you just
+ removed to `rustc_feature/src/removed.rs`:
+
+ ```rust,ignore
+ /// description of feature
+ (removed, $old_feature_name, "$version", Some($tracking_issue_number), $edition,
+ Some("$why_it_was_removed"))
+ ```
+
+
+## Renaming a feature gate
+
+[renaming]: #renaming-a-feature-gate
+
+To rename a feature gate, follow these steps (the first two are the same steps
+to follow when [removing a feature gate][removing]):
+
+1. Remove the old feature gate declaration in `rustc_feature/src/active.rs`.
+ It will look like this:
+
+ ```rust,ignore
+ /// description of feature
+ (active, $old_feature_name, "$version", Some($tracking_issue_number), $edition)
+ ```
+
+2. Add a modified version of the old feature gate declaration that you just
+ removed to `rustc_feature/src/removed.rs`:
+
+ ```rust,ignore
+ /// description of feature
+ /// Renamed to `$new_feature_name`
+ (removed, $old_feature_name, "$version", Some($tracking_issue_number), $edition,
+ Some("renamed to `$new_feature_name`"))
+ ```
+
+3. Add a feature gate declaration with the new name to
+ `rustc_feature/src/active.rs`. It should look very similar to the old
+ declaration:
+
+ ```rust,ignore
+ /// description of feature
+ (active, $new_feature_name, "$version", Some($tracking_issue_number), $edition)
+ ```
+
+
+## Stabilizing a feature
+
+See ["Updating the feature-gate listing"] in the "Stabilizing Features" chapter
+for instructions. There are additional steps you will need to take beyond just
+updating the declaration!
+
+
+["Stability in code"]: ./implementing_new_features.md#stability-in-code
+[`incomplete_features` lint]: https://doc.rust-lang.org/rustc/lints/listing/warn-by-default.html#incomplete-features
+["Updating the feature-gate listing"]: ./stabilization_guide.md#updating-the-feature-gate-listing
diff --git a/src/doc/rustc-dev-guide/src/generic_arguments.md b/src/doc/rustc-dev-guide/src/generic_arguments.md
new file mode 100644
index 000000000..c9911acf5
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/generic_arguments.md
@@ -0,0 +1,50 @@
+# Generic arguments
+A `ty::subst::GenericArg<'tcx>` represents some entity in the type system: a type
+(`Ty<'tcx>`), lifetime (`ty::Region<'tcx>`) or constant (`ty::Const<'tcx>`).
+`GenericArg` is used to perform substitutions of generic parameters for concrete
+arguments, such as when calling a function with generic parameters explicitly
+with type arguments. Substitutions are represented using the
+[`Subst` type](#subst) as described below.
+
+## `Subst`
+`ty::subst::Subst<'tcx>` is intuitively simply a slice of `GenericArg<'tcx>`s,
+acting as an ordered list of substitutions from generic parameters to
+concrete arguments (such as types, lifetimes and consts).
+
+For example, given a `HashMap<K, V>` with two type parameters, `K` and `V`, an
+instantiation of the parameters, for example `HashMap<i32, u32>`, would be
+represented by the substitution `&'tcx [tcx.types.i32, tcx.types.u32]`.
+
+`Subst` provides various convenience methods to instantiate substitutions
+given item definitions, which should generally be used rather than explicitly
+constructing such substitution slices.
+
+## `GenericArg`
+The actual `GenericArg` struct is optimised for space, storing the type, lifetime or
+const as an interned pointer containing a tag identifying its kind (in the
+lowest 2 bits). Unless you are working with the `Subst` implementation
+specifically, you should generally not have to deal with `GenericArg` and instead
+make use of the safe [`GenericArgKind`](#genericargkind) abstraction.
+
+## `GenericArgKind`
+As `GenericArg` itself is not type-safe, the `GenericArgKind` enum provides a more
+convenient and safe interface for dealing with generic arguments. An
+`GenericArgKind` can be converted to a raw `GenericArg` using `GenericArg::from()`
+(or simply `.into()` when the context is clear). As mentioned earlier, substitution
+lists store raw `GenericArg`s, so before dealing with them, it is preferable to
+convert them to `GenericArgKind`s first. This is done by calling the `.unpack()`
+method.
+
+```rust,ignore
+// An example of unpacking and packing a generic argument.
+fn deal_with_generic_arg<'tcx>(generic_arg: GenericArg<'tcx>) -> GenericArg<'tcx> {
+ // Unpack a raw `GenericArg` to deal with it safely.
+ let new_generic_arg: GenericArgKind<'tcx> = match generic_arg.unpack() {
+ GenericArgKind::Type(ty) => { /* ... */ }
+ GenericArgKind::Lifetime(lt) => { /* ... */ }
+ GenericArgKind::Const(ct) => { /* ... */ }
+ };
+ // Pack the `GenericArgKind` to store it in a substitution list.
+ new_generic_arg.into()
+}
+```
diff --git a/src/doc/rustc-dev-guide/src/generics.md b/src/doc/rustc-dev-guide/src/generics.md
new file mode 100644
index 000000000..13549b2fb
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/generics.md
@@ -0,0 +1,144 @@
+# Generics and substitutions
+
+Given a generic type `MyType<A, B, …>`, we may want to swap out the generics `A, B, …` for some
+other types (possibly other generics or concrete types). We do this a lot while doing type
+inference, type checking, and trait solving. Conceptually, during these routines, we may find out
+that one type is equal to another type and want to swap one out for the other and then swap that out
+for another type and so on until we eventually get some concrete types (or an error).
+
+In rustc this is done using the `SubstsRef` that we mentioned above (“substs” = “substitutions”).
+Conceptually, you can think of `SubstsRef` as a list of types that are to be substituted for the
+generic type parameters of the ADT.
+
+`SubstsRef` is a type alias of `&'tcx List<GenericArg<'tcx>>` (see [`List` rustdocs][list]).
+[`GenericArg`] is essentially a space-efficient wrapper around [`GenericArgKind`], which is an enum
+indicating what kind of generic the type parameter is (type, lifetime, or const). Thus, `SubstsRef`
+is conceptually like a `&'tcx [GenericArgKind<'tcx>]` slice (but it is actually a `List`).
+
+[list]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.List.html
+[`GenericArg`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/struct.GenericArg.html
+[`GenericArgKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/enum.GenericArgKind.html
+
+So why do we use this `List` type instead of making it really a slice? It has the length "inline",
+so `&List` is only 32 bits. As a consequence, it cannot be "subsliced" (that only works if the
+length is out of line).
+
+This also implies that you can check two `List`s for equality via `==` (which would be not be
+possible for ordinary slices). This is precisely because they never represent a "sub-list", only the
+complete `List`, which has been hashed and interned.
+
+So pulling it all together, let’s go back to our example above:
+
+```rust,ignore
+struct MyStruct<T>
+```
+
+- There would be an `AdtDef` (and corresponding `DefId`) for `MyStruct`.
+- There would be a `TyKind::Param` (and corresponding `DefId`) for `T` (more later).
+- There would be a `SubstsRef` containing the list `[GenericArgKind::Type(Ty(T))]`
+ - The `Ty(T)` here is my shorthand for entire other `ty::Ty` that has `TyKind::Param`, which we
+ mentioned in the previous point.
+- This is one `TyKind::Adt` containing the `AdtDef` of `MyStruct` with the `SubstsRef` above.
+
+Finally, we will quickly mention the
+[`Generics`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Generics.html) type. It
+is used to give information about the type parameters of a type.
+
+### Unsubstituted Generics
+
+So above, recall that in our example the `MyStruct` struct had a generic type `T`. When we are (for
+example) type checking functions that use `MyStruct`, we will need to be able to refer to this type
+`T` without actually knowing what it is. In general, this is true inside all generic definitions: we
+need to be able to work with unknown types. This is done via `TyKind::Param` (which we mentioned in
+the example above).
+
+Each `TyKind::Param` contains two things: the name and the index. In general, the index fully
+defines the parameter and is used by most of the code. The name is included for debug print-outs.
+There are two reasons for this. First, the index is convenient, it allows you to include into the
+list of generic arguments when substituting. Second, the index is more robust. For example, you
+could in principle have two distinct type parameters that use the same name, e.g. `impl<A> Foo<A> {
+fn bar<A>() { .. } }`, although the rules against shadowing make this difficult (but those language
+rules could change in the future).
+
+The index of the type parameter is an integer indicating its order in the list of the type
+parameters. Moreover, we consider the list to include all of the type parameters from outer scopes.
+Consider the following example:
+
+```rust,ignore
+struct Foo<A, B> {
+ // A would have index 0
+ // B would have index 1
+
+ .. // some fields
+}
+impl<X, Y> Foo<X, Y> {
+ fn method<Z>() {
+ // inside here, X, Y and Z are all in scope
+ // X has index 0
+ // Y has index 1
+ // Z has index 2
+ }
+}
+```
+
+When we are working inside the generic definition, we will use `TyKind::Param` just like any other
+`TyKind`; it is just a type after all. However, if we want to use the generic type somewhere, then
+we will need to do substitutions.
+
+For example suppose that the `Foo<A, B>` type from the previous example has a field that is a
+`Vec<A>`. Observe that `Vec` is also a generic type. We want to tell the compiler that the type
+parameter of `Vec` should be replaced with the `A` type parameter of `Foo<A, B>`. We do that with
+substitutions:
+
+```rust,ignore
+struct Foo<A, B> { // Adt(Foo, &[Param(0), Param(1)])
+ x: Vec<A>, // Adt(Vec, &[Param(0)])
+ ..
+}
+
+fn bar(foo: Foo<u32, f32>) { // Adt(Foo, &[u32, f32])
+ let y = foo.x; // Vec<Param(0)> => Vec<u32>
+}
+```
+
+This example has a few different substitutions:
+
+- In the definition of `Foo`, in the type of the field `x`, we replace `Vec`'s type parameter with
+ `Param(0)`, the first parameter of `Foo<A, B>`, so that the type of `x` is `Vec<A>`.
+- In the function `bar`, we specify that we want a `Foo<u32, f32>`. This means that we will
+ substitute `Param(0)` and `Param(1)` with `u32` and `f32`.
+- In the body of `bar`, we access `foo.x`, which has type `Vec<Param(0)>`, but `Param(0)` has been
+ substituted for `u32`, so `foo.x` has type `Vec<u32>`.
+
+Let’s look a bit more closely at that last substitution to see why we use indexes. If we want to
+find the type of `foo.x`, we can get generic type of `x`, which is `Vec<Param(0)>`. Now we can take
+the index `0` and use it to find the right type substitution: looking at `Foo`'s `SubstsRef`, we
+have the list `[u32, f32]` , since we want to replace index `0`, we take the 0-th index of this
+list, which is `u32`. Voila!
+
+You may have a couple of followup questions…
+
+ **`type_of`** How do we get the “generic type of `x`"? You can get the type of pretty much anything
+ with the `tcx.type_of(def_id)` query. In this case, we would pass the `DefId` of the field `x`.
+ The `type_of` query always returns the definition with the generics that are in scope of the
+ definition. For example, `tcx.type_of(def_id_of_my_struct)` would return the “self-view” of
+ `MyStruct`: `Adt(Foo, &[Param(0), Param(1)])`.
+
+**`subst`** How do we actually do the substitutions? There is a function for that too! You use
+[`subst`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/trait.Subst.html) to
+replace a `SubstRef` with another list of types.
+
+[Here is an example of actually using `subst` in the compiler][substex]. The exact details are not
+too important, but in this piece of code, we happen to be converting from the `rustc_hir::Ty` to
+a real `ty::Ty`. You can see that we first get some substitutions (`substs`). Then we call
+`type_of` to get a type and call `ty.subst(substs)` to get a new version of `ty` with
+the substitutions made.
+
+[substex]: https://github.com/rust-lang/rust/blob/597f432489f12a3f33419daa039ccef11a12c4fd/src/librustc_typeck/astconv.rs#L942-L953
+
+**Note on indices:** It is possible for the indices in `Param` to not match with what we expect. For
+example, the index could be out of bounds or it could be the index of a lifetime when we were
+expecting a type. These sorts of errors would be caught earlier in the compiler when translating
+from a `rustc_hir::Ty` to a `ty::Ty`. If they occur later, that is a compiler bug.
+
+
diff --git a/src/doc/rustc-dev-guide/src/getting-started.md b/src/doc/rustc-dev-guide/src/getting-started.md
new file mode 100644
index 000000000..b4dc11a68
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/getting-started.md
@@ -0,0 +1,314 @@
+# Getting Started
+
+<!-- toc -->
+
+This documentation is _not_ intended to be comprehensive; it is meant to be a
+quick guide for the most useful things. For more information, [see this
+chapter on how to build and run the compiler](./building/how-to-build-and-run.md).
+
+## Asking Questions
+
+The compiler team (or `t-compiler`) usually hangs out in Zulip [in this
+"stream"][z]; it will be easiest to get questions answered there.
+
+[z]: https://rust-lang.zulipchat.com/#narrow/stream/131828-t-compiler
+
+**Please ask questions!** A lot of people report feeling that they are "wasting
+expert time", but nobody on `t-compiler` feels this way. Contributors are
+important to us.
+
+Also, if you feel comfortable, prefer public topics, as this means others can
+see the questions and answers, and perhaps even integrate them back into this
+guide :)
+
+### Experts
+
+Not all `t-compiler` members are experts on all parts of `rustc`; it's a pretty
+large project. To find out who has expertise on different parts of the
+compiler, [consult this "experts map"][map].
+
+It's not perfectly complete, though, so please also feel free to ask questions
+even if you can't figure out who to ping.
+
+[map]: https://github.com/rust-lang/compiler-team/blob/master/content/experts/map.toml
+
+### Etiquette
+
+We do ask that you be mindful to include as much useful information as you can
+in your question, but we recognize this can be hard if you are unfamiliar with
+contributing to Rust.
+
+Just pinging someone without providing any context can be a bit annoying and
+just create noise, so we ask that you be mindful of the fact that the
+`t-compiler` folks get a lot of pings in a day.
+
+## Cloning and Building
+
+### System Requirements
+
+Internet access is required.
+
+The most notable software requirement is that you will need Python 2 or 3, but
+there are various others.
+
+The following hardware is recommended.
+* 30GB+ of free disk space.
+* 8GB+ RAM
+* 2+ cores
+
+More powerful machines will lead to much faster builds. There are various
+strategies to work around lesser hardware in the following chapters.
+
+See [this chapter][prereqs] for more details about software and hardware prerequisites.
+
+[prereqs]: ./building/prerequisites.md
+
+### Cloning
+
+You can just do a normal git clone:
+
+```sh
+git clone https://github.com/rust-lang/rust.git
+cd rust
+```
+
+### `x.py` Intro
+
+`rustc` is a [bootstrapping] compiler, which makes it more complex than a
+typical Rust program. As a result, you cannot use Cargo to build it. Instead
+you must use the special tool `x.py`. It is used for the things Cargo is
+normally used for: building, testing, creating releases, formatting, etc.
+
+[bootstrapping]: ./building/bootstrapping.md
+
+### Configuring the Compiler
+
+In the top level of the repo:
+
+```sh
+$ ./x.py setup
+```
+
+This will do some initialization and walk you through an interactive setup to
+create `config.toml`, the primary configuration file.
+
+See [this chapter][config] for more info about configuration.
+
+[config]: ./building/how-to-build-and-run.md#create-a-configtoml
+
+### Common `x.py` commands
+
+Here are the basic invocations of the `x.py` commands most commonly used when
+working on `rustc`, `std`, `rustdoc`, and other tools.
+
+| Command | When to use it |
+| --- | --- |
+| `./x.py check` | Quick check to see if most things compile; [rust-analyzer can run this automatically for you][rust-analyzer] |
+| `./x.py build` | Builds `rustc`, `std`, and `rustdoc` |
+| `./x.py test` | Runs all tests |
+| `./x.py fmt` | Formats all code |
+
+As written, these commands are reasonable starting points. However, there are
+additional options and arguments for each of them that are worth learning for
+serious development work. In particular, `./x.py build` and `./x.py test`
+provide many ways to compile or test a subset of the code, which can save a lot
+of time.
+
+[rust-analyzer]: ./building/suggested.html#configuring-rust-analyzer-for-rustc
+
+See the chapters on [building](./building/how-to-build-and-run.md),
+[testing](./tests/intro.md), and [rustdoc](./rustdoc.md) for more details.
+
+### Contributing code to other Rust projects
+
+There are a bunch of other projects that you can contribute to outside of the
+`rust-lang/rust` repo, including `clippy`, `miri`, `chalk`, and many others.
+
+These repos might have their own contributing guidelines and procedures. Many
+of them are owned by working groups (e.g. `chalk` is largely owned by
+WG-traits). For more info, see the documentation in those repos' READMEs.
+
+### Other ways to contribute
+
+There are a bunch of other ways you can contribute, especially if you don't
+feel comfortable jumping straight into the large `rust-lang/rust` codebase.
+
+The following tasks are doable without much background knowledge but are
+incredibly helpful:
+
+- [Cleanup crew][iceb]: find minimal reproductions of ICEs, bisect
+ regressions, etc. This is a way of helping that saves a ton of time for
+ others to fix an error later.
+- [Writing documentation][wd]: if you are feeling a bit more intrepid, you could try
+ to read a part of the code and write doc comments for it. This will help you
+ to learn some part of the compiler while also producing a useful artifact!
+- [Working groups][wg]: there are a bunch of working groups on a wide variety
+ of rust-related things.
+
+[iceb]: ./notification-groups/cleanup-crew.md
+[wd]: ./contributing.md#writing-documentation
+[wg]: https://rust-lang.github.io/compiler-team/working-groups/
+
+## Contributor Procedures
+
+There are some official procedures to know about. This is a tour of the
+highlights, but there are a lot more details, which we will link to below.
+
+### Code Review
+
+When you open a PR on the `rust-lang/rust` repo, a bot called `@rust-highfive` will
+automatically assign a reviewer to the PR based on which files you changed.
+The reviewer is the person that will approve the PR to be tested and merged.
+If you want a specific reviewer (e.g. a team member you've been working with),
+you can specifically request them by writing `r? @user` (e.g. `r? @jyn514`) in
+either the original post or a followup comment
+(you can see [this comment][r?] for example).
+
+Please note that the reviewers are humans, who for the most part work on `rustc`
+in their free time. This means that they can take some time to respond and review
+your PR. It also means that reviewers can miss some PRs that are assigned to them.
+
+To try to move PRs forward, the Triage WG regularly goes through all PRs that
+are waiting for review and haven't been discussed for at least 2 weeks. If you
+don't get a review within 2 weeks, feel free to ask the Triage WG on
+Zulip ([#t-release/triage]). They have knowledge of when to ping, who might be
+on vacation, etc.
+
+The reviewer may request some changes using the GitHub code review interface.
+They may also request special procedures (such as a [crater] run; [see
+below][break]) for some PRs.
+
+[r?]: https://github.com/rust-lang/rust/pull/78133#issuecomment-712692371
+[#t-release/triage]: https://rust-lang.zulipchat.com/#narrow/stream/242269-t-release.2Ftriage
+[break]: #breaking-changes
+
+When the PR is ready to be merged, the reviewer will issue a command to
+`@bors`, the CI bot. Usually, this is `@bors r+` or `@bors r=user` to approve
+a PR (there are few other commands, but they are less relevant here).
+You can see [this comment][r+] for example. This puts the PR in [bors's queue][bors]
+to be tested and merged. Be patient; this can take a while and the queue can
+sometimes be long. PRs are never merged by hand.
+
+[r+]: https://github.com/rust-lang/rust/pull/78133#issuecomment-712726339
+[bors]: https://bors.rust-lang.org/queue/rust
+
+### Bug Fixes or "Normal" code changes
+
+For most PRs, no special procedures are needed. You can just open a PR, and it
+will be reviewed, approved, and merged. This includes most bug fixes,
+refactorings, and other user-invisible changes. The next few sections talk
+about exceptions to this rule.
+
+Also, note that it is perfectly acceptable to open WIP PRs or GitHub [Draft
+PRs][draft]. Some people prefer to do this so they can get feedback along the
+way or share their code with a collaborator. Others do this so they can utilize
+the CI to build and test their PR (e.g. if you are developing on a laptop).
+
+[draft]: https://github.blog/2019-02-14-introducing-draft-pull-requests/
+
+### New Features
+
+Rust has strong backwards-compatibility guarantees. Thus, new features can't
+just be implemented directly in stable Rust. Instead, we have 3 release
+channels: stable, beta, and nightly.
+
+- **Stable**: this is the latest stable release for general usage.
+- **Beta**: this is the next release (will be stable within 6 weeks).
+- **Nightly**: follows the `master` branch of the repo. This is the only
+ channel where unstable, incomplete, or experimental features are usable with
+ feature gates.
+
+In order to implement a new feature, usually you will need to go through [the
+RFC process][rfc] to propose a design, have discussions, etc. In some cases,
+small features can be added with only an FCP ([see below][break]). If in doubt, ask the
+compiler, language, or libs team (whichever is most relevant).
+
+[rfc]: https://github.com/rust-lang/rfcs/blob/master/README.md
+
+After a feature is approved to be added, a tracking issue is created on the
+`rust-lang/rust` repo, which tracks the progress towards the implementation of
+the feature, any bugs reported, and eventually stabilization.
+
+The feature then needs to be implemented behind a feature gate, which prevents
+it from being accidentally used.
+
+Finally, somebody may propose stabilizing the feature in an upcoming version of
+Rust. This requires a Final Comment Period ([see below][break]) to get the
+approval of the relevant teams.
+
+After that, the feature gate can be removed and the feature turned on for all users.
+
+For more details on this process, see [this chapter on implementing new
+features.](./implementing_new_features.md)
+
+### Breaking Changes
+
+As mentioned above, Rust has strong backwards-compatibility guarantees. To this
+end, we are reluctant to make breaking changes. However, sometimes they are
+needed to correct compiler bugs (e.g. code that compiled but should not) or
+make progress on some features.
+
+Depending on the scale of the breakage, there are a few different actions that
+can be taken. If the reviewer believes the breakage is very minimal (i.e. very
+unlikely to be actually encountered by users), they may just merge the change.
+More often, they will request a Final Comment Period (FCP), which calls for
+rough consensus among the members of a relevant team. The team members can
+discuss the issue and either accept, reject, or request changes on the PR.
+
+If the scale of breakage is large, a deprecation warning may be needed. This is
+a warning that the compiler will display to users whose code will break in the
+future. After some time, an FCP can be used to move forward with the actual
+breakage.
+
+If the scale of breakage is unknown, a team member or contributor may request a
+[crater] run. This is a bot that will compile all crates.io crates and many
+public github repos with the compiler with your changes. A report will then be
+generated with crates that ceased to compile with or began to compile with your
+changes. Crater runs can take a few days to complete.
+
+[crater]: https://github.com/rust-lang/crater
+
+### Major Changes
+
+The compiler team has a special process for large changes, whether or not they
+cause breakage. This process is called a Major Change Proposal (MCP). MCP is a
+relatively lightweight mechanism for getting feedback on large changes to the
+compiler (as opposed to a full RFC or a design meeting with the team).
+
+Example of things that might require MCPs include major refactorings, changes
+to important types, or important changes to how the compiler does something, or
+smaller user-facing changes.
+
+**When in doubt, ask on [zulip][z]. It would be a shame to put a lot of work
+into a PR that ends up not getting merged!** [See this document][mcpinfo] for
+more info on MCPs.
+
+[mcpinfo]: https://forge.rust-lang.org/compiler/mcp.html
+
+### Performance
+
+Compiler performance is important. We have put a lot of effort over the last
+few years into [gradually improving it][perfdash].
+
+[perfdash]: https://perf.rust-lang.org/dashboard.html
+
+If you suspect that your change may cause a performance regression (or
+improvement), you can request a "perf run" (your reviewer may also request one
+before approving). This is yet another bot that will compile a collection of
+benchmarks on a compiler with your changes. The numbers are reported
+[here][perf], and you can see a comparison of your changes against the latest
+master.
+
+For an introduction to the performance of Rust code in general
+which would also be useful in rustc development, see [The Rust Performance Book].
+
+[perf]: https://perf.rust-lang.org
+[The Rust Performance Book]: https://nnethercote.github.io/perf-book/
+
+## Other Resources
+
+- This guide: talks about how `rustc` works
+- [The t-compiler zulip][z]
+- [The compiler's documentation (rustdocs)](https://doc.rust-lang.org/nightly/nightly-rustc/)
+- [The Forge](https://forge.rust-lang.org/) has more documentation about various procedures.
+- `#contribute` and `#rustdoc` on [Discord](https://discord.gg/rust-lang).
diff --git a/src/doc/rustc-dev-guide/src/git.md b/src/doc/rustc-dev-guide/src/git.md
new file mode 100644
index 000000000..f16c22d93
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/git.md
@@ -0,0 +1,435 @@
+# Using Git
+
+<!-- toc -->
+
+The Rust project uses [Git] to manage its source code. In order to
+contribute, you'll need some familiarity with its features so that your changes
+can be incorporated into the compiler.
+
+[Git]: https://git-scm.com
+
+The goal of this page is to cover some of the more common questions and
+problems new contributors face. Although some Git basics will be covered here,
+if you find that this is still a little too fast for you, it might make sense
+to first read some introductions to Git, such as the Beginner and Getting
+started sections of [this tutorial from Atlassian][atlassian-git]. GitHub also
+provides [documentation] and [guides] for beginners, or you can consult the
+more in depth [book from Git].
+
+[book from Git]: https://git-scm.com/book/en/v2/
+[atlassian-git]: https://www.atlassian.com/git/tutorials/what-is-version-control
+[documentation]: https://docs.github.com/en/get-started/quickstart/set-up-git
+[guides]: https://guides.github.com/introduction/git-handbook/
+
+## Prerequisites
+
+We'll assume that you've installed Git, forked [rust-lang/rust], and cloned the
+forked repo to your PC. We'll use the command line interface to interact
+with Git; there are also a number of GUIs and IDE integrations that can
+generally do the same things.
+
+[rust-lang/rust]: https://github.com/rust-lang/rust
+
+If you've cloned your fork, then you will be able to reference it with `origin`
+in your local repo. It may be helpful to also set up a remote for the official
+rust-lang/rust repo via
+
+```sh
+git remote add upstream https://github.com/rust-lang/rust.git
+```
+
+if you're using HTTPS, or
+
+```sh
+git remote add upstream git@github.com:rust-lang/rust.git
+```
+
+if you're using SSH.
+
+**NOTE:** This page is dedicated to workflows for `rust-lang/rust`, but will likely be
+useful when contributing to other repositories in the Rust project.
+
+
+## Standard Process
+
+Below is the normal procedure that you're likely to use for most minor changes
+and PRs:
+
+ 1. Ensure that you're making your changes on top of master:
+ `git checkout master`.
+ 2. Get the latest changes from the Rust repo: `git pull upstream master --ff-only`.
+ (see [No-Merge Policy](#keeping-things-up-to-date) for more info about this).
+ 3. Make a new branch for your change: `git checkout -b issue-12345-fix`.
+ 4. Make some changes to the repo and test them.
+ 5. Stage your changes via `git add src/changed/file.rs src/another/change.rs`
+ and then commit them with `git commit`. Of course, making intermediate commits
+ may be a good idea as well. Avoid `git add .`, as it makes it too easy to
+ unintentionally commit changes that should not be committed, such as submodule
+ updates. You can use `git status` to check if there are any files you forgot
+ to stage.
+ 6. Push your changes to your fork: `git push --set-upstream origin issue-12345-fix`
+ (After adding commits, you can use `git push` and after rebasing or
+pulling-and-rebasing, you can use `git push --force-with-lease`).
+ 7. [Open a PR][ghpullrequest] from your fork to `rust-lang/rust`'s master branch.
+
+[ghpullrequest]: https://guides.github.com/activities/forking/#making-a-pull-request
+
+If you end up needing to rebase and are hitting conflicts, see [Rebasing](#rebasing).
+If you want to track upstream while working on long-running feature/issue, see
+[Keeping things up to date](#keeping-things-up-to-date).
+
+If your reviewer requests changes, the procedure for those changes looks much
+the same, with some steps skipped:
+
+ 1. Ensure that you're making changes to the most recent version of your code:
+ `git checkout issue-12345-fix`.
+ 2. Make, stage, and commit your additional changes just like before.
+ 3. Push those changes to your fork: `git push`.
+
+## Troubleshooting git issues
+
+You don't need to clone `rust-lang/rust` from scratch if it's out of date!
+Even if you think you've messed it up beyond repair, there are ways to fix
+the git state that don't require downloading the whole repository again.
+Here are some common issues you might run into:
+
+### I deleted my fork on GitHub!
+
+This is not a problem from git's perspective. If you run `git remote -v`,
+it will say something like this:
+
+```
+$ git remote -v
+origin https://github.com//rust-lang/rust (fetch)
+origin https://github.com//rust-lang/rust (push)
+personal https://github.com/jyn514/rust (fetch)
+personal https://github.com/jyn514/rust (push)
+```
+
+If you renamed your fork, you can change the URL like this:
+
+```console
+git remote set-url personal <URL>
+```
+
+where the `<URL>` is your new fork.
+
+### I see 'Untracked Files: src/stdarch'?
+
+This is left over from the move to the `library/` directory.
+Unfortunately, `git rebase` does not follow renames for submodules, so you
+have to delete the directory yourself:
+
+```console
+rm -r src/stdarch
+```
+
+### I see `<<< HEAD`?
+
+You were probably in the middle of a rebase or merge conflict. See
+[Conflicts](#conflicts) for how to fix the conflict. If you don't care about the changes
+and just want to get a clean copy of the repository back, you can use `git reset`:
+
+```console
+# WARNING: this throws out any local changes you've made! Consider resolving the conflicts instead.
+git reset --hard master
+```
+
+### Quick note about submodules
+
+When updating your local repository with `git pull`, you may notice that sometimes
+Git says you have modified some files that you have never edited. For example,
+running `git status` gives you something like (note the `new commits` mention):
+
+```
+On branch master
+Your branch is up to date with 'origin/master'.
+
+Changes not staged for commit:
+ (use "git add <file>..." to update what will be committed)
+ (use "git restore <file>..." to discard changes in working directory)
+ modified: src/tools/cargo (new commits)
+ modified: src/tools/rls (new commits)
+
+no changes added to commit (use "git add" and/or "git commit -a")
+```
+
+These changes are not changes to files: they are changes to submodules (more on
+this [later](#git-submodules)). To get rid of those, run `git submodule update`
+(or run any `x.py` command, which will automatically update the submodules).
+Note that there is (as of <!-- date: 2022-02 --> February 2022) a [bug][#77620] if you use
+worktrees, submodules, and `x.py` in a commit hook. If you run into an error
+like:
+
+```
+error: failed to read `/home/joshua/rustc-worktree/src/tools/miri/cargo-miri/Cargo.toml`
+
+Caused by:
+ No such file or directory (os error 2)
+```
+it's not anything you did wrong. There is a workaround in [the issue][#77620-workaround].
+
+[#77620]: https://github.com/rust-lang/rust/issues/77620
+[#77620-workaround]: https://github.com/rust-lang/rust/issues/77620#issuecomment-705228229
+
+## Rebasing and Conflicts
+
+When you edit your code locally, you are making changes to the version of
+rust-lang/rust that existed when you created your feature branch. As such, when
+you submit your PR it is possible that some of the changes that have been made
+to rust-lang/rust since then are in conflict with the changes you've made.
+
+When this happens, you need to resolve the conflicts before your changes can be
+merged. First, get a local copy of the conflicting changes: Checkout your local
+master branch with `git checkout master`, then `git pull upstream master` to
+update it with the most recent changes.
+
+### Rebasing
+
+You're now ready to start the rebasing process. Checkout the branch with your
+changes and execute `git rebase master`.
+
+When you rebase a branch on master, all the changes on your branch are
+reapplied to the most recent version of master. In other words, Git tries to
+pretend that the changes you made to the old version of master were instead
+made to the new version of master. During this process, you should expect to
+encounter at least one "rebase conflict." This happens when Git's attempt to
+reapply the changes fails because your changes conflicted with other changes
+that have been made. You can tell that this happened because you'll see
+lines in the output that look like
+
+```
+CONFLICT (content): Merge conflict in file.rs
+```
+
+When you open these files, you'll see sections of the form
+
+```
+<<<<<<< HEAD
+Original code
+=======
+Your code
+>>>>>>> 8fbf656... Commit fixes 12345
+```
+
+This represents the lines in the file that Git could not figure out how to
+rebase. The section between `<<<<<<< HEAD` and `=======` has the code from
+master, while the other side has your version of the code. You'll need to
+decide how to deal with the conflict. You may want to keep your changes,
+keep the changes on master, or combine the two.
+
+Generally, resolving the conflict consists of two steps: First, fix the
+particular conflict. Edit the file to make the changes you want and remove the
+`<<<<<<<`, `=======` and `>>>>>>>` lines in the process. Second, check the
+surrounding code. If there was a conflict, its likely there are some logical
+errors lying around too! It's a good idea to run `x.py check` here to make sure
+there are no glaring errors.
+
+Once you're all done fixing the conflicts, you need to stage the files that had
+conflicts in them via `git add`. Afterwards, run `git rebase --continue` to let
+Git know that you've resolved the conflicts and it should finish the rebase.
+
+Once the rebase has succeeded, you'll want to update the associated branch on
+your fork with `git push --force-with-lease`.
+
+Note that `git push` will not work properly and say something like this:
+
+```
+ ! [rejected] issue-xxxxx -> issue-xxxxx (non-fast-forward)
+error: failed to push some refs to 'https://github.com/username/rust.git'
+hint: Updates were rejected because the tip of your current branch is behind
+hint: its remote counterpart. Integrate the remote changes (e.g.
+hint: 'git pull ...') before pushing again.
+hint: See the 'Note about fast-forwards' in 'git push --help' for details.
+```
+
+The advice this gives is incorrect! Because of Rust's
+["no-merge" policy](#no-merge-policy) the merge commit created by `git pull`
+will not be allowed in the final PR, in addition to defeating the point of the
+rebase! Use `git push --force-with-lease` instead.
+
+### Keeping things up to date
+
+The above section on [Rebasing](#rebasing) is a specific
+guide on rebasing work and dealing with merge conflicts.
+Here is some general advice about how to keep your local repo
+up-to-date with upstream changes:
+
+Using `git pull upstream master` while on your local master branch regularly
+will keep it up-to-date. You will also want to rebase your feature branches
+up-to-date as well. After pulling, you can checkout the feature branches
+and rebase them:
+
+```
+git checkout master
+git pull upstream master --ff-only # to make certain there are no merge commits
+git checkout feature_branch
+git rebase master
+git push --force-with-lease (set origin to be the same as local)
+```
+
+To avoid merges as per the [No-Merge Policy](#no-merge-policy), you may want to use
+`git config pull.ff only` (this will apply the config only to the local repo)
+to ensure that Git doesn't create merge commits when `git pull`ing, without
+needing to pass `--ff-only` or `--rebase` every time.
+
+You can also `git push --force-with-lease` from master to keep your origin's master in sync with
+upstream.
+
+## Advanced Rebasing
+
+If your branch contains multiple consecutive rewrites of the same code, or if
+the rebase conflicts are extremely severe, you can use
+`git rebase --interactive master` to gain more control over the process. This
+allows you to choose to skip commits, edit the commits that you do not skip,
+change the order in which they are applied, or "squash" them into each other.
+
+Alternatively, you can sacrifice the commit history like this:
+
+```
+# squash all the changes into one commit so you only have to worry about conflicts once
+git rebase -i $(git merge-base master HEAD) # and squash all changes along the way
+git rebase master
+# fix all merge conflicts
+git rebase --continue
+```
+
+"Squashing" commits into each other causes them to be merged into a single
+commit. Both the upside and downside of this is that it simplifies the history.
+On the one hand, you lose track of the steps in which changes were made, but
+the history becomes easier to work with.
+
+You also may want to squash just the last few commits together, possibly
+because they only represent "fixups" and not real changes. For example,
+`git rebase --interactive HEAD~2` will allow you to edit the two commits only.
+
+### `git range-diff`
+
+After completing a rebase, and before pushing up your changes, you may want to
+review the changes between your old branch and your new one. You can do that
+with `git range-diff master @{upstream} HEAD`.
+
+The first argument to `range-diff`, `master` in this case, is the base revision
+that you're comparing your old and new branch against. The second argument is
+the old version of your branch; in this case, `@upstream` means the version that
+you've pushed to GitHub, which is the same as what people will see in your pull
+request. Finally, the third argument to `range-diff` is the *new* version of
+your branch; in this case, it is `HEAD`, which is the commit that is currently
+checked-out in your local repo.
+
+Note that you can also use the equivalent, abbreviated form `git range-diff
+master @{u} HEAD`.
+
+Unlike in regular Git diffs, you'll see a `-` or `+` next to another `-` or `+`
+in the range-diff output. The marker on the left indicates a change between the
+old branch and the new branch, and the marker on the right indicates a change
+you've committed. So, you can think of a range-diff as a "diff of diffs" since
+it shows you the differences between your old diff and your new diff.
+
+Here's an example of `git range-diff` output (taken from [Git's
+docs][range-diff-example-docs]):
+
+```
+-: ------- > 1: 0ddba11 Prepare for the inevitable!
+1: c0debee = 2: cab005e Add a helpful message at the start
+2: f00dbal ! 3: decafe1 Describe a bug
+ @@ -1,3 +1,3 @@
+ Author: A U Thor <author@example.com>
+
+ -TODO: Describe a bug
+ +Describe a bug
+ @@ -324,5 +324,6
+ This is expected.
+
+ -+What is unexpected is that it will also crash.
+ ++Unexpectedly, it also crashes. This is a bug, and the jury is
+ ++still out there how to fix it best. See ticket #314 for details.
+
+ Contact
+3: bedead < -: ------- TO-UNDO
+```
+
+(Note that `git range-diff` output in your terminal will probably be easier to
+read than in this example because it will have colors.)
+
+Another feature of `git range-diff` is that, unlike `git diff`, it will also
+diff commit messages. This feature can be useful when amending several commit
+messages so you can make sure you changed the right parts.
+
+`git range-diff` is a very useful command, but note that it can take some time
+to get used to its output format. You may also find Git's documentation on the
+command useful, especially their ["Examples" section][range-diff-example-docs].
+
+[range-diff-example-docs]: https://git-scm.com/docs/git-range-diff#_examples
+
+## No-Merge Policy
+
+The rust-lang/rust repo uses what is known as a "rebase workflow." This means
+that merge commits in PRs are not accepted. As a result, if you are running
+`git merge` locally, chances are good that you should be rebasing instead. Of
+course, this is not always true; if your merge will just be a fast-forward,
+like the merges that `git pull` usually performs, then no merge commit is
+created and you have nothing to worry about. Running `git config merge.ff only`
+(this will apply the config to the local repo).
+once will ensure that all the merges you perform are of this type, so that you
+cannot make a mistake.
+
+There are a number of reasons for this decision and like all others, it is a
+tradeoff. The main advantage is the generally linear commit history. This
+greatly simplifies bisecting and makes the history and commit log much easier
+to follow and understand.
+
+## Git submodules
+
+**NOTE**: submodules are a nice thing to know about, but it *isn't* an absolute
+prerequisite to contribute to `rustc`. If you are using Git for the first time,
+you might want to get used to the main concepts of Git before reading this section.
+
+The `rust-lang/rust` repository uses [Git submodules] as a way to use other
+Rust projects from within the `rust` repo. Examples include Rust's fork of
+`llvm-project` and many devtools such as `cargo` and `rls`.
+
+Those projects are developed and maintained in an separate Git (and GitHub)
+repository, and they have their own Git history/commits, issue tracker and PRs.
+Submodules allow us to create some sort of embedded sub-repository inside the
+`rust` repository and use them like they were directories in the `rust` repository.
+
+Take `miri` for example. `miri` is maintained in the [`rust-lang/miri`] repository,
+but it is used in `rust-lang/rust` by the compiler for const evaluation. We bring it
+in `rust` as a submodule, in the `src/tools/miri` folder.
+
+The contents of submodules are ignored by Git: submodules are in some sense isolated
+from the rest of the repository. However, if you try to `cd src/tools/miri` and then
+run `git status`:
+
+```
+HEAD detached at 3fafb835
+nothing to commit, working tree clean
+```
+
+As far as git is concerned, you are no longer in the `rust` repo, but in the `miri` repo.
+You will notice that we are in "detached HEAD" state, i.e. not on a branch but on a
+particular commit.
+
+This is because, like any dependency, we want to be able to control which version to use.
+Submodules allow us to do just that: every submodule is "pinned" to a certain
+commit, which doesn't change unless modified manually. If you use `git checkout <commit>`
+in the `miri` directory and go back to the `rust` directory, you can stage this
+change like any other, e.g. by running `git add src/tools/miri`. (Note that if
+you *don't* stage the change to commit, then you run the risk that running
+`x.py` will just undo your change by switching back to the previous commit when
+it automatically "updates" the submodules.)
+
+This version selection is usually done by the maintainers of the project, and
+looks like [this][miri-update].
+
+Git submodules take some time to get used to, so don't worry if it isn't perfectly
+clear yet. You will rarely have to use them directly and, again, you don't need
+to know everything about submodules to contribute to Rust. Just know that they
+exist and that they correspond to some sort of embedded subrepository dependency
+that Git can nicely and fairly conveniently handle for us.
+
+[Git submodules]: https://git-scm.com/book/en/v2/Git-Tools-Submodules
+[`rust-toolstate`]: https://rust-lang-nursery.github.io/rust-toolstate/
+[`rust-lang/miri`]: https://github.com/rust-lang/miri
+[miri-update]: https://github.com/rust-lang/rust/pull/77500/files
diff --git a/src/doc/rustc-dev-guide/src/hir-debugging.md b/src/doc/rustc-dev-guide/src/hir-debugging.md
new file mode 100644
index 000000000..8788ad4de
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/hir-debugging.md
@@ -0,0 +1,8 @@
+# HIR Debugging
+
+The `-Z unpretty=hir-tree` flag will dump out the HIR.
+
+If you are trying to correlate `NodeId`s or `DefId`s with source code, the
+`--pretty expanded,identified` flag may be useful.
+
+TODO: anything else? [#1159](https://github.com/rust-lang/rustc-dev-guide/issues/1159)
diff --git a/src/doc/rustc-dev-guide/src/hir.md b/src/doc/rustc-dev-guide/src/hir.md
new file mode 100644
index 000000000..8316f7ce3
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/hir.md
@@ -0,0 +1,136 @@
+# The HIR
+
+<!-- toc -->
+
+The HIR – "High-Level Intermediate Representation" – is the primary IR used
+in most of rustc. It is a compiler-friendly representation of the abstract
+syntax tree (AST) that is generated after parsing, macro expansion, and name
+resolution (see [Lowering](./lowering.html) for how the HIR is created).
+Many parts of HIR resemble Rust surface syntax quite closely, with
+the exception that some of Rust's expression forms have been desugared away.
+For example, `for` loops are converted into a `loop` and do not appear in
+the HIR. This makes HIR more amenable to analysis than a normal AST.
+
+This chapter covers the main concepts of the HIR.
+
+You can view the HIR representation of your code by passing the
+`-Z unpretty=hir-tree` flag to rustc:
+
+```bash
+cargo rustc -- -Z unpretty=hir-tree
+```
+
+## Out-of-band storage and the `Crate` type
+
+The top-level data-structure in the HIR is the [`Crate`], which stores
+the contents of the crate currently being compiled (we only ever
+construct HIR for the current crate). Whereas in the AST the crate
+data structure basically just contains the root module, the HIR
+`Crate` structure contains a number of maps and other things that
+serve to organize the content of the crate for easier access.
+
+[`Crate`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Crate.html
+
+For example, the contents of individual items (e.g. modules,
+functions, traits, impls, etc) in the HIR are not immediately
+accessible in the parents. So, for example, if there is a module item
+`foo` containing a function `bar()`:
+
+```rust
+mod foo {
+ fn bar() { }
+}
+```
+
+then in the HIR the representation of module `foo` (the [`Mod`]
+struct) would only have the **`ItemId`** `I` of `bar()`. To get the
+details of the function `bar()`, we would lookup `I` in the
+`items` map.
+
+[`Mod`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Mod.html
+
+One nice result from this representation is that one can iterate
+over all items in the crate by iterating over the key-value pairs
+in these maps (without the need to trawl through the whole HIR).
+There are similar maps for things like trait items and impl items,
+as well as "bodies" (explained below).
+
+The other reason to set up the representation this way is for better
+integration with incremental compilation. This way, if you gain access
+to an [`&rustc_hir::Item`] (e.g. for the mod `foo`), you do not immediately
+gain access to the contents of the function `bar()`. Instead, you only
+gain access to the **id** for `bar()`, and you must invoke some
+function to lookup the contents of `bar()` given its id; this gives
+the compiler a chance to observe that you accessed the data for
+`bar()`, and then record the dependency.
+
+[`&rustc_hir::Item`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Item.html
+
+<a name="hir-id"></a>
+
+## Identifiers in the HIR
+
+There are a bunch of different identifiers to refer to other nodes or definitions
+in the HIR. In short:
+- A [`DefId`] refers to a *definition* in any crate.
+- A [`LocalDefId`] refers to a *definition* in the currently compiled crate.
+- A [`HirId`] refers to *any node* in the HIR.
+
+For more detailed information, check out the [chapter on identifiers][ids].
+
+[`DefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.DefId.html
+[`LocalDefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.LocalDefId.html
+[`HirId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir_id/struct.HirId.html
+[ids]: ./identifiers.md#in-the-hir
+
+## The HIR Map
+
+Most of the time when you are working with the HIR, you will do so via
+the **HIR Map**, accessible in the tcx via [`tcx.hir()`] (and defined in
+the [`hir::map`] module). The [HIR map] contains a [number of methods] to
+convert between IDs of various kinds and to lookup data associated
+with a HIR node.
+
+[`tcx.hir()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.hir
+[`hir::map`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/index.html
+[HIR map]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html
+[number of methods]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#methods
+
+For example, if you have a [`LocalDefId`], and you would like to convert it
+to a [`HirId`], you can use [`tcx.hir().local_def_id_to_hir_id(def_id)`][local_def_id_to_hir_id].
+You need a `LocalDefId`, rather than a `DefId`, since only local items have HIR nodes.
+
+[local_def_id_to_hir_id]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.local_def_id_to_hir_id
+
+Similarly, you can use [`tcx.hir().find(n)`][find] to lookup the node for a
+[`HirId`]. This returns a `Option<Node<'hir>>`, where [`Node`] is an enum
+defined in the map. By matching on this, you can find out what sort of
+node the `HirId` referred to and also get a pointer to the data
+itself. Often, you know what sort of node `n` is – e.g. if you know
+that `n` must be some HIR expression, you can do
+[`tcx.hir().expect_expr(n)`][expect_expr], which will extract and return the
+[`&hir::Expr`][Expr], panicking if `n` is not in fact an expression.
+
+[find]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.find
+[`Node`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/enum.Node.html
+[expect_expr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.expect_expr
+[Expr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Expr.html
+
+Finally, you can use the HIR map to find the parents of nodes, via
+calls like [`tcx.hir().get_parent_node(n)`][get_parent_node].
+
+[get_parent_node]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.get_parent_node
+
+## HIR Bodies
+
+A [`rustc_hir::Body`] represents some kind of executable code, such as the body
+of a function/closure or the definition of a constant. Bodies are
+associated with an **owner**, which is typically some kind of item
+(e.g. an `fn()` or `const`), but could also be a closure expression
+(e.g. `|x, y| x + y`). You can use the HIR map to find the body
+associated with a given def-id ([`maybe_body_owned_by`]) or to find
+the owner of a body ([`body_owner_def_id`]).
+
+[`rustc_hir::Body`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Body.html
+[`maybe_body_owned_by`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.maybe_body_owned_by
+[`body_owner_def_id`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html#method.body_owner_def_id
diff --git a/src/doc/rustc-dev-guide/src/identifiers.md b/src/doc/rustc-dev-guide/src/identifiers.md
new file mode 100644
index 000000000..18a3efefc
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/identifiers.md
@@ -0,0 +1,108 @@
+# Identifiers in the Compiler
+
+If you have read the few previous chapters, you now know that `rustc` uses
+many different intermediate representations to perform different kinds of analyses.
+However, like in every data structure, you need a way to traverse the structure
+and refer to other elements. In this chapter, you will find information on the
+different identifiers `rustc` uses for each intermediate representation.
+
+## In the AST
+
+A [`NodeId`] is an identifier number that uniquely identifies an AST node within
+a crate. Every node in the AST has its own [`NodeId`], including top-level items
+such as structs, but also individual statements and expressions.
+
+However, because they are absolute within a crate, adding or removing a single
+node in the AST causes all the subsequent [`NodeId`]s to change. This renders
+[`NodeId`]s pretty much useless for incremental compilation, where you want as
+few things as possible to change.
+
+[`NodeId`]s are used in all the `rustc` bits that operate directly on the AST,
+like macro expansion and name resolution.
+
+[`NodeId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/node_id/struct.NodeId.html
+
+## In the HIR
+
+The HIR uses a bunch of different identifiers that coexist and serve different purposes.
+
+- A [`DefId`], as the name suggests, identifies a particular definition, or top-level
+ item, in a given crate. It is composed of two parts: a [`CrateNum`] which identifies
+ the crate the definition comes from, and a [`DefIndex`] which identifies the definition
+ within the crate. Unlike [`HirId`]s, there isn't a [`DefId`] for every expression, which
+ makes them more stable across compilations.
+
+- A [`LocalDefId`] is basically a [`DefId`] that is known to come from the current crate.
+ This allows us to drop the [`CrateNum`] part, and use the type system to ensure that
+ only local definitions are passed to functions that expect a local definition.
+
+- A [`HirId`] uniquely identifies a node in the HIR of the current crate. It is composed
+ of two parts: an `owner` and a `local_id` that is unique within the `owner`. This
+ combination makes for more stable values which are helpful for incremental compilation.
+ Unlike [`DefId`]s, a [`HirId`] can refer to [fine-grained entities][Node] like expressions,
+ but stays local to the current crate.
+
+- A [`BodyId`] identifies a HIR [`Body`] in the current crate. It is currently only
+ a wrapper around a [`HirId`]. For more info about HIR bodies, please refer to the
+ [HIR chapter][hir-bodies].
+
+These identifiers can be converted into one another through the [HIR map][map].
+See the [HIR chapter][hir-map] for more detailed information.
+
+[`DefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.DefId.html
+[`LocalDefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.LocalDefId.html
+[`HirId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir_id/struct.HirId.html
+[`BodyId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.BodyId.html
+[`CrateNum`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.CrateNum.html
+[`DefIndex`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.DefIndex.html
+[`Body`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Body.html
+[Node]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir/enum.Node.html
+[hir-map]: ./hir.md#the-hir-map
+[hir-bodies]: ./hir.md#hir-bodies
+[map]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/map/struct.Map.html
+
+## In the MIR
+
+- [`BasicBlock`] identifies a *basic block*. It points to an instance of
+ [`BasicBlockData`], which can be retrieved by indexing into
+ [`Body::basic_blocks()`] (note that you must call a function; the field is
+ private).
+
+- [`Local`] identifies a local variable in a function. Its associated data is in
+ [`LocalDecl`], which can be retrieved by indexing into [`Body.local_decls`].
+
+- [`Field`] identifies a struct's, union's, or enum variant's field. It is used
+ as a "projection" in [`Place`].
+
+- [`SourceScope`] identifies a name scope in the original source code. Used for
+ diagnostics and for debuginfo in debuggers. It points to an instance of
+ [`SourceScopeData`], which can be retrieved by indexing into
+ [`Body.source_scopes`].
+
+- [`Promoted`] identifies a promoted constant within another item (related to
+ const evaluation). Note: it is unique only locally within the item, so it
+ should be associated with a `DefId`.
+ [`GlobalId`] will give you a more specific identifier.
+
+- [`GlobalId`] identifies a global variable: a `const`, a `static`, a `const fn`
+ where all arguments are [zero-sized types], or a promoted constant.
+
+- [`Location`] represents the location in the MIR of a statement or terminator.
+ It identifies the block (using [`BasicBlock`]) and the index of the statement
+ or terminator in the block.
+
+[`BasicBlock`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.BasicBlock.html
+[`BasicBlockData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.BasicBlockData.html
+[`Body::basic_blocks()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Body.html#method.basic_blocks
+[`Local`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Local.html
+[`LocalDecl`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.LocalDecl.html
+[`Body.local_decls`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Body.html#structfield.local_decls
+[`Field`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Field.html
+[`Place`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Place.html
+[`SourceScope`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.SourceScope.html
+[`SourceScopeData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.SourceScopeData.html
+[`Body.source_scopes`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Body.html#structfield.source_scopes
+[`Promoted`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Promoted.html
+[`GlobalId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/struct.GlobalId.html
+[`Location`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Location.html
+[zero-sized types]: https://doc.rust-lang.org/nomicon/exotic-sizes.html#zero-sized-types-zsts
diff --git a/src/doc/rustc-dev-guide/src/img/coverage-branch-counting-01.png b/src/doc/rustc-dev-guide/src/img/coverage-branch-counting-01.png
new file mode 100644
index 000000000..c445f3552
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/coverage-branch-counting-01.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/img/coverage-graphviz-01.png b/src/doc/rustc-dev-guide/src/img/coverage-graphviz-01.png
new file mode 100644
index 000000000..cf7e1e76b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/coverage-graphviz-01.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/img/coverage-spanview-01.png b/src/doc/rustc-dev-guide/src/img/coverage-spanview-01.png
new file mode 100644
index 000000000..f3e4b3535
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/coverage-spanview-01.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/img/dataflow-graphviz-example.png b/src/doc/rustc-dev-guide/src/img/dataflow-graphviz-example.png
new file mode 100644
index 000000000..718411a8c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/dataflow-graphviz-example.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/img/llvm-cov-show-01.png b/src/doc/rustc-dev-guide/src/img/llvm-cov-show-01.png
new file mode 100644
index 000000000..35f045943
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/llvm-cov-show-01.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/img/rustc_stages.svg b/src/doc/rustc-dev-guide/src/img/rustc_stages.svg
new file mode 100644
index 000000000..25f7ab11b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/rustc_stages.svg
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="581px" height="816px" viewBox="-0.5 -0.5 581 816"><defs/><g><rect x="0" y="0" width="580" height="315" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="0" y="665" width="580" height="150" fill="#ffffff" stroke="#000000" pointer-events="all"/><rect x="0" y="345" width="580" height="287.5" fill="#ffffff" stroke="#000000" pointer-events="all"/><path d="M 120 25 L 193.63 25" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 198.88 25 L 191.88 28.5 L 193.63 25 L 191.88 21.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 25px; margin-left: 160px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Download</div></div></div></foreignObject><text x="160" y="28" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Download</text></switch></g><rect x="40" y="10" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 25px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">beta</div></div></div></foreignObject><text x="80" y="29" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">beta</text></switch></g><rect x="200" y="10" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 25px; margin-left: 201px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0</div></div></div></foreignObject><text x="240" y="29" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0</text></switch></g><path d="M 120 120 L 173.63 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 120 L 171.88 123.5 L 173.63 120 L 171.88 116.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 120px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="123" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="105" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 120px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0</div></div></div></foreignObject><text x="80" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0</text></switch></g><path d="M 260 120 L 313.63 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 120 L 311.88 123.5 L 313.63 120 L 311.88 116.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 120px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="123" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="105" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 120px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">libtest/libstd</div></div></div></foreignObject><text x="220" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">libtest/libstd</text></switch></g><path d="M 400 120 L 453.63 120" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 458.88 120 L 451.88 123.5 L 453.63 120 L 451.88 116.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 120px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Copy</div></div></div></foreignObject><text x="430" y="123" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="320" y="105" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 120px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0-std</div></div></div></foreignObject><text x="360" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0-std</text></switch></g><path d="M 515 135 L 515 145 Q 515 155 505 155 L 230 155 Q 220 155 220 161.82 L 220 168.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 173.88 L 216.5 166.88 L 220 168.63 L 223.5 166.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="460" y="105" width="110" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 120px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0-sysroot</div></div></div></foreignObject><text x="515" y="124" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0-sysroot</text></switch></g><path d="M 120 190 L 173.63 190" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 190 L 171.88 193.5 L 173.63 190 L 171.88 186.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 190px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="193" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="175" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 190px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0</div></div></div></foreignObject><text x="80" y="194" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0</text></switch></g><path d="M 260 190 L 313.63 190" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 190 L 311.88 193.5 L 313.63 190 L 311.88 186.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 190px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="193" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="175" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 190px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">rustc</div></div></div></foreignObject><text x="220" y="194" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">rustc</text></switch></g><path d="M 400 190 L 453.63 190" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 458.88 190 L 451.88 193.5 L 453.63 190 L 451.88 186.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 190px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Copy</div></div></div></foreignObject><text x="430" y="193" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="320" y="175" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 190px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0-rustc</div></div></div></foreignObject><text x="360" y="194" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0-rustc</text></switch></g><path d="M 515 205 L 515 227.5 Q 515 237.5 505 237.5 L 230 237.5 Q 220 237.5 220 247.5 L 220 263.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 268.88 L 216.5 261.88 L 220 263.63 L 223.5 261.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="460" y="175" width="110" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 190px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0-sysroot</div></div></div></foreignObject><text x="515" y="194" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0-sysroot</text></switch></g><path d="M 120 237.5 L 210 237.5 Q 220 237.5 220 247.5 L 220 263.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 268.88 L 216.5 261.88 L 220 263.63 L 223.5 261.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="40" y="222.5" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 238px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">llvm</div></div></div></foreignObject><text x="80" y="241" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">llvm</text></switch></g><path d="M 120 285 L 173.63 285" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 285 L 171.88 288.5 L 173.63 285 L 171.88 281.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 285px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="288" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="270" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 285px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0</div></div></div></foreignObject><text x="80" y="289" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0</text></switch></g><path d="M 260 285 L 313.63 285" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 285 L 311.88 288.5 L 313.63 285 L 311.88 281.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 285px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="288" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="270" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 285px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">codegen</div></div></div></foreignObject><text x="220" y="289" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">codegen</text></switch></g><rect x="320" y="270" width="100" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 285px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0-codegen</div></div></div></foreignObject><text x="370" y="289" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0-codegen</text></switch></g><rect x="-30" y="145" width="90" height="20" fill="none" stroke="none" transform="rotate(-90,15,155)" pointer-events="all"/><g transform="translate(-0.5 -0.5)rotate(-90 15 155)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 155px; margin-left: -29px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 24px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">Stage 0</div></div></div></foreignObject><text x="15" y="162" fill="#000000" font-family="Helvetica" font-size="24px" text-anchor="middle">Stage 0</text></switch></g><path d="M 150 380 L 203.63 380" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 208.88 380 L 201.88 383.5 L 203.63 380 L 201.88 376.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 380px; margin-left: 174px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Copy</div></div></div></foreignObject><text x="174" y="383" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="40" y="355" width="110" height="50" rx="7.5" ry="7.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 380px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0-rustc<br />stage0-codegen<br />stage0-sysroot</div></div></div></foreignObject><text x="95" y="384" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0-rustc...</text></switch></g><path d="M 250 395 L 250 405 Q 250 415 240 415 L 90 415 Q 80 415 80 421.82 L 80 428.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 80 433.88 L 76.5 426.88 L 80 428.63 L 83.5 426.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="210" y="365" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 380px; margin-left: 211px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1</div></div></div></foreignObject><text x="250" y="384" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1</text></switch></g><path d="M 120 450 L 173.63 450" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 450 L 171.88 453.5 L 173.63 450 L 171.88 446.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 450px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="453" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="435" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 450px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1</div></div></div></foreignObject><text x="80" y="454" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1</text></switch></g><path d="M 260 450 L 313.63 450" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 450 L 311.88 453.5 L 313.63 450 L 311.88 446.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 450px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="453" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="435" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 450px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">libtest/libstd</div></div></div></foreignObject><text x="220" y="454" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">libtest/libstd</text></switch></g><path d="M 400 450 L 453.63 450" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 458.88 450 L 451.88 453.5 L 453.63 450 L 451.88 446.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 450px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Copy</div></div></div></foreignObject><text x="430" y="453" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="320" y="435" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 450px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1-std</div></div></div></foreignObject><text x="360" y="454" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1-std</text></switch></g><path d="M 515 465 L 515 477.5 Q 515 487.5 505 487.5 L 230 487.5 Q 220 487.5 220 495.57 L 220 503.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 508.88 L 216.5 501.88 L 220 503.63 L 223.5 501.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="460" y="435" width="110" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 450px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1/lib/rustlib</div></div></div></foreignObject><text x="515" y="454" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1/lib/rustlib</text></switch></g><path d="M 120 525 L 173.63 525" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 525 L 171.88 528.5 L 173.63 525 L 171.88 521.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 525px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="528" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="510" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 525px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1</div></div></div></foreignObject><text x="80" y="529" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1</text></switch></g><path d="M 260 525 L 313.63 525" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 525 L 311.88 528.5 L 313.63 525 L 311.88 521.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 525px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="528" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="510" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 525px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">rustc</div></div></div></foreignObject><text x="220" y="529" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">rustc</text></switch></g><path d="M 400 525 L 453.63 525" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 458.88 525 L 451.88 528.5 L 453.63 525 L 451.88 521.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 525px; margin-left: 430px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Copy</div></div></div></foreignObject><text x="430" y="528" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="320" y="510" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 525px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1-rustc</div></div></div></foreignObject><text x="360" y="529" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1-rustc</text></switch></g><path d="M 515 540 L 515 550 Q 515 560 505 560 L 230 560 Q 220 560 220 566.82 L 220 573.63" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 578.88 L 216.5 571.88 L 220 573.63 L 223.5 571.88 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="460" y="510" width="110" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 525px; margin-left: 461px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1/lib/rustlib</div></div></div></foreignObject><text x="515" y="529" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1/lib/rustlib</text></switch></g><path d="M 120 595 L 173.63 595" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 595 L 171.88 598.5 L 173.63 595 L 171.88 591.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 595px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="598" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="580" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 595px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1</div></div></div></foreignObject><text x="80" y="599" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1</text></switch></g><path d="M 260 595 L 313.63 595" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 595 L 311.88 598.5 L 313.63 595 L 311.88 591.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 595px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="598" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="580" width="80" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 595px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">codegen</div></div></div></foreignObject><text x="220" y="599" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">codegen</text></switch></g><rect x="320" y="580" width="100" height="30" rx="4.5" ry="4.5" fill="#fff2cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 98px; height: 1px; padding-top: 595px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1-codegen</div></div></div></foreignObject><text x="370" y="599" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1-codegen</text></switch></g><rect x="-30" y="510" width="90" height="20" fill="none" stroke="none" transform="rotate(-90,15,520)" pointer-events="all"/><g transform="translate(-0.5 -0.5)rotate(-90 15 520)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 520px; margin-left: -29px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 24px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>Stage 1</div></div></div></div></foreignObject><text x="15" y="527" fill="#000000" font-family="Helvetica" font-size="24px" text-anchor="middle">Stage 1</text></switch></g><path d="M 150 702.5 L 203.63 702.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 208.88 702.5 L 201.88 706 L 203.63 702.5 L 201.88 699 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 703px; margin-left: 174px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Copy</div></div></div></foreignObject><text x="174" y="706" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="40" y="677.5" width="110" height="50" rx="7.5" ry="7.5" fill="#ccff99" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 108px; height: 1px; padding-top: 703px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage1-rustc<br />stage1-codegen<br />stage1/lib/rustlib</div></div></div></foreignObject><text x="95" y="706" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage1-rustc...</text></switch></g><path d="M 250 717.5 L 250 730 Q 250 740 240 740 L 90 740 Q 80 740 80 748.07 L 80 756.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 80 761.38 L 76.5 754.38 L 80 756.13 L 83.5 754.38 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="210" y="687.5" width="80" height="30" rx="4.5" ry="4.5" fill="#ccff99" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 703px; margin-left: 211px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage2</div></div></div></foreignObject><text x="250" y="706" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage2</text></switch></g><path d="M 120 777.5 L 173.63 777.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 777.5 L 171.88 781 L 173.63 777.5 L 171.88 774 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 778px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="781" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="762.5" width="80" height="30" rx="4.5" ry="4.5" fill="#ccff99" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 778px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage2</div></div></div></foreignObject><text x="80" y="781" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage2</text></switch></g><path d="M 260 777.5 L 313.63 777.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 318.88 777.5 L 311.88 781 L 313.63 777.5 L 311.88 774 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 778px; margin-left: 290px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Outputs</div></div></div></foreignObject><text x="290" y="781" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Outputs</text></switch></g><rect x="180" y="762.5" width="80" height="30" rx="4.5" ry="4.5" fill="#ccff99" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 778px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">rustdoc</div></div></div></foreignObject><text x="220" y="781" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">rustdoc</text></switch></g><path d="M 400 777.5 L 443.63 777.5" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 448.88 777.5 L 441.88 781 L 443.63 777.5 L 441.88 774 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 778px; margin-left: 425px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; "><div style="font-size: 11px">Copy</div></div></div></div></foreignObject><text x="425" y="781" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Copy</text></switch></g><rect x="320" y="762.5" width="80" height="30" rx="4.5" ry="4.5" fill="#ccff99" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 778px; margin-left: 321px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage2-tools</div></div></div></foreignObject><text x="360" y="781" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage2-tools</text></switch></g><path d="M 120 70 L 173.63 70" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 178.88 70 L 171.88 73.5 L 173.63 70 L 171.88 66.5 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 1px; height: 1px; padding-top: 70px; margin-left: 144px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 11px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; background-color: #ffffff; white-space: nowrap; ">Builds</div></div></div></foreignObject><text x="144" y="73" fill="#000000" font-family="Helvetica" font-size="11px" text-anchor="middle">Builds</text></switch></g><rect x="40" y="55" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 70px; margin-left: 41px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage0</div></div></div></foreignObject><text x="80" y="74" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage0</text></switch></g><rect x="180" y="55" width="80" height="30" rx="4.5" ry="4.5" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 70px; margin-left: 181px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">bootstrap</div></div></div></foreignObject><text x="220" y="74" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">bootstrap</text></switch></g><path d="M 190 560 L 130 560 Q 120 560 120 558.75 L 120 558.13 Q 120 557.5 130 557.5 L 210 557.5 Q 220 557.5 220 564.32 L 220 571.13" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="stroke"/><path d="M 220 576.38 L 216.5 569.38 L 220 571.13 L 223.5 569.38 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="all"/><rect x="110" y="551" width="80" height="18" rx="2.7" ry="2.7" fill="#ffe6cc" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 560px; margin-left: 111px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">llvm</div></div></div></foreignObject><text x="150" y="564" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">llvm</text></switch></g><rect x="450" y="762.5" width="80" height="30" rx="4.5" ry="4.5" fill="#ccff99" stroke="#000000" pointer-events="all"/><g transform="translate(-0.5 -0.5)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 78px; height: 1px; padding-top: 778px; margin-left: 451px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 12px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; ">stage2</div></div></div></foreignObject><text x="490" y="781" fill="#000000" font-family="Helvetica" font-size="12px" text-anchor="middle">stage2</text></switch></g><rect x="-30" y="735" width="90" height="20" fill="none" stroke="none" transform="rotate(-90,15,745)" pointer-events="all"/><g transform="translate(-0.5 -0.5)rotate(-90 15 745)"><switch><foreignObject style="overflow: visible; text-align: left;" pointer-events="none" width="100%" height="100%" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 88px; height: 1px; padding-top: 745px; margin-left: -29px;"><div style="box-sizing: border-box; font-size: 0; text-align: center; "><div style="display: inline-block; font-size: 24px; font-family: Helvetica; color: #000000; line-height: 1.2; pointer-events: all; white-space: normal; word-wrap: normal; "><div>Stage 2</div></div></div></div></foreignObject><text x="15" y="752" fill="#000000" font-family="Helvetica" font-size="24px" text-anchor="middle">Stage 2</text></switch></g></g><switch><g requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"/><a transform="translate(0,-5)" xlink:href="https://desk.draw.io/support/solutions/articles/16000042487" target="_blank"><text text-anchor="middle" font-size="10px" x="50%" y="100%">Viewer does not support full SVG 1.1</text></a></switch></svg> \ No newline at end of file
diff --git a/src/doc/rustc-dev-guide/src/img/wpa-initial-memory.png b/src/doc/rustc-dev-guide/src/img/wpa-initial-memory.png
new file mode 100644
index 000000000..b6020667e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/wpa-initial-memory.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/img/wpa-stack.png b/src/doc/rustc-dev-guide/src/img/wpa-stack.png
new file mode 100644
index 000000000..29eb5a54b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/img/wpa-stack.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/implementing_new_features.md b/src/doc/rustc-dev-guide/src/implementing_new_features.md
new file mode 100644
index 000000000..ef6ae6179
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/implementing_new_features.md
@@ -0,0 +1,168 @@
+# Implementing new features
+
+When you want to implement a new significant feature in the compiler,
+you need to go through this process to make sure everything goes
+smoothly.
+
+## The @rfcbot FCP process
+
+When the change is small and uncontroversial, then it can be done
+with just writing a PR and getting an r+ from someone who knows that
+part of the code. However, if the change is potentially controversial,
+it would be a bad idea to push it without consensus from the rest
+of the team (both in the "distributed system" sense to make sure
+you don't break anything you don't know about, and in the social
+sense to avoid PR fights).
+
+If such a change seems to be too small to require a full formal RFC process
+(e.g., a small standard library addition, a big refactoring of the code, a
+"technically-breaking" change, or a "big bugfix" that basically amounts to a
+small feature) but is still too controversial or big to get by with a single r+,
+you can propose a final comment period (FCP). Or, if you're not on the relevant
+team (and thus don't have @rfcbot permissions), ask someone who is to start one;
+unless they have a concern themselves, they should.
+
+Again, the FCP process is only needed if you need consensus – if you
+don't think anyone would have a problem with your change, it's OK to
+get by with only an r+. For example, it is OK to add or modify
+unstable command-line flags or attributes without an FCP for
+compiler development or standard library use, as long as you don't
+expect them to be in wide use in the nightly ecosystem.
+
+You don't need to have the implementation fully ready for r+ to propose an FCP,
+but it is generally a good idea to have at least a proof
+of concept so that people can see what you are talking about.
+
+When an FCP is proposed, it requires all members of the team to sign off the
+FCP. After they all do so, there's a 10-day-long "final comment period" (hence
+the name) where everybody can comment, and if no concerns are raised, the
+PR/issue gets FCP approval.
+
+## The logistics of writing features
+
+There are a few "logistic" hoops you might need to go through in
+order to implement a feature in a working way.
+
+### Warning Cycles
+
+In some cases, a feature or bugfix might break some existing programs
+in some edge cases. In that case, you might want to do a crater run
+to assess the impact and possibly add a future-compatibility lint,
+similar to those used for
+[edition-gated lints](diagnostics.md#edition-gated-lints).
+
+### Stability
+
+We [value the stability of Rust]. Code that works and runs on stable
+should (mostly) not break. Because of that, we don't want to release
+a feature to the world with only team consensus and code review -
+we want to gain real-world experience on using that feature on nightly,
+and we might want to change the feature based on that experience.
+
+To allow for that, we must make sure users don't accidentally depend
+on that new feature - otherwise, especially if experimentation takes
+time or is delayed and the feature takes the trains to stable,
+it would end up de facto stable and we'll not be able to make changes
+in it without breaking people's code.
+
+The way we do that is that we make sure all new features are feature
+gated - they can't be used without enabling a feature gate
+(`#[feature(foo)]`), which can't be done in a stable/beta compiler.
+See the [stability in code] section for the technical details.
+
+Eventually, after we gain enough experience using the feature,
+make the necessary changes, and are satisfied, we expose it to
+the world using the stabilization process described [here].
+Until then, the feature is not set in stone: every part of the
+feature can be changed, or the feature might be completely
+rewritten or removed. Features are not supposed to gain tenure
+by being unstable and unchanged for a year.
+
+### Tracking Issues
+
+To keep track of the status of an unstable feature, the
+experience we get while using it on nightly, and of the
+concerns that block its stabilization, every feature-gate
+needs a tracking issue.
+
+General discussions about the feature should be done on
+the tracking issue.
+
+For features that have an RFC, you should use the RFC's
+tracking issue for the feature.
+
+For other features, you'll have to make a tracking issue
+for that feature. The issue title should be "Tracking issue
+for YOUR FEATURE".
+
+For tracking issues for features (as opposed to future-compat
+warnings), I don't think the description has to contain
+anything specific. Generally we put the list of items required
+for stabilization in a checklist, e.g.,
+
+```txt
+**Steps:**
+
+- [ ] Implement the RFC. (CC @rust-lang/compiler -- can anyone write
+ up mentoring instructions?)
+- [ ] Adjust the documentation. ([See instructions on rustc-dev-guide.](stabilization_guide.md#documentation-prs))
+- [ ] Stabilize the feature. ([See instructions on rustc-dev-guide.](stabilization_guide.md#stabilization-pr))
+```
+
+## Stability in code
+
+The below steps needs to be followed in order to implement
+a new unstable feature:
+
+1. Open a [tracking issue] -
+ if you have an RFC, you can use the tracking issue for the RFC.
+
+ The tracking issue should be labeled with at least `C-tracking-issue`.
+ For a language feature, a label `F-feature_name` should be added as well.
+
+2. Pick a name for the feature gate (for RFCs, use the name
+ in the RFC).
+
+3. Add a feature gate declaration to `rustc_feature/src/active.rs`
+ in the active `declare_features` block. See [here][add-feature-gate] for
+ detailed instructions.
+
+4. Prevent usage of the new feature unless the feature gate is set.
+ You can check it in most places in the compiler using the
+ expression `tcx.features().$feature_name` (or
+ `sess.features_untracked().$feature_name` if the
+ tcx is unavailable)
+
+ If the feature gate is not set, you should either maintain
+ the pre-feature behavior or raise an error, depending on
+ what makes sense. Errors should generally use [`rustc_session::parse::feature_err`].
+ For an example of adding an error, see [#81015].
+
+ For features introducing new syntax, pre-expansion gating should be used instead.
+ To do so, extend the [`GatedSpans`] struct, add spans to it during parsing,
+ and then finally feature-gate all the spans in
+ [`rustc_ast_passes::feature_gate::check_crate`].
+
+5. Add a test to ensure the feature cannot be used without
+ a feature gate, by creating `feature-gate-$feature_name.rs`
+ and `feature-gate-$feature_name.stderr` files under the
+ directory where the other tests for your feature reside.
+
+6. Add a section to the unstable book, in
+ `src/doc/unstable-book/src/language-features/$feature_name.md`.
+
+7. Write a lot of tests for the new feature.
+ PRs without tests will not be accepted!
+
+8. Get your PR reviewed and land it. You have now successfully
+ implemented a feature in Rust!
+
+[`GatedSpans`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/parse/struct.GatedSpans.html
+[#81015]: https://github.com/rust-lang/rust/pull/81015
+[`rustc_session::parse::feature_err`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/parse/fn.feature_err.html
+[`rustc_ast_passes::feature_gate::check_crate`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast_passes/feature_gate/fn.check_crate.html
+[value the stability of Rust]: https://github.com/rust-lang/rfcs/blob/master/text/1122-language-semver.md
+[stability in code]: #stability-in-code
+[here]: ./stabilization_guide.md
+[tracking issue]: #tracking-issue
+[add-feature-gate]: ./feature-gates.md#adding-a-feature-gate
diff --git a/src/doc/rustc-dev-guide/src/incrcomp-debugging.md b/src/doc/rustc-dev-guide/src/incrcomp-debugging.md
new file mode 100644
index 000000000..ba312c959
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/incrcomp-debugging.md
@@ -0,0 +1,115 @@
+# Debugging and Testing Dependencies
+
+## Testing the dependency graph
+
+There are various ways to write tests against the dependency graph.
+The simplest mechanisms are the `#[rustc_if_this_changed]` and
+`#[rustc_then_this_would_need]` annotations. These are used in ui tests
+to test whether the expected set of paths exist in the dependency graph.
+As an example, see `src/test/ui/dep-graph/dep-graph-caller-callee.rs`.
+
+The idea is that you can annotate a test like:
+
+```rust,ignore
+#[rustc_if_this_changed]
+fn foo() { }
+
+#[rustc_then_this_would_need(TypeckTables)] //~ ERROR OK
+fn bar() { foo(); }
+
+#[rustc_then_this_would_need(TypeckTables)] //~ ERROR no path
+fn baz() { }
+```
+
+This will check whether there is a path in the dependency graph from `Hir(foo)`
+to `TypeckTables(bar)`. An error is reported for each
+`#[rustc_then_this_would_need]` annotation that indicates whether a path
+exists. `//~ ERROR` annotations can then be used to test if a path is found (as
+demonstrated above).
+
+## Debugging the dependency graph
+
+### Dumping the graph
+
+The compiler is also capable of dumping the dependency graph for your
+debugging pleasure. To do so, pass the `-Z dump-dep-graph` flag. The
+graph will be dumped to `dep_graph.{txt,dot}` in the current
+directory. You can override the filename with the `RUST_DEP_GRAPH`
+environment variable.
+
+Frequently, though, the full dep graph is quite overwhelming and not
+particularly helpful. Therefore, the compiler also allows you to filter
+the graph. You can filter in three ways:
+
+1. All edges originating in a particular set of nodes (usually a single node).
+2. All edges reaching a particular set of nodes.
+3. All edges that lie between given start and end nodes.
+
+To filter, use the `RUST_DEP_GRAPH_FILTER` environment variable, which should
+look like one of the following:
+
+```text
+source_filter // nodes originating from source_filter
+-> target_filter // nodes that can reach target_filter
+source_filter -> target_filter // nodes in between source_filter and target_filter
+```
+
+`source_filter` and `target_filter` are a `&`-separated list of strings.
+A node is considered to match a filter if all of those strings appear in its
+label. So, for example:
+
+```text
+RUST_DEP_GRAPH_FILTER='-> TypeckTables'
+```
+
+would select the predecessors of all `TypeckTables` nodes. Usually though you
+want the `TypeckTables` node for some particular fn, so you might write:
+
+```text
+RUST_DEP_GRAPH_FILTER='-> TypeckTables & bar'
+```
+
+This will select only the predecessors of `TypeckTables` nodes for functions
+with `bar` in their name.
+
+Perhaps you are finding that when you change `foo` you need to re-type-check
+`bar`, but you don't think you should have to. In that case, you might do:
+
+```text
+RUST_DEP_GRAPH_FILTER='Hir & foo -> TypeckTables & bar'
+```
+
+This will dump out all the nodes that lead from `Hir(foo)` to
+`TypeckTables(bar)`, from which you can (hopefully) see the source
+of the erroneous edge.
+
+### Tracking down incorrect edges
+
+Sometimes, after you dump the dependency graph, you will find some
+path that should not exist, but you will not be quite sure how it came
+to be. **When the compiler is built with debug assertions,** it can
+help you track that down. Simply set the `RUST_FORBID_DEP_GRAPH_EDGE`
+environment variable to a filter. Every edge created in the dep-graph
+will be tested against that filter – if it matches, a `bug!` is
+reported, so you can easily see the backtrace (`RUST_BACKTRACE=1`).
+
+The syntax for these filters is the same as described in the previous
+section. However, note that this filter is applied to every **edge**
+and doesn't handle longer paths in the graph, unlike the previous
+section.
+
+Example:
+
+You find that there is a path from the `Hir` of `foo` to the type
+check of `bar` and you don't think there should be. You dump the
+dep-graph as described in the previous section and open `dep-graph.txt`
+to see something like:
+
+```text
+Hir(foo) -> Collect(bar)
+Collect(bar) -> TypeckTables(bar)
+```
+
+That first edge looks suspicious to you. So you set
+`RUST_FORBID_DEP_GRAPH_EDGE` to `Hir&foo -> Collect&bar`, re-run, and
+then observe the backtrace. Voila, bug fixed!
diff --git a/src/doc/rustc-dev-guide/src/lang-items.md b/src/doc/rustc-dev-guide/src/lang-items.md
new file mode 100644
index 000000000..867c42144
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/lang-items.md
@@ -0,0 +1,67 @@
+# Lang items
+
+The compiler has certain pluggable operations; that is, functionality that isn't hard-coded into
+the language, but is implemented in libraries, with a special marker to tell the compiler it
+exists. The marker is the attribute `#[lang = "..."]`, and there are various different values of
+`...`, i.e. various different 'lang items'.
+
+Many such lang items can be implemented only in one sensible way, such as `add` (`trait
+core::ops::Add`) or `future_trait` (`trait core::future::Future`). Others can be overridden to
+achieve some specific goals; for example, you can control your binary's entrypoint.
+
+Features provided by lang items include:
+
+- overloadable operators via traits: the traits corresponding to the
+ `==`, `<`, dereference (`*`), `+`, etc. operators are all
+ marked with lang items; those specific four are `eq`, `ord`,
+ `deref`, and `add` respectively.
+- panicking and stack unwinding; the `eh_personality`, `panic` and
+ `panic_bounds_checks` lang items.
+- the traits in `std::marker` used to indicate properties of types used by the compiler;
+ lang items `send`, `sync` and `copy`.
+- the special marker types used for variance indicators found in
+ `core::marker`; lang item `phantom_data`.
+
+Lang items are loaded lazily by the compiler; e.g. if one never uses `Box`
+then there is no need to define functions for `exchange_malloc` and
+`box_free`. `rustc` will emit an error when an item is needed but not found
+in the current crate or any that it depends on.
+
+Most lang items are defined by the `core` library, but if you're trying to build an
+executable with `#![no_std]`, you'll still need to define a few lang items that are
+usually provided by `std`.
+
+## Retrieving a language item
+
+You can retrieve lang items by calling [`tcx.lang_items()`].
+
+Here's a small example of retrieving the `trait Sized {}` language item:
+
+```rust
+// Note that in case of `#![no_core]`, the trait is not available.
+if let Some(sized_trait_def_id) = tcx.lang_items().sized_trait() {
+ // do something with `sized_trait_def_id`
+}
+```
+
+Note that `sized_trait()` returns an `Option`, not the `DefId` itself.
+That's because language items are defined in the standard library, so if someone compiles with
+`#![no_core]` (or for some lang items, `#![no_std]`), the lang item may not be present.
+You can either:
+
+- Give a hard error if the lang item is necessary to continue (don't panic, since this can happen in
+ user code).
+- Proceed with limited functionality, by just omitting whatever you were going to do with the
+ `DefId`.
+
+[`tcx.lang_items()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.lang_items
+
+## List of all language items
+
+You can find language items in the following places:
+- An exhaustive reference in the compiler documentation: [`rustc_hir::LangItem`]
+- An auto-generated list with source locations by using ripgrep: `rg '#\[.*lang =' library/`
+
+Note that language items are explicitly unstable and may change in any new release.
+
+[`rustc_hir::LangItem`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/lang_items/enum.LangItem.html
diff --git a/src/doc/rustc-dev-guide/src/licenses.md b/src/doc/rustc-dev-guide/src/licenses.md
new file mode 100644
index 000000000..06cd8ae6b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/licenses.md
@@ -0,0 +1,5 @@
+# `rust-lang/rust` Licenses
+
+The `rustc` compiler source and standard library are dual licensed under the [Apache License v2.0](https://github.com/rust-lang/rust/blob/master/LICENSE-APACHE) and the [MIT License](https://github.com/rust-lang/rust/blob/master/LICENSE-MIT) unless otherwise specified.
+
+Detailed licensing information is available in the [COPYRIGHT document](https://github.com/rust-lang/rust/blob/master/COPYRIGHT) of the `rust-lang/rust` repository.
diff --git a/src/doc/rustc-dev-guide/src/llvm-coverage-instrumentation.md b/src/doc/rustc-dev-guide/src/llvm-coverage-instrumentation.md
new file mode 100644
index 000000000..ea4bdfca6
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/llvm-coverage-instrumentation.md
@@ -0,0 +1,627 @@
+# LLVM Source-Based Code Coverage
+
+<!-- toc -->
+
+`rustc` supports detailed source-based code and test coverage analysis
+with a command line option (`-C instrument-coverage`) that instruments Rust
+libraries and binaries with additional instructions and data, at compile time.
+
+The coverage instrumentation injects calls to the LLVM intrinsic instruction
+[`llvm.instrprof.increment`][llvm-instrprof-increment] at code branches
+(based on a MIR-based control flow analysis), and LLVM converts these to
+instructions that increment static counters, when executed. The LLVM coverage
+instrumentation also requires a [Coverage Map] that encodes source metadata,
+mapping counter IDs--directly and indirectly--to the file locations (with
+start and end line and column).
+
+Rust libraries, with or without coverage instrumentation, can be linked into
+instrumented binaries. When the program is executed and cleanly terminates,
+LLVM libraries write the final counter values to a file (`default.profraw` or
+a custom file set through environment variable `LLVM_PROFILE_FILE`).
+
+Developers use existing LLVM coverage analysis tools to decode `.profraw`
+files, with corresponding Coverage Maps (from matching binaries that produced
+them), and generate various reports for analysis, for example:
+
+<img alt="Screenshot of sample `llvm-cov show` result, for function add_quoted_string"
+ src="img/llvm-cov-show-01.png" class="center"/>
+<br/>
+
+Detailed instructions and examples are documented in the
+[Rustc Book][rustc-book-instrument-coverage].
+
+[llvm-instrprof-increment]: https://llvm.org/docs/LangRef.html#llvm-instrprof-increment-intrinsic
+[coverage map]: https://llvm.org/docs/CoverageMappingFormat.html
+[rustc-book-instrument-coverage]: https://doc.rust-lang.org/nightly/rustc/instrument-coverage.html
+
+## Rust symbol mangling
+
+`-C instrument-coverage` automatically enables Rust symbol mangling `v0` (as
+if the user specified `-C symbol-mangling-version=v0` option when invoking
+`rustc`) to ensure consistent and reversible name mangling. This has two
+important benefits:
+
+1. LLVM coverage tools can analyze coverage over multiple runs, including some
+ changes to source code; so mangled names must be consistent across compilations.
+2. LLVM coverage reports can report coverage by function, and even separates
+ out the coverage counts of each unique instantiation of a generic function,
+ if invoked with multiple type substitution variations.
+
+## Components of LLVM Coverage Instrumentation in `rustc`
+
+### LLVM Runtime Dependency
+
+Coverage data is only generated by running the executable Rust program. `rustc`
+statically links coverage-instrumented binaries with LLVM runtime code
+([compiler-rt][compiler-rt-profile]) that implements program hooks
+(such as an `exit` hook) to write the counter values to the `.profraw` file.
+
+In the `rustc` source tree, `library/profiler_builtins` bundles the LLVM
+`compiler-rt` code into a Rust library crate. (When building `rustc`, the
+`profiler_builtins` library is only included when `profiler = true` is set
+in `rustc`'s `config.toml`.)
+
+When compiling with `-C instrument-coverage`,
+[`CrateLoader::postprocess()`][crate-loader-postprocess] dynamically loads the
+`profiler_builtins` library by calling `inject_profiler_runtime()`.
+
+[compiler-rt-profile]: https://github.com/llvm/llvm-project/tree/main/compiler-rt/lib/profile
+[crate-loader-postprocess]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/creader/struct.CrateLoader.html#method.postprocess
+
+### MIR Pass: `InstrumentCoverage`
+
+Coverage instrumentation is performed on the MIR with a [MIR pass][mir-passes]
+called [`InstrumentCoverage`][mir-instrument-coverage]. This MIR pass analyzes
+the control flow graph (CFG)--represented by MIR `BasicBlock`s--to identify
+code branches, and injects additional [`Coverage`][coverage-statement]
+statements into the `BasicBlock`s.
+
+A MIR `Coverage` statement is a virtual instruction that indicates a counter
+should be incremented when its adjacent statements are executed, to count
+a span of code ([`CodeRegion`][code-region]). It counts the number of times a
+branch is executed, and also specifies the exact location of that code span in
+the Rust source code.
+
+Note that many of these `Coverage` statements will _not_ be converted into
+physical counters (or any other executable instructions) in the final binary.
+Some of them will be (see `CoverageKind::`[`Counter`][counter-coverage-kind]),
+but other counters can be computed on the fly, when generating a coverage
+report, by mapping a `CodeRegion` to a
+`CoverageKind`::[`Expression`][expression-coverage-kind].
+
+As an example:
+
+```rust
+fn some_func(flag: bool) {
+ // increment Counter(1)
+ ...
+ if flag {
+ // increment Counter(2)
+ ...
+ } else {
+ // count = Expression(1) = Counter(1) - Counter(2)
+ ...
+ }
+ // count = Expression(2) = Counter(1) + Zero
+ // or, alternatively, Expression(2) = Counter(2) + Expression(1)
+ ...
+}
+```
+
+In this example, four contiguous code regions are counted while only
+incrementing two counters.
+
+CFG analysis is used to not only determine _where_ the branches are, for
+conditional expressions like `if`, `else`, `match`, and `loop`, but also to
+determine where expressions can be used in place of physical counters.
+
+The advantages of optimizing coverage through expressions are more pronounced
+with loops. Loops generally include at least one conditional branch that
+determines when to break out of a loop (a `while` condition, or an `if` or
+`match` with a `break`). In MIR, this is typically lowered to a `SwitchInt`,
+with one branch to stay in the loop, and another branch to break out of the
+loop. The branch that breaks out will almost always execute less often,
+so `InstrumentCoverage` chooses to add a `Counter` to that branch, and an
+`Expression(continue) = Counter(loop) - Counter(break)` to the branch that
+continues.
+
+The `InstrumentCoverage` MIR pass is documented in
+[more detail below][instrument-coverage-pass-details].
+
+[mir-passes]: mir/passes.md
+[mir-instrument-coverage]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_mir_transform/src/coverage
+[code-region]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/coverage/struct.CodeRegion.html
+[counter-coverage-kind]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/coverage/enum.CoverageKind.html#variant.Counter
+[expression-coverage-kind]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/coverage/enum.CoverageKind.html#variant.Expression
+[coverage-statement]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.StatementKind.html#variant.Coverage
+[instrument-coverage-pass-details]: #implementation-details-of-the-instrumentcoverage-mir-pass
+
+### Counter Injection and Coverage Map Pre-staging
+
+When the compiler enters [the Codegen phase][backend-lowering-mir], with a
+coverage-enabled MIR, [`codegen_statement()`][codegen-statement] converts each
+MIR `Statement` into some backend-specific action or instruction.
+`codegen_statement()` forwards `Coverage` statements to
+[`codegen_coverage()`][codegen-coverage]:
+
+```rust
+ pub fn codegen_statement(&mut self, mut bx: Bx, statement: &mir::Statement<'tcx>) -> Bx {
+ ...
+ match statement.kind {
+ ...
+ mir::StatementKind::Coverage(box ref coverage) => {
+ self.codegen_coverage(&mut bx, coverage.clone(), statement.source_info.scope);
+ bx
+ }
+```
+
+`codegen_coverage()` handles each `CoverageKind` as follows:
+
+- For all `CoverageKind`s, Coverage data (counter ID, expression equation
+ and ID, and code regions) are passed to the backend's `Builder`, to
+ populate data structures that will be used to generate the crate's
+ "Coverage Map". (See the [`FunctionCoverage`][function-coverage] `struct`.)
+- For `CoverageKind::Counter`s, an instruction is injected in the backend
+ IR to increment the physical counter, by calling the `BuilderMethod`
+ [`instrprof_increment()`][instrprof-increment].
+
+```rust
+ pub fn codegen_coverage(&self, bx: &mut Bx, coverage: Coverage, scope: SourceScope) {
+ ...
+ let instance = ... // the scoped instance (current or inlined function)
+ let Coverage { kind, code_region } = coverage;
+ match kind {
+ CoverageKind::Counter { function_source_hash, id } => {
+ ...
+ bx.add_coverage_counter(instance, id, code_region);
+ ...
+ bx.instrprof_increment(fn_name, hash, num_counters, index);
+ }
+ CoverageKind::Expression { id, lhs, op, rhs } => {
+ bx.add_coverage_counter_expression(instance, id, lhs, op, rhs, code_region);
+ }
+ CoverageKind::Unreachable => {
+ bx.add_coverage_unreachable(
+ instance,
+ code_region.expect(...
+```
+
+> The function name `instrprof_increment()` is taken from the LLVM intrinsic
+call of the same name ([`llvm.instrprof.increment`][llvm-instrprof-increment]),
+and uses the same arguments and types; but note that, up to and through this
+stage (even though modeled after LLVM's implementation for code coverage
+instrumentation), the data and instructions are not strictly LLVM-specific.
+>
+> But since LLVM is the only Rust-supported backend with the tooling to
+process this form of coverage instrumentation, the backend for `Coverage`
+statements is only implemented for LLVM, at this time.
+
+[backend-lowering-mir]: backend/lowering-mir.md
+[codegen-statement]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/struct.FunctionCx.html#method.codegen_statement
+[codegen-coverage]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/struct.FunctionCx.html#method.codegen_coverage
+[function-coverage]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/coverageinfo/map/struct.FunctionCoverage.html
+[instrprof-increment]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/traits/trait.BuilderMethods.html#tymethod.instrprof_increment
+
+### Coverage Map Generation
+
+With the instructions to increment counters now implemented in LLVM IR,
+the last remaining step is to inject the LLVM IR variables that hold the
+static data for the coverage map.
+
+`rustc_codegen_llvm`'s [`compile_codegen_unit()`][compile-codegen-unit] calls
+[`coverageinfo_finalize()`][coverageinfo-finalize],
+which delegates its implementation to the
+[`rustc_codegen_llvm::coverageinfo::mapgen`][mapgen-finalize] module.
+
+For each function `Instance` (code-generated from MIR, including multiple
+instances of the same MIR for generic functions that have different type
+substitution combinations), `mapgen`'s `finalize()` method queries the
+`Instance`-associated `FunctionCoverage` for its `Counter`s, `Expression`s,
+and `CodeRegion`s; and calls LLVM codegen APIs to generate
+properly-configured variables in LLVM IR, according to very specific
+details of the [_LLVM Coverage Mapping Format_][coverage-mapping-format]
+(Version 6).[^llvm-and-covmap-versions]
+
+[^llvm-and-covmap-versions]: The Rust compiler (as of <!-- date: 2021-12 -->
+December 2021) supports _LLVM Coverage Mapping Format_ Version 5 or 6. Version 5
+was introduced in _LLVM 12_, which is (as of this writing) the minimum LLVM
+version supported by the current version of Rust. Version 6 was introduced in
+_LLVM 13_, which is currently the default LLVM version for Rust. The Rust
+compiler will automatically use the most up-to-date coverage mapping format
+version that is compatible with the compiler's built-in version of LLVM.
+
+```rust
+pub fn finalize<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>) {
+ ...
+ if !tcx.sess.instrument_coverage_except_unused_functions() {
+ add_unused_functions(cx);
+ }
+
+ let mut function_coverage_map = match cx.coverage_context() {
+ Some(ctx) => ctx.take_function_coverage_map(),
+ None => return,
+ };
+ ...
+ let mut mapgen = CoverageMapGenerator::new();
+
+ for (instance, function_coverage) in function_coverage_map {
+ ...
+ let coverage_mapping_buffer = llvm::build_byte_buffer(|coverage_mapping_buffer| {
+ mapgen.write_coverage_mapping(expressions, counter_regions, coverage_mapping_buffer);
+ });
+```
+_code snippet trimmed for brevity_
+
+One notable first step performed by `mapgen::finalize()` is the call to
+[`add_unused_functions()`][add-unused-functions]:
+
+When finalizing the coverage map, `FunctionCoverage` only has the `CodeRegion`s
+and counters for the functions that went through codegen; such as public
+functions and "used" functions (functions referenced by other "used" or public
+items). Any other functions (considered unused) were still parsed and processed
+through the MIR stage.
+
+The set of unused functions is computed via the set difference of all MIR
+`DefId`s (`tcx` query `mir_keys`) minus the codegenned `DefId`s (`tcx` query
+`codegened_and_inlined_items`). `add_unused_functions()` computes the set of
+unused functions, queries the `tcx` for the previously-computed `CodeRegions`,
+for each unused MIR, synthesizes an LLVM function (with no internal statements,
+since it will not be called), and adds a new `FunctionCoverage`, with
+`Unreachable` code regions.
+
+[compile-codegen-unit]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/base/fn.compile_codegen_unit.html
+[coverageinfo-finalize]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/context/struct.CodegenCx.html#method.coverageinfo_finalize
+[mapgen-finalize]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/coverageinfo/mapgen/fn.finalize.html
+[coverage-mapping-format]: https://llvm.org/docs/CoverageMappingFormat.html
+[add-unused-functions]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/coverageinfo/mapgen/fn.add_unused_functions.html
+
+## Testing LLVM Coverage
+
+Coverage instrumentation in the MIR is validated by a `mir-opt` test:
+[`instrument-coverage`][mir-opt-test].
+
+More complete testing of end-to-end coverage instrumentation and reports are
+done in the `run-make-fulldeps` tests, with sample Rust programs (to be
+instrumented) in the [`coverage`][coverage-test-samples] directory, and the
+actual tests and expected results in [`coverage-reports`].
+
+Finally, the [`coverage-llvmir`] test compares compiles a simple Rust program
+with `-C instrument-coverage` and compares the compiled program's LLVM IR to
+expected LLVM IR instructions and structured data for a coverage-enabled
+program, including various checks for Coverage Map-related metadata and the LLVM
+intrinsic calls to increment the runtime counters.
+
+Expected results for both the `mir-opt` tests and the `coverage*` tests under
+`run-make-fulldeps` can be refreshed by running:
+
+```shell
+$ ./x.py test mir-opt --bless
+$ ./x.py test src/test/run-make-fulldeps/coverage --bless
+```
+
+[mir-opt-test]: https://github.com/rust-lang/rust/blob/master/src/test/mir-opt/instrument_coverage.rs
+[coverage-test-samples]: https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/coverage
+[`coverage-reports`]: https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/coverage-reports
+[`coverage-spanview`]: https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/coverage-spanview
+[spanview-debugging]: compiler-debugging.md#viewing-spanview-output
+[`coverage-llvmir`]: https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/coverage-llvmir
+
+## Implementation Details of the `InstrumentCoverage` MIR Pass
+
+The bulk of the implementation of the `InstrumentCoverage` MIR pass is performed
+by the [`Instrumentor`][instrumentor]. For each MIR (each non-const, non-inlined
+function, generic, or closure), the `Instrumentor`'s constructor prepares a
+[`CoverageGraph`][coverage-graph] and then executes
+[`inject_counters()`][inject-counters].
+
+```rust
+ Instrumentor::new(&self.name(), tcx, mir_body).inject_counters();
+```
+
+The `CoverageGraph` is a coverage-specific simplification of the MIR control
+flow graph (CFG). Its nodes are [`BasicCoverageBlock`s][bcb], which
+encompass one or more sequentially-executed MIR `BasicBlock`s
+(with no internal branching), plus a `CoverageKind` counter (to
+be added, via coverage analysis), and an optional set of additional counters
+to count incoming edges (if there are more than one).
+
+The `Instrumentor`'s `inject_counters()` uses the `CoverageGraph` to
+compute the best places to inject coverage counters, as MIR `Statement`s,
+with the following steps:
+
+1. Depending on the debugging configurations in `rustc`'s, `config.toml`,
+ and `rustc` command line flags, various debugging features may be enabled
+ to enhance `debug!()` messages in logs, and to generate various "dump" files,
+ to help developers understand the MIR transformation process for coverage.
+ Most of the debugging features are implemented in the [`debug`][debug]
+ sub-module.
+2. [`generate_coverage_spans()`][generate-coverage-spans] computes the minimum set of distinct,
+ non-branching code regions, from the MIR. These `CoverageSpan`s
+ represent a span of code that must be counted.
+3. [`make_bcb_counters()`][make-bcb-counters] generates `CoverageKind::Counter`s and
+ `CoverageKind::Expression`s for each `CoverageSpan`, plus additional
+ `intermediate_expressions`[^intermediate-expressions], not associated with any `CodeRegion`, but
+ are required to compute a final `Expression` value for a `CodeRegion`.
+4. Inject the new counters into the MIR, as new `StatementKind::Coverage`
+ statements. This is done by three distinct functions:
+ - `inject_coverage_span_counters()`
+ - `inject_indirect_counters()`
+ - `inject_intermediate_expression()`, called for each intermediate expression
+ returned from `make_bcb_counters()`
+
+[^intermediate-expressions]: Intermediate expressions are sometimes required
+because `Expression`s are limited to binary additions or subtractions. For
+example, `A + (B - C)` might represent an `Expression` count computed from three
+other counters, `A`, `B`, and `C`, but computing that value requires an
+intermediate expression for `B - C`.
+
+[instrumentor]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/struct.Instrumentor.html
+[coverage-graph]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/graph/struct.CoverageGraph.html
+[inject-counters]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/struct.Instrumentor.html#method.inject_counters
+[bcb]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/graph/struct.BasicCoverageBlock.html
+[debug]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/debug
+[generate-coverage-spans]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/spans/struct.CoverageSpans.html#method.generate_coverage_spans
+[make-bcb-counters]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/counters/struct.BcbCounters.html#method.make_bcb_counters
+
+### The `CoverageGraph`
+
+The [`CoverageGraph`][coverage-graph] is derived from the MIR (`mir::Body`).
+
+```rust
+ let basic_coverage_blocks = CoverageGraph::from_mir(mir_body);
+```
+
+Like `mir::Body`, the `CoverageGraph` is also a
+[`DirectedGraph`][directed-graph]. Both graphs represent the function's
+fundamental control flow, with many of the same
+[`graph trait`][graph-traits]s, supporting `start_node()`, `num_nodes()`,
+`successors()`, `predecessors()`, and `is_dominated_by()`.
+
+For anyone that knows how to work with the [MIR, as a CFG][mir-dev-guide], the
+`CoverageGraph` will be familiar, and can be used in much the same way.
+The nodes of the `CoverageGraph` are `BasicCoverageBlock`s (BCBs), which
+index into an `IndexVec` of `BasicCoverageBlockData`. This is analogous
+to the MIR CFG of `BasicBlock`s that index `BasicBlockData`.
+
+Each `BasicCoverageBlockData` captures one or more MIR `BasicBlock`s,
+exclusively, and represents the maximal-length sequence of `BasicBlocks`
+without conditional branches.
+
+[`compute_basic_coverage_blocks()`][compute-basic-coverage-blocks] builds the
+`CoverageGraph` as a coverage-specific simplification of the MIR CFG. In
+contrast with the [`SimplifyCfg`][simplify-cfg] MIR pass, this step does
+not alter the MIR itself, because the `CoverageGraph` aggressively simplifies
+the CFG, and ignores nodes that are not relevant to coverage. For example:
+
+ - The BCB CFG ignores (excludes) branches considered not relevant
+ to the current coverage solution. It excludes unwind-related code[^78544]
+ that is injected by the Rust compiler but has no physical source
+ code to count, which allows a `Call`-terminated BasicBlock
+ to be merged with its successor, within a single BCB.
+ - A `Goto`-terminated `BasicBlock` can be merged with its successor
+ **_as long as_** it has the only incoming edge to the successor
+ `BasicBlock`.
+ - Some BasicBlock terminators support Rust-specific concerns--like
+ borrow-checking--that are not relevant to coverage analysis. `FalseUnwind`,
+ for example, can be treated the same as a `Goto` (potentially merged with
+ its successor into the same BCB).
+
+[^78544]: (Note, however, that Issue [#78544][rust-lang/rust#78544] considers
+providing future support for coverage of programs that intentionally
+`panic`, as an option, with some non-trivial cost.)
+
+The BCB CFG is critical to simplifying the coverage analysis by ensuring graph path-based
+queries (`is_dominated_by()`, `predecessors`, `successors`, etc.) have branch (control flow)
+significance.
+
+To visualize the `CoverageGraph`, you can generate a _graphviz_ `*.dot`
+file with the following `rustc` flags:[^graphviz-dark-mode]
+
+[^graphviz-dark-mode]: This image also applies `-Z graphviz-dark-mode`, to
+produce a Graphviz document with "dark mode" styling. If you use a dark mode or
+theme in your development environment, you will probably want to use this
+option so you can review the graphviz output without straining your vision.
+
+```shell
+$ rustc -C instrument-coverage -Z dump-mir=InstrumentCoverage \
+ -Z dump-mir-graphviz some_rust_source.rs
+```
+
+The `-Z dump-mir` flag requests [MIR debugging
+output][mir-debugging] (generating `*.mir` files, by default).
+`-Z dump-mir-graphviz` additionally generates `*.dot` files.
+`-Z dump-mir=InstrumentCoverage` restricts these files to the
+`InstrumentCoverage` pass. All files are written to the `./mir_dump/`
+directory, by default.
+
+Files with names ending in `.-------.InstrumentCoverage.0.dot` contain the
+_graphviz_ representations of a `CoverageGraph` (one for each MIR, that is,
+for each function and closure):
+
+<img alt="cropped image of a sample CoverageGraph in graphviz format"
+ src="img/coverage-graphviz-01.png" style="border: 1px solid gray" class="center"/>
+<br/>
+
+This image shows each `BasicCoverageBlock` as a rectangular _node_, with
+directional edges (the arrows) leading from each node to its `successors()`.
+The nodes contain information in sections:
+
+1. The gray header has a label showing the BCB ID (or _index_ for looking up
+ its `BasicCoverageBlockData`).
+2. The first content section shows the assigned `Counter` or `Expression` for
+ each contiguous section of code. (There may be more than one `Expression`
+ incremented by the same `Counter` for noncontiguous sections of code
+ representing the same sequential actions.) Note the code is represented by
+ the line and column ranges (for example: `52:28-52:33`, representing the
+ original source line 52, for columns 28-33). These are followed by the MIR
+ `Statement` or `Terminator` represented by that source range. (How these
+ coverage regions are determined is discussed in the following section.)
+3. The final section(s) show the MIR `BasicBlock`s (by ID/index and its
+ `TerminatorKind`) contained in this BCB. The last BCB is separated out
+ because its `successors()` determine the edges leading out of the BCB, and
+ into the `leading_bb()` (first `BasicBlock`) of each successor BCB.
+
+Note, to find the `BasicCoverageBlock` from a final BCB `Terminator`'s
+successor `BasicBlock`, there is an index and helper
+function--[`bcb_from_bb()`][bcb-from-bb]--to look up a `BasicCoverageBlock` from
+*any* contained `BasicBlock`.
+
+[directed-graph]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/graph/trait.DirectedGraph.html
+[graph-traits]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/graph/index.html#traits
+[mir-dev-guide]: mir/index.md
+[compute-basic-coverage-blocks]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/graph/struct.CoverageGraph.html#method.compute_basic_coverage_blocks
+[simplify-cfg]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/simplify/struct.SimplifyCfg.html
+[rust-lang/rust#78544]: https://github.com/rust-lang/rust/issues/78544
+[mir-debugging]: mir/debugging.md
+[bcb-from-bb]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/graph/struct.CoverageGraph.html#method.bcb_from_bb
+
+### `CoverageSpans`
+
+The `struct` [`CoverageSpans`][coverage-spans] builds and refines a final set of
+[`CoverageSpan`][coverage-span]s, each representing the largest contiguous `Span`
+of source within a single BCB. By definition--since each `Span` falls within a
+BCB, the `Span` is also non-branching; so if any code in that `Span` has executed,
+all code in the `Span` will have executed, the same number of times.
+
+[`CoverageSpans::generate_coverage_spans()`][generate-coverage-spans] constructs
+an initial set of `CoverageSpan`s from the `Span`s associated with each MIR
+`Statement` and `Terminator`.
+
+The final stage of `generate_coverage_spans()` is handled by
+[`to_refined_spans()`][to-refined-spans], which iterates through the `CoverageSpan`s,
+merges and de-duplicates them, and returns an optimal, minimal set of `CoverageSpan`s
+that can be used to assign coverage `Counter`s or `Expression`s, one-for-one.
+
+An visual, interactive representation of the final `CoverageSpan`s can be
+generated with the following `rustc` flags:
+
+```shell
+$ rustc -C instrument-coverage -Z dump-mir=InstrumentCoverage \
+ -Z dump-mir-spanview some_rust_source.rs
+```
+
+These flags request Spanview output for the `InstrumentCoverage` pass, and the
+resulting files (one for each MIR, that is, for each function or closure) can be
+found in the `mir_dump` directory (by default), with the extension:
+`.-------.InstrumentCoverage.0.html`.
+
+<img alt="cropped image of a sample Spanview in a browser"
+ src="img/coverage-spanview-01.png" style="border: 1px solid gray" class="center"/>
+<br/>
+
+The image above shows one such example. The orange and blue backgrounds
+highlight alternating `CoverageSpan`s from the refined set. Hovering over a
+line expands the output on that line to show the MIR `BasicBlock` IDs covered
+by each `CoverageSpan`. While hovering, the `CoverageSpan` under the pointer
+also has a _tooltip_ block of text, showing even more detail, including the
+MIR `Statement`s and `Terminator`s contributing to the `CoverageSpan`, and
+their individual `Span`s (which should be encapsulated within the code region
+of the refined `CoverageSpan`)
+
+[coverage-spans]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/spans/struct.CoverageSpans.html
+[coverage-span]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/spans/struct.CoverageSpan.html
+[to-refined-spans]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/spans/struct.CoverageSpans.html#method.to_refined_spans
+
+### `make_bcb_counters()`
+
+[`make_bcb_counters()`][make-bcb-counters] traverses the `CoverageGraph` and adds a
+`Counter` or `Expression` to every BCB. It uses _Control Flow Analysis_
+to determine where an `Expression` can be used in place of a `Counter`.
+`Expressions` have no runtime overhead, so if a viable expression (adding or
+subtracting two other counters or expressions) can compute the same result as
+an embedded counter, an `Expression` is preferred.
+
+[`TraverseCoverageGraphWithLoops`][traverse-coverage-graph-with-loops]
+provides a traversal order that ensures all `BasicCoverageBlock` nodes in a
+loop are visited before visiting any node outside that loop. The traversal
+state includes a `context_stack`, with the current loop's context information
+(if in a loop), as well as context for nested loops.
+
+Within loops, nodes with multiple outgoing edges (generally speaking, these
+are BCBs terminated in a `SwitchInt`) can be optimized when at least one
+branch exits the loop and at least one branch stays within the loop. (For an
+`if` or `while`, there are only two branches, but a `match` may have more.)
+
+A branch that does not exit the loop should be counted by `Expression`, if
+possible. Note that some situations require assigning counters to BCBs before
+they are visited by traversal, so the `counter_kind` (`CoverageKind` for
+a `Counter` or `Expression`) may have already been assigned, in which case
+one of the other branches should get the `Expression`.
+
+For a node with more than two branches (such as for more than two
+`match` patterns), only one branch can be optimized by `Expression`. All
+others require a `Counter` (unless its BCB `counter_kind` was previously
+assigned).
+
+A branch expression is derived from the equation:
+
+```text
+Counter(branching_node) = SUM(Counter(branches))
+```
+
+It's important to
+be aware that the `branches` in this equation are the outgoing _edges_
+from the `branching_node`, but a `branch`'s target node may have other
+incoming edges. Given the following graph, for example, the count for
+`B` is the sum of its two incoming edges:
+
+<img alt="Example graph with multiple incoming edges to a branch node"
+ src="img/coverage-branch-counting-01.png" class="center" style="width: 25%">
+<br/>
+
+In this situation, BCB node `B` may require an edge counter for its
+"edge from A", and that edge might be computed from an `Expression`,
+`Counter(A) - Counter(C)`. But an expression for the BCB _node_ `B`
+would be the sum of all incoming edges:
+
+```text
+Expression((Counter(A) - Counter(C)) + SUM(Counter(remaining_edges)))
+```
+
+Note that this is only one possible configuration. The actual choice
+of `Counter` vs. `Expression` also depends on the order of counter
+assignments, and whether a BCB or incoming edge counter already has
+its `Counter` or `Expression`.
+
+[bcb-counters]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/counters/struct.BcbCounters.html
+[traverse-coverage-graph-with-loops]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/graph/struct.TraverseCoverageGraphWithLoops.html
+
+### Injecting counters into a MIR `BasicBlock`
+
+With the refined `CoverageSpan`s, and after all `Counter`s and `Expression`s are
+created, the final step is to inject the `StatementKind::Coverage` statements
+into the MIR. There are three distinct sources, handled by the following
+functions:
+
+- [`inject_coverage_span_counters()`][inject-coverage-span-counters] injects the
+ counter from each `CoverageSpan`'s BCB.
+- [`inject_indirect_counters()`][inject-indirect-counters] injects counters
+ for any BCB not assigned to a `CoverageSpan`, and for all edge counters.
+ These counters don't have `CoverageSpan`s.
+- [`inject_intermediate_expression()`][inject-intermediate-expression] injects
+ the intermediate expressions returned from `make_bcb_counters()`. These
+ counters aren't associated with any BCB, edge, or `CoverageSpan`.
+
+These three functions inject the `Coverage` statements into the MIR.
+`Counter`s and `Expression`s with `CoverageSpan`s add `Coverage` statements
+to a corresponding `BasicBlock`, with a `CodeRegion` computed from the
+refined `Span` and current `SourceMap`.
+
+All other `Coverage` statements have a `CodeRegion` of `None`, but they
+still must be injected because they contribute to other `Expression`s.
+
+Finally, edge's with a `CoverageKind::Counter` require a new `BasicBlock`,
+so the counter is only incremented when traversing the branch edge.
+
+[inject-coverage-span-counters]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/struct.Instrumentor.html#method.inject_coverage_span_counters
+[inject-indirect-counters]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/struct.Instrumentor.html#method.inject_indirect_counters
+[inject-intermediate-expression]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/fn.inject_intermediate_expression.html
+
+### Additional Debugging Support
+
+See the
+[crate documentation for `rustc_mir::transform::coverage::debug`][coverage-debugging]
+for a detailed description of the debug output, logging, and configuration options
+available to developers working on the `InstrumentCoverage` pass.
+
+[coverage-debugging]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/coverage/debug/index.html
diff --git a/src/doc/rustc-dev-guide/src/lowering.md b/src/doc/rustc-dev-guide/src/lowering.md
new file mode 100644
index 000000000..f6885b922
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/lowering.md
@@ -0,0 +1,48 @@
+# Lowering
+
+The lowering step converts AST to [HIR](hir.html).
+This means many structures are removed if they are irrelevant
+for type analysis or similar syntax agnostic analyses. Examples
+of such structures include but are not limited to
+
+* Parenthesis
+ * Removed without replacement, the tree structure makes order explicit
+* `for` loops and `while (let)` loops
+ * Converted to `loop` + `match` and some `let` bindings
+* `if let`
+ * Converted to `match`
+* Universal `impl Trait`
+ * Converted to generic arguments
+ (but with some flags, to know that the user didn't write them)
+* Existential `impl Trait`
+ * Converted to a virtual `existential type` declaration
+
+Lowering needs to uphold several invariants in order to not trigger the
+sanity checks in `compiler/rustc_passes/src/hir_id_validator.rs`:
+
+1. A `HirId` must be used if created. So if you use the `lower_node_id`,
+ you *must* use the resulting `NodeId` or `HirId` (either is fine, since
+ any `NodeId`s in the `HIR` are checked for existing `HirId`s)
+2. Lowering a `HirId` must be done in the scope of the *owning* item.
+ This means you need to use `with_hir_id_owner` if you are creating parts
+ of an item other than the one being currently lowered. This happens for
+ example during the lowering of existential `impl Trait`
+3. A `NodeId` that will be placed into a HIR structure must be lowered,
+ even if its `HirId` is unused. Calling
+ `let _ = self.lower_node_id(node_id);` is perfectly legitimate.
+4. If you are creating new nodes that didn't exist in the `AST`, you *must*
+ create new ids for them. This is done by calling the `next_id` method,
+ which produces both a new `NodeId` as well as automatically lowering it
+ for you so you also get the `HirId`.
+
+If you are creating new `DefId`s, since each `DefId` needs to have a
+corresponding `NodeId`, it is advisable to add these `NodeId`s to the
+`AST` so you don't have to generate new ones during lowering. This has
+the advantage of creating a way to find the `DefId` of something via its
+`NodeId`. If lowering needs this `DefId` in multiple places, you can't
+generate a new `NodeId` in all those places because you'd also get a new
+`DefId` then. With a `NodeId` from the `AST` this is not an issue.
+
+Having the `NodeId` also allows the `DefCollector` to generate the `DefId`s
+instead of lowering having to do it on the fly. Centralizing the `DefId`
+generation in one place makes it easier to refactor and reason about.
diff --git a/src/doc/rustc-dev-guide/src/macro-expansion.md b/src/doc/rustc-dev-guide/src/macro-expansion.md
new file mode 100644
index 000000000..156df8d5f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/macro-expansion.md
@@ -0,0 +1,619 @@
+# Macro expansion
+
+<!-- toc -->
+
+> `rustc_ast`, `rustc_expand`, and `rustc_builtin_macros` are all undergoing
+> refactoring, so some of the links in this chapter may be broken.
+
+Rust has a very powerful macro system. In the previous chapter, we saw how the
+parser sets aside macros to be expanded (it temporarily uses [placeholders]).
+This chapter is about the process of expanding those macros iteratively until
+we have a complete AST for our crate with no unexpanded macros (or a compile
+error).
+
+[placeholders]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/placeholders/index.html
+
+First, we will discuss the algorithm that expands and integrates macro output
+into ASTs. Next, we will take a look at how hygiene data is collected. Finally,
+we will look at the specifics of expanding different types of macros.
+
+Many of the algorithms and data structures described below are in [`rustc_expand`],
+with basic data structures in [`rustc_expand::base`][base].
+
+Also of note, `cfg` and `cfg_attr` are treated specially from other macros, and are
+handled in [`rustc_expand::config`][cfg].
+
+[`rustc_expand`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/index.html
+[base]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/index.html
+[cfg]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/config/index.html
+
+## Expansion and AST Integration
+
+First of all, expansion happens at the crate level. Given a raw source code for
+a crate, the compiler will produce a massive AST with all macros expanded, all
+modules inlined, etc. The primary entry point for this process is the
+[`MacroExpander::fully_expand_fragment`][fef] method. With few exceptions, we
+use this method on the whole crate (see ["Eager Expansion"](#eager-expansion)
+below for more detailed discussion of edge case expansion issues).
+
+[`rustc_builtin_macros`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_builtin_macros/index.html
+[reb]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/build/index.html
+
+At a high level, [`fully_expand_fragment`][fef] works in iterations. We keep a
+queue of unresolved macro invocations (that is, macros we haven't found the
+definition of yet). We repeatedly try to pick a macro from the queue, resolve
+it, expand it, and integrate it back. If we can't make progress in an
+iteration, this represents a compile error. Here is the [algorithm][original]:
+
+[fef]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/expand/struct.MacroExpander.html#method.fully_expand_fragment
+[original]: https://github.com/rust-lang/rust/pull/53778#issuecomment-419224049
+
+0. Initialize an `queue` of unresolved macros.
+1. Repeat until `queue` is empty (or we make no progress, which is an error):
+ 0. [Resolve](./name-resolution.md) imports in our partially built crate as
+ much as possible.
+ 1. Collect as many macro [`Invocation`s][inv] as possible from our
+ partially built crate (fn-like, attributes, derives) and add them to the
+ queue.
+ 2. Dequeue the first element, and attempt to resolve it.
+ 3. If it's resolved:
+ 0. Run the macro's expander function that consumes a [`TokenStream`] or
+ AST and produces a [`TokenStream`] or [`AstFragment`] (depending on
+ the macro kind). (A `TokenStream` is a collection of [`TokenTree`s][tt],
+ each of which are a token (punctuation, identifier, or literal) or a
+ delimited group (anything inside `()`/`[]`/`{}`)).
+ - At this point, we know everything about the macro itself and can
+ call `set_expn_data` to fill in its properties in the global data;
+ that is the hygiene data associated with `ExpnId`. (See [the
+ "Hygiene" section below][hybelow]).
+ 1. Integrate that piece of AST into the big existing partially built
+ AST. This is essentially where the "token-like mass" becomes a
+ proper set-in-stone AST with side-tables. It happens as follows:
+ - If the macro produces tokens (e.g. a proc macro), we parse into
+ an AST, which may produce parse errors.
+ - During expansion, we create `SyntaxContext`s (hierarchy 2). (See
+ [the "Hygiene" section below][hybelow])
+ - These three passes happen one after another on every AST fragment
+ freshly expanded from a macro:
+ - [`NodeId`]s are assigned by [`InvocationCollector`]. This
+ also collects new macro calls from this new AST piece and
+ adds them to the queue.
+ - ["Def paths"][defpath] are created and [`DefId`]s are
+ assigned to them by [`DefCollector`].
+ - Names are put into modules (from the resolver's point of
+ view) by [`BuildReducedGraphVisitor`].
+ 2. After expanding a single macro and integrating its output, continue
+ to the next iteration of [`fully_expand_fragment`][fef].
+ 4. If it's not resolved:
+ 0. Put the macro back in the queue
+ 1. Continue to next iteration...
+
+[defpath]: hir.md#identifiers-in-the-hir
+[`NodeId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/node_id/struct.NodeId.html
+[`InvocationCollector`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/expand/struct.InvocationCollector.html
+[`DefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/def_id/struct.DefId.html
+[`DefCollector`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/def_collector/struct.DefCollector.html
+[`BuildReducedGraphVisitor`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/build_reduced_graph/struct.BuildReducedGraphVisitor.html
+[hybelow]: #hygiene-and-hierarchies
+[tt]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/tokenstream/enum.TokenTree.html
+[`TokenStream`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/tokenstream/struct.TokenStream.html
+[inv]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/expand/struct.Invocation.html
+[`AstFragment`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/expand/enum.AstFragment.html
+
+### Error Recovery
+
+If we make no progress in an iteration, then we have reached a compilation
+error (e.g. an undefined macro). We attempt to recover from failures
+(unresolved macros or imports) for the sake of diagnostics. This allows
+compilation to continue past the first error, so that we can report more errors
+at a time. Recovery can't cause compilation to succeed. We know that it will
+fail at this point. The recovery happens by expanding unresolved macros into
+[`ExprKind::Err`][err].
+
+[err]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/ast/enum.ExprKind.html#variant.Err
+
+### Name Resolution
+
+Notice that name resolution is involved here: we need to resolve imports and
+macro names in the above algorithm. This is done in
+[`rustc_resolve::macros`][mresolve], which resolves macro paths, validates
+those resolutions, and reports various errors (e.g. "not found" or "found, but
+it's unstable" or "expected x, found y"). However, we don't try to resolve
+other names yet. This happens later, as we will see in the [next
+chapter](./name-resolution.md).
+
+[mresolve]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/macros/index.html
+
+### Eager Expansion
+
+_Eager expansion_ means that we expand the arguments of a macro invocation
+before the macro invocation itself. This is implemented only for a few special
+built-in macros that expect literals; expanding arguments first for some of
+these macro results in a smoother user experience. As an example, consider the
+following:
+
+```rust,ignore
+macro bar($i: ident) { $i }
+macro foo($i: ident) { $i }
+
+foo!(bar!(baz));
+```
+
+A lazy expansion would expand `foo!` first. An eager expansion would expand
+`bar!` first.
+
+Eager expansion is not a generally available feature of Rust. Implementing
+eager expansion more generally would be challenging, but we implement it for a
+few special built-in macros for the sake of user experience. The built-in
+macros are implemented in [`rustc_builtin_macros`], along with some other early
+code generation facilities like injection of standard library imports or
+generation of test harness. There are some additional helpers for building
+their AST fragments in [`rustc_expand::build`][reb]. Eager expansion generally
+performs a subset of the things that lazy (normal) expansion. It is done by
+invoking [`fully_expand_fragment`][fef] on only part of a crate (as opposed to
+whole crate, like we normally do).
+
+### Other Data Structures
+
+Here are some other notable data structures involved in expansion and integration:
+- [`ResolverExpand`] - a trait used to break crate dependencies. This allows the
+ resolver services to be used in [`rustc_ast`], despite [`rustc_resolve`] and
+ pretty much everything else depending on [`rustc_ast`].
+- [`ExtCtxt`]/[`ExpansionData`] - various intermediate data kept and used by expansion
+ infrastructure in the process of its work
+- [`Annotatable`] - a piece of AST that can be an attribute target, almost same
+ thing as AstFragment except for types and patterns that can be produced by
+ macros but cannot be annotated with attributes
+- [`MacResult`] - a "polymorphic" AST fragment, something that can turn into a
+ different `AstFragment` depending on its [`AstFragmentKind`] - item,
+ or expression, or pattern etc.
+
+[`rustc_ast`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/index.html
+[`rustc_resolve`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/index.html
+[`ResolverExpand`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/trait.ResolverExpand.html
+[`ExtCtxt`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/struct.ExtCtxt.html
+[`ExpansionData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/struct.ExpansionData.html
+[`Annotatable`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/enum.Annotatable.html
+[`MacResult`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/trait.MacResult.html
+[`AstFragmentKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/expand/enum.AstFragmentKind.html
+
+## Hygiene and Hierarchies
+
+If you have ever used C/C++ preprocessor macros, you know that there are some
+annoying and hard-to-debug gotchas! For example, consider the following C code:
+
+```c
+#define DEFINE_FOO struct Bar {int x;}; struct Foo {Bar bar;};
+
+// Then, somewhere else
+struct Bar {
+ ...
+};
+
+DEFINE_FOO
+```
+
+Most people avoid writing C like this – and for good reason: it doesn't
+compile. The `struct Bar` defined by the macro clashes names with the `struct
+Bar` defined in the code. Consider also the following example:
+
+```c
+#define DO_FOO(x) {\
+ int y = 0;\
+ foo(x, y);\
+ }
+
+// Then elsewhere
+int y = 22;
+DO_FOO(y);
+```
+
+Do you see the problem? We wanted to generate a call `foo(22, 0)`, but instead
+we got `foo(0, 0)` because the macro defined its own `y`!
+
+These are both examples of _macro hygiene_ issues. _Hygiene_ relates to how to
+handle names defined _within a macro_. In particular, a hygienic macro system
+prevents errors due to names introduced within a macro. Rust macros are hygienic
+in that they do not allow one to write the sorts of bugs above.
+
+At a high level, hygiene within the Rust compiler is accomplished by keeping
+track of the context where a name is introduced and used. We can then
+disambiguate names based on that context. Future iterations of the macro system
+will allow greater control to the macro author to use that context. For example,
+a macro author may want to introduce a new name to the context where the macro
+was called. Alternately, the macro author may be defining a variable for use
+only within the macro (i.e. it should not be visible outside the macro).
+
+[code_dir]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_expand/src/mbe
+[code_mp]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_parser
+[code_mr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_rules
+[code_parse_int]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_parser/struct.TtParser.html#method.parse_tt
+[parsing]: ./the-parser.html
+
+The context is attached to AST nodes. All AST nodes generated by macros have
+context attached. Additionally, there may be other nodes that have context
+attached, such as some desugared syntax (non-macro-expanded nodes are
+considered to just have the "root" context, as described below).
+Throughout the compiler, we use [`rustc_span::Span`s][span] to refer to code locations.
+This struct also has hygiene information attached to it, as we will see later.
+
+[span]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html
+
+Because macros invocations and definitions can be nested, the syntax context of
+a node must be a hierarchy. For example, if we expand a macro and there is
+another macro invocation or definition in the generated output, then the syntax
+context should reflect the nesting.
+
+However, it turns out that there are actually a few types of context we may
+want to track for different purposes. Thus, there are not just one but _three_
+expansion hierarchies that together comprise the hygiene information for a
+crate.
+
+All of these hierarchies need some sort of "macro ID" to identify individual
+elements in the chain of expansions. This ID is [`ExpnId`]. All macros receive
+an integer ID, assigned continuously starting from 0 as we discover new macro
+calls. All hierarchies start at [`ExpnId::root()`][rootid], which is its own
+parent.
+
+[`rustc_span::hygiene`][hy] contains all of the hygiene-related algorithms
+(with the exception of some hacks in [`Resolver::resolve_crate_root`][hacks])
+and structures related to hygiene and expansion that are kept in global data.
+
+The actual hierarchies are stored in [`HygieneData`][hd]. This is a global
+piece of data containing hygiene and expansion info that can be accessed from
+any [`Ident`] without any context.
+
+
+[`ExpnId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.ExpnId.html
+[rootid]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.ExpnId.html#method.root
+[hd]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.HygieneData.html
+[hy]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/index.html
+[hacks]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/struct.Resolver.html#method.resolve_crate_root
+[`Ident`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/symbol/struct.Ident.html
+
+### The Expansion Order Hierarchy
+
+The first hierarchy tracks the order of expansions, i.e., when a macro
+invocation is in the output of another macro.
+
+Here, the children in the hierarchy will be the "innermost" tokens. The
+[`ExpnData`] struct itself contains a subset of properties from both macro
+definition and macro call available through global data.
+[`ExpnData::parent`][edp] tracks the child -> parent link in this hierarchy.
+
+[`ExpnData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.ExpnData.html
+[edp]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.ExpnData.html#structfield.parent
+
+For example,
+
+```rust,ignore
+macro_rules! foo { () => { println!(); } }
+
+fn main() { foo!(); }
+```
+
+In this code, the AST nodes that are finally generated would have hierarchy:
+
+```
+root
+ expn_id_foo
+ expn_id_println
+```
+
+### The Macro Definition Hierarchy
+
+The second hierarchy tracks the order of macro definitions, i.e., when we are
+expanding one macro another macro definition is revealed in its output. This
+one is a bit tricky and more complex than the other two hierarchies.
+
+[`SyntaxContext`][sc] represents a whole chain in this hierarchy via an ID.
+[`SyntaxContextData`][scd] contains data associated with the given
+`SyntaxContext`; mostly it is a cache for results of filtering that chain in
+different ways. [`SyntaxContextData::parent`][scdp] is the child -> parent
+link here, and [`SyntaxContextData::outer_expns`][scdoe] are individual
+elements in the chain. The "chaining operator" is
+[`SyntaxContext::apply_mark`][am] in compiler code.
+
+A [`Span`][span], mentioned above, is actually just a compact representation of
+a code location and `SyntaxContext`. Likewise, an [`Ident`] is just an interned
+[`Symbol`] + `Span` (i.e. an interned string + hygiene data).
+
+[`Symbol`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/symbol/struct.Symbol.html
+[scd]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.SyntaxContextData.html
+[scdp]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.SyntaxContextData.html#structfield.parent
+[sc]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.SyntaxContext.html
+[scdoe]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.SyntaxContextData.html#structfield.outer_expn
+[am]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.SyntaxContext.html#method.apply_mark
+
+For built-in macros, we use the context:
+`SyntaxContext::empty().apply_mark(expn_id)`, and such macros are considered to
+be defined at the hierarchy root. We do the same for proc-macros because we
+haven't implemented cross-crate hygiene yet.
+
+If the token had context `X` before being produced by a macro then after being
+produced by the macro it has context `X -> macro_id`. Here are some examples:
+
+Example 0:
+
+```rust,ignore
+macro m() { ident }
+
+m!();
+```
+
+Here `ident` originally has context [`SyntaxContext::root()`][scr]. `ident` has
+context `ROOT -> id(m)` after it's produced by `m`.
+
+[scr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.SyntaxContext.html#method.root
+
+
+Example 1:
+
+```rust,ignore
+macro m() { macro n() { ident } }
+
+m!();
+n!();
+```
+In this example the `ident` has context `ROOT` originally, then `ROOT -> id(m)`
+after the first expansion, then `ROOT -> id(m) -> id(n)`.
+
+Example 2:
+
+Note that these chains are not entirely determined by their last element, in
+other words `ExpnId` is not isomorphic to `SyntaxContext`.
+
+```rust,ignore
+macro m($i: ident) { macro n() { ($i, bar) } }
+
+m!(foo);
+```
+
+After all expansions, `foo` has context `ROOT -> id(n)` and `bar` has context
+`ROOT -> id(m) -> id(n)`.
+
+Finally, one last thing to mention is that currently, this hierarchy is subject
+to the ["context transplantation hack"][hack]. Basically, the more modern (and
+experimental) `macro` macros have stronger hygiene than the older MBE system,
+but this can result in weird interactions between the two. The hack is intended
+to make things "just work" for now.
+
+[hack]: https://github.com/rust-lang/rust/pull/51762#issuecomment-401400732
+
+### The Call-site Hierarchy
+
+The third and final hierarchy tracks the location of macro invocations.
+
+In this hierarchy [`ExpnData::call_site`][callsite] is the child -> parent link.
+
+[callsite]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/hygiene/struct.ExpnData.html#structfield.call_site
+
+Here is an example:
+
+```rust,ignore
+macro bar($i: ident) { $i }
+macro foo($i: ident) { $i }
+
+foo!(bar!(baz));
+```
+
+For the `baz` AST node in the final output, the first hierarchy is `ROOT ->
+id(foo) -> id(bar) -> baz`, while the third hierarchy is `ROOT -> baz`.
+
+### Macro Backtraces
+
+Macro backtraces are implemented in [`rustc_span`] using the hygiene machinery
+in [`rustc_span::hygiene`][hy].
+
+[`rustc_span`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/index.html
+
+## Producing Macro Output
+
+Above, we saw how the output of a macro is integrated into the AST for a crate,
+and we also saw how the hygiene data for a crate is generated. But how do we
+actually produce the output of a macro? It depends on the type of macro.
+
+There are two types of macros in Rust:
+`macro_rules!` macros (a.k.a. "Macros By Example" (MBE)) and procedural macros
+(or "proc macros"; including custom derives). During the parsing phase, the normal
+Rust parser will set aside the contents of macros and their invocations. Later,
+macros are expanded using these portions of the code.
+
+Some important data structures/interfaces here:
+- [`SyntaxExtension`] - a lowered macro representation, contains its expander
+ function, which transforms a `TokenStream` or AST into another `TokenStream`
+ or AST + some additional data like stability, or a list of unstable features
+ allowed inside the macro.
+- [`SyntaxExtensionKind`] - expander functions may have several different
+ signatures (take one token stream, or two, or a piece of AST, etc). This is
+ an enum that lists them.
+- [`BangProcMacro`]/[`TTMacroExpander`]/[`AttrProcMacro`]/[`MultiItemModifier`] -
+ traits representing the expander function signatures.
+
+[`SyntaxExtension`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/struct.SyntaxExtension.html
+[`SyntaxExtensionKind`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/enum.SyntaxExtensionKind.html
+[`BangProcMacro`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/trait.BangProcMacro.html
+[`TTMacroExpander`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/trait.TTMacroExpander.html
+[`AttrProcMacro`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/trait.AttrProcMacro.html
+[`MultiItemModifier`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/base/trait.MultiItemModifier.html
+
+## Macros By Example
+
+MBEs have their own parser distinct from the normal Rust parser. When macros
+are expanded, we may invoke the MBE parser to parse and expand a macro. The
+MBE parser, in turn, may call the normal Rust parser when it needs to bind a
+metavariable (e.g. `$my_expr`) while parsing the contents of a macro
+invocation. The code for macro expansion is in
+[`compiler/rustc_expand/src/mbe/`][code_dir].
+
+### Example
+
+It's helpful to have an example to refer to. For the remainder of this chapter,
+whenever we refer to the "example _definition_", we mean the following:
+
+```rust,ignore
+macro_rules! printer {
+ (print $mvar:ident) => {
+ println!("{}", $mvar);
+ };
+ (print twice $mvar:ident) => {
+ println!("{}", $mvar);
+ println!("{}", $mvar);
+ };
+}
+```
+
+`$mvar` is called a _metavariable_. Unlike normal variables, rather than
+binding to a value in a computation, a metavariable binds _at compile time_ to
+a tree of _tokens_. A _token_ is a single "unit" of the grammar, such as an
+identifier (e.g. `foo`) or punctuation (e.g. `=>`). There are also other
+special tokens, such as `EOF`, which indicates that there are no more tokens.
+Token trees resulting from paired parentheses-like characters (`(`...`)`,
+`[`...`]`, and `{`...`}`) – they include the open and close and all the tokens
+in between (we do require that parentheses-like characters be balanced). Having
+macro expansion operate on token streams rather than the raw bytes of a source
+file abstracts away a lot of complexity. The macro expander (and much of the
+rest of the compiler) doesn't really care that much about the exact line and
+column of some syntactic construct in the code; it cares about what constructs
+are used in the code. Using tokens allows us to care about _what_ without
+worrying about _where_. For more information about tokens, see the
+[Parsing][parsing] chapter of this book.
+
+Whenever we refer to the "example _invocation_", we mean the following snippet:
+
+```rust,ignore
+printer!(print foo); // Assume `foo` is a variable defined somewhere else...
+```
+
+The process of expanding the macro invocation into the syntax tree
+`println!("{}", foo)` and then expanding that into a call to `Display::fmt` is
+called _macro expansion_, and it is the topic of this chapter.
+
+### The MBE parser
+
+There are two parts to MBE expansion: parsing the definition and parsing the
+invocations. Interestingly, both are done by the macro parser.
+
+Basically, the MBE parser is like an NFA-based regex parser. It uses an
+algorithm similar in spirit to the [Earley parsing
+algorithm](https://en.wikipedia.org/wiki/Earley_parser). The macro parser is
+defined in [`compiler/rustc_expand/src/mbe/macro_parser.rs`][code_mp].
+
+The interface of the macro parser is as follows (this is slightly simplified):
+
+```rust,ignore
+fn parse_tt(
+ &mut self,
+ parser: &mut Cow<'_, Parser<'_>>,
+ matcher: &[MatcherLoc]
+) -> ParseResult
+```
+
+We use these items in macro parser:
+
+- `parser` is a reference to the state of a normal Rust parser, including the
+ token stream and parsing session. The token stream is what we are about to
+ ask the MBE parser to parse. We will consume the raw stream of tokens and
+ output a binding of metavariables to corresponding token trees. The parsing
+ session can be used to report parser errors.
+- `matcher` is a sequence of `MatcherLoc`s that we want to match
+ the token stream against. They're converted from token trees before matching.
+
+In the analogy of a regex parser, the token stream is the input and we are matching it
+against the pattern `matcher`. Using our examples, the token stream could be the stream of
+tokens containing the inside of the example invocation `print foo`, while `matcher`
+might be the sequence of token (trees) `print $mvar:ident`.
+
+The output of the parser is a [`ParseResult`], which indicates which of
+three cases has occurred:
+
+- Success: the token stream matches the given `matcher`, and we have produced a binding
+ from metavariables to the corresponding token trees.
+- Failure: the token stream does not match `matcher`. This results in an error message such as
+ "No rule expected token _blah_".
+- Error: some fatal error has occurred _in the parser_. For example, this
+ happens if there are more than one pattern match, since that indicates
+ the macro is ambiguous.
+
+The full interface is defined [here][code_parse_int].
+
+The macro parser does pretty much exactly the same as a normal regex parser with
+one exception: in order to parse different types of metavariables, such as
+`ident`, `block`, `expr`, etc., the macro parser must sometimes call back to the
+normal Rust parser.
+
+As mentioned above, both definitions and invocations of macros are parsed using
+the macro parser. This is extremely non-intuitive and self-referential. The code
+to parse macro _definitions_ is in
+[`compiler/rustc_expand/src/mbe/macro_rules.rs`][code_mr]. It defines the pattern for
+matching for a macro definition as `$( $lhs:tt => $rhs:tt );+`. In other words,
+a `macro_rules` definition should have in its body at least one occurrence of a
+token tree followed by `=>` followed by another token tree. When the compiler
+comes to a `macro_rules` definition, it uses this pattern to match the two token
+trees per rule in the definition of the macro _using the macro parser itself_.
+In our example definition, the metavariable `$lhs` would match the patterns of
+both arms: `(print $mvar:ident)` and `(print twice $mvar:ident)`. And `$rhs`
+would match the bodies of both arms: `{ println!("{}", $mvar); }` and `{
+println!("{}", $mvar); println!("{}", $mvar); }`. The parser would keep this
+knowledge around for when it needs to expand a macro invocation.
+
+When the compiler comes to a macro invocation, it parses that invocation using
+the same NFA-based macro parser that is described above. However, the matcher
+used is the first token tree (`$lhs`) extracted from the arms of the macro
+_definition_. Using our example, we would try to match the token stream `print
+foo` from the invocation against the matchers `print $mvar:ident` and `print
+twice $mvar:ident` that we previously extracted from the definition. The
+algorithm is exactly the same, but when the macro parser comes to a place in the
+current matcher where it needs to match a _non-terminal_ (e.g. `$mvar:ident`),
+it calls back to the normal Rust parser to get the contents of that
+non-terminal. In this case, the Rust parser would look for an `ident` token,
+which it finds (`foo`) and returns to the macro parser. Then, the macro parser
+proceeds in parsing as normal. Also, note that exactly one of the matchers from
+the various arms should match the invocation; if there is more than one match,
+the parse is ambiguous, while if there are no matches at all, there is a syntax
+error.
+
+For more information about the macro parser's implementation, see the comments
+in [`compiler/rustc_expand/src/mbe/macro_parser.rs`][code_mp].
+
+### `macro`s and Macros 2.0
+
+There is an old and mostly undocumented effort to improve the MBE system, give
+it more hygiene-related features, better scoping and visibility rules, etc. There
+hasn't been a lot of work on this recently, unfortunately. Internally, `macro`
+macros use the same machinery as today's MBEs; they just have additional
+syntactic sugar and are allowed to be in namespaces.
+
+## Procedural Macros
+
+Procedural macros are also expanded during parsing, as mentioned above.
+However, they use a rather different mechanism. Rather than having a parser in
+the compiler, procedural macros are implemented as custom, third-party crates.
+The compiler will compile the proc macro crate and specially annotated
+functions in them (i.e. the proc macro itself), passing them a stream of tokens.
+
+The proc macro can then transform the token stream and output a new token
+stream, which is synthesized into the AST.
+
+It's worth noting that the token stream type used by proc macros is _stable_,
+so `rustc` does not use it internally (since our internal data structures are
+unstable). The compiler's token stream is
+[`rustc_ast::tokenstream::TokenStream`][rustcts], as previously. This is
+converted into the stable [`proc_macro::TokenStream`][stablets] and back in
+[`rustc_expand::proc_macro`][pm] and [`rustc_expand::proc_macro_server`][pms].
+Because the Rust ABI is unstable, we use the C ABI for this conversion.
+
+[tsmod]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/tokenstream/index.html
+[rustcts]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/tokenstream/struct.TokenStream.html
+[stablets]: https://doc.rust-lang.org/proc_macro/struct.TokenStream.html
+[pm]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/proc_macro/index.html
+[pms]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/proc_macro_server/index.html
+[`ParseResult`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/mbe/macro_parser/enum.ParseResult.html
+
+TODO: more here. [#1160](https://github.com/rust-lang/rustc-dev-guide/issues/1160)
+
+### Custom Derive
+
+Custom derives are a special type of proc macro.
+
+TODO: more? [#1160](https://github.com/rust-lang/rustc-dev-guide/issues/1160)
diff --git a/src/doc/rustc-dev-guide/src/memory.md b/src/doc/rustc-dev-guide/src/memory.md
new file mode 100644
index 000000000..cde2f454c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/memory.md
@@ -0,0 +1,88 @@
+# Memory Management in Rustc
+
+Rustc tries to be pretty careful how it manages memory. The compiler allocates
+_a lot_ of data structures throughout compilation, and if we are not careful,
+it will take a lot of time and space to do so.
+
+One of the main way the compiler manages this is using arenas and interning.
+
+## Arenas and Interning
+
+We create a LOT of data structures during compilation. For performance reasons,
+we allocate them from a global memory pool; they are each allocated once from a
+long-lived *arena*. This is called _arena allocation_. This system reduces
+allocations/deallocations of memory. It also allows for easy comparison of
+types for equality: for each interned type `X`, we implemented [`PartialEq for
+X`][peqimpl], so we can just compare pointers. The [`CtxtInterners`] type
+contains a bunch of maps of interned types and the arena itself.
+
+[peqimpl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyS.html#implementations
+[`CtxtInterners`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.CtxtInterners.html#structfield.arena
+
+### Example: `ty::TyS`
+
+Taking the example of [`ty::TyS`] which represents a type in the compiler (you
+can read more [here](./ty.md)). Each time we want to construct a type, the
+compiler doesn’t naively allocate from the buffer. Instead, we check if that
+type was already constructed. If it was, we just get the same pointer we had
+before, otherwise we make a fresh pointer. With this schema if we want to know
+if two types are the same, all we need to do is compare the pointers which is
+efficient. `TyS` is carefully setup so you never construct them on the stack.
+You always allocate them from this arena and you always intern them so they are
+unique.
+
+At the beginning of the compilation we make a buffer and each time we need to allocate a type we use
+some of this memory buffer. If we run out of space we get another one. The lifetime of that buffer
+is `'tcx`. Our types are tied to that lifetime, so when compilation finishes all the memory related
+to that buffer is freed and our `'tcx` references would be invalid.
+
+In addition to types, there are a number of other arena-allocated data structures that you can
+allocate, and which are found in this module. Here are a few examples:
+
+- [`Substs`][subst], allocated with `mk_substs` – this will intern a slice of types, often used to
+ specify the values to be substituted for generics (e.g. `HashMap<i32, u32>` would be represented
+ as a slice `&'tcx [tcx.types.i32, tcx.types.u32]`).
+- [`TraitRef`], typically passed by value – a **trait reference** consists of a reference to a trait
+ along with its various type parameters (including `Self`), like `i32: Display` (here, the def-id
+ would reference the `Display` trait, and the substs would contain `i32`). Note that `def-id` is
+ defined and discussed in depth in the `AdtDef and DefId` section.
+- [`Predicate`] defines something the trait system has to prove (see `traits` module).
+
+[subst]: ./generic_arguments.html#subst
+[`TraitRef`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TraitRef.html
+[`Predicate`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Predicate.html
+
+[`ty::TyS`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyS.html
+
+## The tcx and how it uses lifetimes
+
+The `tcx` ("typing context") is the central data structure in the compiler. It is the context that
+you use to perform all manner of queries. The struct `TyCtxt` defines a reference to this shared
+context:
+
+```rust,ignore
+tcx: TyCtxt<'tcx>
+// ----
+// |
+// arena lifetime
+```
+
+As you can see, the `TyCtxt` type takes a lifetime parameter. When you see a reference with a
+lifetime like `'tcx`, you know that it refers to arena-allocated data (or data that lives as long as
+the arenas, anyhow).
+
+### A Note On Lifetimes
+
+The Rust compiler is a fairly large program containing lots of big data
+structures (e.g. the AST, HIR, and the type system) and as such, arenas and
+references are heavily relied upon to minimize unnecessary memory use. This
+manifests itself in the way people can plug into the compiler (i.e. the
+[driver](./rustc-driver.md)), preferring a "push"-style API (callbacks) instead
+of the more Rust-ic "pull" style (think the `Iterator` trait).
+
+Thread-local storage and interning are used a lot through the compiler to reduce
+duplication while also preventing a lot of the ergonomic issues due to many
+pervasive lifetimes. The [`rustc_middle::ty::tls`][tls] module is used to access these
+thread-locals, although you should rarely need to touch it.
+
+[tls]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/tls/index.html
diff --git a/src/doc/rustc-dev-guide/src/method-lookup.md b/src/doc/rustc-dev-guide/src/method-lookup.md
new file mode 100644
index 000000000..8eb8ec5ce
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/method-lookup.md
@@ -0,0 +1,113 @@
+# Method lookup
+
+Method lookup can be rather complex due to the interaction of a number
+of factors, such as self types, autoderef, trait lookup, etc. This
+file provides an overview of the process. More detailed notes are in
+the code itself, naturally.
+
+One way to think of method lookup is that we convert an expression of
+the form `receiver.method(...)` into a more explicit [fully-qualified syntax][]
+(formerly called [UFCS][]):
+
+- `Trait::method(ADJ(receiver), ...)` for a trait call
+- `ReceiverType::method(ADJ(receiver), ...)` for an inherent method call
+
+Here `ADJ` is some kind of adjustment, which is typically a series of
+autoderefs and then possibly an autoref (e.g., `&**receiver`). However
+we sometimes do other adjustments and coercions along the way, in
+particular unsizing (e.g., converting from `[T; n]` to `[T]`).
+
+Method lookup is divided into two major phases:
+
+1. Probing ([`probe.rs`][probe]). The probe phase is when we decide what method
+ to call and how to adjust the receiver.
+2. Confirmation ([`confirm.rs`][confirm]). The confirmation phase "applies"
+ this selection, updating the side-tables, unifying type variables, and
+ otherwise doing side-effectful things.
+
+One reason for this division is to be more amenable to caching. The
+probe phase produces a "pick" (`probe::Pick`), which is designed to be
+cacheable across method-call sites. Therefore, it does not include
+inference variables or other information.
+
+[fully-qualified syntax]: https://doc.rust-lang.org/nightly/book/ch19-03-advanced-traits.html#fully-qualified-syntax-for-disambiguation-calling-methods-with-the-same-name
+[UFCS]: https://github.com/rust-lang/rfcs/blob/master/text/0132-ufcs.md
+[probe]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/check/method/probe/
+[confirm]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/check/method/confirm/
+
+## The Probe phase
+
+### Steps
+
+The first thing that the probe phase does is to create a series of
+*steps*. This is done by progressively dereferencing the receiver type
+until it cannot be deref'd anymore, as well as applying an optional
+"unsize" step. So if the receiver has type `Rc<Box<[T; 3]>>`, this
+might yield:
+
+1. `Rc<Box<[T; 3]>>`
+2. `Box<[T; 3]>`
+3. `[T; 3]`
+4. `[T]`
+
+### Candidate assembly
+
+We then search along those steps to create a list of *candidates*. A
+`Candidate` is a method item that might plausibly be the method being
+invoked. For each candidate, we'll derive a "transformed self type"
+that takes into account explicit self.
+
+Candidates are grouped into two kinds, inherent and extension.
+
+**Inherent candidates** are those that are derived from the
+type of the receiver itself. So, if you have a receiver of some
+nominal type `Foo` (e.g., a struct), any methods defined within an
+impl like `impl Foo` are inherent methods. Nothing needs to be
+imported to use an inherent method, they are associated with the type
+itself (note that inherent impls can only be defined in the same
+crate as the type itself).
+
+FIXME: Inherent candidates are not always derived from impls. If you
+have a trait object, such as a value of type `Box<ToString>`, then the
+trait methods (`to_string()`, in this case) are inherently associated
+with it. Another case is type parameters, in which case the methods of
+their bounds are inherent. However, this part of the rules is subject
+to change: when DST's "impl Trait for Trait" is complete, trait object
+dispatch could be subsumed into trait matching, and the type parameter
+behavior should be reconsidered in light of where clauses.
+
+TODO: Is this FIXME still accurate?
+
+**Extension candidates** are derived from imported traits. If I have
+the trait `ToString` imported, and I call `to_string()` as a method,
+then we will list the `to_string()` definition in each impl of
+`ToString` as a candidate. These kinds of method calls are called
+"extension methods".
+
+So, let's continue our example. Imagine that we were calling a method
+`foo` with the receiver `Rc<Box<[T; 3]>>` and there is a trait `Foo`
+that defines it with `&self` for the type `Rc<U>` as well as a method
+on the type `Box` that defines `foo` but with `&mut self`. Then we
+might have two candidates:
+
+- `&Rc<U>` as an extension candidate
+- `&mut Box<U>` as an inherent candidate
+
+### Candidate search
+
+Finally, to actually pick the method, we will search down the steps,
+trying to match the receiver type against the candidate types. At
+each step, we also consider an auto-ref and auto-mut-ref to see whether
+that makes any of the candidates match. For each resulting receiver
+type, we consider inherent candidates before extension candidates.
+If there are multiple matching candidates in a group, we report an
+error, except that multiple impls of the same trait are treated as a
+single match. Otherwise we pick the first match we find.
+
+In the case of our example, the first step is `Rc<Box<[T; 3]>>`,
+which does not itself match any candidate. But when we autoref it, we
+get the type `&Rc<Box<[T; 3]>>` which matches `&Rc<U>`. We would then
+recursively consider all where-clauses that appear on the impl: if
+those match (or we cannot rule out that they do), then this is the
+method we would pick. Otherwise, we would continue down the series of
+steps.
diff --git a/src/doc/rustc-dev-guide/src/mir/construction.md b/src/doc/rustc-dev-guide/src/mir/construction.md
new file mode 100644
index 000000000..d9f99be03
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/construction.md
@@ -0,0 +1,148 @@
+# MIR construction
+
+<!-- toc -->
+
+The lowering of [HIR] to [MIR] occurs for the following (probably incomplete)
+list of items:
+
+* Function and closure bodies
+* Initializers of `static` and `const` items
+* Initializers of enum discriminants
+* Glue and shims of any kind
+ * Tuple struct initializer functions
+ * Drop code (the `Drop::drop` function is not called directly)
+ * Drop implementations of types without an explicit `Drop` implementation
+
+The lowering is triggered by calling the [`mir_built`] query. The MIR builder does
+not actually use the HIR but operates on the [THIR] instead, processing THIR
+expressions recursively.
+
+The lowering creates local variables for every argument as specified in the signature.
+Next, it creates local variables for every binding specified (e.g. `(a, b): (i32, String)`)
+produces 3 bindings, one for the argument, and two for the bindings. Next, it generates
+field accesses that read the fields from the argument and writes the value to the binding
+variable.
+
+With this initialization out of the way, the lowering triggers a recursive call
+to a function that generates the MIR for the body (a `Block` expression) and
+writes the result into the `RETURN_PLACE`.
+
+## `unpack!` all the things
+
+Functions that generate MIR tend to fall into one of two patterns.
+First, if the function generates only statements, then it will take a
+basic block as argument onto which those statements should be appended.
+It can then return a result as normal:
+
+```rust,ignore
+fn generate_some_mir(&mut self, block: BasicBlock) -> ResultType {
+ ...
+}
+```
+
+But there are other functions that may generate new basic blocks as well.
+For example, lowering an expression like `if foo { 22 } else { 44 }`
+requires generating a small "diamond-shaped graph".
+In this case, the functions take a basic block where their code starts
+and return a (potentially) new basic block where the code generation ends.
+The `BlockAnd` type is used to represent this:
+
+```rust,ignore
+fn generate_more_mir(&mut self, block: BasicBlock) -> BlockAnd<ResultType> {
+ ...
+}
+```
+
+When you invoke these functions, it is common to have a local variable `block`
+that is effectively a "cursor". It represents the point at which we are adding new MIR.
+When you invoke `generate_more_mir`, you want to update this cursor.
+You can do this manually, but it's tedious:
+
+```rust,ignore
+let mut block;
+let v = match self.generate_more_mir(..) {
+ BlockAnd { block: new_block, value: v } => {
+ block = new_block;
+ v
+ }
+};
+```
+
+For this reason, we offer a macro that lets you write
+`let v = unpack!(block = self.generate_more_mir(...))`.
+It simply extracts the new block and overwrites the
+variable `block` that you named in the `unpack!`.
+
+## Lowering expressions into the desired MIR
+
+There are essentially four kinds of representations one might want of an expression:
+
+* `Place` refers to a (or part of a) preexisting memory location (local, static, promoted)
+* `Rvalue` is something that can be assigned to a `Place`
+* `Operand` is an argument to e.g. a `+` operation or a function call
+* a temporary variable containing a copy of the value
+
+The following image depicts a general overview of the interactions between the
+representations:
+
+<img src="mir_overview.svg">
+
+[Click here for a more detailed view](mir_detailed.svg)
+
+We start out with lowering the function body to an `Rvalue` so we can create an
+assignment to `RETURN_PLACE`, This `Rvalue` lowering will in turn trigger lowering to
+`Operand` for its arguments (if any). `Operand` lowering either produces a `const`
+operand, or moves/copies out of a `Place`, thus triggering a `Place` lowering. An
+expression being lowered to a `Place` can in turn trigger a temporary to be created
+if the expression being lowered contains operations. This is where the snake bites its
+own tail and we need to trigger an `Rvalue` lowering for the expression to be written
+into the local.
+
+## Operator lowering
+
+Operators on builtin types are not lowered to function calls (which would end up being
+infinite recursion calls, because the trait impls just contain the operation itself
+again). Instead there are `Rvalue`s for binary and unary operators and index operations.
+These `Rvalue`s later get codegened to llvm primitive operations or llvm intrinsics.
+
+Operators on all other types get lowered to a function call to their `impl` of the
+operator's corresponding trait.
+
+Regardless of the lowering kind, the arguments to the operator are lowered to `Operand`s.
+This means all arguments are either constants, or refer to an already existing value
+somewhere in a local or static.
+
+## Method call lowering
+
+Method calls are lowered to the same `TerminatorKind` that function calls are.
+In [MIR] there is no difference between method calls and function calls anymore.
+
+## Conditions
+
+`if` conditions and `match` statements for `enum`s without variants with fields are
+lowered to `TerminatorKind::SwitchInt`. Each possible value (so `0` and `1` for `if`
+conditions) has a corresponding `BasicBlock` to which the code continues.
+The argument being branched on is (again) an `Operand` representing the value of
+the if condition.
+
+### Pattern matching
+
+`match` statements for `enum`s with variants that have fields are lowered to
+`TerminatorKind::SwitchInt`, too, but the `Operand` refers to a `Place` where the
+discriminant of the value can be found. This often involves reading the discriminant
+to a new temporary variable.
+
+## Aggregate construction
+
+Aggregate values of any kind (e.g. structs or tuples) are built via `Rvalue::Aggregate`.
+All fields are
+lowered to `Operator`s. This is essentially equivalent to one assignment
+statement per aggregate field plus an assignment to the discriminant in the
+case of `enum`s.
+
+[MIR]: ./index.html
+[HIR]: ../hir.html
+[THIR]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/index.html
+
+[`rustc_mir_build::thir::cx::expr`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/cx/expr/index.html
+[`mir_built`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/build/fn.mir_built.html
diff --git a/src/doc/rustc-dev-guide/src/mir/dataflow.md b/src/doc/rustc-dev-guide/src/mir/dataflow.md
new file mode 100644
index 000000000..ce4a86a23
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/dataflow.md
@@ -0,0 +1,237 @@
+# Dataflow Analysis
+
+<!-- toc -->
+
+If you work on the MIR, you will frequently come across various flavors of
+[dataflow analysis][wiki]. `rustc` uses dataflow to find uninitialized
+variables, determine what variables are live across a generator `yield`
+statement, and compute which `Place`s are borrowed at a given point in the
+control-flow graph. Dataflow analysis is a fundamental concept in modern
+compilers, and knowledge of the subject will be helpful to prospective
+contributors.
+
+However, this documentation is not a general introduction to dataflow analysis.
+It is merely a description of the framework used to define these analyses in
+`rustc`. It assumes that the reader is familiar with the core ideas as well as
+some basic terminology, such as "transfer function", "fixpoint" and "lattice".
+If you're unfamiliar with these terms, or if you want a quick refresher,
+[*Static Program Analysis*] by Anders Møller and Michael I. Schwartzbach is an
+excellent, freely available textbook. For those who prefer audiovisual
+learning, we previously recommended a series of short lectures
+by the Goethe University Frankfurt on YouTube, but it has since been deleted.
+See [this PR][pr-1295] for the context and [this comment][pr-1295-comment]
+for the alternative lectures.
+
+## Defining a Dataflow Analysis
+
+The interface for dataflow analyses is split into three traits. The first is
+[`AnalysisDomain`], which must be implemented by *all* analyses. In addition to
+the type of the dataflow state, this trait defines the initial value of that
+state at entry to each block, as well as the direction of the analysis, either
+forward or backward. The domain of your dataflow analysis must be a [lattice][]
+(strictly speaking a join-semilattice) with a well-behaved `join` operator. See
+documentation for the [`lattice`] module, as well as the [`JoinSemiLattice`]
+trait, for more information.
+
+You must then provide *either* a direct implementation of the [`Analysis`] trait
+*or* an implementation of the proxy trait [`GenKillAnalysis`]. The latter is for
+so-called ["gen-kill" problems], which have a simple class of transfer function
+that can be applied very efficiently. Analyses whose domain is not a `BitSet`
+of some index type, or whose transfer functions cannot be expressed through
+"gen" and "kill" operations, must implement `Analysis` directly, and will run
+slower as a result. All implementers of `GenKillAnalysis` also implement
+`Analysis` automatically via a default `impl`.
+
+
+```text
+ AnalysisDomain
+ ^
+ | | = has as a supertrait
+ | . = provides a default impl for
+ |
+ Analysis
+ ^ ^
+ | .
+ | .
+ | .
+ GenKillAnalysis
+
+```
+
+### Transfer Functions and Effects
+
+The dataflow framework in `rustc` allows each statement (and terminator) inside
+a basic block define its own transfer function. For brevity, these
+individual transfer functions are known as "effects". Each effect is applied
+successively in dataflow order, and together they define the transfer function
+for the entire basic block. It's also possible to define an effect for
+particular outgoing edges of some terminators (e.g.
+[`apply_call_return_effect`] for the `success` edge of a `Call`
+terminator). Collectively, these are referred to as "per-edge effects".
+
+The only meaningful difference (besides the "apply" prefix) between the methods
+of the `GenKillAnalysis` trait and the `Analysis` trait is that an `Analysis`
+has direct, mutable access to the dataflow state, whereas a `GenKillAnalysis`
+only sees an implementer of the `GenKill` trait, which only allows the `gen`
+and `kill` operations for mutation.
+
+### "Before" Effects
+
+Observant readers of the documentation may notice that there are actually *two*
+possible effects for each statement and terminator, the "before" effect and the
+unprefixed (or "primary") effect. The "before" effects are applied immediately
+before the unprefixed effect **regardless of the direction of the analysis**.
+In other words, a backward analysis will apply the "before" effect and then the
+"primary" effect when computing the transfer function for a basic block, just
+like a forward analysis.
+
+The vast majority of analyses should use only the unprefixed effects: Having
+multiple effects for each statement makes it difficult for consumers to know
+where they should be looking. However, the "before" variants can be useful in
+some scenarios, such as when the effect of the right-hand side of an assignment
+statement must be considered separately from the left-hand side.
+
+### Convergence
+
+Your analysis must converge to "fixpoint", otherwise it will run forever.
+Converging to fixpoint is just another way of saying "reaching equilibrium".
+In order to reach equilibrium, your analysis must obey some laws. One of the
+laws it must obey is that the bottom value[^bottom-purpose] joined with some
+other value equals the second value. Or, as an equation:
+
+> *bottom* join *x* = *x*
+
+Another law is that your analysis must have a "top value" such that
+
+> *top* join *x* = *top*
+
+Having a top value ensures that your semilattice has a finite height, and the
+law state above ensures that once the dataflow state reaches top, it will no
+longer change (the fixpoint will be top).
+
+[^bottom-purpose]: The bottom value's primary purpose is as the initial dataflow
+ state. Each basic block's entry state is initialized to bottom before the
+ analysis starts.
+
+## A Brief Example
+
+This section provides a brief example of a simple data-flow analysis at a high
+level. It doesn't explain everything you need to know, but hopefully it will
+make the rest of this page clearer.
+
+Let's say we want to do a simple analysis to find if `mem::transmute` may have
+been called by a certain point in the program. Our analysis domain will just
+be a `bool` that records whether `transmute` has been called so far. The bottom
+value will be `false`, since by default `transmute` has not been called. The top
+value will be `true`, since our analysis is done as soon as we determine that
+`transmute` has been called. Our join operator will just be the boolean OR (`||`)
+operator. We use OR and not AND because of this case:
+
+```
+let x = if some_cond {
+ std::mem::transmute<i32, u32>(0_i32); // transmute was called!
+} else {
+ 1_u32; // transmute was not called
+};
+
+// Has transmute been called by this point? We conservatively approximate that
+// as yes, and that is why we use the OR operator.
+println!("x: {}", x);
+```
+
+## Inspecting the Results of a Dataflow Analysis
+
+Once you have constructed an analysis, you must pass it to an [`Engine`], which
+is responsible for finding the steady-state solution to your dataflow problem.
+You should use the [`into_engine`] method defined on the `Analysis` trait for
+this, since it will use the more efficient `Engine::new_gen_kill` constructor
+when possible.
+
+Calling `iterate_to_fixpoint` on your `Engine` will return a `Results`, which
+contains the dataflow state at fixpoint upon entry of each block. Once you have
+a `Results`, you can inspect the dataflow state at fixpoint at any point in
+the CFG. If you only need the state at a few locations (e.g., each `Drop`
+terminator) use a [`ResultsCursor`]. If you need the state at *every* location,
+a [`ResultsVisitor`] will be more efficient.
+
+```text
+ Analysis
+ |
+ | into_engine(…)
+ |
+ Engine
+ |
+ | iterate_to_fixpoint()
+ |
+ Results
+ / \
+ into_results_cursor(…) / \ visit_with(…)
+ / \
+ ResultsCursor ResultsVisitor
+```
+
+For example, the following code uses a [`ResultsVisitor`]...
+
+
+```rust,ignore
+// Assuming `MyVisitor` implements `ResultsVisitor<FlowState = MyAnalysis::Domain>`...
+let mut my_visitor = MyVisitor::new();
+
+// inspect the fixpoint state for every location within every block in RPO.
+let results = MyAnalysis::new()
+ .into_engine(tcx, body, def_id)
+ .iterate_to_fixpoint()
+ .visit_in_rpo_with(body, &mut my_visitor);
+```
+
+whereas this code uses [`ResultsCursor`]:
+
+```rust,ignore
+let mut results = MyAnalysis::new()
+ .into_engine(tcx, body, def_id)
+ .iterate_to_fixpoint()
+ .into_results_cursor(body);
+
+// Inspect the fixpoint state immediately before each `Drop` terminator.
+for (bb, block) in body.basic_blocks().iter_enumerated() {
+ if let TerminatorKind::Drop { .. } = block.terminator().kind {
+ results.seek_before_primary_effect(body.terminator_loc(bb));
+ let state = results.get();
+ println!("state before drop: {:#?}", state);
+ }
+}
+```
+
+### Graphviz Diagrams
+
+When the results of a dataflow analysis are not what you expect, it often helps
+to visualize them. This can be done with the `-Z dump-mir` flags described in
+[Debugging MIR]. Start with `-Z dump-mir=F -Z dump-mir-dataflow`, where `F` is
+either "all" or the name of the MIR body you are interested in.
+
+These `.dot` files will be saved in your `mir_dump` directory and will have the
+[`NAME`] of the analysis (e.g. `maybe_inits`) as part of their filename. Each
+visualization will display the full dataflow state at entry and exit of each
+block, as well as any changes that occur in each statement and terminator. See
+the example below:
+
+![A graphviz diagram for a dataflow analysis](../img/dataflow-graphviz-example.png)
+
+["gen-kill" problems]: https://en.wikipedia.org/wiki/Data-flow_analysis#Bit_vector_problems
+[*Static Program Analysis*]: https://cs.au.dk/~amoeller/spa/
+[Debugging MIR]: ./debugging.html
+[`AnalysisDomain`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.AnalysisDomain.html
+[`Analysis`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.Analysis.html
+[`Engine`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/struct.Engine.html
+[`GenKillAnalysis`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.GenKillAnalysis.html
+[`JoinSemiLattice`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/lattice/trait.JoinSemiLattice.html
+[`NAME`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.AnalysisDomain.html#associatedconstant.NAME
+[`ResultsCursor`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/struct.ResultsCursor.html
+[`ResultsVisitor`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.ResultsVisitor.html
+[`apply_call_return_effect`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.Analysis.html#tymethod.apply_call_return_effect
+[`into_engine`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/trait.Analysis.html#method.into_engine
+[`lattice`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/lattice/index.html
+[pr-1295]: https://github.com/rust-lang/rustc-dev-guide/pull/1295
+[pr-1295-comment]: https://github.com/rust-lang/rustc-dev-guide/pull/1295#issuecomment-1118131294
+[lattice]: https://en.wikipedia.org/wiki/Lattice_(order)
+[wiki]: https://en.wikipedia.org/wiki/Data-flow_analysis#Basic_principles
diff --git a/src/doc/rustc-dev-guide/src/mir/debugging.md b/src/doc/rustc-dev-guide/src/mir/debugging.md
new file mode 100644
index 000000000..3da17785b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/debugging.md
@@ -0,0 +1,98 @@
+# MIR Debugging
+
+The `-Z dump-mir` flag can be used to dump a text representation of the MIR.
+The following optional flags, used in combination with `-Z dump-mir`, enable
+additional output formats, including:
+
+* `-Z dump-mir-graphviz` - dumps a `.dot` file that represents MIR as a
+control-flow graph
+* `-Z dump-mir-dataflow` - dumps a `.dot` file showing the [dataflow state] at
+ each point in the control-flow graph
+* `-Z dump-mir-spanview` - dumps an `.html` file that highlights the source
+spans associated with MIR elements (including mouse-over actions to reveal
+elements obscured by overlaps, and tooltips to view the MIR statements).
+This flag takes an optional value: `statement` (the default), `terminator`, or
+`block`, to generate span highlights with different levels of granularity.
+
+`-Z dump-mir=F` is a handy compiler options that will let you view the MIR for
+each function at each stage of compilation. `-Z dump-mir` takes a **filter** `F`
+which allows you to control which functions and which passes you are
+interesting in. For example:
+
+```bash
+> rustc -Z dump-mir=foo ...
+```
+
+This will dump the MIR for any function whose name contains `foo`; it
+will dump the MIR both before and after every pass. Those files will
+be created in the `mir_dump` directory. There will likely be quite a
+lot of them!
+
+```bash
+> cat > foo.rs
+fn main() {
+ println!("Hello, world!");
+}
+^D
+> rustc -Z dump-mir=main foo.rs
+> ls mir_dump/* | wc -l
+ 161
+```
+
+The files have names like `rustc.main.000-000.CleanEndRegions.after.mir`. These
+names have a number of parts:
+
+```text
+rustc.main.000-000.CleanEndRegions.after.mir
+ ---- --- --- --------------- ----- either before or after
+ | | | name of the pass
+ | | index of dump within the pass (usually 0, but some passes dump intermediate states)
+ | index of the pass
+ def-path to the function etc being dumped
+```
+
+You can also make more selective filters. For example, `main & CleanEndRegions`
+will select for things that reference *both* `main` and the pass
+`CleanEndRegions`:
+
+```bash
+> rustc -Z dump-mir='main & CleanEndRegions' foo.rs
+> ls mir_dump
+rustc.main.000-000.CleanEndRegions.after.mir rustc.main.000-000.CleanEndRegions.before.mir
+```
+<!--- TODO: Change NoLandingPads. [#1232](https://github.com/rust-lang/rustc-dev-guide/issues/1232) -->
+Filters can also have `|` parts to combine multiple sets of
+`&`-filters. For example `main & CleanEndRegions | main &
+NoLandingPads` will select *either* `main` and `CleanEndRegions` *or*
+`main` and `NoLandingPads`:
+
+```bash
+> rustc -Z dump-mir='main & CleanEndRegions | main & NoLandingPads' foo.rs
+> ls mir_dump
+rustc.main-promoted[0].002-000.NoLandingPads.after.mir
+rustc.main-promoted[0].002-000.NoLandingPads.before.mir
+rustc.main-promoted[0].002-006.NoLandingPads.after.mir
+rustc.main-promoted[0].002-006.NoLandingPads.before.mir
+rustc.main-promoted[1].002-000.NoLandingPads.after.mir
+rustc.main-promoted[1].002-000.NoLandingPads.before.mir
+rustc.main-promoted[1].002-006.NoLandingPads.after.mir
+rustc.main-promoted[1].002-006.NoLandingPads.before.mir
+rustc.main.000-000.CleanEndRegions.after.mir
+rustc.main.000-000.CleanEndRegions.before.mir
+rustc.main.002-000.NoLandingPads.after.mir
+rustc.main.002-000.NoLandingPads.before.mir
+rustc.main.002-006.NoLandingPads.after.mir
+rustc.main.002-006.NoLandingPads.before.mir
+```
+
+(Here, the `main-promoted[0]` files refer to the MIR for "promoted constants"
+that appeared within the `main` function.)
+
+The `-Z unpretty=mir-cfg` flag can be used to create a graphviz MIR
+control-flow diagram for the whole crate:
+
+![A control-flow diagram](mir_cfg.svg)
+
+TODO: anything else?
+
+[dataflow state]: ./dataflow.html#graphviz-diagrams
diff --git a/src/doc/rustc-dev-guide/src/mir/drop-elaboration.md b/src/doc/rustc-dev-guide/src/mir/drop-elaboration.md
new file mode 100644
index 000000000..20b92cc45
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/drop-elaboration.md
@@ -0,0 +1,195 @@
+# Drop elaboration
+
+<!-- toc -->
+
+## Dynamic drops
+
+According to the [reference][reference-drop]:
+
+> When an initialized variable or temporary goes out of scope, its destructor
+> is run, or it is dropped. Assignment also runs the destructor of its
+> left-hand operand, if it's initialized. If a variable has been partially
+> initialized, only its initialized fields are dropped.
+
+When building the MIR, the `Drop` and `DropAndReplace` terminators represent
+places where drops may occur. However, in this phase, the presence of these
+terminators does not guarantee that a destructor will run. That's because the
+target of a drop may be uninitialized (usually because it has been moved from)
+before the terminator is reached. In general, we cannot know at compile-time whether a
+variable is initialized.
+
+```rust
+let mut y = vec![];
+
+{
+ let x = vec![1, 2, 3];
+ if std::process::id() % 2 == 0 {
+ y = x; // conditionally move `x` into `y`
+ }
+} // `x` goes out of scope here. Should it be dropped?
+```
+
+In these cases, we need to keep track of whether a variable is initialized
+*dynamically*. The rules are laid out in detail in [RFC 320: Non-zeroing
+dynamic drops][RFC 320].
+
+## Drop obligations
+
+From the RFC:
+
+> When a local variable becomes initialized, it establishes a set of "drop
+> obligations": a set of structural paths (e.g. a local `a`, or a path to a
+> field `b.f.y`) that need to be dropped.
+>
+> The drop obligations for a local variable x of struct-type `T` are computed
+> from analyzing the structure of `T`. If `T` itself implements `Drop`, then `x` is a
+> drop obligation. If `T` does not implement `Drop`, then the set of drop
+> obligations is the union of the drop obligations of the fields of `T`.
+
+When a structural path is moved from (and thus becomes uninitialized), any drop
+obligations for that path or its descendants (`path.f`, `path.f.g.h`, etc.) are
+released. Types with `Drop` implementations do not permit moves from individual
+fields, so there is no need to track initializedness through them.
+
+When a local variable goes out of scope (`Drop`), or when a structural path is
+overwritten via assignment (`DropAndReplace`), we check for any drop
+obligations for that variable or path. Unless that obligation has been
+released by this point, its associated `Drop` implementation will be called.
+For `enum` types, only fields corresponding to the "active" variant need to be
+dropped. When processing drop obligations for such types, we first check the
+discriminant to determine the active variant. All drop obligations for variants
+besides the active one are ignored.
+
+Here are a few interesting types to help illustrate these rules:
+
+```rust
+struct NoDrop(u8); // No `Drop` impl. No fields with `Drop` impls.
+
+struct NeedsDrop(Vec<u8>); // No `Drop` impl but has fields with `Drop` impls.
+
+struct ThinVec(*const u8); // Custom `Drop` impl. Individual fields cannot be moved from.
+
+impl Drop for ThinVec {
+ fn drop(&mut self) { /* ... */ }
+}
+
+enum MaybeDrop {
+ Yes(NeedsDrop),
+ No(NoDrop),
+}
+```
+
+## Drop elaboration
+
+One valid model for these rules is to keep a boolean flag (a "drop flag") for
+every structural path that is used at any point in the function. This flag is
+set when its path is initialized and is cleared when the path is moved from.
+When a `Drop` occurs, we check the flags for every obligation associated with
+the target of the `Drop` and call the associated `Drop` impl for those that are
+still applicable.
+
+This process—transforming the newly built MIR with its imprecise `Drop` and
+`DropAndReplace` terminators into one with drop flags—is known as drop
+elaboration. When a MIR statement causes a variable to become initialized (or
+uninitialized), drop elaboration inserts code that sets (or clears) the drop
+flag for that variable. It wraps `Drop` terminators in conditionals that check
+the newly inserted drop flags.
+
+Drop elaboration also splits `DropAndReplace` terminators into a `Drop` of the
+target and a write of the newly dropped place. This is somewhat unrelated to what
+we've discussed above.
+
+Once this is complete, `Drop` terminators in the MIR correspond to a call to
+the "drop glue" or "drop shim" for the type of the dropped place. The drop
+glue for a type calls the `Drop` impl for that type (if one exists), and then
+recursively calls the drop glue for all fields of that type.
+
+## Drop elaboration in `rustc`
+
+The approach described above is more expensive than necessary. One can imagine
+a few optimizations:
+
+- Only paths that are the target of a `Drop` (or have the target as a prefix)
+ need drop flags.
+- Some variables are known to initialized (or uninitialized) when they are
+ dropped. These do not need drop flags.
+- If a set of paths are only dropped or moved from via a shared prefix, those
+ paths can share a single drop flag.
+
+A subset of these are implemented in `rustc`.
+
+In the compiler, drop elaboration is split across several modules. The pass
+itself is defined [here][drops-transform], but the [main logic][drops] is
+defined elsewhere since it is also used to build [drop shims][drops-shim].
+
+Drop elaboration designates each `Drop` in the newly built MIR as one of four
+kinds:
+
+- `Static`, the target is always initialized.
+- `Dead`, the target is always **un**initialized.
+- `Conditional`, the target is either wholly initialized or wholly
+ uninitialized. It is not partly initialized.
+- `Open`, the target may be partly initialized.
+
+For this, it uses a pair of dataflow analyses, `MaybeInitializedPlaces` and
+`MaybeUninitializedPlaces`. If a place is in one but not the other, then the
+initializedness of the target is known at compile-time (`Dead` or `Static`).
+In this case, drop elaboration does not add a flag for the target. It simply
+removes (`Dead`) or preserves (`Static`) the `Drop` terminator.
+
+For `Conditional` drops, we know that the initializedness of the variable as a
+whole is the same as the initializedness of its fields. Therefore, once we
+generate a drop flag for the target of that drop, it's safe to call the drop
+glue for that target.
+
+### `Open` drops
+
+`Open` drops are the most complex, since we need to break down a single `Drop`
+terminator into several different ones, one for each field of the target whose
+type has drop glue (`Ty::needs_drop`). We cannot call the drop glue for the
+target itself because that requires all fields of the target to be initialized.
+Remember, variables whose type has a custom `Drop` impl do not allow `Open`
+drops because their fields cannot be moved from.
+
+This is accomplished by recursively categorizing each field as `Dead`,
+`Static`, `Conditional` or `Open`. Fields whose type does not have drop glue
+are automatically `Dead` and need not be considered during the recursion. When
+we reach a field whose kind is not `Open`, we handle it as we did above. If the
+field is also `Open`, the recursion continues.
+
+It's worth noting how we handle `Open` drops of enums. Inside drop elaboration,
+each variant of the enum is treated like a field, with the invariant that only
+one of those "variant fields" can be initialized at any given time. In the
+general case, we do not know which variant is the active one, so we will have
+to call the drop glue for the enum (which checks the discriminant) or check the
+discriminant ourselves as part of an elaborated `Open` drop. However, in
+certain cases (within a `match` arm, for example) we do know which variant of
+an enum is active. This information is encoded in the `MaybeInitializedPlaces`
+and `MaybeUninitializedPlaces` dataflow analyses by marking all places
+corresponding to inactive variants as uninitialized.
+
+### Cleanup paths
+
+TODO: Discuss drop elaboration and unwinding.
+
+## Aside: drop elaboration and const-eval
+
+In Rust, functions that are eligible for evaluation at compile-time must be
+marked explicitly using the `const` keyword. This includes implementations of
+the `Drop` trait, which may or may not be `const`. Code that is eligible for
+compile-time evaluation may only call `const` functions, so any calls to
+non-const `Drop` implementations in such code must be forbidden.
+
+A call to a `Drop` impl is encoded as a `Drop` terminator in the MIR. However,
+as we discussed above, a `Drop` terminator in newly built MIR does not
+necessarily result in a call to `Drop::drop`. The drop target may be
+uninitialized at that point. This means that checking for non-const `Drop`s on
+the newly built MIR can result in spurious errors. Instead, we wait until after
+drop elaboration runs, which eliminates `Dead` drops (ones where the target is
+known to be uninitialized) to run these checks.
+
+[RFC 320]: https://rust-lang.github.io/rfcs/0320-nonzeroing-dynamic-drop.html
+[reference-drop]: https://doc.rust-lang.org/reference/destructors.html
+[drops]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_dataflow/src/elaborate_drops.rs
+[drops-shim]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_transform/src/shim.rs
+[drops-transform]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_dataflow/src/elaborate_drops.rs
diff --git a/src/doc/rustc-dev-guide/src/mir/index.md b/src/doc/rustc-dev-guide/src/mir/index.md
new file mode 100644
index 000000000..0c00928c0
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/index.md
@@ -0,0 +1,280 @@
+# The MIR (Mid-level IR)
+
+<!-- toc -->
+
+MIR is Rust's _Mid-level Intermediate Representation_. It is
+constructed from [HIR](../hir.html). MIR was introduced in
+[RFC 1211]. It is a radically simplified form of Rust that is used for
+certain flow-sensitive safety checks – notably the borrow checker! –
+and also for optimization and code generation.
+
+If you'd like a very high-level introduction to MIR, as well as some
+of the compiler concepts that it relies on (such as control-flow
+graphs and desugaring), you may enjoy the
+[rust-lang blog post that introduced MIR][blog].
+
+[blog]: https://blog.rust-lang.org/2016/04/19/MIR.html
+
+## Introduction to MIR
+
+MIR is defined in the [`compiler/rustc_middle/src/mir/`][mir] module, but much of the code
+that manipulates it is found in [`compiler/rustc_mir_build`][mirmanip_build],
+[`compiler/rustc_mir_transform`][mirmanip_transform], and
+[`compiler/rustc_mir_dataflow`][mirmanip_dataflow].
+
+[RFC 1211]: https://rust-lang.github.io/rfcs/1211-mir.html
+
+Some of the key characteristics of MIR are:
+
+- It is based on a [control-flow graph][cfg].
+- It does not have nested expressions.
+- All types in MIR are fully explicit.
+
+[cfg]: ../appendix/background.html#cfg
+
+## Key MIR vocabulary
+
+This section introduces the key concepts of MIR, summarized here:
+
+- **Basic blocks**: units of the control-flow graph, consisting of:
+ - **statements:** actions with one successor
+ - **terminators:** actions with potentially multiple successors; always at
+ the end of a block
+ - (if you're not familiar with the term *basic block*, see the [background
+ chapter][cfg])
+- **Locals:** Memory locations allocated on the stack (conceptually, at
+ least), such as function arguments, local variables, and
+ temporaries. These are identified by an index, written with a
+ leading underscore, like `_1`. There is also a special "local"
+ (`_0`) allocated to store the return value.
+- **Places:** expressions that identify a location in memory, like `_1` or
+ `_1.f`.
+- **Rvalues:** expressions that produce a value. The "R" stands for
+ the fact that these are the "right-hand side" of an assignment.
+ - **Operands:** the arguments to an rvalue, which can either be a
+ constant (like `22`) or a place (like `_1`).
+
+You can get a feeling for how MIR is constructed by translating simple
+programs into MIR and reading the pretty printed output. In fact, the
+playground makes this easy, since it supplies a MIR button that will
+show you the MIR for your program. Try putting this program into play
+(or [clicking on this link][sample-play]), and then clicking the "MIR"
+button on the top:
+
+[sample-play]: https://play.rust-lang.org/?gist=30074856e62e74e91f06abd19bd72ece&version=stable
+
+```rust
+fn main() {
+ let mut vec = Vec::new();
+ vec.push(1);
+ vec.push(2);
+}
+```
+
+You should see something like:
+
+```mir
+// WARNING: This output format is intended for human consumers only
+// and is subject to change without notice. Knock yourself out.
+fn main() -> () {
+ ...
+}
+```
+
+This is the MIR format for the `main` function.
+
+**Variable declarations.** If we drill in a bit, we'll see it begins
+with a bunch of variable declarations. They look like this:
+
+```mir
+let mut _0: (); // return place
+let mut _1: std::vec::Vec<i32>; // in scope 0 at src/main.rs:2:9: 2:16
+let mut _2: ();
+let mut _3: &mut std::vec::Vec<i32>;
+let mut _4: ();
+let mut _5: &mut std::vec::Vec<i32>;
+```
+
+You can see that variables in MIR don't have names, they have indices,
+like `_0` or `_1`. We also intermingle the user's variables (e.g.,
+`_1`) with temporary values (e.g., `_2` or `_3`). You can tell apart
+user-defined variables because they have debuginfo associated to them (see below).
+
+**User variable debuginfo.** Below the variable declarations, we find the only
+hint that `_1` represents a user variable:
+```mir
+scope 1 {
+ debug vec => _1; // in scope 1 at src/main.rs:2:9: 2:16
+}
+```
+Each `debug <Name> => <Place>;` annotation describes a named user variable,
+and where (i.e. the place) a debugger can find the data of that variable.
+Here the mapping is trivial, but optimizations may complicate the place,
+or lead to multiple user variables sharing the same place.
+Additionally, closure captures are described using the same system, and so
+they're complicated even without optimizations, e.g.: `debug x => (*((*_1).0: &T));`.
+
+The "scope" blocks (e.g., `scope 1 { .. }`) describe the lexical structure of
+the source program (which names were in scope when), so any part of the program
+annotated with `// in scope 0` would be missing `vec`, if you were stepping
+through the code in a debugger, for example.
+
+**Basic blocks.** Reading further, we see our first **basic block** (naturally
+it may look slightly different when you view it, and I am ignoring some of the
+comments):
+
+```mir
+bb0: {
+ StorageLive(_1);
+ _1 = const <std::vec::Vec<T>>::new() -> bb2;
+}
+```
+
+A basic block is defined by a series of **statements** and a final
+**terminator**. In this case, there is one statement:
+
+```mir
+StorageLive(_1);
+```
+
+This statement indicates that the variable `_1` is "live", meaning
+that it may be used later – this will persist until we encounter a
+`StorageDead(_1)` statement, which indicates that the variable `_1` is
+done being used. These "storage statements" are used by LLVM to
+allocate stack space.
+
+The **terminator** of the block `bb0` is the call to `Vec::new`:
+
+```mir
+_1 = const <std::vec::Vec<T>>::new() -> bb2;
+```
+
+Terminators are different from statements because they can have more
+than one successor – that is, control may flow to different
+places. Function calls like the call to `Vec::new` are always
+terminators because of the possibility of unwinding, although in the
+case of `Vec::new` we are able to see that indeed unwinding is not
+possible, and hence we list only one successor block, `bb2`.
+
+If we look ahead to `bb2`, we will see it looks like this:
+
+```mir
+bb2: {
+ StorageLive(_3);
+ _3 = &mut _1;
+ _2 = const <std::vec::Vec<T>>::push(move _3, const 1i32) -> [return: bb3, unwind: bb4];
+}
+```
+
+Here there are two statements: another `StorageLive`, introducing the `_3`
+temporary, and then an assignment:
+
+```mir
+_3 = &mut _1;
+```
+
+Assignments in general have the form:
+
+```text
+<Place> = <Rvalue>
+```
+
+A place is an expression like `_3`, `_3.f` or `*_3` – it denotes a
+location in memory. An **Rvalue** is an expression that creates a
+value: in this case, the rvalue is a mutable borrow expression, which
+looks like `&mut <Place>`. So we can kind of define a grammar for
+rvalues like so:
+
+```text
+<Rvalue> = & (mut)? <Place>
+ | <Operand> + <Operand>
+ | <Operand> - <Operand>
+ | ...
+
+<Operand> = Constant
+ | copy Place
+ | move Place
+```
+
+As you can see from this grammar, rvalues cannot be nested – they can
+only reference places and constants. Moreover, when you use a place,
+we indicate whether we are **copying it** (which requires that the
+place have a type `T` where `T: Copy`) or **moving it** (which works
+for a place of any type). So, for example, if we had the expression `x
+= a + b + c` in Rust, that would get compiled to two statements and a
+temporary:
+
+```mir
+TMP1 = a + b
+x = TMP1 + c
+```
+
+([Try it and see][play-abc], though you may want to do release mode to skip
+over the overflow checks.)
+
+[play-abc]: https://play.rust-lang.org/?gist=1751196d63b2a71f8208119e59d8a5b6&version=stable
+
+## MIR data types
+
+The MIR data types are defined in the [`compiler/rustc_middle/src/mir/`][mir]
+module. Each of the key concepts mentioned in the previous section
+maps in a fairly straightforward way to a Rust type.
+
+The main MIR data type is [`Body`]. It contains the data for a single
+function (along with sub-instances of Mir for "promoted constants",
+but [you can read about those below](#promoted)).
+
+- **Basic blocks**: The basic blocks are stored in the field
+ [`Body::basic_blocks`][basicblocks]; this is a vector
+ of [`BasicBlockData`] structures. Nobody ever references a
+ basic block directly: instead, we pass around [`BasicBlock`]
+ values, which are [newtype'd] indices into this vector.
+- **Statements** are represented by the type [`Statement`].
+- **Terminators** are represented by the [`Terminator`].
+- **Locals** are represented by a [newtype'd] index type [`Local`].
+ The data for a local variable is found in the
+ [`Body::local_decls`][localdecls] vector). There is also a special constant
+ [`RETURN_PLACE`] identifying the special "local" representing the return value.
+- **Places** are identified by the enum [`Place`]. There are a few
+ variants:
+ - Local variables like `_1`
+ - Static variables `FOO`
+ - **Projections**, which are fields or other things that "project
+ out" from a base place. These are represented by the type
+ [`ProjectionElem`]. So e.g. the place `_1.f` is a projection,
+ with `f` being the "projection element" and `_1` being the base
+ path. `*_1` is also a projection, with the `*` being represented
+ by the [`ProjectionElem::Deref`] element.
+- **Rvalues** are represented by the enum [`Rvalue`].
+- **Operands** are represented by the enum [`Operand`].
+
+## Representing constants
+
+*to be written*
+
+<a name="promoted"></a>
+
+### Promoted constants
+
+See the const-eval WG's [docs on promotion](https://github.com/rust-lang/const-eval/blob/master/promotion.md).
+
+
+[mir]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/index.html
+[mirmanip_build]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/index.html
+[mirmanip_transform]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/index.html
+[mirmanip_dataflow]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/index.html
+[`Body`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Body.html
+[newtype'd]: ../appendix/glossary.html#newtype
+[basicblocks]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Body.html#structfield.basic_blocks
+[`BasicBlock`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.BasicBlock.html
+[`BasicBlockData`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.BasicBlockData.html
+[`Statement`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Statement.html
+[`Terminator`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/terminator/struct.Terminator.html
+[`Local`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Local.html
+[localdecls]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Body.html#structfield.local_decls
+[`RETURN_PLACE`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/constant.RETURN_PLACE.html
+[`Place`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/struct.Place.html
+[`ProjectionElem`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.ProjectionElem.html
+[`ProjectionElem::Deref`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.ProjectionElem.html#variant.Deref
+[`Rvalue`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.Rvalue.html
+[`Operand`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/enum.Operand.html
diff --git a/src/doc/rustc-dev-guide/src/mir/mir_cfg.svg b/src/doc/rustc-dev-guide/src/mir/mir_cfg.svg
new file mode 100644
index 000000000..70705ec04
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/mir_cfg.svg
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.43.0 (0)
+ -->
+<!-- Title: __crate__ Pages: 1 -->
+<svg width="675pt" height="1010pt"
+ viewBox="0.00 0.00 675.00 1010.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1006)">
+<title>__crate__</title>
+<polygon fill="white" stroke="transparent" points="-4,4 -4,-1006 671,-1006 671,4 -4,4"/>
+<g id="clust1" class="cluster">
+<title>cluster_Mir_0_4</title>
+<polygon fill="none" stroke="black" points="8,-161 8,-994 286,-994 286,-161 8,-161"/>
+<text text-anchor="start" x="76.5" y="-978.8" font-family="Courier, monospace" font-size="14.00">fn main() &#45;&gt; ()</text>
+<text text-anchor="start" x="76.5" y="-963.8" font-family="Courier, monospace" font-size="14.00">let _1: i32;</text>
+<text text-anchor="start" x="76.5" y="-948.8" font-family="Courier, monospace" font-size="14.00">let mut _2: i32;</text>
+<text text-anchor="start" x="76.5" y="-933.8" font-family="Courier, monospace" font-size="14.00">let mut _3: bool;</text>
+<text text-anchor="start" x="76.5" y="-918.8" font-family="Courier, monospace" font-size="14.00">let mut _4: i32;</text>
+<text text-anchor="start" x="76.5" y="-903.8" font-family="Courier, monospace" font-size="14.00">let mut _5: i32;</text>
+<text text-anchor="start" x="76.5" y="-888.8" font-family="Courier, monospace" font-size="14.00">debug x =&gt; _1;</text>
+<text text-anchor="start" x="76.5" y="-873.8" font-family="Courier, monospace" font-size="14.00">debug y =&gt; _2;</text>
+</g>
+<g id="clust2" class="cluster">
+<title>cluster_Mir_0_3</title>
+<polygon fill="none" stroke="black" points="294,-8 294,-904 659,-904 659,-8 294,-8"/>
+<text text-anchor="start" x="406" y="-888.8" font-family="Courier, monospace" font-size="14.00">fn incr() &#45;&gt; i32</text>
+<text text-anchor="start" x="406" y="-873.8" font-family="Courier, monospace" font-size="14.00">let mut _1: i32;</text>
+<text text-anchor="start" x="406" y="-858.8" font-family="Courier, monospace" font-size="14.00">let mut _2: bool;</text>
+<text text-anchor="start" x="406" y="-843.8" font-family="Courier, monospace" font-size="14.00">let mut _3: bool;</text>
+<text text-anchor="start" x="406" y="-828.8" font-family="Courier, monospace" font-size="14.00">debug ret =&gt; _1;</text>
+</g>
+<!-- bb0__0_4 -->
+<g id="node1" class="node">
+<title>bb0__0_4</title>
+<polygon fill="gray" stroke="transparent" points="24,-832.5 24,-853.5 270,-853.5 270,-832.5 24,-832.5"/>
+<polygon fill="none" stroke="black" points="24,-832.5 24,-853.5 270,-853.5 270,-832.5 24,-832.5"/>
+<text text-anchor="start" x="142.5" y="-839.3" font-family="Courier, monospace" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="24,-691.5 24,-832.5 270,-832.5 270,-691.5 24,-691.5"/>
+<text text-anchor="start" x="27" y="-818.3" font-family="Courier, monospace" font-size="14.00">StorageLive(_1)</text>
+<text text-anchor="start" x="27" y="-803.3" font-family="Courier, monospace" font-size="14.00">_1 = const 5_i32</text>
+<text text-anchor="start" x="27" y="-788.3" font-family="Courier, monospace" font-size="14.00">StorageLive(_2)</text>
+<text text-anchor="start" x="27" y="-773.3" font-family="Courier, monospace" font-size="14.00">_2 = const 3_i32</text>
+<text text-anchor="start" x="27" y="-758.3" font-family="Courier, monospace" font-size="14.00">StorageLive(_3)</text>
+<text text-anchor="start" x="27" y="-743.3" font-family="Courier, monospace" font-size="14.00">StorageLive(_4)</text>
+<text text-anchor="start" x="27" y="-728.3" font-family="Courier, monospace" font-size="14.00">_4 = _1</text>
+<text text-anchor="start" x="27" y="-713.3" font-family="Courier, monospace" font-size="14.00">_3 = Gt(move _4, const 3_i32)</text>
+<text text-anchor="start" x="27" y="-698.3" font-family="Courier, monospace" font-size="14.00">StorageDead(_4)</text>
+<polygon fill="none" stroke="black" points="24,-670.5 24,-691.5 270,-691.5 270,-670.5 24,-670.5"/>
+<text text-anchor="start" x="27" y="-677.3" font-family="Courier, monospace" font-size="14.00">switchInt(move _3)</text>
+</g>
+<!-- bb1__0_4 -->
+<g id="node2" class="node">
+<title>bb1__0_4</title>
+<polygon fill="gray" stroke="transparent" points="25,-487 25,-508 164,-508 164,-487 25,-487"/>
+<polygon fill="none" stroke="black" points="25,-487 25,-508 164,-508 164,-487 25,-487"/>
+<text text-anchor="start" x="90" y="-493.8" font-family="Courier, monospace" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="25,-451 25,-487 164,-487 164,-451 25,-451"/>
+<text text-anchor="start" x="28" y="-472.8" font-family="Courier, monospace" font-size="14.00">_2 = const 4_i32</text>
+<text text-anchor="start" x="28" y="-457.8" font-family="Courier, monospace" font-size="14.00">_0 = const ()</text>
+<polygon fill="none" stroke="black" points="25,-430 25,-451 164,-451 164,-430 25,-430"/>
+<text text-anchor="start" x="28" y="-436.8" font-family="Courier, monospace" font-size="14.00">goto</text>
+</g>
+<!-- bb0__0_4&#45;&gt;bb1__0_4 -->
+<g id="edge2" class="edge">
+<title>bb0__0_4&#45;&gt;bb1__0_4</title>
+<path fill="none" stroke="black" d="M101.84,-666.96C99.96,-660.97 98.31,-654.95 97,-649 87.75,-607.15 87.6,-558.45 89.42,-522.43"/>
+<polygon fill="black" stroke="black" points="92.93,-522.33 90.01,-512.15 85.94,-521.93 92.93,-522.33"/>
+<text text-anchor="middle" x="134.5" y="-637.8" font-family="Courier, monospace" font-size="14.00">otherwise</text>
+</g>
+<!-- bb2__0_4 -->
+<g id="node3" class="node">
+<title>bb2__0_4</title>
+<polygon fill="gray" stroke="transparent" points="129,-583 129,-604 259,-604 259,-583 129,-583"/>
+<polygon fill="none" stroke="black" points="129,-583 129,-604 259,-604 259,-583 129,-583"/>
+<text text-anchor="start" x="189.5" y="-589.8" font-family="Courier, monospace" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="129,-562 129,-583 259,-583 259,-562 129,-562"/>
+<text text-anchor="start" x="132" y="-568.8" font-family="Courier, monospace" font-size="14.00">StorageLive(_5)</text>
+<polygon fill="none" stroke="black" points="129,-541 129,-562 259,-562 259,-541 129,-541"/>
+<text text-anchor="start" x="132" y="-547.8" font-family="Courier, monospace" font-size="14.00">_5 = incr()</text>
+</g>
+<!-- bb0__0_4&#45;&gt;bb2__0_4 -->
+<g id="edge1" class="edge">
+<title>bb0__0_4&#45;&gt;bb2__0_4</title>
+<path fill="none" stroke="black" d="M170.71,-666.93C174.93,-650.07 179.15,-633.24 182.81,-618.63"/>
+<polygon fill="black" stroke="black" points="186.21,-619.45 185.25,-608.9 179.42,-617.75 186.21,-619.45"/>
+<text text-anchor="middle" x="199" y="-637.8" font-family="Courier, monospace" font-size="14.00">false</text>
+</g>
+<!-- bb4__0_4 -->
+<g id="node5" class="node">
+<title>bb4__0_4</title>
+<polygon fill="gray" stroke="transparent" points="69,-244.5 69,-265.5 199,-265.5 199,-244.5 69,-244.5"/>
+<polygon fill="none" stroke="black" points="69,-244.5 69,-265.5 199,-265.5 199,-244.5 69,-244.5"/>
+<text text-anchor="start" x="129.5" y="-251.3" font-family="Courier, monospace" font-size="14.00">4</text>
+<polygon fill="none" stroke="black" points="69,-193.5 69,-244.5 199,-244.5 199,-193.5 69,-193.5"/>
+<text text-anchor="start" x="72" y="-230.3" font-family="Courier, monospace" font-size="14.00">StorageDead(_3)</text>
+<text text-anchor="start" x="72" y="-215.3" font-family="Courier, monospace" font-size="14.00">StorageDead(_2)</text>
+<text text-anchor="start" x="72" y="-200.3" font-family="Courier, monospace" font-size="14.00">StorageDead(_1)</text>
+<polygon fill="none" stroke="black" points="69,-172.5 69,-193.5 199,-193.5 199,-172.5 69,-172.5"/>
+<text text-anchor="start" x="72" y="-179.3" font-family="Courier, monospace" font-size="14.00">return</text>
+</g>
+<!-- bb1__0_4&#45;&gt;bb4__0_4 -->
+<g id="edge3" class="edge">
+<title>bb1__0_4&#45;&gt;bb4__0_4</title>
+<path fill="none" stroke="black" d="M77.27,-425.86C75.51,-419.94 74,-413.88 73,-408 65.48,-363.75 59.43,-349.79 73,-307 76.04,-297.41 80.57,-287.97 85.82,-279.04"/>
+<polygon fill="black" stroke="black" points="88.94,-280.64 91.27,-270.31 83,-276.94 88.94,-280.64"/>
+</g>
+<!-- bb3__0_4 -->
+<g id="node4" class="node">
+<title>bb3__0_4</title>
+<polygon fill="gray" stroke="transparent" points="90,-382.5 90,-403.5 270,-403.5 270,-382.5 90,-382.5"/>
+<polygon fill="none" stroke="black" points="90,-382.5 90,-403.5 270,-403.5 270,-382.5 90,-382.5"/>
+<text text-anchor="start" x="175.5" y="-389.3" font-family="Courier, monospace" font-size="14.00">3</text>
+<polygon fill="none" stroke="black" points="90,-331.5 90,-382.5 270,-382.5 270,-331.5 90,-331.5"/>
+<text text-anchor="start" x="93" y="-368.3" font-family="Courier, monospace" font-size="14.00">_2 = Add(_2, move _5)</text>
+<text text-anchor="start" x="93" y="-353.3" font-family="Courier, monospace" font-size="14.00">StorageDead(_5)</text>
+<text text-anchor="start" x="93" y="-338.3" font-family="Courier, monospace" font-size="14.00">_0 = const ()</text>
+<polygon fill="none" stroke="black" points="90,-310.5 90,-331.5 270,-331.5 270,-310.5 90,-310.5"/>
+<text text-anchor="start" x="93" y="-317.3" font-family="Courier, monospace" font-size="14.00">goto</text>
+</g>
+<!-- bb2__0_4&#45;&gt;bb3__0_4 -->
+<g id="edge4" class="edge">
+<title>bb2__0_4&#45;&gt;bb3__0_4</title>
+<path fill="none" stroke="black" d="M191.72,-537.22C189.61,-505.01 186.42,-456.42 183.9,-418.04"/>
+<polygon fill="black" stroke="black" points="187.39,-417.76 183.25,-408.01 180.41,-418.22 187.39,-417.76"/>
+<text text-anchor="middle" x="214" y="-465.3" font-family="Courier, monospace" font-size="14.00">return</text>
+</g>
+<!-- bb3__0_4&#45;&gt;bb4__0_4 -->
+<g id="edge5" class="edge">
+<title>bb3__0_4&#45;&gt;bb4__0_4</title>
+<path fill="none" stroke="black" d="M163.13,-306.63C160.19,-297.95 157.11,-288.84 154.1,-279.92"/>
+<polygon fill="black" stroke="black" points="157.39,-278.71 150.87,-270.36 150.75,-280.96 157.39,-278.71"/>
+</g>
+<!-- bb0__0_3 -->
+<g id="node6" class="node">
+<title>bb0__0_3</title>
+<polygon fill="gray" stroke="transparent" points="359,-787.5 359,-808.5 514,-808.5 514,-787.5 359,-787.5"/>
+<polygon fill="none" stroke="black" points="359,-787.5 359,-808.5 514,-808.5 514,-787.5 359,-787.5"/>
+<text text-anchor="start" x="432" y="-794.3" font-family="Courier, monospace" font-size="14.00">0</text>
+<polygon fill="none" stroke="black" points="359,-736.5 359,-787.5 514,-787.5 514,-736.5 359,-736.5"/>
+<text text-anchor="start" x="362" y="-773.3" font-family="Courier, monospace" font-size="14.00">StorageLive(_1)</text>
+<text text-anchor="start" x="362" y="-758.3" font-family="Courier, monospace" font-size="14.00">StorageLive(_2)</text>
+<text text-anchor="start" x="362" y="-743.3" font-family="Courier, monospace" font-size="14.00">_2 = const true</text>
+<polygon fill="none" stroke="black" points="359,-715.5 359,-736.5 514,-736.5 514,-715.5 359,-715.5"/>
+<text text-anchor="start" x="362" y="-722.3" font-family="Courier, monospace" font-size="14.00">switchInt(move _2)</text>
+</g>
+<!-- bb1__0_3 -->
+<g id="node7" class="node">
+<title>bb1__0_3</title>
+<polygon fill="gray" stroke="transparent" points="311,-479 311,-500 450,-500 450,-479 311,-479"/>
+<polygon fill="none" stroke="black" points="311,-479 311,-500 450,-500 450,-479 311,-479"/>
+<text text-anchor="start" x="376" y="-485.8" font-family="Courier, monospace" font-size="14.00">1</text>
+<polygon fill="none" stroke="black" points="311,-458 311,-479 450,-479 450,-458 311,-458"/>
+<text text-anchor="start" x="314" y="-464.8" font-family="Courier, monospace" font-size="14.00">_1 = const 7_i32</text>
+<polygon fill="none" stroke="black" points="311,-437 311,-458 450,-458 450,-437 311,-437"/>
+<text text-anchor="start" x="314" y="-443.8" font-family="Courier, monospace" font-size="14.00">goto</text>
+</g>
+<!-- bb0__0_3&#45;&gt;bb1__0_3 -->
+<g id="edge7" class="edge">
+<title>bb0__0_3&#45;&gt;bb1__0_3</title>
+<path fill="none" stroke="black" d="M409.66,-711.9C400.78,-692.78 391.89,-670.39 387,-649 376.77,-604.3 376,-551.71 377.19,-515.15"/>
+<polygon fill="black" stroke="black" points="380.7,-514.94 377.59,-504.81 373.71,-514.67 380.7,-514.94"/>
+<text text-anchor="middle" x="424.5" y="-637.8" font-family="Courier, monospace" font-size="14.00">otherwise</text>
+</g>
+<!-- bb2__0_3 -->
+<g id="node8" class="node">
+<title>bb2__0_3</title>
+<polygon fill="gray" stroke="transparent" points="408,-591 408,-612 563,-612 563,-591 408,-591"/>
+<polygon fill="none" stroke="black" points="408,-591 408,-612 563,-612 563,-591 408,-591"/>
+<text text-anchor="start" x="481" y="-597.8" font-family="Courier, monospace" font-size="14.00">2</text>
+<polygon fill="none" stroke="black" points="408,-555 408,-591 563,-591 563,-555 408,-555"/>
+<text text-anchor="start" x="411" y="-576.8" font-family="Courier, monospace" font-size="14.00">StorageLive(_3)</text>
+<text text-anchor="start" x="411" y="-561.8" font-family="Courier, monospace" font-size="14.00">_3 = const true</text>
+<polygon fill="none" stroke="black" points="408,-534 408,-555 563,-555 563,-534 408,-534"/>
+<text text-anchor="start" x="411" y="-540.8" font-family="Courier, monospace" font-size="14.00">switchInt(move _3)</text>
+</g>
+<!-- bb0__0_3&#45;&gt;bb2__0_3 -->
+<g id="edge6" class="edge">
+<title>bb0__0_3&#45;&gt;bb2__0_3</title>
+<path fill="none" stroke="black" d="M449,-711.75C455.92,-685.29 464.41,-652.79 471.41,-626"/>
+<polygon fill="black" stroke="black" points="474.87,-626.6 474.01,-616.04 468.1,-624.83 474.87,-626.6"/>
+<text text-anchor="middle" x="490" y="-637.8" font-family="Courier, monospace" font-size="14.00">false</text>
+</g>
+<!-- bb6__0_3 -->
+<g id="node12" class="node">
+<title>bb6__0_3</title>
+<polygon fill="gray" stroke="transparent" points="311,-107 311,-128 524,-128 524,-107 311,-107"/>
+<polygon fill="none" stroke="black" points="311,-107 311,-128 524,-128 524,-107 311,-107"/>
+<text text-anchor="start" x="413" y="-113.8" font-family="Courier, monospace" font-size="14.00">6</text>
+<polygon fill="none" stroke="black" points="311,-41 311,-107 524,-107 524,-41 311,-41"/>
+<text text-anchor="start" x="314" y="-92.8" font-family="Courier, monospace" font-size="14.00">StorageDead(_2)</text>
+<text text-anchor="start" x="314" y="-77.8" font-family="Courier, monospace" font-size="14.00">_1 = Add(_1, const 1_i32)</text>
+<text text-anchor="start" x="314" y="-62.8" font-family="Courier, monospace" font-size="14.00">_0 = _1</text>
+<text text-anchor="start" x="314" y="-47.8" font-family="Courier, monospace" font-size="14.00">StorageDead(_1)</text>
+<polygon fill="none" stroke="black" points="311,-20 311,-41 524,-41 524,-20 311,-20"/>
+<text text-anchor="start" x="314" y="-26.8" font-family="Courier, monospace" font-size="14.00">return</text>
+</g>
+<!-- bb1__0_3&#45;&gt;bb6__0_3 -->
+<g id="edge8" class="edge">
+<title>bb1__0_3&#45;&gt;bb6__0_3</title>
+<path fill="none" stroke="black" d="M331.73,-433.35C324.52,-425.86 318.13,-417.35 314,-408 295.84,-366.95 310.8,-351.77 314,-307 318.68,-241.61 306.35,-219.97 335,-161 338.42,-153.95 342.63,-147.11 347.32,-140.55"/>
+<polygon fill="black" stroke="black" points="350.24,-142.5 353.5,-132.42 344.67,-138.27 350.24,-142.5"/>
+</g>
+<!-- bb3__0_3 -->
+<g id="node9" class="node">
+<title>bb3__0_3</title>
+<polygon fill="gray" stroke="transparent" points="331,-367.5 331,-388.5 470,-388.5 470,-367.5 331,-367.5"/>
+<polygon fill="none" stroke="black" points="331,-367.5 331,-388.5 470,-388.5 470,-367.5 331,-367.5"/>
+<text text-anchor="start" x="396" y="-374.3" font-family="Courier, monospace" font-size="14.00">3</text>
+<polygon fill="none" stroke="black" points="331,-346.5 331,-367.5 470,-367.5 470,-346.5 331,-346.5"/>
+<text text-anchor="start" x="334" y="-353.3" font-family="Courier, monospace" font-size="14.00">_1 = const 8_i32</text>
+<polygon fill="none" stroke="black" points="331,-325.5 331,-346.5 470,-346.5 470,-325.5 331,-325.5"/>
+<text text-anchor="start" x="334" y="-332.3" font-family="Courier, monospace" font-size="14.00">goto</text>
+</g>
+<!-- bb2__0_3&#45;&gt;bb3__0_3 -->
+<g id="edge10" class="edge">
+<title>bb2__0_3&#45;&gt;bb3__0_3</title>
+<path fill="none" stroke="black" d="M483.48,-529.9C480.99,-499.7 474.7,-458.73 459,-426 454.85,-417.34 449.27,-408.94 443.2,-401.17"/>
+<polygon fill="black" stroke="black" points="445.52,-398.49 436.45,-393 440.12,-402.94 445.52,-398.49"/>
+<text text-anchor="middle" x="518.5" y="-465.3" font-family="Courier, monospace" font-size="14.00">otherwise</text>
+</g>
+<!-- bb4__0_3 -->
+<g id="node10" class="node">
+<title>bb4__0_3</title>
+<polygon fill="gray" stroke="transparent" points="504,-367.5 504,-388.5 643,-388.5 643,-367.5 504,-367.5"/>
+<polygon fill="none" stroke="black" points="504,-367.5 504,-388.5 643,-388.5 643,-367.5 504,-367.5"/>
+<text text-anchor="start" x="569" y="-374.3" font-family="Courier, monospace" font-size="14.00">4</text>
+<polygon fill="none" stroke="black" points="504,-346.5 504,-367.5 643,-367.5 643,-346.5 504,-346.5"/>
+<text text-anchor="start" x="507" y="-353.3" font-family="Courier, monospace" font-size="14.00">_1 = const 9_i32</text>
+<polygon fill="none" stroke="black" points="504,-325.5 504,-346.5 643,-346.5 643,-325.5 504,-325.5"/>
+<text text-anchor="start" x="507" y="-332.3" font-family="Courier, monospace" font-size="14.00">goto</text>
+</g>
+<!-- bb2__0_3&#45;&gt;bb4__0_3 -->
+<g id="edge9" class="edge">
+<title>bb2__0_3&#45;&gt;bb4__0_3</title>
+<path fill="none" stroke="black" d="M544.42,-529.7C549.29,-524.24 553.63,-518.32 557,-512 574.81,-478.61 577.84,-435.35 576.97,-403.27"/>
+<polygon fill="black" stroke="black" points="580.47,-403.12 576.57,-393.27 573.48,-403.41 580.47,-403.12"/>
+<text text-anchor="middle" x="597" y="-465.3" font-family="Courier, monospace" font-size="14.00">false</text>
+</g>
+<!-- bb5__0_3 -->
+<g id="node11" class="node">
+<title>bb5__0_3</title>
+<polygon fill="gray" stroke="transparent" points="352,-229.5 352,-250.5 482,-250.5 482,-229.5 352,-229.5"/>
+<polygon fill="none" stroke="black" points="352,-229.5 352,-250.5 482,-250.5 482,-229.5 352,-229.5"/>
+<text text-anchor="start" x="412.5" y="-236.3" font-family="Courier, monospace" font-size="14.00">5</text>
+<polygon fill="none" stroke="black" points="352,-208.5 352,-229.5 482,-229.5 482,-208.5 352,-208.5"/>
+<text text-anchor="start" x="355" y="-215.3" font-family="Courier, monospace" font-size="14.00">StorageDead(_3)</text>
+<polygon fill="none" stroke="black" points="352,-187.5 352,-208.5 482,-208.5 482,-187.5 352,-187.5"/>
+<text text-anchor="start" x="355" y="-194.3" font-family="Courier, monospace" font-size="14.00">goto</text>
+</g>
+<!-- bb3__0_3&#45;&gt;bb5__0_3 -->
+<g id="edge11" class="edge">
+<title>bb3__0_3&#45;&gt;bb5__0_3</title>
+<path fill="none" stroke="black" d="M404.33,-321.83C406.49,-304.57 409.13,-283.49 411.43,-265.05"/>
+<polygon fill="black" stroke="black" points="414.91,-265.46 412.67,-255.11 407.96,-264.6 414.91,-265.46"/>
+</g>
+<!-- bb4__0_3&#45;&gt;bb5__0_3 -->
+<g id="edge12" class="edge">
+<title>bb4__0_3&#45;&gt;bb5__0_3</title>
+<path fill="none" stroke="black" d="M533.23,-321.83C512.24,-303.53 486.33,-280.94 464.31,-261.74"/>
+<polygon fill="black" stroke="black" points="466.53,-259.04 456.7,-255.11 461.93,-264.32 466.53,-259.04"/>
+</g>
+<!-- bb5__0_3&#45;&gt;bb6__0_3 -->
+<g id="edge13" class="edge">
+<title>bb5__0_3&#45;&gt;bb6__0_3</title>
+<path fill="none" stroke="black" d="M417,-183.76C417,-171.28 417,-156.74 417,-142.43"/>
+<polygon fill="black" stroke="black" points="420.5,-142.09 417,-132.09 413.5,-142.09 420.5,-142.09"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/rustc-dev-guide/src/mir/mir_detailed.dot b/src/doc/rustc-dev-guide/src/mir/mir_detailed.dot
new file mode 100644
index 000000000..1494f4f0b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/mir_detailed.dot
@@ -0,0 +1,27 @@
+digraph G {
+ Operand -> Constant
+ Operand -> Place [taillabel="read"]
+ Place -> Projection
+ Projection -> Place
+ Place -> LocalId
+ Rvalue -> "Rvalue\nAggregate"
+ Rvalue -> "Rvalue\nBinaryOp"
+ Rvalue -> "Rvalue\nUnaryOp"
+ Rvalue -> "Rvalue\n..."
+ "Rvalue\nAggregate" -> Operand [headlabel="*"]
+ "Rvalue\nBinaryOp" -> Operand [headlabel="2"]
+ "Rvalue\nUnaryOp" -> Operand
+ "Statement\nAssignment" -> Place [taillabel="write"]
+ "Statement\nAssignment" -> Rvalue
+ Statement -> "Statement\nAssignment"
+ Statement -> "Statement\n..."
+ Block -> Statement [headlabel="*"]
+ Block -> Terminator
+ Terminator -> "Terminator\nSwitchInt"
+ "Terminator\nSwitchInt" -> Operand
+ "Terminator\nSwitchInt" -> Constant [headlabel="*"]
+ "Terminator\nSwitchInt" -> BlockId [headlabel="*"]
+ Terminator -> "Terminator\n..."
+ Mir -> Block [headlabel="*"]
+ Mir -> Local [headlabel="*"]
+} \ No newline at end of file
diff --git a/src/doc/rustc-dev-guide/src/mir/mir_detailed.svg b/src/doc/rustc-dev-guide/src/mir/mir_detailed.svg
new file mode 100644
index 000000000..771e9e5dc
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/mir_detailed.svg
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="710pt" height="655pt"
+ viewBox="0.00 0.00 710.21 655.48" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 651.4802)">
+<title>G</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-651.4802 706.2058,-651.4802 706.2058,4 -4,4"/>
+<!-- Operand -->
+<g id="node1" class="node">
+<title>Operand</title>
+<ellipse fill="none" stroke="#000000" cx="235.0515" cy="-162" rx="40.8928" ry="18"/>
+<text text-anchor="middle" x="235.0515" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">Operand</text>
+</g>
+<!-- Constant -->
+<g id="node2" class="node">
+<title>Constant</title>
+<ellipse fill="none" stroke="#000000" cx="307.0515" cy="-90" rx="42.4939" ry="18"/>
+<text text-anchor="middle" x="307.0515" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">Constant</text>
+</g>
+<!-- Operand&#45;&gt;Constant -->
+<g id="edge1" class="edge">
+<title>Operand&#45;&gt;Constant</title>
+<path fill="none" stroke="#000000" d="M251.7507,-145.3008C261.1107,-135.9408 272.942,-124.1095 283.2569,-113.7945"/>
+<polygon fill="#000000" stroke="#000000" points="285.8466,-116.1546 290.4428,-106.6087 280.8969,-111.2049 285.8466,-116.1546"/>
+</g>
+<!-- Place -->
+<g id="node3" class="node">
+<title>Place</title>
+<ellipse fill="none" stroke="#000000" cx="163.0515" cy="-90" rx="29.795" ry="18"/>
+<text text-anchor="middle" x="163.0515" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">Place</text>
+</g>
+<!-- Operand&#45;&gt;Place -->
+<g id="edge2" class="edge">
+<title>Operand&#45;&gt;Place</title>
+<path fill="none" stroke="#000000" d="M218.3523,-145.3008C208.7249,-135.6734 196.4829,-123.4314 185.9657,-112.9142"/>
+<polygon fill="#000000" stroke="#000000" points="188.2204,-110.2191 178.6744,-105.6229 183.2706,-115.1689 188.2204,-110.2191"/>
+<text text-anchor="middle" x="206.3523" y="-134.1008" font-family="Times,serif" font-size="14.00" fill="#000000">read</text>
+</g>
+<!-- Projection -->
+<g id="node4" class="node">
+<title>Projection</title>
+<ellipse fill="none" stroke="#000000" cx="163.0515" cy="-18" rx="46.5926" ry="18"/>
+<text text-anchor="middle" x="163.0515" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Projection</text>
+</g>
+<!-- Place&#45;&gt;Projection -->
+<g id="edge3" class="edge">
+<title>Place&#45;&gt;Projection</title>
+<path fill="none" stroke="#000000" d="M157.1358,-72.2022C156.3519,-64.3864 156.1204,-55.0171 156.4412,-46.2836"/>
+<polygon fill="#000000" stroke="#000000" points="159.9475,-46.2999 157.1065,-36.0931 152.9624,-45.8439 159.9475,-46.2999"/>
+</g>
+<!-- LocalId -->
+<g id="node5" class="node">
+<title>LocalId</title>
+<ellipse fill="none" stroke="#000000" cx="266.0515" cy="-18" rx="38.1938" ry="18"/>
+<text text-anchor="middle" x="266.0515" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">LocalId</text>
+</g>
+<!-- Place&#45;&gt;LocalId -->
+<g id="edge5" class="edge">
+<title>Place&#45;&gt;LocalId</title>
+<path fill="none" stroke="#000000" d="M182.9109,-76.1177C197.9447,-65.6086 218.8518,-50.994 235.939,-39.0495"/>
+<polygon fill="#000000" stroke="#000000" points="238.2842,-41.6805 244.475,-33.0826 234.2737,-35.9433 238.2842,-41.6805"/>
+</g>
+<!-- Projection&#45;&gt;Place -->
+<g id="edge4" class="edge">
+<title>Projection&#45;&gt;Place</title>
+<path fill="none" stroke="#000000" d="M168.9965,-36.0931C169.7664,-43.9477 169.9841,-53.3282 169.6494,-62.0453"/>
+<polygon fill="#000000" stroke="#000000" points="166.1453,-61.9901 168.9672,-72.2022 173.1296,-62.4593 166.1453,-61.9901"/>
+</g>
+<!-- Rvalue -->
+<g id="node6" class="node">
+<title>Rvalue</title>
+<ellipse fill="none" stroke="#000000" cx="204.0515" cy="-323.7401" rx="35.9954" ry="18"/>
+<text text-anchor="middle" x="204.0515" y="-320.0401" font-family="Times,serif" font-size="14.00" fill="#000000">Rvalue</text>
+</g>
+<!-- Rvalue\nAggregate -->
+<g id="node7" class="node">
+<title>Rvalue\nAggregate</title>
+<ellipse fill="none" stroke="#000000" cx="69.0515" cy="-242.8701" rx="51.7379" ry="26.7407"/>
+<text text-anchor="middle" x="69.0515" y="-246.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Rvalue</text>
+<text text-anchor="middle" x="69.0515" y="-231.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Aggregate</text>
+</g>
+<!-- Rvalue&#45;&gt;Rvalue\nAggregate -->
+<g id="edge6" class="edge">
+<title>Rvalue&#45;&gt;Rvalue\nAggregate</title>
+<path fill="none" stroke="#000000" d="M180.8442,-309.8381C161.9431,-298.5156 134.7462,-282.2237 111.9105,-268.5442"/>
+<polygon fill="#000000" stroke="#000000" points="113.454,-265.3889 103.0768,-263.2525 109.8568,-271.3939 113.454,-265.3889"/>
+</g>
+<!-- Rvalue\nBinaryOp -->
+<g id="node8" class="node">
+<title>Rvalue\nBinaryOp</title>
+<ellipse fill="none" stroke="#000000" cx="188.0515" cy="-242.8701" rx="49.4949" ry="26.7407"/>
+<text text-anchor="middle" x="188.0515" y="-246.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Rvalue</text>
+<text text-anchor="middle" x="188.0515" y="-231.6701" font-family="Times,serif" font-size="14.00" fill="#000000">BinaryOp</text>
+</g>
+<!-- Rvalue&#45;&gt;Rvalue\nBinaryOp -->
+<g id="edge7" class="edge">
+<title>Rvalue&#45;&gt;Rvalue\nBinaryOp</title>
+<path fill="none" stroke="#000000" d="M200.5006,-305.7924C198.9755,-298.0839 197.134,-288.7767 195.3406,-279.7121"/>
+<polygon fill="#000000" stroke="#000000" points="198.73,-278.8098 193.3556,-269.6793 191.8631,-280.1684 198.73,-278.8098"/>
+</g>
+<!-- Rvalue\nUnaryOp -->
+<g id="node9" class="node">
+<title>Rvalue\nUnaryOp</title>
+<ellipse fill="none" stroke="#000000" cx="303.0515" cy="-242.8701" rx="47.2526" ry="26.7407"/>
+<text text-anchor="middle" x="303.0515" y="-246.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Rvalue</text>
+<text text-anchor="middle" x="303.0515" y="-231.6701" font-family="Times,serif" font-size="14.00" fill="#000000">UnaryOp</text>
+</g>
+<!-- Rvalue&#45;&gt;Rvalue\nUnaryOp -->
+<g id="edge8" class="edge">
+<title>Rvalue&#45;&gt;Rvalue\nUnaryOp</title>
+<path fill="none" stroke="#000000" d="M223.1397,-308.1476C235.7504,-297.8463 252.6606,-284.0328 267.6777,-271.7658"/>
+<polygon fill="#000000" stroke="#000000" points="270.2561,-274.179 275.7864,-265.142 265.8276,-268.7578 270.2561,-274.179"/>
+</g>
+<!-- Rvalue\n... -->
+<g id="node10" class="node">
+<title>Rvalue\n...</title>
+<ellipse fill="none" stroke="#000000" cx="407.0515" cy="-242.8701" rx="38.7821" ry="26.7407"/>
+<text text-anchor="middle" x="407.0515" y="-246.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Rvalue</text>
+<text text-anchor="middle" x="407.0515" y="-231.6701" font-family="Times,serif" font-size="14.00" fill="#000000">...</text>
+</g>
+<!-- Rvalue&#45;&gt;Rvalue\n... -->
+<g id="edge9" class="edge">
+<title>Rvalue&#45;&gt;Rvalue\n...</title>
+<path fill="none" stroke="#000000" d="M235.256,-314.6368C267.0067,-304.9668 317.3424,-288.5057 359.0515,-269.7401 362.195,-268.3258 365.4063,-266.7762 368.6037,-265.1575"/>
+<polygon fill="#000000" stroke="#000000" points="370.2926,-268.2238 377.5103,-260.4678 367.0313,-262.0299 370.2926,-268.2238"/>
+</g>
+<!-- Rvalue\nAggregate&#45;&gt;Operand -->
+<g id="edge10" class="edge">
+<title>Rvalue\nAggregate&#45;&gt;Operand</title>
+<path fill="none" stroke="#000000" d="M107.1352,-224.3168C134.5352,-210.9684 171.2807,-193.0672 198.3573,-179.8763"/>
+<polygon fill="#000000" stroke="#000000" points="200.0432,-182.9483 207.5003,-175.4221 196.9774,-176.6553 200.0432,-182.9483"/>
+<text text-anchor="middle" x="204.0003" y="-179.2221" font-family="Times,serif" font-size="14.00" fill="#000000">*</text>
+</g>
+<!-- Rvalue\nBinaryOp&#45;&gt;Operand -->
+<g id="edge11" class="edge">
+<title>Rvalue\nBinaryOp&#45;&gt;Operand</title>
+<path fill="none" stroke="#000000" d="M203.1813,-216.8371C208.4947,-207.6947 214.4647,-197.4225 219.7889,-188.2614"/>
+<polygon fill="#000000" stroke="#000000" points="222.8508,-189.9584 224.8496,-179.5538 216.7986,-186.441 222.8508,-189.9584"/>
+<text text-anchor="middle" x="221.3496" y="-183.3538" font-family="Times,serif" font-size="14.00" fill="#000000">2</text>
+</g>
+<!-- Rvalue\nUnaryOp&#45;&gt;Operand -->
+<g id="edge12" class="edge">
+<title>Rvalue\nUnaryOp&#45;&gt;Operand</title>
+<path fill="none" stroke="#000000" d="M282.6492,-218.6064C274.253,-208.621 264.5321,-197.0602 256.0725,-186.9996"/>
+<polygon fill="#000000" stroke="#000000" points="258.7225,-184.7128 249.6079,-179.3114 253.3648,-189.2178 258.7225,-184.7128"/>
+</g>
+<!-- Statement\nAssignment -->
+<g id="node11" class="node">
+<title>Statement\nAssignment</title>
+<ellipse fill="none" stroke="#000000" cx="204.0515" cy="-404.6102" rx="57.9655" ry="26.7407"/>
+<text text-anchor="middle" x="204.0515" y="-408.4102" font-family="Times,serif" font-size="14.00" fill="#000000">Statement</text>
+<text text-anchor="middle" x="204.0515" y="-393.4102" font-family="Times,serif" font-size="14.00" fill="#000000">Assignment</text>
+</g>
+<!-- Statement\nAssignment&#45;&gt;Place -->
+<g id="edge13" class="edge">
+<title>Statement\nAssignment&#45;&gt;Place</title>
+<path fill="none" stroke="#000000" d="M158.0853,-387.9226C110.712,-367.9515 39.4797,-329.5163 8.0515,-269.7401 -28.3835,-200.4412 74.6545,-134.9955 130.1983,-105.8591"/>
+<polygon fill="#000000" stroke="#000000" points="132.0277,-108.8542 139.3251,-101.1732 128.8305,-102.627 132.0277,-108.8542"/>
+<text text-anchor="middle" x="144.0853" y="-376.7226" font-family="Times,serif" font-size="14.00" fill="#000000">write</text>
+</g>
+<!-- Statement\nAssignment&#45;&gt;Rvalue -->
+<g id="edge14" class="edge">
+<title>Statement\nAssignment&#45;&gt;Rvalue</title>
+<path fill="none" stroke="#000000" d="M204.0515,-377.6816C204.0515,-369.4111 204.0515,-360.2888 204.0515,-351.9358"/>
+<polygon fill="#000000" stroke="#000000" points="207.5516,-351.8889 204.0515,-341.8889 200.5516,-351.889 207.5516,-351.8889"/>
+</g>
+<!-- Statement -->
+<g id="node12" class="node">
+<title>Statement</title>
+<ellipse fill="none" stroke="#000000" cx="346.0515" cy="-485.4802" rx="46.2923" ry="18"/>
+<text text-anchor="middle" x="346.0515" y="-481.7802" font-family="Times,serif" font-size="14.00" fill="#000000">Statement</text>
+</g>
+<!-- Statement&#45;&gt;Statement\nAssignment -->
+<g id="edge15" class="edge">
+<title>Statement&#45;&gt;Statement\nAssignment</title>
+<path fill="none" stroke="#000000" d="M319.6752,-470.4587C300.0617,-459.2887 272.808,-443.7675 249.6863,-430.5996"/>
+<polygon fill="#000000" stroke="#000000" points="251.1463,-427.4033 240.7246,-425.4958 247.6821,-433.486 251.1463,-427.4033"/>
+</g>
+<!-- Statement\n... -->
+<g id="node13" class="node">
+<title>Statement\n...</title>
+<ellipse fill="none" stroke="#000000" cx="346.0515" cy="-404.6102" rx="50.41" ry="26.7407"/>
+<text text-anchor="middle" x="346.0515" y="-408.4102" font-family="Times,serif" font-size="14.00" fill="#000000">Statement</text>
+<text text-anchor="middle" x="346.0515" y="-393.4102" font-family="Times,serif" font-size="14.00" fill="#000000">...</text>
+</g>
+<!-- Statement&#45;&gt;Statement\n... -->
+<g id="edge16" class="edge">
+<title>Statement&#45;&gt;Statement\n...</title>
+<path fill="none" stroke="#000000" d="M346.0515,-467.1296C346.0515,-459.5597 346.0515,-450.5002 346.0515,-441.6583"/>
+<polygon fill="#000000" stroke="#000000" points="349.5516,-441.4808 346.0515,-431.4808 342.5516,-441.4808 349.5516,-441.4808"/>
+</g>
+<!-- Block -->
+<g id="node14" class="node">
+<title>Block</title>
+<ellipse fill="none" stroke="#000000" cx="385.0515" cy="-557.4802" rx="31.6951" ry="18"/>
+<text text-anchor="middle" x="385.0515" y="-553.7802" font-family="Times,serif" font-size="14.00" fill="#000000">Block</text>
+</g>
+<!-- Block&#45;&gt;Statement -->
+<g id="edge17" class="edge">
+<title>Block&#45;&gt;Statement</title>
+<path fill="none" stroke="#000000" d="M375.6107,-540.051C371.0795,-531.6857 365.5504,-521.4782 360.5052,-512.1641"/>
+<polygon fill="#000000" stroke="#000000" points="363.5167,-510.375 355.6763,-503.2491 357.3617,-513.7091 363.5167,-510.375"/>
+<text text-anchor="middle" x="352.1763" y="-507.0491" font-family="Times,serif" font-size="14.00" fill="#000000">*</text>
+</g>
+<!-- Terminator -->
+<g id="node15" class="node">
+<title>Terminator</title>
+<ellipse fill="none" stroke="#000000" cx="519.0515" cy="-323.7401" rx="50.8918" ry="18"/>
+<text text-anchor="middle" x="519.0515" y="-320.0401" font-family="Times,serif" font-size="14.00" fill="#000000">Terminator</text>
+</g>
+<!-- Block&#45;&gt;Terminator -->
+<g id="edge18" class="edge">
+<title>Block&#45;&gt;Terminator</title>
+<path fill="none" stroke="#000000" d="M394.9048,-540.2928C418.0234,-499.9664 475.8876,-399.0322 503.6797,-350.5535"/>
+<polygon fill="#000000" stroke="#000000" points="506.8808,-352.0069 508.818,-341.5907 500.808,-348.5254 506.8808,-352.0069"/>
+</g>
+<!-- Terminator\nSwitchInt -->
+<g id="node16" class="node">
+<title>Terminator\nSwitchInt</title>
+<ellipse fill="none" stroke="#000000" cx="519.0515" cy="-242.8701" rx="55.3091" ry="26.7407"/>
+<text text-anchor="middle" x="519.0515" y="-246.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Terminator</text>
+<text text-anchor="middle" x="519.0515" y="-231.6701" font-family="Times,serif" font-size="14.00" fill="#000000">SwitchInt</text>
+</g>
+<!-- Terminator&#45;&gt;Terminator\nSwitchInt -->
+<g id="edge19" class="edge">
+<title>Terminator&#45;&gt;Terminator\nSwitchInt</title>
+<path fill="none" stroke="#000000" d="M519.0515,-305.3894C519.0515,-297.8196 519.0515,-288.7601 519.0515,-279.9182"/>
+<polygon fill="#000000" stroke="#000000" points="522.5516,-279.7406 519.0515,-269.7407 515.5516,-279.7407 522.5516,-279.7406"/>
+</g>
+<!-- Terminator\n... -->
+<g id="node18" class="node">
+<title>Terminator\n...</title>
+<ellipse fill="none" stroke="#000000" cx="647.0515" cy="-242.8701" rx="55.3091" ry="26.7407"/>
+<text text-anchor="middle" x="647.0515" y="-246.6701" font-family="Times,serif" font-size="14.00" fill="#000000">Terminator</text>
+<text text-anchor="middle" x="647.0515" y="-231.6701" font-family="Times,serif" font-size="14.00" fill="#000000">...</text>
+</g>
+<!-- Terminator&#45;&gt;Terminator\n... -->
+<g id="edge23" class="edge">
+<title>Terminator&#45;&gt;Terminator\n...</title>
+<path fill="none" stroke="#000000" d="M544.035,-307.9556C561.1466,-297.1446 584.2754,-282.5318 604.2825,-269.8914"/>
+<polygon fill="#000000" stroke="#000000" points="606.3452,-272.7283 612.9298,-264.4281 602.6063,-266.8104 606.3452,-272.7283"/>
+</g>
+<!-- Terminator\nSwitchInt&#45;&gt;Operand -->
+<g id="edge20" class="edge">
+<title>Terminator\nSwitchInt&#45;&gt;Operand</title>
+<path fill="none" stroke="#000000" d="M478.0996,-224.5602C470.5153,-221.4896 462.6034,-218.4951 455.0515,-216 396.6759,-196.7135 327.5597,-180.8457 282.5872,-171.4129"/>
+<polygon fill="#000000" stroke="#000000" points="283.0363,-167.9317 272.5338,-169.3272 281.6143,-174.7857 283.0363,-167.9317"/>
+</g>
+<!-- Terminator\nSwitchInt&#45;&gt;Constant -->
+<g id="edge21" class="edge">
+<title>Terminator\nSwitchInt&#45;&gt;Constant</title>
+<path fill="none" stroke="#000000" d="M487.7702,-220.3136C447.2089,-191.0654 376.9492,-140.4022 337.034,-111.6199"/>
+<polygon fill="#000000" stroke="#000000" points="338.9197,-108.6647 328.7614,-105.6547 334.8255,-114.3425 338.9197,-108.6647"/>
+<text text-anchor="middle" x="325.2614" y="-109.4547" font-family="Times,serif" font-size="14.00" fill="#000000">*</text>
+</g>
+<!-- BlockId -->
+<g id="node17" class="node">
+<title>BlockId</title>
+<ellipse fill="none" stroke="#000000" cx="519.0515" cy="-162" rx="38.9931" ry="18"/>
+<text text-anchor="middle" x="519.0515" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">BlockId</text>
+</g>
+<!-- Terminator\nSwitchInt&#45;&gt;BlockId -->
+<g id="edge22" class="edge">
+<title>Terminator\nSwitchInt&#45;&gt;BlockId</title>
+<path fill="none" stroke="#000000" d="M519.0515,-215.9415C519.0515,-207.6709 519.0515,-198.5487 519.0515,-190.1957"/>
+<polygon fill="#000000" stroke="#000000" points="522.5516,-190.1488 519.0515,-180.1488 515.5516,-190.1489 522.5516,-190.1488"/>
+<text text-anchor="middle" x="515.5515" y="-183.9488" font-family="Times,serif" font-size="14.00" fill="#000000">*</text>
+</g>
+<!-- Mir -->
+<g id="node19" class="node">
+<title>Mir</title>
+<ellipse fill="none" stroke="#000000" cx="425.0515" cy="-629.4802" rx="27" ry="18"/>
+<text text-anchor="middle" x="425.0515" y="-625.7802" font-family="Times,serif" font-size="14.00" fill="#000000">Mir</text>
+</g>
+<!-- Mir&#45;&gt;Block -->
+<g id="edge24" class="edge">
+<title>Mir&#45;&gt;Block</title>
+<path fill="none" stroke="#000000" d="M415.572,-612.4172C410.81,-603.8456 404.9356,-593.2716 399.6162,-583.6968"/>
+<polygon fill="#000000" stroke="#000000" points="402.6568,-581.9627 394.7408,-574.9209 396.5377,-585.3623 402.6568,-581.9627"/>
+<text text-anchor="middle" x="391.2408" y="-578.7209" font-family="Times,serif" font-size="14.00" fill="#000000">*</text>
+</g>
+<!-- Local -->
+<g id="node20" class="node">
+<title>Local</title>
+<ellipse fill="none" stroke="#000000" cx="465.0515" cy="-557.4802" rx="30.5947" ry="18"/>
+<text text-anchor="middle" x="465.0515" y="-553.7802" font-family="Times,serif" font-size="14.00" fill="#000000">Local</text>
+</g>
+<!-- Mir&#45;&gt;Local -->
+<g id="edge25" class="edge">
+<title>Mir&#45;&gt;Local</title>
+<path fill="none" stroke="#000000" d="M434.5309,-612.4172C439.293,-603.8456 445.1674,-593.2716 450.4867,-583.6968"/>
+<polygon fill="#000000" stroke="#000000" points="453.5653,-585.3623 455.3622,-574.9209 447.4462,-581.9627 453.5653,-585.3623"/>
+<text text-anchor="middle" x="451.8622" y="-578.7209" font-family="Times,serif" font-size="14.00" fill="#000000">*</text>
+</g>
+</g>
+</svg>
diff --git a/src/doc/rustc-dev-guide/src/mir/mir_overview.dot b/src/doc/rustc-dev-guide/src/mir/mir_overview.dot
new file mode 100644
index 000000000..c0b51674d
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/mir_overview.dot
@@ -0,0 +1,10 @@
+digraph G {
+ Operand -> Constant
+ Operand -> Place
+ Place -> Projection
+ Projection -> Place
+ Place -> Local
+ Rvalue -> Operand
+ Assignment -> Place
+ Assignment -> Operand
+} \ No newline at end of file
diff --git a/src/doc/rustc-dev-guide/src/mir/mir_overview.svg b/src/doc/rustc-dev-guide/src/mir/mir_overview.svg
new file mode 100644
index 000000000..b8f092cd2
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/mir_overview.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
+ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<!-- Generated by graphviz version 2.40.1 (20161225.0304)
+ -->
+<!-- Title: G Pages: 1 -->
+<svg width="276pt" height="260pt"
+ viewBox="0.00 0.00 276.29 260.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 256)">
+<title>G</title>
+<polygon fill="#ffffff" stroke="transparent" points="-4,4 -4,-256 272.2941,-256 272.2941,4 -4,4"/>
+<!-- Operand -->
+<g id="node1" class="node">
+<title>Operand</title>
+<ellipse fill="none" stroke="#000000" cx="62.7468" cy="-162" rx="40.8928" ry="18"/>
+<text text-anchor="middle" x="62.7468" y="-158.3" font-family="Times,serif" font-size="14.00" fill="#000000">Operand</text>
+</g>
+<!-- Constant -->
+<g id="node2" class="node">
+<title>Constant</title>
+<ellipse fill="none" stroke="#000000" cx="52.7468" cy="-90" rx="42.4939" ry="18"/>
+<text text-anchor="middle" x="52.7468" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">Constant</text>
+</g>
+<!-- Operand&#45;&gt;Constant -->
+<g id="edge1" class="edge">
+<title>Operand&#45;&gt;Constant</title>
+<path fill="none" stroke="#000000" d="M60.2234,-143.8314C59.1539,-136.131 57.8822,-126.9743 56.6936,-118.4166"/>
+<polygon fill="#000000" stroke="#000000" points="60.1467,-117.8367 55.3042,-108.4133 53.2133,-118.7997 60.1467,-117.8367"/>
+</g>
+<!-- Place -->
+<g id="node3" class="node">
+<title>Place</title>
+<ellipse fill="none" stroke="#000000" cx="142.7468" cy="-90" rx="29.795" ry="18"/>
+<text text-anchor="middle" x="142.7468" y="-86.3" font-family="Times,serif" font-size="14.00" fill="#000000">Place</text>
+</g>
+<!-- Operand&#45;&gt;Place -->
+<g id="edge2" class="edge">
+<title>Operand&#45;&gt;Place</title>
+<path fill="none" stroke="#000000" d="M80.9001,-145.6621C92.0182,-135.6558 106.3846,-122.726 118.4722,-111.8471"/>
+<polygon fill="#000000" stroke="#000000" points="120.9379,-114.3368 126.0295,-105.0456 116.2551,-109.1338 120.9379,-114.3368"/>
+</g>
+<!-- Projection -->
+<g id="node4" class="node">
+<title>Projection</title>
+<ellipse fill="none" stroke="#000000" cx="142.7468" cy="-18" rx="46.5926" ry="18"/>
+<text text-anchor="middle" x="142.7468" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Projection</text>
+</g>
+<!-- Place&#45;&gt;Projection -->
+<g id="edge3" class="edge">
+<title>Place&#45;&gt;Projection</title>
+<path fill="none" stroke="#000000" d="M136.8311,-72.2022C136.0473,-64.3864 135.8158,-55.0171 136.1366,-46.2836"/>
+<polygon fill="#000000" stroke="#000000" points="139.6429,-46.2999 136.8018,-36.0931 132.6577,-45.8439 139.6429,-46.2999"/>
+</g>
+<!-- Local -->
+<g id="node5" class="node">
+<title>Local</title>
+<ellipse fill="none" stroke="#000000" cx="237.7468" cy="-18" rx="30.5947" ry="18"/>
+<text text-anchor="middle" x="237.7468" y="-14.3" font-family="Times,serif" font-size="14.00" fill="#000000">Local</text>
+</g>
+<!-- Place&#45;&gt;Local -->
+<g id="edge5" class="edge">
+<title>Place&#45;&gt;Local</title>
+<path fill="none" stroke="#000000" d="M161.5158,-75.7751C175.477,-65.194 194.7426,-50.5927 210.4126,-38.7165"/>
+<polygon fill="#000000" stroke="#000000" points="212.8361,-41.2714 218.6917,-32.4418 208.6079,-35.6926 212.8361,-41.2714"/>
+</g>
+<!-- Projection&#45;&gt;Place -->
+<g id="edge4" class="edge">
+<title>Projection&#45;&gt;Place</title>
+<path fill="none" stroke="#000000" d="M148.6918,-36.0931C149.4618,-43.9477 149.6794,-53.3282 149.3447,-62.0453"/>
+<polygon fill="#000000" stroke="#000000" points="145.8406,-61.9901 148.6626,-72.2022 152.8249,-62.4593 145.8406,-61.9901"/>
+</g>
+<!-- Rvalue -->
+<g id="node6" class="node">
+<title>Rvalue</title>
+<ellipse fill="none" stroke="#000000" cx="35.7468" cy="-234" rx="35.9954" ry="18"/>
+<text text-anchor="middle" x="35.7468" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">Rvalue</text>
+</g>
+<!-- Rvalue&#45;&gt;Operand -->
+<g id="edge6" class="edge">
+<title>Rvalue&#45;&gt;Operand</title>
+<path fill="none" stroke="#000000" d="M42.421,-216.2022C45.4715,-208.0675 49.153,-198.2501 52.54,-189.2181"/>
+<polygon fill="#000000" stroke="#000000" points="55.8217,-190.4348 56.0559,-179.8425 49.2674,-187.9769 55.8217,-190.4348"/>
+</g>
+<!-- Assignment -->
+<g id="node7" class="node">
+<title>Assignment</title>
+<ellipse fill="none" stroke="#000000" cx="142.7468" cy="-234" rx="53.0913" ry="18"/>
+<text text-anchor="middle" x="142.7468" y="-230.3" font-family="Times,serif" font-size="14.00" fill="#000000">Assignment</text>
+</g>
+<!-- Assignment&#45;&gt;Operand -->
+<g id="edge8" class="edge">
+<title>Assignment&#45;&gt;Operand</title>
+<path fill="none" stroke="#000000" d="M123.7879,-216.937C113.2012,-207.4089 99.8654,-195.4067 88.3611,-185.0529"/>
+<polygon fill="#000000" stroke="#000000" points="90.5199,-182.287 80.7456,-178.1989 85.8371,-187.4901 90.5199,-182.287"/>
+</g>
+<!-- Assignment&#45;&gt;Place -->
+<g id="edge7" class="edge">
+<title>Assignment&#45;&gt;Place</title>
+<path fill="none" stroke="#000000" d="M142.7468,-215.7623C142.7468,-191.201 142.7468,-147.2474 142.7468,-118.3541"/>
+<polygon fill="#000000" stroke="#000000" points="146.2469,-118.0896 142.7468,-108.0896 139.2469,-118.0897 146.2469,-118.0896"/>
+</g>
+</g>
+</svg>
diff --git a/src/doc/rustc-dev-guide/src/mir/optimizations.md b/src/doc/rustc-dev-guide/src/mir/optimizations.md
new file mode 100644
index 000000000..cef785ea9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/optimizations.md
@@ -0,0 +1,136 @@
+# MIR optimizations
+
+MIR optimizations are optimizations run on the [MIR][mir] to produce better MIR
+before codegen. This is important for two reasons: first, it makes the final
+generated executable code better, and second, it means that LLVM has less work
+to do, so compilation is faster. Note that since MIR is generic (not
+[monomorphized][monomorph] yet), these optimizations are particularly
+effective; we can optimize the generic version, so all of the monomorphizations
+are cheaper!
+
+[mir]: ../mir/index.md
+[monomorph]: ../appendix/glossary.md#mono
+
+MIR optimizations run after borrow checking. We run a series of optimization
+passes over the MIR to improve it. Some passes are required to run on all code,
+some passes don't actually do optimizations but only check stuff, and some
+passes are only turned on in `release` mode.
+
+The [`optimized_mir`][optmir] [query] is called to produce the optimized MIR
+for a given [`DefId`][defid]. This query makes sure that the borrow checker has
+run and that some validation has occurred. Then, it [steals][steal] the MIR,
+optimizes it, and returns the improved MIR.
+
+[optmir]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/fn.optimized_mir.html
+[query]: ../query.md
+[defid]: ../appendix/glossary.md#def-id
+[steal]: ../mir/passes.md#stealing
+
+## Quickstart for adding a new optimization
+
+1. Make a Rust source file in `src/test/mir-opt` that shows the code you want to
+ optimize. This should be kept simple, so avoid `println!` or other formatting
+ code if it's not necessary for the optimization. The reason for this is that
+ `println!`, `format!`, etc. generate a lot of MIR that can make it harder to
+ understand what the optimization does to the test.
+
+2. Run `./x.py test --bless src/test/mir-opt/<your-test>.rs` to generate a MIR
+ dump. Read [this README][mir-opt-test-readme] for instructions on how to dump
+ things.
+
+3. Commit the current working directory state. The reason you should commit the
+ test output before you implement the optimization is so that you (and your
+ reviewers) can see a before/after diff of what the optimization changed.
+
+4. Implement a new optimization in [`compiler/rustc_mir_transform/src`].
+ The fastest and easiest way to do this is to
+
+ 1. pick a small optimization (such as [`no_landing_pads`]) and copy it
+ to a new file,
+ 2. add your optimization to one of the lists in the
+ [`run_optimization_passes()`] function,
+ 3. and then start modifying the copied optimization.
+
+5. Rerun `./x.py test --bless src/test/mir-opt/<your-test>.rs` to regenerate the
+ MIR dumps. Look at the diffs to see if they are what you expect.
+
+6. Run `./x.py test src/test/ui` to see if your optimization broke anything.
+
+7. If there are issues with your optimization, experiment with it a bit and
+ repeat steps 5 and 6.
+
+8. Commit and open a PR. You can do this at any point, even if things aren't
+ working yet, so that you can ask for feedback on the PR. Open a "WIP" PR
+ (just prefix your PR title with `[WIP]` or otherwise note that it is a
+ work in progress) in that case.
+
+ Make sure to commit the blessed test output as well! It's necessary for CI to
+ pass and it's very helpful to reviewers.
+
+If you have any questions along the way, feel free to ask in
+`#t-compiler/wg-mir-opt` on Zulip.
+
+[mir-opt-test-readme]: https://github.com/rust-lang/rust/blob/master/src/test/mir-opt/README.md
+[`compiler/rustc_mir_transform/src`]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_mir_transform/src
+<!--- TODO: Change NoLandingPads. [#1232](https://github.com/rust-lang/rustc-dev-guide/issues/1232) -->
+[`no_landing_pads`]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_mir_transform/src/no_landing_pads.rs
+[`run_optimization_passes()`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/fn.run_optimization_passes.html
+
+## Defining optimization passes
+
+The list of passes run and the order in which they are run is defined by the
+[`run_optimization_passes`][rop] function. It contains an array of passes to
+run. Each pass in the array is a struct that implements the [`MirPass`] trait.
+The array is an array of `&dyn MirPass` trait objects. Typically, a pass is
+implemented in its own module of the [`rustc_mir_transform`][trans] crate.
+
+[rop]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/fn.run_optimization_passes.html
+[`MirPass`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/trait.MirPass.html
+[trans]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/index.html
+
+Some examples of passes are:
+- `CleanupNonCodegenStatements`: remove some of the info that is only needed for
+ analyses, rather than codegen.
+- `ConstProp`: Does [constant propagation][constprop]
+
+You can see the ["Implementors" section of the `MirPass` rustdocs][impl] for more examples.
+
+[impl]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/trait.MirPass.html#implementors
+[constprop]: https://en.wikipedia.org/wiki/Constant_folding#Constant_propagation
+
+## MIR optimization levels
+
+MIR optimizations can come in various levels of readiness. Experimental
+optimizations may cause miscompilations, or slow down compile times.
+These passes are still included in nightly builds to gather feedback and make it easier to modify
+the pass. To enable working with slow or otherwise experimental optimization passes,
+you can specify the `-Z mir-opt-level` debug flag. You can find the
+definitions of the levels in the [compiler MCP]. If you are developing a MIR pass and
+want to query whether your optimization pass should run, you can check the
+current level using [`tcx.sess.opts.unstable_opts.mir_opt_level`][mir_opt_level].
+
+[compiler MCP]: https://github.com/rust-lang/compiler-team/issues/319
+[mir_opt_level]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/config/struct.UnstableOptions.html#structfield.mir_opt_level
+
+## Optimization fuel
+
+Optimization fuel is a compiler option (`-Z fuel=<crate>=<value>`) that allows for fine grained
+control over which optimizations can be applied during compilation: each optimization reduces
+fuel by 1, and when fuel reaches 0 no more optimizations are applied. The primary use of fuel
+is debugging optimizations that may be incorrect or misapplied. By changing the fuel
+value, you can bisect a compilation session down to the exact incorrect optimization
+(this behaves like a kind of binary search through the optimizations).
+
+MIR optimizations respect fuel, and in general each pass should check fuel by calling
+[`tcx.consider_optimizing`][consideroptimizing] and skipping the optimization if fuel
+is empty. There are a few considerations:
+
+1. If the pass is considered "guaranteed" (for example, it should always be run because it is
+needed for correctness), then fuel should not be used. An example of this is `PromoteTemps`.
+2. In some cases, an initial pass is performed to gather candidates, which are then iterated to
+perform optimizations. In these situations, we should allow for the initial gathering pass
+and then check fuel as close to the mutation as possible. This allows for the best
+debugging experience, because we can determine where in the list of candidates an optimization
+may have been misapplied. Examples of this are `InstCombine` and `ConstantPropagation`.
+
+[consideroptimizing]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/context/struct.TyCtxt.html#method.consider_optimizing
diff --git a/src/doc/rustc-dev-guide/src/mir/passes.md b/src/doc/rustc-dev-guide/src/mir/passes.md
new file mode 100644
index 000000000..5528b7762
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/passes.md
@@ -0,0 +1,102 @@
+# MIR passes
+
+If you would like to get the MIR for a function (or constant, etc),
+you can use the `optimized_mir(def_id)` query. This will give you back
+the final, optimized MIR. For foreign def-ids, we simply read the MIR
+from the other crate's metadata. But for local def-ids, the query will
+construct the MIR and then iteratively optimize it by applying a
+series of passes. This section describes how those passes work and how
+you can extend them.
+
+To produce the `optimized_mir(D)` for a given def-id `D`, the MIR
+passes through several suites of optimizations, each represented by a
+query. Each suite consists of multiple optimizations and
+transformations. These suites represent useful intermediate points
+where we want to access the MIR for type checking or other purposes:
+
+- `mir_build(D)` – not a query, but this constructs the initial MIR
+- `mir_const(D)` – applies some simple transformations to make MIR ready for
+ constant evaluation;
+- `mir_validated(D)` – applies some more transformations, making MIR ready for
+ borrow checking;
+- `optimized_mir(D)` – the final state, after all optimizations have been
+ performed.
+
+### Implementing and registering a pass
+
+A `MirPass` is some bit of code that processes the MIR, typically –
+but not always – transforming it along the way somehow. For example,
+it might perform an optimization. The `MirPass` trait itself is found
+in [the `rustc_mir_transform` crate][mirtransform], and it
+basically consists of one method, `run_pass`, that simply gets an
+`&mut Mir` (along with the tcx and some information about where it
+came from). The MIR is therefore modified in place (which helps to
+keep things efficient).
+
+A good example of a basic MIR pass is [`NoLandingPads`], which walks
+the MIR and removes all edges that are due to unwinding – this is
+used when configured with `panic=abort`, which never unwinds. As you
+can see from its source, a MIR pass is defined by first defining a
+dummy type, a struct with no fields, something like:
+
+```rust
+struct MyPass;
+```
+
+for which you then implement the `MirPass` trait. You can then insert
+this pass into the appropriate list of passes found in a query like
+`optimized_mir`, `mir_validated`, etc. (If this is an optimization, it
+should go into the `optimized_mir` list.)
+
+If you are writing a pass, there's a good chance that you are going to
+want to use a [MIR visitor]. MIR visitors are a handy way to walk all
+the parts of the MIR, either to search for something or to make small
+edits.
+
+### Stealing
+
+The intermediate queries `mir_const()` and `mir_validated()` yield up
+a `&'tcx Steal<Mir<'tcx>>`, allocated using
+`tcx.alloc_steal_mir()`. This indicates that the result may be
+**stolen** by the next suite of optimizations – this is an
+optimization to avoid cloning the MIR. Attempting to use a stolen
+result will cause a panic in the compiler. Therefore, it is important
+that you do not read directly from these intermediate queries except as
+part of the MIR processing pipeline.
+
+Because of this stealing mechanism, some care must also be taken to
+ensure that, before the MIR at a particular phase in the processing
+pipeline is stolen, anyone who may want to read from it has already
+done so. Concretely, this means that if you have some query `foo(D)`
+that wants to access the result of `mir_const(D)` or
+`mir_validated(D)`, you need to have the successor pass "force"
+`foo(D)` using `ty::queries::foo::force(...)`. This will force a query
+to execute even though you don't directly require its result.
+
+As an example, consider MIR const qualification. It wants to read the
+result produced by the `mir_const()` suite. However, that result will
+be **stolen** by the `mir_validated()` suite. If nothing was done,
+then `mir_const_qualif(D)` would succeed if it came before
+`mir_validated(D)`, but fail otherwise. Therefore, `mir_validated(D)`
+will **force** `mir_const_qualif` before it actually steals, thus
+ensuring that the reads have already happened (remember that
+[queries are memoized](../query.html), so executing a query twice
+simply loads from a cache the second time):
+
+```text
+mir_const(D) --read-by--> mir_const_qualif(D)
+ | ^
+ stolen-by |
+ | (forces)
+ v |
+mir_validated(D) ------------+
+```
+
+This mechanism is a bit dodgy. There is a discussion of more elegant
+alternatives in [rust-lang/rust#41710].
+
+[rust-lang/rust#41710]: https://github.com/rust-lang/rust/issues/41710
+[mirtransform]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/
+<!--- TODO: Change NoLandingPads. [#1232](https://github.com/rust-lang/rustc-dev-guide/issues/1232) -->
+[`NoLandingPads`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/no_landing_pads/struct.NoLandingPads.html
+[MIR visitor]: ./visitor.html
diff --git a/src/doc/rustc-dev-guide/src/mir/visitor.md b/src/doc/rustc-dev-guide/src/mir/visitor.md
new file mode 100644
index 000000000..5c21d5304
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/mir/visitor.md
@@ -0,0 +1,56 @@
+# MIR visitor
+
+The MIR visitor is a convenient tool for traversing the MIR and either
+looking for things or making changes to it. The visitor traits are
+defined in [the `rustc_middle::mir::visit` module][m-v] – there are two of
+them, generated via a single macro: `Visitor` (which operates on a
+`&Mir` and gives back shared references) and `MutVisitor` (which
+operates on a `&mut Mir` and gives back mutable references).
+
+[m-v]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/visit/index.html
+
+To implement a visitor, you have to create a type that represents
+your visitor. Typically, this type wants to "hang on" to whatever
+state you will need while processing MIR:
+
+```rust,ignore
+struct MyVisitor<...> {
+ tcx: TyCtxt<'tcx>,
+ ...
+}
+```
+
+and you then implement the `Visitor` or `MutVisitor` trait for that type:
+
+```rust,ignore
+impl<'tcx> MutVisitor<'tcx> for NoLandingPads {
+ fn visit_foo(&mut self, ...) {
+ ...
+ self.super_foo(...);
+ }
+}
+```
+
+As shown above, within the impl, you can override any of the
+`visit_foo` methods (e.g., `visit_terminator`) in order to write some
+code that will execute whenever a `foo` is found. If you want to
+recursively walk the contents of the `foo`, you then invoke the
+`super_foo` method. (NB. You never want to override `super_foo`.)
+
+A very simple example of a visitor can be found in [`NoLandingPads`].
+That visitor doesn't even require any state: it just visits all
+terminators and removes their `unwind` successors.
+
+<!--- TODO: Change NoLandingPads. [#1232](https://github.com/rust-lang/rustc-dev-guide/issues/1232) -->
+[`NoLandingPads`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/no_landing_pads/struct.NoLandingPads.html
+
+## Traversal
+
+In addition the visitor, [the `rustc_middle::mir::traversal` module][t]
+contains useful functions for walking the MIR CFG in
+[different standard orders][traversal] (e.g. pre-order, reverse
+post-order, and so forth).
+
+[t]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/traversal/index.html
+[traversal]: https://en.wikipedia.org/wiki/Tree_traversal
+
diff --git a/src/doc/rustc-dev-guide/src/miri.md b/src/doc/rustc-dev-guide/src/miri.md
new file mode 100644
index 000000000..c5de358d2
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/miri.md
@@ -0,0 +1,239 @@
+# Miri
+
+<!-- toc -->
+
+The Miri (**MIR** **I**nterpreter) engine is a virtual machine for executing MIR without
+compiling to machine code. It is usually invoked via `tcx.const_eval_*` functions.
+In the following, we will refer to the Miri engine as just "Miri", but note that
+there also is a stand-alone
+[tool called "Miri"](https://github.com/rust-lang/miri/) that is based on the
+engine (sometimes referred to as Miri-the-tool to disambiguate it from the
+engine).
+
+If you start out with a constant:
+
+```rust
+const FOO: usize = 1 << 12;
+```
+
+rustc doesn't actually invoke anything until the constant is either used or
+placed into metadata.
+
+Once you have a use-site like:
+
+```rust,ignore
+type Foo = [u8; FOO - 42];
+```
+
+The compiler needs to figure out the length of the array before being able to
+create items that use the type (locals, constants, function arguments, ...).
+
+To obtain the (in this case empty) parameter environment, one can call
+`let param_env = tcx.param_env(length_def_id);`. The `GlobalId` needed is
+
+```rust,ignore
+let gid = GlobalId {
+ promoted: None,
+ instance: Instance::mono(length_def_id),
+};
+```
+
+Invoking `tcx.const_eval(param_env.and(gid))` will now trigger the creation of
+the MIR of the array length expression. The MIR will look something like this:
+
+```mir
+Foo::{{constant}}#0: usize = {
+ let mut _0: usize;
+ let mut _1: (usize, bool);
+
+ bb0: {
+ _1 = CheckedSub(const FOO, const 42usize);
+ assert(!move (_1.1: bool), "attempt to subtract with overflow") -> bb1;
+ }
+
+ bb1: {
+ _0 = move (_1.0: usize);
+ return;
+ }
+}
+```
+
+Before the evaluation, a virtual memory location (in this case essentially a
+`vec![u8; 4]` or `vec![u8; 8]`) is created for storing the evaluation result.
+
+At the start of the evaluation, `_0` and `_1` are
+`Operand::Immediate(Immediate::Scalar(ScalarMaybeUndef::Undef))`. This is quite
+a mouthful: [`Operand`] can represent either data stored somewhere in the
+[interpreter memory](#memory) (`Operand::Indirect`), or (as an optimization)
+immediate data stored in-line. And [`Immediate`] can either be a single
+(potentially uninitialized) [scalar value][`Scalar`] (integer or thin pointer),
+or a pair of two of them. In our case, the single scalar value is *not* (yet)
+initialized.
+
+When the initialization of `_1` is invoked, the value of the `FOO` constant is
+required, and triggers another call to `tcx.const_eval_*`, which will not be shown
+here. If the evaluation of FOO is successful, `42` will be subtracted from its
+value `4096` and the result stored in `_1` as
+`Operand::Immediate(Immediate::ScalarPair(Scalar::Raw { data: 4054, .. },
+Scalar::Raw { data: 0, .. })`. The first part of the pair is the computed value,
+the second part is a bool that's true if an overflow happened. A `Scalar::Raw`
+also stores the size (in bytes) of this scalar value; we are eliding that here.
+
+The next statement asserts that said boolean is `0`. In case the assertion
+fails, its error message is used for reporting a compile-time error.
+
+Since it does not fail, `Operand::Immediate(Immediate::Scalar(Scalar::Raw {
+data: 4054, .. }))` is stored in the virtual memory was allocated before the
+evaluation. `_0` always refers to that location directly.
+
+After the evaluation is done, the return value is converted from [`Operand`] to
+[`ConstValue`] by [`op_to_const`]: the former representation is geared towards
+what is needed *during* const evaluation, while [`ConstValue`] is shaped by the
+needs of the remaining parts of the compiler that consume the results of const
+evaluation. As part of this conversion, for types with scalar values, even if
+the resulting [`Operand`] is `Indirect`, it will return an immediate
+`ConstValue::Scalar(computed_value)` (instead of the usual `ConstValue::ByRef`).
+This makes using the result much more efficient and also more convenient, as no
+further queries need to be executed in order to get at something as simple as a
+`usize`.
+
+Future evaluations of the same constants will not actually invoke
+Miri, but just use the cached result.
+
+[`Operand`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/enum.Operand.html
+[`Immediate`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/enum.Immediate.html
+[`ConstValue`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/enum.ConstValue.html
+[`Scalar`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/enum.Scalar.html
+[`op_to_const`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/const_eval/eval_queries/fn.op_to_const.html
+
+## Datastructures
+
+Miri's outside-facing datastructures can be found in
+[rustc_middle/src/mir/interpret](https://github.com/rust-lang/rust/blob/master/compiler/rustc_middle/src/mir/interpret).
+This is mainly the error enum and the [`ConstValue`] and [`Scalar`] types. A
+`ConstValue` can be either `Scalar` (a single `Scalar`, i.e., integer or thin
+pointer), `Slice` (to represent byte slices and strings, as needed for pattern
+matching) or `ByRef`, which is used for anything else and refers to a virtual
+allocation. These allocations can be accessed via the methods on
+`tcx.interpret_interner`. A `Scalar` is either some `Raw` integer or a pointer;
+see [the next section](#memory) for more on that.
+
+If you are expecting a numeric result, you can use `eval_usize` (panics on
+anything that can't be represented as a `u64`) or `try_eval_usize` which results
+in an `Option<u64>` yielding the `Scalar` if possible.
+
+## Memory
+
+To support any kind of pointers, Miri needs to have a "virtual memory" that the
+pointers can point to. This is implemented in the [`Memory`] type. In the
+simplest model, every global variable, stack variable and every dynamic
+allocation corresponds to an [`Allocation`] in that memory. (Actually using an
+allocation for every MIR stack variable would be very inefficient; that's why we
+have `Operand::Immediate` for stack variables that are both small and never have
+their address taken. But that is purely an optimization.)
+
+Such an `Allocation` is basically just a sequence of `u8` storing the value of
+each byte in this allocation. (Plus some extra data, see below.) Every
+`Allocation` has a globally unique `AllocId` assigned in `Memory`. With that, a
+[`Pointer`] consists of a pair of an `AllocId` (indicating the allocation) and
+an offset into the allocation (indicating which byte of the allocation the
+pointer points to). It may seem odd that a `Pointer` is not just an integer
+address, but remember that during const evaluation, we cannot know at which
+actual integer address the allocation will end up -- so we use `AllocId` as
+symbolic base addresses, which means we need a separate offset. (As an aside,
+it turns out that pointers at run-time are
+[more than just integers, too](https://rust-lang.github.io/unsafe-code-guidelines/glossary.html#pointer-provenance).)
+
+These allocations exist so that references and raw pointers have something to
+point to. There is no global linear heap in which things are allocated, but each
+allocation (be it for a local variable, a static or a (future) heap allocation)
+gets its own little memory with exactly the required size. So if you have a
+pointer to an allocation for a local variable `a`, there is no possible (no
+matter how unsafe) operation that you can do that would ever change said pointer
+to a pointer to a different local variable `b`.
+Pointer arithmetic on `a` will only ever change its offset; the `AllocId` stays the same.
+
+This, however, causes a problem when we want to store a `Pointer` into an
+`Allocation`: we cannot turn it into a sequence of `u8` of the right length!
+`AllocId` and offset together are twice as big as a pointer "seems" to be. This
+is what the `relocation` field of `Allocation` is for: the byte offset of the
+`Pointer` gets stored as a bunch of `u8`, while its `AllocId` gets stored
+out-of-band. The two are reassembled when the `Pointer` is read from memory.
+The other bit of extra data an `Allocation` needs is `undef_mask` for keeping
+track of which of its bytes are initialized.
+
+### Global memory and exotic allocations
+
+`Memory` exists only during the Miri evaluation; it gets destroyed when the
+final value of the constant is computed. In case that constant contains any
+pointers, those get "interned" and moved to a global "const eval memory" that is
+part of `TyCtxt`. These allocations stay around for the remaining computation
+and get serialized into the final output (so that dependent crates can use
+them).
+
+Moreover, to also support function pointers, the global memory in `TyCtxt` can
+also contain "virtual allocations": instead of an `Allocation`, these contain an
+`Instance`. That allows a `Pointer` to point to either normal data or a
+function, which is needed to be able to evaluate casts from function pointers to
+raw pointers.
+
+Finally, the [`GlobalAlloc`] type used in the global memory also contains a
+variant `Static` that points to a particular `const` or `static` item. This is
+needed to support circular statics, where we need to have a `Pointer` to a
+`static` for which we cannot yet have an `Allocation` as we do not know the
+bytes of its value.
+
+[`Memory`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/interpret/struct.Memory.html
+[`Allocation`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/struct.Allocation.html
+[`Pointer`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/struct.Pointer.html
+[`GlobalAlloc`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/interpret/enum.GlobalAlloc.html
+
+### Pointer values vs Pointer types
+
+One common cause of confusion in Miri is that being a pointer *value* and having
+a pointer *type* are entirely independent properties. By "pointer value", we
+refer to a `Scalar::Ptr` containing a `Pointer` and thus pointing somewhere into
+Miri's virtual memory. This is in contrast to `Scalar::Raw`, which is just some
+concrete integer.
+
+However, a variable of pointer or reference *type*, such as `*const T` or `&T`,
+does not have to have a pointer *value*: it could be obtained by casting or
+transmuting an integer to a pointer.
+And similarly, when casting or transmuting a reference to some
+actual allocation to an integer, we end up with a pointer *value*
+(`Scalar::Ptr`) at integer *type* (`usize`). This is a problem because we
+cannot meaningfully perform integer operations such as division on pointer
+values.
+
+## Interpretation
+
+Although the main entry point to constant evaluation is the `tcx.const_eval_*`
+functions, there are additional functions in
+[rustc_const_eval/src/const_eval](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_const_eval/index.html)
+that allow accessing the fields of a `ConstValue` (`ByRef` or otherwise). You should
+never have to access an `Allocation` directly except for translating it to the
+compilation target (at the moment just LLVM).
+
+Miri starts by creating a virtual stack frame for the current constant that is
+being evaluated. There's essentially no difference between a constant and a
+function with no arguments, except that constants do not allow local (named)
+variables at the time of writing this guide.
+
+A stack frame is defined by the `Frame` type in
+[rustc_const_eval/src/interpret/eval_context.rs](https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/eval_context.rs)
+and contains all the local
+variables memory (`None` at the start of evaluation). Each frame refers to the
+evaluation of either the root constant or subsequent calls to `const fn`. The
+evaluation of another constant simply calls `tcx.const_eval_*`, which produce an
+entirely new and independent stack frame.
+
+The frames are just a `Vec<Frame>`, there's no way to actually refer to a
+`Frame`'s memory even if horrible shenanigans are done via unsafe code. The only
+memory that can be referred to are `Allocation`s.
+
+Miri now calls the `step` method (in
+[rustc_const_eval/src/interpret/step.rs](https://github.com/rust-lang/rust/blob/master/compiler/rustc_const_eval/src/interpret/step.rs)
+) until it either returns an error or has no further statements to execute. Each
+statement will now initialize or modify the locals or the virtual memory
+referred to by a local. This might require evaluating other constants or
+statics, which just recursively invokes `tcx.const_eval_*`.
diff --git a/src/doc/rustc-dev-guide/src/name-resolution.md b/src/doc/rustc-dev-guide/src/name-resolution.md
new file mode 100644
index 000000000..c4f44909b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/name-resolution.md
@@ -0,0 +1,181 @@
+# Name resolution
+
+<!-- toc -->
+
+In the previous chapters, we saw how the AST is built with all macros expanded.
+We saw how doing that requires doing some name resolution to resolve imports
+and macro names. In this chapter, we show how this is actually done and more.
+
+In fact, we don't do full name resolution during macro expansion -- we only
+resolve imports and macros at that time. This is required to know what to even
+expand. Later, after we have the whole AST, we do full name resolution to
+resolve all names in the crate. This happens in [`rustc_resolve::late`][late].
+Unlike during macro expansion, in this late expansion, we only need to try to
+resolve a name once, since no new names can be added. If we fail to resolve a
+name now, then it is a compiler error.
+
+Name resolution can be complex. There are a few different namespaces (e.g.
+macros, values, types, lifetimes), and names may be valid at different (nested)
+scopes. Also, different types of names can fail to be resolved differently, and
+failures can happen differently at different scopes. For example, for a module
+scope, failure means no unexpanded macros and no unresolved glob imports in
+that module. On the other hand, in a function body, failure requires that a
+name be absent from the block we are in, all outer scopes, and the global
+scope.
+
+[late]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/late/index.html
+
+## Basics
+
+In our programs we can refer to variables, types, functions, etc, by giving them
+a name. These names are not always unique. For example, take this valid Rust
+program:
+
+```rust
+type x = u32;
+let x: x = 1;
+let y: x = 2;
+```
+
+How do we know on line 3 whether `x` is a type (u32) or a value (1)? These
+conflicts are resolved during name resolution. In this specific case, name
+resolution defines that type names and variable names live in separate
+namespaces and therefore can co-exist.
+
+The name resolution in Rust is a two-phase process. In the first phase, which runs
+during macro expansion, we build a tree of modules and resolve imports. Macro
+expansion and name resolution communicate with each other via the
+[`ResolverAstLoweringExt`] trait.
+
+The input to the second phase is the syntax tree, produced by parsing input
+files and expanding macros. This phase produces links from all the names in the
+source to relevant places where the name was introduced. It also generates
+helpful error messages, like typo suggestions, traits to import or lints about
+unused items.
+
+A successful run of the second phase ([`Resolver::resolve_crate`]) creates kind
+of an index the rest of the compilation may use to ask about the present names
+(through the `hir::lowering::Resolver` interface).
+
+The name resolution lives in the `rustc_resolve` crate, with the meat in
+`lib.rs` and some helpers or symbol-type specific logic in the other modules.
+
+[`Resolver::resolve_crate`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_resolve/struct.Resolver.html#method.resolve_crate
+[`ResolverAstLoweringExt`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast_lowering/trait.ResolverAstLoweringExt.html
+
+## Namespaces
+
+Different kind of symbols live in different namespaces ‒ e.g. types don't
+clash with variables. This usually doesn't happen, because variables start with
+lower-case letter while types with upper case one, but this is only a
+convention. This is legal Rust code that'll compile (with warnings):
+
+```rust
+type x = u32;
+let x: x = 1;
+let y: x = 2; // See? x is still a type here.
+```
+
+To cope with this, and with slightly different scoping rules for these
+namespaces, the resolver keeps them separated and builds separate structures for
+them.
+
+In other words, when the code talks about namespaces, it doesn't mean the module
+hierarchy, it's types vs. values vs. macros.
+
+## Scopes and ribs
+
+A name is visible only in certain area in the source code. This forms a
+hierarchical structure, but not necessarily a simple one ‒ if one scope is
+part of another, it doesn't mean the name visible in the outer one is also
+visible in the inner one, or that it refers to the same thing.
+
+To cope with that, the compiler introduces the concept of Ribs. This is
+abstraction of a scope. Every time the set of visible names potentially changes,
+a new rib is pushed onto a stack. The places where this can happen includes for
+example:
+
+* The obvious places ‒ curly braces enclosing a block, function boundaries,
+ modules.
+* Introducing a let binding ‒ this can shadow another binding with the same
+ name.
+* Macro expansion border ‒ to cope with macro hygiene.
+
+When searching for a name, the stack of ribs is traversed from the innermost
+outwards. This helps to find the closest meaning of the name (the one not
+shadowed by anything else). The transition to outer rib may also change the
+rules what names are usable ‒ if there are nested functions (not closures),
+the inner one can't access parameters and local bindings of the outer one,
+even though they should be visible by ordinary scoping rules. An example:
+
+```rust
+fn do_something<T: Default>(val: T) { // <- New rib in both types and values (1)
+ // `val` is accessible, as is the helper function
+ // `T` is accessible
+ let helper = || { // New rib on `helper` (2) and another on the block (3)
+ // `val` is accessible here
+ }; // End of (3)
+ // `val` is accessible, `helper` variable shadows `helper` function
+ fn helper() { // <- New rib in both types and values (4)
+ // `val` is not accessible here, (4) is not transparent for locals)
+ // `T` is not accessible here
+ } // End of (4)
+ let val = T::default(); // New rib (5)
+ // `val` is the variable, not the parameter here
+} // End of (5), (2) and (1)
+```
+
+Because the rules for different namespaces are a bit different, each namespace
+has its own independent rib stack that is constructed in parallel to the others.
+In addition, there's also a rib stack for local labels (e.g. names of loops or
+blocks), which isn't a full namespace in its own right.
+
+## Overall strategy
+
+To perform the name resolution of the whole crate, the syntax tree is traversed
+top-down and every encountered name is resolved. This works for most kinds of
+names, because at the point of use of a name it is already introduced in the Rib
+hierarchy.
+
+There are some exceptions to this. Items are bit tricky, because they can be
+used even before encountered ‒ therefore every block needs to be first scanned
+for items to fill in its Rib.
+
+Other, even more problematic ones, are imports which need recursive fixed-point
+resolution and macros, that need to be resolved and expanded before the rest of
+the code can be processed.
+
+Therefore, the resolution is performed in multiple stages.
+
+## Speculative crate loading
+
+To give useful errors, rustc suggests importing paths into scope if they're
+not found. How does it do this? It looks through every module of every crate
+and looks for possible matches. This even includes crates that haven't yet
+been loaded!
+
+Loading crates for import suggestions that haven't yet been loaded is called
+_speculative crate loading_, because any errors it encounters shouldn't be
+reported: resolve decided to load them, not the user. The function that does
+this is `lookup_import_candidates` and lives in
+`rustc_resolve/src/diagnostics.rs`.
+
+To tell the difference between speculative loads and loads initiated by the
+user, resolve passes around a `record_used` parameter, which is `false` when
+the load is speculative.
+
+## TODO: [#16](https://github.com/rust-lang/rustc-dev-guide/issues/16)
+
+This is a result of the first pass of learning the code. It is definitely
+incomplete and not detailed enough. It also might be inaccurate in places.
+Still, it probably provides useful first guidepost to what happens in there.
+
+* What exactly does it link to and how is that published and consumed by
+ following stages of compilation?
+* Who calls it and how it is actually used.
+* Is it a pass and then the result is only used, or can it be computed
+ incrementally (e.g. for RLS)?
+* The overall strategy description is a bit vague.
+* Where does the name `Rib` come from?
+* Does this thing have its own tests, or is it tested only as part of some e2e
+ testing?
diff --git a/src/doc/rustc-dev-guide/src/notification-groups/about.md b/src/doc/rustc-dev-guide/src/notification-groups/about.md
new file mode 100644
index 000000000..260c59c24
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/notification-groups/about.md
@@ -0,0 +1,99 @@
+# Notification groups
+
+The **notification groups** are an easy way to help out with rustc in a
+"piece-meal" fashion, without committing to a larger project.
+Notification groups are **[easy to join](#join)** (just submit a PR!)
+and joining does not entail any particular commitment.
+
+Once you [join a notification group](#join), you will be added to
+a list that receives pings on github whenever a new issue is found
+that fits the notification group's criteria. If you are interested, you
+can then [claim the issue] and start working on it.
+
+Of course, you don't have to wait for new issues to be tagged! If you
+prefer, you can use the Github label for a notification group to
+search for existing issues that haven't been claimed yet.
+
+[claim the issue]: https://github.com/rust-lang/triagebot/wiki/Assignment
+
+## List of notification groups
+
+Here's the list of the notification groups:
+- [ARM](./arm.md)
+- [Cleanup Crew](./cleanup-crew.md)
+- [LLVM](./llvm.md)
+- [RISC-V](./risc-v.md)
+- [Windows](./windows.md)
+
+## What issues are a good fit for notification groups?
+
+Notification groups tend to get pinged on **isolated** bugs,
+particularly those of **middle priority**:
+
+- By **isolated**, we mean that we do not expect large-scale refactoring
+ to be required to fix the bug.
+- By **middle priority**, we mean that we'd like to see the bug fixed,
+ but it's not such a burning problem that we are dropping everything
+ else to fix it. The danger with such bugs, of course, is that they
+ can accumulate over time, and the role of the notification group is
+ to try and stop that from happening!
+
+<a name="join"></a>
+
+## Joining a notification group
+
+To join an notification group, you just have to open a PR adding your
+Github username to the appropriate file in the Rust team repository.
+See the "example PRs" below to get a precise idea and to identify the
+file to edit.
+
+Also, if you are not already a member of a Rust team then -- in addition
+to adding your name to the file -- you have to checkout the repository and
+run the following command:
+
+```bash
+cargo run add-person $your_user_name
+```
+
+Example PRs:
+
+* [Example of adding yourself to the ARM group.](https://github.com/rust-lang/team/pull/358)
+* [Example of adding yourself to the Cleanup Crew.](https://github.com/rust-lang/team/pull/221)
+* [Example of adding yourself to the LLVM group.](https://github.com/rust-lang/team/pull/140)
+* [Example of adding yourself to the RISC-V group.](https://github.com/rust-lang/team/pull/394)
+* [Example of adding yourself to the Windows group.](https://github.com/rust-lang/team/pull/348)
+
+## Tagging an issue for a notification group
+
+To tag an issue as appropriate for a notification group, you give
+[rustbot] a [`ping`] command with the name of the notification
+group. For example:
+
+```text
+@rustbot ping llvm
+@rustbot ping cleanup-crew
+@rustbot ping windows
+@rustbot ping arm
+```
+
+To make some commands shorter and easier to remember, there are aliases,
+defined in the [`triagebot.toml`] file. For example, all of these commands
+are equivalent and will ping the Cleanup Crew:
+
+```text
+@rustbot ping cleanup
+@rustbot ping bisect
+@rustbot ping reduce
+```
+
+Keep in mind that these aliases are meant to make humans' life easier.
+They might be subject to change. If you need to ensure that a command
+will always be valid, prefer the full invocations over the aliases.
+
+**Note though that this should only be done by compiler team members
+or contributors, and is typically done as part of compiler team
+triage.**
+
+[rustbot]: https://github.com/rust-lang/triagebot/
+[`ping`]: https://github.com/rust-lang/triagebot/wiki/Pinging
+[`triagebot.toml`]: https://github.com/rust-lang/rust/blob/master/triagebot.toml
diff --git a/src/doc/rustc-dev-guide/src/notification-groups/arm.md b/src/doc/rustc-dev-guide/src/notification-groups/arm.md
new file mode 100644
index 000000000..4514f8ef3
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/notification-groups/arm.md
@@ -0,0 +1,22 @@
+# ARM notification group
+
+**Github Label:** [O-ARM]
+
+[O-ARM]: https://github.com/rust-lang/rust/labels/O-ARM
+
+This list will be used to ask for help both in diagnosing and testing
+ARM-related issues as well as suggestions on how to resolve
+interesting questions regarding our ARM support.
+
+The group also has an associated Zulip stream ([`#t-compiler/arm`])
+where people can go to pose questions and discuss ARM-specific
+topics.
+
+So, if you are interested in participating, please sign up for the
+ARM group! To do so, open a PR against the [rust-lang/team]
+repository. Just [follow this example][eg], but change the username to
+your own!
+
+[`#t-compiler/arm`]: https://rust-lang.zulipchat.com/#narrow/stream/242906-t-compiler.2Farm
+[rust-lang/team]: https://github.com/rust-lang/team
+[eg]: https://github.com/rust-lang/team/pull/358
diff --git a/src/doc/rustc-dev-guide/src/notification-groups/cleanup-crew.md b/src/doc/rustc-dev-guide/src/notification-groups/cleanup-crew.md
new file mode 100644
index 000000000..436b51fd1
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/notification-groups/cleanup-crew.md
@@ -0,0 +1,114 @@
+# Cleanup Crew
+
+**Github Label:** [ICEBreaker-Cleanup-Crew]
+
+[ICEBreaker-Cleanup-Crew]: https://github.com/rust-lang/rust/labels/ICEBreaker-Cleanup-Crew
+
+The "Cleanup Crew" are focused on improving bug reports. Specifically,
+the goal is to try to ensure that every bug report has all the
+information that will be needed for someone to fix it:
+
+* a minimal, standalone example that shows the problem
+* links to duplicates or related bugs
+* if the bug is a regression (something that used to work, but no longer does),
+ then a bisection to the PR or nightly that caused the regression
+
+This kind of cleanup is invaluable in getting bugs fixed. Better
+still, it can be done by anybody who knows Rust, without any
+particularly deep knowledge of the compiler.
+
+Let's look a bit at the workflow for doing "cleanup crew" actions.
+
+## Finding a minimal, standalone example
+
+Here the ultimate goal is to produce an example that reproduces the same
+problem but without relying on any external crates. Such a test ought to contain
+as little code as possible, as well. This will make it much easier to isolate the problem.
+
+However, even if the "ultimate minimal test" cannot be achieved, it's
+still useful to post incremental minimizations. For example, if you
+can eliminate some of the external dependencies, that is helpful, and
+so forth.
+
+It's particularly useful to reduce to an example that works
+in the [Rust playground](https://play.rust-lang.org/), rather than
+requiring people to checkout a cargo build.
+
+There are many resources for how to produce minimized test cases. Here
+are a few:
+
+* The [rust-reduce](https://github.com/jethrogb/rust-reduce) tool can try to reduce
+ code automatically.
+ * The [C-reduce](https://embed.cs.utah.edu/creduce/) tool also works
+ on Rust code, though it requires that you start from a single
+ file. (XXX link to some post explaining how to do it?)
+* pnkfelix's [Rust Bug Minimization Patterns] blog post
+ * This post focuses on "heavy bore" techniques, where you are
+ starting with a large, complex cargo project that you wish to
+ narrow down to something standalone.
+
+[Rust Bug Minimization Patterns]: http://blog.pnkfx.org/blog/2019/11/18/rust-bug-minimization-patterns/
+
+## Links to duplicate or related bugs
+
+If you are on the "Cleanup Crew", you will sometimes see multiple bug
+reports that seem very similar. You can link one to the other just by
+mentioning the other bug number in a Github comment. Sometimes it is
+useful to close duplicate bugs. But if you do so, you should always
+copy any test case from the bug you are closing to the other bug that
+remains open, as sometimes duplicate-looking bugs will expose
+different facets of the same problem.
+
+## Bisecting regressions
+
+For regressions (something that used to work, but no longer does), it
+is super useful if we can figure out precisely when the code stopped
+working. The gold standard is to be able to identify the precise
+**PR** that broke the code, so we can ping the author, but even
+narrowing it down to a nightly build is helpful, especially as that
+then gives us a range of PRs. (One other challenge is that we
+sometimes land "rollup" PRs, which combine multiple PRs into one.)
+
+### cargo-bisect-rustc
+
+To help in figuring out the cause of a regression we have a tool
+called [cargo-bisect-rustc]. It will automatically download and test
+various builds of rustc. For recent regressions, it is even able to
+use the builds from our CI to track down the regression to a specific
+PR; for older regressions, it will simply identify a nightly.
+
+To learn to use [cargo-bisect-rustc], check out [this blog
+post][learn], which gives a quick introduction to how it works. You
+can also ask questions at the Zulip stream
+[`#t-compiler/cargo-bisect-rustc`][zcbr], or help in improving the tool.
+
+[cargo-bisect-rustc]: https://github.com/rust-lang/cargo-bisect-rustc/
+[learn]: https://blog.rust-lang.org/inside-rust/2019/12/18/bisecting-rust-compiler.html
+[zcbr]: https://rust-lang.zulipchat.com/#narrow/stream/217417-t-compiler.2Fcargo-bisect-rustc
+
+### identifying the range of PRs in a nightly
+
+If the regression occurred more than 90 days ago, then
+cargo-bisect-rustc will not able to identify the particular PR that
+caused the regression, just the nightly build. In that case, we can
+identify the set of PRs that this corresponds to by using the git
+history.
+
+The command `rustc +nightly -vV` will cause rustc to output a number
+of useful bits of version info, including the `commit-hash`. Given the
+commit-hash of two nightly versions, you can find all of PRs that have
+landed in between by taking the following steps:
+
+1. Go to an update checkout of the [rust-lang/rust] repository
+2. Execute the command `git log --author=bors --format=oneline SHA1..SHA2`
+ * This will list out all of the commits by bors, which is our merge bot
+ * Each commit corresponds to one PR, and information about the PR should be in the description
+3. Copy and paste that information into the bug report
+
+Often, just eye-balling the PR descriptions (which are included in the
+commit messages) will give you a good idea which one likely caused the
+problem. But if you're unsure feel free to just ping the compiler team
+(`@rust-lang/compiler`) or else to ping the authors of the PR
+themselves.
+
+[rust-lang/rust]: https://github.com/rust-lang/rust/
diff --git a/src/doc/rustc-dev-guide/src/notification-groups/llvm.md b/src/doc/rustc-dev-guide/src/notification-groups/llvm.md
new file mode 100644
index 000000000..69edd8b54
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/notification-groups/llvm.md
@@ -0,0 +1,34 @@
+# LLVM Notification group
+
+**Github Label:** [A-LLVM]
+
+[A-LLVM]: https://github.com/rust-lang/rust/labels/A-LLVM
+
+The "LLVM Notification Group" are focused on bugs that center around LLVM.
+These bugs often arise because of LLVM optimizations gone awry, or as
+the result of an LLVM upgrade. The goal here is:
+
+- to determine whether the bug is a result of us generating invalid LLVM IR,
+ or LLVM misoptimizing;
+- if the former, to fix our IR;
+- if the latter, to try and file a bug on LLVM (or identify an existing bug).
+
+The group may also be asked to weigh in on other sorts of LLVM-focused
+questions.
+
+## Helpful tips and options
+
+The ["Debugging LLVM"][d] section of the
+rustc-dev-guide gives a step-by-step process for how to help debug bugs
+caused by LLVM. In particular, it discusses how to emit LLVM IR, run
+the LLVM IR optimization pipelines, and so forth. You may also find
+it useful to look at the various codegen options listed under `-C help`
+and the internal options under `-Z help` -- there are a number that
+pertain to LLVM (just search for LLVM).
+
+[d]: ../backend/debugging.md
+
+## If you do narrow to an LLVM bug
+
+The ["Debugging LLVM"][d] section also describes what to do once
+you've identified the bug.
diff --git a/src/doc/rustc-dev-guide/src/notification-groups/risc-v.md b/src/doc/rustc-dev-guide/src/notification-groups/risc-v.md
new file mode 100644
index 000000000..15ce1cfc6
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/notification-groups/risc-v.md
@@ -0,0 +1,22 @@
+# RISC-V notification group
+
+**Github Label:** [O-riscv]
+
+[O-riscv]: https://github.com/rust-lang/rust/labels/O-riscv
+
+This list will be used to ask for help both in diagnosing and testing
+RISC-V-related issues as well as suggestions on how to resolve
+interesting questions regarding our RISC-V support.
+
+The group also has an associated Zulip stream ([`#t-compiler/risc-v`])
+where people can go to pose questions and discuss RISC-V-specific
+topics.
+
+So, if you are interested in participating, please sign up for the
+RISC-V group! To do so, open a PR against the [rust-lang/team]
+repository. Just [follow this example][eg], but change the username to
+your own!
+
+[`#t-compiler/risc-v`]: https://rust-lang.zulipchat.com/#narrow/stream/250483-t-compiler.2Frisc-v
+[rust-lang/team]: https://github.com/rust-lang/team
+[eg]: https://github.com/rust-lang/team/pull/394
diff --git a/src/doc/rustc-dev-guide/src/notification-groups/windows.md b/src/doc/rustc-dev-guide/src/notification-groups/windows.md
new file mode 100644
index 000000000..0483babd8
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/notification-groups/windows.md
@@ -0,0 +1,32 @@
+# Windows notification group
+
+**Github Label:** [O-Windows]
+
+[O-Windows]: https://github.com/rust-lang/rust/labels/O-Windows
+
+This list will be used to ask for help both in diagnosing and testing
+Windows-related issues as well as suggestions on how to resolve
+interesting questions regarding our Windows support.
+
+The group also has an associated Zulip stream ([`#t-compiler/windows`])
+where people can go to pose questions and discuss Windows-specific
+topics.
+
+To get a better idea for what the group will do, here are some
+examples of the kinds of questions where we would have reached out to
+the group for advice in determining the best course of action:
+
+* Which versions of MinGW should we support?
+* Should we remove the legacy InnoSetup GUI installer? [#72569]
+* What names should we use for static libraries on Windows? [#29520]
+
+So, if you are interested in participating, please sign up for the
+Windows group! To do so, open a PR against the [rust-lang/team]
+repository. Just [follow this example][eg], but change the username to
+your own!
+
+[`#t-compiler/windows`]: https://rust-lang.zulipchat.com/#streams/242869/t-compiler.2Fwindows
+[rust-lang/team]: https://github.com/rust-lang/team
+[eg]: https://github.com/rust-lang/team/pull/348/
+[#72569]: https://github.com/rust-lang/rust/pull/72569
+[#29520]: https://github.com/rust-lang/rust/pull/29520
diff --git a/src/doc/rustc-dev-guide/src/opaque-types-impl-trait-inference.md b/src/doc/rustc-dev-guide/src/opaque-types-impl-trait-inference.md
new file mode 100644
index 000000000..52d2127bf
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/opaque-types-impl-trait-inference.md
@@ -0,0 +1,277 @@
+# Inference of opaque types (`impl Trait`)
+
+This page describes how the compiler infers the [hidden type] for an [opaque type].
+This kind of type inference is particularly complex because,
+unlike other kinds of type inference,
+it can work across functions and function bodies.
+
+[hidden type]: https://rustc-dev-guide.rust-lang.org/borrow_check/region_inference/member_constraints.html?highlight=%22hidden%20type%22#member-constraints
+[opaque type]: https://rustc-dev-guide.rust-lang.org/opaque-types-type-alias-impl-trait.html
+
+## Running example
+
+To help explain how it works, let's consider an example.
+
+```rust
+mod m {
+ pub type Seq<T> = impl IntoIterator<Item = T>;
+
+ pub fn produce_singleton<T>(t: T) -> Seq<T> {
+ vec![t]
+ }
+
+ pub fn produce_doubleton<T>(t: T, u: T) -> Seq<T> {
+ vec![t, u]
+ }
+}
+
+fn is_send<T: Send>(_: &T) {}
+
+pub fn main() {
+ let elems = m::produce_singleton(22);
+
+ is_send(&elems);
+
+ for elem in elems {
+ println!("elem = {:?}", elem);
+ }
+}
+```
+
+In this code, the *opaque type* is `Seq<T>`.
+Its defining scope is the module `m`.
+Its *hidden type* is `Vec<T>`,
+which is inferred from `m::produce_singleton` and `m::produce_doubleton`.
+
+In the `main` function, the opaque type is out of its defining scope.
+When `main` calls `m::produce_singleton`, it gets back a reference to the opaque type `Seq<i32>`.
+The `is_send` call checks that `Seq<i32>: Send`.
+`Send` is not listed amongst the bounds of the impl trait,
+but because of auto-trait leakage, we are able to infer that it holds.
+The `for` loop desugaring requires that `Seq<T>: IntoIterator`,
+which is provable from the bounds declared on `Seq<T>`.
+
+### Type-checking `main`
+
+Let's start by looking what happens when we type-check `main`.
+Initially we invoke `produce_singleton` and the return type is an opaque type
+[`OpaqueTy`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/enum.ItemKind.html#variant.OpaqueTy).
+
+#### Type-checking the for loop
+
+The for loop desugars the `in elems` part to `IntoIterator::into_iter(elems)`.
+`elems` is of type `Seq<T>`, so the type checker registers a `Seq<T>: IntoIterator` obligation.
+This obligation is trivially satisfied,
+because `Seq<T>` is an opaque type (`impl IntoIterator<Item = T>`) that has a bound for the trait.
+Similar to how a `U: Foo` where bound allows `U` to trivially satisfy `Foo`,
+opaque types' bounds are available to the type checker and are used to fulfill obligations.
+
+The type of `elem` in the for loop is inferred to be `<Seq<T> as IntoIterator>::Item`, which is `T`.
+At no point is the type checker interested in the hidden type.
+
+#### Type-checking the `is_send` call
+
+When trying to prove auto trait bounds,
+we first repeat the process as above,
+to see if the auto trait is in the bound list of the opaque type.
+If that fails, we reveal the hidden type of the opaque type,
+but only to prove this specific trait bound, not in general.
+Revealing is done by invoking the `type_of` query on the `DefId` of the opaque type.
+The query will internally request the hidden types from the defining function(s)
+and return that (see [the section on `type_of`](#Within-the-type_of-query) for more details).
+
+#### Flowchart of type checking steps
+
+```mermaid
+flowchart TD
+ TypeChecking["type checking `main`"]
+ subgraph TypeOfSeq["type_of(Seq<T>) query"]
+ WalkModuleHir["Walk the HIR for the module `m`\nto find the hidden types from each\nfunction/const/static within"]
+ VisitProduceSingleton["visit `produce_singleton`"]
+ InterimType["`produce_singleton` hidden type is `Vec<T>`\nkeep searching"]
+ VisitProduceDoubleton["visit `produce_doubleton`"]
+ CompareType["`produce_doubleton` hidden type is also Vec<T>\nthis matches what we saw before ✅"]
+ Done["No more items to look at in scope\nReturn `Vec<T>`"]
+ end
+
+ BorrowCheckProduceSingleton["`borrow_check(produce_singleton)`"]
+ TypeCheckProduceSingleton["`type_check(produce_singleton)`"]
+
+ BorrowCheckProduceDoubleton["`borrow_check(produce_doubleton)`"]
+ TypeCheckProduceDoubleton["`type_check(produce_doubleton)`"]
+
+ Substitute["Substitute `T => u32`,\nyielding `Vec<i32>` as the hidden type"]
+ CheckSend["Check that `Vec<i32>: Send` ✅"]
+
+ TypeChecking -- trait code for auto traits --> TypeOfSeq
+ TypeOfSeq --> WalkModuleHir
+ WalkModuleHir --> VisitProduceSingleton
+ VisitProduceSingleton --> BorrowCheckProduceSingleton
+ BorrowCheckProduceSingleton --> TypeCheckProduceSingleton
+ TypeCheckProduceSingleton --> InterimType
+ InterimType --> VisitProduceDoubleton
+ VisitProduceDoubleton --> BorrowCheckProduceDoubleton
+ BorrowCheckProduceDoubleton --> TypeCheckProduceDoubleton
+ TypeCheckProduceDoubleton --> CompareType --> Done
+ Done --> Substitute --> CheckSend
+```
+
+### Within the `type_of` query
+
+The `type_of` query, when applied to an opaque type O, returns the hidden type.
+That hidden type is computed by combining the results
+from each constraining function within the defining scope of O.
+
+```mermaid
+flowchart TD
+ TypeOf["type_of query"]
+ TypeOf -- find_opaque_ty_constraints --> FindOpaqueTyConstraints
+ FindOpaqueTyConstraints --> Iterate
+ Iterate["Iterate over each item in defining scope"]
+ Iterate -- For each item --> TypeCheck
+ TypeCheck["Check typeck(I) to see if it constraints O"]
+ TypeCheck -- I does not\nconstrain O --> Iterate
+ TypeCheck -- I constrains O --> BorrowCheck
+ BorrowCheck["Invoke mir_borrowck(I) to get hidden type\nfor O computed by I"]
+ BorrowCheck --> PreviousType
+ PreviousType["Hidden type from I\nsame as any previous hidden type\nfound so far?"]
+ PreviousType -- Yes --> Complete
+ PreviousType -- No --> ReportError
+ ReportError["Report an error"]
+ ReportError --> Complete["Item I complete"]
+ Complete --> Iterate
+
+ FindOpaqueTyConstraints -- All constraints found --> Done
+ Done["Done"]
+```
+
+### Relating an opaque type to another type
+
+There is one central place where an opaqe type gets its hidden type constrained,
+and that is the `handle_opaque_type` function.
+Amusingly it takes two types, so you can pass any two types,
+but one of them should be an opaque type.
+The order is only important for diagnostics.
+
+```mermaid
+flowchart TD
+ subgraph typecheck["type check comparison routines"]
+ equate.rs
+ sub.rs
+ lub.rs
+ end
+
+ typecheck --> TwoSimul
+
+ subgraph handleopaquetype["infcx.handle_opaque_type"]
+
+ TwoSimul["Defining two opaque types simultaneously?"]
+
+ TwoSimul -- Yes --> ReportError["Report error"]
+
+ TwoSimul -- No --> MayDefine -- Yes --> RegisterOpaqueType --> AlreadyHasValue
+
+ MayDefine -- No --> ReportError
+
+ MayDefine["In defining scope OR in query?"]
+
+ AlreadyHasValue["Opaque type X already has\na registered value?"]
+
+ AlreadyHasValue -- No --> Obligations["Register opaque type bounds\nas obligations for hidden type"]
+
+ RegisterOpaqueType["Register opaque type with\nother type as value"]
+
+ AlreadyHasValue -- Yes --> EquateOpaqueTypes["Equate new hidden type\nwith old hidden type"]
+ end
+```
+
+### Interactions with queries
+
+When queries handle opaque types,
+they cannot figure out whether they are in a defining scope,
+so they just assume they are.
+
+The registered hidden types are stored into the `QueryResponse` struct
+in the `opaque_types` field (the function
+`take_opaque_types_for_query_response` reads them out).
+
+When the `QueryResponse` is instantiated into the surrounding infcx in
+`query_response_substitution_guess`,
+we convert each hidden type constraint by invoking `handle_opaque_type` (as above).
+
+There is one bit of "weirdness".
+The instantiated opaque types have an order
+(if one opaque type was compared with another,
+and we have to pick one opaque type to use as the one that gets its hidden type assigned).
+We use the one that is considered "expected".
+But really both of the opaque types may have defining uses.
+When the query result is instantiated,
+that will be re-evaluated from the context that is using the query.
+The final context (typeck of a function, mir borrowck or wf-checks)
+will know which opaque type can actually be instantiated
+and then handle it correctly.
+
+### Within the MIR borrow checker
+
+The MIR borrow checker relates things via `nll_relate` and only cares about regions.
+Any type relation will trigger the binding of hidden types,
+so the borrow checker is doing the same thing as the type checker,
+but ignores obivously dead code (e.g. after a panic).
+The borrow checker is also the source of truth when it comes to hidden types,
+as it is the only one who can properly figure out what lifetimes on the hidden type correspond
+to which lifetimes on the opaque type declaration.
+
+## Backwards compatibility hacks
+
+`impl Trait` in return position has various quirks that were not part
+of any RFCs and are likely accidental stabilizations.
+To support these,
+the `replace_opaque_types_with_inference_vars` is being used to reintroduce the previous behaviour.
+
+There are three backwards compatibility hacks:
+
+1. All return sites share the same inference variable,
+ so some return sites may only compile if another return site uses a concrete type.
+ ```rust
+ fn foo() -> impl Debug {
+ if false {
+ return std::iter::empty().collect();
+ }
+ vec![42]
+ }
+ ```
+2. Associated type equality constraints for `impl Trait` can be used
+ as long as the hidden type satisfies the trait bounds on the associated type.
+ The opaque `impl Trait` signature does not need to satisfy them.
+
+ ```rust
+ trait Duh {}
+
+ impl Duh for i32 {}
+
+ trait Trait {
+ type Assoc: Duh;
+ }
+
+ // the fact that `R` is the `::Output` projection on `F` causes
+ // an intermediate inference var to be generated which is then later
+ // compared against the actually found `Assoc` type.
+ impl<R: Duh, F: FnMut() -> R> Trait for F {
+ type Assoc = R;
+ }
+
+ // The `impl Send` here is then later compared against the inference var
+ // created, causing the inference var to be set to `impl Send` instead of
+ // the hidden type. We already have obligations registered on the inference
+ // var to make it uphold the `: Duh` bound on `Trait::Assoc`. The opaque
+ // type does not implement `Duh`, even if its hidden type does.
+ // Lazy TAIT would error out, but we inserted a hack to make it work again,
+ // keeping backwards compatibility.
+ fn foo() -> impl Trait<Assoc = impl Send> {
+ || 42
+ }
+ ```
+3. Closures cannot create hidden types for their parent function's `impl Trait`.
+ This point is mostly moot,
+ because of point 1 introducing inference vars,
+ so the closure only ever sees the inference var, but should we fix 1, this will become a problem.
diff --git a/src/doc/rustc-dev-guide/src/opaque-types-type-alias-impl-trait.md b/src/doc/rustc-dev-guide/src/opaque-types-type-alias-impl-trait.md
new file mode 100644
index 000000000..2be072dd2
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/opaque-types-type-alias-impl-trait.md
@@ -0,0 +1,63 @@
+# Opaque types (type alias `impl Trait`)
+
+Opaque types are syntax to declare an opaque type alias that only
+exposes a specific set of traits as their interface; the concrete type in the
+background is inferred from a certain set of use sites of the opaque type.
+
+This is expressed by using `impl Trait` within type aliases, for example:
+
+```rust,ignore
+type Foo = impl Bar;
+```
+
+This declares an opaque type named `Foo`, of which the only information is that
+it implements `Bar`. Therefore, any of `Bar`'s interface can be used on a `Foo`,
+but nothing else (regardless of whether it implements any other traits).
+
+Since there needs to be a concrete background type, you can (as of <!-- date:
+2021-01 --> January 2021) express that type by using the opaque type in a
+"defining use site".
+
+```rust,ignore
+struct Struct;
+impl Bar for Struct { /* stuff */ }
+fn foo() -> Foo {
+ Struct
+}
+```
+
+Any other "defining use site" needs to produce the exact same type.
+
+## Defining use site(s)
+
+Currently only the return value of a function can be a defining use site
+of an opaque type (and only if the return type of that function contains
+the opaque type).
+
+The defining use of an opaque type can be any code *within* the parent
+of the opaque type definition. This includes any siblings of the
+opaque type and all children of the siblings.
+
+The initiative for *"not causing fatal brain damage to developers due to
+accidentally running infinite loops in their brain while trying to
+comprehend what the type system is doing"* has decided to disallow children
+of opaque types to be defining use sites.
+
+### Associated opaque types
+
+Associated opaque types can be defined by any other associated item
+on the same trait `impl` or a child of these associated items. For instance:
+
+```rust,ignore
+trait Baz {
+ type Foo;
+ fn foo() -> Self::Foo;
+}
+
+struct Quux;
+
+impl Baz for Quux {
+ type Foo = impl Bar;
+ fn foo() -> Self::Foo { ... }
+}
+```
diff --git a/src/doc/rustc-dev-guide/src/overview.md b/src/doc/rustc-dev-guide/src/overview.md
new file mode 100644
index 000000000..de6c88e7e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/overview.md
@@ -0,0 +1,423 @@
+# Overview of the Compiler
+
+<!-- toc -->
+
+This chapter is about the overall process of compiling a program -- how
+everything fits together.
+
+The Rust compiler is special in two ways: it does things to your code that
+other compilers don't do (e.g. borrow checking) and it has a lot of
+unconventional implementation choices (e.g. queries). We will talk about these
+in turn in this chapter, and in the rest of the guide, we will look at all the
+individual pieces in more detail.
+
+## What the compiler does to your code
+
+So first, let's look at what the compiler does to your code. For now, we will
+avoid mentioning how the compiler implements these steps except as needed;
+we'll talk about that later.
+
+### Invocation
+
+Compilation begins when a user writes a Rust source program in text
+and invokes the `rustc` compiler on it. The work that the compiler needs to
+perform is defined by command-line options. For example, it is possible to
+enable nightly features (`-Z` flags), perform `check`-only builds, or emit
+LLVM-IR rather than executable machine code. The `rustc` executable call may
+be indirect through the use of `cargo`.
+
+Command line argument parsing occurs in the [`rustc_driver`]. This crate
+defines the compile configuration that is requested by the user and passes it
+to the rest of the compilation process as a [`rustc_interface::Config`].
+
+### Lexing and parsing
+
+The raw Rust source text is analyzed by a low-level *lexer* located in
+[`rustc_lexer`]. At this stage, the source text is turned into a stream of
+atomic source code units known as _tokens_. The lexer supports the
+Unicode character encoding.
+
+The token stream passes through a higher-level lexer located in
+[`rustc_parse`] to prepare for the next stage of the compile process. The
+[`StringReader`] struct is used at this stage to perform a set of validations
+and turn strings into interned symbols (_interning_ is discussed later).
+[String interning] is a way of storing only one immutable
+copy of each distinct string value.
+
+The lexer has a small interface and doesn't depend directly on the
+diagnostic infrastructure in `rustc`. Instead it provides diagnostics as plain
+data which are emitted in `rustc_parse::lexer` as real diagnostics.
+The lexer preserves full fidelity information for both IDEs and proc macros.
+
+The *parser* [translates the token stream from the lexer into an Abstract Syntax
+Tree (AST)][parser]. It uses a recursive descent (top-down) approach to syntax
+analysis. The crate entry points for the parser are the
+[`Parser::parse_crate_mod()`][parse_crate_mod] and [`Parser::parse_mod()`][parse_mod]
+methods found in [`rustc_parse::parser::Parser`]. The external module parsing
+entry point is [`rustc_expand::module::parse_external_mod`][parse_external_mod].
+And the macro parser entry point is [`Parser::parse_nonterminal()`][parse_nonterminal].
+
+Parsing is performed with a set of `Parser` utility methods including `bump`,
+`check`, `eat`, `expect`, `look_ahead`.
+
+Parsing is organized by semantic construct. Separate
+`parse_*` methods can be found in the [`rustc_parse`][rustc_parse_parser_dir]
+directory. The source file name follows the construct name. For example, the
+following files are found in the parser:
+
+- `expr.rs`
+- `pat.rs`
+- `ty.rs`
+- `stmt.rs`
+
+This naming scheme is used across many compiler stages. You will find
+either a file or directory with the same name across the parsing, lowering,
+type checking, THIR lowering, and MIR building sources.
+
+Macro expansion, AST validation, name resolution, and early linting also take place
+during this stage.
+
+The parser uses the standard `DiagnosticBuilder` API for error handling, but we
+try to recover, parsing a superset of Rust's grammar, while also emitting an error.
+`rustc_ast::ast::{Crate, Mod, Expr, Pat, ...}` AST nodes are returned from the parser.
+
+### HIR lowering
+
+Next, we take the AST and convert it to [High-Level Intermediate
+Representation (HIR)][hir], a more compiler-friendly representation of the
+AST. This process is called "lowering". It involves a lot of desugaring of things
+like loops and `async fn`.
+
+We then use the HIR to do [*type inference*] (the process of automatic
+detection of the type of an expression), [*trait solving*] (the process
+of pairing up an impl with each reference to a trait), and [*type
+checking*]. Type checking is the process of converting the types found in the HIR
+([`hir::Ty`]), which represent what the user wrote,
+into the internal representation used by the compiler ([`Ty<'tcx>`]).
+That information is used to verify the type safety, correctness and
+coherence of the types used in the program.
+
+### MIR lowering
+
+The HIR is then [lowered to Mid-level Intermediate Representation (MIR)][mir],
+which is used for [borrow checking].
+
+Along the way, we also construct the THIR, which is an even more desugared HIR.
+THIR is used for pattern and exhaustiveness checking. It is also more
+convenient to convert into MIR than HIR is.
+
+We do [many optimizations on the MIR][mir-opt] because it is still
+generic and that improves the code we generate later, improving compilation
+speed too.
+MIR is a higher level (and generic) representation, so it is easier to do
+some optimizations at MIR level than at LLVM-IR level. For example LLVM
+doesn't seem to be able to optimize the pattern the [`simplify_try`] mir
+opt looks for.
+
+Rust code is _monomorphized_, which means making copies of all the generic
+code with the type parameters replaced by concrete types. To do
+this, we need to collect a list of what concrete types to generate code for.
+This is called _monomorphization collection_ and it happens at the MIR level.
+
+### Code generation
+
+We then begin what is vaguely called _code generation_ or _codegen_.
+The [code generation stage][codegen] is when higher level
+representations of source are turned into an executable binary. `rustc`
+uses LLVM for code generation. The first step is to convert the MIR
+to LLVM Intermediate Representation (LLVM IR). This is where the MIR
+is actually monomorphized, according to the list we created in the
+previous step.
+The LLVM IR is passed to LLVM, which does a lot more optimizations on it.
+It then emits machine code. It is basically assembly code with additional
+low-level types and annotations added (e.g. an ELF object or WASM).
+The different libraries/binaries are then linked together to produce the final
+binary.
+
+[String interning]: https://en.wikipedia.org/wiki/String_interning
+[`rustc_lexer`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lexer/index.html
+[`rustc_driver`]: rustc-driver.md
+[`rustc_interface::Config`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/interface/struct.Config.html
+[lex]: the-parser.md
+[`StringReader`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/lexer/struct.StringReader.html
+[`rustc_parse`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
+[parser]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
+[hir]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/index.html
+[*type inference*]: type-inference.md
+[*trait solving*]: traits/resolution.md
+[*type checking*]: type-checking.md
+[mir]: mir/index.md
+[borrow checking]: borrow_check.md
+[mir-opt]: mir/optimizations.md
+[`simplify_try`]: https://github.com/rust-lang/rust/pull/66282
+[codegen]: backend/codegen.md
+[parse_nonterminal]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/parser/struct.Parser.html#method.parse_nonterminal
+[parse_crate_mod]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/parser/struct.Parser.html#method.parse_crate_mod
+[parse_mod]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/parser/struct.Parser.html#method.parse_mod
+[`rustc_parse::parser::Parser`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/parser/struct.Parser.html
+[parse_external_mod]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/module/fn.parse_external_mod.html
+[rustc_parse_parser_dir]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_parse/src/parser
+[`hir::Ty`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/hir/struct.Ty.html
+[`Ty<'tcx>`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Ty.html
+
+## How it does it
+
+Ok, so now that we have a high-level view of what the compiler does to your
+code, let's take a high-level view of _how_ it does all that stuff. There are a
+lot of constraints and conflicting goals that the compiler needs to
+satisfy/optimize for. For example,
+
+- Compilation speed: how fast is it to compile a program. More/better
+ compile-time analyses often means compilation is slower.
+ - Also, we want to support incremental compilation, so we need to take that
+ into account. How can we keep track of what work needs to be redone and
+ what can be reused if the user modifies their program?
+ - Also we can't store too much stuff in the incremental cache because
+ it would take a long time to load from disk and it could take a lot
+ of space on the user's system...
+- Compiler memory usage: while compiling a program, we don't want to use more
+ memory than we need.
+- Program speed: how fast is your compiled program. More/better compile-time
+ analyses often means the compiler can do better optimizations.
+- Program size: how large is the compiled binary? Similar to the previous
+ point.
+- Compiler compilation speed: how long does it take to compile the compiler?
+ This impacts contributors and compiler maintenance.
+- Implementation complexity: building a compiler is one of the hardest
+ things a person/group can do, and Rust is not a very simple language, so how
+ do we make the compiler's code base manageable?
+- Compiler correctness: the binaries produced by the compiler should do what
+ the input programs says they do, and should continue to do so despite the
+ tremendous amount of change constantly going on.
+- Integration: a number of other tools need to use the compiler in
+ various ways (e.g. cargo, clippy, miri, RLS) that must be supported.
+- Compiler stability: the compiler should not crash or fail ungracefully on the
+ stable channel.
+- Rust stability: the compiler must respect Rust's stability guarantees by not
+ breaking programs that previously compiled despite the many changes that are
+ always going on to its implementation.
+- Limitations of other tools: rustc uses LLVM in its backend, and LLVM has some
+ strengths we leverage and some limitations/weaknesses we need to work around.
+
+So, as you read through the rest of the guide, keep these things in mind. They
+will often inform decisions that we make.
+
+### Intermediate representations
+
+As with most compilers, `rustc` uses some intermediate representations (IRs) to
+facilitate computations. In general, working directly with the source code is
+extremely inconvenient and error-prone. Source code is designed to be human-friendly while at
+the same time being unambiguous, but it's less convenient for doing something
+like, say, type checking.
+
+Instead most compilers, including `rustc`, build some sort of IR out of the
+source code which is easier to analyze. `rustc` has a few IRs, each optimized
+for different purposes:
+
+- Token stream: the lexer produces a stream of tokens directly from the source
+ code. This stream of tokens is easier for the parser to deal with than raw
+ text.
+- Abstract Syntax Tree (AST): the abstract syntax tree is built from the stream
+ of tokens produced by the lexer. It represents
+ pretty much exactly what the user wrote. It helps to do some syntactic sanity
+ checking (e.g. checking that a type is expected where the user wrote one).
+- High-level IR (HIR): This is a sort of desugared AST. It's still close
+ to what the user wrote syntactically, but it includes some implicit things
+ such as some elided lifetimes, etc. This IR is amenable to type checking.
+- Typed HIR (THIR): This is an intermediate between HIR and MIR, and used to be called
+ High-level Abstract IR (HAIR). It is like the HIR but it is fully typed and a bit
+ more desugared (e.g. method calls and implicit dereferences are made fully explicit).
+ Moreover, it is easier to lower to MIR from THIR than from HIR.
+- Middle-level IR (MIR): This IR is basically a Control-Flow Graph (CFG). A CFG
+ is a type of diagram that shows the basic blocks of a program and how control
+ flow can go between them. Likewise, MIR also has a bunch of basic blocks with
+ simple typed statements inside them (e.g. assignment, simple computations,
+ etc) and control flow edges to other basic blocks (e.g., calls, dropping
+ values). MIR is used for borrow checking and other
+ important dataflow-based checks, such as checking for uninitialized values.
+ It is also used for a series of optimizations and for constant evaluation (via
+ MIRI). Because MIR is still generic, we can do a lot of analyses here more
+ efficiently than after monomorphization.
+- LLVM IR: This is the standard form of all input to the LLVM compiler. LLVM IR
+ is a sort of typed assembly language with lots of annotations. It's
+ a standard format that is used by all compilers that use LLVM (e.g. the clang
+ C compiler also outputs LLVM IR). LLVM IR is designed to be easy for other
+ compilers to emit and also rich enough for LLVM to run a bunch of
+ optimizations on it.
+
+One other thing to note is that many values in the compiler are _interned_.
+This is a performance and memory optimization in which we allocate the values
+in a special allocator called an _arena_. Then, we pass around references to
+the values allocated in the arena. This allows us to make sure that identical
+values (e.g. types in your program) are only allocated once and can be compared
+cheaply by comparing pointers. Many of the intermediate representations are
+interned.
+
+### Queries
+
+The first big implementation choice is the _query_ system. The Rust compiler
+uses a query system which is unlike most textbook compilers, which are
+organized as a series of passes over the code that execute sequentially. The
+compiler does this to make incremental compilation possible -- that is, if the
+user makes a change to their program and recompiles, we want to do as little
+redundant work as possible to produce the new binary.
+
+In `rustc`, all the major steps above are organized as a bunch of queries that
+call each other. For example, there is a query to ask for the type of something
+and another to ask for the optimized MIR of a function. These
+queries can call each other and are all tracked through the query system.
+The results of the queries are cached on disk so that we can tell which
+queries' results changed from the last compilation and only redo those. This is
+how incremental compilation works.
+
+In principle, for the query-fied steps, we do each of the above for each item
+individually. For example, we will take the HIR for a function and use queries
+to ask for the LLVM IR for that HIR. This drives the generation of optimized
+MIR, which drives the borrow checker, which drives the generation of MIR, and
+so on.
+
+... except that this is very over-simplified. In fact, some queries are not
+cached on disk, and some parts of the compiler have to run for all code anyway
+for correctness even if the code is dead code (e.g. the borrow checker). For
+example, [currently the `mir_borrowck` query is first executed on all functions
+of a crate.][passes] Then the codegen backend invokes the
+`collect_and_partition_mono_items` query, which first recursively requests the
+`optimized_mir` for all reachable functions, which in turn runs `mir_borrowck`
+for that function and then creates codegen units. This kind of split will need
+to remain to ensure that unreachable functions still have their errors emitted.
+
+[passes]: https://github.com/rust-lang/rust/blob/45ebd5808afd3df7ba842797c0fcd4447ddf30fb/src/librustc_interface/passes.rs#L824
+
+Moreover, the compiler wasn't originally built to use a query system; the query
+system has been retrofitted into the compiler, so parts of it are not query-fied
+yet. Also, LLVM isn't our code, so that isn't querified either. The plan is to
+eventually query-fy all of the steps listed in the previous section,
+but as of <!-- date: 2021-11 --> November 2021, only the steps between HIR and
+LLVM IR are query-fied. That is, lexing, parsing, name resolution, and macro
+expansion are done all at once for the whole program.
+
+One other thing to mention here is the all-important "typing context",
+[`TyCtxt`], which is a giant struct that is at the center of all things.
+(Note that the name is mostly historic. This is _not_ a "typing context" in the
+sense of `Γ` or `Δ` from type theory. The name is retained because that's what
+the name of the struct is in the source code.) All
+queries are defined as methods on the [`TyCtxt`] type, and the in-memory query
+cache is stored there too. In the code, there is usually a variable called
+`tcx` which is a handle on the typing context. You will also see lifetimes with
+the name `'tcx`, which means that something is tied to the lifetime of the
+`TyCtxt` (usually it is stored or interned there).
+
+[`TyCtxt`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html
+
+### `ty::Ty`
+
+Types are really important in Rust, and they form the core of a lot of compiler
+analyses. The main type (in the compiler) that represents types (in the user's
+program) is [`rustc_middle::ty::Ty`][ty]. This is so important that we have a whole chapter
+on [`ty::Ty`][ty], but for now, we just want to mention that it exists and is the way
+`rustc` represents types!
+
+Also note that the `rustc_middle::ty` module defines the `TyCtxt` struct we mentioned before.
+
+[ty]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Ty.html
+
+### Parallelism
+
+Compiler performance is a problem that we would like to improve on
+(and are always working on). One aspect of that is parallelizing
+`rustc` itself.
+
+Currently, there is only one part of rustc that is parallel by default: codegen.
+
+However, the rest of the compiler is still not yet parallel. There have been
+lots of efforts spent on this, but it is generally a hard problem. The current
+approach is to turn `RefCell`s into `Mutex`s -- that is, we
+switch to thread-safe internal mutability. However, there are ongoing
+challenges with lock contention, maintaining query-system invariants under
+concurrency, and the complexity of the code base. One can try out the current
+work by enabling parallel compilation in `config.toml`. It's still early days,
+but there are already some promising performance improvements.
+
+### Bootstrapping
+
+`rustc` itself is written in Rust. So how do we compile the compiler? We use an
+older compiler to compile the newer compiler. This is called [_bootstrapping_].
+
+Bootstrapping has a lot of interesting implications. For example, it means
+that one of the major users of Rust is the Rust compiler, so we are
+constantly testing our own software ("eating our own dogfood").
+
+For more details on bootstrapping, see
+[the bootstrapping section of the guide][rustc-bootstrap].
+
+[_bootstrapping_]: https://en.wikipedia.org/wiki/Bootstrapping_(compilers)
+[rustc-bootstrap]: building/bootstrapping.md
+
+<!--
+# Unresolved Questions
+
+- Does LLVM ever do optimizations in debug builds?
+- How do I explore phases of the compile process in my own sources (lexer,
+ parser, HIR, etc)? - e.g., `cargo rustc -- -Z unpretty=hir-tree` allows you to
+ view HIR representation
+- What is the main source entry point for `X`?
+- Where do phases diverge for cross-compilation to machine code across
+ different platforms?
+-->
+
+# References
+
+- Command line parsing
+ - Guide: [The Rustc Driver and Interface](rustc-driver.md)
+ - Driver definition: [`rustc_driver`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/)
+ - Main entry point: [`rustc_session::config::build_session_options`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/config/fn.build_session_options.html)
+- Lexical Analysis: Lex the user program to a stream of tokens
+ - Guide: [Lexing and Parsing](the-parser.md)
+ - Lexer definition: [`rustc_lexer`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lexer/index.html)
+ - Main entry point: [`rustc_lexer::first_token`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lexer/fn.first_token.html)
+- Parsing: Parse the stream of tokens to an Abstract Syntax Tree (AST)
+ - Guide: [Lexing and Parsing](the-parser.md)
+ - Guide: [Macro Expansion](macro-expansion.md)
+ - Guide: [Name Resolution](name-resolution.md)
+ - Parser definition: [`rustc_parse`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html)
+ - Main entry points:
+ - [Entry point for first file in crate](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/passes/fn.parse.html)
+ - [Entry point for outline module parsing](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_expand/module/fn.parse_external_mod.html)
+ - [Entry point for macro fragments][parse_nonterminal]
+ - AST definition: [`rustc_ast`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/ast/index.html)
+ - Feature gating: **TODO**
+ - Early linting: **TODO**
+- The High Level Intermediate Representation (HIR)
+ - Guide: [The HIR](hir.md)
+ - Guide: [Identifiers in the HIR](hir.md#identifiers-in-the-hir)
+ - Guide: [The HIR Map](hir.md#the-hir-map)
+ - Guide: [Lowering AST to HIR](lowering.md)
+ - How to view HIR representation for your code `cargo rustc -- -Z unpretty=hir-tree`
+ - Rustc HIR definition: [`rustc_hir`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/index.html)
+ - Main entry point: **TODO**
+ - Late linting: **TODO**
+- Type Inference
+ - Guide: [Type Inference](type-inference.md)
+ - Guide: [The ty Module: Representing Types](ty.md) (semantics)
+ - Main entry point (type inference): [`InferCtxtBuilder::enter`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/struct.InferCtxtBuilder.html#method.enter)
+ - Main entry point (type checking bodies): [the `typeck` query](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.typeck)
+ - These two functions can't be decoupled.
+- The Mid Level Intermediate Representation (MIR)
+ - Guide: [The MIR (Mid level IR)](mir/index.md)
+ - Definition: [`rustc_middle/src/mir`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/mir/index.html)
+ - Definition of sources that manipulates the MIR: [`rustc_mir_build`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/index.html), [`rustc_mir_dataflow`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_dataflow/index.html), [`rustc_mir_transform`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/index.html)
+- The Borrow Checker
+ - Guide: [MIR Borrow Check](borrow_check.md)
+ - Definition: [`rustc_borrowck`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/index.html)
+ - Main entry point: [`mir_borrowck` query](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_borrowck/fn.mir_borrowck.html)
+- MIR Optimizations
+ - Guide: [MIR Optimizations](mir/optimizations.md)
+ - Definition: [`rustc_mir_transform`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/index.html)
+ - Main entry point: [`optimized_mir` query](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_transform/fn.optimized_mir.html)
+- Code Generation
+ - Guide: [Code Generation](backend/codegen.md)
+ - Generating Machine Code from LLVM IR with LLVM - **TODO: reference?**
+ - Main entry point: [`rustc_codegen_ssa::base::codegen_crate`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/base/fn.codegen_crate.html)
+ - This monomorphizes and produces LLVM IR for one codegen unit. It then
+ starts a background thread to run LLVM, which must be joined later.
+ - Monomorphization happens lazily via [`FunctionCx::monomorphize`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/mir/struct.FunctionCx.html#method.monomorphize) and [`rustc_codegen_ssa::base::codegen_instance `](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/base/fn.codegen_instance.html)
diff --git a/src/doc/rustc-dev-guide/src/panic-implementation.md b/src/doc/rustc-dev-guide/src/panic-implementation.md
new file mode 100644
index 000000000..66e61548e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/panic-implementation.md
@@ -0,0 +1,112 @@
+# Panicking in rust
+
+<!-- toc -->
+
+## Step 1: Invocation of the `panic!` macro.
+
+There are actually two panic macros - one defined in `core`, and one defined in `std`.
+This is due to the fact that code in `core` can panic. `core` is built before `std`,
+but we want panics to use the same machinery at runtime, whether they originate in `core`
+or `std`.
+
+### core definition of panic!
+
+The `core` `panic!` macro eventually makes the following call (in `library/core/src/panicking.rs`):
+
+```rust
+// NOTE This function never crosses the FFI boundary; it's a Rust-to-Rust call
+extern "Rust" {
+ #[lang = "panic_impl"]
+ fn panic_impl(pi: &PanicInfo<'_>) -> !;
+}
+
+let pi = PanicInfo::internal_constructor(Some(&fmt), location);
+unsafe { panic_impl(&pi) }
+```
+
+Actually resolving this goes through several layers of indirection:
+
+1. In `compiler/rustc_middle/src/middle/weak_lang_items.rs`, `panic_impl` is
+ declared as 'weak lang item', with the symbol `rust_begin_unwind`. This is
+ used in `rustc_typeck/src/collect.rs` to set the actual symbol name to
+ `rust_begin_unwind`.
+
+ Note that `panic_impl` is declared in an `extern "Rust"` block,
+ which means that core will attempt to call a foreign symbol called `rust_begin_unwind`
+ (to be resolved at link time)
+
+2. In `library/std/src/panicking.rs`, we have this definition:
+
+```rust
+/// Entry point of panic from the core crate.
+#[cfg(not(test))]
+#[panic_handler]
+#[unwind(allowed)]
+pub fn begin_panic_handler(info: &PanicInfo<'_>) -> ! {
+ ...
+}
+```
+
+The special `panic_handler` attribute is resolved via `compiler/rustc_middle/src/middle/lang_items`.
+The `extract` function converts the `panic_handler` attribute to a `panic_impl` lang item.
+
+Now, we have a matching `panic_handler` lang item in the `std`. This function goes
+through the same process as the `extern { fn panic_impl }` definition in `core`, ending
+up with a symbol name of `rust_begin_unwind`. At link time, the symbol reference in `core`
+will be resolved to the definition of `std` (the function called `begin_panic_handler` in the
+Rust source).
+
+Thus, control flow will pass from core to std at runtime. This allows panics from `core`
+to go through the same infrastructure that other panics use (panic hooks, unwinding, etc)
+
+### std implementation of panic!
+
+This is where the actual panic-related logic begins. In `library/std/src/panicking.rs`,
+control passes to `rust_panic_with_hook`. This method is responsible
+for invoking the global panic hook, and checking for double panics. Finally,
+we call `__rust_start_panic`, which is provided by the panic runtime.
+
+The call to `__rust_start_panic` is very weird - it is passed a `*mut &mut dyn BoxMeUp`,
+converted to an `usize`. Let's break this type down:
+
+1. `BoxMeUp` is an internal trait. It is implemented for `PanicPayload`
+(a wrapper around the user-supplied payload type), and has a method
+`fn box_me_up(&mut self) -> *mut (dyn Any + Send)`.
+This method takes the user-provided payload (`T: Any + Send`),
+boxes it, and converts the box to a raw pointer.
+
+2. When we call `__rust_start_panic`, we have an `&mut dyn BoxMeUp`.
+However, this is a fat pointer (twice the size of a `usize`).
+To pass this to the panic runtime across an FFI boundary, we take a mutable
+reference *to this mutable reference* (`&mut &mut dyn BoxMeUp`), and convert it to a raw pointer
+(`*mut &mut dyn BoxMeUp`). The outer raw pointer is a thin pointer, since it points to a `Sized`
+type (a mutable reference). Therefore, we can convert this thin pointer into a `usize`, which
+is suitable for passing across an FFI boundary.
+
+Finally, we call `__rust_start_panic` with this `usize`. We have now entered the panic runtime.
+
+## Step 2: The panic runtime
+
+Rust provides two panic runtimes: `panic_abort` and `panic_unwind`. The user chooses
+between them at build time via their `Cargo.toml`
+
+`panic_abort` is extremely simple: its implementation of `__rust_start_panic` just aborts,
+as you would expect.
+
+`panic_unwind` is the more interesting case.
+
+In its implementation of `__rust_start_panic`, we take the `usize`, convert
+it back to a `*mut &mut dyn BoxMeUp`, dereference it, and call `box_me_up`
+on the `&mut dyn BoxMeUp`. At this point, we have a raw pointer to the payload
+itself (a `*mut (dyn Send + Any)`): that is, a raw pointer to the actual value
+provided by the user who called `panic!`.
+
+At this point, the platform-independent code ends. We now call into
+platform-specific unwinding logic (e.g `unwind`). This code is
+responsible for unwinding the stack, running any 'landing pads' associated
+with each frame (currently, running destructors), and transferring control
+to the `catch_unwind` frame.
+
+Note that all panics either abort the process or get caught by some call to `catch_unwind`:
+in `library/std/src/rt.rs`, the call to the user-provided
+`main` function is wrapped in `catch_unwind`.
diff --git a/src/doc/rustc-dev-guide/src/parallel-rustc.md b/src/doc/rustc-dev-guide/src/parallel-rustc.md
new file mode 100644
index 000000000..4aa13d781
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/parallel-rustc.md
@@ -0,0 +1,106 @@
+# Parallel Compilation
+
+As of <!-- date: 2022-05 --> May 2022, The only stage of the compiler
+that is already parallel is codegen. The nightly compiler implements query evaluation,
+but there is still a lot of work to be done. The lack of parallelism at other stages
+also represents an opportunity for improving compiler performance. One can try out the current
+parallel compiler work by enabling it in the `config.toml`.
+
+These next few sections describe where and how parallelism is currently used,
+and the current status of making parallel compilation the default in `rustc`.
+
+The underlying thread-safe data-structures used in the parallel compiler
+can be found in the `rustc_data_structures::sync` module. Some of these data structures
+use the `parking_lot` crate as well.
+
+## Codegen
+
+There are two underlying thread safe data structures used in code generation:
+
+- `Lrc`
+ - Which is an [`Arc`][Arc] if `parallel_compiler` is true, and a [`Rc`][Rc]
+ if it is not.
+- `MetadataRef` -> [`OwningRef<Box<dyn Erased + Send + Sync>, [u8]>`][OwningRef]
+ - This data structure is specific to `rustc`.
+
+During [monomorphization][monomorphization] the compiler splits up all the code to
+be generated into smaller chunks called _codegen units_. These are then generated by
+independent instances of LLVM running in parallel. At the end, the linker
+is run to combine all the codegen units together into one binary. This process
+occurs in the `rustc_codegen_ssa::base` module.
+
+## Query System
+
+The query model has some properties that make it actually feasible to evaluate
+multiple queries in parallel without too much of an effort:
+
+- All data a query provider can access is accessed via the query context, so
+ the query context can take care of synchronizing access.
+- Query results are required to be immutable so they can safely be used by
+ different threads concurrently.
+
+When a query `foo` is evaluated, the cache table for `foo` is locked.
+
+- If there already is a result, we can clone it, release the lock and
+ we are done.
+- If there is no cache entry and no other active query invocation computing the
+ same result, we mark the key as being "in progress", release the lock and
+ start evaluating.
+- If there *is* another query invocation for the same key in progress, we
+ release the lock, and just block the thread until the other invocation has
+ computed the result we are waiting for. This cannot deadlock because, as
+ mentioned before, query invocations form a DAG. Some threads will always make
+ progress.
+
+## Rustdoc
+
+As of <!-- date: 2022-05--> May 2022, there are still a number of steps
+to complete before rustdoc rendering can be made parallel. More details on
+this issue can be found [here][parallel-rustdoc].
+
+## Current Status
+
+As of <!-- date: 2022-05 --> May 2022, work on explicitly parallelizing the
+compiler has stalled. There is a lot of design and correctness work that needs
+to be done.
+
+These are the basic ideas in the effort to make `rustc` parallel:
+
+- There are a lot of loops in the compiler that just iterate over all items in
+ a crate. These can possibly be parallelized.
+- We can use (a custom fork of) [`rayon`] to run tasks in parallel. The custom
+ fork allows the execution of DAGs of tasks, not just trees.
+- There are currently a lot of global data structures that need to be made
+ thread-safe. A key strategy here has been converting interior-mutable
+ data-structures (e.g. `Cell`) into their thread-safe siblings (e.g. `Mutex`).
+
+[`rayon`]: https://crates.io/crates/rayon
+
+As of <!-- date: 2022-05 --> May 2022, much of this effort is on hold due
+to lack of manpower. We have a working prototype with promising performance
+gains in many cases. However, there are two blockers:
+
+- It's not clear what invariants need to be upheld that might not hold in the
+ face of concurrency. An auditing effort was underway, but seems to have
+ stalled at some point.
+
+- There is a lot of lock contention, which actually degrades performance as the
+ number of threads increases beyond 4.
+
+Here are some resources that can be used to learn more (note that some of them
+are a bit out of date):
+
+- [This IRLO thread by Zoxc, one of the pioneers of the effort][irlo0]
+- [This list of interior mutability in the compiler by nikomatsakis][imlist]
+- [This IRLO thread by alexchricton about performance][irlo1]
+- [This tracking issue][tracking]
+
+[irlo0]: https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606
+[imlist]: https://github.com/nikomatsakis/rustc-parallelization/blob/master/interior-mutability-list.md
+[irlo1]: https://internals.rust-lang.org/t/help-test-parallel-rustc/11503
+[tracking]: https://github.com/rust-lang/rust/issues/48685
+[monomorphization]: backend/monomorph.md
+[parallel-rustdoc]: https://github.com/rust-lang/rust/issues/82741
+[Arc]: https://doc.rust-lang.org/std/sync/struct.Arc.html
+[Rc]: https://doc.rust-lang.org/std/rc/struct.Rc.html
+[OwningRef]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_data_structures/owning_ref/index.html
diff --git a/src/doc/rustc-dev-guide/src/param_env.md b/src/doc/rustc-dev-guide/src/param_env.md
new file mode 100644
index 000000000..08e19c339
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/param_env.md
@@ -0,0 +1,69 @@
+# Parameter Environment
+
+When working with associated and/or generic items (types, constants,
+functions/methods) it is often relevant to have more information about the
+`Self` or generic parameters. Trait bounds and similar information is encoded in
+the [`ParamEnv`][pe]. Often this is not enough information to obtain things like the
+type's `Layout`, but you can do all kinds of other checks on it (e.g. whether a
+type implements `Copy`) or you can evaluate an associated constant whose value
+does not depend on anything from the parameter environment.
+
+[pe]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.ParamEnv.html
+
+For example if you have a function
+
+```rust
+fn foo<T: Copy>(t: T) { ... }
+```
+
+the parameter environment for that function is `[T: Copy]`. This means any
+evaluation within this function will, when accessing the type `T`, know about
+its `Copy` bound via the parameter environment.
+
+You can get the parameter environment for a `def_id` using the
+[`param_env`][query] query. However, this `ParamEnv` can be too generic for
+your use case. Using the `ParamEnv` from the surrounding context can allow you
+to evaluate more things. For example, suppose we had something the following:
+
+[query]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ty_utils/ty/fn.param_env.html
+
+```rust
+trait Foo {
+ type Assoc;
+}
+
+trait Bar { }
+
+trait Baz {
+ fn stuff() -> bool;
+}
+
+fn foo<T>(t: T)
+where
+ T: Foo,
+ <T as Foo>::Assoc: Bar
+{
+ bar::<T::Assoc>()
+}
+
+fn bar<T: Baz>() {
+ if T::stuff() { mep() } else { mop() }
+}
+```
+
+We may know some things inside `bar` that we wouldn't know if we just fetched
+`bar`'s param env because of the `<T as Foo>::Assoc: Bar` bound in `foo`. This
+is a contrived example that makes no sense in our existing analyses, but we may
+run into similar cases when doing analyses with associated constants on generic
+traits or traits with assoc types.
+
+## Bundling
+
+Another great thing about `ParamEnv` is that you can use it to bundle the thing
+depending on generic parameters (e.g. a `Ty`) by calling the [`and`][and]
+method. This will produce a [`ParamEnvAnd<Ty>`][pea], making clear that you
+should probably not be using the inner value without taking care to also use
+the [`ParamEnv`][pe].
+
+[and]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.ParamEnv.html#method.and
+[pea]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.ParamEnvAnd.html
diff --git a/src/doc/rustc-dev-guide/src/part-2-intro.md b/src/doc/rustc-dev-guide/src/part-2-intro.md
new file mode 100644
index 000000000..5ea4d7b6b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/part-2-intro.md
@@ -0,0 +1,14 @@
+# Part 2: High-Level Compiler Architecture
+
+The remaining parts of this guide discuss how the compiler works. They go
+through everything from high-level structure of the compiler to how each stage
+of compilation works. They should be friendly to both readers interested in the
+end-to-end process of compilation _and_ readers interested in learning about a
+specific system they wish to contribute to. If anything is unclear, feel free
+to file an issue on the [rustc-dev-guide
+repo](https://github.com/rust-lang/rustc-dev-guide/issues) or contact the compiler
+team, as detailed in [this chapter from Part 1](./compiler-team.md).
+
+In this part, we will look at the high-level architecture of the compiler. In
+particular, we will look at three overarching design choices that impact the
+whole compiler: the query system, incremental compilation, and interning.
diff --git a/src/doc/rustc-dev-guide/src/part-3-intro.md b/src/doc/rustc-dev-guide/src/part-3-intro.md
new file mode 100644
index 000000000..c10080632
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/part-3-intro.md
@@ -0,0 +1,10 @@
+# Part 3: Source Code Representation
+
+This part describes the process of taking raw source code from the user and
+transforming it into various forms that the compiler can work with easily.
+These are called _intermediate representations (IRs)_.
+
+This process starts with compiler understanding what the user has asked for:
+parsing the command line arguments given and determining what it is to compile.
+After that, the compiler transforms the user input into a series of IRs that
+look progressively less like what the user wrote.
diff --git a/src/doc/rustc-dev-guide/src/part-4-intro.md b/src/doc/rustc-dev-guide/src/part-4-intro.md
new file mode 100644
index 000000000..00a74f308
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/part-4-intro.md
@@ -0,0 +1,12 @@
+# Part 4: Analysis
+
+This part discusses the many analyses that the compiler uses to check various
+properties of the code and to inform later stages. Typically, this is what people
+mean when they talk about "Rust's type system". This includes the
+representation, inference, and checking of types, the trait system, and the
+borrow checker. These analyses do not happen as one big pass or set of
+contiguous passes. Rather, they are spread out throughout various parts of the
+compilation process and use different intermediate representations. For example,
+type checking happens on the HIR, while borrow checking happens on the MIR.
+Nonetheless, for the sake of presentation, we will discuss all of these
+analyses in this part of the guide.
diff --git a/src/doc/rustc-dev-guide/src/part-5-intro.md b/src/doc/rustc-dev-guide/src/part-5-intro.md
new file mode 100644
index 000000000..4b7c25797
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/part-5-intro.md
@@ -0,0 +1,54 @@
+# From MIR to Binaries
+
+All of the preceding chapters of this guide have one thing in common: we never
+generated any executable machine code at all! With this chapter, all of that
+changes.
+
+So far, we've shown how the compiler can take raw source code in text format
+and transform it into [MIR]. We have also shown how the compiler does various
+analyses on the code to detect things like type or lifetime errors. Now, we
+will finally take the MIR and produce some executable machine code.
+
+[MIR]: ./mir/index.md
+
+> NOTE: This part of a compiler is often called the _backend_. The term is a bit
+> overloaded because in the compiler source, it usually refers to the "codegen
+> backend" (i.e. LLVM or Cranelift). Usually, when you see the word "backend"
+> in this part, we are referring to the "codegen backend".
+
+So what do we need to do?
+
+0. First, we need to collect the set of things to generate code for. In
+ particular, we need to find out which concrete types to substitute for
+ generic ones, since we need to generate code for the concrete types.
+ Generating code for the concrete types (i.e. emitting a copy of the code for
+ each concrete type) is called _monomorphization_, so the process of
+ collecting all the concrete types is called _monomorphization collection_.
+1. Next, we need to actually lower the MIR to a codegen IR
+ (usually LLVM IR) for each concrete type we collected.
+2. Finally, we need to invoke LLVM or Cranelift, which runs a bunch of
+ optimization passes, generates executable code, and links together an
+ executable binary.
+
+[codegen1]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/base/fn.codegen_crate.html
+
+The code for codegen is actually a bit complex due to a few factors:
+
+- Support for multiple codegen backends (LLVM and Cranelift). We try to share as much
+ backend code between them as possible, so a lot of it is generic over the
+ codegen implementation. This means that there are often a lot of layers of
+ abstraction.
+- Codegen happens asynchronously in another thread for performance.
+- The actual codegen is done by a third-party library (either LLVM or Cranelift).
+
+Generally, the [`rustc_codegen_ssa`][ssa] crate contains backend-agnostic code
+(i.e. independent of LLVM or Cranelift), while the [`rustc_codegen_llvm`][llvm]
+crate contains code specific to LLVM codegen.
+
+[ssa]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/index.html
+[llvm]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_llvm/index.html
+
+At a very high level, the entry point is
+[`rustc_codegen_ssa::base::codegen_crate`][codegen1]. This function starts the
+process discussed in the rest of this chapter.
+
diff --git a/src/doc/rustc-dev-guide/src/pat-exhaustive-checking.md b/src/doc/rustc-dev-guide/src/pat-exhaustive-checking.md
new file mode 100644
index 000000000..a3103de8f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/pat-exhaustive-checking.md
@@ -0,0 +1,88 @@
+# Pattern and Exhaustiveness Checking
+
+In Rust, pattern matching and bindings have a few very helpful properties. The
+compiler will check that bindings are irrefutable when made and that match arms
+are exhaustive.
+
+## Pattern usefulness
+
+The central question that usefulness checking answers is:
+"in this match expression, is that branch reachable?".
+More precisely, it boils down to computing whether,
+given a list of patterns we have already seen,
+a given new pattern might match any new value.
+
+For example, in the following match expression,
+we ask in turn whether each pattern might match something
+that wasn't matched by the patterns above it.
+Here we see the 4th pattern is redundant with the 1st;
+that branch will get an "unreachable" warning.
+The 3rd pattern may or may not be useful,
+depending on whether `Foo` has other variants than `Bar`.
+Finally, we can ask whether the whole match is exhaustive
+by asking whether the wildcard pattern (`_`)
+is useful relative to the list of all the patterns in that match.
+Here we can see that `_` is useful (it would catch `(false, None)`);
+this expression would therefore get a "non-exhaustive match" error.
+
+```rust
+// x: (bool, Option<Foo>)
+match x {
+ (true, _) => {} // 1
+ (false, Some(Foo::Bar)) => {} // 2
+ (false, Some(_)) => {} // 3
+ (true, None) => {} // 4
+}
+```
+
+Thus usefulness is used for two purposes:
+detecting unreachable code (which is useful to the user),
+and ensuring that matches are exhaustive (which is important for soundness,
+because a match expression can return a value).
+
+## Where it happens
+
+This check is done to any expression that desugars to a match expression in MIR.
+That includes actual `match` expressions,
+but also anything that looks like pattern matching,
+including `if let`, destructuring `let`, and similar expressions.
+
+```rust
+// `match`
+// Usefulness can detect unreachable branches and forbid non-exhaustive matches.
+match foo() {
+ Ok(x) => x,
+ Err(_) => panic!(),
+}
+
+// `if let`
+// Usefulness can detect unreachable branches.
+if let Some(x) = foo() {
+ // ...
+}
+
+// `while let`
+// Usefulness can detect infinite loops and dead loops.
+while let Some(x) = it.next() {
+ // ...
+}
+
+// Destructuring `let`
+// Usefulness can forbid non-exhaustive patterns.
+let Foo::Bar(x, y) = foo();
+
+// Destructuring function arguments
+// Usefulness can forbid non-exhaustive patterns.
+fn foo(Foo { x, y }: Foo) {
+ // ...
+}
+```
+
+## The algorithm
+
+Exhaustiveness checking is implemented in [`check_match`].
+The core of the algorithm is in [`usefulness`].
+That file contains a detailed description of the algorithm.
+
+[`check_match`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/pattern/check_match/index.html
+[`usefulness`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/pattern/usefulness/index.html
diff --git a/src/doc/rustc-dev-guide/src/profile-guided-optimization.md b/src/doc/rustc-dev-guide/src/profile-guided-optimization.md
new file mode 100644
index 000000000..db2624e92
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/profile-guided-optimization.md
@@ -0,0 +1,140 @@
+# Profile Guided Optimization
+
+<!-- toc -->
+
+`rustc` supports doing profile-guided optimization (PGO).
+This chapter describes what PGO is and how the support for it is
+implemented in `rustc`.
+
+## What Is Profiled-Guided Optimization?
+
+The basic concept of PGO is to collect data about the typical execution of
+a program (e.g. which branches it is likely to take) and then use this data
+to inform optimizations such as inlining, machine-code layout,
+register allocation, etc.
+
+There are different ways of collecting data about a program's execution.
+One is to run the program inside a profiler (such as `perf`) and another
+is to create an instrumented binary, that is, a binary that has data
+collection built into it, and run that.
+The latter usually provides more accurate data.
+
+## How is PGO implemented in `rustc`?
+
+`rustc` current PGO implementation relies entirely on LLVM.
+LLVM actually [supports multiple forms][clang-pgo] of PGO:
+
+[clang-pgo]: https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization
+
+- Sampling-based PGO where an external profiling tool like `perf` is used
+ to collect data about a program's execution.
+- GCOV-based profiling, where code coverage infrastructure is used to collect
+ profiling information.
+- Front-end based instrumentation, where the compiler front-end (e.g. Clang)
+ inserts instrumentation intrinsics into the LLVM IR it generates (but see the
+ [^note-instrument-coverage]"Note").
+- IR-level instrumentation, where LLVM inserts the instrumentation intrinsics
+ itself during optimization passes.
+
+`rustc` supports only the last approach, IR-level instrumentation, mainly
+because it is almost exclusively implemented in LLVM and needs little
+maintenance on the Rust side. Fortunately, it is also the most modern approach,
+yielding the best results.
+
+So, we are dealing with an instrumentation-based approach, i.e. profiling data
+is generated by a specially instrumented version of the program that's being
+optimized. Instrumentation-based PGO has two components: a compile-time
+component and run-time component, and one needs to understand the overall
+workflow to see how they interact.
+
+[^note-instrument-coverage]: Note: `rustc` now supports front-end-based coverage
+instrumentation, via the experimental option
+[`-C instrument-coverage`](./llvm-coverage-instrumentation.md), but using these
+coverage results for PGO has not been attempted at this time.
+
+### Overall Workflow
+
+Generating a PGO-optimized program involves the following four steps:
+
+1. Compile the program with instrumentation enabled (e.g. `rustc -C profile-generate main.rs`)
+2. Run the instrumented program (e.g. `./main`) which generates a `default-<id>.profraw` file
+3. Convert the `.profraw` file into a `.profdata` file using LLVM's `llvm-profdata` tool.
+4. Compile the program again, this time making use of the profiling data
+ (e.g. `rustc -C profile-use=merged.profdata main.rs`)
+
+### Compile-Time Aspects
+
+Depending on which step in the above workflow we are in, two different things
+can happen at compile time:
+
+#### Create Binaries with Instrumentation
+
+As mentioned above, the profiling instrumentation is added by LLVM.
+`rustc` instructs LLVM to do so [by setting the appropriate][pgo-gen-passmanager]
+flags when creating LLVM `PassManager`s:
+
+```C
+ // `PMBR` is an `LLVMPassManagerBuilderRef`
+ unwrap(PMBR)->EnablePGOInstrGen = true;
+ // Instrumented binaries have a default output path for the `.profraw` file
+ // hard-coded into them:
+ unwrap(PMBR)->PGOInstrGen = PGOGenPath;
+```
+
+`rustc` also has to make sure that some of the symbols from LLVM's profiling
+runtime are not removed [by marking the with the right export level][pgo-gen-symbols].
+
+[pgo-gen-passmanager]: https://github.com/rust-lang/rust/blob/1.34.1/src/rustllvm/PassWrapper.cpp#L412-L416
+[pgo-gen-symbols]:https://github.com/rust-lang/rust/blob/1.34.1/src/librustc_codegen_ssa/back/symbol_export.rs#L212-L225
+
+
+#### Compile Binaries Where Optimizations Make Use Of Profiling Data
+
+In the final step of the workflow described above, the program is compiled
+again, with the compiler using the gathered profiling data in order to drive
+optimization decisions. `rustc` again leaves most of the work to LLVM here,
+basically [just telling][pgo-use-passmanager] the LLVM `PassManagerBuilder`
+where the profiling data can be found:
+
+```C
+ unwrap(PMBR)->PGOInstrUse = PGOUsePath;
+```
+
+[pgo-use-passmanager]: https://github.com/rust-lang/rust/blob/1.34.1/src/rustllvm/PassWrapper.cpp#L417-L420
+
+LLVM does the rest (e.g. setting branch weights, marking functions with
+`cold` or `inlinehint`, etc).
+
+
+### Runtime Aspects
+
+Instrumentation-based approaches always also have a runtime component, i.e.
+once we have an instrumented program, that program needs to be run in order
+to generate profiling data, and collecting and persisting this profiling
+data needs some infrastructure in place.
+
+In the case of LLVM, these runtime components are implemented in
+[compiler-rt][compiler-rt-profile] and statically linked into any instrumented
+binaries.
+The `rustc` version of this can be found in `library/profiler_builtins` which
+basically packs the C code from `compiler-rt` into a Rust crate.
+
+In order for `profiler_builtins` to be built, `profiler = true` must be set
+in `rustc`'s `config.toml`.
+
+[compiler-rt-profile]: https://github.com/llvm/llvm-project/tree/main/compiler-rt/lib/profile
+
+## Testing PGO
+
+Since the PGO workflow spans multiple compiler invocations most testing happens
+in [run-make tests][rmake-tests] (the relevant tests have `pgo` in their name).
+There is also a [codegen test][codegen-test] that checks that some expected
+instrumentation artifacts show up in LLVM IR.
+
+[rmake-tests]: https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps
+[codegen-test]: https://github.com/rust-lang/rust/blob/master/src/test/codegen/pgo-instrumentation.rs
+
+## Additional Information
+
+Clang's documentation contains a good overview on PGO in LLVM here:
+https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization
diff --git a/src/doc/rustc-dev-guide/src/profiling.md b/src/doc/rustc-dev-guide/src/profiling.md
new file mode 100644
index 000000000..ada497d88
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/profiling.md
@@ -0,0 +1,113 @@
+# Profiling the compiler
+
+This section talks about how to profile the compiler and find out where it spends its time.
+
+Depending on what you're trying to measure, there are several different approaches:
+
+- If you want to see if a PR improves or regresses compiler performance,
+ see the [rustc-perf chapter](tests/perf.md) for requesting a benchmarking run.
+
+- If you want a medium-to-high level overview of where `rustc` is spending its time:
+ - The `-Z self-profile` flag and [measureme](https://github.com/rust-lang/measureme) tools offer a query-based approach to profiling.
+ See [their docs](https://github.com/rust-lang/measureme/blob/master/summarize/README.md) for more information.
+
+- If you want function level performance data or even just more details than the above approaches:
+ - Consider using a native code profiler such as [perf](profiling/with_perf.md)
+ - or [tracy](https://github.com/nagisa/rust_tracy_client) for a nanosecond-precision,
+ full-featured graphical interface.
+
+- If you want a nice visual representation of the compile times of your crate graph,
+ you can use [cargo's `--timings` flag](https://doc.rust-lang.org/nightly/cargo/reference/timings.html),
+ e.g. `cargo build --timings`.
+ You can use this flag on the compiler itself with `CARGOFLAGS="--timings" ./x.py build`
+
+- If you want to profile memory usage, you can use various tools depending on what operating system
+ you are using.
+ - For Windows, read our [WPA guide](profiling/wpa_profiling.md).
+
+## Optimizing rustc's bootstrap times with `cargo-llvm-lines`
+
+Using [cargo-llvm-lines](https://github.com/dtolnay/cargo-llvm-lines) you can count the
+number of lines of LLVM IR across all instantiations of a generic function.
+Since most of the time compiling rustc is spent in LLVM, the idea is that by
+reducing the amount of code passed to LLVM, compiling rustc gets faster.
+
+To use `cargo-llvm-lines` together with somewhat custom rustc build process, you can use
+`-C save-temps` to obtain required LLVM IR. The option preserves temporary work products
+created during compilation. Among those is LLVM IR that represents an input to the
+optimization pipeline; ideal for our purposes. It is stored in files with `*.no-opt.bc`
+extension in LLVM bitcode format.
+
+Example usage:
+```
+cargo install cargo-llvm-lines
+# On a normal crate you could now run `cargo llvm-lines`, but `x.py` isn't normal :P
+
+# Do a clean before every run, to not mix in the results from previous runs.
+./x.py clean
+env RUSTFLAGS=-Csave-temps ./x.py build --stage 0 compiler/rustc
+
+# Single crate, e.g., rustc_middle. (Relies on the glob support of your shell.)
+# Convert unoptimized LLVM bitcode into a human readable LLVM assembly accepted by cargo-llvm-lines.
+for f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.no-opt.bc; do
+ ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis "$f"
+done
+cargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/rustc_middle-*.ll > llvm-lines-middle.txt
+
+# Specify all crates of the compiler.
+for f in build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.no-opt.bc; do
+ ./build/x86_64-unknown-linux-gnu/llvm/bin/llvm-dis "$f"
+done
+cargo llvm-lines --files ./build/x86_64-unknown-linux-gnu/stage0-rustc/x86_64-unknown-linux-gnu/release/deps/*.ll > llvm-lines.txt
+```
+
+Example output for the compiler:
+```
+ Lines Copies Function name
+ ----- ------ -------------
+ 45207720 (100%) 1583774 (100%) (TOTAL)
+ 2102350 (4.7%) 146650 (9.3%) core::ptr::drop_in_place
+ 615080 (1.4%) 8392 (0.5%) std::thread::local::LocalKey<T>::try_with
+ 594296 (1.3%) 1780 (0.1%) hashbrown::raw::RawTable<T>::rehash_in_place
+ 592071 (1.3%) 9691 (0.6%) core::option::Option<T>::map
+ 528172 (1.2%) 5741 (0.4%) core::alloc::layout::Layout::array
+ 466854 (1.0%) 8863 (0.6%) core::ptr::swap_nonoverlapping_one
+ 412736 (0.9%) 1780 (0.1%) hashbrown::raw::RawTable<T>::resize
+ 367776 (0.8%) 2554 (0.2%) alloc::raw_vec::RawVec<T,A>::grow_amortized
+ 367507 (0.8%) 643 (0.0%) rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
+ 355882 (0.8%) 6332 (0.4%) alloc::alloc::box_free
+ 354556 (0.8%) 14213 (0.9%) core::ptr::write
+ 354361 (0.8%) 3590 (0.2%) core::iter::traits::iterator::Iterator::fold
+ 347761 (0.8%) 3873 (0.2%) rustc_middle::ty::context::tls::set_tlv
+ 337534 (0.7%) 2377 (0.2%) alloc::raw_vec::RawVec<T,A>::allocate_in
+ 331690 (0.7%) 3192 (0.2%) hashbrown::raw::RawTable<T>::find
+ 328756 (0.7%) 3978 (0.3%) rustc_middle::ty::context::tls::with_context_opt
+ 326903 (0.7%) 642 (0.0%) rustc_query_system::query::plumbing::try_execute_query
+```
+
+Since this doesn't seem to work with incremental compilation or `./x.py check`,
+you will be compiling rustc _a lot_.
+I recommend changing a few settings in `config.toml` to make it bearable:
+```
+[rust]
+# A debug build takes _a third_ as long on my machine,
+# but compiling more than stage0 rustc becomes unbearably slow.
+optimize = false
+
+# We can't use incremental anyway, so we disable it for a little speed boost.
+incremental = false
+# We won't be running it, so no point in compiling debug checks.
+debug = false
+
+# Using a single codegen unit gives less output, but is slower to compile.
+codegen-units = 0 # num_cpus
+```
+
+The llvm-lines output is affected by several options.
+`optimize = false` increases it from 2.1GB to 3.5GB and `codegen-units = 0` to 4.1GB.
+
+MIR optimizations have little impact. Compared to the default `RUSTFLAGS="-Z
+mir-opt-level=1"`, level 0 adds 0.3GB and level 2 removes 0.2GB.
+As of <!-- date: 2022-07 --> July 2022,
+inlining happens in LLVM and GCC codegen backends,
+missing only in the Cranelift one.
diff --git a/src/doc/rustc-dev-guide/src/profiling/with_perf.md b/src/doc/rustc-dev-guide/src/profiling/with_perf.md
new file mode 100644
index 000000000..af30b4732
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/profiling/with_perf.md
@@ -0,0 +1,331 @@
+# Profiling with perf
+
+This is a guide for how to profile rustc with [perf](https://perf.wiki.kernel.org/index.php/Main_Page).
+
+## Initial steps
+
+- Get a clean checkout of rust-lang/master, or whatever it is you want
+ to profile.
+- Set the following settings in your `config.toml`:
+ - `debuginfo-level = 1` - enables line debuginfo
+ - `jemalloc = false` - lets you do memory use profiling with valgrind
+ - leave everything else the defaults
+- Run `./x.py build` to get a full build
+- Make a rustup toolchain pointing to that result
+ - see [the "build and run" section for instructions][b-a-r]
+
+[b-a-r]: ../building/how-to-build-and-run.html#toolchain
+
+## Gathering a perf profile
+
+perf is an excellent tool on linux that can be used to gather and
+analyze all kinds of information. Mostly it is used to figure out
+where a program spends its time. It can also be used for other sorts
+of events, though, like cache misses and so forth.
+
+### The basics
+
+The basic `perf` command is this:
+
+```bash
+perf record -F99 --call-graph dwarf XXX
+```
+
+The `-F99` tells perf to sample at 99 Hz, which avoids generating too
+much data for longer runs (why 99 Hz you ask? It is often chosen
+because it is unlikely to be in lockstep with other periodic
+activity). The `--call-graph dwarf` tells perf to get call-graph
+information from debuginfo, which is accurate. The `XXX` is the
+command you want to profile. So, for example, you might do:
+
+```bash
+perf record -F99 --call-graph dwarf cargo +<toolchain> rustc
+```
+
+to run `cargo` -- here `<toolchain>` should be the name of the toolchain
+you made in the beginning. But there are some things to be aware of:
+
+- You probably don't want to profile the time spend building
+ dependencies. So something like `cargo build; cargo clean -p $C` may
+ be helpful (where `$C` is the crate name)
+ - Though usually I just do `touch src/lib.rs` and rebuild instead. =)
+- You probably don't want incremental messing about with your
+ profile. So something like `CARGO_INCREMENTAL=0` can be helpful.
+
+### Gathering a perf profile from a `perf.rust-lang.org` test
+
+Often we want to analyze a specific test from `perf.rust-lang.org`. To
+do that, the first step is to clone
+[the rustc-perf repository][rustc-perf-gh]:
+
+```bash
+git clone https://github.com/rust-lang/rustc-perf
+```
+
+[rustc-perf-gh]: https://github.com/rust-lang/rustc-perf
+
+#### Doing it the easy way
+
+Once you've cloned the repo, you can use the `collector` executable to
+do profiling for you! You can find
+[instructions in the rustc-perf readme][rustc-perf-readme].
+
+[rustc-perf-readme]: https://github.com/rust-lang/rustc-perf/blob/master/collector/README.md#profiling
+
+For example, to measure the clap-rs test, you might do:
+
+```bash
+./target/release/collector \
+ --output-repo /path/to/place/output \
+ profile perf-record \
+ --rustc /path/to/rustc/executable/from/your/build/directory \
+ --cargo `which cargo` \
+ --filter clap-rs \
+ --builds Check \
+```
+
+You can also use that same command to use cachegrind or other profiling tools.
+
+#### Doing it the hard way
+
+If you prefer to run things manually, that is also possible. You first
+need to find the source for the test you want. Sources for the tests
+are found in [the `collector/benchmarks` directory][dir]. So let's go
+into the directory of a specific test; we'll use `clap-rs` as an
+example:
+
+[dir]: https://github.com/rust-lang/rustc-perf/tree/master/collector/benchmarks
+
+```bash
+cd collector/benchmarks/clap-rs
+```
+
+In this case, let's say we want to profile the `cargo check`
+performance. In that case, I would first run some basic commands to
+build the dependencies:
+
+```bash
+# Setup: first clean out any old results and build the dependencies:
+cargo +<toolchain> clean
+CARGO_INCREMENTAL=0 cargo +<toolchain> check
+```
+
+(Again, `<toolchain>` should be replaced with the name of the
+toolchain we made in the first step.)
+
+Next: we want record the execution time for *just* the clap-rs crate,
+running cargo check. I tend to use `cargo rustc` for this, since it
+also allows me to add explicit flags, which we'll do later on.
+
+```bash
+touch src/lib.rs
+CARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib
+```
+
+Note that final command: it's a doozy! It uses the `cargo rustc`
+command, which executes rustc with (potentially) additional options;
+the `--profile check` and `--lib` options specify that we are doing a
+`cargo check` execution, and that this is a library (not a binary).
+
+At this point, we can use `perf` tooling to analyze the results. For example:
+
+```bash
+perf report
+```
+
+will open up an interactive TUI program. In simple cases, that can be
+helpful. For more detailed examination, the [`perf-focus` tool][pf]
+can be helpful; it is covered below.
+
+**A note of caution.** Each of the rustc-perf tests is its own special
+ snowflake. In particular, some of them are not libraries, in which
+ case you would want to do `touch src/main.rs` and avoid passing
+ `--lib`. I'm not sure how best to tell which test is which to be
+ honest.
+
+### Gathering NLL data
+
+If you want to profile an NLL run, you can just pass extra options to
+the `cargo rustc` command, like so:
+
+```bash
+touch src/lib.rs
+CARGO_INCREMENTAL=0 perf record -F99 --call-graph dwarf cargo rustc --profile check --lib -- -Z borrowck=mir
+```
+
+[pf]: https://github.com/nikomatsakis/perf-focus
+
+## Analyzing a perf profile with `perf focus`
+
+Once you've gathered a perf profile, we want to get some information
+about it. For this, I personally use [perf focus][pf]. It's a kind of
+simple but useful tool that lets you answer queries like:
+
+- "how much time was spent in function F" (no matter where it was called from)
+- "how much time was spent in function F when it was called from G"
+- "how much time was spent in function F *excluding* time spent in G"
+- "what functions does F call and how much time does it spend in them"
+
+To understand how it works, you have to know just a bit about
+perf. Basically, perf works by *sampling* your process on a regular
+basis (or whenever some event occurs). For each sample, perf gathers a
+backtrace. `perf focus` lets you write a regular expression that tests
+which functions appear in that backtrace, and then tells you which
+percentage of samples had a backtrace that met the regular
+expression. It's probably easiest to explain by walking through how I
+would analyze NLL performance.
+
+### Installing `perf-focus`
+
+You can install perf-focus using `cargo install`:
+
+```bash
+cargo install perf-focus
+```
+
+### Example: How much time is spent in MIR borrowck?
+
+Let's say we've gathered the NLL data for a test. We'd like to know
+how much time it is spending in the MIR borrow-checker. The "main"
+function of the MIR borrowck is called `do_mir_borrowck`, so we can do
+this command:
+
+```bash
+$ perf focus '{do_mir_borrowck}'
+Matcher : {do_mir_borrowck}
+Matches : 228
+Not Matches: 542
+Percentage : 29%
+```
+
+The `'{do_mir_borrowck}'` argument is called the **matcher**. It
+specifies the test to be applied on the backtrace. In this case, the
+`{X}` indicates that there must be *some* function on the backtrace
+that meets the regular expression `X`. In this case, that regex is
+just the name of the function we want (in fact, it's a subset of the name;
+the full name includes a bunch of other stuff, like the module
+path). In this mode, perf-focus just prints out the percentage of
+samples where `do_mir_borrowck` was on the stack: in this case, 29%.
+
+**A note about c++filt.** To get the data from `perf`, `perf focus`
+ currently executes `perf script` (perhaps there is a better
+ way...). I've sometimes found that `perf script` outputs C++ mangled
+ names. This is annoying. You can tell by running `perf script |
+ head` yourself — if you see names like `5rustc6middle` instead of
+ `rustc::middle`, then you have the same problem. You can solve this
+ by doing:
+
+```bash
+perf script | c++filt | perf focus --from-stdin ...
+```
+
+This will pipe the output from `perf script` through `c++filt` and
+should mostly convert those names into a more friendly format. The
+`--from-stdin` flag to `perf focus` tells it to get its data from
+stdin, rather than executing `perf focus`. We should make this more
+convenient (at worst, maybe add a `c++filt` option to `perf focus`, or
+just always use it — it's pretty harmless).
+
+### Example: How much time does MIR borrowck spend solving traits?
+
+Perhaps we'd like to know how much time MIR borrowck spends in the
+trait checker. We can ask this using a more complex regex:
+
+```bash
+$ perf focus '{do_mir_borrowck}..{^rustc::traits}'
+Matcher : {do_mir_borrowck},..{^rustc::traits}
+Matches : 12
+Not Matches: 1311
+Percentage : 0%
+```
+
+Here we used the `..` operator to ask "how often do we have
+`do_mir_borrowck` on the stack and then, later, some function whose
+name begins with `rustc::traits`?" (basically, code in that module). It
+turns out the answer is "almost never" — only 12 samples fit that
+description (if you ever see *no* samples, that often indicates your
+query is messed up).
+
+If you're curious, you can find out exactly which samples by using the
+`--print-match` option. This will print out the full backtrace for
+each sample. The `|` at the front of the line indicates the part that
+the regular expression matched.
+
+### Example: Where does MIR borrowck spend its time?
+
+Often we want to do more "explorational" queries. Like, we know that
+MIR borrowck is 29% of the time, but where does that time get spent?
+For that, the `--tree-callees` option is often the best tool. You
+usually also want to give `--tree-min-percent` or
+`--tree-max-depth`. The result looks like this:
+
+```bash
+$ perf focus '{do_mir_borrowck}' --tree-callees --tree-min-percent 3
+Matcher : {do_mir_borrowck}
+Matches : 577
+Not Matches: 746
+Percentage : 43%
+
+Tree
+| matched `{do_mir_borrowck}` (43% total, 0% self)
+: | rustc_borrowck::nll::compute_regions (20% total, 0% self)
+: : | rustc_borrowck::nll::type_check::type_check_internal (13% total, 0% self)
+: : : | core::ops::function::FnOnce::call_once (5% total, 0% self)
+: : : : | rustc_borrowck::nll::type_check::liveness::generate (5% total, 3% self)
+: : : | <rustc_borrowck::nll::type_check::TypeVerifier<'a, 'b, 'tcx> as rustc::mir::visit::Visitor<'tcx>>::visit_mir (3% total, 0% self)
+: | rustc::mir::visit::Visitor::visit_mir (8% total, 6% self)
+: | <rustc_borrowck::MirBorrowckCtxt<'cx, 'tcx> as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (5% total, 0% self)
+: | rustc_mir_dataflow::do_dataflow (3% total, 0% self)
+```
+
+What happens with `--tree-callees` is that
+
+- we find each sample matching the regular expression
+- we look at the code that is occurs *after* the regex match and try
+ to build up a call tree
+
+The `--tree-min-percent 3` option says "only show me things that take
+more than 3% of the time. Without this, the tree often gets really
+noisy and includes random stuff like the innards of
+malloc. `--tree-max-depth` can be useful too, it just limits how many
+levels we print.
+
+For each line, we display the percent of time in that function
+altogether ("total") and the percent of time spent in **just that
+function and not some callee of that function** (self). Usually
+"total" is the more interesting number, but not always.
+
+### Relative percentages
+
+By default, all in perf-focus are relative to the **total program
+execution**. This is useful to help you keep perspective — often as
+we drill down to find hot spots, we can lose sight of the fact that,
+in terms of overall program execution, this "hot spot" is actually not
+important. It also ensures that percentages between different queries
+are easily compared against one another.
+
+That said, sometimes it's useful to get relative percentages, so `perf
+focus` offers a `--relative` option. In this case, the percentages are
+listed only for samples that match (vs all samples). So for example we
+could get our percentages relative to the borrowck itself
+like so:
+
+```bash
+$ perf focus '{do_mir_borrowck}' --tree-callees --relative --tree-max-depth 1 --tree-min-percent 5
+Matcher : {do_mir_borrowck}
+Matches : 577
+Not Matches: 746
+Percentage : 100%
+
+Tree
+| matched `{do_mir_borrowck}` (100% total, 0% self)
+: | rustc_borrowck::nll::compute_regions (47% total, 0% self) [...]
+: | rustc::mir::visit::Visitor::visit_mir (19% total, 15% self) [...]
+: | <rustc_borrowck::MirBorrowckCtxt<'cx, 'tcx> as rustc_mir_dataflow::DataflowResultsConsumer<'cx, 'tcx>>::visit_statement_entry (13% total, 0% self) [...]
+: | rustc_mir_dataflow::do_dataflow (8% total, 1% self) [...]
+```
+
+Here you see that `compute_regions` came up as "47% total" — that
+means that 47% of `do_mir_borrowck` is spent in that function. Before,
+we saw 20% — that's because `do_mir_borrowck` itself is only 43% of
+the total time (and `.47 * .43 = .20`).
diff --git a/src/doc/rustc-dev-guide/src/profiling/wpa_profiling.md b/src/doc/rustc-dev-guide/src/profiling/wpa_profiling.md
new file mode 100644
index 000000000..e7cf9418c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/profiling/wpa_profiling.md
@@ -0,0 +1,108 @@
+# Profiling on Windows
+
+## Introducing WPR and WPA
+
+High-level performance analysis (including memory usage) can be performed with the Windows
+Performance Recorder (WPR) and Windows Performance Analyzer (WPA). As the names suggest, WPR is for
+recording system statistics (in the form of event trace log a.k.a. ETL files), while WPA is for
+analyzing these ETL files.
+
+WPR collects system wide statistics, so it won't just record things relevant to rustc but also
+everything else that's running on the machine. During analysis, we can filter to just the things we
+find interesting.
+
+These tools are quite powerful but also require a bit of learning
+before we can successfully profile the Rust compiler.
+
+Here we will explore how to use WPR and WPA for analyzing the Rust compiler as well as provide
+links to useful "profiles" (i.e., settings files that tweak the defaults for WPR and WPA) that are
+specifically designed to make analyzing rustc easier.
+
+### Installing WPR and WPA
+
+You can install WPR and WPA as part of the Windows Performance Toolkit which itself is an option as
+part of downloading the Windows Assessment and Deployment Kit (ADK). You can download the ADK
+installer [here](https://go.microsoft.com/fwlink/?linkid=2086042). Make sure to select the Windows
+Performance Toolkit (you don't need to select anything else).
+
+## Recording
+
+In order to perform system analysis, you'll first need to record your system with WPR. Open WPR and
+at the bottom of the window select the "profiles" of the things you want to record. For looking
+into memory usage of the rustc bootstrap process, we'll want to select the following items:
+
+* CPU usage
+* VirtualAlloc usage
+
+You might be tempted to record "Heap usage" as well, but this records every single heap allocation
+and can be very, very expensive. For high-level analysis, it might be best to leave that turned
+off.
+
+Now we need to get our setup ready to record. For memory usage analysis, it is best to record the
+stage 2 compiler build with a stage 1 compiler build with debug symbols. Having symbols in the
+compiler we're using to build rustc will aid our analysis greatly by allowing WPA to resolve Rust
+symbols correctly. Unfortunately, the stage 0 compiler does not have symbols turned on which is why
+we'll need to build a stage 1 compiler and then a stage 2 compiler ourselves.
+
+To do this, make sure you have set `debuginfo-level = 1` in your `config.toml` file. This tells
+rustc to generate debug information which includes stack frames when bootstrapping.
+
+Now you can build the stage 1 compiler: `python x.py build --stage 1 -i library` or however
+else you want to build the stage 1 compiler.
+
+Now that the stage 1 compiler is built, we can record the stage 2 build. Go back to WPR, click the
+"start" button and build the stage 2 compiler (e.g., `python x build --stage=2 -i library`).
+When this process finishes, stop the recording.
+
+Click the Save button and once that process is complete, click the "Open in WPA" button which
+appears.
+
+> Note: The trace file is fairly large so it can take WPA some time to finish opening the file.
+
+## Analysis
+
+Now that our ETL file is open in WPA, we can analyze the results. First, we'll want to apply the
+pre-made "profile" which will put WPA into a state conducive to analyzing rustc bootstrap. Download
+the profile [here](https://github.com/wesleywiser/rustc-bootstrap-wpa-analysis/releases/download/1/rustc.generic.wpaProfile).
+Select the "Profiles" menu at the top, then "apply" and then choose the downloaded profile.
+
+You should see something resembling the following:
+
+![WPA with profile applied](../img/wpa-initial-memory.png)
+
+Next, we will need to tell WPA to load and process debug symbols so that it can properly demangle
+the Rust stack traces. To do this, click "Trace" and then choose "Load Symbols". This step can take
+a while.
+
+Once WPA has loaded symbols for rustc, we can expand the rustc.exe node and begin drilling down
+into the stack with the largest allocations.
+
+To do that, we'll expand the `[Root]` node in the "Commit Stack" column and continue expanding
+until we find interesting stack frames.
+
+> Tip: After selecting the node you want to expand, press the right arrow key. This will expand the
+node and put the selection on the next largest node in the expanded set. You can continue pressing
+the right arrow key until you reach an interesting frame.
+
+![WPA with expanded stack](../img/wpa-stack.png)
+
+In this sample, you can see calls through codegen are allocating ~30gb of memory in total
+throughout this profile.
+
+## Other Analysis Tabs
+
+The profile also includes a few other tabs which can be helpful:
+
+- System Configuration
+ - General information about the system the capture was recorded on.
+- rustc Build Processes
+ - A flat list of relevant processes such as rustc.exe, cargo.exe, link.exe etc.
+ - Each process lists its command line arguments.
+ - Useful for figuring out what a specific rustc process was working on.
+- rustc Build Process Tree
+ - Timeline showing when processes started and exited.
+- rustc CPU Analysis
+ - Contains charts preconfigured to show hotspots in rustc.
+ - These charts are designed to support analyzing where rustc is spending its time.
+- rustc Memory Analysis
+ - Contains charts preconfigured to show where rustc is allocating memory.
diff --git a/src/doc/rustc-dev-guide/src/queries/example-0.counts.txt b/src/doc/rustc-dev-guide/src/queries/example-0.counts.txt
new file mode 100644
index 000000000..e5b9c3f3d
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/queries/example-0.counts.txt
@@ -0,0 +1,104 @@
+translation,1,0.891
+symbol_name,2658,0.733
+def_symbol_name,2556,0.268
+item_attrs,5566,0.162
+type_of,6922,0.117
+generics_of,8020,0.084
+serialize dep graph,1,0.079
+relevant_trait_impls_for,50,0.063
+def_span,24875,0.061
+expansion,1,0.059
+const checking,1,0.055
+adt_def,1141,0.048
+trait_impls_of,32,0.045
+is_copy_raw,47,0.045
+is_foreign_item,2638,0.042
+fn_sig,2172,0.033
+adt_dtorck_constraint,2,0.023
+impl_trait_ref,2434,0.023
+typeck_tables_of,29,0.022
+item-bodies checking,1,0.017
+typeck_item_bodies,1,0.017
+is_default_impl,2320,0.017
+borrow checking,1,0.014
+borrowck,4,0.014
+mir_validated,4,0.013
+adt_destructor,10,0.012
+layout_raw,258,0.010
+load_dep_graph,1,0.007
+item-types checking,1,0.005
+mir_const,2,0.005
+name resolution,1,0.004
+is_object_safe,35,0.003
+is_sized_raw,89,0.003
+parsing,1,0.003
+is_freeze_raw,11,0.001
+privacy checking,1,0.001
+privacy_access_levels,5,0.001
+resolving dependency formats,1,0.001
+adt_sized_constraint,9,0.001
+wf checking,1,0.001
+liveness checking,1,0.001
+compute_incremental_hashes_map,1,0.001
+match checking,1,0.001
+type collecting,1,0.001
+param_env,31,0.000
+effect checking,1,0.000
+trait_def,140,0.000
+lowering ast -> hir,1,0.000
+predicates_of,70,0.000
+extern_crate,319,0.000
+lifetime resolution,1,0.000
+is_const_fn,6,0.000
+intrinsic checking,1,0.000
+translation item collection,1,0.000
+impl_polarity,15,0.000
+creating allocators,1,0.000
+language item collection,1,0.000
+crate injection,1,0.000
+early lint checks,1,0.000
+indexing hir,1,0.000
+maybe creating a macro crate,1,0.000
+coherence checking,1,0.000
+optimized_mir,6,0.000
+is_panic_runtime,33,0.000
+associated_item_def_ids,7,0.000
+needs_drop_raw,10,0.000
+lint checking,1,0.000
+complete gated feature checking,1,0.000
+stability index,1,0.000
+region_maps,11,0.000
+super_predicates_of,8,0.000
+coherent_trait,2,0.000
+AST validation,1,0.000
+loop checking,1,0.000
+static item recursion checking,1,0.000
+variances_of,11,0.000
+associated_item,5,0.000
+plugin loading,1,0.000
+looking for plugin registrar,1,0.000
+stability checking,1,0.000
+describe_def,15,0.000
+variance testing,1,0.000
+codegen unit partitioning,1,0.000
+looking for entry point,1,0.000
+checking for inline asm in case the target doesn't support it,1,0.000
+inherent_impls,1,0.000
+crate_inherent_impls,1,0.000
+trait_of_item,7,0.000
+crate_inherent_impls_overlap_check,1,0.000
+attribute checking,1,0.000
+internalize symbols,1,0.000
+impl wf inference,1,0.000
+death checking,1,0.000
+reachability checking,1,0.000
+reachable_set,1,0.000
+is_exported_symbol,3,0.000
+is_mir_available,2,0.000
+unused lib feature checking,1,0.000
+maybe building test harness,1,0.000
+recursion limit,1,0.000
+write allocator module,1,0.000
+assert dep graph,1,0.000
+plugin registration,1,0.000
+write metadata,1,0.000
diff --git a/src/doc/rustc-dev-guide/src/queries/example-0.html b/src/doc/rustc-dev-guide/src/queries/example-0.html
new file mode 100644
index 000000000..b196aaa83
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/queries/example-0.html
@@ -0,0 +1,313330 @@
+<html>
+<head>
+<!-- <link rel="stylesheet" type="text/css" href="profile_queries.css"> -->
+<style>
+
+body {
+ font-family: sans-serif;
+ background: black;
+}
+.trace {
+ color: black;
+ display: inline-block;
+ border-style: solid;
+ border-color: red;
+ border-width: 1px;
+ border-radius: 5px;
+ padding: 0px;
+ margin: 1px;
+ font-size: 0px;
+}
+.miss {
+ border-color: red;
+ border-width: 1px;
+}
+.extent-0 {
+ padding: 2px;
+}
+.time-begin {
+ border-width: 4px;
+ font-size: 12px;
+ color: white;
+ border-color: #afa;
+}
+.important {
+ border-width: 3px;
+ font-size: 12px;
+ color: white;
+ border-color: #f77;
+}
+.hit {
+ padding: 0px;
+ border-color: blue;
+ border-width: 3px;
+}
+.eff {
+ color: #fff;
+ display: inline-block;
+}
+.frc {
+ color: #7f7;
+ display: inline-block;
+}
+.dur {
+ display: none
+}
+.frac-50 {
+ padding: 10px;
+ border-width: 10px;
+ font-size: 32px;
+}
+.frac-40 {
+ padding: 8px;
+ border-width: 8px;
+ font-size: 24px;
+}
+.frac-30 {
+ padding: 6px;
+ border-width: 6px;
+ font-size: 18px;
+}
+.frac-20 {
+ padding: 4px;
+ border-width: 6px;
+ font-size: 16px;
+}
+.frac-10 {
+ padding: 2px;
+ border-width: 6px;
+ font-size: 14px;
+}
+</style>
+</head>
+<body>
+<div class="trace depth-0 extent-0 time-begin frac-001">
+<div class="eff">parsing</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">recursion limit</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">crate injection</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">plugin loading</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">plugin registration</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 important time-begin frac-05">
+<div class="eff">expansion</div>
+<div class="dur">0.059</div>
+<div class="frc">5.2%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">maybe building test harness</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">maybe creating a macro crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">creating allocators</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">checking for inline asm in case the target doesn't support it</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">early lint checks</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">AST validation</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-001">
+<div class="eff">name resolution</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">complete gated feature checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">lowering ast -> hir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">indexing hir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">attribute checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">language item collection</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">lifetime resolution</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">looking for entry point</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">looking for plugin registrar</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">loop checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">static item recursion checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">compute_incremental_hashes_map</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-001">
+<div class="eff">load_dep_graph</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">stability index</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">stability checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-7 important time-begin frac-0">
+<div class="eff">type collecting</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">impl wf inference</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-2 time-begin frac-0">
+<div class="eff">coherence checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 crate_inherent_impls miss frac-0">
+<div class="eff">crate_inherent_impls</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 crate_inherent_impls_overlap_check miss frac-0">
+<div class="eff">crate_inherent_impls_overlap_check</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">variance testing</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-7 important time-begin frac-0">
+<div class="eff">wf checking</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 region_maps miss frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 region_maps miss frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-1 time-begin frac-001">
+<div class="eff">item-types checking</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-1 extent-37 important typeck_tables_of miss frac-001">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-18 important relevant_trait_impls_for miss frac-001">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-23 important trait_impls_of miss frac-001">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important is_object_safe miss frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 super_predicates_of miss frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 associated_item_def_ids miss frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 super_predicates_of miss frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 super_predicates_of hit frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 associated_item_def_ids hit frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-18 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-1 important time-begin frac-01">
+<div class="eff">item-bodies checking</div>
+<div class="dur">0.017</div>
+<div class="frc">1.5%</div>
+<div class="trace depth-1 extent-2 important typeck_item_bodies miss frac-01">
+<div class="eff">typeck_item_bodies</div>
+<div class="dur">0.017</div>
+<div class="frc">1.5%</div>
+<div class="trace depth-2 extent-140 important typeck_tables_of miss frac-01">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.017</div>
+<div class="frc">1.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 inherent_impls miss frac-0">
+<div class="eff">inherent_impls</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 associated_item_def_ids miss frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 associated_item miss frac-0">
+<div class="eff">associated_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 variances_of miss frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 associated_item hit frac-0">
+<div class="eff">associated_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-3 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-5 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 variances_of miss frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-18 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-18 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-7 important adt_dtorck_constraint miss frac-01">
+<div class="eff">adt_dtorck_constraint</div>
+<div class="dur">0.012</div>
+<div class="frc">1.1%</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-4 adt_dtorck_constraint miss frac-001">
+<div class="eff">adt_dtorck_constraint</div>
+<div class="dur">0.011</div>
+<div class="frc">1.0%</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-5 adt_destructor miss frac-001">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.011</div>
+<div class="frc">1.0%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 coherent_trait miss frac-0">
+<div class="eff">coherent_trait</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-6 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-6 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-6 extent-61 important relevant_trait_impls_for miss frac-001">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.011</div>
+<div class="frc">1.0%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-60 important trait_impls_of miss frac-001">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.010</div>
+<div class="frc">0.9%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-8 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-9 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-9 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-10 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-10 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-11 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-5 adt_destructor miss frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 coherent_trait hit frac-0">
+<div class="eff">coherent_trait</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-61 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-55 important time-begin frac-02">
+<div class="eff">const checking</div>
+<div class="dur">0.055</div>
+<div class="frc">4.8%</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-2 important is_copy_raw miss frac-02">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.030</div>
+<div class="frc">2.6%</div>
+<div class="trace depth-2 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-02">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.030</div>
+<div class="frc">2.6%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-158 important trait_impls_of miss frac-02">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.028</div>
+<div class="frc">2.5%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 extern_crate miss frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-001">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-001">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-8 important is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-001">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-10 important is_copy_raw miss frac-001">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-001">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-10 important is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-7 important trait_impls_of miss frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important is_object_safe miss frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 super_predicates_of miss frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 associated_item_def_ids miss frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 super_predicates_of hit frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 associated_item_def_ids hit frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_const_fn miss frac-0">
+<div class="eff">is_const_fn</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 associated_item hit frac-0">
+<div class="eff">associated_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-57 important is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_const_fn miss frac-0">
+<div class="eff">is_const_fn</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-2 is_copy_raw miss frac-001">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-159 important relevant_trait_impls_for miss frac-001">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-1 time-begin frac-001">
+<div class="eff">privacy checking</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-1 extent-39 important privacy_access_levels miss frac-001">
+<div class="eff">privacy_access_levels</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 describe_def miss frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 describe_def miss frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 describe_def miss frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 associated_item hit frac-0">
+<div class="eff">associated_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 associated_item hit frac-0">
+<div class="eff">associated_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 describe_def hit frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 describe_def miss frac-0">
+<div class="eff">describe_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-5 time-begin frac-0">
+<div class="eff">intrinsic checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-4 time-begin frac-0">
+<div class="eff">effect checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-3 time-begin frac-0">
+<div class="eff">match checking</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-1 time-begin frac-0">
+<div class="eff">liveness checking</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-2 important time-begin frac-01">
+<div class="eff">borrow checking</div>
+<div class="dur">0.014</div>
+<div class="frc">1.2%</div>
+<div class="trace depth-1 extent-75 important borrowck miss frac-001">
+<div class="eff">borrowck</div>
+<div class="dur">0.006</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-8 important mir_validated miss frac-001">
+<div class="eff">mir_validated</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-46 important mir_const miss frac-001">
+<div class="eff">mir_const</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 needs_drop_raw hit frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-3 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 needs_drop_raw hit frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 needs_drop_raw hit frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-3 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 variances_of hit frac-0">
+<div class="eff">variances_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 is_const_fn miss frac-0">
+<div class="eff">is_const_fn</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_const_fn hit frac-0">
+<div class="eff">is_const_fn</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_const_fn hit frac-0">
+<div class="eff">is_const_fn</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-13 important borrowck miss frac-001">
+<div class="eff">borrowck</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-27 important mir_validated miss frac-001">
+<div class="eff">mir_validated</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-8 important mir_const miss frac-0">
+<div class="eff">mir_const</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 region_maps hit frac-0">
+<div class="eff">region_maps</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-67 important relevant_trait_impls_for miss frac-001">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-66 important trait_impls_of miss frac-001">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-001">
+<div class="eff">adt_def</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-001">
+<div class="eff">def_span</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-6 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-7 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-7 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-8 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-8 important is_object_safe miss frac-001">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 super_predicates_of miss frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 associated_item_def_ids miss frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 super_predicates_of hit frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 associated_item_def_ids hit frac-0">
+<div class="eff">associated_item_def_ids</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-67 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-1 time-begin frac-0">
+<div class="eff">reachability checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-1 reachable_set miss frac-0">
+<div class="eff">reachable_set</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 privacy_access_levels hit frac-0">
+<div class="eff">privacy_access_levels</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-0 extent-3 time-begin frac-0">
+<div class="eff">death checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 privacy_access_levels hit frac-0">
+<div class="eff">privacy_access_levels</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-1 time-begin frac-0">
+<div class="eff">unused lib feature checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 privacy_access_levels hit frac-0">
+<div class="eff">privacy_access_levels</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-11 important time-begin frac-0">
+<div class="eff">lint checking</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-0 privacy_access_levels hit frac-0">
+<div class="eff">privacy_access_levels</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-2 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-2 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 typeck_tables_of hit frac-0">
+<div class="eff">typeck_tables_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-22 important time-begin frac-0">
+<div class="eff">resolving dependency formats</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 is_panic_runtime miss frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-10589 important time-begin frac-50">
+<div class="eff">translation</div>
+<div class="dur">0.891</div>
+<div class="frc">78.1%</div>
+<div class="trace depth-1 extent-0 time-begin frac-0">
+<div class="eff">write metadata</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-31 important time-begin frac-0">
+<div class="eff">translation item collection</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-23 important optimized_mir miss frac-0">
+<div class="eff">optimized_mir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 borrowck hit frac-0">
+<div class="eff">borrowck</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 mir_validated hit frac-0">
+<div class="eff">mir_validated</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 param_env hit frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_copy_raw miss frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_copy_raw hit frac-0">
+<div class="eff">is_copy_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_destructor hit frac-0">
+<div class="eff">adt_destructor</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_const_fn hit frac-0">
+<div class="eff">is_const_fn</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 trait_of_item miss frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 is_exported_symbol miss frac-0">
+<div class="eff">is_exported_symbol</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_mir_available miss frac-0">
+<div class="eff">is_mir_available</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 trait_of_item miss frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 is_exported_symbol miss frac-0">
+<div class="eff">is_exported_symbol</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_exported_symbol hit frac-0">
+<div class="eff">is_exported_symbol</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_foreign_item hit frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_mir_available hit frac-0">
+<div class="eff">is_mir_available</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-8 important optimized_mir miss frac-0">
+<div class="eff">optimized_mir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 trait_of_item miss frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 needs_drop_raw miss frac-0">
+<div class="eff">needs_drop_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-3 optimized_mir miss frac-0">
+<div class="eff">optimized_mir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 borrowck hit frac-0">
+<div class="eff">borrowck</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 mir_validated hit frac-0">
+<div class="eff">mir_validated</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-4 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_foreign_item hit frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-10 important time-begin frac-0">
+<div class="eff">codegen unit partitioning</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-1 trait_of_item miss frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-17 important layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-10 important layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-21 important is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-43 important is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_polarity hit frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-13 important layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-4 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-4 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-21 important layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 adt_sized_constraint hit frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-4 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-28 important layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 extern_crate miss frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-3 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-5 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-14 important layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-11 important is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-3 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-121 important is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 relevant_trait_impls_for hit frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 predicates_of hit frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-6 important relevant_trait_impls_for miss frac-0">
+<div class="eff">relevant_trait_impls_for</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_impls_of hit frac-0">
+<div class="eff">trait_impls_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 is_object_safe hit frac-0">
+<div class="eff">is_object_safe</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 impl_polarity miss frac-0">
+<div class="eff">impl_polarity</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-35 important layout_raw miss frac-001">
+<div class="eff">layout_raw</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-3 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-21 important layout_raw miss frac-001">
+<div class="eff">layout_raw</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-4 param_env miss frac-0">
+<div class="eff">param_env</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 super_predicates_of hit frac-0">
+<div class="eff">super_predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-2 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-3 layout_raw miss frac-001">
+<div class="eff">layout_raw</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 optimized_mir hit frac-0">
+<div class="eff">optimized_mir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_freeze_raw hit frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_freeze_raw hit frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-4 adt_sized_constraint miss frac-0">
+<div class="eff">adt_sized_constraint</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 predicates_of miss frac-0">
+<div class="eff">predicates_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 optimized_mir hit frac-0">
+<div class="eff">optimized_mir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-3 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 trait_of_item hit frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_freeze_raw hit frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_freeze_raw hit frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 trait_of_item hit frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 extern_crate hit frac-0">
+<div class="eff">extern_crate</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_foreign_item hit frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 trait_of_item miss frac-0">
+<div class="eff">trait_of_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 optimized_mir hit frac-0">
+<div class="eff">optimized_mir</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-1 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_freeze_raw miss frac-0">
+<div class="eff">is_freeze_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 layout_raw miss frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw miss frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 fn_sig hit frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 layout_raw hit frac-0">
+<div class="eff">layout_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_sized_raw hit frac-0">
+<div class="eff">is_sized_raw</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_foreign_item hit frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-01">
+<div class="eff">symbol_name</div>
+<div class="dur">0.017</div>
+<div class="frc">1.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-001">
+<div class="eff">fn_sig</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-02">
+<div class="eff">symbol_name</div>
+<div class="dur">0.025</div>
+<div class="frc">2.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-001">
+<div class="eff">fn_sig</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-01">
+<div class="eff">symbol_name</div>
+<div class="dur">0.012</div>
+<div class="frc">1.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 important item_attrs miss frac-01">
+<div class="eff">item_attrs</div>
+<div class="dur">0.012</div>
+<div class="frc">1.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.010</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.010</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-6 important type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-5 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-4 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-4 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-4 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 important symbol_name miss frac-01">
+<div class="eff">symbol_name</div>
+<div class="dur">0.020</div>
+<div class="frc">1.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-4 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-001">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-001">
+<div class="eff">fn_sig</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-001">
+<div class="eff">adt_def</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-001">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-11 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-15 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-4 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 trait_def miss frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-4 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-5 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-001">
+<div class="eff">adt_def</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-01">
+<div class="eff">symbol_name</div>
+<div class="dur">0.012</div>
+<div class="frc">1.0%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 important def_symbol_name miss frac-01">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.012</div>
+<div class="frc">1.0%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.010</div>
+<div class="frc">0.9%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-001">
+<div class="eff">def_span</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.011</div>
+<div class="frc">0.9%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.011</div>
+<div class="frc">0.9%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-001">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-001">
+<div class="eff">def_span</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-15 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-001">
+<div class="eff">adt_def</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-10 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-001">
+<div class="eff">fn_sig</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-001">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.010</div>
+<div class="frc">0.9%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.010</div>
+<div class="frc">0.9%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-001">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-15 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-001">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-001">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.003</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.009</div>
+<div class="frc">0.8%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-11 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-01">
+<div class="eff">symbol_name</div>
+<div class="dur">0.021</div>
+<div class="frc">1.8%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 important item_attrs miss frac-01">
+<div class="eff">item_attrs</div>
+<div class="dur">0.021</div>
+<div class="frc">1.8%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-001">
+<div class="eff">fn_sig</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-001">
+<div class="eff">def_span</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.003</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-001">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.004</div>
+<div class="frc">0.3%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-8 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-001">
+<div class="eff">def_span</div>
+<div class="dur">0.005</div>
+<div class="frc">0.5%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-001">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.007</div>
+<div class="frc">0.6%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-8 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-001">
+<div class="eff">item_attrs</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-7 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-10 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-9 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-4 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 trait_def hit frac-0">
+<div class="eff">trait_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-3 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-001">
+<div class="eff">def_span</div>
+<div class="dur">0.008</div>
+<div class="frc">0.7%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.005</div>
+<div class="frc">0.4%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-02">
+<div class="eff">symbol_name</div>
+<div class="dur">0.024</div>
+<div class="frc">2.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 important def_symbol_name miss frac-02">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.024</div>
+<div class="frc">2.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-3 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-11 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-0 is_panic_runtime hit frac-0">
+<div class="eff">is_panic_runtime</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-5 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-6 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.001</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.006</div>
+<div class="frc">0.5%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-001">
+<div class="eff">symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-001">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-001">
+<div class="eff">type_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.2%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-2 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-2 adt_def miss frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-5 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-001">
+<div class="eff">generics_of</div>
+<div class="dur">0.002</div>
+<div class="frc">0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-5 symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-5 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-2 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-4 extent-0 adt_def hit frac-0">
+<div class="eff">adt_def</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-6 important def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 is_default_impl hit frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 type_of hit frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-0 impl_trait_ref hit frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-1 generics_of miss frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span miss frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-6 important symbol_name miss frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-1 item_attrs miss frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 is_foreign_item miss frac-0">
+<div class="eff">is_foreign_item</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-1 fn_sig miss frac-0">
+<div class="eff">fn_sig</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-2 extent-4 def_symbol_name miss frac-0">
+<div class="eff">def_symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-3 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-3 extent-1 is_default_impl miss frac-0">
+<div class="eff">is_default_impl</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 type_of miss frac-0">
+<div class="eff">type_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-3 extent-1 impl_trait_ref miss frac-0">
+<div class="eff">impl_trait_ref</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-4 extent-0 def_span hit frac-0">
+<div class="eff">def_span</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-1 extent-5 time-begin frac-0">
+<div class="eff">internalize symbols</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+<div class="trace depth-2 extent-0 generics_of hit frac-0">
+<div class="eff">generics_of</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 symbol_name hit frac-0">
+<div class="eff">symbol_name</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-2 extent-0 item_attrs hit frac-0">
+<div class="eff">item_attrs</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-1 extent-0 time-begin frac-0">
+<div class="eff">write allocator module</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+</div>
+<div class="trace depth-0 extent-0 time-begin frac-0">
+<div class="eff">assert dep graph</div>
+<div class="dur">0.000</div>
+<div class="frc">< 0.1%</div>
+</div>
+<div class="trace depth-0 extent-0 important time-begin frac-05">
+<div class="eff">serialize dep graph</div>
+<div class="dur">0.079</div>
+<div class="frc">6.9%</div>
+</div>
+</body>
+</html>
diff --git a/src/doc/rustc-dev-guide/src/queries/example-0.png b/src/doc/rustc-dev-guide/src/queries/example-0.png
new file mode 100644
index 000000000..14b46c44f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/queries/example-0.png
Binary files differ
diff --git a/src/doc/rustc-dev-guide/src/queries/incremental-compilation-in-detail.md b/src/doc/rustc-dev-guide/src/queries/incremental-compilation-in-detail.md
new file mode 100644
index 000000000..dc196e490
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/queries/incremental-compilation-in-detail.md
@@ -0,0 +1,537 @@
+# Incremental Compilation In Detail
+
+<!-- toc -->
+
+The incremental compilation scheme is, in essence, a surprisingly
+simple extension to the overall query system. It relies on the fact that:
+
+ 1. queries are pure functions -- given the same inputs, a query will always
+ yield the same result, and
+ 2. the query model structures compilation in an acyclic graph that makes
+ dependencies between individual computations explicit.
+
+This chapter will explain how we can use these properties for making things
+incremental and then goes on to discuss version implementation issues.
+
+## A Basic Algorithm For Incremental Query Evaluation
+
+As explained in the [query evaluation model primer][query-model], query
+invocations form a directed-acyclic graph. Here's the example from the
+previous chapter again:
+
+```ignore
+ list_of_all_hir_items <----------------------------- type_check_crate()
+ |
+ |
+ Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+
+ | |
+ +-----------------+ |
+ | |
+ v |
+ Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+
+```
+
+Since every access from one query to another has to go through the query
+context, we can record these accesses and thus actually build this dependency
+graph in memory. With dependency tracking enabled, when compilation is done,
+we know which queries were invoked (the nodes of the graph) and for each
+invocation, which other queries or input has gone into computing the query's
+result (the edges of the graph).
+
+Now suppose we change the source code of our program so that
+HIR of `bar` looks different than before. Our goal is to only recompute
+those queries that are actually affected by the change while re-using
+the cached results of all the other queries. Given the dependency graph we can
+do exactly that. For a given query invocation, the graph tells us exactly
+what data has gone into computing its results, we just have to follow the
+edges until we reach something that has changed. If we don't encounter
+anything that has changed, we know that the query still would evaluate to
+the same result we already have in our cache.
+
+Taking the `type_of(foo)` invocation from above as an example, we can check
+whether the cached result is still valid by following the edges to its
+inputs. The only edge leads to `Hir(foo)`, an input that has not been affected
+by the change. So we know that the cached result for `type_of(foo)` is still
+valid.
+
+The story is a bit different for `type_check_item(foo)`: We again walk the
+edges and already know that `type_of(foo)` is fine. Then we get to
+`type_of(bar)` which we have not checked yet, so we walk the edges of
+`type_of(bar)` and encounter `Hir(bar)` which *has* changed. Consequently
+the result of `type_of(bar)` might yield a different result than what we
+have in the cache and, transitively, the result of `type_check_item(foo)`
+might have changed too. We thus re-run `type_check_item(foo)`, which in
+turn will re-run `type_of(bar)`, which will yield an up-to-date result
+because it reads the up-to-date version of `Hir(bar)`.
+
+
+## The Problem With The Basic Algorithm: False Positives
+
+If you read the previous paragraph carefully you'll notice that it says that
+`type_of(bar)` *might* have changed because one of its inputs has changed.
+There's also the possibility that it might still yield exactly the same
+result *even though* its input has changed. Consider an example with a
+simple query that just computes the sign of an integer:
+
+```ignore
+ IntValue(x) <---- sign_of(x) <--- some_other_query(x)
+```
+
+Let's say that `IntValue(x)` starts out as `1000` and then is set to `2000`.
+Even though `IntValue(x)` is different in the two cases, `sign_of(x)` yields
+the result `+` in both cases.
+
+If we follow the basic algorithm, however, `some_other_query(x)` would have to
+(unnecessarily) be re-evaluated because it transitively depends on a changed
+input. Change detection yields a "false positive" in this case because it has
+to conservatively assume that `some_other_query(x)` might be affected by that
+changed input.
+
+Unfortunately it turns out that the actual queries in the compiler are full
+of examples like this and small changes to the input often potentially affect
+very large parts of the output binaries. As a consequence, we had to make the
+change detection system smarter and more accurate.
+
+## Improving Accuracy: The red-green Algorithm
+
+The "false positives" problem can be solved by interleaving change detection
+and query re-evaluation. Instead of walking the graph all the way to the
+inputs when trying to find out if some cached result is still valid, we can
+check if a result has *actually* changed after we were forced to re-evaluate
+it.
+
+We call this algorithm the red-green algorithm because nodes
+in the dependency graph are assigned the color green if we were able to prove
+that its cached result is still valid and the color red if the result has
+turned out to be different after re-evaluating it.
+
+The meat of red-green change tracking is implemented in the try-mark-green
+algorithm, that, you've guessed it, tries to mark a given node as green:
+
+```rust,ignore
+fn try_mark_green(tcx, current_node) -> bool {
+
+ // Fetch the inputs to `current_node`, i.e. get the nodes that the direct
+ // edges from `node` lead to.
+ let dependencies = tcx.dep_graph.get_dependencies_of(current_node);
+
+ // Now check all the inputs for changes
+ for dependency in dependencies {
+
+ match tcx.dep_graph.get_node_color(dependency) {
+ Green => {
+ // This input has already been checked before and it has not
+ // changed; so we can go on to check the next one
+ }
+ Red => {
+ // We found an input that has changed. We cannot mark
+ // `current_node` as green without re-running the
+ // corresponding query.
+ return false
+ }
+ Unknown => {
+ // This is the first time we look at this node. Let's try
+ // to mark it green by calling try_mark_green() recursively.
+ if try_mark_green(tcx, dependency) {
+ // We successfully marked the input as green, on to the
+ // next.
+ } else {
+ // We could *not* mark the input as green. This means we
+ // don't know if its value has changed. In order to find
+ // out, we re-run the corresponding query now!
+ tcx.run_query_for(dependency);
+
+ // Fetch and check the node color again. Running the query
+ // has forced it to either red (if it yielded a different
+ // result than we have in the cache) or green (if it
+ // yielded the same result).
+ match tcx.dep_graph.get_node_color(dependency) {
+ Red => {
+ // The input turned out to be red, so we cannot
+ // mark `current_node` as green.
+ return false
+ }
+ Green => {
+ // Re-running the query paid off! The result is the
+ // same as before, so this particular input does
+ // not invalidate `current_node`.
+ }
+ Unknown => {
+ // There is no way a node has no color after
+ // re-running the query.
+ panic!("unreachable")
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // If we have gotten through the entire loop, it means that all inputs
+ // have turned out to be green. If all inputs are unchanged, it means
+ // that the query result corresponding to `current_node` cannot have
+ // changed either.
+ tcx.dep_graph.mark_green(current_node);
+
+ true
+}
+
+// Note: The actual implementation can be found in
+// compiler/rustc_middle/src/dep_graph/graph.rs
+```
+
+By using red-green marking we can avoid the devastating cumulative effect of
+having false positives during change detection. Whenever a query is executed
+in incremental mode, we first check if its already green. If not, we run
+`try_mark_green()` on it. If it still isn't green after that, then we actually
+invoke the query provider to re-compute the result.
+
+
+
+## The Real World: How Persistence Makes Everything Complicated
+
+The sections above described the underlying algorithm for incremental
+compilation but because the compiler process exits after being finished and
+takes the query context with its result cache with it into oblivion, we have to
+persist data to disk, so the next compilation session can make use of it.
+This comes with a whole new set of implementation challenges:
+
+- The query result cache is stored to disk, so they are not readily available
+ for change comparison.
+- A subsequent compilation session will start off with new version of the code
+ that has arbitrary changes applied to it. All kinds of IDs and indices that
+ are generated from a global, sequential counter (e.g. `NodeId`, `DefId`, etc)
+ might have shifted, making the persisted results on disk not immediately
+ usable anymore because the same numeric IDs and indices might refer to
+ completely new things in the new compilation session.
+- Persisting things to disk comes at a cost, so not every tiny piece of
+ information should be actually cached in between compilation sessions.
+ Fixed-sized, plain-old-data is preferred to complex things that need to run
+ through an expensive (de-)serialization step.
+
+The following sections describe how the compiler solves these issues.
+
+### A Question Of Stability: Bridging The Gap Between Compilation Sessions
+
+As noted before, various IDs (like `DefId`) are generated by the compiler in a
+way that depends on the contents of the source code being compiled. ID assignment
+is usually deterministic, that is, if the exact same code is compiled twice,
+the same things will end up with the same IDs. However, if something
+changes, e.g. a function is added in the middle of a file, there is no
+guarantee that anything will have the same ID as it had before.
+
+As a consequence we cannot represent the data in our on-disk cache the same
+way it is represented in memory. For example, if we just stored a piece
+of type information like `TyKind::FnDef(DefId, &'tcx Substs<'tcx>)` (as we do
+in memory) and then the contained `DefId` points to a different function in
+a new compilation session we'd be in trouble.
+
+The solution to this problem is to find "stable" forms for IDs which remain
+valid in between compilation sessions. For the most important case, `DefId`s,
+these are the so-called `DefPath`s. Each `DefId` has a
+corresponding `DefPath` but in place of a numeric ID, a `DefPath` is based on
+the path to the identified item, e.g. `std::collections::HashMap`. The
+advantage of an ID like this is that it is not affected by unrelated changes.
+For example, one can add a new function to `std::collections` but
+`std::collections::HashMap` would still be `std::collections::HashMap`. A
+`DefPath` is "stable" across changes made to the source code while a `DefId`
+isn't.
+
+There is also the `DefPathHash` which is just a 128-bit hash value of the
+`DefPath`. The two contain the same information and we mostly use the
+`DefPathHash` because it simpler to handle, being `Copy` and self-contained.
+
+This principle of stable identifiers is used to make the data in the on-disk
+cache resilient to source code changes. Instead of storing a `DefId`, we store
+the `DefPathHash` and when we deserialize something from the cache, we map the
+`DefPathHash` to the corresponding `DefId` in the *current* compilation session
+(which is just a simple hash table lookup).
+
+The `HirId`, used for identifying HIR components that don't have their own
+`DefId`, is another such stable ID. It is (conceptually) a pair of a `DefPath`
+and a `LocalId`, where the `LocalId` identifies something (e.g. a `hir::Expr`)
+locally within its "owner" (e.g. a `hir::Item`). If the owner is moved around,
+the `LocalId`s within it are still the same.
+
+
+
+### Checking Query Results For Changes: HashStable And Fingerprints
+
+In order to do red-green-marking we often need to check if the result of a
+query has changed compared to the result it had during the previous
+compilation session. There are two performance problems with this though:
+
+- We'd like to avoid having to load the previous result from disk just for
+ doing the comparison. We already computed the new result and will use that.
+ Also loading a result from disk will "pollute" the interners with data that
+ is unlikely to ever be used.
+- We don't want to store each and every result in the on-disk cache. For
+ example, it would be wasted effort to persist things to disk that are
+ already available in upstream crates.
+
+The compiler avoids these problems by using so-called `Fingerprint`s. Each time
+a new query result is computed, the query engine will compute a 128 bit hash
+value of the result. We call this hash value "the `Fingerprint` of the query
+result". The hashing is (and has to be) done "in a stable way". This means
+that whenever something is hashed that might change in between compilation
+sessions (e.g. a `DefId`), we instead hash its stable equivalent
+(e.g. the corresponding `DefPath`). That's what the whole `HashStable`
+infrastructure is for. This way `Fingerprint`s computed in two
+different compilation sessions are still comparable.
+
+The next step is to store these fingerprints along with the dependency graph.
+This is cheap since fingerprints are just bytes to be copied. It's also cheap to
+load the entire set of fingerprints together with the dependency graph.
+
+Now, when red-green-marking reaches the point where it needs to check if a
+result has changed, it can just compare the (already loaded) previous
+fingerprint to the fingerprint of the new result.
+
+This approach works rather well but it's not without flaws:
+
+- There is a small possibility of hash collisions. That is, two different
+ results could have the same fingerprint and the system would erroneously
+ assume that the result hasn't changed, leading to a missed update.
+
+ We mitigate this risk by using a high-quality hash function and a 128 bit
+ wide hash value. Due to these measures the practical risk of a hash
+ collision is negligible.
+
+- Computing fingerprints is quite costly. It is the main reason why incremental
+ compilation can be slower than non-incremental compilation. We are forced to
+ use a good and thus expensive hash function, and we have to map things to
+ their stable equivalents while doing the hashing.
+
+
+### A Tale Of Two DepGraphs: The Old And The New
+
+The initial description of dependency tracking glosses over a few details
+that quickly become a head scratcher when actually trying to implement things.
+In particular it's easy to overlook that we are actually dealing with *two*
+dependency graphs: The one we built during the previous compilation session and
+the one that we are building for the current compilation session.
+
+When a compilation session starts, the compiler loads the previous dependency
+graph into memory as an immutable piece of data. Then, when a query is invoked,
+it will first try to mark the corresponding node in the graph as green. This
+means really that we are trying to mark the node in the *previous* dep-graph
+as green that corresponds to the query key in the *current* session. How do we
+do this mapping between current query key and previous `DepNode`? The answer
+is again `Fingerprint`s: Nodes in the dependency graph are identified by a
+fingerprint of the query key. Since fingerprints are stable across compilation
+sessions, computing one in the current session allows us to find a node
+in the dependency graph from the previous session. If we don't find a node with
+the given fingerprint, it means that the query key refers to something that
+did not yet exist in the previous session.
+
+So, having found the dep-node in the previous dependency graph, we can look
+up its dependencies (i.e. also dep-nodes in the previous graph) and continue with
+the rest of the try-mark-green algorithm. The next interesting thing happens
+when we successfully marked the node as green. At that point we copy the node
+and the edges to its dependencies from the old graph into the new graph. We
+have to do this because the new dep-graph cannot acquire the
+node and edges via the regular dependency tracking. The tracking system can
+only record edges while actually running a query -- but running the query,
+although we have the result already cached, is exactly what we want to avoid.
+
+Once the compilation session has finished, all the unchanged parts have been
+copied over from the old into the new dependency graph, while the changed parts
+have been added to the new graph by the tracking system. At this point, the
+new graph is serialized out to disk, alongside the query result cache, and can
+act as the previous dep-graph in a subsequent compilation session.
+
+
+### Didn't You Forget Something?: Cache Promotion
+
+The system described so far has a somewhat subtle property: If all inputs of a
+dep-node are green then the dep-node itself can be marked as green without
+computing or loading the corresponding query result. Applying this property
+transitively often leads to the situation that some intermediate results are
+never actually loaded from disk, as in the following example:
+
+```ignore
+ input(A) <-- intermediate_query(B) <-- leaf_query(C)
+```
+
+The compiler might need the value of `leaf_query(C)` in order to generate some
+output artifact. If it can mark `leaf_query(C)` as green, it will load the
+result from the on-disk cache. The result of `intermediate_query(B)` is never
+loaded though. As a consequence, when the compiler persists the *new* result
+cache by writing all in-memory query results to disk, `intermediate_query(B)`
+will not be in memory and thus will be missing from the new result cache.
+
+If there subsequently is another compilation session that actually needs the
+result of `intermediate_query(B)` it will have to be re-computed even though we
+had a perfectly valid result for it in the cache just before.
+
+In order to prevent this from happening, the compiler does something called
+"cache promotion": Before emitting the new result cache it will walk all green
+dep-nodes and make sure that their query result is loaded into memory. That way
+the result cache doesn't unnecessarily shrink again.
+
+
+
+# Incremental Compilation and the Compiler Backend
+
+The compiler backend, the part involving LLVM, is using the query system but
+it is not implemented in terms of queries itself. As a consequence
+it does not automatically partake in dependency tracking. However, the manual
+integration with the tracking system is pretty straight-forward. The compiler
+simply tracks what queries get invoked when generating the initial LLVM version
+of each codegen unit, which results in a dep-node for each of them. In
+subsequent compilation sessions it then tries to mark the dep-node for a CGU as
+green. If it succeeds it knows that the corresponding object and bitcode files
+on disk are still valid. If it doesn't succeed, the entire codegen unit has to
+be recompiled.
+
+This is the same approach that is used for regular queries. The main differences
+are:
+
+ - that we cannot easily compute a fingerprint for LLVM modules (because
+ they are opaque C++ objects),
+
+ - that the logic for dealing with cached values is rather different from
+ regular queries because here we have bitcode and object files instead of
+ serialized Rust values in the common result cache file, and
+
+ - the operations around LLVM are so expensive in terms of computation time and
+ memory consumption that we need to have tight control over what is
+ executed when and what stays in memory for how long.
+
+The query system could probably be extended with general purpose mechanisms to
+deal with all of the above but so far that seemed like more trouble than it
+would save.
+
+
+
+## Query Modifiers
+
+The query system allows for applying [modifiers][mod] to queries. These
+modifiers affect certain aspects of how the system treats the query with
+respect to incremental compilation:
+
+ - `eval_always` - A query with the `eval_always` attribute is re-executed
+ unconditionally during incremental compilation. I.e. the system will not
+ even try to mark the query's dep-node as green. This attribute has two use
+ cases:
+
+ - `eval_always` queries can read inputs (from files, global state, etc).
+ They can also produce side effects like writing to files and changing global state.
+
+ - Some queries are very likely to be re-evaluated because their result
+ depends on the entire source code. In this case `eval_always` can be used
+ as an optimization because the system can skip recording dependencies in
+ the first place.
+
+ - `no_hash` - Applying `no_hash` to a query tells the system to not compute
+ the fingerprint of the query's result. This has two consequences:
+
+ - Not computing the fingerprint can save quite a bit of time because
+ fingerprinting is expensive, especially for large, complex values.
+
+ - Without the fingerprint, the system has to unconditionally assume that
+ the result of the query has changed. As a consequence anything depending
+ on a `no_hash` query will always be re-executed.
+
+ Using `no_hash` for a query can make sense in two circumstances:
+
+ - If the result of the query is very likely to change whenever one of its
+ inputs changes, e.g. a function like `|a, b, c| -> (a * b * c)`. In such
+ a case recomputing the query will always yield a red node if one of the
+ inputs is red so we can spare us the trouble and default to red immediately.
+ A counter example would be a function like `|a| -> (a == 42)` where the
+ result does not change for most changes of `a`.
+
+ - If the result of a query is a big, monolithic collection (e.g. `index_hir`)
+ and there are "projection queries" reading from that collection
+ (e.g. `hir_owner`). In such a case the big collection will likely fulfill the
+ condition above (any changed input means recomputing the whole collection)
+ and the results of the projection queries will be hashed anyway. If we also
+ hashed the collection query it would mean that we effectively hash the same
+ data twice: once when hashing the collection and another time when hashing all
+ the projection query results. `no_hash` allows us to avoid that redundancy
+ and the projection queries act as a "firewall", shielding their dependents
+ from the unconditionally red `no_hash` node.
+
+ - `cache_on_disk_if` - This attribute is what determines which query results
+ are persisted in the incremental compilation query result cache. The
+ attribute takes an expression that allows per query invocation
+ decisions. For example, it makes no sense to store values from upstream
+ crates in the cache because they are already available in the upstream
+ crate's metadata.
+
+ - `anon` - This attribute makes the system use "anonymous" dep-nodes for the
+ given query. An anonymous dep-node is not identified by the corresponding
+ query key, instead its ID is computed from the IDs of its dependencies. This
+ allows the red-green system to do its change detection even if there is no
+ query key available for a given dep-node -- something which is needed for
+ handling trait selection because it is not based on queries.
+
+[mod]: ../query.html#adding-a-new-kind-of-query
+
+
+## The Projection Query Pattern
+
+It's interesting to note that `eval_always` and `no_hash` can be used together
+in the so-called "projection query" pattern. It is often the case that there is
+one query that depends on the entirety of the compiler's input (e.g. the indexed HIR)
+and another query that projects individual values out of this monolithic value
+(e.g. a HIR item with a certain `DefId`). These projection queries allow for
+building change propagation "firewalls" because even if the result of the
+monolithic query changes (which it is very likely to do) the small projections
+can still mostly be marked as green.
+
+
+```ignore
+ +------------+
+ | | +---------------+ +--------+
+ | | <---------| projection(x) | <---------| foo(a) |
+ | | +---------------+ +--------+
+ | |
+ | monolithic | +---------------+ +--------+
+ | query | <---------| projection(y) | <---------| bar(b) |
+ | | +---------------+ +--------+
+ | |
+ | | +---------------+ +--------+
+ | | <---------| projection(z) | <---------| baz(c) |
+ | | +---------------+ +--------+
+ +------------+
+```
+
+Let's assume that the result `monolithic_query` changes so that also the result
+of `projection(x)` has changed, i.e. both their dep-nodes are being marked as
+red. As a consequence `foo(a)` needs to be re-executed; but `bar(b)` and
+`baz(c)` can be marked as green. However, if `foo`, `bar`, and `baz` would have
+directly depended on `monolithic_query` then all of them would have had to be
+re-evaluated.
+
+This pattern works even without `eval_always` and `no_hash` but the two
+modifiers can be used to avoid unnecessary overhead. If the monolithic query
+is likely to change at any minor modification of the compiler's input it makes
+sense to mark it as `eval_always`, thus getting rid of its dependency tracking
+cost. And it always makes sense to mark the monolithic query as `no_hash`
+because we have the projections to take care of keeping things green as much
+as possible.
+
+
+# Shortcomings of the Current System
+
+There are many things that still can be improved.
+
+## Incrementality of on-disk data structures
+
+The current system is not able to update on-disk caches and the dependency graph
+in-place. Instead it has to rewrite each file entirely in each compilation
+session. The overhead of doing so is a few percent of total compilation time.
+
+## Unnecessary data dependencies
+
+Data structures used as query results could be factored in a way that removes
+edges from the dependency graph. Especially "span" information is very volatile,
+so including it in query result will increase the chance that that result won't
+be reusable. See <https://github.com/rust-lang/rust/issues/47389> for more
+information.
+
+
+
+[query-model]: ./query-evaluation-model-in-detail.html
diff --git a/src/doc/rustc-dev-guide/src/queries/incremental-compilation.md b/src/doc/rustc-dev-guide/src/queries/incremental-compilation.md
new file mode 100644
index 000000000..abef144d7
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/queries/incremental-compilation.md
@@ -0,0 +1,151 @@
+# Incremental compilation
+
+<!-- toc -->
+
+The incremental compilation scheme is, in essence, a surprisingly
+simple extension to the overall query system. We'll start by describing
+a slightly simplified variant of the real thing – the "basic algorithm" –
+and then describe some possible improvements.
+
+## The basic algorithm
+
+The basic algorithm is
+called the **red-green** algorithm[^salsa]. The high-level idea is
+that, after each run of the compiler, we will save the results of all
+the queries that we do, as well as the **query DAG**. The
+**query DAG** is a [DAG] that indexes which queries executed which
+other queries. So, for example, there would be an [edge] from a query Q1
+to another query Q2 if computing Q1 required computing Q2 (note that
+because queries cannot depend on themselves, this results in a DAG and
+not a general graph).
+
+[DAG]: https://en.wikipedia.org/wiki/Directed_acyclic_graph
+
+On the next run of the compiler, then, we can sometimes reuse these
+query results to avoid re-executing a query. We do this by assigning
+every query a **color**:
+
+- If a query is colored **red**, that means that its result during
+ this compilation has **changed** from the previous compilation.
+- If a query is colored **green**, that means that its result is
+ the **same** as the previous compilation.
+
+There are two key insights here:
+
+- First, if all the inputs to query Q are colored green, then the
+ query Q **must** result in the same value as last time and hence
+ need not be re-executed (or else the compiler is not deterministic).
+- Second, even if some inputs to a query changes, it may be that it
+ **still** produces the same result as the previous compilation. In
+ particular, the query may only use part of its input.
+ - Therefore, after executing a query, we always check whether it
+ produced the same result as the previous time. **If it did,** we
+ can still mark the query as green, and hence avoid re-executing
+ dependent queries.
+
+### The try-mark-green algorithm
+
+At the core of incremental compilation is an algorithm called
+"try-mark-green". It has the job of determining the color of a given
+query Q (which must not have yet been executed). In cases where Q has
+red inputs, determining Q's color may involve re-executing Q so that
+we can compare its output, but if all of Q's inputs are green, then we
+can conclude that Q must be green without re-executing it or inspecting
+its value at all. In the compiler, this allows us to avoid
+deserializing the result from disk when we don't need it, and in fact
+enables us to sometimes skip *serializing* the result as well
+(see the refinements section below).
+
+Try-mark-green works as follows:
+
+- First check if the query Q was executed during the previous compilation.
+ - If not, we can just re-execute the query as normal, and assign it the
+ color of red.
+- If yes, then load the 'dependent queries' of Q.
+- If there is a saved result, then we load the `reads(Q)` vector from the
+ query DAG. The "reads" is the set of queries that Q executed during
+ its execution.
+ - For each query R in `reads(Q)`, we recursively demand the color
+ of R using try-mark-green.
+ - Note: it is important that we visit each node in `reads(Q)` in same order
+ as they occurred in the original compilation. See [the section on the
+ query DAG below](#dag).
+ - If **any** of the nodes in `reads(Q)` wind up colored **red**, then Q is
+ dirty.
+ - We re-execute Q and compare the hash of its result to the hash of the
+ result from the previous compilation.
+ - If the hash has not changed, we can mark Q as **green** and return.
+ - Otherwise, **all** of the nodes in `reads(Q)` must be **green**. In that
+ case, we can color Q as **green** and return.
+
+<a name="dag"></a>
+
+### The query DAG
+
+The query DAG code is stored in
+[`compiler/rustc_middle/src/dep_graph`][dep_graph]. Construction of the DAG is done
+by instrumenting the query execution.
+
+One key point is that the query DAG also tracks ordering; that is, for
+each query Q, we not only track the queries that Q reads, we track the
+**order** in which they were read. This allows try-mark-green to walk
+those queries back in the same order. This is important because once a
+subquery comes back as red, we can no longer be sure that Q will continue
+along the same path as before. That is, imagine a query like this:
+
+```rust,ignore
+fn main_query(tcx) {
+ if tcx.subquery1() {
+ tcx.subquery2()
+ } else {
+ tcx.subquery3()
+ }
+}
+```
+
+Now imagine that in the first compilation, `main_query` starts by
+executing `subquery1`, and this returns true. In that case, the next
+query `main_query` executes will be `subquery2`, and `subquery3` will
+not be executed at all.
+
+But now imagine that in the **next** compilation, the input has
+changed such that `subquery1` returns **false**. In this case, `subquery2`
+would never execute. If try-mark-green were to visit `reads(main_query)` out
+of order, however, it might visit `subquery2` before `subquery1`, and hence
+execute it.
+This can lead to ICEs and other problems in the compiler.
+
+[dep_graph]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/dep_graph/index.html
+
+## Improvements to the basic algorithm
+
+In the description of the basic algorithm, we said that at the end of
+compilation we would save the results of all the queries that were
+performed. In practice, this can be quite wasteful – many of those
+results are very cheap to recompute, and serializing and deserializing
+them is not a particular win. In practice, what we would do is to save
+**the hashes** of all the subqueries that we performed. Then, in select cases,
+we **also** save the results.
+
+This is why the incremental algorithm separates computing the
+**color** of a node, which often does not require its value, from
+computing the **result** of a node. Computing the result is done via a simple
+algorithm like so:
+
+- Check if a saved result for Q is available. If so, compute the color of Q.
+ If Q is green, deserialize and return the saved result.
+- Otherwise, execute Q.
+ - We can then compare the hash of the result and color Q as green if
+ it did not change.
+
+## Resources
+The initial design document can be found [here][initial-design], which expands
+on the memoization details, provides more high-level overview and motivation
+for this system.
+
+# Footnotes
+
+[^salsa]: I have long wanted to rename it to the Salsa algorithm, but it never caught on. -@nikomatsakis
+
+[edge]: https://en.wikipedia.org/wiki/Glossary_of_graph_theory_terms#edge
+[initial-design]: https://github.com/nikomatsakis/rustc-on-demand-incremental-design-doc/blob/master/0000-rustc-on-demand-and-incremental.md
diff --git a/src/doc/rustc-dev-guide/src/queries/query-evaluation-model-in-detail.md b/src/doc/rustc-dev-guide/src/queries/query-evaluation-model-in-detail.md
new file mode 100644
index 000000000..b84a5dac4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/queries/query-evaluation-model-in-detail.md
@@ -0,0 +1,213 @@
+# The Query Evaluation Model in Detail
+
+<!-- toc -->
+
+This chapter provides a deeper dive into the abstract model queries are built on.
+It does not go into implementation details but tries to explain
+the underlying logic. The examples here, therefore, have been stripped down and
+simplified and don't directly reflect the compilers internal APIs.
+
+## What is a query?
+
+Abstractly we view the compiler's knowledge about a given crate as a "database"
+and queries are the way of asking the compiler questions about it, i.e.
+we "query" the compiler's "database" for facts.
+
+However, there's something special to this compiler database: It starts out empty
+and is filled on-demand when queries are executed. Consequently, a query must
+know how to compute its result if the database does not contain it yet. For
+doing so, it can access other queries and certain input values that the database
+is pre-filled with on creation.
+
+A query thus consists of the following things:
+
+ - A name that identifies the query
+ - A "key" that specifies what we want to look up
+ - A result type that specifies what kind of result it yields
+ - A "provider" which is a function that specifies how the result is to be
+ computed if it isn't already present in the database.
+
+As an example, the name of the `type_of` query is `type_of`, its query key is a
+`DefId` identifying the item we want to know the type of, the result type is
+`Ty<'tcx>`, and the provider is a function that, given the query key and access
+to the rest of the database, can compute the type of the item identified by the
+key.
+
+So in some sense a query is just a function that maps the query key to the
+corresponding result. However, we have to apply some restrictions in order for
+this to be sound:
+
+ - The key and result must be immutable values.
+ - The provider function must be a pure function in the sense that for the same
+ key it must always yield the same result.
+ - The only parameters a provider function takes are the key and a reference to
+ the "query context" (which provides access to the rest of the "database").
+
+The database is built up lazily by invoking queries. The query providers will
+invoke other queries, for which the result is either already cached or computed
+by calling another query provider. These query provider invocations
+conceptually form a directed acyclic graph (DAG) at the leaves of which are
+input values that are already known when the query context is created.
+
+
+
+## Caching/Memoization
+
+Results of query invocations are "memoized" which means that the query context
+will cache the result in an internal table and, when the query is invoked with
+the same query key again, will return the result from the cache instead of
+running the provider again.
+
+This caching is crucial for making the query engine efficient. Without
+memoization the system would still be sound (that is, it would yield the same
+results) but the same computations would be done over and over again.
+
+Memoization is one of the main reasons why query providers have to be pure
+functions. If calling a provider function could yield different results for
+each invocation (because it accesses some global mutable state) then we could
+not memoize the result.
+
+
+
+## Input data
+
+When the query context is created, it is still empty: No queries have been
+executed, no results are cached. But the context already provides access to
+"input" data, i.e. pieces of immutable data that were computed before the
+context was created and that queries can access to do their computations.
+
+As of <!-- date: 2021-01 --> January 2021, this input data consists mainly of
+the HIR map, upstream crate metadata, and the command-line options the compiler
+was invoked with; but in the future inputs will just consist of command-line
+options and a list of source files -- the HIR map will itself be provided by a
+query which processes these source files.
+
+Without inputs, queries would live in a void without anything to compute their
+result from (remember, query providers only have access to other queries and
+the context but not any other outside state or information).
+
+For a query provider, input data and results of other queries look exactly the
+same: It just tells the context "give me the value of X". Because input data
+is immutable, the provider can rely on it being the same across
+different query invocations, just as is the case for query results.
+
+
+
+## An example execution trace of some queries
+
+How does this DAG of query invocations come into existence? At some point
+the compiler driver will create the, as yet empty, query context. It will then,
+from outside of the query system, invoke the queries it needs to perform its
+task. This looks something like the following:
+
+```rust,ignore
+fn compile_crate() {
+ let cli_options = ...;
+ let hir_map = ...;
+
+ // Create the query context `tcx`
+ let tcx = TyCtxt::new(cli_options, hir_map);
+
+ // Do type checking by invoking the type check query
+ tcx.type_check_crate();
+}
+```
+
+The `type_check_crate` query provider would look something like the following:
+
+```rust,ignore
+fn type_check_crate_provider(tcx, _key: ()) {
+ let list_of_hir_items = tcx.hir_map.list_of_items();
+
+ for item_def_id in list_of_hir_items {
+ tcx.type_check_item(item_def_id);
+ }
+}
+```
+
+We see that the `type_check_crate` query accesses input data
+(`tcx.hir_map.list_of_items()`) and invokes other queries
+(`type_check_item`). The `type_check_item`
+invocations will themselves access input data and/or invoke other queries,
+so that in the end the DAG of query invocations will be built up backwards
+from the node that was initially executed:
+
+```ignore
+ (2) (1)
+ list_of_all_hir_items <----------------------------- type_check_crate()
+ |
+ (5) (4) (3) |
+ Hir(foo) <--- type_of(foo) <--- type_check_item(foo) <-------+
+ | |
+ +-----------------+ |
+ | |
+ (7) v (6) (8) |
+ Hir(bar) <--- type_of(bar) <--- type_check_item(bar) <-------+
+
+// (x) denotes invocation order
+```
+
+We also see that often a query result can be read from the cache:
+`type_of(bar)` was computed for `type_check_item(foo)` so when
+`type_check_item(bar)` needs it, it is already in the cache.
+
+Query results stay cached in the query context as long as the context lives.
+So if the compiler driver invoked another query later on, the above graph
+would still exist and already executed queries would not have to be re-done.
+
+
+
+## Cycles
+
+Earlier we stated that query invocations form a DAG. However, it would be easy
+to form a cyclic graph by, for example, having a query provider like the
+following:
+
+```rust,ignore
+fn cyclic_query_provider(tcx, key) -> u32 {
+ // Invoke the same query with the same key again
+ tcx.cyclic_query(key)
+}
+```
+
+Since query providers are regular functions, this would behave much as expected:
+Evaluation would get stuck in an infinite recursion. A query like this would not
+be very useful either. However, sometimes certain kinds of invalid user input
+can result in queries being called in a cyclic way. The query engine includes
+a check for cyclic invocations and, because cycles are an irrecoverable error,
+will abort execution with a "cycle error" messages that tries to be human
+readable.
+
+At some point the compiler had a notion of "cycle recovery", that is, one could
+"try" to execute a query and if it ended up causing a cycle, proceed in some
+other fashion. However, this was later removed because it is not entirely
+clear what the theoretical consequences of this are, especially regarding
+incremental compilation.
+
+
+## "Steal" Queries
+
+Some queries have their result wrapped in a `Steal<T>` struct. These queries
+behave exactly the same as regular with one exception: Their result is expected
+to be "stolen" out of the cache at some point, meaning some other part of the
+program is taking ownership of it and the result cannot be accessed anymore.
+
+This stealing mechanism exists purely as a performance optimization because some
+result values are too costly to clone (e.g. the MIR of a function). It seems
+like result stealing would violate the condition that query results must be
+immutable (after all we are moving the result value out of the cache) but it is
+OK as long as the mutation is not observable. This is achieved by two things:
+
+- Before a result is stolen, we make sure to eagerly run all queries that
+ might ever need to read that result. This has to be done manually by calling
+ those queries.
+- Whenever a query tries to access a stolen result, we make the compiler ICE so
+ that such a condition cannot go unnoticed.
+
+This is not an ideal setup because of the manual intervention needed, so it
+should be used sparingly and only when it is well known which queries might
+access a given result. In practice, however, stealing has not turned out to be
+much of a maintenance burden.
+
+To summarize: "Steal queries" break some of the rules in a controlled way.
+There are checks in place that make sure that nothing can go silently wrong.
diff --git a/src/doc/rustc-dev-guide/src/query.md b/src/doc/rustc-dev-guide/src/query.md
new file mode 100644
index 000000000..95e570dfc
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/query.md
@@ -0,0 +1,315 @@
+# Queries: demand-driven compilation
+
+<!-- toc -->
+
+As described in [the high-level overview of the compiler][hl], the Rust compiler
+is still (as of <!-- date: 2021-07 --> July 2021) transitioning from a
+traditional "pass-based" setup to a "demand-driven" system. The compiler query
+system is the key to rustc's demand-driven organization.
+The idea is pretty simple. Instead of entirely independent passes
+(parsing, type-checking, etc.), a set of function-like *queries*
+compute information about the input source. For example,
+there is a query called `type_of` that, given the [`DefId`] of
+some item, will compute the type of that item and return it to you.
+
+[`DefId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/def_id/struct.DefId.html
+[hl]: ./compiler-src.md
+
+Query execution is *memoized*. The first time you invoke a
+query, it will go do the computation, but the next time, the result is
+returned from a hashtable. Moreover, query execution fits nicely into
+*incremental computation*; the idea is roughly that, when you invoke a
+query, the result *may* be returned to you by loading stored data
+from disk.[^incr-comp-detail]
+
+Eventually, we want the entire compiler
+control-flow to be query driven. There will effectively be one
+top-level query (`compile`) that will run compilation on a crate; this
+will in turn demand information about that crate, starting from the
+*end*. For example:
+
+- The `compile` query might demand to get a list of codegen-units
+ (i.e. modules that need to be compiled by LLVM).
+- But computing the list of codegen-units would invoke some subquery
+ that returns the list of all modules defined in the Rust source.
+- That query in turn would invoke something asking for the HIR.
+- This keeps going further and further back until we wind up doing the
+ actual parsing.
+
+Although this vision is not fully realized, large sections of the
+compiler (for example, generating [MIR](./mir/index.md)) currently work exactly like this.
+
+[^incr-comp-detail]: The ["Incremental Compilation in Detail](queries/incremental-compilation-in-detail.md) chapter gives a more
+in-depth description of what queries are and how they work.
+If you intend to write a query of your own, this is a good read.
+
+## Invoking queries
+
+Invoking a query is simple. The [`TyCtxt`] ("type context") struct offers a method
+for each defined query. For example, to invoke the `type_of`
+query, you would just do this:
+
+```rust,ignore
+let ty = tcx.type_of(some_def_id);
+```
+
+[`TyCtxt`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html
+
+## How the compiler executes a query
+
+So you may be wondering what happens when you invoke a query
+method. The answer is that, for each query, the compiler maintains a
+cache – if your query has already been executed, then, the answer is
+simple: we clone the return value out of the cache and return it
+(therefore, you should try to ensure that the return types of queries
+are cheaply cloneable; insert an `Rc` if necessary).
+
+### Providers
+
+If, however, the query is *not* in the cache, then the compiler will
+try to find a suitable **provider**. A provider is a function that has
+been defined and linked into the compiler somewhere that contains the
+code to compute the result of the query.
+
+**Providers are defined per-crate.** The compiler maintains,
+internally, a table of providers for every crate, at least
+conceptually. Right now, there are really two sets: the providers for
+queries about the **local crate** (that is, the one being compiled)
+and providers for queries about **external crates** (that is,
+dependencies of the local crate). Note that what determines the crate
+that a query is targeting is not the *kind* of query, but the *key*.
+For example, when you invoke `tcx.type_of(def_id)`, that could be a
+local query or an external query, depending on what crate the `def_id`
+is referring to (see the [`self::keys::Key`][Key] trait for more
+information on how that works).
+
+Providers always have the same signature:
+
+```rust,ignore
+fn provider<'tcx>(
+ tcx: TyCtxt<'tcx>,
+ key: QUERY_KEY,
+) -> QUERY_RESULT {
+ ...
+}
+```
+
+Providers take two arguments: the `tcx` and the query key.
+They return the result of the query.
+
+### How providers are setup
+
+When the tcx is created, it is given the providers by its creator using
+the [`Providers`][providers_struct] struct. This struct is generated by
+the macros here, but it is basically a big list of function pointers:
+
+[providers_struct]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/query/struct.Providers.html
+
+```rust,ignore
+struct Providers {
+ type_of: for<'tcx> fn(TyCtxt<'tcx>, DefId) -> Ty<'tcx>,
+ ...
+}
+```
+
+At present, we have one copy of the struct for local crates, and one
+for external crates, though the plan is that we may eventually have
+one per crate.
+
+These `Providers` structs are ultimately created and populated by
+`rustc_driver`, but it does this by distributing the work
+throughout the other `rustc_*` crates. This is done by invoking
+various [`provide`][provide_fn] functions. These functions tend to look
+something like this:
+
+[provide_fn]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/hir/fn.provide.html
+
+```rust,ignore
+pub fn provide(providers: &mut Providers) {
+ *providers = Providers {
+ type_of,
+ ..*providers
+ };
+}
+```
+
+That is, they take an `&mut Providers` and mutate it in place. Usually
+we use the formulation above just because it looks nice, but you could
+as well do `providers.type_of = type_of`, which would be equivalent.
+(Here, `type_of` would be a top-level function, defined as we saw
+before.) So, if we want to add a provider for some other query,
+let's call it `fubar`, into the crate above, we might modify the `provide()`
+function like so:
+
+```rust,ignore
+pub fn provide(providers: &mut Providers) {
+ *providers = Providers {
+ type_of,
+ fubar,
+ ..*providers
+ };
+}
+
+fn fubar<'tcx>(tcx: TyCtxt<'tcx>, key: DefId) -> Fubar<'tcx> { ... }
+```
+
+N.B. Most of the `rustc_*` crates only provide **local
+providers**. Almost all **extern providers** wind up going through the
+[`rustc_metadata` crate][rustc_metadata], which loads the information
+from the crate metadata. But in some cases there are crates that
+provide queries for *both* local and external crates, in which case
+they define both a `provide` and a `provide_extern` function, through
+[`wasm_import_module_map`][wasm_import_module_map], that `rustc_driver` can invoke.
+
+[rustc_metadata]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/index.html
+[wasm_import_module_map]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/back/symbol_export/fn.wasm_import_module_map.html
+
+## Adding a new query
+
+How do you add a new query?
+Defining a query takes place in two steps:
+
+1. Specify the query name and its arguments.
+2. Supply query providers where needed.
+
+To specify the query name and arguments, you simply add an entry to
+the big macro invocation in
+[`compiler/rustc_middle/src/query/mod.rs`][query-mod], which looks something like:
+
+[query-mod]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/query/index.html
+
+```rust,ignore
+rustc_queries! {
+ Other {
+ /// Records the type of every item.
+ query type_of(key: DefId) -> Ty<'tcx> {
+ cache { key.is_local() }
+ }
+ }
+
+ ...
+}
+```
+
+Queries are grouped into categories (`Other`, `Codegen`, `TypeChecking`, etc.).
+Each group contains one or more queries.
+
+A query definition has the following form:
+
+```rust,ignore
+query type_of(key: DefId) -> Ty<'tcx> { ... }
+^^^^^ ^^^^^^^ ^^^^^ ^^^^^^^^ ^^^
+| | | | |
+| | | | query modifiers
+| | | result type
+| | query key type
+| name of query
+query keyword
+```
+
+Let's go over these elements one by one:
+
+- **Query keyword:** indicates a start of a query definition.
+- **Name of query:** the name of the query method
+ (`tcx.type_of(..)`). Also used as the name of a struct
+ (`ty::queries::type_of`) that will be generated to represent
+ this query.
+- **Query key type:** the type of the argument to this query.
+ This type must implement the [`ty::query::keys::Key`][Key] trait, which
+ defines (for example) how to map it to a crate, and so forth.
+- **Result type of query:** the type produced by this query. This type
+ should (a) not use `RefCell` or other interior mutability and (b) be
+ cheaply cloneable. Interning or using `Rc` or `Arc` is recommended for
+ non-trivial data types.[^steal]
+- **Query modifiers:** various flags and options that customize how the
+ query is processed (mostly with respect to [incremental compilation][incrcomp]).
+
+[Key]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_query_impl/keys/trait.Key.html
+[incrcomp]: queries/incremental-compilation-in-detail.html#query-modifiers
+
+So, to add a query:
+
+- Add an entry to `rustc_queries!` using the format above.
+- Link the provider by modifying the appropriate `provide` method;
+ or add a new one if needed and ensure that `rustc_driver` is invoking it.
+
+[^steal]: The one exception to those rules is the `ty::steal::Steal` type,
+which is used to cheaply modify MIR in place. See the definition
+of `Steal` for more details. New uses of `Steal` should **not** be
+added without alerting `@rust-lang/compiler`.
+
+### Query structs and descriptions
+
+For each query, the `rustc_queries` macro will generate a "query struct"
+named after the query. This struct is a kind of placeholder
+describing the query. Each query struct implements the
+[`self::config::QueryConfig`][QueryConfig] trait, which has associated types for the
+key/value of that particular query. Basically the code generated looks something
+like this:
+
+```rust,ignore
+// Dummy struct representing a particular kind of query:
+pub struct type_of<'tcx> { data: PhantomData<&'tcx ()> }
+
+impl<'tcx> QueryConfig for type_of<'tcx> {
+ type Key = DefId;
+ type Value = Ty<'tcx>;
+
+ const NAME: QueryName = QueryName::type_of;
+ const CATEGORY: ProfileCategory = ProfileCategory::Other;
+}
+```
+
+There is an additional trait that you may wish to implement called
+[`self::config::QueryDescription`][QueryDescription]. This trait is
+used during cycle errors to give a "human readable" name for the query,
+so that we can summarize what was happening when the cycle occurred.
+Implementing this trait is optional if the query key is `DefId`, but
+if you *don't* implement it, you get a pretty generic error ("processing `foo`...").
+You can put new impls into the `config` module. They look something like this:
+
+[QueryConfig]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_query_system/query/config/trait.QueryConfig.html
+[QueryDescription]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_query_system/query/config/trait.QueryDescription.html
+
+```rust,ignore
+impl<'tcx> QueryDescription for queries::type_of<'tcx> {
+ fn describe(tcx: TyCtxt, key: DefId) -> String {
+ format!("computing the type of `{}`", tcx.def_path_str(key))
+ }
+}
+```
+
+Another option is to add `desc` modifier:
+
+```rust,ignore
+rustc_queries! {
+ Other {
+ /// Records the type of every item.
+ query type_of(key: DefId) -> Ty<'tcx> {
+ desc { |tcx| "computing the type of `{}`", tcx.def_path_str(key) }
+ }
+ }
+}
+```
+
+`rustc_queries` macro will generate an appropriate `impl` automatically.
+
+## External links
+
+Related design ideas, and tracking issues:
+
+- Design document: [On-demand Rustc incremental design doc]
+- Tracking Issue: ["Red/Green" dependency tracking in compiler]
+
+More discussion and issues:
+
+- [GitHub issue #42633]
+- [Incremental Compilation Beta]
+- [Incremental Compilation Announcement]
+
+[On-demand Rustc incremental design doc]: https://github.com/nikomatsakis/rustc-on-demand-incremental-design-doc/blob/master/0000-rustc-on-demand-and-incremental.md
+["Red/Green" dependency tracking in compiler]: https://github.com/rust-lang/rust/issues/42293
+[GitHub issue #42633]: https://github.com/rust-lang/rust/issues/42633
+[Incremental Compilation Beta]: https://internals.rust-lang.org/t/incremental-compilation-beta/4721
+[Incremental Compilation Announcement]: https://blog.rust-lang.org/2016/09/08/incremental.html
+
diff --git a/src/doc/rustc-dev-guide/src/rustbot.md b/src/doc/rustc-dev-guide/src/rustbot.md
new file mode 100644
index 000000000..5350f44ef
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/rustbot.md
@@ -0,0 +1,63 @@
+# Mastering @rustbot
+
+`@rustbot` (also known as `triagebot`) is a utility robot that is mostly used to
+allow any contributor to achieve certain tasks that would normally require GitHub
+membership to the `rust-lang` organization. Its most interesting features for
+contributors to `rustc` are issue claiming and relabeling.
+
+## Issue claiming
+
+`@rustbot` exposes a command that allows anyone to assign an issue to themselves.
+If you see an issue you want to work on, you can send the following message as a
+comment on the issue at hand:
+
+ @rustbot claim
+
+This will tell `@rustbot` to assign the issue to you if it has no assignee yet.
+Note that because of some GitHub restrictions, you may be assigned indirectly,
+i.e. `@rustbot` will assign itself as a placeholder and edit the top comment to
+reflect the fact that the issue is now assigned to you.
+
+If you want to unassign from an issue, `@rustbot` has a different command:
+
+ @rustbot release-assignment
+
+## Issue relabeling
+
+Changing labels for an issue or PR is also normally reserved for members of the
+organization. However, `@rustbot` allows you to relabel an issue yourself, only
+with a few restrictions. This is mostly useful in two cases:
+
+**Helping with issue triage**: Rust's issue tracker has more than 5,000 open
+issues at the time of this writing, so labels are the most powerful tool that we
+have to keep it as tidy as possible. You don't need to spend hours in the issue tracker
+to triage issues, but if you open an issue, you should feel free to label it if
+you are comfortable with doing it yourself.
+
+**Updating the status of a PR**: We use "status labels" to reflect the status of
+PRs. For example, if your PR has merge conflicts, it will automatically be assigned
+the `S-waiting-on-author`, and reviewers might not review it until you rebase your
+PR. Once you do rebase your branch, you should change the labels yourself to remove
+the `S-waiting-on-author` label and add back `S-waiting-on-review`. In this case,
+the `@rustbot` command will look like this:
+
+ @rustbot label -S-waiting-on-author +S-waiting-on-review
+
+The syntax for this command is pretty loose, so there are other variants of this
+command invocation. For more details, see [the wiki page about labeling][labeling].
+
+[labeling]: https://github.com/rust-lang/triagebot/wiki/Labeling
+
+## Other commands
+
+If you are interested in seeing what `@rustbot` is capable of, check out its [wiki],
+which is meant as a reference for the bot and should be kept up to date every time the
+bot gets an upgrade.
+
+`@rustbot` is maintained by the Release team. If you have any feedback regarding
+existing commands or suggestions for new commands, feel free to reach out
+[on Zulip][zulip] or file an issue in [the triagebot repository][repo]
+
+[wiki]: https://github.com/rust-lang/triagebot/wiki
+[zulip]: https://rust-lang.zulipchat.com/#narrow/stream/224082-t-release.2Ftriagebot
+[repo]: https://github.com/rust-lang/triagebot/
diff --git a/src/doc/rustc-dev-guide/src/rustc-driver-getting-diagnostics.md b/src/doc/rustc-dev-guide/src/rustc-driver-getting-diagnostics.md
new file mode 100644
index 000000000..327415e5a
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/rustc-driver-getting-diagnostics.md
@@ -0,0 +1,44 @@
+# Example: Getting diagnostic through `rustc_interface`
+
+`rustc_interface` allows you to intercept diagnostics that would otherwise be printed to stderr.
+
+## Getting diagnostics
+
+To get diagnostics from the compiler,
+configure `rustc_interface::Config` to output diagnostic to a buffer,
+and run `TyCtxt.analysis`. The following was tested
+with <!-- date: 2022-06 --> `nightly-2022-06-05` (See [here][example]
+for the complete example):
+
+[example]: https://github.com/rust-lang/rustc-dev-guide/blob/master/examples/rustc-driver-getting-diagnostics.rs
+
+```rust
+let buffer = sync::Arc::new(sync::Mutex::new(Vec::new()));
+let config = rustc_interface::Config {
+ opts: config::Options {
+ // Configure the compiler to emit diagnostics in compact JSON format.
+ error_format: config::ErrorOutputType::Json {
+ pretty: false,
+ json_rendered: rustc_errors::emitter::HumanReadableErrorType::Default(
+ rustc_errors::emitter::ColorConfig::Never,
+ ),
+ },
+ /* other config */
+ },
+ // Redirect the diagnostic output of the compiler to a buffer.
+ diagnostic_output: rustc_session::DiagnosticOutput::Raw(Box::from(DiagnosticSink(
+ buffer.clone(),
+ ))),
+ /* other config */
+};
+rustc_interface::run_compiler(config, |compiler| {
+ compiler.enter(|queries| {
+ queries.global_ctxt().unwrap().take().enter(|tcx| {
+ // Run the analysis phase on the local crate to trigger the type error.
+ let _ = tcx.analysis(());
+ });
+ });
+});
+// Read buffered diagnostics.
+let diagnostics = String::from_utf8(buffer.lock().unwrap().clone()).unwrap();
+```
diff --git a/src/doc/rustc-dev-guide/src/rustc-driver-interacting-with-the-ast.md b/src/doc/rustc-dev-guide/src/rustc-driver-interacting-with-the-ast.md
new file mode 100644
index 000000000..d70264fe4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/rustc-driver-interacting-with-the-ast.md
@@ -0,0 +1,49 @@
+# Example: Type checking through `rustc_interface`
+
+`rustc_interface` allows you to interact with Rust code at various stages of compilation.
+
+## Getting the type of an expression
+
+To get the type of an expression, use the `global_ctxt` to get a `TyCtxt`.
+The following was tested with <!-- date: 2022-06 --> `nightly-2022-06-05`
+(see [here][example] for the complete example):
+
+[example]: https://github.com/rust-lang/rustc-dev-guide/blob/master/examples/rustc-driver-interacting-with-the-ast.rs
+
+```rust
+let config = rustc_interface::Config {
+ input: config::Input::Str {
+ name: source_map::FileName::Custom("main.rs".to_string()),
+ input: "fn main() { let message = \"Hello, world!\"; println!(\"{}\", message); }"
+ .to_string(),
+ },
+ /* other config */
+};
+rustc_interface::run_compiler(config, |compiler| {
+ compiler.enter(|queries| {
+ // Analyze the crate and inspect the types under the cursor.
+ queries.global_ctxt().unwrap().take().enter(|tcx| {
+ // Every compilation contains a single crate.
+ let hir_krate = tcx.hir();
+ // Iterate over the top-level items in the crate, looking for the main function.
+ for id in hir_krate.items() {
+ let item = hir_krate.item(id);
+ // Use pattern-matching to find a specific node inside the main function.
+ if let rustc_hir::ItemKind::Fn(_, _, body_id) = item.kind {
+ let expr = &tcx.hir().body(body_id).value;
+ if let rustc_hir::ExprKind::Block(block, _) = expr.kind {
+ if let rustc_hir::StmtKind::Local(local) = block.stmts[0].kind {
+ if let Some(expr) = local.init {
+ let hir_id = expr.hir_id; // hir_id identifies the string "Hello, world!"
+ let def_id = tcx.hir().local_def_id(item.hir_id()); // def_id identifies the main function
+ let ty = tcx.typeck(def_id).node_type(hir_id);
+ println!("{:?}: {:?}", expr, ty);
+ }
+ }
+ }
+ }
+ }
+ })
+ });
+});
+```
diff --git a/src/doc/rustc-dev-guide/src/rustc-driver.md b/src/doc/rustc-dev-guide/src/rustc-driver.md
new file mode 100644
index 000000000..7250c852c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/rustc-driver.md
@@ -0,0 +1,45 @@
+# The Rustc Driver and Interface
+
+The [`rustc_driver`] is essentially `rustc`'s `main()` function. It acts as
+the glue for running the various phases of the compiler in the correct order,
+using the interface defined in the [`rustc_interface`] crate.
+
+The `rustc_interface` crate provides external users with an (unstable) API
+for running code at particular times during the compilation process, allowing
+third parties to effectively use `rustc`'s internals as a library for
+analyzing a crate or emulating the compiler in-process (e.g. the RLS or rustdoc).
+
+For those using `rustc` as a library, the [`rustc_interface::run_compiler()`][i_rc]
+function is the main entrypoint to the compiler. It takes a configuration for the compiler
+and a closure that takes a [`Compiler`]. `run_compiler` creates a `Compiler` from the
+configuration and passes it to the closure. Inside the closure, you can use the `Compiler`
+to drive queries to compile a crate and get the results. This is what the `rustc_driver` does too.
+You can see a minimal example of how to use `rustc_interface` [here][example].
+
+You can see what queries are currently available through the rustdocs for [`Compiler`].
+You can see an example of how to use them by looking at the `rustc_driver` implementation,
+specifically the [`rustc_driver::run_compiler` function][rd_rc] (not to be confused with
+[`rustc_interface::run_compiler`][i_rc]). The `rustc_driver::run_compiler` function
+takes a bunch of command-line args and some other configurations and
+drives the compilation to completion.
+
+`rustc_driver::run_compiler` also takes a [`Callbacks`][cb],
+a trait that allows for custom compiler configuration,
+as well as allowing some custom code run after different phases of the compilation.
+
+> **Warning:** By its very nature, the internal compiler APIs are always going
+> to be unstable. That said, we do try not to break things unnecessarily.
+
+
+[cb]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/trait.Callbacks.html
+[rd_rc]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/fn.run_compiler.html
+[i_rc]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/interface/fn.run_compiler.html
+[example]: https://github.com/rust-lang/rustc-dev-guide/blob/master/examples/rustc-driver-example.rs
+[`rustc_interface`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/index.html
+[`rustc_driver`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_driver/
+[`Compiler`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_interface/interface/struct.Compiler.html
+[`Session`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html
+[`TyCtxt`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html
+[`SourceMap`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/source_map/struct.SourceMap.html
+[stupid-stats]: https://github.com/nrc/stupid-stats
+[Appendix A]: appendix/stupid-stats.html
diff --git a/src/doc/rustc-dev-guide/src/rustdoc-internals.md b/src/doc/rustc-dev-guide/src/rustdoc-internals.md
new file mode 100644
index 000000000..91bb0c358
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/rustdoc-internals.md
@@ -0,0 +1,242 @@
+# Rustdoc internals
+
+<!-- toc -->
+
+This page describes rustdoc's passes and modes. For an overview of rustdoc,
+see the ["Rustdoc overview" chapter](./rustdoc.md).
+
+## From crate to clean
+
+In `core.rs` are two central items: the `DocContext` struct, and the `run_core`
+function. The latter is where rustdoc calls out to rustc to compile a crate to
+the point where rustdoc can take over. The former is a state container used
+when crawling through a crate to gather its documentation.
+
+The main process of crate crawling is done in `clean/mod.rs` through several
+implementations of the `Clean` trait defined within. This is a conversion
+trait, which defines one method:
+
+```rust,ignore
+pub trait Clean<T> {
+ fn clean(&self, cx: &DocContext) -> T;
+}
+```
+
+`clean/mod.rs` also defines the types for the "cleaned" AST used later on to
+render documentation pages. Each usually accompanies an implementation of
+`Clean` that takes some AST or HIR type from rustc and converts it into the
+appropriate "cleaned" type. "Big" items like modules or associated items may
+have some extra processing in its `Clean` implementation, but for the most part
+these impls are straightforward conversions. The "entry point" to this module
+is the `impl Clean<Crate> for visit_ast::RustdocVisitor`, which is called by
+`run_core` above.
+
+You see, I actually lied a little earlier: There's another AST transformation
+that happens before the events in `clean/mod.rs`. In `visit_ast.rs` is the
+type `RustdocVisitor`, which *actually* crawls a `rustc_hir::Crate` to get the first
+intermediate representation, defined in `doctree.rs`. This pass is mainly to
+get a few intermediate wrappers around the HIR types and to process visibility
+and inlining. This is where `#[doc(inline)]`, `#[doc(no_inline)]`, and
+`#[doc(hidden)]` are processed, as well as the logic for whether a `pub use`
+should get the full page or a "Reexport" line in the module page.
+
+The other major thing that happens in `clean/mod.rs` is the collection of doc
+comments and `#[doc=""]` attributes into a separate field of the Attributes
+struct, present on anything that gets hand-written documentation. This makes it
+easier to collect this documentation later in the process.
+
+The primary output of this process is a `clean::Crate` with a tree of Items
+which describe the publicly-documentable items in the target crate.
+
+### Hot potato
+
+Before moving on to the next major step, a few important "passes" occur over
+the documentation. These do things like combine the separate "attributes" into
+a single string to make the document easier on the markdown parser,
+or drop items that are not public or deliberately hidden with `#[doc(hidden)]`.
+These are all implemented in the `passes/` directory, one file per pass.
+By default, all of these passes are run on a crate, but the ones
+regarding dropping private/hidden items can be bypassed by passing
+`--document-private-items` to rustdoc. Note that unlike the previous set of AST
+transformations, the passes are run on the _cleaned_ crate.
+
+(Strictly speaking, you can fine-tune the passes run and even add your own, but
+[we're trying to deprecate that][44136]. If you need finer-grain control over
+these passes, please let us know!)
+
+[44136]: https://github.com/rust-lang/rust/issues/44136
+
+Here is the list of passes as of <!-- date: 2022-05 --> May 2022:
+
+- `calculate-doc-coverage` calculates information used for the `--show-coverage`
+ flag.
+
+- `check-bare-urls` detects links that are not linkified, e.g., in Markdown such as
+ `Go to https://example.com/.` It suggests wrapping the link with angle brackets:
+ `Go to <https://example.com/>.` to linkify it. This is the code behind the <!--
+ date: 2022-05 --> `rustdoc::bare_urls` lint.
+
+- `check-code-block-syntax` validates syntax inside Rust code blocks
+ (<code>```rust</code>)
+
+- `check-doc-test-visibility` runs doctest visibility–related lints.
+
+- `check-invalid-html-tags` detects invalid HTML (like an unclosed `<span>`)
+ in doc comments.
+
+- `collect-intra-doc-links` resolves [intra-doc links](https://doc.rust-lang.org/nightly/rustdoc/write-documentation/linking-to-items-by-name.html).
+
+- `collect-trait-impls` collects trait impls for each item in the crate. For
+ example, if we define a struct that implements a trait, this pass will note
+ that the struct implements that trait.
+
+- `propagate-doc-cfg` propagates `#[doc(cfg(...))]` to child items.
+
+- `strip-priv-imports` strips all private import statements (`use`, `extern
+ crate`) from a crate. This is necessary because rustdoc will handle *public*
+ imports by either inlining the item's documentation to the module or creating
+ a "Reexports" section with the import in it. The pass ensures that all of
+ these imports are actually relevant to documentation.
+
+- `strip-hidden` and `strip-private` strip all `doc(hidden)` and private items
+ from the output. `strip-private` implies `strip-priv-imports`. Basically, the
+ goal is to remove items that are not relevant for public documentation.
+
+There is also a `stripper` module in `passes/`, but it is a collection of
+utility functions for the `strip-*` passes and is not a pass itself.
+
+## From clean to crate
+
+This is where the "second phase" in rustdoc begins. This phase primarily lives
+in the `html/` folder, and it all starts with `run()` in `html/render.rs`. This
+code is responsible for setting up the `Context`, `SharedContext`, and `Cache`
+which are used during rendering, copying out the static files which live in
+every rendered set of documentation (things like the fonts, CSS, and JavaScript
+that live in `html/static/`), creating the search index, and printing out the
+source code rendering, before beginning the process of rendering all the
+documentation for the crate.
+
+Several functions implemented directly on `Context` take the `clean::Crate` and
+set up some state between rendering items or recursing on a module's child
+items. From here the "page rendering" begins, via an enormous `write!()` call
+in `html/layout.rs`. The parts that actually generate HTML from the items and
+documentation occurs within a series of `std::fmt::Display` implementations and
+functions that pass around a `&mut std::fmt::Formatter`. The top-level
+implementation that writes out the page body is the `impl<'a> fmt::Display for
+Item<'a>` in `html/render.rs`, which switches out to one of several `item_*`
+functions based on the kind of `Item` being rendered.
+
+Depending on what kind of rendering code you're looking for, you'll probably
+find it either in `html/render.rs` for major items like "what sections should I
+print for a struct page" or `html/format.rs` for smaller component pieces like
+"how should I print a where clause as part of some other item".
+
+Whenever rustdoc comes across an item that should print hand-written
+documentation alongside, it calls out to `html/markdown.rs` which interfaces
+with the Markdown parser. This is exposed as a series of types that wrap a
+string of Markdown, and implement `fmt::Display` to emit HTML text. It takes
+special care to enable certain features like footnotes and tables and add
+syntax highlighting to Rust code blocks (via `html/highlight.rs`) before
+running the Markdown parser. There's also a function in here
+(`find_testable_code`) that specifically scans for Rust code blocks so the
+test-runner code can find all the doctests in the crate.
+
+### From soup to nuts
+
+(alternate title: ["An unbroken thread that stretches from those first `Cell`s
+to us"][video])
+
+[video]: https://www.youtube.com/watch?v=hOLAGYmUQV0
+
+It's important to note that the AST cleaning can ask the compiler for
+information (crucially, `DocContext` contains a `TyCtxt`), but page rendering
+cannot. The `clean::Crate` created within `run_core` is passed outside the
+compiler context before being handed to `html::render::run`. This means that a
+lot of the "supplementary data" that isn't immediately available inside an
+item's definition, like which trait is the `Deref` trait used by the language,
+needs to be collected during cleaning, stored in the `DocContext`, and passed
+along to the `SharedContext` during HTML rendering. This manifests as a bunch
+of shared state, context variables, and `RefCell`s.
+
+Also of note is that some items that come from "asking the compiler" don't go
+directly into the `DocContext` - for example, when loading items from a foreign
+crate, rustdoc will ask about trait implementations and generate new `Item`s
+for the impls based on that information. This goes directly into the returned
+`Crate` rather than roundabout through the `DocContext`. This way, these
+implementations can be collected alongside the others, right before rendering
+the HTML.
+
+## Other tricks up its sleeve
+
+All this describes the process for generating HTML documentation from a Rust
+crate, but there are couple other major modes that rustdoc runs in. It can also
+be run on a standalone Markdown file, or it can run doctests on Rust code or
+standalone Markdown files. For the former, it shortcuts straight to
+`html/markdown.rs`, optionally including a mode which inserts a Table of
+Contents to the output HTML.
+
+For the latter, rustdoc runs a similar partial-compilation to get relevant
+documentation in `test.rs`, but instead of going through the full clean and
+render process, it runs a much simpler crate walk to grab *just* the
+hand-written documentation. Combined with the aforementioned
+"`find_testable_code`" in `html/markdown.rs`, it builds up a collection of
+tests to run before handing them off to the test runner. One notable
+location in `test.rs` is the function `make_test`, which is where hand-written
+doctests get transformed into something that can be executed.
+
+Some extra reading about `make_test` can be found
+[here](https://quietmisdreavus.net/code/2018/02/23/how-the-doctests-get-made/).
+
+## Dotting i's and crossing t's
+
+So that's rustdoc's code in a nutshell, but there's more things in the repo
+that deal with it. Since we have the full `compiletest` suite at hand, there's
+a set of tests in `src/test/rustdoc` that make sure the final HTML is what we
+expect in various situations. These tests also use a supplementary script,
+`src/etc/htmldocck.py`, that allows it to look through the final HTML using
+XPath notation to get a precise look at the output. The full description of all
+the commands available to rustdoc tests (e.g. [`@has`] and [`@matches`]) is in
+[`htmldocck.py`].
+
+To use multiple crates in a rustdoc test, add `// aux-build:filename.rs`
+to the top of the test file. `filename.rs` should be placed in an `auxiliary`
+directory relative to the test file with the comment. If you need to build
+docs for the auxiliary file, use `// build-aux-docs`.
+
+In addition, there are separate tests for the search index and rustdoc's
+ability to query it. The files in `src/test/rustdoc-js` each contain a
+different search query and the expected results, broken out by search tab.
+These files are processed by a script in `src/tools/rustdoc-js` and the Node.js
+runtime. These tests don't have as thorough of a writeup, but a broad example
+that features results in all tabs can be found in `basic.js`. The basic idea is
+that you match a given `QUERY` with a set of `EXPECTED` results, complete with
+the full item path of each item.
+
+[`htmldocck.py`]: https://github.com/rust-lang/rust/blob/master/src/etc/htmldocck.py
+[`@has`]: https://github.com/rust-lang/rust/blob/master/src/etc/htmldocck.py#L39
+[`@matches`]: https://github.com/rust-lang/rust/blob/master/src/etc/htmldocck.py#L44
+
+## Testing locally
+
+Some features of the generated HTML documentation might require local
+storage to be used across pages, which doesn't work well without an HTTP
+server. To test these features locally, you can run a local HTTP server, like
+this:
+
+```bash
+$ ./x.py doc library
+# The documentation has been generated into `build/[YOUR ARCH]/doc`.
+$ python3 -m http.server -d build/[YOUR ARCH]/doc
+```
+
+Now you can browse your documentation just like you would if it was hosted
+on the internet. For example, the url for `std` will be `/std/".
+
+## See also
+
+- The [`rustdoc` api docs]
+- [An overview of `rustdoc`](./rustdoc.md)
+- [The rustdoc user guide]
+
+[`rustdoc` api docs]: https://doc.rust-lang.org/nightly/nightly-rustc/rustdoc/
+[The rustdoc user guide]: https://doc.rust-lang.org/nightly/rustdoc/
diff --git a/src/doc/rustc-dev-guide/src/rustdoc.md b/src/doc/rustc-dev-guide/src/rustdoc.md
new file mode 100644
index 000000000..4cdda5a3e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/rustdoc.md
@@ -0,0 +1,181 @@
+# Rustdoc overview
+
+`rustdoc` uses `rustc` internals (and, of course, the standard library), so you
+will have to build the compiler and `std` once before you can build `rustdoc`.
+
+`rustdoc` lives in-tree with the
+compiler and standard library. This chapter is about how it works.
+For information about Rustdoc's features and how to use them, see
+the [Rustdoc book](https://doc.rust-lang.org/nightly/rustdoc/).
+For more details about how rustdoc works, see the
+["Rustdoc internals" chapter][Rustdoc internals].
+
+[Rustdoc internals]: ./rustdoc-internals.md
+
+Rustdoc is implemented entirely within the crate [`librustdoc`][rd]. It runs
+the compiler up to the point where we have an internal representation of a
+crate (HIR) and the ability to run some queries about the types of items. [HIR]
+and [queries] are discussed in the linked chapters.
+
+[HIR]: ./hir.md
+[queries]: ./query.md
+[rd]: https://github.com/rust-lang/rust/tree/master/src/librustdoc
+
+`librustdoc` performs two major steps after that to render a set of
+documentation:
+
+* "Clean" the AST into a form that's more suited to creating documentation (and
+ slightly more resistant to churn in the compiler).
+* Use this cleaned AST to render a crate's documentation, one page at a time.
+
+Naturally, there's more than just this, and those descriptions simplify out
+lots of details, but that's the high-level overview.
+
+(Side note: `librustdoc` is a library crate! The `rustdoc` binary is created
+using the project in [`src/tools/rustdoc`][bin]. Note that literally all that
+does is call the `main()` that's in this crate's `lib.rs`, though.)
+
+[bin]: https://github.com/rust-lang/rust/tree/master/src/tools/rustdoc
+
+## Cheat sheet
+
+* Run `./x.py setup tools` before getting started. This will configure `x.py`
+ with nice settings for developing rustdoc and other tools, including
+ downloading a copy of rustc rather than building it.
+* Use `./x.py check src/tools/rustdoc` to quickly check for compile errors.
+* Use `./x.py build` to make a usable
+ rustdoc you can run on other projects.
+ * Add `library/test` to be able to use `rustdoc --test`.
+ * Run `rustup toolchain link stage2 build/$TARGET/stage2` to add a
+ custom toolchain called `stage2` to your rustup environment. After
+ running that, `cargo +stage2 doc` in any directory will build with
+ your locally-compiled rustdoc.
+* Use `./x.py doc library` to use this rustdoc to generate the
+ standard library docs.
+ * The completed docs will be available in `build/$TARGET/doc` (under `core`, `alloc`, and `std`).
+ * If you want to copy those docs to a webserver, copy all of
+ `build/$TARGET/doc`, since that's where the CSS, JS, fonts, and landing
+ page are.
+* Use `./x.py test src/test/rustdoc*` to run the tests using a stage1
+ rustdoc.
+ * See [Rustdoc internals] for more information about tests.
+
+## Code structure
+
+* All paths in this section are relative to `src/librustdoc` in the rust-lang/rust repository.
+* Most of the HTML printing code is in `html/format.rs` and `html/render/mod.rs`.
+ It's in a bunch of `fmt::Display` implementations and supplementary
+ functions.
+* The types that got `Display` impls above are defined in `clean/mod.rs`, right
+ next to the custom `Clean` trait used to process them out of the rustc HIR.
+* The bits specific to using rustdoc as a test harness are in
+ `doctest.rs`.
+* The Markdown renderer is loaded up in `html/markdown.rs`, including functions
+ for extracting doctests from a given block of Markdown.
+* The tests on the structure of rustdoc HTML output are located in `src/test/rustdoc`, where
+ they're handled by the test runner of rustbuild and the supplementary script
+ `src/etc/htmldocck.py`.
+
+## Tests
+
+* All paths in this section are relative to `src/test` in the rust-lang/rust repository.
+* Tests on search index generation are located in `rustdoc-js`, as a
+ series of JavaScript files that encode queries on the standard library search
+ index and expected results.
+* Tests on the "UI" of rustdoc (the terminal output it produces when run) are in
+ `rustdoc-ui`
+* Tests on the "GUI" of rustdoc (the HTML, JS, and CSS as rendered in a browser)
+ are in `rustdoc-gui`. These use a [NodeJS tool called
+ browser-UI-test](https://github.com/GuillaumeGomez/browser-UI-test/) that uses
+ puppeteer to run tests in a headless browser and check rendering and
+ interactivity.
+
+## Constraints
+
+We try to make rustdoc work reasonably well with JavaScript disabled, and when
+browsing local files. We support
+[these browsers](https://rust-lang.github.io/rfcs/1985-tiered-browser-support.html#supported-browsers).
+
+Supporting local files (`file:///` URLs) brings some surprising restrictions.
+Certain browser features that require secure origins, like `localStorage` and
+Service Workers, don't work reliably. We can still use such features but we
+should make sure pages are still usable without them.
+
+## Multiple runs, same output directory
+
+Rustdoc can be run multiple times for varying inputs, with its output set to the
+same directory. That's how cargo produces documentation for dependencies of the
+current crate. It can also be done manually if a user wants a big
+documentation bundle with all of the docs they care about.
+
+HTML is generated independently for each crate, but there is some cross-crate
+information that we update as we add crates to the output directory:
+
+ - `crates<SUFFIX>.js` holds a list of all crates in the output directory.
+ - `search-index<SUFFIX>.js` holds a list of all searchable items.
+ - For each trait, there is a file under `implementors/.../trait.TraitName.js`
+ containing a list of implementors of that trait. The implementors may be in
+ different crates than the trait, and the JS file is updated as we discover
+ new ones.
+
+## Use cases
+
+There are a few major use cases for rustdoc that you should keep in mind when
+working on it:
+
+### Standard library docs
+
+These are published at <https://doc.rust-lang.org/std> as part of the Rust release
+process. Stable releases are also uploaded to specific versioned URLs like
+<https://doc.rust-lang.org/1.57.0/std/>. Beta and nightly docs are published to
+<https://doc.rust-lang.org/beta/std/> and <https://doc.rust-lang.org/nightly/std/>.
+The docs are uploaded with the [promote-release
+tool](https://github.com/rust-lang/promote-release) and served from S3 with
+CloudFront.
+
+The standard library docs contain five crates: alloc, core, proc_macro, std, and
+test.
+
+### docs.rs
+
+When crates are published to crates.io, docs.rs automatically builds
+and publishes their documentation, for instance at
+<https://docs.rs/serde/latest/serde/>. It always builds with the current nightly
+rustdoc, so any changes you land in rustdoc are "insta-stable" in that they will
+have an immediate public effect on docs.rs. Old documentation is not rebuilt, so
+you will see some variation in UI when browsing old releases in docs.rs. Crate
+authors can request rebuilds, which will be run with the latest rustdoc.
+
+Docs.rs performs some transformations on rustdoc's output in order to save
+storage and display a navigation bar at the top. In particular, certain static
+files (like main.js and rustdoc.css may be shared across multiple invocations
+of the same version of rustdoc. Others, like crates.js and sidebar-items.js, are
+different for different invocations. Still others, like fonts, will never
+change. These categories are distinguished using the `SharedResource` enum in
+`src/librustdoc/html/render/write_shared.rs`
+
+Documentation on docs.rs is always generated for a single crate at a time, so
+the search and sidebar functionality don't include dependencies of the current
+crate.
+
+### Locally generated docs
+
+Crate authors can run `cargo doc --open` in crates they have checked
+out locally to see the docs. This is useful to check that the docs they
+are writing are useful and display correctly. It can also be useful for
+people to view documentation on crates they aren't authors of, but want to
+use. In both cases, people may use `--document-private-items` Cargo flag to
+see private methods, fields, and so on, which are normally not displayed.
+
+By default `cargo doc` will generate documentation for a crate and all of its
+dependencies. That can result in a very large documentation bundle, with a large
+(and slow) search corpus. The Cargo flag `--no-deps` inhibits that behavior and
+generates docs for just the crate.
+
+### Self-hosted project docs
+
+Some projects like to host their own documentation. For example:
+<https://docs.serde.rs/>. This is easy to do by locally generating docs, and
+simply copying them to a web server. Rustdoc's HTML output can be extensively
+customized by flags. Users can add a theme, set the default theme, and inject
+arbitrary HTML. See `rustdoc --help` for details.
diff --git a/src/doc/rustc-dev-guide/src/salsa.md b/src/doc/rustc-dev-guide/src/salsa.md
new file mode 100644
index 000000000..afa01eda2
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/salsa.md
@@ -0,0 +1,218 @@
+# How Salsa works
+
+<!-- toc -->
+
+This chapter is based on the explanation given by Niko Matsakis in this
+[video](https://www.youtube.com/watch?v=_muY4HjSqVw) about
+[Salsa](https://github.com/salsa-rs/salsa). To find out more you may
+want to watch [Salsa In More
+Depth](https://www.youtube.com/watch?v=i_IhACacPRY), also by Niko
+Matsakis.
+
+> As of <!-- date: 2022-04 --> April 2022, although Salsa is inspired by
+> (among other things) rustc's query system, it is not used directly in rustc.
+> It _is_ used in chalk and extensively in `rust-analyzer`, but there are no
+> medium or long-term concrete plans to integrate it into the compiler.
+
+## What is Salsa?
+
+Salsa is a library for incremental recomputation. This means it allows reusing
+computations that were already done in the past to increase the efficiency
+of future computations.
+
+The objectives of Salsa are:
+ * Provide that functionality in an automatic way, so reusing old computations
+ is done automatically by the library
+ * Doing so in a "sound", or "correct", way, therefore leading to the same
+ results as if it had been done from scratch
+
+Salsa's actual model is much richer, allowing many kinds of inputs and many
+different outputs.
+For example, integrating Salsa with an IDE could mean that the inputs could be
+the manifest (`Cargo.toml`), entire source files (`foo.rs`), snippets and so
+on; the outputs of such an integration could range from a binary executable, to
+lints, types (for example, if a user selects a certain variable and wishes to
+see its type), completions, etc.
+
+## How does it work?
+
+The first thing that Salsa has to do is identify the "base inputs" that
+are not something computed but given as input.
+
+Then Salsa has to also identify intermediate, "derived" values, which are
+something that the library produces, but, for each derived value there's a
+"pure" function that computes the derived value.
+
+For example, there might be a function `ast(x: Path) -> AST`. The produced
+`AST` isn't a final value, it's an intermediate value that the library would
+use for the computation.
+
+This means that when you try to compute with the library, Salsa is going to
+compute various derived values, and eventually read the input and produce the
+result for the asked computation.
+
+In the course of computing, Salsa tracks which inputs were accessed and which
+values are derived. This information is used to determine what's going to
+happen when the inputs change: are the derived values still valid?
+
+This doesn't necessarily mean that each computation downstream from the input
+is going to be checked, which could be costly. Salsa only needs to check each
+downstream computation until it finds one that isn't changed. At that point, it
+won't check other derived computations since they wouldn't need to change.
+
+It's helpful to think about this as a graph with nodes. Each derived value
+has a dependency on other values, which could themselves be either base or
+derived. Base values don't have a dependency.
+
+```ignore
+I <- A <- C ...
+ |
+J <- B <--+
+```
+
+When an input `I` changes, the derived value `A` could change. The derived
+value `B`, which does not depend on `I`, `A`, or any value derived from `A` or
+`I`, is not subject to change. Therefore, Salsa can reuse the computation done
+for `B` in the past, without having to compute it again.
+
+The computation could also terminate early. Keeping the same graph as before,
+say that input `I` has changed in some way (and input `J` hasn't), but when
+computing `A` again, it's found that `A` hasn't changed from the previous
+computation. This leads to an "early termination", because there's no need to
+check if `C` needs to change, since both `C` direct inputs, `A` and `B`,
+haven't changed.
+
+## Key Salsa concepts
+
+### Query
+
+A query is some value that Salsa can access in the course of computation. Each
+query can have a number of keys (from 0 to many), and all queries have a
+result, akin to functions. 0-key queries are called "input" queries.
+
+### Database
+
+The database is basically the context for the entire computation, it's meant to
+store Salsa's internal state, all intermediate values for each query, and
+anything else that the computation might need. The database must know all the
+queries that the library is going to do before it can be built, but they don't
+need to be specified in the same place.
+
+After the database is formed, it can be accessed with queries that are very
+similar to functions. Since each query's result is stored in the database,
+when a query is invoked N times, it will return N **cloned** results, without
+having to recompute the query (unless the input has changed in such a way that
+it warrants recomputation).
+
+For each input query (0-key), a "set" method is generated, allowing the user to
+change the output of such query, and trigger previous memoized values to be
+potentially invalidated.
+
+### Query Groups
+
+A query group is a set of queries which have been defined together as a unit.
+The database is formed by combining query groups. Query groups are akin to
+"Salsa modules".
+
+A set of queries in a query group are just a set of methods in a trait.
+
+To create a query group a trait annotated with a specific attribute
+(`#[salsa::query_group(...)]`) has to be created.
+
+An argument must also be provided to said attribute as it will be used by Salsa
+to create a struct to be used later when the database is created.
+
+Example input query group:
+
+```rust,ignore
+/// This attribute will process this tree, produce this tree as output, and produce
+/// a bunch of intermediate stuff that Salsa also uses. One of these things is a
+/// "StorageStruct", whose name we have specified in the attribute.
+///
+/// This query group is a bunch of **input** queries, that do not rely on any
+/// derived input.
+#[salsa::query_group(InputsStorage)]
+pub trait Inputs {
+ /// This attribute (`#[salsa::input]`) indicates that this query is a base
+ /// input, therefore `set_manifest` is going to be auto-generated
+ #[salsa::input]
+ fn manifest(&self) -> Manifest;
+
+ #[salsa::input]
+ fn source_text(&self, name: String) -> String;
+}
+```
+
+To create a **derived** query group, one must specify which other query groups
+this one depends on by specifying them as supertraits, as seen in the following
+example:
+
+```rust,ignore
+/// This query group is going to contain queries that depend on derived values a
+/// query group can access another query group's queries by specifying the
+/// dependency as a super trait query groups can be stacked as much as needed using
+/// that pattern.
+#[salsa::query_group(ParserStorage)]
+pub trait Parser: Inputs {
+ /// This query `ast` is not an input query, it's a derived query this means
+ /// that a definition is necessary.
+ fn ast(&self, name: String) -> String;
+}
+```
+
+When creating a derived query the implementation of said query must be defined
+outside the trait. The definition must take a database parameter as an `impl
+Trait` (or `dyn Trait`), where `Trait` is the query group that the definition
+belongs to, in addition to the other keys.
+
+```rust,ignore
+///This is going to be the definition of the `ast` query in the `Parser` trait.
+///So, when the query `ast` is invoked, and it needs to be recomputed, Salsa is going to call this function
+///and it's is going to give it the database as `impl Parser`.
+///The function doesn't need to be aware of all the queries of all the query groups
+fn ast(db: &impl Parser, name: String) -> String {
+ //! Note, `impl Parser` is used here but `dyn Parser` works just as well
+ /* code */
+ ///By passing an `impl Parser`, this is allowed
+ let source_text = db.input_file(name);
+ /* do the actual parsing */
+ return ast;
+}
+```
+
+Eventually, after all the query groups have been defined, the database can be
+created by declaring a struct.
+
+To specify which query groups are going to be part of the database an attribute
+(`#[salsa::database(...)]`) must be added. The argument of said attribute is a
+list of identifiers, specifying the query groups **storages**.
+
+```rust,ignore
+///This attribute specifies which query groups are going to be in the database
+#[salsa::database(InputsStorage, ParserStorage)]
+#[derive(Default)] //optional!
+struct MyDatabase {
+ ///You also need this one field
+ runtime : salsa::Runtime<MyDatabase>,
+}
+///And this trait has to be implemented
+impl salsa::Database for MyDatabase {
+ fn salsa_runtime(&self) -> &salsa::Runtime<MyDatabase> {
+ &self.runtime
+ }
+}
+```
+
+Example usage:
+
+```rust,ignore
+fn main() {
+ let db = MyDatabase::default();
+ db.set_manifest(...);
+ db.set_source_text(...);
+ loop {
+ db.ast(...); //will reuse results
+ db.set_source_text(...);
+ }
+}
+```
diff --git a/src/doc/rustc-dev-guide/src/sanitizers.md b/src/doc/rustc-dev-guide/src/sanitizers.md
new file mode 100644
index 000000000..a088d62ed
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/sanitizers.md
@@ -0,0 +1,121 @@
+# Sanitizers Support
+
+The rustc compiler contains support for following sanitizers:
+
+* [AddressSanitizer][clang-asan] a faster memory error detector. Can
+ detect out-of-bounds access to heap, stack, and globals, use after free, use
+ after return, double free, invalid free, memory leaks.
+* [ControlFlowIntegrity][clang-cfi] LLVM Control Flow Integrity (CFI) provides
+ forward-edge control flow protection.
+* [Hardware-assisted AddressSanitizer][clang-hwasan] a tool similar to
+ AddressSanitizer but based on partial hardware assistance.
+* [LeakSanitizer][clang-lsan] a run-time memory leak detector.
+* [MemorySanitizer][clang-msan] a detector of uninitialized reads.
+* [ThreadSanitizer][clang-tsan] a fast data race detector.
+
+## How to use the sanitizers?
+
+To enable a sanitizer compile with `-Z sanitizer=...` option, where value is one
+of `address`, `cfi`, `hwaddress`, `leak`, `memory` or `thread`. For more details
+on how to use sanitizers please refer to the sanitizer flag in [the unstable
+book](https://doc.rust-lang.org/unstable-book/).
+
+## How are sanitizers implemented in rustc?
+
+The implementation of sanitizers (except CFI) relies almost entirely on LLVM.
+The rustc is an integration point for LLVM compile time instrumentation passes
+and runtime libraries. Highlight of the most important aspects of the
+implementation:
+
+* The sanitizer runtime libraries are part of the [compiler-rt] project, and
+ [will be built][sanitizer-build] on [supported targets][sanitizer-targets]
+ when enabled in `config.toml`:
+
+ ```toml
+ [build]
+ sanitizers = true
+ ```
+
+ The runtimes are [placed into target libdir][sanitizer-copy].
+
+* During LLVM code generation, the functions intended for instrumentation are
+ [marked][sanitizer-attribute] with appropriate LLVM attribute:
+ `SanitizeAddress`, `SanitizeHWAddress`, `SanitizeMemory`, or
+ `SanitizeThread`. By default all functions are instrumented, but this
+ behaviour can be changed with `#[no_sanitize(...)]`.
+
+* The decision whether to perform instrumentation or not is possible only at a
+ function granularity. In the cases were those decision differ between
+ functions it might be necessary to inhibit inlining, both at [MIR
+ level][inline-mir] and [LLVM level][inline-llvm].
+
+* The LLVM IR generated by rustc is instrumented by [dedicated LLVM
+ passes][sanitizer-pass], different for each sanitizer. Instrumentation
+ passes are invoked after optimization passes.
+
+* When producing an executable, the sanitizer specific runtime library is
+ [linked in][sanitizer-link]. The libraries are searched for in the target
+ libdir. First relative to the overridden system root and subsequently
+ relative to the default system root. Fall-back to the default system root
+ ensures that sanitizer runtimes remain available when using sysroot overrides
+ constructed by cargo `-Z build-std` or xargo.
+
+[compiler-rt]: https://github.com/llvm/llvm-project/tree/main/compiler-rt
+[sanitizer-build]: https://github.com/rust-lang/rust/blob/1.55.0/src/bootstrap/native.rs#L700-L765
+[sanitizer-targets]: https://github.com/rust-lang/rust/blob/1.55.0/src/bootstrap/native.rs#L806-L820
+[sanitizer-copy]: https://github.com/rust-lang/rust/blob/1.55.0/src/bootstrap/compile.rs#L376-L407
+[sanitizer-attribute]: https://github.com/rust-lang/rust/blob/1.55.0/compiler/rustc_codegen_llvm/src/attributes.rs#L42-L58
+[inline-mir]: https://github.com/rust-lang/rust/blob/1.55.0/compiler/rustc_mir/src/transform/inline.rs#L314-L316
+[inline-llvm]: https://github.com/rust-lang/llvm-project/blob/9330ec5a4c1df5fc1fa62f993ed6a04da68cb040/llvm/include/llvm/IR/Attributes.td#L225-L241
+[sanitizer-pass]: https://github.com/rust-lang/rust/blob/1.55.0/compiler/rustc_codegen_llvm/src/back/write.rs#L660-L678
+[sanitizer-link]: https://github.com/rust-lang/rust/blob/1.55.0/compiler/rustc_codegen_ssa/src/back/link.rs#L1053-L1089
+
+## Testing sanitizers
+
+Sanitizers are validated by code generation tests in
+[`src/test/codegen/sanitize*.rs`][test-cg] and end-to-end functional tests in
+[`src/test/ui/sanitize/`][test-ui] directory.
+
+Testing sanitizer functionality requires the sanitizer runtimes (built when
+`sanitizer = true` in `config.toml`) and target providing support for particular
+sanitizer. When sanitizer is unsupported on given target, sanitizers tests will
+be ignored. This behaviour is controlled by compiletest `needs-sanitizer-*`
+directives.
+
+[test-cg]: https://github.com/rust-lang/rust/tree/master/src/test/codegen
+[test-ui]: https://github.com/rust-lang/rust/tree/master/src/test/ui/sanitize
+
+## Enabling sanitizer on a new target
+
+To enable a sanitizer on a new target which is already supported by LLVM:
+
+1. Include the sanitizer in the list of `supported_sanitizers` in [the target
+ definition][target-definition]. `rustc --target .. -Zsanitizer=..` should now
+ recognize sanitizer as supported.
+2. [Build the runtime for the target and include it in the libdir.][sanitizer-targets]
+3. [Teach compiletest that your target now supports the sanitizer.][compiletest-definition]
+ Tests marked with `needs-sanitizer-*` should now run on the target.
+4. Run tests `./x.py test --force-rerun src/test/ui/sanitize/` to verify.
+5. [--enable-sanitizers in the CI configuration][ci-configuration] to build and
+ distribute the sanitizer runtime as part of the release process.
+
+[target-definition]: https://github.com/rust-lang/rust/blob/1.55.0/compiler/rustc_target/src/spec/x86_64_unknown_linux_gnu.rs#L10-L11
+[compiletest-definition]: https://github.com/rust-lang/rust/blob/1.55.0/src/tools/compiletest/src/util.rs#L87-L116
+[ci-configuration]: https://github.com/rust-lang/rust/blob/1.55.0/src/ci/docker/host-x86_64/dist-x86_64-linux/Dockerfile#L94
+
+## Additional Information
+
+* [Sanitizers project page](https://github.com/google/sanitizers/wiki/)
+* [AddressSanitizer in Clang][clang-asan]
+* [ControlFlowIntegrity in Clang][clang-cfi]
+* [Hardware-assisted AddressSanitizer][clang-hwasan]
+* [LeakSanitizer in Clang][clang-lsan]
+* [MemorySanitizer in Clang][clang-msan]
+* [ThreadSanitizer in Clang][clang-tsan]
+
+[clang-asan]: https://clang.llvm.org/docs/AddressSanitizer.html
+[clang-cfi]: https://clang.llvm.org/docs/ControlFlowIntegrity.html
+[clang-hwasan]: https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
+[clang-lsan]: https://clang.llvm.org/docs/LeakSanitizer.html
+[clang-msan]: https://clang.llvm.org/docs/MemorySanitizer.html
+[clang-tsan]: https://clang.llvm.org/docs/ThreadSanitizer.html
diff --git a/src/doc/rustc-dev-guide/src/serialization.md b/src/doc/rustc-dev-guide/src/serialization.md
new file mode 100644
index 000000000..5d8434b55
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/serialization.md
@@ -0,0 +1,166 @@
+# Serialization in Rustc
+
+Rustc has to [serialize] and deserialize various data during compilation.
+Specifically:
+
+- "Crate metadata", mainly query outputs, are serialized in a binary
+ format into `rlib` and `rmeta` files that are output when compiling a library
+ crate, these are then deserialized by crates that depend on that library.
+- Certain query outputs are serialized in a binary format to
+ [persist incremental compilation results].
+- The `-Z ast-json` and `-Z ast-json-noexpand` flags serialize the [AST] to json
+ and output the result to stdout.
+- [`CrateInfo`] is serialized to json when the `-Z no-link` flag is used, and
+ deserialized from json when the `-Z link-only` flag is used.
+
+## The `Encodable` and `Decodable` traits
+
+The [`rustc_serialize`] crate defines two traits for types which can be serialized:
+
+```rust,ignore
+pub trait Encodable<S: Encoder> {
+ fn encode(&self, s: &mut S) -> Result<(), S::Error>;
+}
+
+pub trait Decodable<D: Decoder>: Sized {
+ fn decode(d: &mut D) -> Result<Self, D::Error>;
+}
+```
+
+It also defines implementations of these for integer types, floating point
+types, `bool`, `char`, `str` and various common standard library types.
+
+For types that are constructed from those types, `Encodable` and `Decodable` are
+usually implemented by [derives]. These generate implementations that forward
+deserialization to the fields of the struct or enum. For a struct those impls
+look something like this:
+
+```rust,ignore
+#![feature(rustc_private)]
+extern crate rustc_serialize;
+use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
+
+struct MyStruct {
+ int: u32,
+ float: f32,
+}
+
+impl<E: Encoder> Encodable<E> for MyStruct {
+ fn encode(&self, s: &mut E) -> Result<(), E::Error> {
+ s.emit_struct("MyStruct", 2, |s| {
+ s.emit_struct_field("int", 0, |s| self.int.encode(s))?;
+ s.emit_struct_field("float", 1, |s| self.float.encode(s))
+ })
+ }
+}
+impl<D: Decoder> Decodable<D> for MyStruct {
+ fn decode(s: &mut D) -> Result<MyStruct, D::Error> {
+ s.read_struct("MyStruct", 2, |d| {
+ let int = d.read_struct_field("int", 0, Decodable::decode)?;
+ let float = d.read_struct_field("float", 1, Decodable::decode)?;
+
+ Ok(MyStruct { int, float })
+ })
+ }
+}
+```
+
+## Encoding and Decoding arena allocated types
+
+Rustc has a lot of [arena allocated types]. Deserializing these types isn't
+possible without access to the arena that they need to be allocated on. The
+[`TyDecoder`] and [`TyEncoder`] traits are supertraits of `Decoder` and
+`Encoder` that allow access to a `TyCtxt`.
+
+Types which contain arena allocated types can then bound the type parameter of
+their `Encodable` and `Decodable` implementations with these traits. For
+example
+
+```rust,ignore
+impl<'tcx, D: TyDecoder<'tcx>> Decodable<D> for MyStruct<'tcx> {
+ /* ... */
+}
+```
+
+The `TyEncodable` and `TyDecodable` [derive macros][derives] will expand to such
+an implementation.
+
+Decoding the actual arena allocated type is harder, because some of the
+implementations can't be written due to the orphan rules. To work around this,
+the [`RefDecodable`] trait is defined in `rustc_middle`. This can then be
+implemented for any type. The `TyDecodable` macro will call `RefDecodable` to
+decode references, but various generic code needs types to actually be
+`Decodable` with a specific decoder.
+
+For interned types instead of manually implementing `RefDecodable`, using a new
+type wrapper, like `ty::Predicate` and manually implementing `Encodable` and
+`Decodable` may be simpler.
+
+## Derive macros
+
+The `rustc_macros` crate defines various derives to help implement `Decodable`
+and `Encodable`.
+
+- The `Encodable` and `Decodable` macros generate implementations that apply to
+ all `Encoders` and `Decoders`. These should be used in crates that don't
+ depend on `rustc_middle`, or that have to be serialized by a type that does
+ not implement `TyEncoder`.
+- `MetadataEncodable` and `MetadataDecodable` generate implementations that
+ only allow decoding by [`rustc_metadata::rmeta::encoder::EncodeContext`] and
+ [`rustc_metadata::rmeta::decoder::DecodeContext`]. These are used for types
+ that contain `rustc_metadata::rmeta::Lazy`.
+- `TyEncodable` and `TyDecoder` generate implementation that apply to any
+ `TyEncoder` or `TyDecoder`. These should be used for types that are only
+ serialized in crate metadata and/or the incremental cache, which is most
+ serializable types in `rustc_middle`.
+
+## Shorthands
+
+`Ty` can be deeply recursive, if each `Ty` was encoded naively then crate
+metadata would be very large. To handle this, each `TyEncoder` has a cache of
+locations in its output where it has serialized types. If a type being encoded
+is in the cache, then instead of serializing the type as usual, the byte offset
+within the file being written is encoded instead. A similar scheme is used for
+`ty::Predicate`.
+
+## `LazyValue<T>`
+
+Crate metadata is initially loaded before the `TyCtxt<'tcx>` is created, so
+some deserialization needs to be deferred from the initial loading of metadata.
+The [`LazyValue<T>`] type wraps the (relative) offset in the crate metadata where a
+`T` has been serialized. There are also some variants, [`LazyArray<T>`] and [`LazyTable<I, T>`].
+
+The `Lazy<[T]>` and `LazyTable<I, T>` type provide some functionality over
+`Lazy<Vec<T>>` and `Lazy<HashMap<I, T>>`:
+
+- It's possible to encode a `LazyArray<T>` directly from an iterator, without
+ first collecting into a `Vec<T>`.
+- Indexing into a `LazyTable<I, T>` does not require decoding entries other
+ than the one being read.
+
+**note**: `LazyValue<T>` does not cache its value after being deserialized the first
+time. Instead the query system is the main way of caching these results.
+
+## Specialization
+
+A few types, most notably `DefId`, need to have different implementations for
+different `Encoder`s. This is currently handled by ad-hoc specializations:
+`DefId` has a `default` implementation of `Encodable<E>` and a specialized one
+for `Encodable<CacheEncoder>`.
+
+[arena allocated types]: memory.md
+[AST]: the-parser.md
+[derives]: #derive-macros
+[persist incremental compilation results]: queries/incremental-compilation-in-detail.md#the-real-world-how-persistence-makes-everything-complicated
+[serialize]: https://en.wikipedia.org/wiki/Serialization
+
+[`CrateInfo`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_codegen_ssa/struct.CrateInfo.html
+[`LazyArray<T>`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/struct.LazyValue.html
+[`LazyTable<I, T>`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/struct.LazyValue.html
+[`LazyValue<T>`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/struct.LazyValue.html
+[`RefDecodable`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/codec/trait.RefDecodable.html
+[`rustc_metadata::rmeta::decoder::DecodeContext`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/decoder/struct.DecodeContext.html
+[`rustc_metadata::rmeta::encoder::EncodeContext`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_metadata/rmeta/encoder/struct.EncodeContext.html
+[`rustc_serialize`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_serialize/index.html
+[`TyDecoder`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/codec/trait.TyEncoder.html
+[`TyEncoder`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/codec/trait.TyDecoder.html
diff --git a/src/doc/rustc-dev-guide/src/stability.md b/src/doc/rustc-dev-guide/src/stability.md
new file mode 100644
index 000000000..3469ce2ba
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/stability.md
@@ -0,0 +1,155 @@
+# Stability attributes
+
+<!-- toc -->
+
+This section is about the stability attributes and schemes that allow stable
+APIs to use unstable APIs internally in the rustc standard library.
+
+For instructions on stabilizing a language feature see [Stabilizing
+Features](./stabilization_guide.md).
+
+## unstable
+
+The `#[unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")]`
+attribute explicitly marks an item as unstable. Items that are marked as
+"unstable" cannot be used without a corresponding `#![feature]` attribute on
+the crate, even on a nightly compiler. This restriction only applies across
+crate boundaries, unstable items may be used within the crate that defines
+them.
+
+The `issue` field specifies the associated GitHub [issue number]. This field is
+required and all unstable features should have an associated tracking issue. In
+rare cases where there is no sensible value `issue = "none"` is used.
+
+The `unstable` attribute infects all sub-items, where the attribute doesn't
+have to be reapplied. So if you apply this to a module, all items in the module
+will be unstable.
+
+You can make specific sub-items stable by using the `#[stable]` attribute on
+them. The stability scheme works similarly to how `pub` works. You can have
+public functions of nonpublic modules and you can have stable functions in
+unstable modules or vice versa.
+
+Note, however, that due to a [rustc bug], stable items inside unstable modules
+*are* available to stable code in that location! So, for example, stable code
+can import `core::intrinsics::transmute` even though `intrinsics` is an
+unstable module. Thus, this kind of nesting should be avoided when possible.
+
+The `unstable` attribute may also have the `soft` value, which makes it a
+future-incompatible deny-by-default lint instead of a hard error. This is used
+by the `bench` attribute which was accidentally accepted in the past. This
+prevents breaking dependencies by leveraging Cargo's lint capping.
+
+[issue number]: https://github.com/rust-lang/rust/issues
+[rustc bug]: https://github.com/rust-lang/rust/issues/15702
+
+## stable
+The `#[stable(feature = "foo", since = "1.420.69")]` attribute explicitly
+marks an item as stabilized. Note that stable functions may use unstable things in their body.
+
+## rustc_const_unstable
+
+The `#[rustc_const_unstable(feature = "foo", issue = "1234", reason = "lorem ipsum")]`
+has the same interface as the `unstable` attribute. It is used to mark
+`const fn` as having their constness be unstable. This allows you to make a
+function stable without stabilizing its constness or even just marking an existing
+stable function as `const fn` without instantly stabilizing the `const fn`ness.
+
+Furthermore this attribute is needed to mark an intrinsic as `const fn`, because
+there's no way to add `const` to functions in `extern` blocks for now.
+
+## rustc_const_stable
+
+The `#[rustc_const_stable(feature = "foo", since = "1.420.69")]` attribute explicitly marks
+a `const fn` as having its constness be `stable`. This attribute can make sense
+even on an `unstable` function, if that function is called from another
+`rustc_const_stable` function.
+
+Furthermore this attribute is needed to mark an intrinsic as callable from
+`rustc_const_stable` functions.
+
+## Stabilizing a library feature
+
+To stabilize a feature, follow these steps:
+
+0. Ask a **@T-libs-api** member to start an FCP on the tracking issue and wait for
+ the FCP to complete (with `disposition-merge`).
+1. Change `#[unstable(...)]` to `#[stable(since = "version")]`.
+ `version` should be the *current nightly*, i.e. stable+2. You can see which version is
+ the current nightly [on Forge](https://forge.rust-lang.org/#current-release-versions).
+2. Remove `#![feature(...)]` from any test or doc-test for this API. If the feature is used in the
+ compiler or tools, remove it from there as well.
+3. If applicable, change `#[rustc_const_unstable(...)]` to
+ `#[rustc_const_stable(since = "version")]`.
+4. Open a PR against `rust-lang/rust`.
+ - Add the appropriate labels: `@rustbot modify labels: +T-libs-api`.
+ - Link to the tracking issue and say "Closes #XXXXX".
+
+You can see an example of stabilizing a feature with
+[tracking issue #81656 with FCP](https://github.com/rust-lang/rust/issues/81656)
+and the associated
+[implementation PR #84642](https://github.com/rust-lang/rust/pull/84642).
+
+## allow_internal_unstable
+
+Macros and compiler desugarings expose their bodies to the call
+site. To work around not being able to use unstable things in the standard
+library's macros, there's the `#[allow_internal_unstable(feature1, feature2)]`
+attribute that allows the given features to be used in stable macros.
+
+## rustc_allow_const_fn_unstable
+
+`const fn`, while not directly exposing their body to the world, are going to get
+evaluated at compile time in stable crates. If their body does something const-unstable,
+that could lock us into certain features indefinitely by accident. Thus no unstable const
+features are allowed inside stable `const fn`.
+
+However, sometimes we do know that a feature will get
+stabilized, just not when, or there is a stable (but e.g. runtime-slow) workaround, so we
+could always fall back to some stable version if we scrapped the unstable feature.
+In those cases, the rustc_allow_const_fn_unstable attribute can be used to allow some
+unstable features in the body of a stable `const fn`.
+
+You also need to take care to uphold the `const fn` invariant that calling it at runtime and
+compile-time needs to behave the same (see also [this blog post][blog]). This means that you
+may not create a `const fn` that e.g. transmutes a memory address to an integer,
+because the addresses of things are nondeterministic and often unknown at
+compile-time.
+
+Always ping @rust-lang/wg-const-eval if you are adding more
+`rustc_allow_const_fn_unstable` attributes to any `const fn`.
+
+## staged_api
+
+Any crate that uses the `stable` or `unstable` attributes must include the
+`#![feature(staged_api)]` attribute on the crate.
+
+## deprecated
+
+Deprecations in the standard library are nearly identical to deprecations in
+user code. When `#[deprecated]` is used on an item, it must also have a `stable`
+or `unstable `attribute.
+
+`deprecated` has the following form:
+
+```rust,ignore
+#[deprecated(
+ since = "1.38.0",
+ note = "explanation for deprecation",
+ suggestion = "other_function"
+)]
+```
+
+The `suggestion` field is optional. If given, it should be a string that can be
+used as a machine-applicable suggestion to correct the warning. This is
+typically used when the identifier is renamed, but no other significant changes
+are necessary. When the `suggestion` field is used, you need to have
+`#![feature(deprecated_suggestion)]` at the crate root.
+
+Another difference from user code is that the `since` field is actually checked
+against the current version of `rustc`. If `since` is in a future version, then
+the `deprecated_in_future` lint is triggered which is default `allow`, but most
+of the standard library raises it to a warning with
+`#![warn(deprecated_in_future)]`.
+
+[blog]: https://www.ralfj.de/blog/2018/07/19/const.html
diff --git a/src/doc/rustc-dev-guide/src/stabilization_guide.md b/src/doc/rustc-dev-guide/src/stabilization_guide.md
new file mode 100644
index 000000000..454cd0f27
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/stabilization_guide.md
@@ -0,0 +1,210 @@
+# Request for stabilization
+
+**NOTE**: this page is about stabilizing language features.
+For stabilizing *library* features, see [Stabilizing a library feature].
+
+[Stabilizing a library feature]: ./stability.md#stabilizing-a-library-feature
+
+Once an unstable feature has been well-tested with no outstanding
+concern, anyone may push for its stabilization. It involves the
+following steps:
+
+<!-- toc -->
+
+## Documentation PRs
+
+<a name="updating-documentation"></a>
+
+If any documentation for this feature exists, it should be
+in the [`Unstable Book`], located at [`src/doc/unstable-book`].
+If it exists, the page for the feature gate should be removed.
+
+If there was documentation there, integrating it into the
+existing documentation is needed.
+
+If there wasn't documentation there, it needs to be added.
+
+Places that may need updated documentation:
+
+- [The Reference]: This must be updated, in full detail.
+- [The Book]: This may or may not need updating, depends.
+ If you're not sure, please open an issue on this repository
+ and it can be discussed.
+- standard library documentation: As needed. Language features
+ often don't need this, but if it's a feature that changes
+ how good examples are written, such as when `?` was added
+ to the language, updating examples is important.
+- [Rust by Example]: As needed.
+
+Prepare PRs to update documentation involving this new feature
+for repositories mentioned above. Maintainers of these repositories
+will keep these PRs open until the whole stabilization process
+has completed. Meanwhile, we can proceed to the next step.
+
+## Write a stabilization report
+
+Find the tracking issue of the feature, and create a short
+stabilization report. Essentially this would be a brief summary
+of the feature plus some links to test cases showing it works
+as expected, along with a list of edge cases that came up
+and were considered. This is a minimal "due diligence" that
+we do before stabilizing.
+
+The report should contain:
+
+- A summary, showing examples (e.g. code snippets) what is
+ enabled by this feature.
+- Links to test cases in our test suite regarding this feature
+ and describe the feature's behavior on encountering edge cases.
+- Links to the documentations (the PRs we have made in the
+ previous steps).
+- Any other relevant information.
+- The resolutions of any unresolved questions if the stabilization
+ is for an RFC.
+
+Examples of stabilization reports can be found in
+[rust-lang/rust#44494][report1] and [rust-lang/rust#28237][report2] (these links
+will bring you directly to the comment containing the stabilization report).
+
+[report1]: https://github.com/rust-lang/rust/issues/44494#issuecomment-360191474
+[report2]: https://github.com/rust-lang/rust/issues/28237#issuecomment-363374130
+
+## FCP
+
+If any member of the team responsible for tracking this
+feature agrees with stabilizing this feature, they will
+start the FCP (final-comment-period) process by commenting
+
+```text
+@rfcbot fcp merge
+```
+
+The rest of the team members will review the proposal. If the final
+decision is to stabilize, we proceed to do the actual code modification.
+
+## Stabilization PR
+
+*This is for stabilizing language features. If you are stabilizing a library
+feature, see [the stabilization chapter of the std dev guide][std-guide-stabilization] instead.*
+
+Once we have decided to stabilize a feature, we need to have
+a PR that actually makes that stabilization happen. These kinds
+of PRs are a great way to get involved in Rust, as they take
+you on a little tour through the source code.
+
+Here is a general guide to how to stabilize a feature --
+every feature is different, of course, so some features may
+require steps beyond what this guide talks about.
+
+Note: Before we stabilize any feature, it's the rule that it
+should appear in the documentation.
+
+### Determining the stabilization version
+
+The version in which the feature will be stabilized *must* match
+the value of [the `src/version` file in `master`][src-version] when the PR is merged.
+
+It's worth checking [the version schedule on the Forge][forge-versions] to see whether
+changes are coming soon. You'll usually use the version labelled "Nightly".
+"Nightly" is two versions higher than the current stable release,
+since what's currently in beta will be the next stable release,
+and any changes you're making now will be in the one after that.
+
+No PR is merged instantly, so you'll want to be careful around release time.
+The version bump happens [the Friday before][forge-release-process] the stable release,
+not the same time as the release. So if you're opening a PR shortly before then,
+be prepared to update the version, or consider just opening it for one version
+higher than the current nightly, with a note saying not to merge until
+after the upcoming version bump.
+
+### Updating the feature-gate listing
+
+There is a central listing of feature-gates in
+[`compiler/rustc_feature`]. Search for the `declare_features!`
+macro. There should be an entry for the feature you are aiming
+to stabilize, something like (this example is taken from
+[rust-lang/rust#32409]:
+
+```rust,ignore
+// pub(restricted) visibilities (RFC 1422)
+(active, pub_restricted, "1.9.0", Some(32409)),
+```
+
+The above line should be moved down to the area for "accepted"
+features, declared below in a separate call to `declare_features!`.
+When it is done, it should look like:
+
+```rust,ignore
+// pub(restricted) visibilities (RFC 1422)
+(accepted, pub_restricted, "1.31.0", Some(32409)),
+// note that we changed this
+```
+
+(The version here is the one discussed in the previous section.)
+
+### Removing existing uses of the feature-gate
+
+Next search for the feature string (in this case, `pub_restricted`)
+in the codebase to find where it appears. Change uses of
+`#![feature(XXX)]` from the `std` and any rustc crates (this includes test folders
+under `library/` and `compiler/` but not the toplevel `test/` one) to be
+`#![cfg_attr(bootstrap, feature(XXX))]`. This includes the feature-gate
+only for stage0, which is built using the current beta (this is
+needed because the feature is still unstable in the current beta).
+
+Also, remove those strings from any tests. If there are tests
+specifically targeting the feature-gate (i.e., testing that the
+feature-gate is required to use the feature, but nothing else),
+simply remove the test.
+
+### Do not require the feature-gate to use the feature
+
+Most importantly, remove the code which flags an error if the
+feature-gate is not present (since the feature is now considered
+stable). If the feature can be detected because it employs some
+new syntax, then a common place for that code to be is in the
+same `compiler/rustc_ast_passes/src/feature_gate.rs`.
+For example, you might see code like this:
+
+```rust,ignore
+gate_feature_post!(&self, pub_restricted, span,
+ "`pub(restricted)` syntax is experimental");
+```
+
+This `gate_feature_post!` macro prints an error if the
+`pub_restricted` feature is not enabled. It is not needed
+now that `#[pub_restricted]` is stable.
+
+For more subtle features, you may find code like this:
+
+```rust,ignore
+if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ }
+```
+
+This `pub_restricted` field (obviously named after the feature)
+would ordinarily be false if the feature flag is not present
+and true if it is. So transform the code to assume that the field
+is true. In this case, that would mean removing the `if` and
+leaving just the `/* XXX */`.
+
+```rust,ignore
+if self.tcx.sess.features.borrow().pub_restricted { /* XXX */ }
+becomes
+/* XXX */
+
+if self.tcx.sess.features.borrow().pub_restricted && something { /* XXX */ }
+ becomes
+if something { /* XXX */ }
+```
+
+[rust-lang/rust#32409]: https://github.com/rust-lang/rust/issues/32409
+[std-guide-stabilization]: https://std-dev-guide.rust-lang.org/feature-lifecycle/stabilization.html
+[src-version]: https://github.com/rust-lang/rust/blob/master/src/version
+[forge-versions]: https://forge.rust-lang.org/#current-release-versions
+[forge-release-process]: https://forge.rust-lang.org/release/process.html
+[`compiler/rustc_feature`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_feature/index.html
+[The Reference]: https://github.com/rust-lang/reference
+[The Book]: https://github.com/rust-lang/book
+[Rust by Example]: https://github.com/rust-lang/rust-by-example
+[`Unstable Book`]: https://doc.rust-lang.org/unstable-book/index.html
+[`src/doc/unstable-book`]: https://github.com/rust-lang/rust/tree/master/src/doc/unstable-book
diff --git a/src/doc/rustc-dev-guide/src/syntax-intro.md b/src/doc/rustc-dev-guide/src/syntax-intro.md
new file mode 100644
index 000000000..43ef44577
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/syntax-intro.md
@@ -0,0 +1,13 @@
+# Syntax and the AST
+
+Working directly with source code is very inconvenient and error-prone. Thus,
+before we do anything else, we convert raw source code into an AST. It turns
+out that doing even this involves a lot of work, including lexing, parsing,
+macro expansion, name resolution, conditional compilation, feature-gate
+checking, and validation of the AST. In this chapter, we take a look at all
+of these steps.
+
+Notably, there isn't always a clean ordering between these tasks. For example,
+macro expansion relies on name resolution to resolve the names of macros and
+imports. And parsing requires macro expansion, which in turn may require
+parsing the output of the macro.
diff --git a/src/doc/rustc-dev-guide/src/test-implementation.md b/src/doc/rustc-dev-guide/src/test-implementation.md
new file mode 100644
index 000000000..09a66cdc9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/test-implementation.md
@@ -0,0 +1,159 @@
+# The `#[test]` attribute
+
+<!-- toc -->
+
+Today, Rust programmers rely on a built in attribute called `#[test]`. All
+you have to do is mark a function as a test and include some asserts like so:
+
+```rust,ignore
+#[test]
+fn my_test() {
+ assert!(2+2 == 4);
+}
+```
+
+When this program is compiled using `rustc --test` or `cargo test`, it will
+produce an executable that can run this, and any other test function. This
+method of testing allows tests to live alongside code in an organic way. You
+can even put tests inside private modules:
+
+```rust,ignore
+mod my_priv_mod {
+ fn my_priv_func() -> bool {}
+
+ #[test]
+ fn test_priv_func() {
+ assert!(my_priv_func());
+ }
+}
+```
+
+Private items can thus be easily tested without worrying about how to expose
+them to any sort of external testing apparatus. This is key to the
+ergonomics of testing in Rust. Semantically, however, it's rather odd.
+How does any sort of `main` function invoke these tests if they're not visible?
+What exactly is `rustc --test` doing?
+
+`#[test]` is implemented as a syntactic transformation inside the compiler's
+[`rustc_ast` crate][rustc_ast]. Essentially, it's a fancy macro, that
+rewrites the crate in 3 steps:
+
+## Step 1: Re-Exporting
+
+As mentioned earlier, tests can exist inside private modules, so we need a
+way of exposing them to the main function, without breaking any existing
+code. To that end, `rustc_ast` will create local modules called
+`__test_reexports` that recursively reexport tests. This expansion translates
+the above example into:
+
+```rust,ignore
+mod my_priv_mod {
+ fn my_priv_func() -> bool {}
+
+ pub fn test_priv_func() {
+ assert!(my_priv_func());
+ }
+
+ pub mod __test_reexports {
+ pub use super::test_priv_func;
+ }
+}
+```
+
+Now, our test can be accessed as
+`my_priv_mod::__test_reexports::test_priv_func`. For deeper module
+structures, `__test_reexports` will reexport modules that contain tests, so a
+test at `a::b::my_test` becomes
+`a::__test_reexports::b::__test_reexports::my_test`. While this process seems
+pretty safe, what happens if there is an existing `__test_reexports` module?
+The answer: nothing.
+
+To explain, we need to understand [how the AST represents
+identifiers][Ident]. The name of every function, variable, module, etc. is
+not stored as a string, but rather as an opaque [Symbol][Symbol] which is
+essentially an ID number for each identifier. The compiler keeps a separate
+hashtable that allows us to recover the human-readable name of a Symbol when
+necessary (such as when printing a syntax error). When the compiler generates
+the `__test_reexports` module, it generates a new Symbol for the identifier,
+so while the compiler-generated `__test_reexports` may share a name with your
+hand-written one, it will not share a Symbol. This technique prevents name
+collision during code generation and is the foundation of Rust's macro
+hygiene.
+
+## Step 2: Harness Generation
+
+Now that our tests are accessible from the root of our crate, we need to do
+something with them. `rustc_ast` generates a module like so:
+
+```rust,ignore
+#[main]
+pub fn main() {
+ extern crate test;
+ test::test_main_static(&[&path::to::test1, /*...*/]);
+}
+```
+
+where `path::to::test1` is a constant of type `test::TestDescAndFn`.
+
+While this transformation is simple, it gives us a lot of insight into how
+tests are actually run. The tests are aggregated into an array and passed to
+a test runner called `test_main_static`. We'll come back to exactly what
+`TestDescAndFn` is, but for now, the key takeaway is that there is a crate
+called [`test`][test] that is part of Rust core, that implements all of the
+runtime for testing. `test`'s interface is unstable, so the only stable way
+to interact with it is through the `#[test]` macro.
+
+## Step 3: Test Object Generation
+
+If you've written tests in Rust before, you may be familiar with some of the
+optional attributes available on test functions. For example, a test can be
+annotated with `#[should_panic]` if we expect the test to cause a panic. It
+looks something like this:
+
+```rust,ignore
+#[test]
+#[should_panic]
+fn foo() {
+ panic!("intentional");
+}
+```
+
+This means our tests are more than just simple functions, they have
+configuration information as well. `test` encodes this configuration data
+into a struct called [`TestDesc`][TestDesc]. For each test function in a
+crate, `rustc_ast` will parse its attributes and generate a `TestDesc`
+instance. It then combines the `TestDesc` and test function into the
+predictably named `TestDescAndFn` struct, that `test_main_static` operates
+on. For a given test, the generated `TestDescAndFn` instance looks like so:
+
+```rust,ignore
+self::test::TestDescAndFn{
+ desc: self::test::TestDesc{
+ name: self::test::StaticTestName("foo"),
+ ignore: false,
+ should_panic: self::test::ShouldPanic::Yes,
+ allow_fail: false,
+ },
+ testfn: self::test::StaticTestFn(||
+ self::test::assert_test_result(::crate::__test_reexports::foo())),
+}
+```
+
+Once we've constructed an array of these test objects, they're passed to the
+test runner via the harness generated in step 2.
+
+## Inspecting the generated code
+
+On nightly rust, there's an unstable flag called `unpretty` that you can use
+to print out the module source after macro expansion:
+
+```bash
+$ rustc my_mod.rs -Z unpretty=hir
+```
+
+[test]: https://doc.rust-lang.org/test/index.html
+[TestDesc]: https://doc.rust-lang.org/test/struct.TestDesc.html
+[Symbol]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/symbol/struct.Symbol.html
+[Ident]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/symbol/struct.Ident.html
+[eRFC]: https://github.com/rust-lang/rfcs/blob/master/text/2318-custom-test-frameworks.md
+[rustc_ast]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_ast
diff --git a/src/doc/rustc-dev-guide/src/tests/adding.md b/src/doc/rustc-dev-guide/src/tests/adding.md
new file mode 100644
index 000000000..2fb1e0b65
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/adding.md
@@ -0,0 +1,195 @@
+# Adding new tests
+
+<!-- toc -->
+
+**In general, we expect every PR that fixes a bug in rustc to come
+accompanied by a regression test of some kind.** This test should fail
+in master but pass after the PR. These tests are really useful for
+preventing us from repeating the mistakes of the past.
+
+The first thing to decide is which kind of test to add.
+This will depend on the nature of the change and what you want to exercise.
+Here are some rough guidelines:
+
+- The majority of compiler tests are done with [compiletest].
+ - The majority of compiletest tests are [UI](ui.md) tests in the [`src/test/ui`] directory.
+- Changes to the standard library are usually tested within the standard library itself.
+ - The majority of standard library tests are written as doctests,
+ which illustrate and exercise typical API behavior.
+ - Additional [unit tests](intro.md#package-tests) should go in
+ `library/${crate}/tests` (where `${crate}` is usually `core`, `alloc`, or `std`).
+- If the code is part of an isolated system, and you are not testing compiler output,
+ consider using a [unit or integration test](intro.md#package-tests).
+- Need to run rustdoc? Prefer a `rustdoc` or `rustdoc-ui` test.
+ Occasionally you'll need `rustdoc-js` as well.
+- Other compiletest test suites are generally used for special purposes:
+ - Need to run gdb or lldb? Use the `debuginfo` test suite.
+ - Need to inspect LLVM IR or MIR IR? Use the `codegen` or `mir-opt` test suites.
+ - Need to inspect the resulting binary in some way?
+ Then use `run-make`.
+ - Check out the [compiletest] chapter for more specialized test suites.
+
+[compiletest]: compiletest.md
+[`src/test/ui`]: https://github.com/rust-lang/rust/tree/master/src/test/ui/
+
+## UI test walkthrough
+
+The following is a basic guide for creating a [UI test](ui.md), which is one
+of the most common compiler tests.
+For this tutorial, we'll be adding a test for an async error message.
+
+### Step 1. Add a test file
+
+The first step is to create a Rust source file somewhere in the
+[`src/test/ui`] tree.
+When creating a test, do your best to find a good location and name (see [Test
+organization](ui.md#test-organization) for more).
+Since naming is the hardest part of development, everything should be downhill
+from here!
+
+Let's place our async test at `src/test/ui/async-await/await-without-async.rs`:
+
+```rust,ignore
+// Check what happens when using await in a non-async fn.
+// edition:2018
+
+async fn foo() {}
+
+fn bar() {
+ foo().await
+}
+
+fn main() {}
+```
+
+A few things to notice about our test:
+
+* The top should start with a short comment that [explains what the test is
+ for](#explanatory_comment).
+* The `// edition:2018` comment is called a [header](headers.md) which provides
+ instructions to compiletest on how to build the test.
+ Here we need to set the edition for `async` to work (the default is 2015).
+* Following that is the source of the test.
+ Try to keep it succinct and to the point.
+ This may require some effort if you are trying to minimize an example from a
+ bug report.
+* We end this test with an empty `fn main` function.
+ This is because the default for UI tests is a `bin` crate-type,
+ and we don't want the "main not found" error in our test.
+ Alternatively, you could add `#![crate_type="lib"]`.
+
+### Step 2. Generate the expected output
+
+The next step is to create the expected output from the compiler.
+This can be done with the `--bless` option:
+
+```sh
+./x.py test src/test/ui/async-await/await-without-async.rs --bless
+```
+
+This will build the compiler (if it hasn't already been built), compile the
+test, and place the output of the compiler in a file called
+`src/test/ui/async-await/await-without-async.stderr`.
+
+However, this step will fail!
+You should see an error message, something like this:
+
+> error: /rust/src/test/ui/async-await/await-without-async.rs:7: unexpected
+> error: '7:10: 7:16: `await` is only allowed inside `async` functions and
+> blocks [E0728]'
+
+### Step 3. Add error annotations
+
+Every error needs to be annotated with a comment in the source with the text
+of the error.
+In this case, we can add the following comment to our test file:
+
+```rust,ignore
+fn bar() {
+ foo().await
+//~^ ERROR `await` is only allowed inside `async` functions and blocks
+}
+```
+
+The `//~^` squiggle caret comment tells compiletest that the error belongs to
+the previous line (more on this in the [Error
+annotations](ui.md#error-annotations) section).
+
+Save that, and run the test again:
+
+```sh
+./x.py test src/test/ui/async-await/await-without-async.rs
+```
+
+It should now pass, yay!
+
+### Step 4. Review the output
+
+Somewhat hand-in-hand with the previous step, you should inspect the `.stderr`
+file that was created to see if it looks like how you expect.
+If you are adding a new diagnostic message, now would be a good time to
+also consider how readable the message looks overall, particularly for
+people new to Rust.
+
+Our example `src/test/ui/async-await/await-without-async.stderr` file should
+look like this:
+
+```text
+error[E0728]: `await` is only allowed inside `async` functions and blocks
+ --> $DIR/await-without-async.rs:7:10
+ |
+LL | fn bar() {
+ | --- this is not `async`
+LL | foo().await
+ | ^^^^^^ only allowed inside `async` functions and blocks
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0728`.
+```
+
+You may notice some things look a little different than the regular
+compiler output.
+The `$DIR` removes the path information which will differ between systems.
+The `LL` values replace the line numbers.
+That helps avoid small changes in the source from triggering large diffs.
+See the [Normalization](ui.md#normalization) section for more.
+
+Around this stage, you may need to iterate over the last few steps a few times
+to tweak your test, re-bless the test, and re-review the output.
+
+### Step 5. Check other tests
+
+Sometimes when adding or changing a diagnostic message, this will affect
+other tests in the test suite.
+The final step before posting a PR is to check if you have affected anything else.
+Running the UI suite is usually a good start:
+
+```sh
+./x.py test src/test/ui
+```
+
+If other tests start failing, you may need to investigate what has changed
+and if the new output makes sense.
+You may also need to re-bless the output with the `--bless` flag.
+
+<a name="explanatory_comment"></a>
+
+## Comment explaining what the test is about
+
+The first comment of a test file should **summarize the point
+of the test**, and highlight what is important about it.
+If there is an issue number associated with the test, include
+the issue number.
+
+This comment doesn't have to be super extensive. Just something like
+"Regression test for #18060: match arms were matching in the wrong
+order." might already be enough.
+
+These comments are very useful to others later on when your test
+breaks, since they often can highlight what the problem is. They are
+also useful if for some reason the tests need to be refactored, since
+they let others know which parts of the test were important (often a
+test must be rewritten because it no longer tests what is was meant to
+test, and then it's useful to know what it *was* meant to test
+exactly).
diff --git a/src/doc/rustc-dev-guide/src/tests/ci.md b/src/doc/rustc-dev-guide/src/tests/ci.md
new file mode 100644
index 000000000..21f834130
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/ci.md
@@ -0,0 +1,73 @@
+# Testing with CI
+
+## Testing infrastructure
+
+When a Pull Request is opened on GitHub, [GitHub Actions] will automatically
+launch a build that will run all tests on some configurations
+(x86_64-gnu-llvm-12 linux. x86_64-gnu-tools linux, mingw-check linux).
+In essence, each runs `./x.py test` with various different options.
+
+The integration bot [bors] is used for coordinating merges to the master branch.
+When a PR is approved, it goes into a [queue] where merges are tested one at a
+time on a wide set of platforms using GitHub Actions. Due to the limit on the
+number of parallel jobs, we run CI under the [rust-lang-ci] organization except
+for PRs.
+Most platforms only run the build steps, some run a restricted set of tests,
+only a subset run the full suite of tests (see Rust's [platform tiers]).
+
+If everything passes, then all of the distribution artifacts that were
+generated during the CI run are published.
+
+[GitHub Actions]: https://github.com/rust-lang/rust/actions
+[rust-lang-ci]: https://github.com/rust-lang-ci/rust/actions
+[bors]: https://github.com/servo/homu
+[queue]: https://bors.rust-lang.org/queue/rust
+[platform tiers]: https://forge.rust-lang.org/release/platform-support.html#rust-platform-support
+
+## Using CI to test
+
+In some cases, a PR may run into problems with running tests on a particular
+platform or configuration.
+If you can't run those tests locally, don't hesitate to use CI resources to
+try out a fix.
+
+As mentioned above, opening or updating a PR will only run on a small subset
+of configurations.
+Only when a PR is approved will it go through the full set of test configurations.
+However, you can try one of those configurations in your PR before it is approved.
+For example, if a Windows build fails, but you don't have access to a Windows
+machine, you can try running the Windows job that failed on CI within your PR
+after pushing a possible fix.
+
+To do this, you'll need to edit [`src/ci/github-actions/ci.yml`].
+The `jobs` section defines the jobs that will run.
+The `jobs.pr` section defines everything that will run in a push to a PR.
+The `jobs.auto` section defines the full set of tests that are run after a PR is approved.
+You can copy one of the definitions from the `auto` section up to the `pr` section.
+
+For example, the `x86_64-msvc-1` and `x86_64-msvc-2` jobs are responsible for
+running the 64-bit MSVC tests.
+You can copy those up to the `jobs.pr.strategy.matrix.include` section with
+the other jobs.
+
+The comment at the top of `ci.yml` will tell you to run this command:
+
+```sh
+./x.py run src/tools/expand-yaml-anchors
+````
+
+This will generate the true [`.github/workflows/ci.yml`] which is what GitHub
+Actions uses.
+
+Then, you can commit those two files and push to GitHub.
+GitHub Actions should launch the tests.
+
+After you have finished, don't forget to remove any changes you have made to `ci.yml`.
+
+Although you are welcome to use CI, just be conscientious that this is a shared
+resource with limited concurrency.
+Try not to enable too many jobs at once (one or two should be sufficient in
+most cases).
+
+[`src/ci/github-actions/ci.yml`]: https://github.com/rust-lang/rust/blob/master/src/ci/github-actions/ci.yml
+[`.github/workflows/ci.yml`]: https://github.com/rust-lang/rust/blob/master/.github/workflows/ci.yml#L1
diff --git a/src/doc/rustc-dev-guide/src/tests/compiletest.md b/src/doc/rustc-dev-guide/src/tests/compiletest.md
new file mode 100644
index 000000000..5c3dcf54b
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/compiletest.md
@@ -0,0 +1,526 @@
+# Compiletest
+
+<!-- toc -->
+
+## Introduction
+
+`compiletest` is the main test harness of the Rust test suite.
+It allows test authors to organize large numbers of tests
+(the Rust compiler has many thousands),
+efficient test execution (parallel execution is supported),
+and allows the test author to configure behavior and expected results of both
+individual and groups of tests.
+
+`compiletest` may check test code for success, for runtime failure,
+or for compile-time failure.
+Tests are typically organized as a Rust source file with annotations in
+comments before and/or within the test code.
+These comments serve to direct `compiletest` on if or how to run the test,
+what behavior to expect, and more.
+See [header commands](headers.md) and the test suite documentation below
+for more details on these annotations.
+
+See the [Adding new tests](adding.md) chapter for a tutorial on creating a new
+test, and the [Running tests](running.md) chapter on how to run the test
+suite.
+
+## Test suites
+
+All of the tests are in the [`src/test`] directory.
+The tests are organized into "suites", with each suite in a separate subdirectory.
+Each test suite behaves a little differently, with different compiler behavior
+and different checks for correctness.
+For example, the [`src/test/incremental`] directory contains tests for
+incremental compilation.
+The various suites are defined in [`src/tools/compiletest/src/common.rs`] in
+the `pub enum Mode` declaration.
+
+The following test suites are available, with links for more information:
+
+- [`ui`](ui.md) — tests that check the stdout/stderr from the compilation
+ and/or running the resulting executable
+- `ui-fulldeps` — `ui` tests which require a linkable build of `rustc` (such
+ as using `extern crate rustc_span;` or used as a plugin)
+- [`pretty`](#pretty-printer-tests) — tests for pretty printing
+- [`incremental`](#incremental-tests) — tests incremental compilation behavior
+- [`debuginfo`](#debuginfo-tests) — tests for debuginfo generation running debuggers
+- [`codegen`](#codegen-tests) — tests for code generation
+- [`codegen-units`](#codegen-units-tests) — tests for codegen unit partitioning
+- [`assembly`](#assembly-tests) — verifies assembly output
+- [`mir-opt`](#mir-opt-tests) — tests for MIR generation
+- [`run-make`](#run-make-tests) — general purpose tests using a Makefile
+- `run-make-fulldeps` — `run-make` tests which require a linkable build of `rustc`,
+ or the rust demangler
+- [`run-pass-valgrind`](#valgrind-tests) — tests run with Valgrind
+- [Rustdoc tests](../rustdoc.md#tests):
+ - `rustdoc` — tests for rustdoc, making sure that the generated files
+ contain the expected documentation.
+ - `rustdoc-gui` — tests for rustdoc's GUI using a web browser.
+ - `rustdoc-js` — tests to ensure the rustdoc search is working as expected.
+ - `rustdoc-js-std` — tests to ensure the rustdoc search is working as expected
+ (run specifically on the std docs).
+ - `rustdoc-json` — tests on the JSON output of rustdoc.
+ - `rustdoc-ui` — tests on the terminal output of rustdoc.
+
+[`src/test`]: https://github.com/rust-lang/rust/blob/master/src/test
+[`src/tools/compiletest/src/common.rs`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest/src/common.rs
+
+### Pretty-printer tests
+
+The tests in [`src/test/pretty`] exercise the "pretty-printing" functionality of `rustc`.
+The `-Z unpretty` CLI option for `rustc` causes it to translate the input source
+into various different formats, such as the Rust source after macro expansion.
+
+The pretty-printer tests have several [header commands](headers.md) described below.
+These commands can significantly change the behavior of the test, but the
+default behavior without any commands is to:
+
+1. Run `rustc -Zunpretty=normal` on the source file
+2. Run `rustc -Zunpretty=normal` on the output of the previous step
+3. The output of the previous two steps should be the same.
+4. Run `rustc -Zno-codegen` on the output to make sure that it can type check
+ (this is similar to running `cargo check`)
+
+If any of the commands above fail, then the test fails.
+
+The header commands for pretty-printing tests are:
+
+* `pretty-mode` specifies the mode pretty-print tests should run in
+ (that is, the argument to `-Zunpretty`).
+ The default is `normal` if not specified.
+* `pretty-compare-only` causes a pretty test to only compare the pretty-printed output
+ (stopping after step 3 from above).
+ It will not try to compile the expanded output to type check it.
+ This is needed for a pretty-mode that does not expand to valid
+ Rust, or for other situations where the expanded output cannot be compiled.
+* `pretty-expanded` allows a pretty test to also check that the expanded
+ output can be type checked.
+ That is, after the steps above, it does two more steps:
+
+ > 5. Run `rustc -Zunpretty=expanded` on the original source
+ > 6. Run `rustc -Zno-codegen` on the expanded output to make sure that it can type check
+
+ This is needed because not all code can be compiled after being expanded.
+ Pretty tests should specify this if they can.
+ An example where this cannot be used is if the test includes `println!`.
+ That macro expands to reference private internal functions of the standard
+ library that cannot be called directly without the `fmt_internals` feature
+ gate.
+
+ More history about this may be found in
+ [#23616](https://github.com/rust-lang/rust/issues/23616#issuecomment-484999901).
+* `pp-exact` is used to ensure a pretty-print test results in specific output.
+ If specified without a value, then it means the pretty-print output should
+ match the original source.
+ If specified with a value, as in `// pp-exact:foo.pp`,
+ it will ensure that the pretty-printed output matches the contents of the given file.
+ Otherwise, if `pp-exact` is not specified, then the pretty-printed output
+ will be pretty-printed one more time, and the output of the two
+ pretty-printing rounds will be compared to ensure that the pretty-printed
+ output converges to a steady state.
+
+[`src/test/pretty`]: https://github.com/rust-lang/rust/tree/master/src/test/pretty
+
+### Incremental tests
+
+The tests in [`src/test/incremental`] exercise incremental compilation.
+They use [revision headers](#revisions) to tell compiletest to run the
+compiler in a series of steps.
+Compiletest starts with an empty directory with the `-C incremental` flag, and
+then runs the compiler for each revision, reusing the incremental results from
+previous steps.
+The revisions should start with:
+
+* `rpass` — the test should compile and run successfully
+* `rfail` — the test should compile successfully, but the executable should fail to run
+* `cfail` — the test should fail to compile
+
+To make the revisions unique, you should add a suffix like `rpass1` and `rpass2`.
+
+To simulate changing the source, compiletest also passes a `--cfg` flag with
+the current revision name.
+For example, this will run twice, simulating changing a function:
+
+```rust,ignore
+// revisions: rpass1 rpass2
+
+#[cfg(rpass1)]
+fn foo() {
+ println!("one");
+}
+
+#[cfg(rpass2)]
+fn foo() {
+ println!("two");
+}
+
+fn main() { foo(); }
+```
+
+`cfail` tests support the `forbid-output` header to specify that a certain
+substring must not appear anywhere in the compiler output.
+This can be useful to ensure certain errors do not appear, but this can be
+fragile as error messages change over time, and a test may no longer be
+checking the right thing but will still pass.
+
+`cfail` tests support the `should-ice` header to specify that a test should
+cause an Internal Compiler Error (ICE).
+This is a highly specialized header to check that the incremental cache
+continues to work after an ICE.
+
+[`src/test/incremental`]: https://github.com/rust-lang/rust/tree/master/src/test/incremental
+
+
+### Debuginfo tests
+
+The tests in [`src/test/debuginfo`] test debuginfo generation.
+They build a program, launch a debugger, and issue commands to the debugger.
+A single test can work with cdb, gdb, and lldb.
+
+Most tests should have the `// compile-flags: -g` header or something similar
+to generate the appropriate debuginfo.
+
+To set a breakpoint on a line, add a `// #break` comment on the line.
+
+The debuginfo tests consist of a series of debugger commands along with
+"check" lines which specify output that is expected from the debugger.
+
+The commands are comments of the form `// $DEBUGGER-command:$COMMAND` where
+`$DEBUGGER` is the debugger being used and `$COMMAND` is the debugger command
+to execute.
+The debugger values can be:
+
+* `cdb`
+* `gdb`
+* `gdbg` — GDB without Rust support (versions older than 7.11)
+* `gdbr` — GDB with Rust support
+* `lldb`
+* `lldbg` — LLDB without Rust support
+* `lldbr` — LLDB with Rust support (this no longer exists)
+
+The command to check the output are of the form `// $DEBUGGER-check:$OUTPUT`
+where `$OUTPUT` is the output to expect.
+
+For example, the following will build the test, start the debugger, set a
+breakpoint, launch the program, inspect a value, and check what the debugger
+prints:
+
+```rust,ignore
+// compile-flags: -g
+
+// lldb-command: run
+// lldb-command: print foo
+// lldb-check: $0 = 123
+
+fn main() {
+ let foo = 123;
+ b(); // #break
+}
+
+fn b() {}
+```
+
+The following [header commands](headers.md) are available to disable a
+test based on the debugger currently being used:
+
+* `min-cdb-version: 10.0.18317.1001` — ignores the test if the version of cdb
+ is below the given version
+* `min-gdb-version: 8.2` — ignores the test if the version of gdb is below the
+ given version
+* `ignore-gdb-version: 9.2` — ignores the test if the version of gdb is equal
+ to the given version
+* `ignore-gdb-version: 7.11.90 - 8.0.9` — ignores the test if the version of
+ gdb is in a range (inclusive)
+* `min-lldb-version: 310` — ignores the test if the version of lldb is below
+ the given version
+* `rust-lldb` — ignores the test if lldb is not contain the Rust plugin.
+ NOTE: The "Rust" version of LLDB doesn't exist anymore, so this will always be ignored.
+ This should probably be removed.
+
+[`src/test/debuginfo`]: https://github.com/rust-lang/rust/tree/master/src/test/debuginfo
+
+
+### Codegen tests
+
+The tests in [`src/test/codegen`] test LLVM code generation.
+They compile the test with the `--emit=llvm-ir` flag to emit LLVM IR.
+They then run the LLVM [FileCheck] tool.
+The test is annotated with various `// CHECK` comments to check the generated code.
+See the FileCheck documentation for a tutorial and more information.
+
+See also the [assembly tests](#assembly-tests) for a similar set of tests.
+
+[`src/test/codegen`]: https://github.com/rust-lang/rust/tree/master/src/test/codegen
+[FileCheck]: https://llvm.org/docs/CommandGuide/FileCheck.html
+
+
+### Assembly tests
+
+The tests in [`src/test/assembly`] test LLVM assembly output.
+They compile the test with the `--emit=asm` flag to emit a `.s` file with the
+assembly output.
+They then run the LLVM [FileCheck] tool.
+
+Each test should be annotated with the `// assembly-output:` header
+with a value of either `emit-asm` or `ptx-linker` to indicate
+the type of assembly output.
+
+Then, they should be annotated with various `// CHECK` comments to check the
+assembly output.
+See the FileCheck documentation for a tutorial and more information.
+
+See also the [codegen tests](#codegen-tests) for a similar set of tests.
+
+[`src/test/assembly`]: https://github.com/rust-lang/rust/tree/master/src/test/assembly
+
+
+### Codegen-units tests
+
+The tests in [`src/test/codegen-units`] test the
+[monomorphization](../backend/monomorph.md) collector and CGU partitioning.
+
+These tests work by running `rustc` with a flag to print the result of the
+monomorphization collection pass, and then special annotations in the file are
+used to compare against that.
+
+Each test should be annotated with the `// compile-flags:-Zprint-mono-items=VAL`
+header with the appropriate VAL to instruct `rustc` to print the
+monomorphization information.
+
+Then, the test should be annotated with comments of the form `//~ MONO_ITEM name`
+where `name` is the monomorphized string printed by rustc like `fn <u32 as Trait>::foo`.
+
+To check for CGU partitioning, a comment of the form `//~ MONO_ITEM name @@ cgu`
+where `cgu` is a space separated list of the CGU names and the linkage
+information in brackets.
+For example: `//~ MONO_ITEM static function::FOO @@ statics[Internal]`
+
+[`src/test/codegen-units`]: https://github.com/rust-lang/rust/tree/master/src/test/codegen-units
+
+
+### Mir-opt tests
+
+The tests in [`src/test/mir-opt`] check parts of the generated MIR to make
+sure it is generated correctly and is doing the expected optimizations.
+Check out the [MIR Optimizations](../mir/optimizations.md) chapter for more.
+
+Compiletest will build the test with several flags to dump the MIR output and
+set a baseline for optimizations:
+
+* `-Copt-level=1`
+* `-Zdump-mir=all`
+* `-Zmir-opt-level=4`
+* `-Zvalidate-mir`
+* `-Zdump-mir-exclude-pass-number`
+
+The test should be annotated with `// EMIT_MIR` comments that specify files that
+will contain the expected MIR output.
+You can use `x.py test --bless` to create the initial expected files.
+
+There are several forms the `EMIT_MIR` comment can take:
+
+* `// EMIT_MIR $MIR_PATH.mir` — This will check that the given filename
+ matches the exact output from the MIR dump.
+ For example, `my_test.main.SimplifyCfg-elaborate-drops.after.mir` will load
+ that file from the test directory, and compare it against the dump from
+ rustc.
+
+ Checking the "after" file (which is after optimization) is useful if you are
+ interested in the final state after an optimization.
+ Some rare cases may want to use the "before" file for completeness.
+
+* `// EMIT_MIR $MIR_PATH.diff` — where `$MIR_PATH` is the filename of the MIR
+ dump, such as `my_test_name.my_function.EarlyOtherwiseBranch`.
+ Compiletest will diff the `.before.mir` and `.after.mir` files, and compare
+ the diff output to the expected `.diff` file from the `EMIT_MIR` comment.
+
+ This is useful if you want to see how an optimization changes the MIR.
+
+* `// EMIT_MIR $MIR_PATH.dot` or `$MIR_PATH.html` — These are special cases
+ for other MIR outputs (via `-Z dump-mir-graphviz` and `-Z dump-mir-spanview`)
+ that will check that the output matches the given file.
+
+By default 32 bit and 64 bit targets use the same dump files, which can be
+problematic in the presence of pointers in constants or other bit width
+dependent things. In that case you can add `// EMIT_MIR_FOR_EACH_BIT_WIDTH` to
+your test, causing separate files to be generated for 32bit and 64bit systems.
+
+[`src/test/mir-opt`]: https://github.com/rust-lang/rust/tree/master/src/test/mir-opt
+
+
+### Run-make tests
+
+The tests in [`src/test/run-make`] are general-purpose tests using Makefiles
+which provide the ultimate in flexibility.
+These should be used as a last resort.
+If possible, you should use one of the other test suites.
+If there is some minor feature missing which you need for your test,
+consider extending compiletest to add a header command for what you need.
+However, sometimes just running a bunch of commands is really what you
+need, `run-make` is here to the rescue!
+
+Each test should be in a separate directory with a `Makefile` indicating the
+commands to run.
+There is a [`tools.mk`] Makefile which you can include which provides a bunch of
+utilities to make it easier to run commands and compare outputs.
+Take a look at some of the other tests for some examples on how to get started.
+
+[`tools.mk`]: https://github.com/rust-lang/rust/blob/master/src/test/run-make-fulldeps/tools.mk
+[`src/test/run-make`]: https://github.com/rust-lang/rust/tree/master/src/test/run-make
+
+
+### Valgrind tests
+
+The tests in [`src/test/run-pass-valgrind`] are for use with [Valgrind].
+These are currently vestigial, as Valgrind is no longer used in CI.
+These may be removed in the future.
+
+[Valgrind]: https://valgrind.org/
+[`src/test/run-pass-valgrind`]: https://github.com/rust-lang/rust/tree/master/src/test/run-pass-valgrind
+
+
+## Building auxiliary crates
+
+It is common that some tests require additional auxiliary crates to be compiled.
+There are two [headers](headers.md) to assist with that:
+
+* `aux-build`
+* `aux-crate`
+
+`aux-build` will build a separate crate from the named source file.
+The source file should be in a directory called `auxiliary` beside the test file.
+
+```rust,ignore
+// aux-build: my-helper.rs
+
+extern crate my_helper;
+// ... You can use my_helper.
+```
+
+The aux crate will be built as a dylib if possible (unless on a platform that
+does not support them, or the `no-prefer-dynamic` header is specified in the
+aux file).
+The `-L` flag is used to find the extern crates.
+
+`aux-crate` is very similar to `aux-build`; however, it uses the `--extern`
+flag to link to the extern crate.
+That allows you to specify the additional syntax of the `--extern` flag, such
+as renaming a dependency.
+For example, `// aux-crate:foo=bar.rs` will compile `auxiliary/bar.rs` and
+make it available under then name `foo` within the test.
+This is similar to how Cargo does dependency renaming.
+
+### Auxiliary proc-macro
+
+If you want a proc-macro dependency, then there currently is some ceremony
+needed.
+Place the proc-macro itself in a file like `auxiliary/my-proc-macro.rs`
+with the following structure:
+
+```rust,ignore
+// force-host
+// no-prefer-dynamic
+
+#![crate_type = "proc-macro"]
+
+extern crate proc_macro;
+use proc_macro::TokenStream;
+
+#[proc_macro]
+pub fn foo(input: TokenStream) -> TokenStream {
+ "".parse().unwrap()
+}
+```
+
+The `force-host` is needed because proc-macros are loaded in the host
+compiler, and `no-prefer-dynamic` is needed to tell compiletest to not use
+`prefer-dynamic` which is not compatible with proc-macros.
+The `#![crate_type]` attribute is needed to specify the correct crate-type.
+
+Then in your test, you can build with with `aux-build`:
+
+```rust,ignore
+// aux-build: my-proc-macro.rs
+
+extern crate my_proc_macro;
+
+fn main() {
+ my_proc_macro::foo!();
+}
+```
+
+
+## Revisions
+
+Certain classes of tests support "revisions" (as of <!-- date: 2022-07 --> July 2022,
+this includes UI, assembly, codegen, debuginfo, incremental, and rustdoc UI tests,
+though incremental tests are somewhat different).
+Revisions allow a single test file to be used for multiple tests.
+This is done by adding a special header at the top of the file:
+
+```rust,ignore
+// revisions: foo bar baz
+```
+
+This will result in the test being compiled (and tested) three times,
+once with `--cfg foo`, once with `--cfg bar`, and once with `--cfg
+baz`.
+You can therefore use `#[cfg(foo)]` etc within the test to tweak
+each of these results.
+
+You can also customize headers and expected error messages to a particular
+revision. To do this, add `[foo]` (or `bar`, `baz`, etc) after the `//`
+comment, like so:
+
+```rust,ignore
+// A flag to pass in only for cfg `foo`:
+//[foo]compile-flags: -Z verbose
+
+#[cfg(foo)]
+fn test_foo() {
+ let x: usize = 32_u32; //[foo]~ ERROR mismatched types
+}
+```
+
+Note that not all headers have meaning when customized to a revision.
+For example, the `ignore-test` header (and all "ignore" headers)
+currently only apply to the test as a whole, not to particular
+revisions. The only headers that are intended to really work when
+customized to a revision are error patterns and compiler flags.
+
+
+## Compare modes
+
+Compiletest can be run in different modes, called *compare modes*, which can
+be used to compare the behavior of all tests with different compiler flags
+enabled.
+This can help highlight what differences might appear with certain flags, and
+check for any problems that might arise.
+
+To run the tests in a different mode, you need to pass the `--compare-mode`
+CLI flag:
+
+```bash
+./x.py test src/test/ui --compare-mode=chalk
+```
+
+The possible compare modes are:
+
+* `polonius` — Runs with Polonius with `-Zpolonius`.
+* `chalk` — Runs with Chalk with `-Zchalk`.
+* `split-dwarf` — Runs with unpacked split-DWARF with `-Csplit-debuginfo=unpacked`.
+* `split-dwarf-single` — Runs with packed split-DWARF with `-Csplit-debuginfo=packed`.
+
+See [UI compare modes](ui.md#compare-modes) for more information about how UI
+tests support different output for different modes.
+
+In CI, compare modes are only used in one Linux builder, and only with the
+following settings:
+
+* `src/test/debuginfo`: Uses `split-dwarf` mode.
+ This helps ensure that none of the debuginfo tests are affected when
+ enabling split-DWARF.
+
+Note that compare modes are separate to [revisions](#revisions).
+All revisions are tested when running `./x.py test src/test/ui`, however
+compare-modes must be manually run individually via the `--compare-mode` flag.
diff --git a/src/doc/rustc-dev-guide/src/tests/crater.md b/src/doc/rustc-dev-guide/src/tests/crater.md
new file mode 100644
index 000000000..9a7ff3871
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/crater.md
@@ -0,0 +1,45 @@
+# Crater
+
+[Crater](https://github.com/rust-lang/crater) is a tool for compiling
+and running tests for _every_ crate on [crates.io](https://crates.io) (and a
+few on GitHub). It is mainly used for checking the extent of breakage when
+implementing potentially breaking changes and ensuring lack of breakage by
+running beta vs stable compiler versions.
+
+## When to run Crater
+
+You should request a crater run if your PR makes large changes to the compiler
+or could cause breakage. If you are unsure, feel free to ask your PR's reviewer.
+
+## Requesting Crater Runs
+
+The rust team maintains a few machines that can be used for running crater runs
+on the changes introduced by a PR. If your PR needs a crater run, leave a
+comment for the triage team in the PR thread. Please inform the team whether
+you require a "check-only" crater run, a "build only" crater run, or a
+"build-and-test" crater run. The difference is primarily in time; the
+conservative (if you're not sure) option is to go for the build-and-test run.
+If making changes that will only have an effect at compile-time (e.g.,
+implementing a new trait) then you only need a check run.
+
+Your PR will be enqueued by the triage team and the results will be posted when
+they are ready. Check runs will take around ~3-4 days, with the other two
+taking 5-6 days on average.
+
+While crater is really useful, it is also important to be aware of a few
+caveats:
+
+- Not all code is on crates.io! There is a lot of code in repos on GitHub and
+ elsewhere. Also, companies may not wish to publish their code. Thus, a
+ successful crater run is not a magically green light that there will be no
+ breakage; you still need to be careful.
+
+- Crater only runs Linux builds on x86_64. Thus, other architectures and
+ platforms are not tested. Critically, this includes Windows.
+
+- Many crates are not tested. This could be for a lot of reasons, including
+ that the crate doesn't compile any more (e.g. used old nightly features),
+ has broken or flaky tests, requires network access, or other reasons.
+
+- Before crater can be run, `@bors try` needs to succeed in building artifacts.
+ This means that if your code doesn't compile, you cannot run crater.
diff --git a/src/doc/rustc-dev-guide/src/tests/docker.md b/src/doc/rustc-dev-guide/src/tests/docker.md
new file mode 100644
index 000000000..feb614c51
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/docker.md
@@ -0,0 +1,52 @@
+# Testing with Docker
+
+The Rust tree includes [Docker] image definitions for the platforms used on
+GitHub Actions in [`src/ci/docker`].
+The script [`src/ci/docker/run.sh`] is used to build the Docker image, run it,
+build Rust within the image, and run the tests.
+
+You can run these images on your local development machine. This can be
+helpful to test environments different from your local system. First you will
+need to install Docker on a Linux, Windows, or macOS system (typically Linux
+will be much faster than Windows or macOS because the latter use virtual
+machines to emulate a Linux environment). To enter interactive mode which will
+start a bash shell in the container, run `src/ci/docker/run.sh --dev <IMAGE>`
+where `<IMAGE>` is one of the directory names in `src/ci/docker` (for example
+`x86_64-gnu` is a fairly standard Ubuntu environment).
+
+The docker script will mount your local Rust source tree in read-only mode,
+and an `obj` directory in read-write mode. All of the compiler artifacts will
+be stored in the `obj` directory. The shell will start out in the `obj`
+directory. From there, you can run `../src/ci/run.sh` which will run the build
+as defined by the image.
+
+Alternatively, you can run individual commands to do specific tasks. For
+example, you can run `python3 ../x.py test src/test/ui` to just run UI tests.
+Note that there is some configuration in the [`src/ci/run.sh`] script that you
+may need to recreate. Particularly, set `submodules = false` in your
+`config.toml` so that it doesn't attempt to modify the read-only directory.
+
+Some additional notes about using the Docker images:
+
+- Some of the std tests require IPv6 support. Docker on Linux seems to have it
+ disabled by default. Run the commands in [`enable-docker-ipv6.sh`] to enable
+ IPv6 before creating the container. This only needs to be done once.
+- The container will be deleted automatically when you exit the shell, however
+ the build artifacts persist in the `obj` directory. If you are switching
+ between different Docker images, the artifacts from previous environments
+ stored in the `obj` directory may confuse the build system. Sometimes you
+ will need to delete parts or all of the `obj` directory before building
+ inside the container.
+- The container is bare-bones, with only a minimal set of packages. You may
+ want to install some things like `apt install less vim`.
+- You can open multiple shells in the container. First you need the container
+ name (a short hash), which is displayed in the shell prompt, or you can run
+ `docker container ls` outside of the container to list the available
+ containers. With the container name, run `docker exec -it <CONTAINER>
+ /bin/bash` where `<CONTAINER>` is the container name like `4ba195e95cef`.
+
+[Docker]: https://www.docker.com/
+[`src/ci/docker`]: https://github.com/rust-lang/rust/tree/master/src/ci/docker
+[`src/ci/docker/run.sh`]: https://github.com/rust-lang/rust/blob/master/src/ci/docker/run.sh
+[`src/ci/run.sh`]: https://github.com/rust-lang/rust/blob/master/src/ci/run.sh
+[`enable-docker-ipv6.sh`]: https://github.com/rust-lang/rust/blob/master/src/ci/scripts/enable-docker-ipv6.sh
diff --git a/src/doc/rustc-dev-guide/src/tests/headers.md b/src/doc/rustc-dev-guide/src/tests/headers.md
new file mode 100644
index 000000000..bfa637f34
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/headers.md
@@ -0,0 +1,405 @@
+# Test headers
+
+<!-- toc -->
+
+Header commands are special comments that tell compiletest how to build and
+interpret a test.
+They must appear before the Rust source in the test.
+They may also appear in Makefiles for [run-make tests](compiletest.md#run-make-tests).
+
+They are normally put after the short comment that explains the point of this test.
+For example, this test uses the `// compile-flags` command to specify a custom
+flag to give to rustc when the test is compiled:
+
+```rust,ignore
+// Test the behavior of `0 - 1` when overflow checks are disabled.
+
+// compile-flags: -C overflow-checks=off
+
+fn main() {
+ let x = 0 - 1;
+ ...
+}
+```
+
+Header commands can be standalone (like `// run-pass`) or take a value (like
+`// compile-flags: -C overflow-checks=off`).
+
+## Header commands
+
+The following is a list of header commands.
+Commands are linked to sections the describe the command in more detail if available.
+This list may not be exhaustive.
+Header commands can generally be found by browsing the `TestProps` structure
+found in [`header.rs`] from the compiletest source.
+
+[`header.rs`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest/src/header.rs
+
+* [Controlling pass/fail expectations](ui.md#controlling-passfail-expectations)
+ * `check-pass` — building (no codegen) should pass
+ * `build-pass` — building should pass
+ * `run-pass` — running the test should pass
+ * `check-fail` — building (no codegen) should fail (the default if no header)
+ * `build-fail` — building should fail
+ * `run-fail` — running should fail
+ * `ignore-pass` — ignores the `--pass` flag
+ * `check-run-results` — checks run-pass/fail-pass output
+* [UI](ui.md) headers
+ * [`normalize-X`](ui.md#normalization) — normalize compiler output
+ * [`run-rustfix`](ui.md#rustfix-tests) — checks diagnostic suggestions
+ * [`rustfix-only-machine-applicable`](ui.md#rustfix-tests) — checks only
+ machine applicable suggestions
+ * [`stderr-per-bitwidth`](ui.md#output-comparison) — separate output per bit width
+ * [`dont-check-compiler-stderr`](ui.md#output-comparison) — don't validate stderr
+ * [`dont-check-compiler-stdout`](ui.md#output-comparison) — don't validate stdout
+* [Building auxiliary crates](compiletest.md#building-auxiliary-crates)
+ * `aux-build`
+ * `aux-crate`
+* [Pretty-printer](compiletest.md#pretty-printer-tests) headers
+ * `pretty-compare-only`
+ * `pretty-expanded`
+ * `pretty-mode`
+ * `pp-exact`
+* [Ignoring tests](#ignoring-tests)
+ * `ignore-X`
+ * `only-X`
+ * `needs-X`
+ * `no-system-llvm`
+ * `min-llvm-versionX`
+ * `min-system-llvm-version`
+ * `ignore-llvm-version`
+ * `ignore-llvm-version`
+* [Environment variable headers](#environment-variable-headers)
+ * `rustc-env`
+ * `exec-env`
+ * `unset-rustc-env`
+* [Miscellaneous headers](#miscellaneous-headers)
+ * `compile-flags` — adds compiler flags
+ * `run-flags` — adds flags to executable tests
+ * `edition` — sets the edition
+ * `failure-status` — expected exit code
+ * `should-fail` — testing compiletest itself
+ * `gate-test-X` — feature gate testing
+ * [`error-pattern`](ui.md#error-pattern) — errors not on a line
+ * `incremental` — incremental tests not in the incremental test-suite
+ * `no-prefer-dynamic` — don't use `-C prefer-dynamic`, don't build as a dylib
+ * `force-host` — build only for the host target
+ * [`revisions`](compiletest.md#revisions) — compile multiple times
+ * [`forbid-output`](compiletest.md#incremental-tests) — incremental cfail rejects output pattern
+ * [`should-ice`](compiletest.md#incremental-tests) — incremental cfail should ICE
+ * [`known-bug`](ui.md#known-bugs) — indicates that the test is
+ for a known bug that has not yet been fixed
+* [Assembly](compiletest.md#assembly-tests) headers
+ * `assembly-output` — the type of assembly output to check
+
+
+### Ignoring tests
+
+These header commands are used to ignore the test in some situations,
+which means the test won't be compiled or run.
+
+* `ignore-X` where `X` is a target detail or stage will ignore the
+ test accordingly (see below)
+* `only-X` is like `ignore-X`, but will *only* run the test on that
+ target or stage
+* `ignore-test` always ignores the test.
+ This can be used to temporarily disable a test if it is currently not working,
+ but you want to keep it in tree to re-enable it later.
+
+Some examples of `X` in `ignore-X` or `only-X`:
+
+* A full target triple: `aarch64-apple-ios`
+* Architecture: `aarch64`, `arm`, `asmjs`, `mips`, `wasm32`, `x86_64`,
+ `x86`, ...
+* OS: `android`, `emscripten`, `freebsd`, `ios`, `linux`, `macos`,
+ `windows`, ...
+* Environment (fourth word of the target triple): `gnu`, `msvc`,
+ `musl`
+* WASM: `wasm32-bare` matches `wasm32-unknown-unknown`.
+ `emscripten` also matches that target as well as the emscripten targets.
+* Pointer width: `32bit`, `64bit`
+* Endianness: `endian-big`
+* Stage: `stage0`, `stage1`, `stage2`
+* Channel: `stable`, `beta`
+* When cross compiling: `cross-compile`
+* When [remote testing] is used: `remote`
+* When debug-assertions are enabled: `debug`
+* When particular debuggers are being tested: `cdb`, `gdb`, `lldb`
+* Specific [compare modes]: `compare-mode-polonius`,
+ `compare-mode-chalk`, `compare-mode-split-dwarf`,
+ `compare-mode-split-dwarf-single`
+
+The following header commands will check rustc build settings and target settings:
+
+* `needs-asm-support` — ignores if it is running on a target that doesn't have
+ stable support for `asm!`
+* `needs-profiler-support` — ignores if profiler support was not enabled for
+ the target (`profiler = true` in rustc's `config.toml`)
+* `needs-sanitizer-support` — ignores if the sanitizer support was not enabled
+ for the target (`sanitizers = true` in rustc's `config.toml`)
+* `needs-sanitizer-{address,hwaddress,leak,memory,thread}` — ignores
+ if the corresponding sanitizer is not enabled for the target
+ (AddressSanitizer, hardware-assisted AddressSanitizer, LeakSanitizer,
+ MemorySanitizer or ThreadSanitizer respectively)
+* `needs-run-enabled` — ignores if it is a test that gets executed, and
+ running has been disabled. Running tests can be disabled with the `x.py test
+ --run=never` flag, or running on fuchsia.
+* `needs-unwind` — ignores if the target does not support unwinding
+* `needs-rust-lld` — ignores if the rust lld support is not enabled
+ (`rust.lld = true` in `config.toml`)
+
+The following header commands will check LLVM support:
+
+* `no-system-llvm` — ignores if the system llvm is used
+* `min-llvm-version: 13.0` — ignored if the LLVM version is less than the given value
+* `min-system-llvm-version: 12.0` — ignored if using a system LLVM and its
+ version is less than the given value
+* `ignore-llvm-version: 9.0` — ignores a specific LLVM version
+* `ignore-llvm-version: 7.0 - 9.9.9` — ignores LLVM versions in a range (inclusive)
+* `needs-llvm-components: powerpc` — ignores if the specific LLVM component was not built.
+ Note: The test will fail on CI if the component does not exist.
+* `needs-matching-clang` — ignores if the version of clang does not match the
+ LLVM version of rustc.
+ These tests are always ignored unless a special environment variable is set
+ (which is only done in one CI job).
+
+See also [Debuginfo tests](compiletest.md#debuginfo-tests) for headers for
+ignoring debuggers.
+
+[remote testing]: running.md#running-tests-on-a-remote-machine
+[compare modes]: ui.md#compare-modes
+
+### Environment variable headers
+
+The following headers affect environment variables.
+
+* `rustc-env` is an environment variable to set when running `rustc` of the
+ form `KEY=VALUE`.
+* `exec-env` is an environment variable to set when executing a test of the
+ form `KEY=VALUE`.
+* `unset-rustc-env` specifies an environment variable to unset when running
+ `rustc`.
+
+### Miscellaneous headers
+
+The following headers are generally available, and not specific to particular
+test suites.
+
+* `compile-flags` passes extra command-line args to the compiler,
+ e.g. `compile-flags -g` which forces debuginfo to be enabled.
+* `run-flags` passes extra args to the test if the test is to be executed.
+* `edition` controls the edition the test should be compiled with
+ (defaults to 2015). Example usage: `// edition:2018`.
+* `failure-status` specifies the numeric exit code that should be expected for
+ tests that expect an error.
+ If this is not set, the default is 1.
+* `should-fail` indicates that the test should fail; used for "meta
+ testing", where we test the compiletest program itself to check that
+ it will generate errors in appropriate scenarios. This header is
+ ignored for pretty-printer tests.
+* `gate-test-X` where `X` is a feature marks the test as "gate test"
+ for feature X.
+ Such tests are supposed to ensure that the compiler errors when usage of a
+ gated feature is attempted without the proper `#![feature(X)]` tag.
+ Each unstable lang feature is required to have a gate test.
+ This header is actually checked by [tidy](intro.md#tidy), it is not checked
+ by compiletest.
+* `error-pattern` checks the diagnostics just like the `ERROR` annotation
+ without specifying error line. This is useful when the error doesn't give
+ any span. See [`error-pattern`](ui.md#error-pattern).
+* `incremental` runs the test with the `-C incremental` flag and an empty
+ incremental directory. This should be avoided when possible; you should use
+ an *incremental mode* test instead. Incremental mode tests support running
+ the compiler multiple times and verifying that it can load the generated
+ incremental cache. This flag is for specialized circumstances, like checking
+ the interaction of codegen unit partitioning with generating an incremental
+ cache.
+* `no-prefer-dynamic` will force an auxiliary crate to be built as an rlib
+ instead of a dylib. When specified in a test, it will remove the use of `-C
+ prefer-dynamic`. This can be useful in a variety of circumstances. For
+ example, it can prevent a proc-macro from being built with the wrong crate
+ type. Or if your test is specifically targeting behavior of other crate
+ types, it can be used to prevent building with the wrong crate type.
+* `force-host` will force the test to build for the host platform instead of
+ the target. This is useful primarily for auxiliary proc-macros, which need
+ to be loaded by the host compiler.
+
+
+## Substitutions
+
+Headers values support substituting a few variables which will be replaced
+with their corresponding value.
+For example, if you need to pass a compiler flag with a path to a specific
+file, something like the following could work:
+
+```rust,ignore
+// compile-flags: --remap-path-prefix={{src-base}}=/the/src
+```
+
+Where the sentinel `{{src-base}}` will be replaced with the appropriate path
+described below:
+
+- `{{cwd}}`: The directory where compiletest is run from. This may not be the
+ root of the checkout, so you should avoid using it where possible.
+ - Examples: `/path/to/rust`, `/path/to/build/root`
+- `{{src-base}}`: The directory where the test is defined. This is equivalent to
+ `$DIR` for [output normalization].
+ - Example: `/path/to/rust/src/test/ui/error-codes`
+- `{{build-base}}`: The base directory where the test's output goes. This is
+ equivalent to `$TEST_BUILD_DIR` for [output normalization].
+ - Example: `/path/to/rust/build/x86_64-unknown-linux-gnu/test/ui`
+
+See [`src/test/ui/commandline-argfile.rs`](https://github.com/rust-lang/rust/blob/a5029ac0ab372aec515db2e718da6d7787f3d122/src/test/ui/commandline-argfile.rs)
+for an example of a test that uses this substitution.
+
+[output normalization]: ui.md#normalization
+
+
+## Adding a new header command
+
+One would add a new header command if there is a need to define some test
+property or behavior on an individual, test-by-test basis.
+A header command property serves as the header command's backing store (holds
+the command's current value) at runtime.
+
+To add a new header command property:
+
+ 1. Look for the `pub struct TestProps` declaration in
+ [`src/tools/compiletest/src/header.rs`] and add the new public property to
+ the end of the declaration.
+ 2. Look for the `impl TestProps` implementation block immediately following
+ the struct declaration and initialize the new property to its default
+ value.
+
+### Adding a new header command parser
+
+When `compiletest` encounters a test file, it parses the file a line at a time
+by calling every parser defined in the `Config` struct's implementation block,
+also in [`src/tools/compiletest/src/header.rs`] (note that the `Config`
+struct's declaration block is found in [`src/tools/compiletest/src/common.rs`]).
+`TestProps`'s `load_from()` method will try passing the current line of text to
+each parser, which, in turn typically checks to see if the line begins with a
+particular commented (`//`) header command such as `// must-compile-successfully`
+or `// failure-status`. Whitespace after the comment marker is optional.
+
+Parsers will override a given header command property's default value merely by
+being specified in the test file as a header command or by having a parameter
+value specified in the test file, depending on the header command.
+
+Parsers defined in `impl Config` are typically named `parse_<header_command>`
+(note kebab-case `<header-command>` transformed to snake-case
+`<header_command>`). `impl Config` also defines several 'low-level' parsers
+which make it simple to parse common patterns like simple presence or not
+(`parse_name_directive()`), header-command:parameter(s)
+(`parse_name_value_directive()`), optional parsing only if a particular `cfg`
+attribute is defined (`has_cfg_prefix()`) and many more. The low-level parsers
+are found near the end of the `impl Config` block; be sure to look through them
+and their associated parsers immediately above to see how they are used to
+avoid writing additional parsing code unnecessarily.
+
+As a concrete example, here is the implementation for the
+`parse_failure_status()` parser, in [`src/tools/compiletest/src/header.rs`]:
+
+```diff
+@@ -232,6 +232,7 @@ pub struct TestProps {
+ // customized normalization rules
+ pub normalize_stdout: Vec<(String, String)>,
+ pub normalize_stderr: Vec<(String, String)>,
++ pub failure_status: i32,
+ }
+
+ impl TestProps {
+@@ -260,6 +261,7 @@ impl TestProps {
+ run_pass: false,
+ normalize_stdout: vec![],
+ normalize_stderr: vec![],
++ failure_status: 101,
+ }
+ }
+
+@@ -383,6 +385,10 @@ impl TestProps {
+ if let Some(rule) = config.parse_custom_normalization(ln, "normalize-stderr") {
+ self.normalize_stderr.push(rule);
+ }
++
++ if let Some(code) = config.parse_failure_status(ln) {
++ self.failure_status = code;
++ }
+ });
+
+ for key in &["RUST_TEST_NOCAPTURE", "RUST_TEST_THREADS"] {
+@@ -488,6 +494,13 @@ impl Config {
+ self.parse_name_directive(line, "pretty-compare-only")
+ }
+
++ fn parse_failure_status(&self, line: &str) -> Option<i32> {
++ match self.parse_name_value_directive(line, "failure-status") {
++ Some(code) => code.trim().parse::<i32>().ok(),
++ _ => None,
++ }
++ }
+```
+
+### Implementing the behavior change
+
+When a test invokes a particular header command, it is expected that some
+behavior will change as a result. What behavior, obviously, will depend on the
+purpose of the header command. In the case of `failure-status`, the behavior
+that changes is that `compiletest` expects the failure code defined by the
+header command invoked in the test, rather than the default value.
+
+Although specific to `failure-status` (as every header command will have a
+different implementation in order to invoke behavior change) perhaps it is
+helpful to see the behavior change implementation of one case, simply as an
+example. To implement `failure-status`, the `check_correct_failure_status()`
+function found in the `TestCx` implementation block, located in
+[`src/tools/compiletest/src/runtest.rs`], was modified as per below:
+
+```diff
+@@ -295,11 +295,14 @@ impl<'test> TestCx<'test> {
+ }
+
+ fn check_correct_failure_status(&self, proc_res: &ProcRes) {
+- // The value the Rust runtime returns on failure
+- const RUST_ERR: i32 = 101;
+- if proc_res.status.code() != Some(RUST_ERR) {
++ let expected_status = Some(self.props.failure_status);
++ let received_status = proc_res.status.code();
++
++ if expected_status != received_status {
+ self.fatal_proc_rec(
+- &format!("failure produced the wrong error: {}", proc_res.status),
++ &format!("Error: expected failure status ({:?}) but received status {:?}.",
++ expected_status,
++ received_status),
+ proc_res,
+ );
+ }
+@@ -320,7 +323,6 @@ impl<'test> TestCx<'test> {
+ );
+
+ let proc_res = self.exec_compiled_test();
+-
+ if !proc_res.status.success() {
+ self.fatal_proc_rec("test run failed!", &proc_res);
+ }
+@@ -499,7 +501,6 @@ impl<'test> TestCx<'test> {
+ expected,
+ actual
+ );
+- panic!();
+ }
+ }
+```
+
+Note the use of `self.props.failure_status` to access the header command
+property. In tests which do not specify the failure status header command,
+`self.props.failure_status` will evaluate to the default value of 101 at the
+time of this writing. But for a test which specifies a header command of, for
+example, `// failure-status: 1`, `self.props.failure_status` will evaluate to
+1, as `parse_failure_status()` will have overridden the `TestProps` default
+value, for that test specifically.
+
+[`src/tools/compiletest/src/header.rs`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest/src/header.rs
+[`src/tools/compiletest/src/common.rs`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest/src/common.rs
+[`src/tools/compiletest/src/runtest.rs`]: https://github.com/rust-lang/rust/tree/master/src/tools/compiletest/src/runtest.rs
diff --git a/src/doc/rustc-dev-guide/src/tests/intro.md b/src/doc/rustc-dev-guide/src/tests/intro.md
new file mode 100644
index 000000000..8b65e4df5
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/intro.md
@@ -0,0 +1,161 @@
+# Testing the compiler
+
+<!-- toc -->
+
+The Rust project runs a wide variety of different tests, orchestrated by
+the build system (`./x.py test`).
+This section gives a brief overview of the different testing tools.
+Subsequent chapters dive into [running tests](running.md) and [adding new tests](adding.md).
+
+## Kinds of tests
+
+There are several kinds of tests to exercise things in the Rust distribution.
+Almost all of them are driven by `./x.py test`, with some exceptions noted below.
+
+### Compiletest
+
+The main test harness for testing the compiler itself is a tool called [compiletest].
+It supports running different styles of tests, called *test suites*.
+The tests are all located in the [`src/test`] directory.
+The [Compiletest chapter][compiletest] goes into detail on how to use this tool.
+
+> Example: `./x.py test src/test/ui`
+
+[compiletest]: compiletest.md
+[`src/test`]: https://github.com/rust-lang/rust/tree/master/src/test
+
+### Package tests
+
+The standard library and many of the compiler packages include typical Rust `#[test]`
+unit tests, integration tests, and documentation tests.
+You can pass a path to `x.py` to almost any package in the `library` or `compiler` directory,
+and `x.py` will essentially run `cargo test` on that package.
+
+Examples:
+
+| Command | Description |
+|---------|-------------|
+| `./x.py test library/std` | Runs tests on `std` only |
+| `./x.py test library/core` | Runs tests on `core` only |
+| `./x.py test compiler/rustc_data_structures` | Runs tests on `rustc_data_structures` |
+
+The standard library relies very heavily on documentation tests to cover its functionality.
+However, unit tests and integration tests can also be used as needed.
+Almost all of the compiler packages have doctests disabled.
+
+The standard library and compiler always place all unit tests in a separate `tests` file
+(this is enforced in [tidy][tidy-unit-tests]).
+This approach ensures that when the test file is changed, the crate does not need to be recompiled.
+For example:
+
+```rust,ignore
+#[cfg(test)]
+mod tests;
+```
+
+If it wasn't done this way, and the tests were placed in the same file as the source,
+then changing or adding a test would cause the crate you are working on to be recompiled.
+If you were working on something like `core`,
+then that would require recompiling the entire standard library, and the entirety of `rustc`.
+
+`./x.py test` includes some CLI options for controlling the behavior with these tests:
+
+* `--doc` — Only runs documentation tests in the package.
+* `--no-doc` — Run all tests *except* documentation tests.
+
+[tidy-unit-tests]: https://github.com/rust-lang/rust/blob/master/src/tools/tidy/src/unit_tests.rs
+
+### Tidy
+
+Tidy is a custom tool used for validating source code style and formatting conventions,
+such as rejecting long lines.
+There is more information in the [section on coding conventions](../conventions.md#formatting).
+
+> Example: `./x.py test tidy`
+
+### Formatting
+
+Rustfmt is integrated with the build system to enforce uniform style across the compiler.
+The formatting check is automatically run by the Tidy tool mentioned above.
+
+Examples:
+
+| Command | Description |
+|---------|-------------|
+| `./x.py fmt --check` | Checks formatting and exits with an error if formatting is needed. |
+| `./x.py fmt` | Runs rustfmt across the entire codebase. |
+| `./x.py test tidy --bless` | First runs rustfmt to format the codebase, then runs tidy checks. |
+
+### Book documentation tests
+
+All of the books that are published have their own tests,
+primarily for validating that the Rust code examples pass.
+Under the hood, these are essentially using `rustdoc --test` on the markdown files.
+The tests can be run by passing a path to a book to `./x.py test`.
+
+> Example: `./x.py test src/doc/book`
+
+### Documentation link checker
+
+Links across all documentation is validated with a link checker tool.
+
+> Example: `./x.py test src/tools/linkchecker`
+
+> Example: `./x.py test linkchecker`
+
+This requires building all of the documentation, which might take a while.
+
+### Dist check
+
+`distcheck` verifies that the source distribution tarball created by the build system
+will unpack, build, and run all tests.
+
+> Example: `./x.py test distcheck`
+
+### Tool tests
+
+Packages that are included with Rust have all of their tests run as well.
+This includes things such as cargo, clippy, rustfmt, rls, miri, bootstrap
+(testing the Rust build system itself), etc.
+
+Most of the tools are located in the [`src/tools`] directory.
+To run the tool's tests, just pass its path to `./x.py test`.
+
+> Example: `./x.py test src/tools/cargo`
+
+Usually these tools involve running `cargo test` within the tool's directory.
+
+In CI, some tools are allowed to fail.
+Failures send notifications to the corresponding teams, and is tracked on the [toolstate website].
+More information can be found in the [toolstate documentation].
+
+[`src/tools`]: https://github.com/rust-lang/rust/tree/master/src/tools/
+[toolstate documentation]: https://forge.rust-lang.org/infra/toolstate.html
+[toolstate website]: https://rust-lang-nursery.github.io/rust-toolstate/
+
+### Cargo test
+
+`cargotest` is a small tool which runs `cargo test` on a few sample projects
+(such as `servo`, `ripgrep`, `tokei`, etc.).
+This ensures there aren't any significant regressions.
+
+> Example: `./x.py test src/tools/cargotest`
+
+### Crater
+
+Crater is a tool which runs tests on many thousands of public projects.
+This tool has its own separate infrastructure for running.
+See the [Crater chapter](crater.md) for more details.
+
+### Performance testing
+
+A separate infrastructure is used for testing and tracking performance of the compiler.
+See the [Performance testing chapter](perf.md) for more details.
+
+## Further reading
+
+The following blog posts may also be of interest:
+
+- brson's classic ["How Rust is tested"][howtest]
+
+[howtest]: https://brson.github.io/2017/07/10/how-rust-is-tested
diff --git a/src/doc/rustc-dev-guide/src/tests/perf.md b/src/doc/rustc-dev-guide/src/tests/perf.md
new file mode 100644
index 000000000..ac65faff1
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/perf.md
@@ -0,0 +1,50 @@
+# Performance testing
+
+## rustc-perf
+
+A lot of work is put into improving the performance of the compiler and
+preventing performance regressions.
+The [rustc-perf](https://github.com/rust-lang/rustc-perf) project provides
+several services for testing and tracking performance.
+It provides hosted infrastructure for running benchmarks as a service.
+At this time, only `x86_64-unknown-linux-gnu` builds are tracked.
+
+A "perf run" is used to compare the performance of the compiler in different
+configurations for a large collection of popular crates.
+Different configurations include "fresh builds", builds with incremental compilation, etc.
+
+The result of a perf run is a comparison between two versions of the compiler
+(by their commit hashes).
+
+### Automatic perf runs
+
+After every PR is merged, a suite of benchmarks are run against the compiler.
+The results are tracked over time on the <https://perf.rust-lang.org/> website.
+Any changes are noted in a comment on the PR.
+
+### Manual perf runs
+
+Additionally, performance tests can be ran before a PR is merged on an as-needed basis.
+You should request a perf run if your PR may affect performance, especially if
+it can affect performance adversely.
+
+To evaluate the performance impact of a PR, write this comment on the PR:
+
+`@bors try @rust-timer queue`
+
+> **Note**: Only users authorized to do perf runs are allowed to post this comment.
+> Teams that are allowed to use it are tracked in the [Teams
+> repository](https://github.com/rust-lang/team) with the `perf = true` value
+> in the `[permissions]` section (and bors permissions are also required).
+> If you are not on one of those teams, feel free to ask for someone to post
+> it for you (either on Zulip or ask the assigned reviewer).
+
+This will first tell bors to do a "try" build which do a full release build
+for `x86_64-unknown-linux-gnu`.
+After the build finishes, it will place it in the queue to run the performance
+suite against it.
+After the performance tests finish, the bot will post a comment on the PR with
+a summary and a link to a full report.
+
+More details are available in the [perf collector
+documentation](https://github.com/rust-lang/rustc-perf/blob/master/collector/README.md).
diff --git a/src/doc/rustc-dev-guide/src/tests/running.md b/src/doc/rustc-dev-guide/src/tests/running.md
new file mode 100644
index 000000000..be9d965e4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/running.md
@@ -0,0 +1,328 @@
+# Running tests
+
+<!-- toc -->
+
+You can run the tests using `x.py`. The most basic command – which
+you will almost never want to use! – is as follows:
+
+```bash
+./x.py test
+```
+
+This will build the stage 1 compiler and then run the whole test
+suite. You probably don't want to do this very often, because it takes
+a very long time, and anyway bors / GitHub Actions will do it for you.
+(Often, I will run this command in the background after opening a PR that
+I think is done, but rarely otherwise. -nmatsakis)
+
+The test results are cached and previously successful tests are
+`ignored` during testing. The stdout/stderr contents as well as a
+timestamp file for every test can be found under `build/ARCH/test/`.
+To force-rerun a test (e.g. in case the test runner fails to notice a change)
+you can simply remove the timestamp file, or use the `--force-rerun` CLI
+option.
+
+Note that some tests require a Python-enabled gdb. You can test if
+your gdb install supports Python by using the `python` command from
+within gdb. Once invoked you can type some Python code (e.g.
+`print("hi")`) followed by return and then `CTRL+D` to execute it.
+If you are building gdb from source, you will need to configure with
+`--with-python=<path-to-python-binary>`.
+
+## Running a subset of the test suites
+
+When working on a specific PR, you will usually want to run a smaller
+set of tests. For example, a good "smoke test" that can be used after
+modifying rustc to see if things are generally working correctly would be the
+following:
+
+```bash
+./x.py test src/test/ui
+```
+
+This will run the `ui` test suite. Of course, the choice
+of test suites is somewhat arbitrary, and may not suit the task you are
+doing. For example, if you are hacking on debuginfo, you may be better off
+with the debuginfo test suite:
+
+```bash
+./x.py test src/test/debuginfo
+```
+
+If you only need to test a specific subdirectory of tests for any
+given test suite, you can pass that directory to `./x.py test`:
+
+```bash
+./x.py test src/test/ui/const-generics
+```
+
+Likewise, you can test a single file by passing its path:
+
+```bash
+./x.py test src/test/ui/const-generics/const-test.rs
+```
+
+### Run only the tidy script
+
+```bash
+./x.py test tidy
+```
+
+### Run tests on the standard library
+
+```bash
+./x.py test --stage 0 library/std
+```
+
+Note that this only runs tests on `std`; if you want to test `core` or other crates,
+you have to specify those explicitly.
+
+### Run the tidy script and tests on the standard library
+
+```bash
+./x.py test --stage 0 tidy library/std
+```
+
+### Run tests on the standard library using a stage 1 compiler
+
+```bash
+./x.py test --stage 1 library/std
+```
+
+By listing which test suites you want to run you avoid having to run
+tests for components you did not change at all.
+
+**Warning:** Note that bors only runs the tests with the full stage 2
+build; therefore, while the tests **usually** work fine with stage 1,
+there are some limitations.
+
+### Run all tests using a stage 2 compiler
+
+```bash
+./x.py test --stage 2
+```
+You almost never need to do this; CI will run these tests for you.
+
+## Run unit tests on the compiler/library
+
+You may want to run unit tests on a specific file with following:
+
+```bash
+./x.py test compiler/rustc_data_structures/src/thin_vec/tests.rs
+```
+
+But unfortunately, it's impossible. You should invoke following instead:
+
+```bash
+./x.py test compiler/rustc_data_structures/ --test-args thin_vec
+```
+
+## Running an individual test
+
+Another common thing that people want to do is to run an **individual
+test**, often the test they are trying to fix. As mentioned earlier,
+you may pass the full file path to achieve this, or alternatively one
+may invoke `x.py` with the `--test-args` option:
+
+```bash
+./x.py test src/test/ui --test-args issue-1234
+```
+
+Under the hood, the test runner invokes the standard Rust test runner
+(the same one you get with `#[test]`), so this command would wind up
+filtering for tests that include "issue-1234" in the name. (Thus
+`--test-args` is a good way to run a collection of related tests.)
+
+## Editing and updating the reference files
+
+If you have changed the compiler's output intentionally, or you are
+making a new test, you can pass `--bless` to the test subcommand. E.g.
+if some tests in `src/test/ui` are failing, you can run
+
+```text
+./x.py test src/test/ui --bless
+```
+
+to automatically adjust the `.stderr`, `.stdout` or `.fixed` files of
+all tests. Of course you can also target just specific tests with the
+`--test-args your_test_name` flag, just like when running the tests.
+
+## Configuring test running
+
+There are a few options for running tests:
+
+* `config.toml` has the `rust.verbose-tests` option.
+ If `false`, each test will print a single dot (the default).
+ If `true`, the name of every test will be printed.
+ This is equivalent to the `--quiet` option in the [Rust test
+ harness](https://doc.rust-lang.org/rustc/tests/)
+* The environment variable `RUST_TEST_THREADS` can be set to the number of
+ concurrent threads to use for testing.
+
+## Passing `--pass $mode`
+
+Pass UI tests now have three modes, `check-pass`, `build-pass` and
+`run-pass`. When `--pass $mode` is passed, these tests will be forced
+to run under the given `$mode` unless the directive `// ignore-pass`
+exists in the test file. For example, you can run all the tests in
+`src/test/ui` as `check-pass`:
+
+```bash
+./x.py test src/test/ui --pass check
+```
+
+By passing `--pass $mode`, you can reduce the testing time. For each
+mode, please see [Controlling pass/fail
+expectations](ui.md#controlling-passfail-expectations).
+
+## Using incremental compilation
+
+You can further enable the `--incremental` flag to save additional
+time in subsequent rebuilds:
+
+```bash
+./x.py test src/test/ui --incremental --test-args issue-1234
+```
+
+If you don't want to include the flag with every command, you can
+enable it in the `config.toml`:
+
+```toml
+[rust]
+incremental = true
+```
+
+Note that incremental compilation will use more disk space than usual.
+If disk space is a concern for you, you might want to check the size
+of the `build` directory from time to time.
+
+## Running tests with different "compare modes"
+
+UI tests may have different output depending on certain "modes" that
+the compiler is in. For example, when using the Polonius
+mode, a test `foo.rs` will first look for expected output in
+`foo.polonius.stderr`, falling back to the usual `foo.stderr` if not found.
+The following will run the UI test suite in Polonius mode:
+
+```bash
+./x.py test src/test/ui --compare-mode=polonius
+```
+
+See [Compare modes](compiletest.md#compare-modes) for more details.
+
+## Running tests manually
+
+Sometimes it's easier and faster to just run the test by hand.
+Most tests are just `rs` files, so after
+[creating a rustup toolchain](../building/how-to-build-and-run.md#creating-a-rustup-toolchain),
+you can do something like:
+
+```bash
+rustc +stage1 src/test/ui/issue-1234.rs
+```
+
+This is much faster, but doesn't always work. For example, some tests
+include directives that specify specific compiler flags, or which rely
+on other crates, and they may not run the same without those options.
+
+
+## Running tests on a remote machine
+
+Tests may be run on a remote machine (e.g. to test builds for a different
+architecture). This is done using `remote-test-client` on the build machine
+to send test programs to `remote-test-server` running on the remote machine.
+`remote-test-server` executes the test programs and sends the results back to
+the build machine. `remote-test-server` provides *unauthenticated remote code
+execution* so be careful where it is used.
+
+To do this, first build `remote-test-server` for the remote
+machine, e.g. for RISC-V
+```sh
+./x.py build src/tools/remote-test-server --target riscv64gc-unknown-linux-gnu
+```
+
+The binary will be created at
+`./build/$HOST_ARCH/stage2-tools/$TARGET_ARCH/release/remote-test-server`. Copy
+this over to the remote machine.
+
+On the remote machine, run the `remote-test-server` with the `remote` argument
+(and optionally `-v` for verbose output). Output should look like this:
+```sh
+$ ./remote-test-server -v remote
+starting test server
+listening on 0.0.0.0:12345!
+```
+
+You can test if the `remote-test-server` is working by connecting to it and
+sending `ping\n`. It should reply `pong`:
+```sh
+$ nc $REMOTE_IP 12345
+ping
+pong
+```
+
+To run tests using the remote runner, set the `TEST_DEVICE_ADDR` environment
+variable then use `x.py` as usual. For example, to run `ui` tests for a RISC-V
+machine with the IP address `1.2.3.4` use
+```sh
+export TEST_DEVICE_ADDR="1.2.3.4:12345"
+./x.py test src/test/ui --target riscv64gc-unknown-linux-gnu
+```
+
+If `remote-test-server` was run with the verbose flag, output on the test machine
+may look something like
+```
+[...]
+run "/tmp/work/test1007/a"
+run "/tmp/work/test1008/a"
+run "/tmp/work/test1009/a"
+run "/tmp/work/test1010/a"
+run "/tmp/work/test1011/a"
+run "/tmp/work/test1012/a"
+run "/tmp/work/test1013/a"
+run "/tmp/work/test1014/a"
+run "/tmp/work/test1015/a"
+run "/tmp/work/test1016/a"
+run "/tmp/work/test1017/a"
+run "/tmp/work/test1018/a"
+[...]
+```
+
+Tests are built on the machine running `x.py` not on the remote machine. Tests
+which fail to build unexpectedly (or `ui` tests producing incorrect build
+output) may fail without ever running on the remote machine.
+
+## Testing on emulators
+
+Some platforms are tested via an emulator for architectures that aren't
+readily available. For architectures where the standard library is well
+supported and the host operating system supports TCP/IP networking, see the
+above instructions for testing on a remote machine (in this case the
+remote machine is emulated).
+
+There is also a set of tools for orchestrating running the
+tests within the emulator. Platforms such as `arm-android` and
+`arm-unknown-linux-gnueabihf` are set up to automatically run the tests under
+emulation on GitHub Actions. The following will take a look at how a target's tests
+are run under emulation.
+
+The Docker image for [armhf-gnu] includes [QEMU] to emulate the ARM CPU
+architecture. Included in the Rust tree are the tools [remote-test-client]
+and [remote-test-server] which are programs for sending test programs and
+libraries to the emulator, and running the tests within the emulator, and
+reading the results. The Docker image is set up to launch
+`remote-test-server` and the build tools use `remote-test-client` to
+communicate with the server to coordinate running tests (see
+[src/bootstrap/test.rs]).
+
+> TODO:
+> Is there any support for using an iOS emulator?
+>
+> It's also unclear to me how the wasm or asm.js tests are run.
+
+[armhf-gnu]: https://github.com/rust-lang/rust/tree/master/src/ci/docker/host-x86_64/armhf-gnu/Dockerfile
+[QEMU]: https://www.qemu.org/
+[remote-test-client]: https://github.com/rust-lang/rust/tree/master/src/tools/remote-test-client
+[remote-test-server]: https://github.com/rust-lang/rust/tree/master/src/tools/remote-test-server
+[src/bootstrap/test.rs]: https://github.com/rust-lang/rust/tree/master/src/bootstrap/test.rs
+
diff --git a/src/doc/rustc-dev-guide/src/tests/ui.md b/src/doc/rustc-dev-guide/src/tests/ui.md
new file mode 100644
index 000000000..1baa447a0
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tests/ui.md
@@ -0,0 +1,514 @@
+# UI tests
+
+<!-- toc -->
+
+UI tests are a particular [test suite](compiletest.md#test-suites) of compiletest.
+
+## Introduction
+
+The tests in [`src/test/ui`] are a collection of general-purpose tests which
+primarily focus on validating the console output of the compiler, but can be
+used for many other purposes.
+For example, tests can also be configured to [run the resulting
+program](#controlling-passfail-expectations) to verify its behavior.
+
+[`src/test/ui`]: https://github.com/rust-lang/rust/blob/master/src/test/ui
+
+## General structure of a test
+
+A test consists of a Rust source file located anywhere in the `src/test/ui` directory.
+For example, [`src/test/ui/hello.rs`] is a basic hello-world test.
+
+Compiletest will use `rustc` to compile the test, and compare the output
+against the expected output which is stored in a `.stdout` or `.stderr` file
+located next to the test.
+See [Output comparison](#output-comparison) for more.
+
+Additionally, errors and warnings should be annotated with comments within
+the source file.
+See [Error annotations](#error-annotations) for more.
+
+[Headers](headers.md) in the form of comments at the top of the file control
+how the test is compiled and what the expected behavior is.
+
+Tests are expected to fail to compile, since most tests are testing compiler
+errors.
+You can change that behavior with a header, see [Controlling pass/fail
+expectations](#controlling-passfail-expectations).
+
+By default, a test is built as an executable binary.
+If you need a different crate type, you can use the `#![crate_type]` attribute
+to set it as needed.
+
+[`src/test/ui/hello.rs`]: https://github.com/rust-lang/rust/blob/master/src/test/ui/hello.rs
+
+## Output comparison
+
+UI tests store the expected output from the compiler in `.stderr` and
+`.stdout` files next to the test.
+You normally generate these files with the `--bless` CLI option, and then
+inspect them manually to verify they contain what you expect.
+
+The output is normalized to ignore unwanted differences, see the
+[Normalization](#normalization) section.
+If the file is missing, then compiletest expects the corresponding output to
+be empty.
+
+There can be multiple stdout/stderr files.
+The general form is:
+
+*test-name*`.`*revision*`.`*compare_mode*`.`*extension*
+
+* *revision* is the [revision](#cfg-revisions) name.
+ This is not included when not using revisions.
+* *compare_mode* is the [compare mode](#compare-modes).
+ This will only be checked when the given compare mode is active.
+ If the file does not exist, then compiletest will check for a file without
+ the compare mode.
+* *extension* is the kind of output being checked:
+ * `stderr` — compiler stderr
+ * `stdout` — compiler stdout
+ * `run.stderr` — stderr when running the test
+ * `run.stdout` — stdout when running the test
+ * `64bit.stderr` — compiler stderr with `stderr-per-bitwidth` header on a 64-bit target
+ * `32bit.stderr` — compiler stderr with `stderr-per-bitwidth` header on a 32-bit target
+
+A simple example would be `foo.stderr` next to a `foo.rs` test.
+A more complex example would be `foo.my-revision.polonius.stderr`.
+
+There are several [headers](headers.md) which will change how compiletest will
+check for output files:
+
+* `stderr-per-bitwidth` — checks separate output files based on the target
+ pointer width. Consider using the `normalize-stderr` header instead (see
+ [Normalization](#normalization)).
+* `dont-check-compiler-stderr` — Ignores stderr from the compiler.
+* `dont-check-compiler-stdout` — Ignores stdout from the compiler.
+
+UI tests run with with `-Zdeduplicate-diagnostics=no` flag which disables
+rustc's built-in diagnostic deduplication mechanism.
+This means you may see some duplicate messages in the output.
+This helps illuminate situations where duplicate diagnostics are being
+generated.
+
+### Normalization
+
+The compiler output is normalized to eliminate output difference between
+platforms, mainly about filenames.
+
+Compiletest makes the following replacements on the compiler output:
+
+- The directory where the test is defined is replaced with `$DIR`.
+ Example: `/path/to/rust/src/test/ui/error-codes`
+- The directory to the standard library source is replaced with `$SRC_DIR`.
+ Example: `/path/to/rust/library`
+- Line and column numbers for paths in `$SRC_DIR` are replaced with `LL:COL`.
+ This helps ensure that changes to the layout of the standard library do not
+ cause widespread changes to the `.stderr` files.
+ Example: `$SRC_DIR/alloc/src/sync.rs:53:46`
+- The base directory where the test's output goes is replaced with `$TEST_BUILD_DIR`.
+ This only comes up in a few rare circumstances.
+ Example: `/path/to/rust/build/x86_64-unknown-linux-gnu/test/ui`
+- Tabs are replaced with `\t`.
+- Backslashes (`\`) are converted to forward slashes (`/`) within paths (using
+ a heuristic). This helps normalize differences with Windows-style paths.
+- CRLF newlines are converted to LF.
+- Error line annotations like `//~ ERROR some message` are removed.
+- Various v0 and legacy symbol hashes are replaced with placeholders like
+ `[HASH]` or `<SYMBOL_HASH>`.
+
+Additionally, the compiler is run with the `-Z ui-testing` flag which causes
+the compiler itself to apply some changes to the diagnostic output to make it
+more suitable for UI testing.
+For example, it will anonymize line numbers in the output (line numbers
+prefixing each source line are replaced with `LL`).
+In extremely rare situations, this mode can be disabled with the header
+command `// compile-flags: -Z ui-testing=no`.
+
+Note: The line and column numbers for `-->` lines pointing to the test are
+*not* normalized, and left as-is. This ensures that the compiler continues
+to point to the correct location, and keeps the stderr files readable.
+Ideally all line/column information would be retained, but small changes to
+the source causes large diffs, and more frequent merge conflicts and test
+errors.
+
+Sometimes these built-in normalizations are not enough. In such cases, you
+may provide custom normalization rules using the header commands, e.g.
+
+```rust,ignore
+// normalize-stdout-test: "foo" -> "bar"
+// normalize-stderr-32bit: "fn\(\) \(32 bits\)" -> "fn\(\) \($$PTR bits\)"
+// normalize-stderr-64bit: "fn\(\) \(64 bits\)" -> "fn\(\) \($$PTR bits\)"
+```
+
+This tells the test, on 32-bit platforms, whenever the compiler writes
+`fn() (32 bits)` to stderr, it should be normalized to read `fn() ($PTR bits)`
+instead. Similar for 64-bit. The replacement is performed by regexes using
+default regex flavor provided by `regex` crate.
+
+The corresponding reference file will use the normalized output to test both
+32-bit and 64-bit platforms:
+
+```text
+...
+ |
+ = note: source type: fn() ($PTR bits)
+ = note: target type: u16 (16 bits)
+...
+```
+
+Please see [`ui/transmute/main.rs`][mrs] and [`main.stderr`] for a
+concrete usage example.
+
+[mrs]: https://github.com/rust-lang/rust/blob/master/src/test/ui/transmute/main.rs
+[`main.stderr`]: https://github.com/rust-lang/rust/blob/master/src/test/ui/transmute/main.stderr
+
+Besides `normalize-stderr-32bit` and `-64bit`, one may use any target
+information or stage supported by [`ignore-X`](headers.md#ignoring-tests)
+here as well (e.g. `normalize-stderr-windows` or simply
+`normalize-stderr-test` for unconditional replacement).
+
+
+## Error annotations
+
+Error annotations specify the errors that the compiler is expected to emit.
+They are "attached" to the line in source where the error is located.
+
+```rust,ignore
+fn main() {
+ boom //~ ERROR cannot find value `boom` in this scope [E0425]
+}
+```
+
+Although UI tests have a `.stderr` file which contains the entire compiler output,
+UI tests require that errors are also annotated within the source.
+This redundancy helps avoid mistakes since the `.stderr` files are usually
+auto-generated.
+It also helps to directly see where the error spans are expected to point to
+by looking at one file instead of having to compare the `.stderr` file with
+the source.
+Finally, they ensure that no additional unexpected errors are generated.
+
+They have several forms, but generally are a comment with the diagnostic
+level (such as `ERROR`) and a substring of the expected error output.
+You don't have to write out the entire message, just make sure to include the
+important part of the message to make it self-documenting.
+
+The error annotation needs to match with the line of the diagnostic.
+There are several ways to match the message with the line (see the examples below):
+
+* `~`: Associates the error level and message with the current line
+* `~^`: Associates the error level and message with the previous error
+ annotation line.
+ Each caret (`^`) that you add adds a line to this, so `~^^^` is three lines
+ above the error annotation line.
+* `~|`: Associates the error level and message with the same line as the
+ previous comment.
+ This is more convenient than using multiple carets when there are multiple
+ messages associated with the same line.
+
+### Error annotation examples
+
+Here are examples of error annotations on different lines of UI test
+source.
+
+#### Positioned on error line
+
+Use the `//~ ERROR` idiom:
+
+```rust,ignore
+fn main() {
+ let x = (1, 2, 3);
+ match x {
+ (_a, _x @ ..) => {} //~ ERROR `_x @` is not allowed in a tuple
+ _ => {}
+ }
+}
+```
+
+#### Positioned below error line
+
+Use the `//~^` idiom with number of carets in the string to indicate the
+number of lines above.
+In the example below, the error line is four lines above the error annotation
+line so four carets are included in the annotation.
+
+```rust,ignore
+fn main() {
+ let x = (1, 2, 3);
+ match x {
+ (_a, _x @ ..) => {} // <- the error is on this line
+ _ => {}
+ }
+}
+//~^^^^ ERROR `_x @` is not allowed in a tuple
+```
+
+#### Use same error line as defined on error annotation line above
+
+Use the `//~|` idiom to define the same error line as the error annotation
+line above:
+
+```rust,ignore
+struct Binder(i32, i32, i32);
+
+fn main() {
+ let x = Binder(1, 2, 3);
+ match x {
+ Binder(_a, _x @ ..) => {} // <- the error is on this line
+ _ => {}
+ }
+}
+//~^^^^ ERROR `_x @` is not allowed in a tuple struct
+//~| ERROR this pattern has 1 field, but the corresponding tuple struct has 3 fields [E0023]
+```
+
+### `error-pattern`
+
+The `error-pattern` [header](headers.md) can be used for
+messages that don't have a specific span.
+
+Let's think about this test:
+
+```rust,ignore
+fn main() {
+ let a: *const [_] = &[1, 2, 3];
+ unsafe {
+ let _b = (*a)[3];
+ }
+}
+```
+
+We want to ensure this shows "index out of bounds" but we cannot use the
+`ERROR` annotation since the error doesn't have any span.
+Then it's time to use the `error-pattern` header:
+
+```rust,ignore
+// error-pattern: index out of bounds
+fn main() {
+ let a: *const [_] = &[1, 2, 3];
+ unsafe {
+ let _b = (*a)[3];
+ }
+}
+```
+
+But for strict testing, try to use the `ERROR` annotation as much as possible.
+
+### Error levels
+
+The error levels that you can have are:
+
+1. `ERROR`
+2. `WARN` or `WARNING`
+3. `NOTE`
+4. `HELP` and `SUGGESTION`
+
+You are allowed to not include a level, but you should include it at least for
+the primary message.
+
+The `SUGGESTION` level is used for specifying what the expected replacement
+text should be for a diagnostic suggestion.
+
+UI tests use the `-A unused` flag by default to ignore all unused warnings, as
+unused warnings are usually not the focus of a test.
+However, simple code samples often have unused warnings.
+If the test is specifically testing an unused warning, just add the
+appropriate `#![warn(unused)]` attribute as needed.
+
+### cfg revisions
+
+When using [revisions](compiletest.md#revisions), different messages can be
+conditionally checked based on the current revision.
+This is done by placing the revision cfg name in brackets like this:
+
+```rust,ignore
+// edition:2018
+// revisions: mir thir
+// [thir]compile-flags: -Z thir-unsafeck
+
+async unsafe fn f() {}
+
+async fn g() {
+ f(); //~ ERROR call to unsafe function is unsafe
+}
+
+fn main() {
+ f(); //[mir]~ ERROR call to unsafe function is unsafe
+}
+```
+
+In this example, the second error message is only emitted in the `mir` revision.
+The `thir` revision only emits the first error.
+
+If the cfg causes the compiler to emit different output, then a test can have
+multiple `.stderr` files for the different outputs.
+In the example above, there would be a `.mir.stderr` and `.thir.stderr` file
+with the different outputs of the different revisions.
+
+
+## Controlling pass/fail expectations
+
+By default, a UI test is expected to **generate a compile error** because most
+of the tests are checking for invalid input and error diagnostics.
+However, you can also make UI tests where compilation is expected to succeed,
+and you can even run the resulting program.
+Just add one of the following [header commands](headers.md):
+
+* Pass headers:
+ * `// check-pass` — compilation should succeed but skip codegen
+ (which is expensive and isn't supposed to fail in most cases).
+ * `// build-pass` — compilation and linking should succeed but do
+ not run the resulting binary.
+ * `// run-pass` — compilation should succeed and running the resulting
+ binary should also succeed.
+* Fail headers:
+ * `// check-fail` — compilation should fail (the codegen phase is skipped).
+ This is the default for UI tests.
+ * `// build-fail` — compilation should fail during the codegen phase.
+ This will run `rustc` twice, once to verify that it compiles successfully
+ without the codegen phase, then a second time the full compile should
+ fail.
+ * `// run-fail` — compilation should succeed, but running the resulting
+ binary should fail.
+
+For `run-pass` and `run-fail` tests, by default the output of the program
+itself is not checked.
+If you want to check the output of running the program, include the
+`check-run-results` header.
+This will check for a `.run.stderr` and `.run.stdout` files to compare
+against the actual output of the program.
+
+Tests with the `*-pass` headers can be overridden with the `--pass`
+command-line option:
+
+```sh
+./x.py test src/test/ui --pass check
+```
+
+The `--pass` option only affects UI tests.
+Using `--pass check` can run the UI test suite much faster (roughly twice as
+fast on my system), though obviously not exercising as much.
+
+The `ignore-pass` header can be used to ignore the `--pass` CLI flag if the
+test won't work properly with that override.
+
+
+## Known bugs
+
+The `known-bug` header may be used for tests that demonstrate a known bug that
+has not yet been fixed.
+Adding tests for known bugs is helpful for several reasons, including:
+
+1. Maintaining a functional test that can be conveniently reused when the bug is fixed.
+2. Providing a sentinel that will fail if the bug is incidentally fixed.
+ This can alert the developer so they know that the associated issue has
+ been fixed and can possibly be closed.
+
+Do not include [error annotations](#error-annotations) in a test with `known-bug`.
+The test should still include other normal headers and stdout/stderr files.
+
+
+## Test organization
+
+When deciding where to place a test file, please try to find a subdirectory
+that best matches what you are trying to exercise.
+Do your best to keep things organized.
+Admittedly it can be difficult as some tests can overlap different categories,
+and the existing layout may not fit well.
+
+For regression tests – basically, some random snippet of code that came in
+from the internet – we often name the test after the issue plus a short
+description.
+Ideally, the test should be added to a directory that helps identify what
+piece of code is being tested here (e.g.,
+`src/test/ui/borrowck/issue-54597-reject-move-out-of-borrow-via-pat.rs`)
+
+When writing a new feature, **create a subdirectory to store your tests**.
+For example, if you are implementing RFC 1234 ("Widgets"), then it might make
+sense to put the tests in a directory like `src/test/ui/rfc1234-widgets/`.
+
+In other cases, there may already be a suitable directory. (The proper
+directory structure to use is actually an area of active debate.)
+
+Over time, the [`src/test/ui`] directory has grown very fast.
+There is a check in [tidy](intro.md#tidy) that will ensure none of the
+subdirectories has more than 1000 entries.
+Having too many files causes problems because it isn't editor/IDE friendly and
+the GitHub UI won't show more than 1000 entries.
+However, since `src/test/ui` (UI test root directory) and `src/test/ui/issues`
+directories have more than 1000 entries, we set a different limit for those
+directories.
+So, please avoid putting a new test there and try to find a more relevant
+place.
+
+For example, if your test is related to closures, you should put it in
+`src/test/ui/closures`.
+If you're not sure where is the best place, it's still okay to add to
+`src/test/ui/issues/`.
+When you reach the limit, you could increase it by tweaking [here][ui test
+tidy].
+
+[ui test tidy]: https://github.com/rust-lang/rust/blob/master/src/tools/tidy/src/ui_tests.rs
+
+
+## Rustfix tests
+
+UI tests can validate that diagnostic suggestions apply correctly
+and that the resulting changes compile correctly.
+This can be done with the `run-rustfix` header:
+
+```rust,ignore
+// run-rustfix
+// check-pass
+#![crate_type = "lib"]
+
+pub struct not_camel_case {}
+//~^ WARN `not_camel_case` should have an upper camel case name
+//~| HELP convert the identifier to upper camel case
+//~| SUGGESTION NotCamelCase
+```
+
+Rustfix tests should have a file with the `.fixed` extension which contains
+the source file after the suggestion has been applied.
+
+When the test is run, compiletest first checks that the correct
+lint/warning is generated.
+Then, it applies the suggestion and compares against `.fixed` (they must match).
+Finally, the fixed source is compiled, and this compilation is required to succeed.
+
+Usually when creating a rustfix test you will generate the `.fixed` file
+automatically with the `x.py test --bless` option.
+
+The `run-rustfix` header will cause *all* suggestions to be applied, even
+if they are not [`MachineApplicable`](../diagnostics.md#suggestions).
+If this is a problem, then you can instead use the `rustfix-only-machine-applicable`
+header.
+This should be used if there is a mixture of different suggestion levels, and
+some of the non-machine-applicable ones do not apply cleanly.
+
+
+## Compare modes
+
+[Compare modes](compiletest.md#compare-modes) can be used to run all tests
+with different flags from what they are normally compiled with.
+In some cases, this might result in different output from the compiler.
+To support this, different output files can be saved which contain the
+output based on the compare mode.
+
+For example, when using the Polonius mode, a test `foo.rs` will
+first look for expected output in `foo.polonius.stderr`, falling back to the usual
+`foo.stderr` if not found.
+This is useful as different modes can sometimes result in different
+diagnostics and behavior.
+This can help track which tests have differences between the modes, and to
+visually inspect those diagnostic differences.
+
+If in the rare case you encounter a test that has different behavior, you can
+run something like the following to generate the alternate stderr file:
+
+```sh
+./x.py test src/test/ui --compare-mode=polonius --bless
+```
+
+Currently none of the compare modes are checked in CI for UI tests.
diff --git a/src/doc/rustc-dev-guide/src/the-parser.md b/src/doc/rustc-dev-guide/src/the-parser.md
new file mode 100644
index 000000000..ff43220c1
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/the-parser.md
@@ -0,0 +1,70 @@
+# Lexing and Parsing
+
+As of <!-- date: 2021-01 --> January 2021, the lexer and parser are undergoing
+refactoring to allow extracting them into libraries.
+
+The very first thing the compiler does is take the program (in Unicode
+characters) and turn it into something the compiler can work with more
+conveniently than strings. This happens in two stages: Lexing and Parsing.
+
+Lexing takes strings and turns them into streams of [tokens]. For example,
+`a.b + c` would be turned into the tokens `a`, `.`, `b`, `+`, and `c`.
+The lexer lives in [`rustc_lexer`][lexer].
+
+[tokens]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/token/index.html
+[lexer]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_lexer/index.html
+
+Parsing then takes streams of tokens and turns them into a structured
+form which is easier for the compiler to work with, usually called an [*Abstract
+Syntax Tree*][ast] (AST). An AST mirrors the structure of a Rust program in memory,
+using a `Span` to link a particular AST node back to its source text.
+
+The AST is defined in [`rustc_ast`][rustc_ast], along with some definitions for
+tokens and token streams, data structures/traits for mutating ASTs, and shared
+definitions for other AST-related parts of the compiler (like the lexer and
+macro-expansion).
+
+The parser is defined in [`rustc_parse`][rustc_parse], along with a
+high-level interface to the lexer and some validation routines that run after
+macro expansion. In particular, the [`rustc_parse::parser`][parser] contains
+the parser implementation.
+
+The main entrypoint to the parser is via the various `parse_*` functions and others in the
+[parser crate][parser_lib]. They let you do things like turn a [`SourceFile`][sourcefile]
+(e.g. the source in a single file) into a token stream, create a parser from
+the token stream, and then execute the parser to get a `Crate` (the root AST
+node).
+
+To minimise the amount of copying that is done, both the `StringReader` and
+`Parser` have lifetimes which bind them to the parent `ParseSess`. This contains
+all the information needed while parsing, as well as the `SourceMap` itself.
+
+Note that while parsing, we may encounter macro definitions or invocations. We
+set these aside to be expanded (see [this chapter](./macro-expansion.md)).
+Expansion may itself require parsing the output of the macro, which may reveal
+more macros to be expanded, and so on.
+
+## More on Lexical Analysis
+
+Code for lexical analysis is split between two crates:
+
+- `rustc_lexer` crate is responsible for breaking a `&str` into chunks
+ constituting tokens. Although it is popular to implement lexers as generated
+ finite state machines, the lexer in `rustc_lexer` is hand-written.
+
+- [`StringReader`] from [`rustc_ast`][rustc_ast] integrates `rustc_lexer` with `rustc`
+ specific data structures. Specifically, it adds `Span` information to tokens
+ returned by `rustc_lexer` and interns identifiers.
+
+[rustc_ast]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/index.html
+[rustc_errors]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_errors/index.html
+[ast]: https://en.wikipedia.org/wiki/Abstract_syntax_tree
+[`SourceMap`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/source_map/struct.SourceMap.html
+[ast module]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/ast/index.html
+[rustc_parse]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
+[parser_lib]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/index.html
+[parser]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/parser/index.html
+[`Parser`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/parse/parser/struct.Parser.html
+[`StringReader`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_parse/lexer/struct.StringReader.html
+[visit module]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_ast/visit/index.html
+[sourcefile]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.SourceFile.html
diff --git a/src/doc/rustc-dev-guide/src/thir.md b/src/doc/rustc-dev-guide/src/thir.md
new file mode 100644
index 000000000..4f8e6512c
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/thir.md
@@ -0,0 +1,223 @@
+# The THIR
+
+<!-- toc -->
+
+The THIR ("Typed High-Level Intermediate Representation"), previously called HAIR for
+"High-Level Abstract IR", is another IR used by rustc that is generated after
+[type checking]. It is (as of <!-- date: 2022-04 --> April 2022) only used for
+[MIR construction] and [exhaustiveness checking]. There is also
+[an experimental unsafety checker][thir-unsafeck] that operates on the THIR as a replacement for
+the current MIR unsafety checker, and can be used instead of the MIR unsafety checker by passing
+the `-Z thir-unsafeck` flag to `rustc`.
+
+[type checking]: ./type-checking.md
+[MIR construction]: ./mir/construction.md
+[exhaustiveness checking]: ./pat-exhaustive-checking.md
+[thir-unsafeck]: https://github.com/rust-lang/compiler-team/issues/402
+
+As the name might suggest, the THIR is a lowered version of the [HIR] where all
+the types have been filled in, which is possible after type checking has completed.
+But it has some other interesting features that distinguish it from the HIR:
+
+- Like the MIR, the THIR only represents bodies, i.e. "executable code"; this includes
+ function bodies, but also `const` initializers, for example. Specifically, all [body owners] have
+ THIR created. Consequently, the THIR has no representation for items like `struct`s or `trait`s.
+
+- Each body of THIR is only stored temporarily and is dropped as soon as it's no longer
+ needed, as opposed to being stored until the end of the compilation process (which
+ is what is done with the HIR).
+
+- Besides making the types of all nodes available, the THIR also has additional
+ desugaring compared to the HIR. For example, automatic references and dereferences
+ are made explicit, and method calls and overloaded operators are converted into
+ plain function calls. Destruction scopes are also made explicit.
+
+- Statements, expressions, and match arms are stored separately. For example, statements in the
+ `stmts` array reference expressions by their index (represented as a [`ExprId`]) in the `exprs`
+ array.
+
+[HIR]: ./hir.md
+[`ExprId`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/thir/struct.ExprId.html
+[body owners]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/enum.BodyOwnerKind.html
+
+The THIR lives in [`rustc_mir_build::thir`][thir-docs]. To construct a [`thir::Expr`],
+you can use the [`thir_body`] function, passing in the memory arena where the THIR
+will be allocated. Dropping this arena will result in the THIR being destroyed,
+which is useful to keep peak memory in check. Having a THIR representation of
+all bodies of a crate in memory at the same time would be very heavy.
+
+You can get a debug representation of the THIR by passing the `-Zunpretty=thir-tree` flag
+to `rustc`. Here is how a function with just the statement `let x = 1 + 2;` gets represented in
+THIR:
+```rust
+Thir {
+ // no match arms
+ arms: [],
+ exprs: [
+ // expression 0, a literal with a value of 1
+ Expr {
+ ty: i32,
+ temp_lifetime: Some(Node(6)),
+ span: oneplustwo.rs:2:13: 2:14 (#0),
+ kind: Literal {
+ literal: Const {
+ ty: i32,
+ val: Value(Scalar(0x00000001)),
+ },
+ user_ty: None,
+ const_id: None,
+ },
+ },
+ // expression 1, scope surronding literal 1
+ Expr {
+ ty: i32,
+ temp_lifetime: Some(Node(6)),
+ span: oneplustwo.rs:2:13: 2:14 (#0),
+ kind: Scope {
+ region_scope: Node(1),
+ lint_level: Explicit(HirId {
+ owner: DefId(0:3 ~ oneplustwo[6ccc]::main),
+ local_id: 1,
+ }),
+ // reference to expression 0 above
+ value: e0,
+ },
+ },
+ // expression 2, literal 2
+ Expr {
+ ty: i32,
+ temp_lifetime: Some(Node(6)),
+ span: oneplustwo.rs:2:17: 2:18 (#0),
+ kind: Literal {
+ literal: Const {
+ ty: i32,
+ val: Value(Scalar(0x00000002)),
+ },
+ user_ty: None,
+ const_id: None,
+ },
+ },
+ // expression 3, scope surrounding literal 2
+ Expr {
+ ty: i32,
+ temp_lifetime: Some(Node(6)),
+ span: oneplustwo.rs:2:17: 2:18 (#0),
+ kind: Scope {
+ region_scope: Node(2),
+ lint_level: Explicit(HirId {
+ owner: DefId(0:3 ~ oneplustwo[6ccc]::main),
+ local_id: 2,
+ }),
+ // reference to expression 2 above
+ value: e2,
+ },
+ },
+ // expression 4, represents 1 + 2
+ Expr {
+ ty: i32,
+ temp_lifetime: Some(Node(6)),
+ span: oneplustwo.rs:2:13: 2:18 (#0),
+ kind: Binary {
+ op: Add,
+ // references to scopes surronding literals above
+ lhs: e1,
+ rhs: e3,
+ },
+ },
+ // expression 5, scope surronding expression 4
+ Expr {
+ ty: i32,
+ temp_lifetime: Some(Node(6)),
+ span: oneplustwo.rs:2:13: 2:18 (#0),
+ kind: Scope {
+ region_scope: Node(3),
+ lint_level: Explicit(HirId {
+ owner: DefId(0:3 ~ oneplustwo[6ccc]::main),
+ local_id: 3,
+ }),
+ value: e4,
+ },
+ },
+ // expression 6, block around statement
+ Expr {
+ ty: (),
+ temp_lifetime: Some(Node(8)),
+ span: oneplustwo.rs:1:11: 3:2 (#0),
+ kind: Block {
+ body: Block {
+ targeted_by_break: false,
+ region_scope: Node(7),
+ opt_destruction_scope: None,
+ span: oneplustwo.rs:1:11: 3:2 (#0),
+ // reference to statement 0 below
+ stmts: [ s0 ],
+ expr: None,
+ safety_mode: Safe,
+ },
+ },
+ },
+ // expression 7, scope around block in expression 6
+ Expr {
+ ty: (),
+ temp_lifetime: Some(
+ Node(8),
+ ),
+ span: oneplustwo.rs:1:11: 3:2 (#0),
+ kind: Scope {
+ region_scope: Node(8),
+ lint_level: Explicit(HirId {
+ owner: DefId(0:3 ~ oneplustwo[6ccc]::main),
+ local_id: 8,
+ }),
+ value: e6,
+ },
+ },
+ // destruction scope around expression 7
+ Expr {
+ ty: (),
+ temp_lifetime: Some(Node(8)),
+ span: oneplustwo.rs:1:11: 3:2 (#0),
+ kind: Scope {
+ region_scope: Destruction(8),
+ lint_level: Inherited,
+ value: e7,
+ },
+ },
+ ],
+ stmts: [
+ // let statement
+ Stmt {
+ kind: Let {
+ remainder_scope: Remainder { block: 7, first_statement_index: 0},
+ init_scope: Node(6),
+ pattern: Pat {
+ ty: i32,
+ span: oneplustwo.rs:2:9: 2:10 (#0),
+ kind: Binding {
+ mutability: Not,
+ name: "x",
+ mode: ByValue,
+ var: HirId {
+ owner: DefId(0:3 ~ oneplustwo[6ccc]::main),
+ local_id: 5,
+ },
+ ty: i32,
+ subpattern: None,
+ is_primary: true,
+ },
+ },
+ initializer: Some(e5),
+ lint_level: Explicit(HirId {
+ owner: DefId(0:3 ~ oneplustwo[6ccc]::main),
+ local_id: 4,
+ }),
+ },
+ opt_destruction_scope: Some(Destruction(6)),
+ },
+ ],
+}
+```
+
+[thir-docs]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_mir_build/thir/index.html
+[`thir::Expr`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/thir/struct.Expr.html
+[`thir_body`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/context/struct.TyCtxt.html#method.thir_body
diff --git a/src/doc/rustc-dev-guide/src/tracing.md b/src/doc/rustc-dev-guide/src/tracing.md
new file mode 100644
index 000000000..0bba73f74
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/tracing.md
@@ -0,0 +1,228 @@
+# Using tracing to debug the compiler
+
+<!-- toc -->
+
+The compiler has a lot of [`debug!`] (or `trace!`) calls, which print out logging information
+at many points. These are very useful to at least narrow down the location of
+a bug if not to find it entirely, or just to orient yourself as to why the
+compiler is doing a particular thing.
+
+[`debug!`]: https://docs.rs/tracing/0.1/tracing/macro.debug.html
+
+To see the logs, you need to set the `RUSTC_LOG` environment variable to your
+log filter. The full syntax of the log filters can be found in the [rustdoc
+of `tracing-subscriber`](https://docs.rs/tracing-subscriber/0.2.24/tracing_subscriber/filter/struct.EnvFilter.html#directives).
+
+## Function level filters
+
+Lots of functions in rustc are annotated with
+
+```
+#[instrument(level = "debug", skip(self))]
+fn foo(&self, bar: Type) {}
+```
+
+which allows you to use
+
+```
+RUSTC_LOG=[foo]
+```
+
+to do the following all at once
+
+* log all function calls to `foo`
+* log the arguments (except for those in the `skip` list)
+* log everything (from anywhere else in the compiler) until the function returns
+
+### I don't want everything
+
+Depending on the scope of the function, you may not want to log everything in its body.
+As an example: the `do_mir_borrowck` function will dump hundreds of lines even for trivial
+code being borrowchecked.
+
+Since you can combine all filters, you can add a crate/module path, e.g.
+
+```
+RUSTC_LOG=rustc_borrowck[do_mir_borrowck]
+```
+
+### I don't want all calls
+
+If you are compiling libcore, you likely don't want *all* borrowck dumps, but only one
+for a specific function. You can filter function calls by their arguments by regexing them.
+
+```
+RUSTC_LOG=[do_mir_borrowck{id=\.\*from_utf8_unchecked\.\*}]
+```
+
+will only give you the logs of borrowchecking `from_utf8_unchecked`. Note that you will
+still get a short message per ignored `do_mir_borrowck`, but none of the things inside those
+calls. This helps you in looking through the calls that are happening and helps you adjust
+your regex if you mistyped it.
+
+## Query level filters
+
+Every [query](query.md) is automatically tagged with a logging span so that
+you can display all log messages during the execution of the query. For
+example, if you want to log everything during type checking:
+
+```
+RUSTC_LOG=[typeck]
+```
+
+The query arguments are included as a tracing field which means that you can
+filter on the debug display of the arguments. For example, the `typeck` query
+has an argument `key: LocalDefId` of what is being checked. You can use a
+regex to match on that `LocalDefId` to log type checking for a specific
+function:
+
+```
+RUSTC_LOG=[typeck{key=.*name_of_item.*}]
+```
+
+Different queries have different arguments. You can find a list of queries and
+their arguments in
+[`rustc_middle/src/query/mod.rs`](https://github.com/rust-lang/rust/blob/master/compiler/rustc_middle/src/query/mod.rs#L18).
+
+## Broad module level filters
+
+You can also use filters similar to the `log` crate's filters, which will enable
+everything within a specific module. This is often too verbose and too unstructured,
+so it is recommended to use function level filters.
+
+Your log filter can be just `debug` to get all `debug!` output and
+higher (e.g., it will also include `info!`), or `path::to::module` to get *all*
+output (which will include `trace!`) from a particular module, or
+`path::to::module=debug` to get `debug!` output and higher from a particular
+module.
+
+For example, to get the `debug!` output and higher for a specific module, you
+can run the compiler with `RUSTC_LOG=path::to::module=debug rustc my-file.rs`.
+All `debug!` output will then appear in standard error.
+
+Note that you can use a partial path and the filter will still work. For
+example, if you want to see `info!` output from only
+`rustdoc::passes::collect_intra_doc_links`, you could use
+`RUSTDOC_LOG=rustdoc::passes::collect_intra_doc_links=info` *or* you could use
+`RUSTDOC_LOG=rustdoc::passes::collect_intra=info`.
+
+If you are developing rustdoc, use `RUSTDOC_LOG` instead. If you are developing
+Miri, use `MIRI_LOG` instead. You get the idea :)
+
+See the [`tracing`] crate's docs, and specifically the docs for [`debug!`] to
+see the full syntax you can use. (Note: unlike the compiler, the [`tracing`]
+crate and its examples use the `RUST_LOG` environment variable. rustc, rustdoc,
+and other tools set custom environment variables.)
+
+**Note that unless you use a very strict filter, the logger will emit a lot of
+output, so use the most specific module(s) you can (comma-separated if
+multiple)**. It's typically a good idea to pipe standard error to a file and
+look at the log output with a text editor.
+
+So, to put it together:
+
+```bash
+# This puts the output of all debug calls in `rustc_middle/src/traits` into
+# standard error, which might fill your console backscroll.
+$ RUSTC_LOG=rustc_middle::traits=debug rustc +stage1 my-file.rs
+
+# This puts the output of all debug calls in `rustc_middle/src/traits` in
+# `traits-log`, so you can then see it with a text editor.
+$ RUSTC_LOG=rustc_middle::traits=debug rustc +stage1 my-file.rs 2>traits-log
+
+# Not recommended! This will show the output of all `debug!` calls
+# in the Rust compiler, and there are a *lot* of them, so it will be
+# hard to find anything.
+$ RUSTC_LOG=debug rustc +stage1 my-file.rs 2>all-log
+
+# This will show the output of all `info!` calls in `rustc_codegen_ssa`.
+#
+# There's an `info!` statement in `codegen_instance` that outputs
+# every function that is codegen'd. This is useful to find out
+# which function triggers an LLVM assertion, and this is an `info!`
+# log rather than a `debug!` log so it will work on the official
+# compilers.
+$ RUSTC_LOG=rustc_codegen_ssa=info rustc +stage1 my-file.rs
+
+# This will show the output of all `info!` calls made by rustdoc
+# or any rustc library it calls.
+$ RUSTDOC_LOG=info rustdoc +stage1 my-file.rs
+
+# This will only show `debug!` calls made by rustdoc directly,
+# not any `rustc*` crate.
+$ RUSTDOC_LOG=rustdoc=debug rustdoc +stage1 my-file.rs
+```
+
+## Log colors
+
+By default, rustc (and other tools, like rustdoc and Miri) will be smart about
+when to use ANSI colors in the log output. If they are outputting to a terminal,
+they will use colors, and if they are outputting to a file or being piped
+somewhere else, they will not. However, it's hard to read log output in your
+terminal unless you have a very strict filter, so you may want to pipe the
+output to a pager like `less`. But then there won't be any colors, which makes
+it hard to pick out what you're looking for!
+
+You can override whether to have colors in log output with the `RUSTC_LOG_COLOR`
+environment variable (or `RUSTDOC_LOG_COLOR` for rustdoc, or `MIRI_LOG_COLOR`
+for Miri, etc.). There are three options: `auto` (the default), `always`, and
+`never`. So, if you want to enable colors when piping to `less`, use something
+similar to this command:
+
+```bash
+# The `-R` switch tells less to print ANSI colors without escaping them.
+$ RUSTC_LOG=debug RUSTC_LOG_COLOR=always rustc +stage1 ... | less -R
+```
+
+Note that `MIRI_LOG_COLOR` will only color logs that come from Miri, not logs
+from rustc functions that Miri calls. Use `RUSTC_LOG_COLOR` to color logs from
+rustc.
+
+## How to keep or remove `debug!` and `trace!` calls from the resulting binary
+
+While calls to `error!`, `warn!` and `info!` are included in every build of the compiler,
+calls to `debug!` and `trace!` are only included in the program if
+`debug-logging=true` is turned on in config.toml (it is
+turned off by default), so if you don't see `DEBUG` logs, especially
+if you run the compiler with `RUSTC_LOG=rustc rustc some.rs` and only see
+`INFO` logs, make sure that `debug-logging=true` is turned on in your
+config.toml.
+
+## Logging etiquette and conventions
+
+Because calls to `debug!` are removed by default, in most cases, don't worry
+about the performance of adding "unnecessary" calls to `debug!` and leaving them in code you
+commit - they won't slow down the performance of what we ship.
+
+That said, there can also be excessive tracing calls, especially
+when they are redundant with other calls nearby or in functions called from
+here. There is no perfect balance to hit here, and is left to the reviewer's
+discretion to decide whether to let you leave `debug!` statements in or whether to ask
+you to remove them before merging.
+
+It may be preferable to use `trace!` over `debug!` for very noisy logs.
+
+A loosely followed convention is to use `#[instrument(level = "debug")]`
+([also see the attribute's documentation](https://docs.rs/tracing-attributes/0.1.17/tracing_attributes/attr.instrument.html))
+in favour of `debug!("foo(...)")` at the start of a function `foo`.
+Within functions, prefer `debug!(?variable.field)` over `debug!("xyz = {:?}", variable.field)`
+and `debug!(bar = ?var.method(arg))` over `debug!("bar = {:?}", var.method(arg))`.
+The documentation for this syntax can be found [here](https://docs.rs/tracing/0.1.28/tracing/#recording-fields).
+
+One thing to be **careful** of is **expensive** operations in logs.
+
+If in the module `rustc::foo` you have a statement
+
+```Rust
+debug!(x = ?random_operation(tcx));
+```
+
+Then if someone runs a debug `rustc` with `RUSTC_LOG=rustc::foo`, then
+`random_operation()` will run. `RUSTC_LOG` filters that do not enable this
+debug statement will not execute `random_operation`.
+
+This means that you should not put anything too expensive or likely to crash
+there - that would annoy anyone who wants to use logging for that module.
+No-one will know it until someone tries to use logging to find *another* bug.
+
+[`tracing`]: https://docs.rs/tracing
diff --git a/src/doc/rustc-dev-guide/src/traits/caching.md b/src/doc/rustc-dev-guide/src/traits/caching.md
new file mode 100644
index 000000000..54bd0704a
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/caching.md
@@ -0,0 +1,67 @@
+# Caching and subtle considerations therewith
+
+In general, we attempt to cache the results of trait selection. This
+is a somewhat complex process. Part of the reason for this is that we
+want to be able to cache results even when all the types in the trait
+reference are not fully known. In that case, it may happen that the
+trait selection process is also influencing type variables, so we have
+to be able to not only cache the *result* of the selection process,
+but *replay* its effects on the type variables.
+
+## An example
+
+The high-level idea of how the cache works is that we first replace
+all unbound inference variables with placeholder versions. Therefore,
+if we had a trait reference `usize : Foo<$t>`, where `$t` is an unbound
+inference variable, we might replace it with `usize : Foo<$0>`, where
+`$0` is a placeholder type. We would then look this up in the cache.
+
+If we found a hit, the hit would tell us the immediate next step to
+take in the selection process (e.g. apply impl #22, or apply where
+clause `X : Foo<Y>`).
+
+On the other hand, if there is no hit, we need to go through the [selection
+process] from scratch. Suppose, we come to the conclusion that the only
+possible impl is this one, with def-id 22:
+
+[selection process]: ./resolution.html#selection
+
+```rust,ignore
+impl Foo<isize> for usize { ... } // Impl #22
+```
+
+We would then record in the cache `usize : Foo<$0> => ImplCandidate(22)`. Next
+we would [confirm] `ImplCandidate(22)`, which would (as a side-effect) unify
+`$t` with `isize`.
+
+[confirm]: ./resolution.html#confirmation
+
+Now, at some later time, we might come along and see a `usize :
+Foo<$u>`. When replaced with a placeholder, this would yield `usize : Foo<$0>`, just as
+before, and hence the cache lookup would succeed, yielding
+`ImplCandidate(22)`. We would confirm `ImplCandidate(22)` which would
+(as a side-effect) unify `$u` with `isize`.
+
+## Where clauses and the local vs global cache
+
+One subtle interaction is that the results of trait lookup will vary
+depending on what where clauses are in scope. Therefore, we actually
+have *two* caches, a local and a global cache. The local cache is
+attached to the [`ParamEnv`], and the global cache attached to the
+[`tcx`]. We use the local cache whenever the result might depend on the
+where clauses that are in scope. The determination of which cache to
+use is done by the method `pick_candidate_cache` in `select.rs`. At
+the moment, we use a very simple, conservative rule: if there are any
+where-clauses in scope, then we use the local cache. We used to try
+and draw finer-grained distinctions, but that led to a series of
+annoying and weird bugs like [#22019] and [#18290]. This simple rule seems
+to be pretty clearly safe and also still retains a very high hit rate
+(~95% when compiling rustc).
+
+**TODO**: it looks like `pick_candidate_cache` no longer exists. In
+general, is this section still accurate at all?
+
+[`ParamEnv`]: ../param_env.html
+[`tcx`]: ../ty.html
+[#18290]: https://github.com/rust-lang/rust/issues/18290
+[#22019]: https://github.com/rust-lang/rust/issues/22019
diff --git a/src/doc/rustc-dev-guide/src/traits/canonical-queries.md b/src/doc/rustc-dev-guide/src/traits/canonical-queries.md
new file mode 100644
index 000000000..5ba450d4e
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/canonical-queries.md
@@ -0,0 +1,247 @@
+# Canonical queries
+
+The "start" of the trait system is the **canonical query** (these are
+both queries in the more general sense of the word – something you
+would like to know the answer to – and in the
+[rustc-specific sense](../query.html)). The idea is that the type
+checker or other parts of the system, may in the course of doing their
+thing want to know whether some trait is implemented for some type
+(e.g., is `u32: Debug` true?). Or they may want to
+normalize some associated type.
+
+This section covers queries at a fairly high level of abstraction. The
+subsections look a bit more closely at how these ideas are implemented
+in rustc.
+
+## The traditional, interactive Prolog query
+
+In a traditional Prolog system, when you start a query, the solver
+will run off and start supplying you with every possible answer it can
+find. So given something like this:
+
+```text
+?- Vec<i32>: AsRef<?U>
+```
+
+The solver might answer:
+
+```text
+Vec<i32>: AsRef<[i32]>
+ continue? (y/n)
+```
+
+This `continue` bit is interesting. The idea in Prolog is that the
+solver is finding **all possible** instantiations of your query that
+are true. In this case, if we instantiate `?U = [i32]`, then the query
+is true (note that a traditional Prolog interface does not, directly,
+tell us a value for `?U`, but we can infer one by unifying the
+response with our original query – Rust's solver gives back a
+substitution instead). If we were to hit `y`, the solver might then
+give us another possible answer:
+
+```text
+Vec<i32>: AsRef<Vec<i32>>
+ continue? (y/n)
+```
+
+This answer derives from the fact that there is a reflexive impl
+(`impl<T> AsRef<T> for T`) for `AsRef`. If were to hit `y` again,
+then we might get back a negative response:
+
+```text
+no
+```
+
+Naturally, in some cases, there may be no possible answers, and hence
+the solver will just give me back `no` right away:
+
+```text
+?- Box<i32>: Copy
+ no
+```
+
+In some cases, there might be an infinite number of responses. So for
+example if I gave this query, and I kept hitting `y`, then the solver
+would never stop giving me back answers:
+
+```text
+?- Vec<?U>: Clone
+ Vec<i32>: Clone
+ continue? (y/n)
+ Vec<Box<i32>>: Clone
+ continue? (y/n)
+ Vec<Box<Box<i32>>>: Clone
+ continue? (y/n)
+ Vec<Box<Box<Box<i32>>>>: Clone
+ continue? (y/n)
+```
+
+As you can imagine, the solver will gleefully keep adding another
+layer of `Box` until we ask it to stop, or it runs out of memory.
+
+Another interesting thing is that queries might still have variables
+in them. For example:
+
+```text
+?- Rc<?T>: Clone
+```
+
+might produce the answer:
+
+```text
+Rc<?T>: Clone
+ continue? (y/n)
+```
+
+After all, `Rc<?T>` is true **no matter what type `?T` is**.
+
+<a name="query-response"></a>
+
+## A trait query in rustc
+
+The trait queries in rustc work somewhat differently. Instead of
+trying to enumerate **all possible** answers for you, they are looking
+for an **unambiguous** answer. In particular, when they tell you the
+value for a type variable, that means that this is the **only possible
+instantiation** that you could use, given the current set of impls and
+where-clauses, that would be provable.
+
+The response to a trait query in rustc is typically a
+`Result<QueryResult<T>, NoSolution>` (where the `T` will vary a bit
+depending on the query itself). The `Err(NoSolution)` case indicates
+that the query was false and had no answers (e.g., `Box<i32>: Copy`).
+Otherwise, the `QueryResult` gives back information about the possible answer(s)
+we did find. It consists of four parts:
+
+- **Certainty:** tells you how sure we are of this answer. It can have two
+ values:
+ - `Proven` means that the result is known to be true.
+ - This might be the result for trying to prove `Vec<i32>: Clone`,
+ say, or `Rc<?T>: Clone`.
+ - `Ambiguous` means that there were things we could not yet prove to
+ be either true *or* false, typically because more type information
+ was needed. (We'll see an example shortly.)
+ - This might be the result for trying to prove `Vec<?T>: Clone`.
+- **Var values:** Values for each of the unbound inference variables
+ (like `?T`) that appeared in your original query. (Remember that in Prolog,
+ we had to infer these.)
+ - As we'll see in the example below, we can get back var values even
+ for `Ambiguous` cases.
+- **Region constraints:** these are relations that must hold between
+ the lifetimes that you supplied as inputs. We'll ignore these here.
+- **Value:** The query result also comes with a value of type `T`. For
+ some specialized queries – like normalizing associated types –
+ this is used to carry back an extra result, but it's often just
+ `()`.
+
+### Examples
+
+Let's work through an example query to see what all the parts mean.
+Consider [the `Borrow` trait][borrow]. This trait has a number of
+impls; among them, there are these two (for clarity, I've written the
+`Sized` bounds explicitly):
+
+[borrow]: https://doc.rust-lang.org/std/borrow/trait.Borrow.html
+
+```rust,ignore
+impl<T> Borrow<T> for T where T: ?Sized
+impl<T> Borrow<[T]> for Vec<T> where T: Sized
+```
+
+**Example 1.** Imagine we are type-checking this (rather artificial)
+bit of code:
+
+```rust,ignore
+fn foo<A, B>(a: A, vec_b: Option<B>) where A: Borrow<B> { }
+
+fn main() {
+ let mut t: Vec<_> = vec![]; // Type: Vec<?T>
+ let mut u: Option<_> = None; // Type: Option<?U>
+ foo(t, u); // Example 1: requires `Vec<?T>: Borrow<?U>`
+ ...
+}
+```
+
+As the comments indicate, we first create two variables `t` and `u`;
+`t` is an empty vector and `u` is a `None` option. Both of these
+variables have unbound inference variables in their type: `?T`
+represents the elements in the vector `t` and `?U` represents the
+value stored in the option `u`. Next, we invoke `foo`; comparing the
+signature of `foo` to its arguments, we wind up with `A = Vec<?T>` and
+`B = ?U`. Therefore, the where clause on `foo` requires that `Vec<?T>:
+Borrow<?U>`. This is thus our first example trait query.
+
+There are many possible solutions to the query `Vec<?T>: Borrow<?U>`;
+for example:
+
+- `?U = Vec<?T>`,
+- `?U = [?T]`,
+- `?T = u32, ?U = [u32]`
+- and so forth.
+
+Therefore, the result we get back would be as follows (I'm going to
+ignore region constraints and the "value"):
+
+- Certainty: `Ambiguous` – we're not sure yet if this holds
+- Var values: `[?T = ?T, ?U = ?U]` – we learned nothing about the values of
+ the variables
+
+In short, the query result says that it is too soon to say much about
+whether this trait is proven. During type-checking, this is not an
+immediate error: instead, the type checker would hold on to this
+requirement (`Vec<?T>: Borrow<?U>`) and wait. As we'll see in the next
+example, it may happen that `?T` and `?U` wind up constrained from
+other sources, in which case we can try the trait query again.
+
+**Example 2.** We can now extend our previous example a bit,
+and assign a value to `u`:
+
+```rust,ignore
+fn foo<A, B>(a: A, vec_b: Option<B>) where A: Borrow<B> { }
+
+fn main() {
+ // What we saw before:
+ let mut t: Vec<_> = vec![]; // Type: Vec<?T>
+ let mut u: Option<_> = None; // Type: Option<?U>
+ foo(t, u); // `Vec<?T>: Borrow<?U>` => ambiguous
+
+ // New stuff:
+ u = Some(vec![]); // ?U = Vec<?V>
+}
+```
+
+As a result of this assignment, the type of `u` is forced to be
+`Option<Vec<?V>>`, where `?V` represents the element type of the
+vector. This in turn implies that `?U` is [unified] to `Vec<?V>`.
+
+[unified]: ../type-checking.html
+
+Let's suppose that the type checker decides to revisit the
+"as-yet-unproven" trait obligation we saw before, `Vec<?T>:
+Borrow<?U>`. `?U` is no longer an unbound inference variable; it now
+has a value, `Vec<?V>`. So, if we "refresh" the query with that value, we get:
+
+```text
+Vec<?T>: Borrow<Vec<?V>>
+```
+
+This time, there is only one impl that applies, the reflexive impl:
+
+```text
+impl<T> Borrow<T> for T where T: ?Sized
+```
+
+Therefore, the trait checker will answer:
+
+- Certainty: `Proven`
+- Var values: `[?T = ?T, ?V = ?T]`
+
+Here, it is saying that we have indeed proven that the obligation
+holds, and we also know that `?T` and `?V` are the same type (but we
+don't know what that type is yet!).
+
+(In fact, as the function ends here, the type checker would give an
+error at this point, since the element types of `t` and `u` are still
+not yet known, even though they are known to be the same.)
+
+
diff --git a/src/doc/rustc-dev-guide/src/traits/chalk.md b/src/doc/rustc-dev-guide/src/traits/chalk.md
new file mode 100644
index 000000000..d4045c460
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/chalk.md
@@ -0,0 +1,41 @@
+# Chalk-based trait solving
+
+[Chalk][chalk] is an experimental trait solver for Rust that is (as of <!--
+date: 2022-05 --> May 2022) under development by the [Types team].
+Its goal is to enable a lot of trait system features and bug fixes
+that are hard to implement (e.g. GATs or specialization). If you would like to
+help in hacking on the new solver, drop by on the rust-lang Zulip in the [`#t-types`]
+stream and say hello!
+
+[Types team]: https://github.com/rust-lang/types-team
+[`#t-types`]: https://rust-lang.zulipchat.com/#narrow/stream/144729-t-types
+
+The new-style trait solver is based on the work done in [chalk][chalk]. Chalk
+recasts Rust's trait system explicitly in terms of logic programming. It does
+this by "lowering" Rust code into a kind of logic program we can then execute
+queries against.
+
+The key observation here is that the Rust trait system is basically a
+kind of logic, and it can be mapped onto standard logical inference
+rules. We can then look for solutions to those inference rules in a
+very similar fashion to how e.g. a [Prolog] solver works. It turns out
+that we can't *quite* use Prolog rules (also called Horn clauses) but
+rather need a somewhat more expressive variant.
+
+[Prolog]: https://en.wikipedia.org/wiki/Prolog
+
+You can read more about chalk itself in the
+[Chalk book](https://rust-lang.github.io/chalk/book/) section.
+
+## Ongoing work
+The design of the new-style trait solving happens in two places:
+
+**chalk**. The [chalk][chalk] repository is where we experiment with new ideas
+and designs for the trait system.
+
+**rustc**. Once we are happy with the logical rules, we proceed to
+implementing them in rustc. We map our struct, trait, and impl declarations
+into logical inference rules in the lowering module in rustc.
+
+[chalk]: https://github.com/rust-lang/chalk
+[rustc_traits]: https://github.com/rust-lang/rust/tree/master/compiler/rustc_traits
diff --git a/src/doc/rustc-dev-guide/src/traits/goals-and-clauses.md b/src/doc/rustc-dev-guide/src/traits/goals-and-clauses.md
new file mode 100644
index 000000000..4315b3e0f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/goals-and-clauses.md
@@ -0,0 +1,272 @@
+# Goals and clauses
+
+<!-- toc -->
+
+In logic programming terms, a **goal** is something that you must
+prove and a **clause** is something that you know is true. As
+described in the [lowering to logic](./lowering-to-logic.html)
+chapter, Rust's trait solver is based on an extension of hereditary
+harrop (HH) clauses, which extend traditional Prolog Horn clauses with
+a few new superpowers.
+
+## Goals and clauses meta structure
+
+In Rust's solver, **goals** and **clauses** have the following forms
+(note that the two definitions reference one another):
+
+```text
+Goal = DomainGoal // defined in the section below
+ | Goal && Goal
+ | Goal || Goal
+ | exists<K> { Goal } // existential quantification
+ | forall<K> { Goal } // universal quantification
+ | if (Clause) { Goal } // implication
+ | true // something that's trivially true
+ | ambiguous // something that's never provable
+
+Clause = DomainGoal
+ | Clause :- Goal // if can prove Goal, then Clause is true
+ | Clause && Clause
+ | forall<K> { Clause }
+
+K = <type> // a "kind"
+ | <lifetime>
+```
+
+The proof procedure for these sorts of goals is actually quite
+straightforward. Essentially, it's a form of depth-first search. The
+paper
+["A Proof Procedure for the Logic of Hereditary Harrop Formulas"][pphhf]
+gives the details.
+
+In terms of code, these types are defined in
+[`rustc_middle/src/traits/mod.rs`][traits_mod] in rustc, and in
+[`chalk-ir/src/lib.rs`][chalk_ir] in chalk.
+
+[pphhf]: https://rust-lang.github.io/chalk/book/bibliography.html#pphhf
+[traits_mod]: https://github.com/rust-lang/rust/blob/master/compiler/rustc_middle/src/traits/mod.rs
+[chalk_ir]: https://github.com/rust-lang/chalk/blob/master/chalk-ir/src/lib.rs
+
+<a name="domain-goals"></a>
+
+## Domain goals
+
+*Domain goals* are the atoms of the trait logic. As can be seen in the
+definitions given above, general goals basically consist in a combination of
+domain goals.
+
+Moreover, flattening a bit the definition of clauses given previously, one can
+see that clauses are always of the form:
+```text
+forall<K1, ..., Kn> { DomainGoal :- Goal }
+```
+hence domain goals are in fact clauses' LHS. That is, at the most granular level,
+domain goals are what the trait solver will end up trying to prove.
+
+<a name="trait-ref"></a>
+
+To define the set of domain goals in our system, we need to first
+introduce a few simple formulations. A **trait reference** consists of
+the name of a trait along with a suitable set of inputs P0..Pn:
+
+```text
+TraitRef = P0: TraitName<P1..Pn>
+```
+
+So, for example, `u32: Display` is a trait reference, as is `Vec<T>:
+IntoIterator`. Note that Rust surface syntax also permits some extra
+things, like associated type bindings (`Vec<T>: IntoIterator<Item =
+T>`), that are not part of a trait reference.
+
+<a name="projection"></a>
+
+A **projection** consists of an associated item reference along with
+its inputs P0..Pm:
+
+```text
+Projection = <P0 as TraitName<P1..Pn>>::AssocItem<Pn+1..Pm>
+```
+
+Given these, we can define a `DomainGoal` as follows:
+
+```text
+DomainGoal = Holds(WhereClause)
+ | FromEnv(TraitRef)
+ | FromEnv(Type)
+ | WellFormed(TraitRef)
+ | WellFormed(Type)
+ | Normalize(Projection -> Type)
+
+WhereClause = Implemented(TraitRef)
+ | ProjectionEq(Projection = Type)
+ | Outlives(Type: Region)
+ | Outlives(Region: Region)
+```
+
+`WhereClause` refers to a `where` clause that a Rust user would actually be able
+to write in a Rust program. This abstraction exists only as a convenience as we
+sometimes want to only deal with domain goals that are effectively writable in
+Rust.
+
+Let's break down each one of these, one-by-one.
+
+#### Implemented(TraitRef)
+e.g. `Implemented(i32: Copy)`
+
+True if the given trait is implemented for the given input types and lifetimes.
+
+#### ProjectionEq(Projection = Type)
+e.g. `ProjectionEq<T as Iterator>::Item = u8`
+
+The given associated type `Projection` is equal to `Type`; this can be proved
+with either normalization or using placeholder associated types. See
+[the section on associated types in Chalk Book][at].
+
+#### Normalize(Projection -> Type)
+e.g. `ProjectionEq<T as Iterator>::Item -> u8`
+
+The given associated type `Projection` can be [normalized][n] to `Type`.
+
+As discussed in [the section on associated
+types in Chalk Book][at], `Normalize` implies `ProjectionEq`,
+but not vice versa. In general, proving `Normalize(<T as Trait>::Item -> U)`
+also requires proving `Implemented(T: Trait)`.
+
+[n]: https://rust-lang.github.io/chalk/book/clauses/type_equality.html#normalize
+[at]: https://rust-lang.github.io/chalk/book/clauses/type_equality.html
+
+#### FromEnv(TraitRef)
+e.g. `FromEnv(Self: Add<i32>)`
+
+True if the inner `TraitRef` is *assumed* to be true,
+that is, if it can be derived from the in-scope where clauses.
+
+For example, given the following function:
+
+```rust
+fn loud_clone<T: Clone>(stuff: &T) -> T {
+ println!("cloning!");
+ stuff.clone()
+}
+```
+
+Inside the body of our function, we would have `FromEnv(T: Clone)`. In-scope
+where clauses nest, so a function body inside an impl body inherits the
+impl body's where clauses, too.
+
+This and the next rule are used to implement [implied bounds]. As we'll see
+in the section on lowering, `FromEnv(TraitRef)` implies `Implemented(TraitRef)`,
+but not vice versa. This distinction is crucial to implied bounds.
+
+#### FromEnv(Type)
+e.g. `FromEnv(HashSet<K>)`
+
+True if the inner `Type` is *assumed* to be well-formed, that is, if it is an
+input type of a function or an impl.
+
+For example, given the following code:
+
+```rust,ignore
+struct HashSet<K> where K: Hash { ... }
+
+fn loud_insert<K>(set: &mut HashSet<K>, item: K) {
+ println!("inserting!");
+ set.insert(item);
+}
+```
+
+`HashSet<K>` is an input type of the `loud_insert` function. Hence, we assume it
+to be well-formed, so we would have `FromEnv(HashSet<K>)` inside the body of our
+function. As we'll see in the section on lowering, `FromEnv(HashSet<K>)` implies
+`Implemented(K: Hash)` because the
+`HashSet` declaration was written with a `K: Hash` where clause. Hence, we don't
+need to repeat that bound on the `loud_insert` function: we rather automatically
+assume that it is true.
+
+#### WellFormed(Item)
+These goals imply that the given item is *well-formed*.
+
+We can talk about different types of items being well-formed:
+
+* *Types*, like `WellFormed(Vec<i32>)`, which is true in Rust, or
+ `WellFormed(Vec<str>)`, which is not (because `str` is not `Sized`.)
+
+* *TraitRefs*, like `WellFormed(Vec<i32>: Clone)`.
+
+Well-formedness is important to [implied bounds]. In particular, the reason
+it is okay to assume `FromEnv(T: Clone)` in the `loud_clone` example is that we
+_also_ verify `WellFormed(T: Clone)` for each call site of `loud_clone`.
+Similarly, it is okay to assume `FromEnv(HashSet<K>)` in the `loud_insert`
+example because we will verify `WellFormed(HashSet<K>)` for each call site of
+`loud_insert`.
+
+#### Outlives(Type: Region), Outlives(Region: Region)
+e.g. `Outlives(&'a str: 'b)`, `Outlives('a: 'static)`
+
+True if the given type or region on the left outlives the right-hand region.
+
+<a name="coinductive"></a>
+
+## Coinductive goals
+
+Most goals in our system are "inductive". In an inductive goal,
+circular reasoning is disallowed. Consider this example clause:
+
+```text
+ Implemented(Foo: Bar) :-
+ Implemented(Foo: Bar).
+```
+
+Considered inductively, this clause is useless: if we are trying to
+prove `Implemented(Foo: Bar)`, we would then recursively have to prove
+`Implemented(Foo: Bar)`, and that cycle would continue ad infinitum
+(the trait solver will terminate here, it would just consider that
+`Implemented(Foo: Bar)` is not known to be true).
+
+However, some goals are *co-inductive*. Simply put, this means that
+cycles are OK. So, if `Bar` were a co-inductive trait, then the rule
+above would be perfectly valid, and it would indicate that
+`Implemented(Foo: Bar)` is true.
+
+*Auto traits* are one example in Rust where co-inductive goals are used.
+Consider the `Send` trait, and imagine that we have this struct:
+
+```rust
+struct Foo {
+ next: Option<Box<Foo>>
+}
+```
+
+The default rules for auto traits say that `Foo` is `Send` if the
+types of its fields are `Send`. Therefore, we would have a rule like
+
+```text
+Implemented(Foo: Send) :-
+ Implemented(Option<Box<Foo>>: Send).
+```
+
+As you can probably imagine, proving that `Option<Box<Foo>>: Send` is
+going to wind up circularly requiring us to prove that `Foo: Send`
+again. So this would be an example where we wind up in a cycle – but
+that's ok, we *do* consider `Foo: Send` to hold, even though it
+references itself.
+
+In general, co-inductive traits are used in Rust trait solving when we
+want to enumerate a fixed set of possibilities. In the case of auto
+traits, we are enumerating the set of reachable types from a given
+starting point (i.e., `Foo` can reach values of type
+`Option<Box<Foo>>`, which implies it can reach values of type
+`Box<Foo>`, and then of type `Foo`, and then the cycle is complete).
+
+In addition to auto traits, `WellFormed` predicates are co-inductive.
+These are used to achieve a similar "enumerate all the cases" pattern,
+as described in the section on [implied bounds].
+
+[implied bounds]: https://rust-lang.github.io/chalk/book/clauses/implied_bounds.html#implied-bounds
+
+## Incomplete chapter
+
+Some topics yet to be written:
+
+- Elaborate on the proof procedure
+- SLG solving – introduce negative reasoning
diff --git a/src/doc/rustc-dev-guide/src/traits/hrtb.md b/src/doc/rustc-dev-guide/src/traits/hrtb.md
new file mode 100644
index 000000000..aa85448af
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/hrtb.md
@@ -0,0 +1,127 @@
+# Higher-ranked trait bounds
+
+One of the more subtle concepts in trait resolution is *higher-ranked trait
+bounds*. An example of such a bound is `for<'a> MyTrait<&'a isize>`.
+Let's walk through how selection on higher-ranked trait references
+works.
+
+## Basic matching and placeholder leaks
+
+Suppose we have a trait `Foo`:
+
+```rust
+trait Foo<X> {
+ fn foo(&self, x: X) { }
+}
+```
+
+Let's say we have a function `want_hrtb` that wants a type which
+implements `Foo<&'a isize>` for any `'a`:
+
+```rust,ignore
+fn want_hrtb<T>() where T : for<'a> Foo<&'a isize> { ... }
+```
+
+Now we have a struct `AnyInt` that implements `Foo<&'a isize>` for any
+`'a`:
+
+```rust,ignore
+struct AnyInt;
+impl<'a> Foo<&'a isize> for AnyInt { }
+```
+
+And the question is, does `AnyInt : for<'a> Foo<&'a isize>`? We want the
+answer to be yes. The algorithm for figuring it out is closely related
+to the subtyping for higher-ranked types (which is described [here][hrsubtype]
+and also in a [paper by SPJ]. If you wish to understand higher-ranked
+subtyping, we recommend you read the paper). There are a few parts:
+
+1. Replace bound regions in the obligation with placeholders.
+2. Match the impl against the [placeholder] obligation.
+3. Check for _placeholder leaks_.
+
+[hrsubtype]: ./hrtb.md
+[placeholder]: ../appendix/glossary.html#placeholder
+[paper by SPJ]: https://www.microsoft.com/en-us/research/publication/practical-type-inference-for-arbitrary-rank-types
+
+So let's work through our example.
+
+1. The first thing we would do is to
+replace the bound region in the obligation with a placeholder, yielding
+`AnyInt : Foo<&'0 isize>` (here `'0` represents placeholder region #0).
+Note that we now have no quantifiers;
+in terms of the compiler type, this changes from a `ty::PolyTraitRef`
+to a `TraitRef`. We would then create the `TraitRef` from the impl,
+using fresh variables for it's bound regions (and thus getting
+`Foo<&'$a isize>`, where `'$a` is the inference variable for `'a`).
+
+2. Next
+we relate the two trait refs, yielding a graph with the constraint
+that `'0 == '$a`.
+
+3. Finally, we check for placeholder "leaks" – a
+leak is basically any attempt to relate a placeholder region to another
+placeholder region, or to any region that pre-existed the impl match.
+The leak check is done by searching from the placeholder region to find
+the set of regions that it is related to in any way. This is called
+the "taint" set. To pass the check, that set must consist *solely* of
+itself and region variables from the impl. If the taint set includes
+any other region, then the match is a failure. In this case, the taint
+set for `'0` is `{'0, '$a}`, and hence the check will succeed.
+
+Let's consider a failure case. Imagine we also have a struct
+
+```rust,ignore
+struct StaticInt;
+impl Foo<&'static isize> for StaticInt;
+```
+
+We want the obligation `StaticInt : for<'a> Foo<&'a isize>` to be
+considered unsatisfied. The check begins just as before. `'a` is
+replaced with a placeholder `'0` and the impl trait reference is instantiated to
+`Foo<&'static isize>`. When we relate those two, we get a constraint
+like `'static == '0`. This means that the taint set for `'0` is `{'0,
+'static}`, which fails the leak check.
+
+**TODO**: This is because `'static` is not a region variable but is in the
+taint set, right?
+
+## Higher-ranked trait obligations
+
+Once the basic matching is done, we get to another interesting topic:
+how to deal with impl obligations. I'll work through a simple example
+here. Imagine we have the traits `Foo` and `Bar` and an associated impl:
+
+```rust
+trait Foo<X> {
+ fn foo(&self, x: X) { }
+}
+
+trait Bar<X> {
+ fn bar(&self, x: X) { }
+}
+
+impl<X,F> Foo<X> for F
+ where F : Bar<X>
+{
+}
+```
+
+Now let's say we have an obligation `Baz: for<'a> Foo<&'a isize>` and we match
+this impl. What obligation is generated as a result? We want to get
+`Baz: for<'a> Bar<&'a isize>`, but how does that happen?
+
+After the matching, we are in a position where we have a placeholder
+substitution like `X => &'0 isize`. If we apply this substitution to the
+impl obligations, we get `F : Bar<&'0 isize>`. Obviously this is not
+directly usable because the placeholder region `'0` cannot leak out of
+our computation.
+
+What we do is to create an inverse mapping from the taint set of `'0`
+back to the original bound region (`'a`, here) that `'0` resulted
+from. (This is done in `higher_ranked::plug_leaks`). We know that the
+leak check passed, so this taint set consists solely of the placeholder
+region itself plus various intermediate region variables. We then walk
+the trait-reference and convert every region in that taint set back to
+a late-bound region, so in this case we'd wind up with
+`Baz: for<'a> Bar<&'a isize>`.
diff --git a/src/doc/rustc-dev-guide/src/traits/lowering-to-logic.md b/src/doc/rustc-dev-guide/src/traits/lowering-to-logic.md
new file mode 100644
index 000000000..1248d4346
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/lowering-to-logic.md
@@ -0,0 +1,187 @@
+# Lowering to logic
+
+<!-- toc -->
+
+The key observation here is that the Rust trait system is basically a
+kind of logic, and it can be mapped onto standard logical inference
+rules. We can then look for solutions to those inference rules in a
+very similar fashion to how e.g. a [Prolog] solver works. It turns out
+that we can't *quite* use Prolog rules (also called Horn clauses) but
+rather need a somewhat more expressive variant.
+
+[Prolog]: https://en.wikipedia.org/wiki/Prolog
+
+## Rust traits and logic
+
+One of the first observations is that the Rust trait system is
+basically a kind of logic. As such, we can map our struct, trait, and
+impl declarations into logical inference rules. For the most part,
+these are basically Horn clauses, though we'll see that to capture the
+full richness of Rust – and in particular to support generic
+programming – we have to go a bit further than standard Horn clauses.
+
+To see how this mapping works, let's start with an example. Imagine
+we declare a trait and a few impls, like so:
+
+```rust
+trait Clone { }
+impl Clone for usize { }
+impl<T> Clone for Vec<T> where T: Clone { }
+```
+
+We could map these declarations to some Horn clauses, written in a
+Prolog-like notation, as follows:
+
+```text
+Clone(usize).
+Clone(Vec<?T>) :- Clone(?T).
+
+// The notation `A :- B` means "A is true if B is true".
+// Or, put another way, B implies A.
+```
+
+In Prolog terms, we might say that `Clone(Foo)` – where `Foo` is some
+Rust type – is a *predicate* that represents the idea that the type
+`Foo` implements `Clone`. These rules are **program clauses**; they
+state the conditions under which that predicate can be proven (i.e.,
+considered true). So the first rule just says "Clone is implemented
+for `usize`". The next rule says "for any type `?T`, Clone is
+implemented for `Vec<?T>` if clone is implemented for `?T`". So
+e.g. if we wanted to prove that `Clone(Vec<Vec<usize>>)`, we would do
+so by applying the rules recursively:
+
+- `Clone(Vec<Vec<usize>>)` is provable if:
+ - `Clone(Vec<usize>)` is provable if:
+ - `Clone(usize)` is provable. (Which it is, so we're all good.)
+
+But now suppose we tried to prove that `Clone(Vec<Bar>)`. This would
+fail (after all, I didn't give an impl of `Clone` for `Bar`):
+
+- `Clone(Vec<Bar>)` is provable if:
+ - `Clone(Bar)` is provable. (But it is not, as there are no applicable rules.)
+
+We can easily extend the example above to cover generic traits with
+more than one input type. So imagine the `Eq<T>` trait, which declares
+that `Self` is equatable with a value of type `T`:
+
+```rust,ignore
+trait Eq<T> { ... }
+impl Eq<usize> for usize { }
+impl<T: Eq<U>> Eq<Vec<U>> for Vec<T> { }
+```
+
+That could be mapped as follows:
+
+```text
+Eq(usize, usize).
+Eq(Vec<?T>, Vec<?U>) :- Eq(?T, ?U).
+```
+
+So far so good.
+
+## Type-checking normal functions
+
+OK, now that we have defined some logical rules that are able to
+express when traits are implemented and to handle associated types,
+let's turn our focus a bit towards **type-checking**. Type-checking is
+interesting because it is what gives us the goals that we need to
+prove. That is, everything we've seen so far has been about how we
+derive the rules by which we can prove goals from the traits and impls
+in the program; but we are also interested in how to derive the goals
+that we need to prove, and those come from type-checking.
+
+Consider type-checking the function `foo()` here:
+
+```rust,ignore
+fn foo() { bar::<usize>() }
+fn bar<U: Eq<U>>() { }
+```
+
+This function is very simple, of course: all it does is to call
+`bar::<usize>()`. Now, looking at the definition of `bar()`, we can see
+that it has one where-clause `U: Eq<U>`. So, that means that `foo()` will
+have to prove that `usize: Eq<usize>` in order to show that it can call `bar()`
+with `usize` as the type argument.
+
+If we wanted, we could write a Prolog predicate that defines the
+conditions under which `bar()` can be called. We'll say that those
+conditions are called being "well-formed":
+
+```text
+barWellFormed(?U) :- Eq(?U, ?U).
+```
+
+Then we can say that `foo()` type-checks if the reference to
+`bar::<usize>` (that is, `bar()` applied to the type `usize`) is
+well-formed:
+
+```text
+fooTypeChecks :- barWellFormed(usize).
+```
+
+If we try to prove the goal `fooTypeChecks`, it will succeed:
+
+- `fooTypeChecks` is provable if:
+ - `barWellFormed(usize)`, which is provable if:
+ - `Eq(usize, usize)`, which is provable because of an impl.
+
+Ok, so far so good. Let's move on to type-checking a more complex function.
+
+## Type-checking generic functions: beyond Horn clauses
+
+In the last section, we used standard Prolog horn-clauses (augmented with Rust's
+notion of type equality) to type-check some simple Rust functions. But that only
+works when we are type-checking non-generic functions. If we want to type-check
+a generic function, it turns out we need a stronger notion of goal than what Prolog
+can provide. To see what I'm talking about, let's revamp our previous
+example to make `foo` generic:
+
+```rust,ignore
+fn foo<T: Eq<T>>() { bar::<T>() }
+fn bar<U: Eq<U>>() { }
+```
+
+To type-check the body of `foo`, we need to be able to hold the type
+`T` "abstract". That is, we need to check that the body of `foo` is
+type-safe *for all types `T`*, not just for some specific type. We might express
+this like so:
+
+```text
+fooTypeChecks :-
+ // for all types T...
+ forall<T> {
+ // ...if we assume that Eq(T, T) is provable...
+ if (Eq(T, T)) {
+ // ...then we can prove that `barWellFormed(T)` holds.
+ barWellFormed(T)
+ }
+ }.
+```
+
+This notation I'm using here is the notation I've been using in my
+prototype implementation; it's similar to standard mathematical
+notation but a bit Rustified. Anyway, the problem is that standard
+Horn clauses don't allow universal quantification (`forall`) or
+implication (`if`) in goals (though many Prolog engines do support
+them, as an extension). For this reason, we need to accept something
+called "first-order hereditary harrop" (FOHH) clauses – this long
+name basically means "standard Horn clauses with `forall` and `if` in
+the body". But it's nice to know the proper name, because there is a
+lot of work describing how to efficiently handle FOHH clauses; see for
+example Gopalan Nadathur's excellent
+["A Proof Procedure for the Logic of Hereditary Harrop Formulas"][pphhf]
+in [the bibliography of Chalk Book][bibliography].
+
+[bibliography]: https://rust-lang.github.io/chalk/book/bibliography.html
+[pphhf]: https://rust-lang.github.io/chalk/book/bibliography.html#pphhf
+
+It turns out that supporting FOHH is not really all that hard. And
+once we are able to do that, we can easily describe the type-checking
+rule for generic functions like `foo` in our logic.
+
+## Source
+
+This page is a lightly adapted version of a
+[blog post by Nicholas Matsakis][lrtl].
+
+[lrtl]: http://smallcultfollowing.com/babysteps/blog/2017/01/26/lowering-rust-traits-to-logic/
diff --git a/src/doc/rustc-dev-guide/src/traits/resolution.md b/src/doc/rustc-dev-guide/src/traits/resolution.md
new file mode 100644
index 000000000..c22ee6de6
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/resolution.md
@@ -0,0 +1,318 @@
+# Trait resolution (old-style)
+
+<!-- toc -->
+
+This chapter describes the general process of _trait resolution_ and points out
+some non-obvious things.
+
+**Note:** This chapter (and its subchapters) describe how the trait
+solver **currently** works. However, we are in the process of
+designing a new trait solver. If you'd prefer to read about *that*,
+see [*this* subchapter](./chalk.html).
+
+## Major concepts
+
+Trait resolution is the process of pairing up an impl with each
+reference to a trait. So, for example, if there is a generic function like:
+
+```rust,ignore
+fn clone_slice<T:Clone>(x: &[T]) -> Vec<T> { ... }
+```
+
+and then a call to that function:
+
+```rust,ignore
+let v: Vec<isize> = clone_slice(&[1, 2, 3])
+```
+
+it is the job of trait resolution to figure out whether there exists an impl of
+(in this case) `isize : Clone`.
+
+Note that in some cases, like generic functions, we may not be able to
+find a specific impl, but we can figure out that the caller must
+provide an impl. For example, consider the body of `clone_slice`:
+
+```rust,ignore
+fn clone_slice<T:Clone>(x: &[T]) -> Vec<T> {
+ let mut v = Vec::new();
+ for e in &x {
+ v.push((*e).clone()); // (*)
+ }
+}
+```
+
+The line marked `(*)` is only legal if `T` (the type of `*e`)
+implements the `Clone` trait. Naturally, since we don't know what `T`
+is, we can't find the specific impl; but based on the bound `T:Clone`,
+we can say that there exists an impl which the caller must provide.
+
+We use the term *obligation* to refer to a trait reference in need of
+an impl. Basically, the trait resolution system resolves an obligation
+by proving that an appropriate impl does exist.
+
+During type checking, we do not store the results of trait selection.
+We simply wish to verify that trait selection will succeed. Then
+later, at trans time, when we have all concrete types available, we
+can repeat the trait selection to choose an actual implementation, which
+will then be generated in the output binary.
+
+## Overview
+
+Trait resolution consists of three major parts:
+
+- **Selection**: Deciding how to resolve a specific obligation. For
+ example, selection might decide that a specific obligation can be
+ resolved by employing an impl which matches the `Self` type, or by using a
+ parameter bound (e.g. `T: Trait`). In the case of an impl, selecting one
+ obligation can create *nested obligations* because of where clauses
+ on the impl itself. It may also require evaluating those nested
+ obligations to resolve ambiguities.
+
+- **Fulfillment**: The fulfillment code is what tracks that obligations
+ are completely fulfilled. Basically it is a worklist of obligations
+ to be selected: once selection is successful, the obligation is
+ removed from the worklist and any nested obligations are enqueued.
+
+- **Coherence**: The coherence checks are intended to ensure that there
+ are never overlapping impls, where two impls could be used with
+ equal precedence.
+
+## Selection
+
+Selection is the process of deciding whether an obligation can be
+resolved and, if so, how it is to be resolved (via impl, where clause, etc).
+The main interface is the `select()` function, which takes an obligation
+and returns a `SelectionResult`. There are three possible outcomes:
+
+- `Ok(Some(selection))` – yes, the obligation can be resolved, and
+ `selection` indicates how. If the impl was resolved via an impl,
+ then `selection` may also indicate nested obligations that are required
+ by the impl.
+
+- `Ok(None)` – we are not yet sure whether the obligation can be
+ resolved or not. This happens most commonly when the obligation
+ contains unbound type variables.
+
+- `Err(err)` – the obligation definitely cannot be resolved due to a
+ type error or because there are no impls that could possibly apply.
+
+The basic algorithm for selection is broken into two big phases:
+candidate assembly and confirmation.
+
+Note that because of how lifetime inference works, it is not possible to
+give back immediate feedback as to whether a unification or subtype
+relationship between lifetimes holds or not. Therefore, lifetime
+matching is *not* considered during selection. This is reflected in
+the fact that subregion assignment is infallible. This may yield
+lifetime constraints that will later be found to be in error (in
+contrast, the non-lifetime-constraints have already been checked
+during selection and can never cause an error, though naturally they
+may lead to other errors downstream).
+
+### Candidate assembly
+
+Searches for impls/where-clauses/etc that might
+possibly be used to satisfy the obligation. Each of those is called
+a candidate. To avoid ambiguity, we want to find exactly one
+candidate that is definitively applicable. In some cases, we may not
+know whether an impl/where-clause applies or not – this occurs when
+the obligation contains unbound inference variables.
+
+The subroutines that decide whether a particular impl/where-clause/etc applies
+to a particular obligation are collectively referred to as the process of
+_matching_. As of <!-- date: 2022-05 --> May 2022, this amounts to unifying
+the `Self` types, but in the future we may also recursively consider some of the
+nested obligations, in the case of an impl.
+
+**TODO**: what does "unifying the `Self` types" mean? The `Self` of the
+obligation with that of an impl?
+
+The basic idea for candidate assembly is to do a first pass in which
+we identify all possible candidates. During this pass, all that we do
+is try and unify the type parameters. (In particular, we ignore any
+nested where clauses.) Presuming that this unification succeeds, the
+impl is added as a candidate.
+
+Once this first pass is done, we can examine the set of candidates. If
+it is a singleton set, then we are done: this is the only impl in
+scope that could possibly apply. Otherwise, we can winnow down the set
+of candidates by using where clauses and other conditions. If this
+reduced set yields a single, unambiguous entry, we're good to go,
+otherwise the result is considered ambiguous.
+
+#### The basic process: Inferring based on the impls we see
+
+This process is easier if we work through some examples. Consider
+the following trait:
+
+```rust,ignore
+trait Convert<Target> {
+ fn convert(&self) -> Target;
+}
+```
+
+This trait just has one method. It's about as simple as it gets. It
+converts from the (implicit) `Self` type to the `Target` type. If we
+wanted to permit conversion between `isize` and `usize`, we might
+implement `Convert` like so:
+
+```rust,ignore
+impl Convert<usize> for isize { ... } // isize -> usize
+impl Convert<isize> for usize { ... } // usize -> isize
+```
+
+Now imagine there is some code like the following:
+
+```rust,ignore
+let x: isize = ...;
+let y = x.convert();
+```
+
+The call to convert will generate a trait reference `Convert<$Y> for
+isize`, where `$Y` is the type variable representing the type of
+`y`. Of the two impls we can see, the only one that matches is
+`Convert<usize> for isize`. Therefore, we can
+select this impl, which will cause the type of `$Y` to be unified to
+`usize`. (Note that while assembling candidates, we do the initial
+unifications in a transaction, so that they don't affect one another.)
+
+**TODO**: The example says we can "select" the impl, but this section is
+talking specifically about candidate assembly. Does this mean we can sometimes
+skip confirmation? Or is this poor wording?
+**TODO**: Is the unification of `$Y` part of trait resolution or type
+inference? Or is this not the same type of "inference variable" as in type
+inference?
+
+#### Winnowing: Resolving ambiguities
+
+But what happens if there are multiple impls where all the types
+unify? Consider this example:
+
+```rust,ignore
+trait Get {
+ fn get(&self) -> Self;
+}
+
+impl<T: Copy> Get for T {
+ fn get(&self) -> T {
+ *self
+ }
+}
+
+impl<T: Get> Get for Box<T> {
+ fn get(&self) -> Box<T> {
+ Box::new(<T>::get(self))
+ }
+}
+```
+
+What happens when we invoke `get_it(&Box::new(1_u16))`, for example? In this
+case, the `Self` type is `Box<u16>` – that unifies with both impls,
+because the first applies to all types `T`, and the second to all
+`Box<T>`. In order for this to be unambiguous, the compiler does a *winnowing*
+pass that considers `where` clauses
+and attempts to remove candidates. In this case, the first impl only
+applies if `Box<u16> : Copy`, which doesn't hold. After winnowing,
+then, we are left with just one candidate, so we can proceed.
+
+#### `where` clauses
+
+Besides an impl, the other major way to resolve an obligation is via a
+where clause. The selection process is always given a [parameter
+environment] which contains a list of where clauses, which are
+basically obligations that we can assume are satisfiable. We will iterate
+over that list and check whether our current obligation can be found
+in that list. If so, it is considered satisfied. More precisely, we
+want to check whether there is a where-clause obligation that is for
+the same trait (or some subtrait) and which can match against the obligation.
+
+[parameter environment]: ../param_env.html
+
+Consider this simple example:
+
+```rust,ignore
+trait A1 {
+ fn do_a1(&self);
+}
+trait A2 : A1 { ... }
+
+trait B {
+ fn do_b(&self);
+}
+
+fn foo<X:A2+B>(x: X) {
+ x.do_a1(); // (*)
+ x.do_b(); // (#)
+}
+```
+
+In the body of `foo`, clearly we can use methods of `A1`, `A2`, or `B`
+on variable `x`. The line marked `(*)` will incur an obligation `X: A1`,
+while the line marked `(#)` will incur an obligation `X: B`. Meanwhile,
+the parameter environment will contain two where-clauses: `X : A2` and `X : B`.
+For each obligation, then, we search this list of where-clauses. The
+obligation `X: B` trivially matches against the where-clause `X: B`.
+To resolve an obligation `X:A1`, we would note that `X:A2` implies that `X:A1`.
+
+### Confirmation
+
+_Confirmation_ unifies the output type parameters of the trait with the
+values found in the obligation, possibly yielding a type error.
+
+Suppose we have the following variation of the `Convert` example in the
+previous section:
+
+```rust,ignore
+trait Convert<Target> {
+ fn convert(&self) -> Target;
+}
+
+impl Convert<usize> for isize { ... } // isize -> usize
+impl Convert<isize> for usize { ... } // usize -> isize
+
+let x: isize = ...;
+let y: char = x.convert(); // NOTE: `y: char` now!
+```
+
+Confirmation is where an error would be reported because the impl specified
+that `Target` would be `usize`, but the obligation reported `char`. Hence the
+result of selection would be an error.
+
+Note that the candidate impl is chosen based on the `Self` type, but
+confirmation is done based on (in this case) the `Target` type parameter.
+
+### Selection during translation
+
+As mentioned above, during type checking, we do not store the results of trait
+selection. At trans time, we repeat the trait selection to choose a particular
+impl for each method call. In this second selection, we do not consider any
+where-clauses to be in scope because we know that each resolution will resolve
+to a particular impl.
+
+One interesting twist has to do with nested obligations. In general, in trans,
+we only need to do a "shallow" selection for an obligation. That is, we wish to
+identify which impl applies, but we do not (yet) need to decide how to select
+any nested obligations. Nonetheless, we *do* currently do a complete resolution,
+and that is because it can sometimes inform the results of type inference.
+That is, we do not have the full substitutions in terms of the type variables
+of the impl available to us, so we must run trait selection to figure
+everything out.
+
+**TODO**: is this still talking about trans?
+
+Here is an example:
+
+```rust,ignore
+trait Foo { ... }
+impl<U, T:Bar<U>> Foo for Vec<T> { ... }
+
+impl Bar<usize> for isize { ... }
+```
+
+After one shallow round of selection for an obligation like `Vec<isize>
+: Foo`, we would know which impl we want, and we would know that
+`T=isize`, but we do not know the type of `U`. We must select the
+nested obligation `isize : Bar<U>` to find out that `U=usize`.
+
+It would be good to only do *just as much* nested resolution as
+necessary. Currently, though, we just do a full resolution.
diff --git a/src/doc/rustc-dev-guide/src/traits/specialization.md b/src/doc/rustc-dev-guide/src/traits/specialization.md
new file mode 100644
index 000000000..7a30314b4
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/traits/specialization.md
@@ -0,0 +1,51 @@
+# Specialization
+
+**TODO**: where does Chalk fit in? Should we mention/discuss it here?
+
+Defined in the `specialize` module.
+
+The basic strategy is to build up a *specialization graph* during
+coherence checking (recall that coherence checking looks for overlapping
+impls). Insertion into the graph locates the right place
+to put an impl in the specialization hierarchy; if there is no right
+place (due to partial overlap but no containment), you get an overlap
+error. Specialization is consulted when selecting an impl (of course),
+and the graph is consulted when propagating defaults down the
+specialization hierarchy.
+
+You might expect that the specialization graph would be used during
+selection – i.e. when actually performing specialization. This is
+not done for two reasons:
+
+- It's merely an optimization: given a set of candidates that apply,
+ we can determine the most specialized one by comparing them directly
+ for specialization, rather than consulting the graph. Given that we
+ also cache the results of selection, the benefit of this
+ optimization is questionable.
+
+- To build the specialization graph in the first place, we need to use
+ selection (because we need to determine whether one impl specializes
+ another). Dealing with this reentrancy would require some additional
+ mode switch for selection. Given that there seems to be no strong
+ reason to use the graph anyway, we stick with a simpler approach in
+ selection, and use the graph only for propagating default
+ implementations.
+
+Trait impl selection can succeed even when multiple impls can apply,
+as long as they are part of the same specialization family. In that
+case, it returns a *single* impl on success – this is the most
+specialized impl *known* to apply. However, if there are any inference
+variables in play, the returned impl may not be the actual impl we
+will use at trans time. Thus, we take special care to avoid projecting
+associated types unless either (1) the associated type does not use
+`default` and thus cannot be overridden or (2) all input types are
+known concretely.
+
+## Additional Resources
+
+[This talk][talk] by @sunjay may be useful. Keep in mind that the talk only
+gives a broad overview of the problem and the solution (it was presented about
+halfway through @sunjay's work). Also, it was given in June 2018, and some
+things may have changed by the time you watch it.
+
+[talk]: https://www.youtube.com/watch?v=rZqS4bLPL24
diff --git a/src/doc/rustc-dev-guide/src/ty-fold.md b/src/doc/rustc-dev-guide/src/ty-fold.md
new file mode 100644
index 000000000..c390597f9
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/ty-fold.md
@@ -0,0 +1,105 @@
+# `TypeFoldable` and `TypeFolder`
+
+How is this `subst` query actually implemented? As you can imagine, we might want to do
+substitutions on a lot of different things. For example, we might want to do a substitution directly
+on a type like we did with `Vec` above. But we might also have a more complex type with other types
+nested inside that also need substitutions.
+
+The answer is a couple of traits:
+[`TypeFoldable`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFoldable.html)
+and
+[`TypeFolder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFolder.html).
+
+- `TypeFoldable` is implemented by types that embed type information. It allows you to recursively
+ process the contents of the `TypeFoldable` and do stuff to them.
+- `TypeFolder` defines what you want to do with the types you encounter while processing the
+ `TypeFoldable`.
+
+For example, the `TypeFolder` trait has a method
+[`fold_ty`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/fold/trait.TypeFolder.html#method.fold_ty)
+that takes a type as input a type and returns a new type as a result. `TypeFoldable` invokes the
+`TypeFolder` `fold_foo` methods on itself, giving the `TypeFolder` access to its contents (the
+types, regions, etc that are contained within).
+
+You can think of it with this analogy to the iterator combinators we have come to love in rust:
+
+```rust,ignore
+vec.iter().map(|e1| foo(e2)).collect()
+// ^^^^^^^^^^^^ analogous to `TypeFolder`
+// ^^^ analogous to `TypeFoldable`
+```
+
+So to reiterate:
+
+- `TypeFolder` is a trait that defines a “map” operation.
+- `TypeFoldable` is a trait that is implemented by things that embed types.
+
+In the case of `subst`, we can see that it is implemented as a `TypeFolder`:
+[`SubstFolder`](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/struct.SubstFolder.html).
+Looking at its implementation, we see where the actual substitutions are happening.
+
+However, you might also notice that the implementation calls this `super_fold_with` method. What is
+that? It is a method of `TypeFoldable`. Consider the following `TypeFoldable` type `MyFoldable`:
+
+```rust,ignore
+struct MyFoldable<'tcx> {
+ def_id: DefId,
+ ty: Ty<'tcx>,
+}
+```
+
+The `TypeFolder` can call `super_fold_with` on `MyFoldable` if it just wants to replace some of the
+fields of `MyFoldable` with new values. If it instead wants to replace the whole `MyFoldable` with a
+different one, it would call `fold_with` instead (a different method on `TypeFoldable`).
+
+In almost all cases, we don’t want to replace the whole struct; we only want to replace `ty::Ty`s in
+the struct, so usually we call `super_fold_with`. A typical implementation that `MyFoldable` could
+have might do something like this:
+
+```rust,ignore
+my_foldable: MyFoldable<'tcx>
+my_foldable.subst(..., subst)
+
+impl TypeFoldable for MyFoldable {
+ fn super_fold_with(&self, folder: &mut impl TypeFolder<'tcx>) -> MyFoldable {
+ MyFoldable {
+ def_id: self.def_id.fold_with(folder),
+ ty: self.ty.fold_with(folder),
+ }
+ }
+
+ fn super_visit_with(..) { }
+}
+```
+
+Notice that here, we implement `super_fold_with` to go over the fields of `MyFoldable` and call
+`fold_with` on *them*. That is, a folder may replace `def_id` and `ty`, but not the whole
+`MyFoldable` struct.
+
+Here is another example to put things together: suppose we have a type like `Vec<Vec<X>>`. The
+`ty::Ty` would look like: `Adt(Vec, &[Adt(Vec, &[Param(X)])])`. If we want to do `subst(X => u32)`,
+then we would first look at the overall type. We would see that there are no substitutions to be
+made at the outer level, so we would descend one level and look at `Adt(Vec, &[Param(X)])`. There
+are still no substitutions to be made here, so we would descend again. Now we are looking at
+`Param(X)`, which can be substituted, so we replace it with `u32`. We can’t descend any more, so we
+are done, and the overall result is `Adt(Vec, &[Adt(Vec, &[u32])])`.
+
+One last thing to mention: often when folding over a `TypeFoldable`, we don’t want to change most
+things. We only want to do something when we reach a type. That means there may be a lot of
+`TypeFoldable` types whose implementations basically just forward to their fields’ `TypeFoldable`
+implementations. Such implementations of `TypeFoldable` tend to be pretty tedious to write by hand.
+For this reason, there is a `derive` macro that allows you to `#![derive(TypeFoldable)]`. It is
+defined
+[here](https://github.com/rust-lang/rust/blob/master/compiler/rustc_macros/src/type_foldable.rs).
+
+**`subst`** In the case of substitutions the [actual
+folder](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L440-L451)
+is going to be doing the indexing we’ve already mentioned. There we define a `Folder` and call
+`fold_with` on the `TypeFoldable` to process yourself. Then
+[fold_ty](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L512-L536)
+the method that process each type it looks for a `ty::Param` and for those it replaces it for
+something from the list of substitutions, otherwise recursively process the type. To replace it,
+calls
+[ty_for_param](https://github.com/rust-lang/rust/blob/75ff3110ac6d8a0259023b83fd20d7ab295f8dd6/src/librustc_middle/ty/subst.rs#L552-L587)
+and all that does is index into the list of substitutions with the index of the `Param`.
+
diff --git a/src/doc/rustc-dev-guide/src/ty.md b/src/doc/rustc-dev-guide/src/ty.md
new file mode 100644
index 000000000..1cc03fce0
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/ty.md
@@ -0,0 +1,348 @@
+# The `ty` module: representing types
+
+<!-- toc -->
+
+The `ty` module defines how the Rust compiler represents types internally. It also defines the
+*typing context* (`tcx` or `TyCtxt`), which is the central data structure in the compiler.
+
+## `ty::Ty`
+
+When we talk about how rustc represents types, we usually refer to a type called `Ty` . There are
+quite a few modules and types for `Ty` in the compiler ([Ty documentation][ty]).
+
+[ty]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/index.html
+
+The specific `Ty` we are referring to is [`rustc_middle::ty::Ty`][ty_ty] (and not
+[`rustc_hir::Ty`][hir_ty]). The distinction is important, so we will discuss it first before going
+into the details of `ty::Ty`.
+
+[ty_ty]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.Ty.html
+[hir_ty]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/struct.Ty.html
+
+## `rustc_hir::Ty` vs `ty::Ty`
+
+The HIR in rustc can be thought of as the high-level intermediate representation. It is more or less
+the AST (see [this chapter](hir.md)) as it represents the
+syntax that the user wrote, and is obtained after parsing and some *desugaring*. It has a
+representation of types, but in reality it reflects more of what the user wrote, that is, what they
+wrote so as to represent that type.
+
+In contrast, `ty::Ty` represents the semantics of a type, that is, the *meaning* of what the user
+wrote. For example, `rustc_hir::Ty` would record the fact that a user used the name `u32` twice
+in their program, but the `ty::Ty` would record the fact that both usages refer to the same type.
+
+**Example: `fn foo(x: u32) → u32 { x }`**
+
+In this function, we see that `u32` appears twice. We know
+that that is the same type,
+i.e. the function takes an argument and returns an argument of the same type,
+but from the point of view of the HIR,
+there would be two distinct type instances because these
+are occurring in two different places in the program.
+That is, they have two different [`Span`s][span] (locations).
+
+[span]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_span/struct.Span.html
+
+**Example: `fn foo(x: &u32) -> &u32`**
+
+In addition, HIR might have information left out. This type
+`&u32` is incomplete, since in the full Rust type there is actually a lifetime, but we didn’t need
+to write those lifetimes. There are also some elision rules that insert information. The result may
+look like `fn foo<'a>(x: &'a u32) -> &'a u32`.
+
+In the HIR level, these things are not spelled out and you can say the picture is rather incomplete.
+However, at the `ty::Ty` level, these details are added and it is complete. Moreover, we will have
+exactly one `ty::Ty` for a given type, like `u32`, and that `ty::Ty` is used for all `u32`s in the
+whole program, not a specific usage, unlike `rustc_hir::Ty`.
+
+Here is a summary:
+
+| [`rustc_hir::Ty`][hir_ty] | [`ty::Ty`][ty_ty] |
+| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Describe the *syntax* of a type: what the user wrote (with some desugaring). | Describe the *semantics* of a type: the meaning of what the user wrote. |
+| Each `rustc_hir::Ty` has its own spans corresponding to the appropriate place in the program. | Doesn’t correspond to a single place in the user’s program. |
+| `rustc_hir::Ty` has generics and lifetimes; however, some of those lifetimes are special markers like [`LifetimeName::Implicit`][implicit]. | `ty::Ty` has the full type, including generics and lifetimes, even if the user left them out |
+| `fn foo(x: u32) → u32 { }` - Two `rustc_hir::Ty` representing each usage of `u32`, each has its own `Span`s, and `rustc_hir::Ty` doesn’t tell us that both are the same type | `fn foo(x: u32) → u32 { }` - One `ty::Ty` for all instances of `u32` throughout the program, and `ty::Ty` tells us that both usages of `u32` mean the same type. |
+| `fn foo(x: &u32) -> &u32)` - Two `rustc_hir::Ty` again. Lifetimes for the references show up in the `rustc_hir::Ty`s using a special marker, [`LifetimeName::Implicit`][implicit]. | `fn foo(x: &u32) -> &u32)`- A single `ty::Ty`. The `ty::Ty` has the hidden lifetime param. |
+
+[implicit]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_hir/enum.LifetimeName.html#variant.Implicit
+
+**Order**
+
+HIR is built directly from the AST, so it happens before any `ty::Ty` is produced. After
+HIR is built, some basic type inference and type checking is done. During the type inference, we
+figure out what the `ty::Ty` of everything is and we also check if the type of something is
+ambiguous. The `ty::Ty` is then used for type checking while making sure everything has the
+expected type. The [`astconv` module][astconv] is where the code responsible for converting a
+`rustc_hir::Ty` into a `ty::Ty` is located. This occurs during the type-checking phase,
+but also in other parts of the compiler that want to ask questions like "what argument types does
+this function expect?"
+
+[astconv]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/astconv/index.html
+
+**How semantics drive the two instances of `Ty`**
+
+You can think of HIR as the perspective
+of the type information that assumes the least. We assume two things are distinct until they are
+proven to be the same thing. In other words, we know less about them, so we should assume less about
+them.
+
+They are syntactically two strings: `"u32"` at line N column 20 and `"u32"` at line N column 35. We
+don’t know that they are the same yet. So, in the HIR we treat them as if they are different. Later,
+we determine that they semantically are the same type and that’s the `ty::Ty` we use.
+
+Consider another example: `fn foo<T>(x: T) -> u32`. Suppose that someone invokes `foo::<u32>(0)`.
+This means that `T` and `u32` (in this invocation) actually turns out to be the same type, so we
+would eventually end up with the same `ty::Ty` in the end, but we have distinct `rustc_hir::Ty`.
+(This is a bit over-simplified, though, since during type checking, we would check the function
+generically and would still have a `T` distinct from `u32`. Later, when doing code generation,
+we would always be handling "monomorphized" (fully substituted) versions of each function,
+and hence we would know what `T` represents (and specifically that it is `u32`).)
+
+Here is one more example:
+
+```rust
+mod a {
+ type X = u32;
+ pub fn foo(x: X) -> u32 { 22 }
+}
+mod b {
+ type X = i32;
+ pub fn foo(x: X) -> i32 { x }
+}
+```
+
+Here the type `X` will vary depending on context, clearly. If you look at the `rustc_hir::Ty`,
+you will get back that `X` is an alias in both cases (though it will be mapped via name resolution
+to distinct aliases). But if you look at the `ty::Ty` signature, it will be either `fn(u32) -> u32`
+or `fn(i32) -> i32` (with type aliases fully expanded).
+
+## `ty::Ty` implementation
+
+[`rustc_middle::ty::Ty`][ty_ty] is actually a type alias to [`&TyS`][tys].
+This type, which is short for "Type Structure", is where the main functionality is located.
+You can ignore `TyS` struct in general; you will basically never access it explicitly.
+We always pass it by reference using the `Ty` alias.
+The only exception is to define inherent methods on types. In particular, `TyS` has a [`kind`][kind]
+field of type [`TyKind`][tykind], which represents the key type information. `TyKind` is a big enum
+with variants to represent many different Rust types
+(e.g. primitives, references, abstract data types, generics, lifetimes, etc).
+`TyS` also has 2 more fields, `flags` and `outer_exclusive_binder`. They
+are convenient hacks for efficiency and summarize information about the type that we may want to
+know, but they don’t come into the picture as much here. Finally, `ty::TyS`s
+are [interned](./memory.md), so that the `ty::Ty` can be a thin pointer-like
+type. This allows us to do cheap comparisons for equality, along with the other
+benefits of interning.
+
+[tys]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyS.html
+[kind]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyS.html#structfield.kind
+[tykind]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html
+
+## Allocating and working with types
+
+To allocate a new type, you can use the various `mk_` methods defined on the `tcx`. These have names
+that correspond mostly to the various kinds of types. For example:
+
+```rust,ignore
+let array_ty = tcx.mk_array(elem_ty, len * 2);
+```
+
+These methods all return a `Ty<'tcx>` – note that the lifetime you get back is the lifetime of the
+arena that this `tcx` has access to. Types are always canonicalized and interned (so we never
+allocate exactly the same type twice).
+
+> N.B.
+> Because types are interned, it is possible to compare them for equality efficiently using `==`
+> – however, this is almost never what you want to do unless you happen to be hashing and looking
+> for duplicates. This is because often in Rust there are multiple ways to represent the same type,
+> particularly once inference is involved. If you are going to be testing for type equality, you
+> probably need to start looking into the inference code to do it right.
+
+You can also find various common types in the `tcx` itself by accessing its fields:
+`tcx.types.bool`, `tcx.types.char`, etc. (See [`CommonTypes`] for more.)
+
+[`CommonTypes`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/context/struct.CommonTypes.html
+
+## `ty::TyKind` Variants
+
+Note: `TyKind` is **NOT** the functional programming concept of *Kind*.
+
+Whenever working with a `Ty` in the compiler, it is common to match on the kind of type:
+
+```rust,ignore
+fn foo(x: Ty<'tcx>) {
+ match x.kind {
+ ...
+ }
+}
+```
+
+The `kind` field is of type `TyKind<'tcx>`, which is an enum defining all of the different kinds of
+types in the compiler.
+
+> N.B. inspecting the `kind` field on types during type inference can be risky, as there may be
+> inference variables and other things to consider, or sometimes types are not yet known and will
+> become known later.
+
+There are a lot of related types, and we’ll cover them in time (e.g regions/lifetimes,
+“substitutions”, etc).
+
+There are many variants on the `TyKind` enum, which you can see by looking at its
+[documentation][tykind]. Here is a sampling:
+
+- [**Algebraic Data Types (ADTs)**][kindadt] An [*algebraic data type*][wikiadt] is a `struct`,
+ `enum` or `union`. Under the hood, `struct`, `enum` and `union` are actually implemented
+ the same way: they are all [`ty::TyKind::Adt`][kindadt]. It’s basically a user defined type.
+ We will talk more about these later.
+- [**Foreign**][kindforeign] Corresponds to `extern type T`.
+- [**Str**][kindstr] Is the type str. When the user writes `&str`, `Str` is the how we represent the
+ `str` part of that type.
+- [**Slice**][kindslice] Corresponds to `[T]`.
+- [**Array**][kindarray] Corresponds to `[T; n]`.
+- [**RawPtr**][kindrawptr] Corresponds to `*mut T` or `*const T`.
+- [**Ref**][kindref] `Ref` stands for safe references, `&'a mut T` or `&'a T`. `Ref` has some
+ associated parts, like `Ty<'tcx>` which is the type that the reference references.
+ `Region<'tcx>` is the lifetime or region of the reference and `Mutability` if the reference
+ is mutable or not.
+- [**Param**][kindparam] Represents a type parameter (e.g. the `T` in `Vec<T>`).
+- [**Error**][kinderr] Represents a type error somewhere so that we can print better diagnostics. We
+ will discuss this more later.
+- [**And many more**...][kindvars]
+
+[wikiadt]: https://en.wikipedia.org/wiki/Algebraic_data_type
+[kindadt]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Adt
+[kindforeign]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Foreign
+[kindstr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Str
+[kindslice]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Slice
+[kindarray]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Array
+[kindrawptr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.RawPtr
+[kindref]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Ref
+[kindparam]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Param
+[kinderr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variant.Error
+[kindvars]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/enum.TyKind.html#variants
+
+## Import conventions
+
+Although there is no hard and fast rule, the `ty` module tends to be used like so:
+
+```rust,ignore
+use ty::{self, Ty, TyCtxt};
+```
+
+In particular, since they are so common, the `Ty` and `TyCtxt` types are imported directly. Other
+types are often referenced with an explicit `ty::` prefix (e.g. `ty::TraitRef<'tcx>`). But some
+modules choose to import a larger or smaller set of names explicitly.
+
+## ADTs Representation
+
+Let's consider the example of a type like `MyStruct<u32>`, where `MyStruct` is defined like so:
+
+```rust,ignore
+struct MyStruct<T> { x: u32, y: T }
+```
+
+The type `MyStruct<u32>` would be an instance of `TyKind::Adt`:
+
+```rust,ignore
+Adt(&'tcx AdtDef, SubstsRef<'tcx>)
+// ------------ ---------------
+// (1) (2)
+//
+// (1) represents the `MyStruct` part
+// (2) represents the `<u32>`, or "substitutions" / generic arguments
+```
+
+There are two parts:
+
+- The [`AdtDef`][adtdef] references the struct/enum/union but without the values for its type
+ parameters. In our example, this is the `MyStruct` part *without* the argument `u32`.
+ (Note that in the HIR, structs, enums and unions are represented differently, but in `ty::Ty`,
+ they are all represented using `TyKind::Adt`.)
+- The [`SubstsRef`][substsref] is an interned list of values that are to be substituted for the
+ generic parameters. In our example of `MyStruct<u32>`, we would end up with a list like `[u32]`.
+ We’ll dig more into generics and substitutions in a little bit.
+
+[adtdef]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.AdtDef.html
+[substsref]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/subst/type.SubstsRef.html
+
+**`AdtDef` and `DefId`**
+
+For every type defined in the source code, there is a unique `DefId` (see [this
+chapter](hir.md#identifiers-in-the-hir)). This includes ADTs and generics. In the `MyStruct<T>`
+definition we gave above, there are two `DefId`s: one for `MyStruct` and one for `T`. Notice that
+the code above does not generate a new `DefId` for `u32` because it is not defined in that code (it
+is only referenced).
+
+`AdtDef` is more or less a wrapper around `DefId` with lots of useful helper methods. There is
+essentially a one-to-one relationship between `AdtDef` and `DefId`. You can get the `AdtDef` for a
+`DefId` with the [`tcx.adt_def(def_id)` query][adtdefq]. `AdtDef`s are all interned, as shown
+by the `'tcx` lifetime.
+
+[adtdefq]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.adt_def
+
+
+## Type errors
+
+There is a `TyKind::Error` that is produced when the user makes a type error. The idea is that
+we would propagate this type and suppress other errors that come up due to it so as not to overwhelm
+the user with cascading compiler error messages.
+
+There is an **important invariant** for `TyKind::Error`. The compiler should
+**never** produce `Error` unless we **know** that an error has already been
+reported to the user. This is usually
+because (a) you just reported it right there or (b) you are propagating an existing Error type (in
+which case the error should've been reported when that error type was produced).
+
+It's important to maintain this invariant because the whole point of the `Error` type is to suppress
+other errors -- i.e., we don't report them. If we were to produce an `Error` type without actually
+emitting an error to the user, then this could cause later errors to be suppressed, and the
+compilation might inadvertently succeed!
+
+Sometimes there is a third case. You believe that an error has been reported, but you believe it
+would've been reported earlier in the compilation, not locally. In that case, you can invoke
+[`delay_span_bug`] This will make a note that you expect compilation to yield an error -- if however
+compilation should succeed, then it will trigger a compiler bug report.
+
+[`delay_span_bug`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_session/struct.Session.html#method.delay_span_bug
+
+For added safety, it's not actually possible to produce a `TyKind::Error` value
+outside of [`rustc_middle::ty`][ty]; there is a private member of
+`TyKind::Error` that prevents it from being constructable elsewhere. Instead,
+one should use the [`TyCtxt::ty_error`][terr] or
+[`TyCtxt::ty_error_with_message`][terrmsg] methods. These methods automatically
+call `delay_span_bug` before returning an interned `Ty` of kind `Error`. If you
+were already planning to use [`delay_span_bug`], then you can just pass the
+span and message to [`ty_error_with_message`][terrmsg] instead to avoid
+delaying a redundant span bug.
+
+[terr]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.ty_error
+[terrmsg]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_middle/ty/struct.TyCtxt.html#method.ty_error_with_message
+
+## Question: Why not substitute “inside” the `AdtDef`?
+
+Recall that we represent a generic struct with `(AdtDef, substs)`. So why bother with this scheme?
+
+Well, the alternate way we could have chosen to represent types would be to always create a new,
+fully-substituted form of the `AdtDef` where all the types are already substituted. This seems like
+less of a hassle. However, the `(AdtDef, substs)` scheme has some advantages over this.
+
+First, `(AdtDef, substs)` scheme has an efficiency win:
+
+```rust,ignore
+struct MyStruct<T> {
+ ... 100s of fields ...
+}
+
+// Want to do: MyStruct<A> ==> MyStruct<B>
+```
+
+in an example like this, we can subst from `MyStruct<A>` to `MyStruct<B>` (and so on) very cheaply,
+by just replacing the one reference to `A` with `B`. But if we eagerly substituted all the fields,
+that could be a lot more work because we might have to go through all of the fields in the `AdtDef`
+and update all of their types.
+
+A bit more deeply, this corresponds to structs in Rust being [*nominal* types][nominal] — which
+means that they are defined by their *name* (and that their contents are then indexed from the
+definition of that name, and not carried along “within” the type itself).
+
+[nominal]: https://en.wikipedia.org/wiki/Nominal_type_system
diff --git a/src/doc/rustc-dev-guide/src/type-checking.md b/src/doc/rustc-dev-guide/src/type-checking.md
new file mode 100644
index 000000000..cd58faf22
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/type-checking.md
@@ -0,0 +1,44 @@
+# Type checking
+
+The [`rustc_typeck`][typeck] crate contains the source for "type collection"
+and "type checking", as well as a few other bits of related functionality. (It
+draws heavily on the [type inference] and [trait solving].)
+
+[typeck]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/index.html
+[type inference]: ./type-inference.md
+[trait solving]: ./traits/resolution.md
+
+## Type collection
+
+Type "collection" is the process of converting the types found in the HIR
+(`hir::Ty`), which represent the syntactic things that the user wrote, into the
+**internal representation** used by the compiler (`Ty<'tcx>`) – we also do
+similar conversions for where-clauses and other bits of the function signature.
+
+To try and get a sense for the difference, consider this function:
+
+```rust,ignore
+struct Foo { }
+fn foo(x: Foo, y: self::Foo) { ... }
+// ^^^ ^^^^^^^^^
+```
+
+Those two parameters `x` and `y` each have the same type: but they will have
+distinct `hir::Ty` nodes. Those nodes will have different spans, and of course
+they encode the path somewhat differently. But once they are "collected" into
+`Ty<'tcx>` nodes, they will be represented by the exact same internal type.
+
+Collection is defined as a bundle of [queries] for computing information about
+the various functions, traits, and other items in the crate being compiled.
+Note that each of these queries is concerned with *interprocedural* things –
+for example, for a function definition, collection will figure out the type and
+signature of the function, but it will not visit the *body* of the function in
+any way, nor examine type annotations on local variables (that's the job of
+type *checking*).
+
+For more details, see the [`collect`][collect] module.
+
+[queries]: ./query.md
+[collect]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/collect/
+
+**TODO**: actually talk about type checking... [#1161](https://github.com/rust-lang/rustc-dev-guide/issues/1161)
diff --git a/src/doc/rustc-dev-guide/src/type-inference.md b/src/doc/rustc-dev-guide/src/type-inference.md
new file mode 100644
index 000000000..4be9211ee
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/type-inference.md
@@ -0,0 +1,258 @@
+# Type inference
+
+<!-- toc -->
+
+Type inference is the process of automatic detection of the type of an
+expression.
+
+It is what allows Rust to work with fewer or no type annotations,
+making things easier for users:
+
+```rust
+fn main() {
+ let mut things = vec![];
+ things.push("thing");
+}
+```
+
+Here, the type of `things` is *inferred* to be `Vec<&str>` because of the value
+we push into `things`.
+
+The type inference is based on the standard Hindley-Milner (HM) type inference
+algorithm, but extended in various way to accommodate subtyping, region
+inference, and higher-ranked types.
+
+## A note on terminology
+
+We use the notation `?T` to refer to inference variables, also called
+existential variables.
+
+We use the terms "region" and "lifetime" interchangeably. Both refer to
+the `'a` in `&'a T`.
+
+The term "bound region" refers to a region that is bound in a function
+signature, such as the `'a` in `for<'a> fn(&'a u32)`. A region is
+"free" if it is not bound.
+
+## Creating an inference context
+
+You create and "enter" an inference context by doing something like
+the following:
+
+```rust,ignore
+tcx.infer_ctxt().enter(|infcx| {
+ // Use the inference context `infcx` here.
+})
+```
+
+Within the closure, `infcx` has the type `InferCtxt<'cx, 'tcx>` for some
+fresh `'cx`, while `'tcx` is the same as outside the inference context.
+(Again, see the [`ty` chapter][ty-ch] for more details on this setup.)
+
+[ty-ch]: ty.html
+
+The `tcx.infer_ctxt` method actually returns a builder, which means
+there are some kinds of configuration you can do before the `infcx` is
+created. See `InferCtxtBuilder` for more information.
+
+<a name="vars"></a>
+
+## Inference variables
+
+The main purpose of the inference context is to house a bunch of
+**inference variables** – these represent types or regions whose precise
+value is not yet known, but will be uncovered as we perform type-checking.
+
+If you're familiar with the basic ideas of unification from H-M type
+systems, or logic languages like Prolog, this is the same concept. If
+you're not, you might want to read a tutorial on how H-M type
+inference works, or perhaps this blog post on
+[unification in the Chalk project].
+
+[Unification in the Chalk project]: http://smallcultfollowing.com/babysteps/blog/2017/03/25/unification-in-chalk-part-1/
+
+All told, the inference context stores five kinds of inference variables
+(as of <!-- date: 2021-06 --> June 2021):
+
+- Type variables, which come in three varieties:
+ - General type variables (the most common). These can be unified with any
+ type.
+ - Integral type variables, which can only be unified with an integral type,
+ and arise from an integer literal expression like `22`.
+ - Float type variables, which can only be unified with a float type, and
+ arise from a float literal expression like `22.0`.
+- Region variables, which represent lifetimes, and arise all over the place.
+- Const variables, which represent constants.
+
+All the type variables work in much the same way: you can create a new
+type variable, and what you get is `Ty<'tcx>` representing an
+unresolved type `?T`. Then later you can apply the various operations
+that the inferencer supports, such as equality or subtyping, and it
+will possibly **instantiate** (or **bind**) that `?T` to a specific
+value as a result.
+
+The region variables work somewhat differently, and are described
+below in a separate section.
+
+## Enforcing equality / subtyping
+
+The most basic operations you can perform in the type inferencer is
+**equality**, which forces two types `T` and `U` to be the same. The
+recommended way to add an equality constraint is to use the `at`
+method, roughly like so:
+
+```rust,ignore
+infcx.at(...).eq(t, u);
+```
+
+The first `at()` call provides a bit of context, i.e. why you are
+doing this unification, and in what environment, and the `eq` method
+performs the actual equality constraint.
+
+When you equate things, you force them to be precisely equal. Equating
+returns an `InferResult` – if it returns `Err(err)`, then equating
+failed, and the enclosing `TypeError` will tell you what went wrong.
+
+The success case is perhaps more interesting. The "primary" return
+type of `eq` is `()` – that is, when it succeeds, it doesn't return a
+value of any particular interest. Rather, it is executed for its
+side-effects of constraining type variables and so forth. However, the
+actual return type is not `()`, but rather `InferOk<()>`. The
+`InferOk` type is used to carry extra trait obligations – your job is
+to ensure that these are fulfilled (typically by enrolling them in a
+fulfillment context). See the [trait chapter] for more background on that.
+
+[trait chapter]: traits/resolution.html
+
+You can similarly enforce subtyping through `infcx.at(..).sub(..)`. The same
+basic concepts as above apply.
+
+## "Trying" equality
+
+Sometimes you would like to know if it is *possible* to equate two
+types without error. You can test that with `infcx.can_eq` (or
+`infcx.can_sub` for subtyping). If this returns `Ok`, then equality
+is possible – but in all cases, any side-effects are reversed.
+
+Be aware, though, that the success or failure of these methods is always
+**modulo regions**. That is, two types `&'a u32` and `&'b u32` will
+return `Ok` for `can_eq`, even if `'a != 'b`. This falls out from the
+"two-phase" nature of how we solve region constraints.
+
+## Snapshots
+
+As described in the previous section on `can_eq`, often it is useful
+to be able to do a series of operations and then roll back their
+side-effects. This is done for various reasons: one of them is to be
+able to backtrack, trying out multiple possibilities before settling
+on which path to take. Another is in order to ensure that a series of
+smaller changes take place atomically or not at all.
+
+To allow for this, the inference context supports a `snapshot` method.
+When you call it, it will start recording changes that occur from the
+operations you perform. When you are done, you can either invoke
+`rollback_to`, which will undo those changes, or else `confirm`, which
+will make them permanent. Snapshots can be nested as long as you follow
+a stack-like discipline.
+
+Rather than use snapshots directly, it is often helpful to use the
+methods like `commit_if_ok` or `probe` that encapsulate higher-level
+patterns.
+
+## Subtyping obligations
+
+One thing worth discussing is subtyping obligations. When you force
+two types to be a subtype, like `?T <: i32`, we can often convert those
+into equality constraints. This follows from Rust's rather limited notion
+of subtyping: so, in the above case, `?T <: i32` is equivalent to `?T = i32`.
+
+However, in some cases we have to be more careful. For example, when
+regions are involved. So if you have `?T <: &'a i32`, what we would do
+is to first "generalize" `&'a i32` into a type with a region variable:
+`&'?b i32`, and then unify `?T` with that (`?T = &'?b i32`). We then
+relate this new variable with the original bound:
+
+```text
+&'?b i32 <: &'a i32
+```
+
+This will result in a region constraint (see below) of `'?b: 'a`.
+
+One final interesting case is relating two unbound type variables,
+like `?T <: ?U`. In that case, we can't make progress, so we enqueue
+an obligation `Subtype(?T, ?U)` and return it via the `InferOk`
+mechanism. You'll have to try again when more details about `?T` or
+`?U` are known.
+
+## Region constraints
+
+Regions are inferenced somewhat differently from types. Rather than
+eagerly unifying things, we simply collect constraints as we go, but
+make (almost) no attempt to solve regions. These constraints have the
+form of an "outlives" constraint:
+
+```text
+'a: 'b
+```
+
+Actually the code tends to view them as a subregion relation, but it's the same
+idea:
+
+```text
+'b <= 'a
+```
+
+(There are various other kinds of constraints, such as "verifys"; see
+the [`region_constraints`] module for details.)
+
+There is one case where we do some amount of eager unification. If you have an
+equality constraint between two regions
+
+```text
+'a = 'b
+```
+
+we will record that fact in a unification table. You can then use
+[`opportunistic_resolve_var`] to convert `'b` to `'a` (or vice
+versa). This is sometimes needed to ensure termination of fixed-point
+algorithms.
+
+[`region_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/region_constraints/index.html
+[`opportunistic_resolve_var`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/region_constraints/struct.RegionConstraintCollector.html#method.opportunistic_resolve_var
+
+## Extracting region constraints
+
+Ultimately, region constraints are only solved at the very end of
+type-checking, once all other constraints are known. There are two
+ways to solve region constraints right now: lexical and
+non-lexical. Eventually there will only be one.
+
+To solve **lexical** region constraints, you invoke
+[`resolve_regions_and_report_errors`]. This "closes" the region
+constraint process and invokes the [`lexical_region_resolve`] code. Once
+this is done, any further attempt to equate or create a subtyping
+relationship will yield an ICE.
+
+Non-lexical region constraints are not handled within the inference
+context. Instead, the NLL solver (actually, the MIR type-checker)
+invokes [`take_and_reset_region_constraints`] periodically. This
+extracts all of the outlives constraints from the region solver, but
+leaves the set of variables intact. This is used to get *just* the
+region constraints that resulted from some particular point in the
+program, since the NLL solver needs to know not just *what* regions
+were subregions, but also *where*. Finally, the NLL solver invokes
+[`take_region_var_origins`], which "closes" the region constraint
+process in the same way as normal solving.
+
+[`resolve_regions_and_report_errors`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/struct.InferCtxt.html#method.resolve_regions_and_report_errors
+[`lexical_region_resolve`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/lexical_region_resolve/index.html
+[`take_and_reset_region_constraints`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/struct.InferCtxt.html#method.take_and_reset_region_constraints
+[`take_region_var_origins`]: https://doc.rust-lang.org/nightly/nightly-rustc/rustc_infer/infer/struct.InferCtxt.html#method.take_region_var_origins
+
+## Lexical region resolution
+
+Lexical region resolution is done by initially assigning each region
+variable to an empty value. We then process each outlives constraint
+repeatedly, growing region variables until a fixed-point is reached.
+Region variables can be grown using a least-upper-bound relation on
+the region lattice in a fairly straightforward fashion.
diff --git a/src/doc/rustc-dev-guide/src/variance.md b/src/doc/rustc-dev-guide/src/variance.md
new file mode 100644
index 000000000..c03de7a20
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/variance.md
@@ -0,0 +1,318 @@
+# Variance of type and lifetime parameters
+
+<!-- toc -->
+
+For a more general background on variance, see the [background] appendix.
+
+[background]: ./appendix/background.html
+
+During type checking we must infer the variance of type and lifetime
+parameters. The algorithm is taken from Section 4 of the paper ["Taming the
+Wildcards: Combining Definition- and Use-Site Variance"][pldi11] published in
+PLDI'11 and written by Altidor et al., and hereafter referred to as The Paper.
+
+[pldi11]: https://people.cs.umass.edu/~yannis/variance-extended2011.pdf
+
+This inference is explicitly designed *not* to consider the uses of
+types within code. To determine the variance of type parameters
+defined on type `X`, we only consider the definition of the type `X`
+and the definitions of any types it references.
+
+We only infer variance for type parameters found on *data types*
+like structs and enums. In these cases, there is a fairly straightforward
+explanation for what variance means. The variance of the type
+or lifetime parameters defines whether `T<A>` is a subtype of `T<B>`
+(resp. `T<'a>` and `T<'b>`) based on the relationship of `A` and `B`
+(resp. `'a` and `'b`).
+
+We do not infer variance for type parameters found on traits, functions,
+or impls. Variance on trait parameters can indeed make sense
+(and we used to compute it) but it is actually rather subtle in
+meaning and not that useful in practice, so we removed it. See the
+[addendum] for some details. Variances on function/impl parameters, on the
+other hand, doesn't make sense because these parameters are instantiated and
+then forgotten, they don't persist in types or compiled byproducts.
+
+[addendum]: #addendum
+
+> **Notation**
+>
+> We use the notation of The Paper throughout this chapter:
+>
+> - `+` is _covariance_.
+> - `-` is _contravariance_.
+> - `*` is _bivariance_.
+> - `o` is _invariance_.
+
+## The algorithm
+
+The basic idea is quite straightforward. We iterate over the types
+defined and, for each use of a type parameter `X`, accumulate a
+constraint indicating that the variance of `X` must be valid for the
+variance of that use site. We then iteratively refine the variance of
+`X` until all constraints are met. There is *always* a solution, because at
+the limit we can declare all type parameters to be invariant and all
+constraints will be satisfied.
+
+As a simple example, consider:
+
+```rust,ignore
+enum Option<A> { Some(A), None }
+enum OptionalFn<B> { Some(|B|), None }
+enum OptionalMap<C> { Some(|C| -> C), None }
+```
+
+Here, we will generate the constraints:
+
+```text
+1. V(A) <= +
+2. V(B) <= -
+3. V(C) <= +
+4. V(C) <= -
+```
+
+These indicate that (1) the variance of A must be at most covariant;
+(2) the variance of B must be at most contravariant; and (3, 4) the
+variance of C must be at most covariant *and* contravariant. All of these
+results are based on a variance lattice defined as follows:
+
+```text
+ * Top (bivariant)
+- +
+ o Bottom (invariant)
+```
+
+Based on this lattice, the solution `V(A)=+`, `V(B)=-`, `V(C)=o` is the
+optimal solution. Note that there is always a naive solution which
+just declares all variables to be invariant.
+
+You may be wondering why fixed-point iteration is required. The reason
+is that the variance of a use site may itself be a function of the
+variance of other type parameters. In full generality, our constraints
+take the form:
+
+```text
+V(X) <= Term
+Term := + | - | * | o | V(X) | Term x Term
+```
+
+Here the notation `V(X)` indicates the variance of a type/region
+parameter `X` with respect to its defining class. `Term x Term`
+represents the "variance transform" as defined in the paper:
+
+> If the variance of a type variable `X` in type expression `E` is `V2`
+ and the definition-site variance of the corresponding type parameter
+ of a class `C` is `V1`, then the variance of `X` in the type expression
+ `C<E>` is `V3 = V1.xform(V2)`.
+
+## Constraints
+
+If I have a struct or enum with where clauses:
+
+```rust,ignore
+struct Foo<T: Bar> { ... }
+```
+
+you might wonder whether the variance of `T` with respect to `Bar` affects the
+variance `T` with respect to `Foo`. I claim no. The reason: assume that `T` is
+invariant with respect to `Bar` but covariant with respect to `Foo`. And then
+we have a `Foo<X>` that is upcast to `Foo<Y>`, where `X <: Y`. However, while
+`X : Bar`, `Y : Bar` does not hold. In that case, the upcast will be illegal,
+but not because of a variance failure, but rather because the target type
+`Foo<Y>` is itself just not well-formed. Basically we get to assume
+well-formedness of all types involved before considering variance.
+
+### Dependency graph management
+
+Because variance is a whole-crate inference, its dependency graph
+can become quite muddled if we are not careful. To resolve this, we refactor
+into two queries:
+
+- `crate_variances` computes the variance for all items in the current crate.
+- `variances_of` accesses the variance for an individual reading; it
+ works by requesting `crate_variances` and extracting the relevant data.
+
+If you limit yourself to reading `variances_of`, your code will only
+depend then on the inference of that particular item.
+
+Ultimately, this setup relies on the [red-green algorithm][rga]. In particular,
+every variance query effectively depends on all type definitions in the entire
+crate (through `crate_variances`), but since most changes will not result in a
+change to the actual results from variance inference, the `variances_of` query
+will wind up being considered green after it is re-evaluated.
+
+[rga]: ./queries/incremental-compilation.html
+
+<a name="addendum"></a>
+
+## Addendum: Variance on traits
+
+As mentioned above, we used to permit variance on traits. This was
+computed based on the appearance of trait type parameters in
+method signatures and was used to represent the compatibility of
+vtables in trait objects (and also "virtual" vtables or dictionary
+in trait bounds). One complication was that variance for
+associated types is less obvious, since they can be projected out
+and put to myriad uses, so it's not clear when it is safe to allow
+`X<A>::Bar` to vary (or indeed just what that means). Moreover (as
+covered below) all inputs on any trait with an associated type had
+to be invariant, limiting the applicability. Finally, the
+annotations (`MarkerTrait`, `PhantomFn`) needed to ensure that all
+trait type parameters had a variance were confusing and annoying
+for little benefit.
+
+Just for historical reference, I am going to preserve some text indicating how
+one could interpret variance and trait matching.
+
+### Variance and object types
+
+Just as with structs and enums, we can decide the subtyping
+relationship between two object types `&Trait<A>` and `&Trait<B>`
+based on the relationship of `A` and `B`. Note that for object
+types we ignore the `Self` type parameter – it is unknown, and
+the nature of dynamic dispatch ensures that we will always call a
+function that is expected the appropriate `Self` type. However, we
+must be careful with the other type parameters, or else we could
+end up calling a function that is expecting one type but provided
+another.
+
+To see what I mean, consider a trait like so:
+
+```rust
+trait ConvertTo<A> {
+ fn convertTo(&self) -> A;
+}
+```
+
+Intuitively, If we had one object `O=&ConvertTo<Object>` and another
+`S=&ConvertTo<String>`, then `S <: O` because `String <: Object`
+(presuming Java-like "string" and "object" types, my go to examples
+for subtyping). The actual algorithm would be to compare the
+(explicit) type parameters pairwise respecting their variance: here,
+the type parameter A is covariant (it appears only in a return
+position), and hence we require that `String <: Object`.
+
+You'll note though that we did not consider the binding for the
+(implicit) `Self` type parameter: in fact, it is unknown, so that's
+good. The reason we can ignore that parameter is precisely because we
+don't need to know its value until a call occurs, and at that time (as
+you said) the dynamic nature of virtual dispatch means the code we run
+will be correct for whatever value `Self` happens to be bound to for
+the particular object whose method we called. `Self` is thus different
+from `A`, because the caller requires that `A` be known in order to
+know the return type of the method `convertTo()`. (As an aside, we
+have rules preventing methods where `Self` appears outside of the
+receiver position from being called via an object.)
+
+### Trait variance and vtable resolution
+
+But traits aren't only used with objects. They're also used when
+deciding whether a given impl satisfies a given trait bound. To set the
+scene here, imagine I had a function:
+
+```rust,ignore
+fn convertAll<A,T:ConvertTo<A>>(v: &[T]) { ... }
+```
+
+Now imagine that I have an implementation of `ConvertTo` for `Object`:
+
+```rust,ignore
+impl ConvertTo<i32> for Object { ... }
+```
+
+And I want to call `convertAll` on an array of strings. Suppose
+further that for whatever reason I specifically supply the value of
+`String` for the type parameter `T`:
+
+```rust,ignore
+let mut vector = vec!["string", ...];
+convertAll::<i32, String>(vector);
+```
+
+Is this legal? To put another way, can we apply the `impl` for
+`Object` to the type `String`? The answer is yes, but to see why
+we have to expand out what will happen:
+
+- `convertAll` will create a pointer to one of the entries in the
+ vector, which will have type `&String`
+- It will then call the impl of `convertTo()` that is intended
+ for use with objects. This has the type `fn(self: &Object) -> i32`.
+
+ It is OK to provide a value for `self` of type `&String` because
+ `&String <: &Object`.
+
+OK, so intuitively we want this to be legal, so let's bring this back
+to variance and see whether we are computing the correct result. We
+must first figure out how to phrase the question "is an impl for
+`Object,i32` usable where an impl for `String,i32` is expected?"
+
+Maybe it's helpful to think of a dictionary-passing implementation of
+type classes. In that case, `convertAll()` takes an implicit parameter
+representing the impl. In short, we *have* an impl of type:
+
+```text
+V_O = ConvertTo<i32> for Object
+```
+
+and the function prototype expects an impl of type:
+
+```text
+V_S = ConvertTo<i32> for String
+```
+
+As with any argument, this is legal if the type of the value given
+(`V_O`) is a subtype of the type expected (`V_S`). So is `V_O <: V_S`?
+The answer will depend on the variance of the various parameters. In
+this case, because the `Self` parameter is contravariant and `A` is
+covariant, it means that:
+
+```text
+V_O <: V_S iff
+ i32 <: i32
+ String <: Object
+```
+
+These conditions are satisfied and so we are happy.
+
+### Variance and associated types
+
+Traits with associated types – or at minimum projection
+expressions – must be invariant with respect to all of their
+inputs. To see why this makes sense, consider what subtyping for a
+trait reference means:
+
+```text
+<T as Trait> <: <U as Trait>
+```
+
+means that if I know that `T as Trait`, I also know that `U as
+Trait`. Moreover, if you think of it as dictionary passing style,
+it means that a dictionary for `<T as Trait>` is safe to use where
+a dictionary for `<U as Trait>` is expected.
+
+The problem is that when you can project types out from `<T as
+Trait>`, the relationship to types projected out of `<U as Trait>`
+is completely unknown unless `T==U` (see #21726 for more
+details). Making `Trait` invariant ensures that this is true.
+
+Another related reason is that if we didn't make traits with
+associated types invariant, then projection is no longer a
+function with a single result. Consider:
+
+```rust,ignore
+trait Identity { type Out; fn foo(&self); }
+impl<T> Identity for T { type Out = T; ... }
+```
+
+Now if I have `<&'static () as Identity>::Out`, this can be
+validly derived as `&'a ()` for any `'a`:
+
+```text
+<&'a () as Identity> <: <&'static () as Identity>
+if &'static () < : &'a () -- Identity is contravariant in Self
+if 'static : 'a -- Subtyping rules for relations
+```
+
+This change otoh means that `<'static () as Identity>::Out` is
+always `&'static ()` (which might then be upcast to `'a ()`,
+separately). This was helpful in solving #21750.
diff --git a/src/doc/rustc-dev-guide/src/walkthrough.md b/src/doc/rustc-dev-guide/src/walkthrough.md
new file mode 100644
index 000000000..84cb1296f
--- /dev/null
+++ b/src/doc/rustc-dev-guide/src/walkthrough.md
@@ -0,0 +1,267 @@
+# Walkthrough: a typical contribution
+
+<!-- toc -->
+
+There are _a lot_ of ways to contribute to the Rust compiler, including fixing
+bugs, improving performance, helping design features, providing feedback on
+existing features, etc. This chapter does not claim to scratch the surface.
+Instead, it walks through the design and implementation of a new feature. Not
+all of the steps and processes described here are needed for every
+contribution, and I will try to point those out as they arise.
+
+In general, if you are interested in making a contribution and aren't sure
+where to start, please feel free to ask!
+
+## Overview
+
+The feature I will discuss in this chapter is the `?` Kleene operator for
+macros. Basically, we want to be able to write something like this:
+
+```rust,ignore
+macro_rules! foo {
+ ($arg:ident $(, $optional_arg:ident)?) => {
+ println!("{}", $arg);
+
+ $(
+ println!("{}", $optional_arg);
+ )?
+ }
+}
+
+fn main() {
+ let x = 0;
+ foo!(x); // ok! prints "0"
+ foo!(x, x); // ok! prints "0 0"
+}
+```
+
+So basically, the `$(pat)?` matcher in the macro means "this pattern can occur
+0 or 1 times", similar to other regex syntaxes.
+
+There were a number of steps to go from an idea to stable Rust feature. Here is
+a quick list. We will go through each of these in order below. As I mentioned
+before, not all of these are needed for every type of contribution.
+
+- **Idea discussion/Pre-RFC** A Pre-RFC is an early draft or design discussion
+ of a feature. This stage is intended to flesh out the design space a bit and
+ get a grasp on the different merits and problems with an idea. It's a great
+ way to get early feedback on your idea before presenting it the wider
+ audience. You can find the original discussion [here][prerfc].
+- **RFC** This is when you formally present your idea to the community for
+ consideration. You can find the RFC [here][rfc].
+- **Implementation** Implement your idea unstably in the compiler. You can
+ find the original implementation [here][impl1].
+- **Possibly iterate/refine** As the community gets experience with your
+ feature on the nightly compiler and in `std`, there may be additional
+ feedback about design choice that might be adjusted. This particular feature
+ went [through][impl2] a [number][impl3] of [iterations][impl4].
+- **Stabilization** When your feature has baked enough, a Rust team member may
+ [propose to stabilize it][merge]. If there is consensus, this is done.
+- **Relax** Your feature is now a stable Rust feature!
+
+[prerfc]: https://internals.rust-lang.org/t/pre-rfc-at-most-one-repetition-macro-patterns/6557
+[rfc]: https://github.com/rust-lang/rfcs/pull/2298
+[impl1]: https://github.com/rust-lang/rust/pull/47752
+[impl2]: https://github.com/rust-lang/rust/pull/49719
+[impl3]: https://github.com/rust-lang/rust/pull/51336
+[impl4]: https://github.com/rust-lang/rust/pull/51587
+[merge]: https://github.com/rust-lang/rust/issues/48075#issuecomment-433177613
+
+## Pre-RFC and RFC
+
+> NOTE: In general, if you are not proposing a _new_ feature or substantial
+> change to Rust or the ecosystem, you don't need to follow the RFC process.
+> Instead, you can just jump to [implementation](#impl).
+>
+> You can find the official guidelines for when to open an RFC [here][rfcwhen].
+
+[rfcwhen]: https://github.com/rust-lang/rfcs#when-you-need-to-follow-this-process
+
+An RFC is a document that describes the feature or change you are proposing in
+detail. Anyone can write an RFC; the process is the same for everyone,
+including Rust team members.
+
+To open an RFC, open a PR on the
+[rust-lang/rfcs](https://github.com/rust-lang/rfcs) repo on GitHub. You can
+find detailed instructions in the
+[README](https://github.com/rust-lang/rfcs#what-the-process-is).
+
+Before opening an RFC, you should do the research to "flesh out" your idea.
+Hastily-proposed RFCs tend not to be accepted. You should generally have a good
+description of the motivation, impact, disadvantages, and potential
+interactions with other features.
+
+If that sounds like a lot of work, it's because it is. But no fear! Even if
+you're not a compiler hacker, you can get great feedback by doing a _pre-RFC_.
+This is an _informal_ discussion of the idea. The best place to do this is
+internals.rust-lang.org. Your post doesn't have to follow any particular
+structure. It doesn't even need to be a cohesive idea. Generally, you will get
+tons of feedback that you can integrate back to produce a good RFC.
+
+(Another pro-tip: try searching the RFCs repo and internals for prior related
+ideas. A lot of times an idea has already been considered and was either
+rejected or postponed to be tried again later. This can save you and everybody
+else some time)
+
+In the case of our example, a participant in the pre-RFC thread pointed out a
+syntax ambiguity and a potential resolution. Also, the overall feedback seemed
+positive. In this case, the discussion converged pretty quickly, but for some
+ideas, a lot more discussion can happen (e.g. see [this RFC][nonascii] which
+received a whopping 684 comments!). If that happens, don't be discouraged; it
+means the community is interested in your idea, but it perhaps needs some
+adjustments.
+
+[nonascii]: https://github.com/rust-lang/rfcs/pull/2457
+
+The RFC for our `?` macro feature did receive some discussion on the RFC thread
+too. As with most RFCs, there were a few questions that we couldn't answer by
+discussion: we needed experience using the feature to decide. Such questions
+are listed in the "Unresolved Questions" section of the RFC. Also, over the
+course of the RFC discussion, you will probably want to update the RFC document
+itself to reflect the course of the discussion (e.g. new alternatives or prior
+work may be added or you may decide to change parts of the proposal itself).
+
+In the end, when the discussion seems to reach a consensus and die down a bit,
+a Rust team member may propose to move to "final comment period" (FCP) with one
+of three possible dispositions. This means that they want the other members of
+the appropriate teams to review and comment on the RFC. More discussion may
+ensue, which may result in more changes or unresolved questions being added. At
+some point, when everyone is satisfied, the RFC enters the FCP, which is the
+last chance for people to bring up objections. When the FCP is over, the
+disposition is adopted. Here are the three possible dispositions:
+
+- _Merge_: accept the feature. Here is the proposal to merge for our [`?` macro
+ feature][rfcmerge].
+- _Close_: this feature in its current form is not a good fit for rust. Don't
+ be discouraged if this happens to your RFC, and don't take it personally.
+ This is not a reflection on you, but rather a community decision that rust
+ will go a different direction.
+- _Postpone_: there is interest in going this direction but not at the moment.
+ This happens most often because the appropriate Rust team doesn't have the
+ bandwidth to shepherd the feature through the process to stabilization. Often
+ this is the case when the feature doesn't fit into the team's roadmap.
+ Postponed ideas may be revisited later.
+
+[rfcmerge]: https://github.com/rust-lang/rfcs/pull/2298#issuecomment-360582667
+
+When an RFC is merged, the PR is merged into the RFCs repo. A new _tracking
+issue_ is created in the [rust-lang/rust] repo to track progress on the feature
+and discuss unresolved questions, implementation progress and blockers, etc.
+Here is the tracking issue on for our [`?` macro feature][tracking].
+
+[tracking]: https://github.com/rust-lang/rust/issues/48075
+
+<a name="impl"></a>
+
+## Implementation
+
+To make a change to the compiler, open a PR against the [rust-lang/rust] repo.
+
+[rust-lang/rust]: https://github.com/rust-lang/rust
+
+Depending on the feature/change/bug fix/improvement, implementation may be
+relatively-straightforward or it may be a major undertaking. You can always ask
+for help or mentorship from more experienced compiler devs. Also, you don't
+have to be the one to implement your feature; but keep in mind that if you
+don't it might be a while before someone else does.
+
+For the `?` macro feature, I needed to go understand the relevant parts of
+macro expansion in the compiler. Personally, I find that [improving the
+comments][comments] in the code is a helpful way of making sure I understand
+it, but you don't have to do that if you don't want to.
+
+[comments]: https://github.com/rust-lang/rust/pull/47732
+
+I then [implemented][impl1] the original feature, as described in the RFC. When
+a new feature is implemented, it goes behind a _feature gate_, which means that
+you have to use `#![feature(my_feature_name)]` to use the feature. The feature
+gate is removed when the feature is stabilized.
+
+**Most bug fixes and improvements** don't require a feature gate. You can just
+make your changes/improvements.
+
+When you open a PR on the [rust-lang/rust], a bot will assign your PR to a
+review. If there is a particular Rust team member you are working with, you can
+request that reviewer by leaving a comment on the thread with `r?
+@reviewer-github-id` (e.g. `r? @eddyb`). If you don't know who to request,
+don't request anyone; the bot will assign someone automatically based on which files you changed.
+
+The reviewer may request changes before they approve your PR. Feel free to ask
+questions or discuss things you don't understand or disagree with. However,
+recognize that the PR won't be merged unless someone on the Rust team approves
+it.
+
+When your reviewer approves the PR, it will go into a queue for yet another bot
+called `@bors`. `@bors` manages the CI build/merge queue. When your PR reaches
+the head of the `@bors` queue, `@bors` will test out the merge by running all
+tests against your PR on GitHub Actions. This takes a lot of time to
+finish. If all tests pass, the PR is merged and becomes part of the next
+nightly compiler!
+
+There are a couple of things that may happen for some PRs during the review process
+
+- If the change is substantial enough, the reviewer may request an FCP on
+ the PR. This gives all members of the appropriate team a chance to review the
+ changes.
+- If the change may cause breakage, the reviewer may request a [crater] run.
+ This compiles the compiler with your changes and then attempts to compile all
+ crates on crates.io with your modified compiler. This is a great smoke test
+ to check if you introduced a change to compiler behavior that affects a large
+ portion of the ecosystem.
+- If the diff of your PR is large or the reviewer is busy, your PR may have
+ some merge conflicts with other PRs that happen to get merged first. You
+ should fix these merge conflicts using the normal git procedures.
+
+[crater]: ./tests/intro.html#crater
+
+If you are not doing a new feature or something like that (e.g. if you are
+fixing a bug), then that's it! Thanks for your contribution :)
+
+## Refining your implementation
+
+As people get experience with your new feature on nightly, slight changes may
+be proposed and unresolved questions may become resolved. Updates/changes go
+through the same process for implementing any other changes, as described
+above (i.e. submit a PR, go through review, wait for `@bors`, etc).
+
+Some changes may be major enough to require an FCP and some review by Rust team
+members.
+
+For the `?` macro feature, we went through a few different iterations after the
+original implementation: [1][impl2], [2][impl3], [3][impl4].
+
+Along the way, we decided that `?` should not take a separator, which was
+previously an unresolved question listed in the RFC. We also changed the
+disambiguation strategy: we decided to remove the ability to use `?` as a
+separator token for other repetition operators (e.g. `+` or `*`). However,
+since this was a breaking change, we decided to do it over an edition boundary.
+Thus, the new feature can be enabled only in edition 2018. These deviations
+from the original RFC required [another
+FCP](https://github.com/rust-lang/rust/issues/51934).
+
+## Stabilization
+
+Finally, after the feature had baked for a while on nightly, a language team member
+[moved to stabilize it][stabilizefcp].
+
+[stabilizefcp]: https://github.com/rust-lang/rust/issues/48075#issuecomment-433177613
+
+A _stabilization report_ needs to be written that includes
+
+- brief description of the behavior and any deviations from the RFC
+- which edition(s) are affected and how
+- links to a few tests to show the interesting aspects
+
+The stabilization report for our feature is [here][stabrep].
+
+[stabrep]: https://github.com/rust-lang/rust/issues/48075#issuecomment-433243048
+
+After this, [a PR is made][stab] to remove the feature gate, enabling the feature by
+default (on the 2018 edition). A note is added to the [Release notes][relnotes]
+about the feature.
+
+[stab]: https://github.com/rust-lang/rust/pull/56245
+
+Steps to stabilize the feature can be found at [Stabilizing Features](./stabilization_guide.md).
+
+[relnotes]: https://github.com/rust-lang/rust/blob/master/RELEASES.md
diff --git a/src/doc/rustc-dev-guide/triagebot.toml b/src/doc/rustc-dev-guide/triagebot.toml
new file mode 100644
index 000000000..ccb0de862
--- /dev/null
+++ b/src/doc/rustc-dev-guide/triagebot.toml
@@ -0,0 +1,8 @@
+[assign]
+
+[relabel]
+allow-unauthenticated = [
+ "waiting-on-review",
+ "waiting-on-author",
+ "blocked",
+]
diff --git a/src/doc/rustc/book.toml b/src/doc/rustc/book.toml
new file mode 100644
index 000000000..372350403
--- /dev/null
+++ b/src/doc/rustc/book.toml
@@ -0,0 +1,7 @@
+[book]
+multilingual = false
+src = "src"
+title = "The rustc book"
+
+[output.html]
+git-repository-url = "https://github.com/rust-lang/rust/tree/master/src/doc/rustc"
diff --git a/src/doc/rustc/src/SUMMARY.md b/src/doc/rustc/src/SUMMARY.md
new file mode 100644
index 000000000..d168af60c
--- /dev/null
+++ b/src/doc/rustc/src/SUMMARY.md
@@ -0,0 +1,43 @@
+# The Rustc Book
+
+- [What is rustc?](what-is-rustc.md)
+- [Command-line Arguments](command-line-arguments.md)
+ - [Codegen Options](codegen-options/index.md)
+- [Lints](lints/index.md)
+ - [Lint Levels](lints/levels.md)
+ - [Lint Groups](lints/groups.md)
+ - [Lint Listing](lints/listing/index.md)
+ - [Allowed-by-default Lints](lints/listing/allowed-by-default.md)
+ - [Warn-by-default Lints](lints/listing/warn-by-default.md)
+ - [Deny-by-default Lints](lints/listing/deny-by-default.md)
+- [JSON Output](json.md)
+- [Tests](tests/index.md)
+- [Platform Support](platform-support.md)
+ - [Target Tier Policy](target-tier-policy.md)
+ - [Template for Target-specific Documentation](platform-support/TEMPLATE.md)
+ - [aarch64-apple-ios-sim](platform-support/aarch64-apple-ios-sim.md)
+ - [\*-apple-watchos\*](platform-support/apple-watchos.md)
+ - [aarch64-nintendo-switch-freestanding](platform-support/aarch64-nintendo-switch-freestanding.md)
+ - [armv6k-nintendo-3ds](platform-support/armv6k-nintendo-3ds.md)
+ - [armv7-unknown-linux-uclibceabi](platform-support/armv7-unknown-linux-uclibceabi.md)
+ - [armv7-unknown-linux-uclibceabihf](platform-support/armv7-unknown-linux-uclibceabihf.md)
+ - [\*-fuchsia](platform-support/fuchsia.md)
+ - [\*-kmc-solid_\*](platform-support/kmc-solid.md)
+ - [m68k-unknown-linux-gnu](platform-support/m68k-unknown-linux-gnu.md)
+ - [mips64-openwrt-linux-musl](platform-support/mips64-openwrt-linux-musl.md)
+ - [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
+ - [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
+ - [*-pc-windows-gnullvm](platform-support/pc-windows-gnullvm.md)
+ - [*-unknown-openbsd](platform-support/openbsd.md)
+ - [\*-unknown-uefi](platform-support/unknown-uefi.md)
+ - [wasm64-unknown-unknown](platform-support/wasm64-unknown-unknown.md)
+ - [x86_64-unknown-none](platform-support/x86_64-unknown-none.md)
+- [Targets](targets/index.md)
+ - [Built-in Targets](targets/built-in.md)
+ - [Custom Targets](targets/custom.md)
+ - [Known Issues](targets/known-issues.md)
+- [Profile-guided Optimization](profile-guided-optimization.md)
+- [Instrumentation-based Code Coverage](instrument-coverage.md)
+- [Linker-plugin-based LTO](linker-plugin-lto.md)
+- [Exploit Mitigations](exploit-mitigations.md)
+- [Contributing to `rustc`](contributing.md)
diff --git a/src/doc/rustc/src/codegen-options/index.md b/src/doc/rustc/src/codegen-options/index.md
new file mode 100644
index 000000000..b1c3b618c
--- /dev/null
+++ b/src/doc/rustc/src/codegen-options/index.md
@@ -0,0 +1,626 @@
+# Codegen Options
+
+All of these options are passed to `rustc` via the `-C` flag, short for "codegen." You can see
+a version of this list for your exact compiler by running `rustc -C help`.
+
+## ar
+
+This option is deprecated and does nothing.
+
+## code-model
+
+This option lets you choose which code model to use. \
+Code models put constraints on address ranges that the program and its symbols may use. \
+With smaller address ranges machine instructions
+may be able to use more compact addressing modes.
+
+The specific ranges depend on target architectures and addressing modes available to them. \
+For x86 more detailed description of its code models can be found in
+[System V Application Binary Interface](https://github.com/hjl-tools/x86-psABI/wiki/x86-64-psABI-1.0.pdf)
+specification.
+
+Supported values for this option are:
+
+- `tiny` - Tiny code model.
+- `small` - Small code model. This is the default model for majority of supported targets.
+- `kernel` - Kernel code model.
+- `medium` - Medium code model.
+- `large` - Large code model.
+
+Supported values can also be discovered by running `rustc --print code-models`.
+
+## codegen-units
+
+This flag controls how many code generation units the crate is split into. It
+takes an integer greater than 0.
+
+When a crate is split into multiple codegen units, LLVM is able to process
+them in parallel. Increasing parallelism may speed up compile times, but may
+also produce slower code. Setting this to 1 may improve the performance of
+generated code, but may be slower to compile.
+
+The default value, if not specified, is 16 for non-incremental builds. For
+incremental builds the default is 256 which allows caching to be more granular.
+
+## control-flow-guard
+
+This flag controls whether LLVM enables the Windows [Control Flow
+Guard](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard)
+platform security feature. This flag is currently ignored for non-Windows targets.
+It takes one of the following values:
+
+* `y`, `yes`, `on`, `checks`, or no value: enable Control Flow Guard.
+* `nochecks`: emit Control Flow Guard metadata without runtime enforcement checks (this
+should only be used for testing purposes as it does not provide security enforcement).
+* `n`, `no`, `off`: do not enable Control Flow Guard (the default).
+
+## debug-assertions
+
+This flag lets you turn `cfg(debug_assertions)` [conditional
+compilation](../../reference/conditional-compilation.md#debug_assertions) on
+or off. It takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: enable debug-assertions.
+* `n`, `no`, or `off`: disable debug-assertions.
+
+If not specified, debug assertions are automatically enabled only if the
+[opt-level](#opt-level) is 0.
+
+## debuginfo
+
+This flag controls the generation of debug information. It takes one of the
+following values:
+
+* `0`: no debug info at all (the default).
+* `1`: line tables only.
+* `2`: full debug info.
+
+Note: The [`-g` flag][option-g-debug] is an alias for `-C debuginfo=2`.
+
+## default-linker-libraries
+
+This flag controls whether or not the linker includes its default libraries.
+It takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: include default libraries (the default).
+* `n`, `no`, or `off`: exclude default libraries.
+
+For example, for gcc flavor linkers, this issues the `-nodefaultlibs` flag to
+the linker.
+
+## embed-bitcode
+
+This flag controls whether or not the compiler embeds LLVM bitcode into object
+files. It takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: put bitcode in rlibs (the default).
+* `n`, `no`, or `off`: omit bitcode from rlibs.
+
+LLVM bitcode is required when rustc is performing link-time optimization (LTO).
+It is also required on some targets like iOS ones where vendors look for LLVM
+bitcode. Embedded bitcode will appear in rustc-generated object files inside of
+a section whose name is defined by the target platform. Most of the time this is
+`.llvmbc`.
+
+The use of `-C embed-bitcode=no` can significantly improve compile times and
+reduce generated file sizes if your compilation does not actually need bitcode
+(e.g. if you're not compiling for iOS or you're not performing LTO). For these
+reasons, Cargo uses `-C embed-bitcode=no` whenever possible. Likewise, if you
+are building directly with `rustc` we recommend using `-C embed-bitcode=no`
+whenever you are not using LTO.
+
+If combined with `-C lto`, `-C embed-bitcode=no` will cause `rustc` to abort
+at start-up, because the combination is invalid.
+
+> **Note**: if you're building Rust code with LTO then you probably don't even
+> need the `embed-bitcode` option turned on. You'll likely want to use
+> `-Clinker-plugin-lto` instead which skips generating object files entirely and
+> simply replaces object files with LLVM bitcode. The only purpose for
+> `-Cembed-bitcode` is when you're generating an rlib that is both being used
+> with and without LTO. For example Rust's standard library ships with embedded
+> bitcode since users link to it both with and without LTO.
+>
+> This also may make you wonder why the default is `yes` for this option. The
+> reason for that is that it's how it was for rustc 1.44 and prior. In 1.45 this
+> option was added to turn off what had always been the default.
+
+## extra-filename
+
+This option allows you to put extra data in each output filename. It takes a
+string to add as a suffix to the filename. See the [`--emit`
+flag][option-emit] for more information.
+
+## force-frame-pointers
+
+This flag forces the use of frame pointers. It takes one of the following
+values:
+
+* `y`, `yes`, `on`, or no value: force-enable frame pointers.
+* `n`, `no`, or `off`: do not force-enable frame pointers. This does
+ not necessarily mean frame pointers will be removed.
+
+The default behaviour, if frame pointers are not force-enabled, depends on the
+target.
+
+## force-unwind-tables
+
+This flag forces the generation of unwind tables. It takes one of the following
+values:
+
+* `y`, `yes`, `on`, or no value: Unwind tables are forced to be generated.
+* `n`, `no`, or `off`: Unwind tables are not forced to be generated. If unwind
+ tables are required by the target an error will be emitted.
+
+The default if not specified depends on the target.
+
+## incremental
+
+This flag allows you to enable incremental compilation, which allows `rustc`
+to save information after compiling a crate to be reused when recompiling the
+crate, improving re-compile times. This takes a path to a directory where
+incremental files will be stored.
+
+## inline-threshold
+
+This option lets you set the default threshold for inlining a function. It
+takes an unsigned integer as a value. Inlining is based on a cost model, where
+a higher threshold will allow more inlining.
+
+The default depends on the [opt-level](#opt-level):
+
+| opt-level | Threshold |
+|-----------|-----------|
+| 0 | N/A, only inlines always-inline functions |
+| 1 | N/A, only inlines always-inline functions and LLVM lifetime intrinsics |
+| 2 | 225 |
+| 3 | 275 |
+| s | 75 |
+| z | 25 |
+
+## instrument-coverage
+
+This option enables instrumentation-based code coverage support. See the
+chapter on [instrumentation-based code coverage] for more information.
+
+Note that while the `-C instrument-coverage` option is stable, the profile data
+format produced by the resulting instrumentation may change, and may not work
+with coverage tools other than those built and shipped with the compiler.
+
+## link-arg
+
+This flag lets you append a single extra argument to the linker invocation.
+
+"Append" is significant; you can pass this flag multiple times to add multiple arguments.
+
+## link-args
+
+This flag lets you append multiple extra arguments to the linker invocation. The
+options should be separated by spaces.
+
+## link-dead-code
+
+This flag controls whether the linker will keep dead code. It takes one of
+the following values:
+
+* `y`, `yes`, `on`, or no value: keep dead code.
+* `n`, `no`, or `off`: remove dead code (the default).
+
+An example of when this flag might be useful is when trying to construct code coverage
+metrics.
+
+## link-self-contained
+
+On targets that support it this flag controls whether the linker will use libraries and objects
+shipped with Rust instead or those in the system.
+It takes one of the following values:
+
+* no value: rustc will use heuristic to disable self-contained mode if system has necessary tools.
+* `y`, `yes`, `on`: use only libraries/objects shipped with Rust.
+* `n`, `no`, or `off`: rely on the user or the linker to provide non-Rust libraries/objects.
+
+This allows overriding cases when detection fails or user wants to use shipped libraries.
+
+## linker
+
+This flag controls which linker `rustc` invokes to link your code. It takes a
+path to the linker executable. If this flag is not specified, the linker will
+be inferred based on the target. See also the [linker-flavor](#linker-flavor)
+flag for another way to specify the linker.
+
+## linker-flavor
+
+This flag controls the linker flavor used by `rustc`. If a linker is given with
+the [`-C linker` flag](#linker), then the linker flavor is inferred from the
+value provided. If no linker is given then the linker flavor is used to
+determine the linker to use. Every `rustc` target defaults to some linker
+flavor. Valid options are:
+
+* `em`: use [Emscripten `emcc`](https://emscripten.org/docs/tools_reference/emcc.html).
+* `gcc`: use the `cc` executable, which is typically gcc or clang on many systems.
+* `ld`: use the `ld` executable.
+* `msvc`: use the `link.exe` executable from Microsoft Visual Studio MSVC.
+* `ptx-linker`: use
+ [`rust-ptx-linker`](https://github.com/denzp/rust-ptx-linker) for Nvidia
+ NVPTX GPGPU support.
+* `bpf-linker`: use
+ [`bpf-linker`](https://github.com/alessandrod/bpf-linker) for eBPF support.
+* `wasm-ld`: use the [`wasm-ld`](https://lld.llvm.org/WebAssembly.html)
+ executable, a port of LLVM `lld` for WebAssembly.
+* `ld64.lld`: use the LLVM `lld` executable with the [`-flavor darwin`
+ flag][lld-flavor] for Apple's `ld`.
+* `ld.lld`: use the LLVM `lld` executable with the [`-flavor gnu`
+ flag][lld-flavor] for GNU binutils' `ld`.
+* `lld-link`: use the LLVM `lld` executable with the [`-flavor link`
+ flag][lld-flavor] for Microsoft's `link.exe`.
+
+[lld-flavor]: https://lld.llvm.org/Driver.html
+
+## linker-plugin-lto
+
+This flag defers LTO optimizations to the linker. See
+[linker-plugin-LTO](../linker-plugin-lto.md) for more details. It takes one of
+the following values:
+
+* `y`, `yes`, `on`, or no value: enable linker plugin LTO.
+* `n`, `no`, or `off`: disable linker plugin LTO (the default).
+* A path to the linker plugin.
+
+More specifically this flag will cause the compiler to replace its typical
+object file output with LLVM bitcode files. For example an rlib produced with
+`-Clinker-plugin-lto` will still have `*.o` files in it, but they'll all be LLVM
+bitcode instead of actual machine code. It is expected that the native platform
+linker is capable of loading these LLVM bitcode files and generating code at
+link time (typically after performing optimizations).
+
+Note that rustc can also read its own object files produced with
+`-Clinker-plugin-lto`. If an rlib is only ever going to get used later with a
+`-Clto` compilation then you can pass `-Clinker-plugin-lto` to speed up
+compilation and avoid generating object files that aren't used.
+
+## llvm-args
+
+This flag can be used to pass a list of arguments directly to LLVM.
+
+The list must be separated by spaces.
+
+Pass `--help` to see a list of options.
+
+## lto
+
+This flag controls whether LLVM uses [link time
+optimizations](https://llvm.org/docs/LinkTimeOptimization.html) to produce
+better optimized code, using whole-program analysis, at the cost of longer
+linking time. It takes one of the following values:
+
+* `y`, `yes`, `on`, `fat`, or no value: perform "fat" LTO which attempts to
+ perform optimizations across all crates within the dependency graph.
+* `n`, `no`, `off`: disables LTO.
+* `thin`: perform ["thin"
+ LTO](http://blog.llvm.org/2016/06/thinlto-scalable-and-incremental-lto.html).
+ This is similar to "fat", but takes substantially less time to run while
+ still achieving performance gains similar to "fat".
+
+If `-C lto` is not specified, then the compiler will attempt to perform "thin
+local LTO" which performs "thin" LTO on the local crate only across its
+[codegen units](#codegen-units). When `-C lto` is not specified, LTO is
+disabled if codegen units is 1 or optimizations are disabled ([`-C
+opt-level=0`](#opt-level)). That is:
+
+* When `-C lto` is not specified:
+ * `codegen-units=1`: disable LTO.
+ * `opt-level=0`: disable LTO.
+* When `-C lto` is specified:
+ * `lto`: 16 codegen units, perform fat LTO across crates.
+ * `codegen-units=1` + `lto`: 1 codegen unit, fat LTO across crates.
+
+See also [linker-plugin-lto](#linker-plugin-lto) for cross-language LTO.
+
+## metadata
+
+This option allows you to control the metadata used for symbol mangling. This
+takes a space-separated list of strings. Mangled symbols will incorporate a
+hash of the metadata. This may be used, for example, to differentiate symbols
+between two different versions of the same crate being linked.
+
+## no-prepopulate-passes
+
+This flag tells the pass manager to use an empty list of passes, instead of the
+usual pre-populated list of passes.
+
+## no-redzone
+
+This flag allows you to disable [the
+red zone](https://en.wikipedia.org/wiki/Red_zone_\(computing\)). It takes one
+of the following values:
+
+* `y`, `yes`, `on`, or no value: disable the red zone.
+* `n`, `no`, or `off`: enable the red zone.
+
+The default behaviour, if the flag is not specified, depends on the target.
+
+## no-stack-check
+
+This option is deprecated and does nothing.
+
+## no-vectorize-loops
+
+This flag disables [loop
+vectorization](https://llvm.org/docs/Vectorizers.html#the-loop-vectorizer).
+
+## no-vectorize-slp
+
+This flag disables vectorization using
+[superword-level
+parallelism](https://llvm.org/docs/Vectorizers.html#the-slp-vectorizer).
+
+## opt-level
+
+This flag controls the optimization level.
+
+* `0`: no optimizations, also turns on
+ [`cfg(debug_assertions)`](#debug-assertions) (the default).
+* `1`: basic optimizations.
+* `2`: some optimizations.
+* `3`: all optimizations.
+* `s`: optimize for binary size.
+* `z`: optimize for binary size, but also turn off loop vectorization.
+
+Note: The [`-O` flag][option-o-optimize] is an alias for `-C opt-level=2`.
+
+The default is `0`.
+
+## overflow-checks
+
+This flag allows you to control the behavior of [runtime integer
+overflow](../../reference/expressions/operator-expr.md#overflow). When
+overflow-checks are enabled, a panic will occur on overflow. This flag takes
+one of the following values:
+
+* `y`, `yes`, `on`, or no value: enable overflow checks.
+* `n`, `no`, or `off`: disable overflow checks.
+
+If not specified, overflow checks are enabled if
+[debug-assertions](#debug-assertions) are enabled, disabled otherwise.
+
+## panic
+
+This option lets you control what happens when the code panics.
+
+* `abort`: terminate the process upon panic
+* `unwind`: unwind the stack upon panic
+
+If not specified, the default depends on the target.
+
+## passes
+
+This flag can be used to add extra [LLVM
+passes](http://llvm.org/docs/Passes.html) to the compilation.
+
+The list must be separated by spaces.
+
+See also the [`no-prepopulate-passes`](#no-prepopulate-passes) flag.
+
+## prefer-dynamic
+
+By default, `rustc` prefers to statically link dependencies. This option will
+indicate that dynamic linking should be used if possible if both a static and
+dynamic versions of a library are available. There is an internal algorithm
+for determining whether or not it is possible to statically or dynamically
+link with a dependency. For example, `cdylib` crate types may only use static
+linkage. This flag takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: use dynamic linking.
+* `n`, `no`, or `off`: use static linking (the default).
+
+## profile-generate
+
+This flag allows for creating instrumented binaries that will collect
+profiling data for use with profile-guided optimization (PGO). The flag takes
+an optional argument which is the path to a directory into which the
+instrumented binary will emit the collected data. See the chapter on
+[profile-guided optimization] for more information.
+
+## profile-use
+
+This flag specifies the profiling data file to be used for profile-guided
+optimization (PGO). The flag takes a mandatory argument which is the path
+to a valid `.profdata` file. See the chapter on
+[profile-guided optimization] for more information.
+
+## relocation-model
+
+This option controls generation of
+[position-independent code (PIC)](https://en.wikipedia.org/wiki/Position-independent_code).
+
+Supported values for this option are:
+
+#### Primary relocation models
+
+- `static` - non-relocatable code, machine instructions may use absolute addressing modes.
+
+- `pic` - fully relocatable position independent code,
+machine instructions need to use relative addressing modes. \
+Equivalent to the "uppercase" `-fPIC` or `-fPIE` options in other compilers,
+depending on the produced crate types. \
+This is the default model for majority of supported targets.
+
+- `pie` - position independent executable, relocatable code but without support for symbol
+interpositioning (replacing symbols by name using `LD_PRELOAD` and similar). Equivalent to the "uppercase" `-fPIE` option in other compilers. `pie`
+code cannot be linked into shared libraries (you'll get a linking error on attempt to do this).
+
+#### Special relocation models
+
+- `dynamic-no-pic` - relocatable external references, non-relocatable code. \
+Only makes sense on Darwin and is rarely used. \
+If StackOverflow tells you to use this as an opt-out of PIC or PIE, don't believe it,
+use `-C relocation-model=static` instead.
+- `ropi`, `rwpi` and `ropi-rwpi` - relocatable code and read-only data, relocatable read-write data,
+and combination of both, respectively. \
+Only makes sense for certain embedded ARM targets.
+- `default` - relocation model default to the current target. \
+Only makes sense as an override for some other explicitly specified relocation model
+previously set on the command line.
+
+Supported values can also be discovered by running `rustc --print relocation-models`.
+
+#### Linking effects
+
+In addition to codegen effects, `relocation-model` has effects during linking.
+
+If the relocation model is `pic` and the current target supports position-independent executables
+(PIE), the linker will be instructed (`-pie`) to produce one. \
+If the target doesn't support both position-independent and statically linked executables,
+then `-C target-feature=+crt-static` "wins" over `-C relocation-model=pic`,
+and the linker is instructed (`-static`) to produce a statically linked
+but not position-independent executable.
+
+## remark
+
+This flag lets you print remarks for optimization passes.
+
+The list of passes should be separated by spaces.
+
+`all` will remark on every pass.
+
+## rpath
+
+This flag controls whether [`rpath`](https://en.wikipedia.org/wiki/Rpath) is
+enabled. It takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: enable rpath.
+* `n`, `no`, or `off`: disable rpath (the default).
+
+## save-temps
+
+This flag controls whether temporary files generated during compilation are
+deleted once compilation finishes. It takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: save temporary files.
+* `n`, `no`, or `off`: delete temporary files (the default).
+
+## soft-float
+
+This option controls whether `rustc` generates code that emulates floating
+point instructions in software. It takes one of the following values:
+
+* `y`, `yes`, `on`, or no value: use soft floats.
+* `n`, `no`, or `off`: use hardware floats (the default).
+
+## split-debuginfo
+
+This option controls the emission of "split debuginfo" for debug information
+that `rustc` generates. The default behavior of this option is
+platform-specific, and not all possible values for this option work on all
+platforms. Possible values are:
+
+* `off` - This is the default for platforms with ELF binaries and windows-gnu
+ (not Windows MSVC and not macOS). This typically means that DWARF debug
+ information can be found in the final artifact in sections of the executable.
+ This option is not supported on Windows MSVC. On macOS this options prevents
+ the final execution of `dsymutil` to generate debuginfo.
+
+* `packed` - This is the default for Windows MSVC and macOS. The term
+ "packed" here means that all the debug information is packed into a separate
+ file from the main executable. On Windows MSVC this is a `*.pdb` file, on
+ macOS this is a `*.dSYM` folder, and on other platforms this is a `*.dwp`
+ file.
+
+* `unpacked` - This means that debug information will be found in separate
+ files for each compilation unit (object file). This is not supported on
+ Windows MSVC. On macOS this means the original object files will contain
+ debug information. On other Unix platforms this means that `*.dwo` files will
+ contain debug information.
+
+Note that `packed` and `unpacked` are gated behind `-Z unstable-options` on
+non-macOS platforms at this time.
+
+## strip
+
+The option `-C strip=val` controls stripping of debuginfo and similar auxiliary
+data from binaries during linking.
+
+Supported values for this option are:
+
+- `none` - debuginfo and symbols (if they exist) are copied to the produced
+ binary or separate files depending on the target (e.g. `.pdb` files in case
+ of MSVC).
+- `debuginfo` - debuginfo sections and debuginfo symbols from the symbol table
+ section are stripped at link time and are not copied to the produced binary
+ or separate files.
+- `symbols` - same as `debuginfo`, but the rest of the symbol table section is
+ stripped as well if the linker supports it.
+
+## symbol-mangling-version
+
+This option controls the [name mangling] format for encoding Rust item names
+for the purpose of generating object code and linking.
+
+Supported values for this option are:
+
+* `v0` — The "v0" mangling scheme. The specific format is not specified at
+ this time.
+
+The default if not specified will use a compiler-chosen default which may
+change in the future.
+
+[name mangling]: https://en.wikipedia.org/wiki/Name_mangling
+
+## target-cpu
+
+This instructs `rustc` to generate code specifically for a particular processor.
+
+You can run `rustc --print target-cpus` to see the valid options to pass
+here. Each target has a default base CPU. Special values include:
+
+* `native` can be passed to use the processor of the host machine.
+* `generic` refers to an LLVM target with minimal features but modern tuning.
+
+## target-feature
+
+Individual targets will support different features; this flag lets you control
+enabling or disabling a feature. Each feature should be prefixed with a `+` to
+enable it or `-` to disable it.
+
+Features from multiple `-C target-feature` options are combined. \
+Multiple features can be specified in a single option by separating them
+with commas - `-C target-feature=+x,-y`. \
+If some feature is specified more than once with both `+` and `-`,
+then values passed later override values passed earlier. \
+For example, `-C target-feature=+x,-y,+z -Ctarget-feature=-x,+y`
+is equivalent to `-C target-feature=-x,+y,+z`.
+
+To see the valid options and an example of use, run `rustc --print
+target-features`.
+
+Using this flag is unsafe and might result in [undefined runtime
+behavior](../targets/known-issues.md).
+
+See also the [`target_feature`
+attribute](../../reference/attributes/codegen.md#the-target_feature-attribute)
+for controlling features per-function.
+
+This also supports the feature `+crt-static` and `-crt-static` to control
+[static C runtime linkage](../../reference/linkage.html#static-and-dynamic-c-runtimes).
+
+Each target and [`target-cpu`](#target-cpu) has a default set of enabled
+features.
+
+## tune-cpu
+
+This instructs `rustc` to schedule code specifically for a particular
+processor. This does not affect the compatibility (instruction sets or ABI),
+but should make your code slightly more efficient on the selected CPU.
+
+The valid options are the same as those for [`target-cpu`](#target-cpu).
+The default is `None`, which LLVM translates as the `target-cpu`.
+
+This is an unstable option. Use `-Z tune-cpu=machine` to specify a value.
+
+Due to limitations in LLVM (12.0.0-git9218f92), this option is currently
+effective only for x86 targets.
+
+[option-emit]: ../command-line-arguments.md#option-emit
+[option-o-optimize]: ../command-line-arguments.md#option-o-optimize
+[instrumentation-based code coverage]: ../instrument-coverage.md
+[profile-guided optimization]: ../profile-guided-optimization.md
+[option-g-debug]: ../command-line-arguments.md#option-g-debug
diff --git a/src/doc/rustc/src/command-line-arguments.md b/src/doc/rustc/src/command-line-arguments.md
new file mode 100644
index 000000000..f05ff3f1b
--- /dev/null
+++ b/src/doc/rustc/src/command-line-arguments.md
@@ -0,0 +1,449 @@
+# Command-line Arguments
+
+Here's a list of command-line arguments to `rustc` and what they do.
+
+<a id="option-help"></a>
+## `-h`/`--help`: get help
+
+This flag will print out help information for `rustc`.
+
+<a id="option-cfg"></a>
+## `--cfg`: configure the compilation environment
+
+This flag can turn on or off various `#[cfg]` settings for [conditional
+compilation](../reference/conditional-compilation.md).
+
+The value can either be a single identifier or two identifiers separated by `=`.
+
+For examples, `--cfg 'verbose'` or `--cfg 'feature="serde"'`. These correspond
+to `#[cfg(verbose)]` and `#[cfg(feature = "serde")]` respectively.
+
+<a id="option-l-search-path"></a>
+## `-L`: add a directory to the library search path
+
+The `-L` flag adds a path to search for external crates and libraries.
+
+The kind of search path can optionally be specified with the form `-L
+KIND=PATH` where `KIND` may be one of:
+
+- `dependency` — Only search for transitive dependencies in this directory.
+- `crate` — Only search for this crate's direct dependencies in this
+ directory.
+- `native` — Only search for native libraries in this directory.
+- `framework` — Only search for macOS frameworks in this directory.
+- `all` — Search for all library kinds in this directory. This is the default
+ if `KIND` is not specified.
+
+<a id="option-l-link-lib"></a>
+## `-l`: link the generated crate to a native library
+
+Syntax: `-l [KIND[:MODIFIERS]=]NAME[:RENAME]`.
+
+This flag allows you to specify linking to a specific native library when building
+a crate.
+
+The kind of library can optionally be specified with the form `-l KIND=lib`
+where `KIND` may be one of:
+
+- `dylib` — A native dynamic library.
+- `static` — A native static library (such as a `.a` archive).
+- `framework` — A macOS framework.
+
+If the kind is specified, then linking modifiers can be attached to it.
+Modifiers are specified as a comma-delimited string with each modifier prefixed with
+either a `+` or `-` to indicate that the modifier is enabled or disabled, respectively.
+Specifying multiple `modifiers` arguments in a single `link` attribute,
+or multiple identical modifiers in the same `modifiers` argument is not currently supported. \
+Example: `-l static:+whole-archive=mylib`.
+
+The kind of library and the modifiers can also be specified in a [`#[link]`
+attribute][link-attribute]. If the kind is not specified in the `link`
+attribute or on the command-line, it will link a dynamic library if available,
+otherwise it will use a static library. If the kind is specified on the
+command-line, it will override the kind specified in a `link` attribute.
+
+The name used in a `link` attribute may be overridden using the form `-l
+ATTR_NAME:LINK_NAME` where `ATTR_NAME` is the name in the `link` attribute,
+and `LINK_NAME` is the name of the actual library that will be linked.
+
+[link-attribute]: ../reference/items/external-blocks.html#the-link-attribute
+
+### Linking modifiers: `whole-archive`
+
+This modifier is only compatible with the `static` linking kind.
+Using any other kind will result in a compiler error.
+
+`+whole-archive` means that the static library is linked as a whole archive
+without throwing any object files away.
+
+This modifier translates to `--whole-archive` for `ld`-like linkers,
+to `/WHOLEARCHIVE` for `link.exe`, and to `-force_load` for `ld64`.
+The modifier does nothing for linkers that don't support it.
+
+The default for this modifier is `-whole-archive`. \
+NOTE: The default may currently be different in some cases for backward compatibility,
+but it is not guaranteed. If you need whole archive semantics use `+whole-archive` explicitly.
+
+### Linking modifiers: `bundle`
+
+This modifier is only compatible with the `static` linking kind.
+Using any other kind will result in a compiler error.
+
+When building a rlib or staticlib `+bundle` means that the native static library
+will be packed into the rlib or staticlib archive, and then retrieved from there
+during linking of the final binary.
+
+When building a rlib `-bundle` means that the native static library is registered as a dependency
+of that rlib "by name", and object files from it are included only during linking of the final
+binary, the file search by that name is also performed during final linking. \
+When building a staticlib `-bundle` means that the native static library is simply not included
+into the archive and some higher level build system will need to add it later during linking of
+the final binary.
+
+This modifier has no effect when building other targets like executables or dynamic libraries.
+
+The default for this modifier is `+bundle`.
+
+<a id="option-crate-type"></a>
+## `--crate-type`: a list of types of crates for the compiler to emit
+
+This instructs `rustc` on which crate type to build. This flag accepts a
+comma-separated list of values, and may be specified multiple times. The valid
+crate types are:
+
+- `lib` — Generates a library kind preferred by the compiler, currently
+ defaults to `rlib`.
+- `rlib` — A Rust static library.
+- `staticlib` — A native static library.
+- `dylib` — A Rust dynamic library.
+- `cdylib` — A native dynamic library.
+- `bin` — A runnable executable program.
+- `proc-macro` — Generates a format suitable for a procedural macro library
+ that may be loaded by the compiler.
+
+The crate type may be specified with the [`crate_type` attribute][crate_type].
+The `--crate-type` command-line value will override the `crate_type`
+attribute.
+
+More details may be found in the [linkage chapter] of the reference.
+
+[linkage chapter]: ../reference/linkage.html
+[crate_type]: ../reference/linkage.html
+
+<a id="option-crate-name"></a>
+## `--crate-name`: specify the name of the crate being built
+
+This informs `rustc` of the name of your crate.
+
+<a id="option-edition"></a>
+## `--edition`: specify the edition to use
+
+This flag takes a value of `2015`, `2018` or `2021`. The default is `2015`. More
+information about editions may be found in the [edition guide].
+
+[edition guide]: ../edition-guide/introduction.html
+
+<a id="option-emit"></a>
+## `--emit`: specifies the types of output files to generate
+
+This flag controls the types of output files generated by the compiler. It
+accepts a comma-separated list of values, and may be specified multiple times.
+The valid emit kinds are:
+
+- `asm` — Generates a file with the crate's assembly code. The default output
+ filename is `CRATE_NAME.s`.
+- `dep-info` — Generates a file with Makefile syntax that indicates all the
+ source files that were loaded to generate the crate. The default output
+ filename is `CRATE_NAME.d`.
+- `link` — Generates the crates specified by `--crate-type`. The default
+ output filenames depend on the crate type and platform. This is the default
+ if `--emit` is not specified.
+- `llvm-bc` — Generates a binary file containing the [LLVM bitcode]. The
+ default output filename is `CRATE_NAME.bc`.
+- `llvm-ir` — Generates a file containing [LLVM IR]. The default output
+ filename is `CRATE_NAME.ll`.
+- `metadata` — Generates a file containing metadata about the crate. The
+ default output filename is `libCRATE_NAME.rmeta`.
+- `mir` — Generates a file containing rustc's mid-level intermediate
+ representation. The default output filename is `CRATE_NAME.mir`.
+- `obj` — Generates a native object file. The default output filename is
+ `CRATE_NAME.o`.
+
+The output filename can be set with the [`-o` flag](#option-o-output). A
+suffix may be added to the filename with the [`-C extra-filename`
+flag](codegen-options/index.md#extra-filename). The files are written to the
+current directory unless the [`--out-dir` flag](#option-out-dir) is used. Each
+emission type may also specify the output filename with the form `KIND=PATH`,
+which takes precedence over the `-o` flag.
+
+[LLVM bitcode]: https://llvm.org/docs/BitCodeFormat.html
+[LLVM IR]: https://llvm.org/docs/LangRef.html
+
+<a id="option-print"></a>
+## `--print`: print compiler information
+
+This flag prints out various information about the compiler. This flag may be
+specified multiple times, and the information is printed in the order the
+flags are specified. Specifying a `--print` flag will usually disable the
+[`--emit`](#option-emit) step and will only print the requested information.
+The valid types of print values are:
+
+- `crate-name` — The name of the crate.
+- `file-names` — The names of the files created by the `link` emit kind.
+- `sysroot` — Path to the sysroot.
+- `target-libdir` - Path to the target libdir.
+- `cfg` — List of cfg values. See [conditional compilation] for more
+ information about cfg values.
+- `target-list` — List of known targets. The target may be selected with the
+ `--target` flag.
+- `target-cpus` — List of available CPU values for the current target. The
+ target CPU may be selected with the [`-C target-cpu=val`
+ flag](codegen-options/index.md#target-cpu).
+- `target-features` — List of available target features for the current
+ target. Target features may be enabled with the [`-C target-feature=val`
+ flag](codegen-options/index.md#target-feature). This flag is unsafe. See
+ [known issues](targets/known-issues.md) for more details.
+- `relocation-models` — List of relocation models. Relocation models may be
+ selected with the [`-C relocation-model=val`
+ flag](codegen-options/index.md#relocation-model).
+- `code-models` — List of code models. Code models may be selected with the
+ [`-C code-model=val` flag](codegen-options/index.md#code-model).
+- `tls-models` — List of Thread Local Storage models supported. The model may
+ be selected with the `-Z tls-model=val` flag.
+- `native-static-libs` — This may be used when creating a `staticlib` crate
+ type. If this is the only flag, it will perform a full compilation and
+ include a diagnostic note that indicates the linker flags to use when
+ linking the resulting static library. The note starts with the text
+ `native-static-libs:` to make it easier to fetch the output.
+- `link-args` — This flag does not disable the `--emit` step. When linking,
+ this flag causes `rustc` to print the full linker invocation in a
+ human-readable form. This can be useful when debugging linker options. The
+ exact format of this debugging output is not a stable guarantee, other than
+ that it will include the linker executable and the text of each command-line
+ argument passed to the linker.
+
+[conditional compilation]: ../reference/conditional-compilation.html
+
+<a id="option-g-debug"></a>
+## `-g`: include debug information
+
+A synonym for [`-C debuginfo=2`](codegen-options/index.md#debuginfo).
+
+<a id="option-o-optimize"></a>
+## `-O`: optimize your code
+
+A synonym for [`-C opt-level=2`](codegen-options/index.md#opt-level).
+
+<a id="option-o-output"></a>
+## `-o`: filename of the output
+
+This flag controls the output filename.
+
+<a id="option-out-dir"></a>
+## `--out-dir`: directory to write the output in
+
+The outputted crate will be written to this directory. This flag is ignored if
+the [`-o` flag](#option-o-output) is used.
+
+<a id="option-explain"></a>
+## `--explain`: provide a detailed explanation of an error message
+
+Each error of `rustc`'s comes with an error code; this will print
+out a longer explanation of a given error.
+
+<a id="option-test"></a>
+## `--test`: build a test harness
+
+When compiling this crate, `rustc` will ignore your `main` function
+and instead produce a test harness. See the [Tests chapter](tests/index.md)
+for more information about tests.
+
+<a id="option-target"></a>
+## `--target`: select a target triple to build
+
+This controls which [target](targets/index.md) to produce.
+
+<a id="option-w-warn"></a>
+## `-W`: set lint warnings
+
+This flag will set which lints should be set to the [warn level](lints/levels.md#warn).
+
+_Note:_ The order of these lint level arguments is taken into account, see [lint level via compiler flag](lints/levels.md#via-compiler-flag) for more information.
+
+<a id="option-a-allow"></a>
+## `-A`: set lint allowed
+
+This flag will set which lints should be set to the [allow level](lints/levels.md#allow).
+
+_Note:_ The order of these lint level arguments is taken into account, see [lint level via compiler flag](lints/levels.md#via-compiler-flag) for more information.
+
+<a id="option-d-deny"></a>
+## `-D`: set lint denied
+
+This flag will set which lints should be set to the [deny level](lints/levels.md#deny).
+
+_Note:_ The order of these lint level arguments is taken into account, see [lint level via compiler flag](lints/levels.md#via-compiler-flag) for more information.
+
+<a id="option-f-forbid"></a>
+## `-F`: set lint forbidden
+
+This flag will set which lints should be set to the [forbid level](lints/levels.md#forbid).
+
+_Note:_ The order of these lint level arguments is taken into account, see [lint level via compiler flag](lints/levels.md#via-compiler-flag) for more information.
+
+<a id="option-z-unstable"></a>
+## `-Z`: set unstable options
+
+This flag will allow you to set unstable options of rustc. In order to set multiple options,
+the -Z flag can be used multiple times. For example: `rustc -Z verbose -Z time`.
+Specifying options with -Z is only available on nightly. To view all available options
+run: `rustc -Z help`.
+
+<a id="option-cap-lints"></a>
+## `--cap-lints`: set the most restrictive lint level
+
+This flag lets you 'cap' lints, for more, [see here](lints/levels.md#capping-lints).
+
+<a id="option-codegen"></a>
+## `-C`/`--codegen`: code generation options
+
+This flag will allow you to set [codegen options](codegen-options/index.md).
+
+<a id="option-version"></a>
+## `-V`/`--version`: print a version
+
+This flag will print out `rustc`'s version.
+
+<a id="option-verbose"></a>
+## `-v`/`--verbose`: use verbose output
+
+This flag, when combined with other flags, makes them produce extra output.
+
+<a id="option-extern"></a>
+## `--extern`: specify where an external library is located
+
+This flag allows you to pass the name and location for an external crate of a
+direct dependency. Indirect dependencies (dependencies of dependencies) are
+located using the [`-L` flag](#option-l-search-path). The given crate name is
+added to the [extern prelude], similar to specifying `extern crate` within the
+root module. The given crate name does not need to match the name
+the library was built with.
+
+Specifying `--extern` has one behavior difference from `extern crate`:
+`--extern` merely makes the crate a _candidate_ for being linked; it does not
+actually link it unless it's actively used. In rare occasions you may wish
+to ensure a crate is linked even if you don't actively use it from your
+code: for example, if it changes the global allocator or if it contains
+`#[no_mangle]` symbols for use by other programming languages. In such
+cases you'll need to use `extern crate`.
+
+This flag may be specified multiple times. This flag takes an argument with
+either of the following formats:
+
+* `CRATENAME=PATH` — Indicates the given crate is found at the given path.
+* `CRATENAME` — Indicates the given crate may be found in the search path,
+ such as within the sysroot or via the `-L` flag.
+
+The same crate name may be specified multiple times for different crate types.
+If both an `rlib` and `dylib` are found, an internal algorithm is used to
+decide which to use for linking. The [`-C prefer-dynamic`
+flag][prefer-dynamic] may be used to influence which is used.
+
+If the same crate name is specified with and without a path, the one with the
+path is used and the pathless flag has no effect.
+
+[extern prelude]: ../reference/names/preludes.html#extern-prelude
+[prefer-dynamic]: codegen-options/index.md#prefer-dynamic
+
+<a id="option-sysroot"></a>
+## `--sysroot`: Override the system root
+
+The "sysroot" is where `rustc` looks for the crates that come with the Rust
+distribution; this flag allows that to be overridden.
+
+<a id="option-error-format"></a>
+## `--error-format`: control how errors are produced
+
+This flag lets you control the format of messages. Messages are printed to
+stderr. The valid options are:
+
+- `human` — Human-readable output. This is the default.
+- `json` — Structured JSON output. See [the JSON chapter] for more detail.
+- `short` — Short, one-line messages.
+
+<a id="option-color"></a>
+## `--color`: configure coloring of output
+
+This flag lets you control color settings of the output. The valid options
+are:
+
+- `auto` — Use colors if output goes to a tty. This is the default.
+- `always` — Always use colors.
+- `never` — Never colorize output.
+
+<a id="option-remap-path-prefix"></a>
+## `--remap-path-prefix`: remap source names in output
+
+Remap source path prefixes in all output, including compiler diagnostics,
+debug information, macro expansions, etc. It takes a value of the form
+`FROM=TO` where a path prefix equal to `FROM` is rewritten to the value `TO`.
+The `FROM` may itself contain an `=` symbol, but the `TO` value may not. This
+flag may be specified multiple times.
+
+This is useful for normalizing build products, for example by removing the
+current directory out of pathnames emitted into the object files. The
+replacement is purely textual, with no consideration of the current system's
+pathname syntax. For example `--remap-path-prefix foo=bar` will match
+`foo/lib.rs` but not `./foo/lib.rs`.
+
+<a id="option-json"></a>
+## `--json`: configure json messages printed by the compiler
+
+When the [`--error-format=json` option](#option-error-format) is passed to
+rustc then all of the compiler's diagnostic output will be emitted in the form
+of JSON blobs. The `--json` argument can be used in conjunction with
+`--error-format=json` to configure what the JSON blobs contain as well as
+which ones are emitted.
+
+With `--error-format=json` the compiler will always emit any compiler errors as
+a JSON blob, but the following options are also available to the `--json` flag
+to customize the output:
+
+- `diagnostic-short` - json blobs for diagnostic messages should use the "short"
+ rendering instead of the normal "human" default. This means that the output of
+ `--error-format=short` will be embedded into the JSON diagnostics instead of
+ the default `--error-format=human`.
+
+- `diagnostic-rendered-ansi` - by default JSON blobs in their `rendered` field
+ will contain a plain text rendering of the diagnostic. This option instead
+ indicates that the diagnostic should have embedded ANSI color codes intended
+ to be used to colorize the message in the manner rustc typically already does
+ for terminal outputs. Note that this is usefully combined with crates like
+ [`fwdansi`](https://crates.io/crates/fwdansi) to translate these ANSI codes
+ on Windows to console commands or
+ [`strip-ansi-escapes`](https://crates.io/crates/strip-ansi-escapes) if you'd
+ like to optionally remove the ansi colors afterwards.
+
+- `artifacts` - this instructs rustc to emit a JSON blob for each artifact that
+ is emitted. An artifact corresponds to a request from the [`--emit` CLI
+ argument](#option-emit), and as soon as the artifact is available on the
+ filesystem a notification will be emitted.
+
+- `future-incompat` - includes a JSON message that contains a report if the
+ crate contains any code that may fail to compile in the future.
+
+Note that it is invalid to combine the `--json` argument with the
+[`--color`](#option-color) argument, and it is required to combine `--json`
+with `--error-format=json`.
+
+See [the JSON chapter] for more detail.
+
+<a id="at-path"></a>
+## `@path`: load command-line flags from a path
+
+If you specify `@path` on the command-line, then it will open `path` and read
+command line options from it. These options are one per line; a blank line indicates
+an empty option. The file can use Unix or Windows style line endings, and must be
+encoded as UTF-8.
+
+[the JSON chapter]: json.md
diff --git a/src/doc/rustc/src/contributing.md b/src/doc/rustc/src/contributing.md
new file mode 100644
index 000000000..3b552e7cc
--- /dev/null
+++ b/src/doc/rustc/src/contributing.md
@@ -0,0 +1,12 @@
+# Contributing to rustc
+
+We'd love to have your help improving `rustc`! To that end, we've written [a
+whole book][rustc_dev_guide] on its
+internals, how it works, and how to get started working on it. To learn
+more, you'll want to check that out.
+
+If you would like to contribute to _this_ book, you can find its source in the
+rustc source at [src/doc/rustc][rustc_book].
+
+[rustc_dev_guide]: https://rustc-dev-guide.rust-lang.org/
+[rustc_book]: https://github.com/rust-lang/rust/tree/master/src/doc/rustc
diff --git a/src/doc/rustc/src/exploit-mitigations.md b/src/doc/rustc/src/exploit-mitigations.md
new file mode 100644
index 000000000..fa38dd54d
--- /dev/null
+++ b/src/doc/rustc/src/exploit-mitigations.md
@@ -0,0 +1,699 @@
+# Exploit Mitigations
+
+This chapter documents the exploit mitigations supported by the Rust
+compiler, and is by no means an extensive survey of the Rust programming
+language’s security features.
+
+This chapter is for software engineers working with the Rust programming
+language, and assumes prior knowledge of the Rust programming language and
+its toolchain.
+
+
+## Introduction
+
+The Rust programming language provides memory[1] and thread[2] safety
+guarantees via its ownership[3], references and borrowing[4], and slice
+types[5] features. However, Unsafe Rust[6] introduces unsafe blocks, unsafe
+functions and methods, unsafe traits, and new types that are not subject to
+the borrowing rules.
+
+Parts of the Rust standard library are implemented as safe abstractions over
+unsafe code (and historically have been vulnerable to memory corruption[7]).
+Furthermore, the Rust code and documentation encourage creating safe
+abstractions over unsafe code. This can cause a false sense of security if
+unsafe code is not properly reviewed and tested.
+
+Unsafe Rust introduces features that do not provide the same memory and
+thread safety guarantees. This causes programs or libraries to be
+susceptible to memory corruption (CWE-119)[8] and concurrency issues
+(CWE-557)[9]. Modern C and C++ compilers provide exploit mitigations to
+increase the difficulty to exploit vulnerabilities resulting from these
+issues. Therefore, the Rust compiler must also support these exploit
+mitigations in order to mitigate vulnerabilities resulting from the use of
+Unsafe Rust. This chapter documents these exploit mitigations and how they
+apply to Rust.
+
+This chapter does not discuss the effectiveness of these exploit mitigations
+as they vary greatly depending on several factors besides their design and
+implementation, but rather describe what they do, so their effectiveness can
+be understood within a given context.
+
+
+## Exploit mitigations
+
+This section documents the exploit mitigations applicable to the Rust
+compiler when building programs for the Linux operating system on the AMD64
+architecture and equivalent.<sup id="fnref:1" role="doc-noteref"><a
+href="#fn:1" class="footnote">1</a></sup>
+
+The Rust Programming Language currently has no specification. The Rust
+compiler (i.e., rustc) is the language reference implementation. All
+references to “the Rust compiler” in this chapter refer to the language
+reference implementation.
+
+Table I \
+Summary of exploit mitigations supported by the Rust compiler when building
+programs for the Linux operating system on the AMD64 architecture and
+equivalent.
+<table class="table">
+ <tr>
+ <td><strong>Exploit mitigation</strong>
+ </td>
+ <td><strong>Supported and enabled by default</strong>
+ </td>
+ <td><strong>Since</strong>
+ </td>
+ </tr>
+ <tr>
+ <td>Position-independent executable
+ </td>
+ <td>Yes
+ </td>
+ <td>0.12.0 (2014-10-09)
+ </td>
+ </tr>
+ <tr>
+ <td>Integer overflow checks
+ </td>
+ <td>Yes (enabled when debug assertions are enabled, and disabled when debug assertions are disabled)
+ </td>
+ <td>1.1.0 (2015-06-25)
+ </td>
+ </tr>
+ <tr>
+ <td>Non-executable memory regions
+ </td>
+ <td>Yes
+ </td>
+ <td>1.8.0 (2016-04-14)
+ </td>
+ </tr>
+ <tr>
+ <td>Stack clashing protection
+ </td>
+ <td>Yes
+ </td>
+ <td>1.20.0 (2017-08-31)
+ </td>
+ </tr>
+ <tr>
+ <td>Read-only relocations and immediate binding
+ </td>
+ <td>Yes
+ </td>
+ <td>1.21.0 (2017-10-12)
+ </td>
+ </tr>
+ <tr>
+ <td>Heap corruption protection
+ </td>
+ <td>Yes
+ </td>
+ <td>1.32.0 (2019-01-17) (via operating system default or specified allocator)
+ </td>
+ </tr>
+ <tr>
+ <td>Stack smashing protection
+ </td>
+ <td>No
+ </td>
+ <td>
+ </td>
+ </tr>
+ <tr>
+ <td>Forward-edge control flow protection
+ </td>
+ <td>Yes
+ </td>
+ <td>Nightly
+ </td>
+ </tr>
+ <tr>
+ <td>Backward-edge control flow protection (e.g., shadow and safe stack)
+ </td>
+ <td>No
+ </td>
+ <td>
+ </td>
+ </tr>
+</table>
+
+<small id="fn:1">1\. See
+<https://github.com/rust-lang/rust/tree/master/compiler/rustc_target/src/spec>
+for a list of targets and their default options. <a href="#fnref:1"
+class="reversefootnote" role="doc-backlink">↩</a></small>
+
+
+### Position-independent executable
+
+Position-independent executable increases the difficulty of the use of code
+reuse exploitation techniques, such as return-oriented programming (ROP) and
+variants, by generating position-independent code for the executable, and
+instructing the dynamic linker to load it similarly to a shared object at a
+random load address, thus also benefiting from address-space layout
+randomization (ASLR). This is also referred to as “full ASLR”.
+
+The Rust compiler supports position-independent executable, and enables it
+by default since version 0.12.0 (2014-10-09)[10]–[13].
+
+```text
+$ readelf -h target/release/hello-rust | grep Type:
+ Type: DYN (Shared object file)
+```
+Fig. 1. Checking if an executable is a position-independent executable.
+
+An executable with an object type of `ET_DYN` (i.e., shared object) and not
+`ET_EXEC` (i.e., executable) is a position-independent executable (see Fig.
+1).
+
+
+### Integer overflow checks
+
+Integer overflow checks protects programs from undefined and unintended
+behavior (which may cause vulnerabilities) by checking for results of signed
+and unsigned integer computations that cannot be represented in their type,
+resulting in an overflow or wraparound.
+
+The Rust compiler supports integer overflow checks, and enables it when
+debug assertions are enabled since version 1.1.0 (2015-06-25)[14]–[20].
+
+```compile_fail
+fn main() {
+ let u: u8 = 255;
+ println!("u: {}", u + 1);
+}
+```
+Fig. 2. hello-rust-integer program.
+
+```text
+$ cargo run
+ Compiling hello-rust-integer v0.1.0 (/home/rcvalle/hello-rust-integer)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.23s
+ Running `target/debug/hello-rust-integer`
+thread 'main' panicked at 'attempt to add with overflow', src/main.rs:3:23
+note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace.
+```
+Fig. 3. Build and execution of hello-rust-integer with debug assertions
+enabled.
+
+```text
+$ cargo run --release
+ Compiling hello-rust-integer v0.1.0 (/home/rcvalle/hello-rust-integer)
+ Finished release [optimized] target(s) in 0.23s
+ Running `target/release/hello-rust-integer`
+u: 0
+```
+Fig. 4. Build and execution of hello-rust-integer with debug assertions
+disabled.
+
+Integer overflow checks are enabled when debug assertions are enabled (see
+Fig. 3), and disabled when debug assertions are disabled (see Fig. 4). To
+enable integer overflow checks independently, use the option to control
+integer overflow checks, scoped attributes, or explicit checking methods
+such as `checked_add`<sup id="fnref:2" role="doc-noteref"><a href="#fn:2"
+class="footnote">2</a></sup>.
+
+It is recommended that explicit wrapping methods such as `wrapping_add` be
+used when wrapping semantics are intended, and that explicit checking and
+wrapping methods always be used when using Unsafe Rust.
+
+<small id="fn:2">2\. See <https://doc.rust-lang.org/std/primitive.u32.html>
+for more information on the checked, overflowing, saturating, and wrapping
+methods (using u32 as an example). <a href="#fnref:2"
+class="reversefootnote" role="doc-backlink">↩</a></small>
+
+
+### Non-executable memory regions
+
+Non-executable memory regions increase the difficulty of exploitation by
+limiting the memory regions that can be used to execute arbitrary code. Most
+modern processors provide support for the operating system to mark memory
+regions as non executable, but it was previously emulated by software, such
+as in grsecurity/PaX's
+[PAGEEXEC](https://pax.grsecurity.net/docs/pageexec.txt) and
+[SEGMEXEC](https://pax.grsecurity.net/docs/segmexec.txt), on processors that
+did not provide support for it. This is also known as “No Execute (NX) Bit”,
+“Execute Disable (XD) Bit”, “Execute Never (XN) Bit”, and others.
+
+The Rust compiler supports non-executable memory regions, and enables it by
+default since its initial release, version 0.1 (2012-01-20)[21], [22], but
+has regressed since then[23]–[25], and enforced by default since version
+1.8.0 (2016-04-14)[25].
+
+```text
+$ readelf -l target/release/hello-rust | grep -A 1 GNU_STACK
+ GNU_STACK 0x0000000000000000 0x0000000000000000 0x0000000000000000
+ 0x0000000000000000 0x0000000000000000 RW 0x10
+```
+Fig. 5. Checking if non-executable memory regions are enabled for a given
+binary.
+
+The presence of an element of type `PT_GNU_STACK` in the program header
+table with the `PF_X` (i.e., executable) flag unset indicates non-executable
+memory regions<sup id="fnref:3" role="doc-noteref"><a href="#fn:3"
+class="footnote">3</a></sup> are enabled for a given binary (see Fig. 5).
+Conversely, the presence of an element of type `PT_GNU_STACK` in the program
+header table with the `PF_X` flag set or the absence of an element of type
+`PT_GNU_STACK` in the program header table indicates non-executable memory
+regions are not enabled for a given binary.
+
+<small id="fn:3">3\. See the Appendix section for more information on why it
+affects other memory regions besides the stack. <a href="#fnref:3"
+class="reversefootnote" role="doc-backlink">↩</a></small>
+
+
+### Stack clashing protection
+
+Stack clashing protection protects the stack from overlapping with another
+memory region—allowing arbitrary data in both to be overwritten using each
+other—by reading from the stack pages as the stack grows to cause a page
+fault when attempting to read from the guard page/region. This is also
+referred to as “stack probes” or “stack probing”.
+
+The Rust compiler supports stack clashing protection via stack probing, and
+enables it by default since version 1.20.0 (2017-08-31)[26]–[29].
+
+![Screenshot of IDA Pro listing cross references to __rust_probestack in hello-rust.](images/image1.png "Cross references to __rust_probestack in hello-rust.")
+Fig. 6. IDA Pro listing cross references to `__rust_probestack` in
+hello-rust.
+
+```rust
+fn hello() {
+ println!("Hello, world!");
+}
+
+fn main() {
+ let _: [u64; 1024] = [0; 1024];
+ hello();
+}
+```
+Fig 7. Modified hello-rust.
+
+![Screenshot of IDA Pro listing cross references to __rust_probestack in modified hello-rust.](images/image2.png "Cross references to __rust_probestack in modified hello-rust.")
+Fig. 8. IDA Pro listing cross references to `__rust_probestack` in modified
+hello-rust.
+
+To check if stack clashing protection is enabled for a given binary, search
+for cross references to `__rust_probestack`. The `__rust_probestack` is
+called in the prologue of functions whose stack size is larger than a page
+size (see Fig. 6), and can be forced for illustration purposes by modifying
+the hello-rust example as seen in Fig. 7 and Fig. 8.
+
+
+### Read-only relocations and immediate binding
+
+**Read-only relocations** protect segments containing relocations and
+relocation information (i.e., `.init_array`, `.fini_array`, `.dynamic`, and
+`.got`) from being overwritten by marking these segments read only. This is
+also referred to as “partial RELRO”.
+
+The Rust compiler supports read-only relocations, and enables it by default
+since version 1.21.0 (2017-10-12)[30], [31].
+
+```text
+$ readelf -l target/release/hello-rust | grep GNU_RELRO
+ GNU_RELRO 0x000000000002ee00 0x000000000002fe00 0x000000000002fe00
+```
+Fig. 9. Checking if read-only relocations is enabled for a given binary.
+
+The presence of an element of type `PT_GNU_RELRO` in the program header
+table indicates read-only relocations are enabled for a given binary (see
+Fig. 9). Conversely, the absence of an element of type `PT_GNU_RELRO` in the
+program header table indicates read-only relocations are not enabled for a
+given binary.
+
+**Immediate binding** protects additional segments containing relocations
+(i.e., `.got.plt`) from being overwritten by instructing the dynamic linker
+to perform all relocations before transferring control to the program during
+startup, so all segments containing relocations can be marked read only
+(when combined with read-only relocations). This is also referred to as
+“full RELRO”.
+
+The Rust compiler supports immediate binding, and enables it by default
+since version 1.21.0 (2017-10-12)[30], [31].
+
+```text
+$ readelf -d target/release/hello-rust | grep BIND_NOW
+ 0x000000000000001e (FLAGS) BIND_NOW
+```
+Fig. 10. Checking if immediate binding is enabled for a given binary.
+
+The presence of an element with the `DT_BIND_NOW` tag and the `DF_BIND_NOW`
+flag<sup id="fnref:4" role="doc-noteref"><a href="#fn:4"
+class="footnote">4</a></sup> in the dynamic section indicates immediate
+binding is enabled for a given binary (see Fig. 10). Conversely, the absence
+of an element with the `DT_BIND_NOW` tag and the `DF_BIND_NOW` flag in the
+dynamic section indicates immediate binding is not enabled for a given
+binary.
+
+The presence of both an element of type `PT_GNU_RELRO` in the program header
+table and of an element with the `DT_BIND_NOW` tag and the `DF_BIND_NOW`
+flag in the dynamic section indicates full RELRO is enabled for a given
+binary (see Fig. 9 and Fig. 10).
+
+<small id="fn:4">4\. And the `DF_1_NOW` flag for some link editors. <a
+href="#fnref:4" class="reversefootnote" role="doc-backlink">↩</a></small>
+
+
+### Heap corruption protection
+
+Heap corruption protection protects memory allocated dynamically by
+performing several checks, such as checks for corrupted links between list
+elements, invalid pointers, invalid sizes, double/multiple “frees” of the
+same memory allocated, and many corner cases of these. These checks are
+implementation specific, and vary per allocator.
+
+[ARM Memory Tagging Extension
+(MTE)](https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/enhancing-memory-safety),
+when available, will provide hardware assistance for a probabilistic
+mitigation to detect memory safety violations by tagging memory allocations,
+and automatically checking that the correct tag is used on every memory
+access.
+
+Rust’s default allocator has historically been
+[jemalloc](http://jemalloc.net/), and it has long been the cause of issues
+and the subject of much discussion[32]–[38]. Consequently, it has been
+removed as the default allocator in favor of the operating system’s standard
+C library default allocator<sup id="fnref:5" role="doc-noteref"><a
+href="#fn:5" class="footnote">5</a></sup> since version 1.32.0
+(2019-01-17)[39].
+
+```rust,no_run
+fn main() {
+ let mut x = Box::new([0; 1024]);
+
+ for i in 0..1026 {
+ unsafe {
+ let elem = x.get_unchecked_mut(i);
+ *elem = 0x4141414141414141u64;
+ }
+ }
+}
+```
+Fig. 11. hello-rust-heap program.
+
+```text
+$ cargo run
+ Compiling hello-rust-heap v0.1.0 (/home/rcvalle/hello-rust-heap)
+ Finished dev [unoptimized + debuginfo] target(s) in 0.25s
+ Running `target/debug/hello-rust-heap`
+free(): invalid next size (normal)
+Aborted
+```
+Fig. 12. Build and execution of hello-rust-heap with debug assertions
+enabled.
+
+```text
+$ cargo run --release
+ Compiling hello-rust-heap v0.1.0 (/home/rcvalle/hello-rust-heap)
+ Finished release [optimized] target(s) in 0.25s
+ Running `target/release/hello-rust-heap`
+free(): invalid next size (normal)
+Aborted
+```
+Fig. 13. Build and execution of hello-rust-heap with debug assertions
+disabled.
+
+Heap corruption checks are being performed when using the default allocator
+(i.e., the GNU Allocator) as seen in Fig. 12 and Fig. 13.
+
+<small id="fn:5">5\. Linux's standard C library default allocator is the GNU
+Allocator, which is derived from ptmalloc (pthreads malloc) by Wolfram
+Gloger, which in turn is derived from dlmalloc (Doug Lea malloc) by Doug
+Lea. <a href="#fnref:5" class="reversefootnote"
+role="doc-backlink">↩</a></small>
+
+
+### Stack smashing protection
+
+Stack smashing protection protects programs from stack-based buffer
+overflows by inserting a random guard value between local variables and the
+saved return instruction pointer, and checking if this value has changed
+when returning from a function. This is also known as “Stack Protector” or
+“Stack Smashing Protector (SSP)”.
+
+The Rust compiler does not support stack smashing protection. However, more
+comprehensive alternatives to stack smashing protection exist, such as
+shadow and safe stack (see backward-edge control flow protection).
+
+![Screenshot of IDA Pro listing cross references to __stack_chk_fail in hello-rust.](images/image3.png "Cross references to __stack_chk_fail in hello-rust.")
+Fig. 14. IDA Pro listing cross references to `__stack_chk_fail` in
+hello-rust.
+
+To check if stack smashing protection is enabled for a given binary, search
+for cross references to `__stack_chk_fail`. The only cross references to
+`__stack_chk_fail` in hello-rust are from the statically-linked libbacktrace
+library (see Fig. 14).
+
+
+### Forward-edge control flow protection
+
+Forward-edge control flow protection protects programs from having its
+control flow changed/hijacked by performing checks to ensure that
+destinations of indirect branches are one of their valid destinations in the
+control flow graph. The comprehensiveness of these checks vary per
+implementation. This is also known as “forward-edge control flow integrity
+(CFI)”.
+
+Newer processors provide hardware assistance for forward-edge control flow
+protection, such as ARM Branch Target Identification (BTI), ARM Pointer
+Authentication, and Intel Indirect Branch Tracking (IBT) as part of Intel
+Control-flow Enforcement Technology (CET). However, ARM BTI and Intel IBT
+-based implementations are less comprehensive than software-based
+implementations such as [LLVM ControlFlowIntegrity
+(CFI)](https://clang.llvm.org/docs/ControlFlowIntegrity.html), and the
+commercially available [grsecurity/PaX Reuse Attack Protector
+(RAP)](https://grsecurity.net/rap_faq).
+
+The Rust compiler supports forward-edge control flow protection on nightly
+builds[40]-[41] <sup id="fnref:6" role="doc-noteref"><a href="#fn:6"
+class="footnote">6</a></sup>.
+
+```text
+$ readelf -s -W target/debug/rust-cfi | grep "\.cfi"
+ 12: 0000000000005170 46 FUNC LOCAL DEFAULT 14 _RNvCsjaOHoaNjor6_8rust_cfi7add_one.cfi
+ 15: 00000000000051a0 16 FUNC LOCAL DEFAULT 14 _RNvCsjaOHoaNjor6_8rust_cfi7add_two.cfi
+ 17: 0000000000005270 396 FUNC LOCAL DEFAULT 14 _RNvCsjaOHoaNjor6_8rust_cfi4main.cfi
+...
+```
+Fig. 15. Checking if LLVM CFI is enabled for a given binary[41].
+
+The presence of symbols suffixed with ".cfi" or the `__cfi_init` symbol (and
+references to `__cfi_check`) indicates that LLVM CFI (i.e., forward-edge control
+flow protection) is enabled for a given binary. Conversely, the absence of
+symbols suffixed with ".cfi" or the `__cfi_init` symbol (and references to
+`__cfi_check`) indicates that LLVM CFI is not enabled for a given binary (see
+Fig. 15).
+
+<small id="fn:6">6\. It also supports Control Flow Guard (CFG) on Windows (see
+<https://github.com/rust-lang/rust/issues/68793>). <a href="#fnref:6"
+class="reversefootnote" role="doc-backlink">↩</a></small>
+
+
+### Backward-edge control flow protection
+
+**Shadow stack** protects saved return instruction pointers from being
+overwritten by storing a copy of them on a separate (shadow) stack, and
+using these copies as authoritative values when returning from functions.
+This is also known as “ShadowCallStack” and “Return Flow Guard”, and is
+considered an implementation of backward-edge control flow protection (or
+“backward-edge CFI”).
+
+**Safe stack** protects not only the saved return instruction pointers, but
+also register spills and some local variables from being overwritten by
+storing unsafe variables, such as large arrays, on a separate (unsafe)
+stack, and using these unsafe variables on the separate stack instead. This
+is also known as “SafeStack”, and is also considered an implementation of
+backward-edge control flow protection.
+
+Both shadow and safe stack are intended to be a more comprehensive
+alternatives to stack smashing protection as they protect the saved return
+instruction pointers (and other data in the case of safe stack) from
+arbitrary writes and non-linear out-of-bounds writes.
+
+Newer processors provide hardware assistance for backward-edge control flow
+protection, such as ARM Pointer Authentication, and Intel Shadow Stack as
+part of Intel CET.
+
+The Rust compiler does not support shadow or safe stack. There is work
+currently ongoing to add support for the sanitizers[40], which may or may
+not include support for safe stack<sup id="fnref:7" role="doc-noteref"><a
+href="#fn:7" class="footnote">7</a></sup>.
+
+```text
+$ readelf -s target/release/hello-rust | grep __safestack_init
+```
+Fig. 16. Checking if LLVM SafeStack is enabled for a given binary.
+
+The presence of the `__safestack_init` symbol indicates that LLVM SafeStack
+is enabled for a given binary. Conversely, the absence of the
+`__safestack_init` symbol indicates that LLVM SafeStack is not enabled for a
+given binary (see Fig. 16).
+
+<small id="fn:7">7\. The shadow stack implementation for the AMD64
+architecture and equivalent in LLVM was removed due to performance and
+security issues. <a href="#fnref:7" class="reversefootnote"
+role="doc-backlink">↩</a></small>
+
+
+## Appendix
+
+As of the latest version of the [Linux Standard Base (LSB) Core
+Specification](https://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/progheader.html),
+the `PT_GNU_STACK` program header indicates whether the stack should be
+executable, and the absence of this header indicates that the stack should
+be executable. However, the Linux kernel currently sets the
+`READ_IMPLIES_EXEC` personality upon loading any executable with the
+`PT_GNU_STACK` program header and the `PF_X `flag set or with the absence of
+this header, resulting in not only the stack, but also all readable virtual
+memory mappings being executable.
+
+An attempt to fix this [was made in
+2012](https://lore.kernel.org/lkml/f298f914-2239-44e4-8aa1-a51282e7fac0@zmail15.collab.prod.int.phx2.redhat.com/),
+and another [was made in
+2020](https://lore.kernel.org/kernel-hardening/20200327064820.12602-1-keescook@chromium.org/).
+The former never landed, and the latter partially fixed it, but introduced
+other issues—the absence of the `PT_GNU_STACK` program header still causes
+not only the stack, but also all readable virtual memory mappings to be
+executable in some architectures, such as IA-32 and equivalent (or causes
+the stack to be non-executable in some architectures, such as AMD64 and
+equivalent, contradicting the LSB).
+
+The `READ_IMPLIES_EXEC` personality needs to be completely separated from
+the `PT_GNU_STACK` program header by having a separate option for it (or
+setarch -X could just be used whenever `READ_IMPLIES_EXEC` is needed), and
+the absence of the `PT_GNU_STACK` program header needs to have more secure
+defaults (unrelated to `READ_IMPLIES_EXEC`).
+
+
+## References
+
+1. D. Hosfelt. “Fearless security: memory safety.” Mozilla Hacks.
+ <https://hacks.mozilla.org/2019/01/fearless-security-memory-safety/>.
+
+2. D. Hosfelt. “Fearless security: thread safety.” Mozilla Hacks.
+ <https://hacks.mozilla.org/2019/02/fearless-security-thread-safety/>.
+
+3. S. Klabnik and C. Nichols. “What Is Ownership?.” The Rust Programming
+ Language. <https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html>.
+
+4. S. Klabnik and C. Nichols. “References and Borrowing.” The Rust
+ Programming Language.
+ <https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html>.
+
+5. S. Klabnik and C. Nichols. “The Slice Type.” The Rust Programming
+ Language. <https://doc.rust-lang.org/book/ch04-03-slices.html>.
+
+6. S. Klabnik and C. Nichols. “Unsafe Rust.” The Rust Programming Language.
+ <https://doc.rust-lang.org/book/ch19-01-unsafe-rust.html>.
+
+7. S. Davidoff. “How Rust’s standard library was vulnerable for years and
+ nobody noticed.” Medium.
+ <https://medium.com/@shnatsel/how-rusts-standard-library-was-vulnerable-for-years-and-nobody-noticed-aebf0503c3d6>.
+
+8. “Improper restriction of operations within the bounds of a memory buffer
+ (CWE-119).” MITRE CWE List.
+ <https://cwe.mitre.org/data/definitions/119.html>.
+
+9. “Concurrency issues (CWE-557).” MITRE CWE List.
+ <https://cwe.mitre.org/data/definitions/557.html>.
+
+10. K. McAllister. “Memory exploit mitigations #15179.” GitHub.
+ <https://github.com/rust-lang/rust/issues/15179>.
+
+11. K. McAllister. “RFC: Memory exploit mitigation #145.” GitHub.
+ <https://github.com/rust-lang/rfcs/pull/145>.
+
+12. K. McAllister. “RFC: Memory exploit mitigation.” GitHub.
+ <https://github.com/kmcallister/rfcs/blob/hardening/active/0000-memory-exploit-mitigation.md>.
+
+13. D. Micay. “Enable PIE by default on Linux for full ASLR #16340.” GitHub.
+ <https://github.com/rust-lang/rust/pull/16340>.
+
+14. N. Matsakis. “Integer overflow #560.” GitHub.
+ <https://github.com/rust-lang/rfcs/pull/560>.
+
+15. G. Lehel and N. Matsakis. “Integer overflow.” GitHub.
+ <https://rust-lang.github.io/rfcs/0560-integer-overflow.html>.
+
+16. A. Turon. “Tracking issue for integer overflow (RFC 560) #22020.”
+ GitHub. <https://github.com/rust-lang/rust/issues/22020>.
+
+17. H. Wilson. “Myths and legends about integer overflow in Rust.” Huon on
+ the Internet.
+ <http://huonw.github.io/blog/2016/04/myths-and-legends-about-integer-overflow-in-rust/>.
+
+18. B. Anderson. “Stabilize -C overflow-checks #1535.” GitHub.
+ <https://github.com/rust-lang/rfcs/pull/1535>.
+
+19. B. Anderson. “Stable overflow checks.” GitHub.
+ <https://github.com/brson/rfcs/blob/overflow/text/0000-stable-overflow-checks.md>.
+
+20. N. Froyd. “Add -C overflow-checks option #40037.” GitHub.
+ <https://github.com/rust-lang/rust/pull/40037>.
+
+21. R. Á. de Espíndola. “rustc requires executable stack #798.” GitHub.
+ <https://github.com/rust-lang/rust/issues/798>.
+
+22. A. Seipp. “Make sure librustrt.so is linked with a non-executable stack.
+ #1066.” GitHub. <https://github.com/rust-lang/rust/pull/1066>.
+
+23. D. Micay. “Rust binaries should not have an executable stack #5643.”
+ GitHub. <https://github.com/rust-lang/rust/issues/5643>.
+
+24. D. Micay. “Mark the assembly object stacks as non-executable #5647.”
+ GitHub. <https://github.com/rust-lang/rust/pull/5647>.
+
+25. A. Clark. “Explicitly disable stack execution on linux and bsd #30859.”
+ GitHub. <https://github.com/rust-lang/rust/pull/30859>.
+
+26. “Replace stack overflow checking with stack probes #16012.” GitHub.
+ <https://github.com/rust-lang/rust/issues/16012>.
+
+27. B. Striegel. “Extend stack probe support to non-tier-1 platforms, and
+ clarify policy for mitigating LLVM-dependent unsafety #43241.” GitHub.
+ <https://github.com/rust-lang/rust/issues/43241>.
+
+28. A. Crichton. “rustc: Implement stack probes for x86 #42816.” GitHub.
+ <https://github.com/rust-lang/rust/pull/42816>.
+
+29. A. Crichton. “Add \_\_rust\_probestack intrinsic #175.” GitHub.
+ <https://github.com/rust-lang/compiler-builtins/pull/175>.
+
+30. B. Anderson. “Consider applying -Wl,-z,relro or -Wl,-z,relro,-z,now by
+ default #29877.” GitHub. <https://github.com/rust-lang/rust/issues/29877>.
+
+31. J. Löthberg. “Add support for full RELRO #43170.” GitHub.
+ <https://github.com/rust-lang/rust/pull/43170>.
+
+32. N. Matsakis. “Allocators in Rust.” Baby Steps.
+ <http://smallcultfollowing.com/babysteps/blog/2014/11/14/allocators-in-rust/>.
+
+33. A. Crichton. “RFC: Allow changing the default allocator #1183.” GitHub.
+ <https://github.com/rust-lang/rfcs/pull/1183>.
+
+34. A. Crichton. “RFC: Swap out jemalloc.” GitHub.
+ <https://rust-lang.github.io/rfcs/1183-swap-out-jemalloc.html>.
+
+35. A. Crichton. “Tracking issue for changing the global, default allocator
+ (RFC 1974) #27389.” GitHub.
+ <https://github.com/rust-lang/rust/issues/27389>.
+
+36. S. Fackler. “Prepare global allocators for stabilization #1974.” GitHub.
+ <https://github.com/rust-lang/rfcs/pull/1974>.
+
+37. A. Crichton. “RFC: Global allocators.” GitHub.
+ <https://rust-lang.github.io/rfcs/1974-global-allocators.html>.
+
+38. B. Anderson. “Switch the default global allocator to System, remove
+ alloc\_jemalloc, use jemallocator in rustc #36963.” GitHub.
+ <https://github.com/rust-lang/rust/issues/36963>.
+
+39. A. Crichton. “Remove the alloc\_jemalloc crate #55238.” GitHub.
+ <https://github.com/rust-lang/rust/pull/55238>.
+
+40. R. de C Valle. “Tracking Issue for LLVM Control Flow Integrity (CFI) Support
+ for Rust #89653.” GitHub. <https://github.com/rust-lang/rust/issues/89653>.
+
+41. “ControlFlowIntegrity.” The Rust Unstable Book.
+ <https://doc.rust-lang.org/beta/unstable-book/compiler-flags/sanitizer.html#controlflowintegrity>.
diff --git a/src/doc/rustc/src/images/image1.png b/src/doc/rustc/src/images/image1.png
new file mode 100644
index 000000000..ee2d3fd4f
--- /dev/null
+++ b/src/doc/rustc/src/images/image1.png
Binary files differ
diff --git a/src/doc/rustc/src/images/image2.png b/src/doc/rustc/src/images/image2.png
new file mode 100644
index 000000000..03061e1f0
--- /dev/null
+++ b/src/doc/rustc/src/images/image2.png
Binary files differ
diff --git a/src/doc/rustc/src/images/image3.png b/src/doc/rustc/src/images/image3.png
new file mode 100644
index 000000000..a49e14b5e
--- /dev/null
+++ b/src/doc/rustc/src/images/image3.png
Binary files differ
diff --git a/src/doc/rustc/src/images/llvm-cov-show-01.png b/src/doc/rustc/src/images/llvm-cov-show-01.png
new file mode 100644
index 000000000..35f045943
--- /dev/null
+++ b/src/doc/rustc/src/images/llvm-cov-show-01.png
Binary files differ
diff --git a/src/doc/rustc/src/instrument-coverage.md b/src/doc/rustc/src/instrument-coverage.md
new file mode 100644
index 000000000..0ae9e53af
--- /dev/null
+++ b/src/doc/rustc/src/instrument-coverage.md
@@ -0,0 +1,330 @@
+# Instrumentation-based Code Coverage
+
+## Introduction
+
+The Rust compiler includes two code coverage implementations:
+
+- A GCC-compatible, gcov-based coverage implementation, enabled with `-Z profile`, which derives coverage data based on DebugInfo.
+- A source-based code coverage implementation, enabled with `-C instrument-coverage`, which uses LLVM's native, efficient coverage instrumentation to generate very precise coverage data.
+
+This document describes how to enable and use the LLVM instrumentation-based coverage, via the `-C instrument-coverage` compiler flag.
+
+## How it works
+
+When `-C instrument-coverage` is enabled, the Rust compiler enhances rust-based libraries and binaries by:
+
+- Automatically injecting calls to an LLVM intrinsic ([`llvm.instrprof.increment`]), at functions and branches in compiled code, to increment counters when conditional sections of code are executed.
+- Embedding additional information in the data section of each library and binary (using the [LLVM Code Coverage Mapping Format] _Version 5_, if compiling with LLVM 12, or _Version 6_, if compiling with LLVM 13 or higher), to define the code regions (start and end positions in the source code) being counted.
+
+When running a coverage-instrumented program, the counter values are written to a `profraw` file at program termination. LLVM bundles tools that read the counter results, combine those results with the coverage map (embedded in the program binary), and generate coverage reports in multiple formats.
+
+[`llvm.instrprof.increment`]: https://llvm.org/docs/LangRef.html#llvm-instrprof-increment-intrinsic
+[llvm code coverage mapping format]: https://llvm.org/docs/CoverageMappingFormat.html
+
+> **Note**: `-C instrument-coverage` also automatically enables `-C symbol-mangling-version=v0` (tracking issue [#60705]). The `v0` symbol mangler is strongly recommended. The `v0` demangler can be overridden by explicitly adding `-Z unstable-options -C symbol-mangling-version=legacy`.
+
+[#60705]: https://github.com/rust-lang/rust/issues/60705
+
+## Enable coverage profiling in the Rust compiler
+
+Rust's source-based code coverage requires the Rust "profiler runtime". Without it, compiling with `-C instrument-coverage` generates an error that the profiler runtime is missing.
+
+The Rust `nightly` distribution channel includes the profiler runtime, by default.
+
+> **Important**: If you are building the Rust compiler from the source distribution, the profiler runtime is _not_ enabled in the default `config.toml.example`. Edit your `config.toml` file and ensure the `profiler` feature is set it to `true` (either under the `[build]` section, or under the settings for an individual `[target.<triple>]`):
+>
+> ```toml
+> # Build the profiler runtime (required when compiling with options that depend
+> # on this runtime, such as `-C profile-generate` or `-C instrument-coverage`).
+> profiler = true
+> ```
+
+### Building the demangler
+
+LLVM coverage reporting tools generate results that can include function names and other symbol references, and the raw coverage results report symbols using the compiler's "mangled" version of the symbol names, which can be difficult to interpret. To work around this issue, LLVM coverage tools also support a user-specified symbol name demangler.
+
+One option for a Rust demangler is [`rustfilt`], which can be installed with:
+
+```shell
+cargo install rustfilt
+```
+
+Another option, if you are building from the Rust compiler source distribution, is to use the `rust-demangler` tool included in the Rust source distribution, which can be built with:
+
+```shell
+$ ./x.py build rust-demangler
+```
+
+[`rustfilt`]: https://crates.io/crates/rustfilt
+
+## Compiling with coverage enabled
+
+Set the `-C instrument-coverage` compiler flag in order to enable LLVM source-based code coverage profiling.
+
+The default option generates coverage for all functions, including unused (never called) functions and generics. The compiler flag supports an optional value to tailor this behavior. (See [`-C instrument-coverage=<options>`](#-c-instrument-coverageoptions), below.)
+
+With `cargo`, you can instrument your program binary _and_ dependencies at the same time.
+
+For example (if your project's Cargo.toml builds a binary by default):
+
+```shell
+$ cd your-project
+$ cargo clean
+$ RUSTFLAGS="-C instrument-coverage" cargo build
+```
+
+If `cargo` is not configured to use your `profiler`-enabled version of `rustc`, set the path explicitly via the `RUSTC` environment variable. Here is another example, using a `stage1` build of `rustc` to compile an `example` binary (from the [`json5format`] crate):
+
+```shell
+$ RUSTC=$HOME/rust/build/x86_64-unknown-linux-gnu/stage1/bin/rustc \
+ RUSTFLAGS="-C instrument-coverage" \
+ cargo build --example formatjson5
+```
+
+> **Note**: that some compiler options, combined with `-C instrument-coverage`, can produce LLVM IR and/or linked binaries that are incompatible with LLVM coverage maps. For example, coverage requires references to actual functions in LLVM IR. If any covered function is optimized out, the coverage tools may not be able to process the coverage results. If you need to pass additional options, with coverage enabled, test them early, to confirm you will get the coverage results you expect.
+
+## Running the instrumented binary to generate raw coverage profiling data
+
+In the previous example, `cargo` generated the coverage-instrumented binary `formatjson5`:
+
+```shell
+$ echo "{some: 'thing'}" | target/debug/examples/formatjson5 -
+```
+
+```json5
+{
+ some: "thing",
+}
+```
+
+After running this program, a new file, `default.profraw`, should be in the current working directory. It's often preferable to set a specific file name or path. You can change the output file using the environment variable `LLVM_PROFILE_FILE`:
+
+```shell
+$ echo "{some: 'thing'}" \
+ | LLVM_PROFILE_FILE="formatjson5.profraw" target/debug/examples/formatjson5 -
+...
+$ ls formatjson5.profraw
+formatjson5.profraw
+```
+
+If `LLVM_PROFILE_FILE` contains a path to a non-existent directory, the missing directory structure will be created. Additionally, the following special pattern strings are rewritten:
+
+- `%p` - The process ID.
+- `%h` - The hostname of the machine running the program.
+- `%t` - The value of the TMPDIR environment variable.
+- `%Nm` - the instrumented binary’s signature: The runtime creates a pool of N raw profiles, used for on-line profile merging. The runtime takes care of selecting a raw profile from the pool, locking it, and updating it before the program exits. `N` must be between `1` and `9`, and defaults to `1` if omitted (with simply `%m`).
+- `%c` - Does not add anything to the filename, but enables a mode (on some platforms, including Darwin) in which profile counter updates are continuously synced to a file. This means that if the instrumented program crashes, or is killed by a signal, perfect coverage information can still be recovered.
+
+## Installing LLVM coverage tools
+
+LLVM's supplies two tools—`llvm-profdata` and `llvm-cov`—that process coverage data and generate reports. There are several ways to find and/or install these tools, but note that the coverage mapping data generated by the Rust compiler requires LLVM version 12 or higher, and processing the *raw* data may require exactly the LLVM version used by the compiler. (`llvm-cov --version` typically shows the tool's LLVM version number, and `rustc --verbose --version` shows the version of LLVM used by the Rust compiler.)
+
+- You can install compatible versions of these tools via the `rustup` component `llvm-tools-preview`. This component is the recommended path, though the specific tools available and their interface is not currently subject to Rust's usual stability guarantees. In this case, you may also find `cargo-binutils` useful as a wrapper around these tools.
+- You can install a compatible version of LLVM tools from your operating system distribution, or from your distribution of LLVM.
+- If you are building the Rust compiler from source, you can optionally use the bundled LLVM tools, built from source. Those tool binaries can typically be found in your build platform directory at something like: `rust/build/x86_64-unknown-linux-gnu/llvm/bin/llvm-*`.
+
+The examples in this document show how to use the llvm tools directly.
+
+## Creating coverage reports
+
+Raw profiles have to be indexed before they can be used to generate coverage reports. This is done using [`llvm-profdata merge`], which can combine multiple raw profiles and index them at the same time:
+
+```shell
+$ llvm-profdata merge -sparse formatjson5.profraw -o formatjson5.profdata
+```
+
+Finally, the `.profdata` file is used, in combination with the coverage map (from the program binary) to generate coverage reports using [`llvm-cov report`], for a coverage summaries; and [`llvm-cov show`], to see detailed coverage of lines and regions (character ranges) overlaid on the original source code.
+
+These commands have several display and filtering options. For example:
+
+```shell
+$ llvm-cov show -Xdemangler=rustfilt target/debug/examples/formatjson5 \
+ -instr-profile=formatjson5.profdata \
+ -show-line-counts-or-regions \
+ -show-instantiations \
+ -name=add_quoted_string
+```
+
+<img alt="Screenshot of sample `llvm-cov show` result, for function add_quoted_string" src="images/llvm-cov-show-01.png" class="center"/>
+<br/>
+<br/>
+
+Some of the more notable options in this example include:
+
+- `--Xdemangler=rustfilt` - the command name or path used to demangle Rust symbols (`rustfilt` in the example, but this could also be a path to the `rust-demangler` tool)
+- `target/debug/examples/formatjson5` - the instrumented binary (from which to extract the coverage map)
+- `--instr-profile=<path-to-file>.profdata` - the location of the `.profdata` file created by `llvm-profdata merge` (from the `.profraw` file generated by the instrumented binary)
+- `--name=<exact-function-name>` - to show coverage for a specific function (or, consider using another filter option, such as `--name-regex=<pattern>`)
+
+[`llvm-profdata merge`]: https://llvm.org/docs/CommandGuide/llvm-profdata.html#profdata-merge
+[`llvm-cov report`]: https://llvm.org/docs/CommandGuide/llvm-cov.html#llvm-cov-report
+[`llvm-cov show`]: https://llvm.org/docs/CommandGuide/llvm-cov.html#llvm-cov-show
+
+> **Note**: Coverage can also be disabled on an individual function by annotating the function with the [`no_coverage` attribute] (which requires the feature flag `#![feature(no_coverage)]`).
+
+[`no_coverage` attribute]: ../unstable-book/language-features/no-coverage.html
+
+## Interpreting reports
+
+There are four statistics tracked in a coverage summary:
+
+- Function coverage is the percentage of functions that have been executed at least once. A function is considered to be executed if any of its instantiations are executed.
+- Instantiation coverage is the percentage of function instantiations that have been executed at least once. Generic functions and functions generated from macros are two kinds of functions that may have multiple instantiations.
+- Line coverage is the percentage of code lines that have been executed at least once. Only executable lines within function bodies are considered to be code lines.
+- Region coverage is the percentage of code regions that have been executed at least once. A code region may span multiple lines: for example, in a large function body with no control flow. In other cases, a single line can contain multiple code regions: `return x || (y && z)` has countable code regions for `x` (which may resolve the expression, if `x` is `true`), `|| (y && z)` (executed only if `x` was `false`), and `return` (executed in either situation).
+
+Of these four statistics, function coverage is usually the least granular while region coverage is the most granular. The project-wide totals for each statistic are listed in the summary.
+
+## Test coverage
+
+A typical use case for coverage analysis is test coverage. Rust's source-based coverage tools can both measure your tests' code coverage as percentage, and pinpoint functions and branches not tested.
+
+The following example (using the [`json5format`] crate, for demonstration purposes) show how to generate and analyze coverage results for all tests in a crate.
+
+Since `cargo test` both builds and runs the tests, we set both the additional `RUSTFLAGS`, to add the `-C instrument-coverage` flag, and `LLVM_PROFILE_FILE`, to set a custom filename for the raw profiling data generated during the test runs. Since there may be more than one test binary, apply `%m` in the filename pattern. This generates unique names for each test binary. (Otherwise, each executed test binary would overwrite the coverage results from the previous binary.)
+
+```shell
+$ RUSTFLAGS="-C instrument-coverage" \
+ LLVM_PROFILE_FILE="json5format-%m.profraw" \
+ cargo test --tests
+```
+
+Make note of the test binary file paths, displayed after the word "`Running`" in the test output:
+
+```text
+ ...
+ Compiling json5format v0.1.3 ($HOME/json5format)
+ Finished test [unoptimized + debuginfo] target(s) in 14.60s
+
+ Running target/debug/deps/json5format-fececd4653271682
+running 25 tests
+...
+test result: ok. 25 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Running target/debug/deps/lib-30768f9c53506dc5
+running 31 tests
+...
+test result: ok. 31 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
+
+You should have one or more `.profraw` files now, one for each test binary. Run the `profdata` tool to merge them:
+
+```shell
+$ llvm-profdata merge -sparse json5format-*.profraw -o json5format.profdata
+```
+
+Then run the `cov` tool, with the `profdata` file and all test binaries:
+
+```shell
+$ llvm-cov report \
+ --use-color --ignore-filename-regex='/.cargo/registry' \
+ --instr-profile=json5format.profdata \
+ --object target/debug/deps/lib-30768f9c53506dc5 \
+ --object target/debug/deps/json5format-fececd4653271682
+$ llvm-cov show \
+ --use-color --ignore-filename-regex='/.cargo/registry' \
+ --instr-profile=json5format.profdata \
+ --object target/debug/deps/lib-30768f9c53506dc5 \
+ --object target/debug/deps/json5format-fececd4653271682 \
+ --show-instantiations --show-line-counts-or-regions \
+ --Xdemangler=rustfilt | less -R
+```
+
+> **Note**: The command line option `--ignore-filename-regex=/.cargo/registry`, which excludes the sources for dependencies from the coverage results.\_
+
+### Tips for listing the binaries automatically
+
+For `bash` users, one suggested way to automatically complete the `cov` command with the list of binaries is with a command like:
+
+```bash
+$ llvm-cov report \
+ $( \
+ for file in \
+ $( \
+ RUSTFLAGS="-C instrument-coverage" \
+ cargo test --tests --no-run --message-format=json \
+ | jq -r "select(.profile.test == true) | .filenames[]" \
+ | grep -v dSYM - \
+ ); \
+ do \
+ printf "%s %s " -object $file; \
+ done \
+ ) \
+ --instr-profile=json5format.profdata --summary-only # and/or other options
+```
+
+Adding `--no-run --message-format=json` to the _same_ `cargo test` command used to run
+the tests (including the same environment variables and flags) generates output in a JSON
+format that `jq` can easily query.
+
+The `printf` command takes this list and generates the `--object <binary>` arguments
+for each listed test binary.
+
+### Including doc tests
+
+The previous examples run `cargo test` with `--tests`, which excludes doc tests.[^79417]
+
+To include doc tests in the coverage results, drop the `--tests` flag, and apply the
+`-C instrument-coverage` flag, and some doc-test-specific options in the
+`RUSTDOCFLAGS` environment variable. (The `llvm-profdata` command does not change.)
+
+```bash
+$ RUSTFLAGS="-C instrument-coverage" \
+ RUSTDOCFLAGS="-C instrument-coverage -Z unstable-options --persist-doctests target/debug/doctestbins" \
+ LLVM_PROFILE_FILE="json5format-%m.profraw" \
+ cargo test
+$ llvm-profdata merge -sparse json5format-*.profraw -o json5format.profdata
+```
+
+The `-Z unstable-options --persist-doctests` flag is required, to save the test binaries
+(with their coverage maps) for `llvm-cov`.
+
+```bash
+$ llvm-cov report \
+ $( \
+ for file in \
+ $( \
+ RUSTFLAGS="-C instrument-coverage" \
+ RUSTDOCFLAGS="-C instrument-coverage -Z unstable-options --persist-doctests target/debug/doctestbins" \
+ cargo test --no-run --message-format=json \
+ | jq -r "select(.profile.test == true) | .filenames[]" \
+ | grep -v dSYM - \
+ ) \
+ target/debug/doctestbins/*/rust_out; \
+ do \
+ [[ -x $file ]] && printf "%s %s " -object $file; \
+ done \
+ ) \
+ --instr-profile=json5format.profdata --summary-only # and/or other options
+```
+
+> **Note**: The differences in this `llvm-cov` invocation, compared with the
+> version without doc tests, include:
+
+- The `cargo test ... --no-run` command is updated with the same environment variables
+ and flags used to _build_ the tests, _including_ the doc tests. (`LLVM_PROFILE_FILE`
+ is only used when _running_ the tests.)
+- The file glob pattern `target/debug/doctestbins/*/rust_out` adds the `rust_out`
+ binaries generated for doc tests (note, however, that some `rust_out` files may not
+ be executable binaries).
+- `[[ -x $file ]] &&` filters the files passed on to the `printf`, to include only
+ executable binaries.
+
+[^79417]:
+ There is ongoing work to resolve a known issue
+ [(#79417)](https://github.com/rust-lang/rust/issues/79417) that doc test coverage
+ generates incorrect source line numbers in `llvm-cov show` results.
+
+## `-C instrument-coverage=<options>`
+
+- `-C instrument-coverage=all`: Instrument all functions, including unused functions and unused generics. (This is the same as `-C instrument-coverage`, with no value.)
+- `-C instrument-coverage=off`: Do not instrument any functions. (This is the same as simply not including the `-C instrument-coverage` option.)
+- `-Zunstable-options -C instrument-coverage=except-unused-generics`: Instrument all functions except unused generics.
+- `-Zunstable-options -C instrument-coverage=except-unused-functions`: Instrument only used (called) functions and instantiated generic functions.
+
+## Other references
+
+Rust's implementation and workflow for source-based code coverage is based on the same library and tools used to implement [source-based code coverage in Clang]. (This document is partially based on the Clang guide.)
+
+[source-based code coverage in clang]: https://clang.llvm.org/docs/SourceBasedCodeCoverage.html
+[`json5format`]: https://crates.io/crates/json5format
diff --git a/src/doc/rustc/src/json.md b/src/doc/rustc/src/json.md
new file mode 100644
index 000000000..efbf861ea
--- /dev/null
+++ b/src/doc/rustc/src/json.md
@@ -0,0 +1,260 @@
+# JSON Output
+
+This chapter documents the JSON structures emitted by `rustc`. JSON may be
+enabled with the [`--error-format=json` flag][option-error-format]. Additional
+options may be specified with the [`--json` flag][option-json] which can
+change which messages are generated, and the format of the messages.
+
+JSON messages are emitted one per line to stderr.
+
+If parsing the output with Rust, the
+[`cargo_metadata`](https://crates.io/crates/cargo_metadata) crate provides
+some support for parsing the messages.
+
+When parsing, care should be taken to be forwards-compatible with future changes
+to the format. Optional values may be `null`. New fields may be added. Enumerated
+fields like "level" or "suggestion_applicability" may add new values.
+
+## Diagnostics
+
+Diagnostic messages provide errors or possible concerns generated during
+compilation. `rustc` provides detailed information about where the diagnostic
+originates, along with hints and suggestions.
+
+Diagnostics are arranged in a parent/child relationship where the parent
+diagnostic value is the core of the diagnostic, and the attached children
+provide additional context, help, and information.
+
+Diagnostics have the following format:
+
+```javascript
+{
+ /* The primary message. */
+ "message": "unused variable: `x`",
+ /* The diagnostic code.
+ Some messages may set this value to null.
+ */
+ "code": {
+ /* A unique string identifying which diagnostic triggered. */
+ "code": "unused_variables",
+ /* An optional string explaining more detail about the diagnostic code. */
+ "explanation": null
+ },
+ /* The severity of the diagnostic.
+ Values may be:
+ - "error": A fatal error that prevents compilation.
+ - "warning": A possible error or concern.
+ - "note": Additional information or context about the diagnostic.
+ - "help": A suggestion on how to resolve the diagnostic.
+ - "failure-note": A note attached to the message for further information.
+ - "error: internal compiler error": Indicates a bug within the compiler.
+ */
+ "level": "warning",
+ /* An array of source code locations to point out specific details about
+ where the diagnostic originates from. This may be empty, for example
+ for some global messages, or child messages attached to a parent.
+
+ Character offsets are offsets of Unicode Scalar Values.
+ */
+ "spans": [
+ {
+ /* The file where the span is located.
+ Note that this path may not exist. For example, if the path
+ points to the standard library, and the rust src is not
+ available in the sysroot, then it may point to a non-existent
+ file. Beware that this may also point to the source of an
+ external crate.
+ */
+ "file_name": "lib.rs",
+ /* The byte offset where the span starts (0-based, inclusive). */
+ "byte_start": 21,
+ /* The byte offset where the span ends (0-based, exclusive). */
+ "byte_end": 22,
+ /* The first line number of the span (1-based, inclusive). */
+ "line_start": 2,
+ /* The last line number of the span (1-based, inclusive). */
+ "line_end": 2,
+ /* The first character offset of the line_start (1-based, inclusive). */
+ "column_start": 9,
+ /* The last character offset of the line_end (1-based, exclusive). */
+ "column_end": 10,
+ /* Whether or not this is the "primary" span.
+
+ This indicates that this span is the focal point of the
+ diagnostic.
+
+ There are rare cases where multiple spans may be marked as
+ primary. For example, "immutable borrow occurs here" and
+ "mutable borrow ends here" can be two separate primary spans.
+
+ The top (parent) message should always have at least one
+ primary span, unless it has zero spans. Child messages may have
+ zero or more primary spans.
+ */
+ "is_primary": true,
+ /* An array of objects showing the original source code for this
+ span. This shows the entire lines of text where the span is
+ located. A span across multiple lines will have a separate
+ value for each line.
+ */
+ "text": [
+ {
+ /* The entire line of the original source code. */
+ "text": " let x = 123;",
+ /* The first character offset of the line of
+ where the span covers this line (1-based, inclusive). */
+ "highlight_start": 9,
+ /* The last character offset of the line of
+ where the span covers this line (1-based, exclusive). */
+ "highlight_end": 10
+ }
+ ],
+ /* An optional message to display at this span location.
+ This is typically null for primary spans.
+ */
+ "label": null,
+ /* An optional string of a suggested replacement for this span to
+ solve the issue. Tools may try to replace the contents of the
+ span with this text.
+ */
+ "suggested_replacement": null,
+ /* An optional string that indicates the confidence of the
+ "suggested_replacement". Tools may use this value to determine
+ whether or not suggestions should be automatically applied.
+
+ Possible values may be:
+ - "MachineApplicable": The suggestion is definitely what the
+ user intended. This suggestion should be automatically
+ applied.
+ - "MaybeIncorrect": The suggestion may be what the user
+ intended, but it is uncertain. The suggestion should result
+ in valid Rust code if it is applied.
+ - "HasPlaceholders": The suggestion contains placeholders like
+ `(...)`. The suggestion cannot be applied automatically
+ because it will not result in valid Rust code. The user will
+ need to fill in the placeholders.
+ - "Unspecified": The applicability of the suggestion is unknown.
+ */
+ "suggestion_applicability": null,
+ /* An optional object indicating the expansion of a macro within
+ this span.
+
+ If a message occurs within a macro invocation, this object will
+ provide details of where within the macro expansion the message
+ is located.
+ */
+ "expansion": {
+ /* The span of the macro invocation.
+ Uses the same span definition as the "spans" array.
+ */
+ "span": {/*...*/}
+ /* Name of the macro, such as "foo!" or "#[derive(Eq)]". */
+ "macro_decl_name": "some_macro!",
+ /* Optional span where the relevant part of the macro is
+ defined. */
+ "def_site_span": {/*...*/},
+ }
+ }
+ ],
+ /* Array of attached diagnostic messages.
+ This is an array of objects using the same format as the parent
+ message. Children are not nested (children do not themselves
+ contain "children" definitions).
+ */
+ "children": [
+ {
+ "message": "`#[warn(unused_variables)]` on by default",
+ "code": null,
+ "level": "note",
+ "spans": [],
+ "children": [],
+ "rendered": null
+ },
+ {
+ "message": "if this is intentional, prefix it with an underscore",
+ "code": null,
+ "level": "help",
+ "spans": [
+ {
+ "file_name": "lib.rs",
+ "byte_start": 21,
+ "byte_end": 22,
+ "line_start": 2,
+ "line_end": 2,
+ "column_start": 9,
+ "column_end": 10,
+ "is_primary": true,
+ "text": [
+ {
+ "text": " let x = 123;",
+ "highlight_start": 9,
+ "highlight_end": 10
+ }
+ ],
+ "label": null,
+ "suggested_replacement": "_x",
+ "suggestion_applicability": "MachineApplicable",
+ "expansion": null
+ }
+ ],
+ "children": [],
+ "rendered": null
+ }
+ ],
+ /* Optional string of the rendered version of the diagnostic as displayed
+ by rustc. Note that this may be influenced by the `--json` flag.
+ */
+ "rendered": "warning: unused variable: `x`\n --> lib.rs:2:9\n |\n2 | let x = 123;\n | ^ help: if this is intentional, prefix it with an underscore: `_x`\n |\n = note: `#[warn(unused_variables)]` on by default\n\n"
+}
+```
+
+## Artifact notifications
+
+Artifact notifications are emitted when the [`--json=artifacts`
+flag][option-json] is used. They indicate that a file artifact has been saved
+to disk. More information about emit kinds may be found in the [`--emit`
+flag][option-emit] documentation.
+
+```javascript
+{
+ /* The filename that was generated. */
+ "artifact": "libfoo.rlib",
+ /* The kind of artifact that was generated. Possible values:
+ - "link": The generated crate as specified by the crate-type.
+ - "dep-info": The `.d` file with dependency information in a Makefile-like syntax.
+ - "metadata": The Rust `.rmeta` file containing metadata about the crate.
+ - "save-analysis": A JSON file emitted by the `-Zsave-analysis` feature.
+ */
+ "emit": "link"
+}
+```
+
+## Future-incompatible reports
+
+If the [`--json=future-incompat`][option-json] flag is used, then a separate
+JSON structure will be emitted if the crate may stop compiling in the future.
+This contains diagnostic information about the particular warnings that may be
+turned into a hard error in the future. This will include the diagnostic
+information, even if the diagnostics have been suppressed (such as with an
+`#[allow]` attribute or the `--cap-lints` option).
+
+```javascript
+{
+ /* An array of objects describing a warning that will become a hard error
+ in the future.
+ */
+ "future_incompat_report":
+ [
+ {
+ /* A diagnostic structure as defined in
+ https://doc.rust-lang.org/rustc/json.html#diagnostics
+ */
+ "diagnostic": {...},
+ }
+ ]
+}
+```
+
+[option-emit]: command-line-arguments.md#option-emit
+[option-error-format]: command-line-arguments.md#option-error-format
+[option-json]: command-line-arguments.md#option-json
diff --git a/src/doc/rustc/src/linker-plugin-lto.md b/src/doc/rustc/src/linker-plugin-lto.md
new file mode 100644
index 000000000..9c644dd40
--- /dev/null
+++ b/src/doc/rustc/src/linker-plugin-lto.md
@@ -0,0 +1,197 @@
+# Linker-plugin-based LTO
+
+The `-C linker-plugin-lto` flag allows for deferring the LTO optimization
+to the actual linking step, which in turn allows for performing
+interprocedural optimizations across programming language boundaries if
+all the object files being linked were created by LLVM based toolchains.
+The prime example here would be linking Rust code together with
+Clang-compiled C/C++ code.
+
+## Usage
+
+There are two main cases how linker plugin based LTO can be used:
+
+ - compiling a Rust `staticlib` that is used as a C ABI dependency
+ - compiling a Rust binary where `rustc` invokes the linker
+
+In both cases the Rust code has to be compiled with `-C linker-plugin-lto` and
+the C/C++ code with `-flto` or `-flto=thin` so that object files are emitted
+as LLVM bitcode.
+
+### Rust `staticlib` as dependency in C/C++ program
+
+In this case the Rust compiler just has to make sure that the object files in
+the `staticlib` are in the right format. For linking, a linker with the
+LLVM plugin must be used (e.g. LLD).
+
+Using `rustc` directly:
+
+```bash
+# Compile the Rust staticlib
+rustc --crate-type=staticlib -Clinker-plugin-lto -Copt-level=2 ./lib.rs
+# Compile the C code with `-flto=thin`
+clang -c -O2 -flto=thin -o main.o ./main.c
+# Link everything, making sure that we use an appropriate linker
+clang -flto=thin -fuse-ld=lld -L . -l"name-of-your-rust-lib" -o main -O2 ./cmain.o
+```
+
+Using `cargo`:
+
+```bash
+# Compile the Rust staticlib
+RUSTFLAGS="-Clinker-plugin-lto" cargo build --release
+# Compile the C code with `-flto=thin`
+clang -c -O2 -flto=thin -o main.o ./main.c
+# Link everything, making sure that we use an appropriate linker
+clang -flto=thin -fuse-ld=lld -L . -l"name-of-your-rust-lib" -o main -O2 ./cmain.o
+```
+
+### C/C++ code as a dependency in Rust
+
+In this case the linker will be invoked by `rustc`. We again have to make sure
+that an appropriate linker is used.
+
+Using `rustc` directly:
+
+```bash
+# Compile C code with `-flto`
+clang ./clib.c -flto=thin -c -o ./clib.o -O2
+# Create a static library from the C code
+ar crus ./libxyz.a ./clib.o
+
+# Invoke `rustc` with the additional arguments
+rustc -Clinker-plugin-lto -L. -Copt-level=2 -Clinker=clang -Clink-arg=-fuse-ld=lld ./main.rs
+```
+
+Using `cargo` directly:
+
+```bash
+# Compile C code with `-flto`
+clang ./clib.c -flto=thin -c -o ./clib.o -O2
+# Create a static library from the C code
+ar crus ./libxyz.a ./clib.o
+
+# Set the linking arguments via RUSTFLAGS
+RUSTFLAGS="-Clinker-plugin-lto -Clinker=clang -Clink-arg=-fuse-ld=lld" cargo build --release
+```
+
+### Explicitly specifying the linker plugin to be used by `rustc`
+
+If one wants to use a linker other than LLD, the LLVM linker plugin has to be
+specified explicitly. Otherwise the linker cannot read the object files. The
+path to the plugin is passed as an argument to the `-Clinker-plugin-lto`
+option:
+
+```bash
+rustc -Clinker-plugin-lto="/path/to/LLVMgold.so" -L. -Copt-level=2 ./main.rs
+```
+
+### Usage with clang-cl and x86_64-pc-windows-msvc
+
+Cross language LTO can be used with the x86_64-pc-windows-msvc target, but this requires using the
+clang-cl compiler instead of the MSVC cl.exe included with Visual Studio Build Tools, and linking
+with lld-link. Both clang-cl and lld-link can be downloaded from [LLVM's download page](https://releases.llvm.org/download.html).
+Note that most crates in the ecosystem are likely to assume you are using cl.exe if using this target
+and that some things, like for example vcpkg, [don't work very well with clang-cl](https://github.com/microsoft/vcpkg/issues/2087).
+
+You will want to make sure your rust major LLVM version matches your installed LLVM tooling version,
+otherwise it is likely you will get linker errors:
+
+```bat
+rustc -V --verbose
+clang-cl --version
+```
+
+If you are compiling any proc-macros, you will get this error:
+
+```bash
+error: Linker plugin based LTO is not supported together with `-C prefer-dynamic` when
+targeting Windows-like targets
+```
+
+This is fixed if you explicitly set the target, for example
+`cargo build --target x86_64-pc-windows-msvc`
+Without an explicit --target the flags will be passed to all compiler invocations (including build
+scripts and proc macros), see [cargo docs on rustflags](https://doc.rust-lang.org/cargo/reference/config.html#buildrustflags)
+
+If you have dependencies using the `cc` crate, you will need to set these
+environment variables:
+```bat
+set CC=clang-cl
+set CXX=clang-cl
+set CFLAGS=/clang:-flto=thin /clang:-fuse-ld=lld-link
+set CXXFLAGS=/clang:-flto=thin /clang:-fuse-ld=lld-link
+REM Needed because msvc's lib.exe crashes on LLVM LTO .obj files
+set AR=llvm-lib
+```
+
+If you are specifying lld-link as your linker by setting `linker = "lld-link.exe"` in your cargo config,
+you may run into issues with some crates that compile code with separate cargo invocations. You should be
+able to get around this problem by setting `-Clinker=lld-link` in RUSTFLAGS
+
+## Toolchain Compatibility
+
+<!-- NOTE: to update the below table, you can use this shell script:
+
+```sh
+rustup toolchain install --profile minimal nightly
+MINOR_VERSION=$(rustc +nightly --version | cut -d . -f 2)
+LOWER_BOUND=61
+
+llvm_version() {
+ toolchain="$1"
+ printf "Rust $toolchain | Clang "
+ rustc +"$toolchain" -Vv | grep LLVM | cut -d ':' -f 2 | tr -d ' '
+}
+
+for version in `seq $LOWER_BOUND $((MINOR_VERSION - 2))`; do
+ toolchain=1.$version.0
+ rustup toolchain install --no-self-update --profile minimal $toolchain >/dev/null 2>&1
+ llvm_version $toolchain
+done
+```
+
+-->
+
+In order for this kind of LTO to work, the LLVM linker plugin must be able to
+handle the LLVM bitcode produced by both `rustc` and `clang`.
+
+Best results are achieved by using a `rustc` and `clang` that are based on the
+exact same version of LLVM. One can use `rustc -vV` in order to view the LLVM
+used by a given `rustc` version. Note that the version number given
+here is only an approximation as Rust sometimes uses unstable revisions of
+LLVM. However, the approximation is usually reliable.
+
+The following table shows known good combinations of toolchain versions.
+
+| Rust Version | Clang Version |
+|--------------|---------------|
+| Rust 1.34 | Clang 8 |
+| Rust 1.35 | Clang 8 |
+| Rust 1.36 | Clang 8 |
+| Rust 1.37 | Clang 8 |
+| Rust 1.38 | Clang 9 |
+| Rust 1.39 | Clang 9 |
+| Rust 1.40 | Clang 9 |
+| Rust 1.41 | Clang 9 |
+| Rust 1.42 | Clang 9 |
+| Rust 1.43 | Clang 9 |
+| Rust 1.44 | Clang 9 |
+| Rust 1.45 | Clang 10 |
+| Rust 1.46 | Clang 10 |
+| Rust 1.47 | Clang 11 |
+| Rust 1.48 | Clang 11 |
+| Rust 1.49 | Clang 11 |
+| Rust 1.50 | Clang 11 |
+| Rust 1.51 | Clang 11 |
+| Rust 1.52 | Clang 12 |
+| Rust 1.53 | Clang 12 |
+| Rust 1.54 | Clang 12 |
+| Rust 1.55 | Clang 12 |
+| Rust 1.56 | Clang 13 |
+| Rust 1.57 | Clang 13 |
+| Rust 1.58 | Clang 13 |
+| Rust 1.59 | Clang 13 |
+| Rust 1.60 | Clang 14 |
+
+Note that the compatibility policy for this feature might change in the future.
diff --git a/src/doc/rustc/src/lints/groups.md b/src/doc/rustc/src/lints/groups.md
new file mode 100644
index 000000000..44cf42ff0
--- /dev/null
+++ b/src/doc/rustc/src/lints/groups.md
@@ -0,0 +1,22 @@
+# Lint Groups
+
+`rustc` has the concept of a "lint group", where you can toggle several warnings
+through one name.
+
+For example, the `nonstandard-style` lint sets `non-camel-case-types`,
+`non-snake-case`, and `non-upper-case-globals` all at once. So these are
+equivalent:
+
+```bash
+$ rustc -D nonstandard-style
+$ rustc -D non-camel-case-types -D non-snake-case -D non-upper-case-globals
+```
+
+Here's a list of each lint group, and the lints that they are made up of:
+
+{{groups-table}}
+
+Additionally, there's a `bad-style` lint group that's a deprecated alias for `nonstandard-style`.
+
+Finally, you can also see the table above by invoking `rustc -W help`. This will give you the exact values for the specific
+compiler you have installed.
diff --git a/src/doc/rustc/src/lints/index.md b/src/doc/rustc/src/lints/index.md
new file mode 100644
index 000000000..029c9edc1
--- /dev/null
+++ b/src/doc/rustc/src/lints/index.md
@@ -0,0 +1,60 @@
+# Lints
+
+In software, a "lint" is a tool used to help improve your source code. The
+Rust compiler contains a number of lints, and when it compiles your code, it will
+also run the lints. These lints may produce a warning, an error, or nothing at all,
+depending on how you've configured things.
+
+Here's a small example:
+
+```bash
+$ cat main.rs
+fn main() {
+ let x = 5;
+}
+$ rustc main.rs
+warning: unused variable: `x`
+ --> main.rs:2:9
+ |
+2 | let x = 5;
+ | ^
+ |
+ = note: `#[warn(unused_variables)]` on by default
+ = note: to avoid this warning, consider using `_x` instead
+```
+
+This is the `unused_variables` lint, and it tells you that you've introduced
+a variable that you don't use in your code. That's not *wrong*, so it's not
+an error, but it might be a bug, so you get a warning.
+
+## Future-incompatible lints
+
+Sometimes the compiler needs to be changed to fix an issue that can cause
+existing code to stop compiling. "Future-incompatible" lints are issued in
+these cases to give users of Rust a smooth transition to the new behavior.
+Initially, the compiler will continue to accept the problematic code and issue
+a warning. The warning has a description of the problem, a notice that this
+will become an error in the future, and a link to a tracking issue that
+provides detailed information and an opportunity for feedback. This gives
+users some time to fix the code to accommodate the change. After some time,
+the warning may become an error.
+
+The following is an example of what a future-incompatible looks like:
+
+```text
+warning: borrow of packed field is unsafe and requires unsafe function or block (error E0133)
+ --> lint_example.rs:11:13
+ |
+11 | let y = &x.data.0;
+ | ^^^^^^^^^
+ |
+ = note: `#[warn(safe_packed_borrows)]` on by default
+ = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
+ = note: for more information, see issue #46043 <https://github.com/rust-lang/rust/issues/46043>
+ = note: fields of packed structs might be misaligned: dereferencing a misaligned pointer or even just creating a misaligned reference is undefined behavior
+```
+
+For more information about the process and policy of future-incompatible
+changes, see [RFC 1589].
+
+[RFC 1589]: https://github.com/rust-lang/rfcs/blob/master/text/1589-rustc-bug-fix-procedure.md
diff --git a/src/doc/rustc/src/lints/levels.md b/src/doc/rustc/src/lints/levels.md
new file mode 100644
index 000000000..93892d6ad
--- /dev/null
+++ b/src/doc/rustc/src/lints/levels.md
@@ -0,0 +1,283 @@
+# Lint Levels
+
+In `rustc`, lints are divided into five *levels*:
+
+1. allow
+2. warn
+3. force-warn
+4. deny
+5. forbid
+
+Each lint has a default level (explained in the lint listing later in this
+chapter), and the compiler has a default warning level. First, let's explain
+what these levels mean, and then we'll talk about configuration.
+
+## allow
+
+These lints exist, but by default, do nothing. For example, consider this
+source:
+
+```rust
+pub fn foo() {}
+```
+
+Compiling this file produces no warnings:
+
+```bash
+$ rustc lib.rs --crate-type=lib
+$
+```
+
+But this code violates the `missing_docs` lint.
+
+These lints exist mostly to be manually turned on via configuration, as we'll
+talk about later in this section.
+
+## warn
+
+The 'warn' lint level will produce a warning if you violate the lint. For example,
+this code runs afoul of the `unused_variables` lint:
+
+```rust
+pub fn foo() {
+ let x = 5;
+}
+```
+
+This will produce this warning:
+
+```bash
+$ rustc lib.rs --crate-type=lib
+warning: unused variable: `x`
+ --> lib.rs:2:9
+ |
+2 | let x = 5;
+ | ^
+ |
+ = note: `#[warn(unused_variables)]` on by default
+ = note: to avoid this warning, consider using `_x` instead
+```
+
+## force-warn
+
+'force-warn' is a special lint level. It's the same as 'warn' in that a lint
+at this level will produce a warning, but unlike the 'warn' level, the
+'force-warn' level cannot be overridden. If a lint is set to 'force-warn', it
+is guaranteed to warn: no more, no less. This is true even if the overall lint
+level is capped via cap-lints.
+
+## deny
+
+A 'deny' lint produces an error if you violate it. For example, this code
+runs into the `exceeding_bitshifts` lint.
+
+```rust,no_run
+fn main() {
+ 100u8 << 10;
+}
+```
+
+```bash
+$ rustc main.rs
+error: bitshift exceeds the type's number of bits
+ --> main.rs:2:13
+ |
+2 | 100u8 << 10;
+ | ^^^^^^^^^^^
+ |
+ = note: `#[deny(exceeding_bitshifts)]` on by default
+```
+
+What's the difference between an error from a lint and a regular old error?
+Lints are configurable via levels, so in a similar way to 'allow' lints,
+warnings that are 'deny' by default let you allow them. Similarly, you may
+wish to set up a lint that is `warn` by default to produce an error instead.
+This lint level gives you that.
+
+## forbid
+
+'forbid' is a special lint level that fills the same role for 'deny' that
+'force-warn' does for 'warn'. It's the same as 'deny' in that a lint at this
+level will produce an error, but unlike the 'deny' level, the 'forbid' level
+can not be overridden to be anything lower than an error. However, lint
+levels may still be capped with `--cap-lints` (see below) so `rustc --cap-lints warn`
+will make lints set to 'forbid' just warn.
+
+## Configuring warning levels
+
+Remember our `missing_docs` example from the 'allow' lint level?
+
+```bash
+$ cat lib.rs
+pub fn foo() {}
+$ rustc lib.rs --crate-type=lib
+$
+```
+
+We can configure this lint to operate at a higher level, both with
+compiler flags, as well as with an attribute in the source code.
+
+You can also "cap" lints so that the compiler can choose to ignore
+certain lint levels. We'll talk about that last.
+
+### Via compiler flag
+
+The `-A`, `-W`, `--force-warn` `-D`, and `-F` flags let you turn one or more lints
+into allowed, warning, force-warn, deny, or forbid levels, like this:
+
+```bash
+$ rustc lib.rs --crate-type=lib -W missing-docs
+warning: missing documentation for crate
+ --> lib.rs:1:1
+ |
+1 | pub fn foo() {}
+ | ^^^^^^^^^^^^
+ |
+ = note: requested on the command line with `-W missing-docs`
+
+warning: missing documentation for a function
+ --> lib.rs:1:1
+ |
+1 | pub fn foo() {}
+ | ^^^^^^^^^^^^
+```
+
+```bash
+$ rustc lib.rs --crate-type=lib -D missing-docs
+error: missing documentation for crate
+ --> lib.rs:1:1
+ |
+1 | pub fn foo() {}
+ | ^^^^^^^^^^^^
+ |
+ = note: requested on the command line with `-D missing-docs`
+
+error: missing documentation for a function
+ --> lib.rs:1:1
+ |
+1 | pub fn foo() {}
+ | ^^^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+```
+
+You can also pass each flag more than once for changing multiple lints:
+
+```bash
+$ rustc lib.rs --crate-type=lib -D missing-docs -D unused-variables
+```
+
+And of course, you can mix these five flags together:
+
+```bash
+$ rustc lib.rs --crate-type=lib -D missing-docs -A unused-variables
+```
+
+The order of these command line arguments is taken into account. The following allows the `unused-variables` lint, because it is the last argument for that lint:
+
+```bash
+$ rustc lib.rs --crate-type=lib -D unused-variables -A unused-variables
+```
+
+You can make use of this behavior by overriding the level of one specific lint out of a group of lints. The following example denies all the lints in the `unused` group, but explicitly allows the `unused-variables` lint in that group (forbid still trumps everything regardless of ordering):
+
+```bash
+$ rustc lib.rs --crate-type=lib -D unused -A unused-variables
+```
+
+Since `force-warn` and `forbid` cannot be overridden, setting
+one of them will prevent any later level for the same lint from
+taking effect.
+
+### Via an attribute
+
+You can also modify the lint level with a crate-wide attribute:
+
+```bash
+$ cat lib.rs
+#![warn(missing_docs)]
+
+pub fn foo() {}
+$ rustc lib.rs --crate-type=lib
+warning: missing documentation for crate
+ --> lib.rs:1:1
+ |
+1 | / #![warn(missing_docs)]
+2 | |
+3 | | pub fn foo() {}
+ | |_______________^
+ |
+note: lint level defined here
+ --> lib.rs:1:9
+ |
+1 | #![warn(missing_docs)]
+ | ^^^^^^^^^^^^
+
+warning: missing documentation for a function
+ --> lib.rs:3:1
+ |
+3 | pub fn foo() {}
+ | ^^^^^^^^^^^^
+```
+
+`warn`, `allow`, `deny`, and `forbid` all work this way. There is
+no way to set a lint to `force-warn` using an attribute.
+
+You can also pass in multiple lints per attribute:
+
+```rust
+#![warn(missing_docs, unused_variables)]
+
+pub fn foo() {}
+```
+
+And use multiple attributes together:
+
+```rust
+#![warn(missing_docs)]
+#![deny(unused_variables)]
+
+pub fn foo() {}
+```
+
+### Capping lints
+
+`rustc` supports a flag, `--cap-lints LEVEL` that sets the "lint cap level."
+This is the maximum level for all lints. So for example, if we take our
+code sample from the "deny" lint level above:
+
+```rust,no_run
+fn main() {
+ 100u8 << 10;
+}
+```
+
+And we compile it, capping lints to warn:
+
+```bash
+$ rustc lib.rs --cap-lints warn
+warning: bitshift exceeds the type's number of bits
+ --> lib.rs:2:5
+ |
+2 | 100u8 << 10;
+ | ^^^^^^^^^^^
+ |
+ = note: `#[warn(exceeding_bitshifts)]` on by default
+
+warning: this expression will panic at run-time
+ --> lib.rs:2:5
+ |
+2 | 100u8 << 10;
+ | ^^^^^^^^^^^ attempt to shift left with overflow
+```
+
+It now only warns, rather than errors. We can go further and allow all lints:
+
+```bash
+$ rustc lib.rs --cap-lints allow
+$
+```
+
+This feature is used heavily by Cargo; it will pass `--cap-lints allow` when
+compiling your dependencies, so that if they have any warnings, they do not
+pollute the output of your build.
diff --git a/src/doc/rustc/src/lints/listing/allowed-by-default.md b/src/doc/rustc/src/lints/listing/allowed-by-default.md
new file mode 100644
index 000000000..8c4c0b9c5
--- /dev/null
+++ b/src/doc/rustc/src/lints/listing/allowed-by-default.md
@@ -0,0 +1,3 @@
+# Allowed-by-default Lints
+
+This file is auto-generated by the lint-docs script.
diff --git a/src/doc/rustc/src/lints/listing/deny-by-default.md b/src/doc/rustc/src/lints/listing/deny-by-default.md
new file mode 100644
index 000000000..12f511423
--- /dev/null
+++ b/src/doc/rustc/src/lints/listing/deny-by-default.md
@@ -0,0 +1,3 @@
+# Deny-by-default Lints
+
+This file is auto-generated by the lint-docs script.
diff --git a/src/doc/rustc/src/lints/listing/index.md b/src/doc/rustc/src/lints/listing/index.md
new file mode 100644
index 000000000..791a80274
--- /dev/null
+++ b/src/doc/rustc/src/lints/listing/index.md
@@ -0,0 +1,5 @@
+# Lint Listing
+
+This section lists out all of the lints, grouped by their default lint levels.
+
+You can also see this list by running `rustc -W help`.
diff --git a/src/doc/rustc/src/lints/listing/warn-by-default.md b/src/doc/rustc/src/lints/listing/warn-by-default.md
new file mode 100644
index 000000000..84d67764f
--- /dev/null
+++ b/src/doc/rustc/src/lints/listing/warn-by-default.md
@@ -0,0 +1,3 @@
+# Warn-by-default Lints
+
+This file is auto-generated by the lint-docs script.
diff --git a/src/doc/rustc/src/platform-support.md b/src/doc/rustc/src/platform-support.md
new file mode 100644
index 000000000..01489e9aa
--- /dev/null
+++ b/src/doc/rustc/src/platform-support.md
@@ -0,0 +1,312 @@
+# Platform Support
+
+<style type="text/css">
+ td code {
+ white-space: nowrap;
+ }
+</style>
+
+Support for different platforms ("targets") are organized into three tiers,
+each with a different set of guarantees. For more information on the policies
+for targets at each tier, see the [Target Tier Policy](target-tier-policy.md).
+
+Targets are identified by their "target triple" which is the string to inform
+the compiler what kind of output should be produced.
+
+## Tier 1 with Host Tools
+
+Tier 1 targets can be thought of as "guaranteed to work". The Rust project
+builds official binary releases for each tier 1 target, and automated testing
+ensures that each tier 1 target builds and passes tests after each change.
+
+Tier 1 targets with host tools additionally support running tools like `rustc`
+and `cargo` natively on the target, and automated testing ensures that tests
+pass for the host tools as well. This allows the target to be used as a
+development platform, not just a compilation target. For the full requirements,
+see [Tier 1 with Host Tools](target-tier-policy.md#tier-1-with-host-tools) in
+the Target Tier Policy.
+
+All tier 1 targets with host tools support the full standard library.
+
+target | notes
+-------|-------
+`aarch64-unknown-linux-gnu` | ARM64 Linux (kernel 4.1, glibc 2.17+) [^missing-stack-probes]
+`i686-pc-windows-gnu` | 32-bit MinGW (Windows 7+) [^windows-support]
+`i686-pc-windows-msvc` | 32-bit MSVC (Windows 7+) [^windows-support]
+`i686-unknown-linux-gnu` | 32-bit Linux (kernel 3.2+, glibc 2.17+)
+`x86_64-apple-darwin` | 64-bit macOS (10.7+, Lion+)
+`x86_64-pc-windows-gnu` | 64-bit MinGW (Windows 7+) [^windows-support]
+`x86_64-pc-windows-msvc` | 64-bit MSVC (Windows 7+) [^windows-support]
+`x86_64-unknown-linux-gnu` | 64-bit Linux (kernel 3.2+, glibc 2.17+)
+
+[^missing-stack-probes]: Stack probes support is missing on
+ `aarch64-unknown-linux-gnu`, but it's planned to be implemented in the near
+ future. The implementation is tracked on [issue #77071][77071].
+
+[^windows-support]: Only Windows 10 currently undergoes automated testing. Earlier versions of Windows rely on testing and support from the community.
+
+[77071]: https://github.com/rust-lang/rust/issues/77071
+
+## Tier 1
+
+Tier 1 targets can be thought of as "guaranteed to work". The Rust project
+builds official binary releases for each tier 1 target, and automated testing
+ensures that each tier 1 target builds and passes tests after each change. For
+the full requirements, see [Tier 1 target
+policy](target-tier-policy.md#tier-1-target-policy) in the Target Tier Policy.
+
+At this time, all Tier 1 targets are [Tier 1 with Host
+Tools](#tier-1-with-host-tools).
+
+## Tier 2 with Host Tools
+
+Tier 2 targets can be thought of as "guaranteed to build". The Rust project
+builds official binary releases for each tier 2 target, and automated builds
+ensure that each tier 2 target builds after each change. Automated tests are
+not always run so it's not guaranteed to produce a working build, but tier 2
+targets often work to quite a good degree and patches are always welcome!
+
+Tier 2 targets with host tools additionally support running tools like `rustc`
+and `cargo` natively on the target, and automated builds ensure that the host
+tools build as well. This allows the target to be used as a development
+platform, not just a compilation target. For the full requirements, see [Tier 2
+with Host Tools](target-tier-policy.md#tier-2-with-host-tools) in the Target
+Tier Policy.
+
+All tier 2 targets with host tools support the full standard library.
+
+**NOTE:** The `rust-docs` component is not usually built for tier 2 targets,
+so Rustup may install the documentation for a similar tier 1 target instead.
+
+target | notes
+-------|-------
+`aarch64-apple-darwin` | ARM64 macOS (11.0+, Big Sur+)
+`aarch64-pc-windows-msvc` | ARM64 Windows MSVC
+`aarch64-unknown-linux-musl` | ARM64 Linux with MUSL
+`arm-unknown-linux-gnueabi` | ARMv6 Linux (kernel 3.2, glibc 2.17)
+`arm-unknown-linux-gnueabihf` | ARMv6 Linux, hardfloat (kernel 3.2, glibc 2.17)
+`armv7-unknown-linux-gnueabihf` | ARMv7 Linux, hardfloat (kernel 3.2, glibc 2.17)
+`mips-unknown-linux-gnu` | MIPS Linux (kernel 4.4, glibc 2.23)
+`mips64-unknown-linux-gnuabi64` | MIPS64 Linux, n64 ABI (kernel 4.4, glibc 2.23)
+`mips64el-unknown-linux-gnuabi64` | MIPS64 (LE) Linux, n64 ABI (kernel 4.4, glibc 2.23)
+`mipsel-unknown-linux-gnu` | MIPS (LE) Linux (kernel 4.4, glibc 2.23)
+`powerpc-unknown-linux-gnu` | PowerPC Linux (kernel 3.2, glibc 2.17)
+`powerpc64-unknown-linux-gnu` | PPC64 Linux (kernel 3.2, glibc 2.17)
+`powerpc64le-unknown-linux-gnu` | PPC64LE Linux (kernel 3.10, glibc 2.17)
+`riscv64gc-unknown-linux-gnu` | RISC-V Linux (kernel 4.20, glibc 2.29)
+`s390x-unknown-linux-gnu` | S390x Linux (kernel 3.2, glibc 2.17)
+`x86_64-unknown-freebsd` | 64-bit FreeBSD
+`x86_64-unknown-illumos` | illumos
+`x86_64-unknown-linux-musl` | 64-bit Linux with MUSL
+`x86_64-unknown-netbsd` | NetBSD/amd64
+
+## Tier 2
+
+Tier 2 targets can be thought of as "guaranteed to build". The Rust project
+builds official binary releases for each tier 2 target, and automated builds
+ensure that each tier 2 target builds after each change. Automated tests are
+not always run so it's not guaranteed to produce a working build, but tier 2
+targets often work to quite a good degree and patches are always welcome! For
+the full requirements, see [Tier 2 target
+policy](target-tier-policy.md#tier-2-target-policy) in the Target Tier Policy.
+
+The `std` column in the table below has the following meanings:
+
+* ✓ indicates the full standard library is available.
+* \* indicates the target only supports [`no_std`] development.
+
+[`no_std`]: https://rust-embedded.github.io/book/intro/no-std.html
+
+**NOTE:** The `rust-docs` component is not usually built for tier 2 targets,
+so Rustup may install the documentation for a similar tier 1 target instead.
+
+target | std | notes
+-------|:---:|-------
+`aarch64-apple-ios` | ✓ | ARM64 iOS
+[`aarch64-apple-ios-sim`](platform-support/aarch64-apple-ios-sim.md) | ✓ | Apple iOS Simulator on ARM64
+`aarch64-fuchsia` | ✓ | ARM64 Fuchsia
+`aarch64-linux-android` | ✓ | ARM64 Android
+`aarch64-unknown-none-softfloat` | * | Bare ARM64, softfloat
+`aarch64-unknown-none` | * | Bare ARM64, hardfloat
+`arm-linux-androideabi` | ✓ | ARMv7 Android
+`arm-unknown-linux-musleabi` | ✓ | ARMv6 Linux with MUSL
+`arm-unknown-linux-musleabihf` | ✓ | ARMv6 Linux with MUSL, hardfloat
+`armebv7r-none-eabi` | * | Bare ARMv7-R, Big Endian
+`armebv7r-none-eabihf` | * | Bare ARMv7-R, Big Endian, hardfloat
+`armv5te-unknown-linux-gnueabi` | ✓ | ARMv5TE Linux (kernel 4.4, glibc 2.23)
+`armv5te-unknown-linux-musleabi` | ✓ | ARMv5TE Linux with MUSL
+`armv7-linux-androideabi` | ✓ | ARMv7a Android
+`armv7-unknown-linux-gnueabi` | ✓ |ARMv7 Linux (kernel 4.15, glibc 2.27)
+`armv7-unknown-linux-musleabi` | ✓ |ARMv7 Linux with MUSL
+`armv7-unknown-linux-musleabihf` | ✓ | ARMv7 Linux with MUSL, hardfloat
+`armv7a-none-eabi` | * | Bare ARMv7-A
+`armv7r-none-eabi` | * | Bare ARMv7-R
+`armv7r-none-eabihf` | * | Bare ARMv7-R, hardfloat
+`asmjs-unknown-emscripten` | ✓ | asm.js via Emscripten
+`i586-pc-windows-msvc` | * | 32-bit Windows w/o SSE
+`i586-unknown-linux-gnu` | ✓ | 32-bit Linux w/o SSE (kernel 4.4, glibc 2.23)
+`i586-unknown-linux-musl` | ✓ | 32-bit Linux w/o SSE, MUSL
+`i686-linux-android` | ✓ | 32-bit x86 Android
+`i686-unknown-freebsd` | ✓ | 32-bit FreeBSD
+`i686-unknown-linux-musl` | ✓ | 32-bit Linux with MUSL
+`mips-unknown-linux-musl` | ✓ | MIPS Linux with MUSL
+`mips64-unknown-linux-muslabi64` | ✓ | MIPS64 Linux, n64 ABI, MUSL
+`mips64el-unknown-linux-muslabi64` | ✓ | MIPS64 (LE) Linux, n64 ABI, MUSL
+`mipsel-unknown-linux-musl` | ✓ | MIPS (LE) Linux with MUSL
+`nvptx64-nvidia-cuda` | * | --emit=asm generates PTX code that [runs on NVIDIA GPUs]
+`riscv32i-unknown-none-elf` | * | Bare RISC-V (RV32I ISA)
+`riscv32imac-unknown-none-elf` | * | Bare RISC-V (RV32IMAC ISA)
+`riscv32imc-unknown-none-elf` | * | Bare RISC-V (RV32IMC ISA)
+`riscv64gc-unknown-none-elf` | * | Bare RISC-V (RV64IMAFDC ISA)
+`riscv64imac-unknown-none-elf` | * | Bare RISC-V (RV64IMAC ISA)
+`sparc64-unknown-linux-gnu` | ✓ | SPARC Linux (kernel 4.4, glibc 2.23)
+`sparcv9-sun-solaris` | ✓ | SPARC Solaris 10/11, illumos
+`thumbv6m-none-eabi` | * | Bare Cortex-M0, M0+, M1
+`thumbv7em-none-eabi` | * | Bare Cortex-M4, M7
+`thumbv7em-none-eabihf` | * | Bare Cortex-M4F, M7F, FPU, hardfloat
+`thumbv7m-none-eabi` | * | Bare Cortex-M3
+`thumbv7neon-linux-androideabi` | ✓ | Thumb2-mode ARMv7a Android with NEON
+`thumbv7neon-unknown-linux-gnueabihf` | ✓ | Thumb2-mode ARMv7a Linux with NEON (kernel 4.4, glibc 2.23)
+`thumbv8m.base-none-eabi` | * | ARMv8-M Baseline
+`thumbv8m.main-none-eabi` | * | ARMv8-M Mainline
+`thumbv8m.main-none-eabihf` | * | ARMv8-M Mainline, hardfloat
+`wasm32-unknown-emscripten` | ✓ | WebAssembly via Emscripten
+`wasm32-unknown-unknown` | ✓ | WebAssembly
+`wasm32-wasi` | ✓ | WebAssembly with WASI
+`x86_64-apple-ios` | ✓ | 64-bit x86 iOS
+`x86_64-fortanix-unknown-sgx` | ✓ | [Fortanix ABI] for 64-bit Intel SGX
+`x86_64-fuchsia` | ✓ | 64-bit Fuchsia
+`x86_64-linux-android` | ✓ | 64-bit x86 Android
+`x86_64-pc-solaris` | ✓ | 64-bit Solaris 10/11, illumos
+`x86_64-unknown-linux-gnux32` | ✓ | 64-bit Linux (x32 ABI) (kernel 4.15, glibc 2.27)
+[`x86_64-unknown-none`](platform-support/x86_64-unknown-none.md) | * | Freestanding/bare-metal x86_64, softfloat
+`x86_64-unknown-redox` | ✓ | Redox OS
+
+[Fortanix ABI]: https://edp.fortanix.com/
+
+## Tier 3
+
+Tier 3 targets are those which the Rust codebase has support for, but which the
+Rust project does not build or test automatically, so they may or may not work.
+Official builds are not available. For the full requirements, see [Tier 3
+target policy](target-tier-policy.md#tier-3-target-policy) in the Target Tier
+Policy.
+
+The `std` column in the table below has the following meanings:
+
+* ✓ indicates the full standard library is available.
+* \* indicates the target only supports [`no_std`] development.
+* ? indicates the standard library support is unknown or a work-in-progress.
+
+[`no_std`]: https://rust-embedded.github.io/book/intro/no-std.html
+
+The `host` column indicates whether the codebase includes support for building
+host tools.
+
+target | std | host | notes
+-------|:---:|:----:|-------
+`aarch64-apple-ios-macabi` | ? | | Apple Catalyst on ARM64
+`aarch64-apple-tvos` | * | | ARM64 tvOS
+[`aarch64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | ARM64 Apple WatchOS Simulator
+[`aarch64-kmc-solid_asp3`](platform-support/kmc-solid.md) | ✓ | | ARM64 SOLID with TOPPERS/ASP3
+[`aarch64-nintendo-switch-freestanding`](platform-support/aarch64-nintendo-switch-freestanding.md) | * | | ARM64 Nintendo Switch, Horizon
+[`aarch64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ |
+`aarch64-unknown-freebsd` | ✓ | ✓ | ARM64 FreeBSD
+`aarch64-unknown-hermit` | ✓ | | ARM64 HermitCore
+`aarch64-unknown-uefi` | * | | ARM64 UEFI
+`aarch64-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (ILP32 ABI)
+`aarch64-unknown-netbsd` | ✓ | ✓ |
+[`aarch64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | ARM64 OpenBSD
+`aarch64-unknown-redox` | ? | | ARM64 Redox OS
+`aarch64-uwp-windows-msvc` | ? | |
+`aarch64-wrs-vxworks` | ? | |
+`aarch64_be-unknown-linux-gnu_ilp32` | ✓ | ✓ | ARM64 Linux (big-endian, ILP32 ABI)
+`aarch64_be-unknown-linux-gnu` | ✓ | ✓ | ARM64 Linux (big-endian)
+[`arm64_32-apple-watchos`](platform-support/apple-watchos.md) | ✓ | | ARM Apple WatchOS 64-bit with 32-bit pointers
+`armv4t-unknown-linux-gnueabi` | ? | |
+`armv5te-unknown-linux-uclibceabi` | ? | | ARMv5TE Linux with uClibc
+`armv6-unknown-freebsd` | ✓ | ✓ | ARMv6 FreeBSD
+`armv6-unknown-netbsd-eabihf` | ? | |
+[`armv6k-nintendo-3ds`](platform-support/armv6k-nintendo-3ds.md) | ? | | ARMv6K Nintendo 3DS, Horizon (Requires devkitARM toolchain)
+`armv7-apple-ios` | ✓ | | ARMv7 iOS, Cortex-a8
+[`armv7-unknown-linux-uclibceabi`](platform-support/armv7-unknown-linux-uclibceabi.md) | ✓ | ✓ | ARMv7 Linux with uClibc, softfloat
+[`armv7-unknown-linux-uclibceabihf`](platform-support/armv7-unknown-linux-uclibceabihf.md) | ✓ | ? | ARMv7 Linux with uClibc, hardfloat
+`armv7-unknown-freebsd` | ✓ | ✓ | ARMv7 FreeBSD
+`armv7-unknown-netbsd-eabihf` | ✓ | ✓ |
+`armv7-wrs-vxworks-eabihf` | ? | |
+[`armv7a-kmc-solid_asp3-eabi`](platform-support/kmc-solid.md) | ✓ | | ARM SOLID with TOPPERS/ASP3
+[`armv7a-kmc-solid_asp3-eabihf`](platform-support/kmc-solid.md) | ✓ | | ARM SOLID with TOPPERS/ASP3, hardfloat
+`armv7a-none-eabihf` | * | | ARM Cortex-A, hardfloat
+[`armv7k-apple-watchos`](platform-support/apple-watchos.md) | ✓ | | ARM Apple WatchOS
+`armv7s-apple-ios` | ✓ | |
+`avr-unknown-gnu-atmega328` | * | | AVR. Requires `-Z build-std=core`
+`bpfeb-unknown-none` | * | | BPF (big endian)
+`bpfel-unknown-none` | * | | BPF (little endian)
+`hexagon-unknown-linux-musl` | ? | |
+`i386-apple-ios` | ✓ | | 32-bit x86 iOS
+`i686-apple-darwin` | ✓ | ✓ | 32-bit macOS (10.7+, Lion+)
+`i686-pc-windows-msvc` | * | | 32-bit Windows XP support
+`i686-unknown-haiku` | ✓ | ✓ | 32-bit Haiku
+`i686-unknown-netbsd` | ✓ | ✓ | NetBSD/i386 with SSE2
+[`i686-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 32-bit OpenBSD
+`i686-unknown-uefi` | * | | 32-bit UEFI
+`i686-uwp-windows-gnu` | ? | |
+`i686-uwp-windows-msvc` | ? | |
+`i686-wrs-vxworks` | ? | |
+[`m68k-unknown-linux-gnu`](platform-support/m68k-unknown-linux-gnu.md) | ? | | Motorola 680x0 Linux
+`mips-unknown-linux-uclibc` | ✓ | | MIPS Linux with uClibc
+[`mips64-openwrt-linux-musl`](platform-support/mips64-openwrt-linux-musl.md) | ? | | MIPS64 for OpenWrt Linux MUSL
+`mipsel-sony-psp` | * | | MIPS (LE) Sony PlayStation Portable (PSP)
+`mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc
+`mipsel-unknown-none` | * | | Bare MIPS (LE) softfloat
+`mipsisa32r6-unknown-linux-gnu` | ? | |
+`mipsisa32r6el-unknown-linux-gnu` | ? | |
+`mipsisa64r6-unknown-linux-gnuabi64` | ? | |
+`mipsisa64r6el-unknown-linux-gnuabi64` | ? | |
+`msp430-none-elf` | * | | 16-bit MSP430 microcontrollers
+`powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux
+`powerpc-unknown-linux-musl` | ? | |
+`powerpc-unknown-netbsd` | ✓ | ✓ |
+`powerpc-unknown-openbsd` | ? | |
+`powerpc-wrs-vxworks-spe` | ? | |
+`powerpc-wrs-vxworks` | ? | |
+`powerpc64-unknown-freebsd` | ✓ | ✓ | PPC64 FreeBSD (ELFv1 and ELFv2)
+`powerpc64le-unknown-freebsd` | | | PPC64LE FreeBSD
+`powerpc-unknown-freebsd` | | | PowerPC FreeBSD
+`powerpc64-unknown-linux-musl` | ? | |
+`powerpc64-wrs-vxworks` | ? | |
+`powerpc64le-unknown-linux-musl` | ? | |
+`riscv32gc-unknown-linux-gnu` | | | RISC-V Linux (kernel 5.4, glibc 2.33)
+`riscv32gc-unknown-linux-musl` | | | RISC-V Linux (kernel 5.4, musl + RISCV32 support patches)
+`riscv32im-unknown-none-elf` | * | | Bare RISC-V (RV32IM ISA)
+[`riscv32imac-unknown-xous-elf`](platform-support/riscv32imac-unknown-xous-elf.md) | ? | | RISC-V Xous (RV32IMAC ISA)
+`riscv32imc-esp-espidf` | ✓ | | RISC-V ESP-IDF
+`riscv64gc-unknown-freebsd` | | | RISC-V FreeBSD
+`riscv64gc-unknown-linux-musl` | | | RISC-V Linux (kernel 4.20, musl 1.2.0)
+`s390x-unknown-linux-musl` | | | S390x Linux (kernel 3.2, MUSL)
+`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
+`sparc64-unknown-netbsd` | ✓ | ✓ | NetBSD/sparc64
+[`sparc64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/sparc64
+`thumbv4t-none-eabi` | * | | ARMv4T T32
+`thumbv7a-pc-windows-msvc` | ? | |
+`thumbv7a-uwp-windows-msvc` | ✓ | |
+`thumbv7neon-unknown-linux-musleabihf` | ? | | Thumb2-mode ARMv7a Linux with NEON, MUSL
+[`wasm64-unknown-unknown`](platform-support/wasm64-unknown-unknown.md) | ? | | WebAssembly
+`x86_64-apple-ios-macabi` | ✓ | | Apple Catalyst on x86_64
+`x86_64-apple-tvos` | * | | x86 64-bit tvOS
+[`x86_64-apple-watchos-sim`](platform-support/apple-watchos.md) | ✓ | | x86 64-bit Apple WatchOS simulator
+[`x86_64-pc-windows-gnullvm`](platform-support/pc-windows-gnullvm.md) | ✓ | ✓ |
+`x86_64-pc-windows-msvc` | * | | 64-bit Windows XP support
+`x86_64-sun-solaris` | ? | | Deprecated target for 64-bit Solaris 10/11, illumos
+`x86_64-unknown-dragonfly` | ✓ | ✓ | 64-bit DragonFlyBSD
+`x86_64-unknown-haiku` | ✓ | ✓ | 64-bit Haiku
+`x86_64-unknown-hermit` | ✓ | | HermitCore
+`x86_64-unknown-l4re-uclibc` | ? | |
+`x86_64-unknown-none-linuxkernel` | * | | Linux kernel modules
+[`x86_64-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | 64-bit OpenBSD
+`x86_64-unknown-uefi` | * | | 64-bit UEFI
+`x86_64-uwp-windows-gnu` | ✓ | |
+`x86_64-uwp-windows-msvc` | ✓ | |
+`x86_64-wrs-vxworks` | ? | |
+
+[runs on NVIDIA GPUs]: https://github.com/japaric-archived/nvptx#targets
diff --git a/src/doc/rustc/src/platform-support/TEMPLATE.md b/src/doc/rustc/src/platform-support/TEMPLATE.md
new file mode 100644
index 000000000..e64783fcf
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/TEMPLATE.md
@@ -0,0 +1,52 @@
+# `target-name-here`
+
+**Tier: 3**
+
+One-sentence description of the target (e.g. CPU, OS)
+
+## Target maintainers
+
+- Some Person, `email@example.org`, https://github.com/...
+
+## Requirements
+
+Does the target support host tools, or only cross-compilation? Does the target
+support std, or alloc (either with a default allocator, or if the user supplies
+an allocator)?
+
+Document the expectations of binaries built for the target. Do they assume
+specific minimum features beyond the baseline of the CPU/environment/etc? What
+version of the OS or environment do they expect?
+
+Are there notable `#[target_feature(...)]` or `-C target-feature=` values that
+programs may wish to use?
+
+What calling convention does `extern "C"` use on the target?
+
+What format do binaries use by default? ELF, PE, something else?
+
+## Building the target
+
+If Rust doesn't build the target by default, how can users build it? Can users
+just add it to the `target` list in `config.toml`?
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building the target" above), or build your own copy of `core` by using
+`build-std` or similar.
+
+## Testing
+
+Does the target support running binaries, or do binaries have varying
+expectations that prevent having a standard way to run them? If users can run
+binaries, can they do so in some common emulator, or do they need native
+hardware? Does the target support running the Rust testsuite?
+
+## Cross-compilation toolchains and C code
+
+Does the target support C code? If so, what toolchain target should users use
+to build compatible C code? (This may match the target triple, or it may be a
+toolchain for a different target triple, potentially with specific options or
+caveats.)
diff --git a/src/doc/rustc/src/platform-support/aarch64-apple-ios-sim.md b/src/doc/rustc/src/platform-support/aarch64-apple-ios-sim.md
new file mode 100644
index 000000000..3f29e2c5e
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/aarch64-apple-ios-sim.md
@@ -0,0 +1,55 @@
+# aarch64-apple-ios-sim
+
+**Tier: 2**
+
+Apple iOS Simulator on ARM64.
+
+## Designated Developers
+
+* [@badboy](https://github.com/badboy)
+* [@deg4uss3r](https://github.com/deg4uss3r)
+
+## Requirements
+
+This target is cross-compiled.
+To build this target Xcode 12 or higher on macOS is required.
+
+## Building
+
+The target can be built by enabling it for a `rustc` build:
+
+```toml
+[build]
+build-stage = 1
+target = ["aarch64-apple-ios-sim"]
+```
+
+## Cross-compilation
+
+This target can be cross-compiled from `x86_64` or `aarch64` macOS hosts.
+
+Other hosts are not supported for cross-compilation, but might work when also providing the required Xcode SDK.
+
+## Testing
+
+Currently there is no support to run the rustc test suite for this target.
+
+
+## Building Rust programs
+
+*Note: Building for this target requires the corresponding iOS SDK, as provided by Xcode 12+.*
+
+From Rust Nightly 1.56.0 (2021-08-03) on the artifacts are shipped pre-compiled:
+
+```text
+rustup target add aarch64-apple-ios-sim --toolchain nightly
+```
+
+Rust programs can be built for that target:
+
+```text
+rustc --target aarch64-apple-ios-sim your-code.rs
+```
+
+There is no easy way to run simple programs in the iOS simulator.
+Static library builds can be embedded into iOS applications.
diff --git a/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md
new file mode 100644
index 000000000..308e1fe2f
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/aarch64-nintendo-switch-freestanding.md
@@ -0,0 +1,49 @@
+# aarch64-nintendo-switch-freestanding
+
+**Tier: 3**
+
+Nintendo Switch with pure-Rust toolchain.
+
+## Designated Developers
+
+* [@leo60228](https://github.com/leo60228)
+* [@jam1garner](https://github.com/jam1garner)
+
+## Requirements
+
+This target is cross-compiled.
+It has no special requirements for the host.
+
+## Building
+
+The target can be built by enabling it for a `rustc` build:
+
+```toml
+[build]
+build-stage = 1
+target = ["aarch64-nintendo-switch-freestanding"]
+```
+
+## Cross-compilation
+
+This target can be cross-compiled from any host.
+
+## Testing
+
+Currently there is no support to run the rustc test suite for this target.
+
+## Building Rust programs
+
+If `rustc` has support for that target and the library artifacts are available,
+then Rust programs can be built for that target:
+
+```text
+rustc --target aarch64-nintendo-switch-freestanding your-code.rs
+```
+
+To generate binaries in the NRO format that can be easily run on-device, you
+can use [cargo-nx](https://github.com/aarch64-switch-rs/cargo-nx):
+
+```text
+cargo nx --triple=aarch64-nintendo-switch-freestanding
+```
diff --git a/src/doc/rustc/src/platform-support/apple-watchos.md b/src/doc/rustc/src/platform-support/apple-watchos.md
new file mode 100644
index 000000000..fe4c7c0c8
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/apple-watchos.md
@@ -0,0 +1,55 @@
+# *-apple-watchos
+- arm64_32-apple-watchos
+- armv7k-apple-watchos
+- aarch64-apple-watchos-sim
+- x86_64-apple-watchos-sim
+
+**Tier: 3**
+
+Apple WatchOS targets:
+- Apple WatchOS on Arm 64_32
+- Apple WatchOS on Arm v7k
+- Apple WatchOS Simulator on arm64
+- Apple WatchOS Simulator on x86_64
+
+## Target maintainers
+
+* [@deg4uss3r](https://github.com/deg4uss3r)
+* [@vladimir-ea](https://github.com/vladimir-ea)
+
+## Requirements
+
+These targets are cross-compiled.
+To build these targets Xcode 12 or higher on macOS is required.
+
+## Building the target
+
+The targets can be built by enabling them for a `rustc` build, for example:
+
+```toml
+[build]
+build-stage = 1
+target = ["aarch64-apple-watchos-sim"]
+```
+
+## Building Rust programs
+
+*Note: Building for this target requires the corresponding WatchOS SDK, as provided by Xcode 12+.*
+
+Rust programs can be built for these targets, if `rustc` has been built with support for them, for example:
+
+```text
+rustc --target aarch64-apple-watchos-sim your-code.rs
+```
+
+## Testing
+
+There is no support for running the Rust testsuite on WatchOS or the simulators.
+
+There is no easy way to run simple programs on WatchOS or the WatchOS simulators. Static library builds can be embedded into WatchOS applications.
+
+## Cross-compilation toolchains and C code
+
+This target can be cross-compiled from x86_64 or aarch64 macOS hosts.
+
+Other hosts are not supported for cross-compilation, but might work when also providing the required Xcode SDK.
diff --git a/src/doc/rustc/src/platform-support/armv6k-nintendo-3ds.md b/src/doc/rustc/src/platform-support/armv6k-nintendo-3ds.md
new file mode 100644
index 000000000..215290e38
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/armv6k-nintendo-3ds.md
@@ -0,0 +1,130 @@
+# `armv6k-nintendo-3ds`
+
+**Tier: 3**
+
+The Nintendo 3DS platform, which has an ARMv6K processor, and its associated
+operating system (`horizon`).
+
+Rust support for this target is not affiliated with Nintendo, and is not derived
+from nor used with any official Nintendo SDK.
+
+## Target maintainers
+
+- [@Meziu](https://github.com/Meziu)
+- [@AzureMarker](https://github.com/AzureMarker)
+- [@ian-h-chamberlain](https://github.com/ian-h-chamberlain)
+
+## Requirements
+
+This target is cross-compiled. Dynamic linking is not supported.
+
+`#![no_std]` crates can be built using `build-std` to build `core` and optionally
+`alloc`, and either `panic_abort` or `panic_unwind`.
+
+`std` is partially supported, but mostly works. Some APIs are unimplemented
+and will simply return an error, such as `std::process`. An allocator is provided
+by default.
+
+In order to support some APIs, binaries must be linked against `libc` written
+for the target, using a linker for the target. These are provided by the
+devkitARM toolchain. See
+[Cross-compilation toolchains and C code](#cross-compilation-toolchains-and-c-code)
+for more details.
+
+Additionally, some helper crates provide implementations of some `libc` functions
+use by `std` that may otherwise be missing. These, or an alternate implementation
+of the relevant functions, are required to use `std`:
+
+- [`pthread-3ds`](https://github.com/Meziu/pthread-3ds) provides pthread APIs for `std::thread`.
+- [`linker-fix-3ds`](https://github.com/Meziu/rust-linker-fix-3ds) fulfills some other missing libc APIs.
+
+Binaries built for this target should be compatible with all variants of the
+3DS (and 2DS) hardware and firmware, but testing is limited and some versions may
+not work correctly.
+
+This target generates binaries in the ELF format.
+
+## Building the target
+
+You can build Rust with support for the target by adding it to the `target`
+list in `config.toml` and providing paths to the devkitARM toolchain.
+
+```toml
+[build]
+build-stage = 1
+target = ["armv6k-nintendo-3ds"]
+
+[target.armv6k-nintendo-3ds]
+cc = "/opt/devkitpro/devkitARM/bin/arm-none-eabi-gcc"
+cxx = "/opt/devkitpro/devkitARM/bin/arm-none-eabi-g++"
+ar = "/opt/devkitpro/devkitARM/bin/arm-none-eabi-ar"
+ranlib = "/opt/devkitpro/devkitARM/bin/arm-none-eabi-ranlib"
+linker = "/opt/devkitpro/devkitARM/bin/arm-none-eabi-gcc"
+```
+
+Also, to build `compiler_builtins` for the target, export these flags before
+building the Rust toolchain:
+
+```sh
+export CFLAGS_armv6k_nintendo_3ds="-mfloat-abi=hard -mtune=mpcore -mtp=soft -march=armv6k"
+```
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target.
+
+The recommended way to build binaries is by using the
+[cargo-3ds](https://github.com/Meziu/cargo-3ds) tool, which uses `build-std`
+and provides commands that work like the usual `cargo run`, `cargo build`, etc.
+
+You can also build Rust with the target enabled (see
+[Building the target](#building-the-target) above).
+
+As mentioned in [Requirements](#requirements), programs that use `std` must link
+against both the devkitARM toolchain and libraries providing the `libc` APIs used
+in `std`. There is a general-purpose utility crate for working with nonstandard
+APIs provided by the OS: [`ctru-rs`](https://github.com/Meziu/ctru-rs).
+Add it to Cargo.toml to use it in your program:
+
+```toml
+[dependencies]
+ctru-rs = { git = "https://github.com/Meziu/ctru-rs.git" }
+```
+
+Using this library's `init()` function ensures the symbols needed to link
+against `std` are present (as mentioned in [Requirements](#requirements)
+above), as well as providing a runtime suitable for `std`:
+
+```rust,ignore (requires-3rd-party-library)
+fn main() {
+ ctru::init();
+}
+```
+
+## Testing
+
+Binaries built for this target can be run in an emulator (most commonly
+[Citra](https://citra-emu.org/)), or sent to a device through
+the use of a tool like devkitARM's `3dslink`. They may also simply be copied
+to an SD card to be inserted in the device.
+
+The `cargo-3ds` tool mentioned in [Building Rust programs](#building-rust-programs)
+supports the use of `3dslink` with `cargo 3ds run`. The default Rust test runner
+is not supported, but
+[custom test frameworks](https://doc.rust-lang.org/beta/unstable-book/language-features/custom-test-frameworks.html)
+can be used with `cargo 3ds test` to run unit tests on a device.
+
+The Rust test suite for `library/std` is not yet supported.
+
+## Cross-compilation toolchains and C code
+
+C code can be built for this target using the
+[devkitARM toolchain](https://devkitpro.org/wiki/Getting_Started).
+This toolchain provides `arm-none-eabi-gcc` as the linker used to link Rust
+programs as well.
+
+The toolchain also provides a `libc` implementation, which is required by `std`
+for many of its APIs, and a helper library `libctru` which is used by several
+of the helper crates listed in [Requirements](#requirements).
+This toolchain does not, however, include all of the APIs expected by `std`,
+and the remaining APIs are implemented by `pthread-3ds` and `linker-fix-3ds`.
diff --git a/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabi.md b/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabi.md
new file mode 100644
index 000000000..09e03e4dc
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabi.md
@@ -0,0 +1,131 @@
+# `armv7-unknown-linux-uclibceabi`
+
+**Tier: 3**
+
+This target supports ARMv7 softfloat CPUs and uses the uclibc-ng standard library. This is a common configuration on many consumer routers (e.g., Netgear R7000, Asus RT-AC68U).
+
+## Target maintainers
+
+* [@lancethepants](https://github.com/lancethepants)
+
+## Requirements
+
+This target is cross compiled, and requires a cross toolchain.
+
+This target supports host tools and std.
+
+## Building the target
+
+You will need to download or build a `'C'` cross toolchain that targets ARMv7 softfloat and that uses the uclibc-ng standard library. If your target hardware is something like a router or an embedded device, keep in mind that manufacturer supplied SDKs for this class of CPU could be outdated and potentially unsuitable for bootstrapping rust.
+
+[Here](https://github.com/lancethepants/tomatoware-toolchain) is a sample toolchain that is built using [buildroot](https://buildroot.org/). It uses modern toolchain components, older thus universal kernel headers (2.6.36.4), and is used for a project called [Tomatoware](https://github.com/lancethepants/tomatoware). This toolchain is patched so that its sysroot is located at /mmc (e.g., /mmc/bin, /mmc/lib, /mmc/include). This is useful in scenarios where the root filesystem is read-only but you are able attach external storage loaded with user applications. Tomatoware is an example of this that even allows you to run various compilers and developer tools natively on the target device.
+
+Utilizing the Tomatoware toolchain this target can be built for cross compilation and native compilation (host tools) with project
+
+[rust-bootstrap-armv7-unknown-linux-uclibceabi](https://github.com/lancethepants/rust-bootstrap-armv7-unknown-linux-uclibceabi).
+
+
+Here is a sample config if using your own toolchain.
+
+```toml
+[build]
+build-stage = 2
+target = ["armv7-unknown-linux-uclibceabi"]
+
+[target.armv7-unknown-linux-uclibceabi]
+cc = "/path/to/arm-unknown-linux-uclibcgnueabi-gcc"
+cxx = "/path/to/arm-unknown-linux-uclibcgnueabi-g++"
+ar = "path/to/arm-unknown-linux-uclibcgnueabi-ar"
+ranlib = "path/to/arm-unknown-linux-uclibcgnueabi-ranlib"
+linker = "/path/to/arm-unknown-linux-uclibcgnueabi-gcc"
+```
+
+## Building Rust programs
+
+The following assumes you are using the Tomatoware toolchain and environment. Adapt if you are using your own toolchain.
+
+### Native compilation
+
+Since this target supports host tools, you can natively build rust applications directly on your target device. This can be convenient because it removes the complexities of cross compiling and you can immediately test and deploy your binaries. One downside is that compiling on your ARMv7 CPU will probably be much slower than cross compilation on your x86 machine.
+
+To setup native compilation:
+
+* Download Tomatoware to your device using the latest nightly release found [here](https://files.lancethepants.com/Tomatoware/Nightly/).
+* Extract `tar zxvf arm-soft-mmc.tgz -C /mmc`
+* Add `/mmc/bin:/mmc:sbin/` to your PATH, or `source /mmc/etc/profile`
+* `apt update && apt install rust`
+
+If you bootstrap rust on your own using the project above, it will create a .deb file that you then can install with
+```text
+dpkg -i rust_1.xx.x-x_arm.deb
+```
+
+After completing these steps you can use rust normally in a native environment.
+
+### Cross Compilation
+
+To cross compile, you'll need to:
+
+* Build the rust cross toochain using [rust-bootstrap-armv7-unknown-linux-uclibceabi](https://github.com/lancethepants/rust-bootstrap-armv7-unknown-linux-uclibceabi) or your own built toolchain.
+* Link your built toolchain with
+
+ ```text
+ rustup toolchain link stage2 \
+ ${HOME}/rust-bootstrap-armv7-unknown-linux-uclibceabi/src/rust/rust/build/x86_64-unknown-linux-gnu/stage2
+ ```
+* Build with:
+ ```text
+ CC_armv7_unknown_linux_uclibceabi=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-gcc \
+ CXX_armv7_unknown_linux_uclibceabi=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-g++ \
+ AR_armv7_unknown_linux_uclibceabi=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-ar \
+ CFLAGS_armv7_unknown_linux_uclibceabi="-march=armv7-a -mtune=cortex-a9" \
+ CXXFLAGS_armv7_unknown_linux_uclibceabi="-march=armv7-a -mtune=cortex-a9" \
+ CARGO_TARGET_ARMV7_UNKNOWN_LINUX_UCLIBCEABI_LINKER=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-gcc \
+ CARGO_TARGET_ARMV7_UNKNOWN_LINUX_UCLIBCEABI_RUSTFLAGS='-Clink-arg=-s -Clink-arg=-Wl,--dynamic-linker=/mmc/lib/ld-uClibc.so.1 -Clink-arg=-Wl,-rpath,/mmc/lib' \
+ cargo +stage2 \
+ build \
+ --target armv7-unknown-linux-uclibceabi \
+ --release
+ ```
+* Copy the binary to your target device and run.
+
+We specify `CC`, `CXX`, `AR`, `CFLAGS`, and `CXXFLAGS` environment variables because sometimes a project or a subproject requires the use of your `'C'` cross toolchain. Since Tomatoware has a modified sysroot we also pass via RUSTFLAGS the location of the dynamic-linker and rpath.
+
+### Test with QEMU
+
+To test a cross-compiled binary on your build system follow the instructions for `Cross Compilation`, install `qemu-arm-static`, and run with the following.
+```text
+CC_armv7_unknown_linux_uclibceabi=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-gcc \
+CXX_armv7_unknown_linux_uclibceabi=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-g++ \
+AR_armv7_unknown_linux_uclibceabi=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-ar \
+CFLAGS_armv7_unknown_linux_uclibceabi="-march=armv7-a -mtune=cortex-a9" \
+CXXFLAGS_armv7_unknown_linux_uclibceabi="-march=armv7-a -mtune=cortex-a9" \
+CARGO_TARGET_ARMV7_UNKNOWN_LINUX_UCLIBCEABI_LINKER=/opt/tomatoware/arm-soft-mmc/bin/arm-linux-gcc \
+CARGO_TARGET_ARMV7_UNKNOWN_LINUX_UCLIBCEABI_RUNNER="qemu-arm-static -L /opt/tomatoware/arm-soft-mmc/arm-tomatoware-linux-uclibcgnueabi/sysroot/" \
+cargo +stage2 \
+run \
+--target armv7-unknown-linux-uclibceabi \
+--release
+```
+### Run in a chroot
+
+It's also possible to build in a chroot environment. This is a convenient way to work without needing to access the target hardware.
+
+To build the chroot:
+
+* `sudo debootstrap --arch armel bullseye $HOME/debian`
+* `sudo chroot $HOME/debian/ /bin/bash`
+* `mount proc /proc -t proc`
+* `mount -t sysfs /sys sys/`
+* `export PATH=/mmc/bin:/mmc/sbin:$PATH`
+
+From here you can setup your environment (e.g., add user, install wget).
+
+* Download Tomatoware to the chroot environment using the latest nightly release found [here](https://files.lancethepants.com/Tomatoware/Nightly/).
+* Extract `tar zxvf arm-soft-mmc.tgz -C /mmc`
+* Add `/mmc/bin:/mmc:sbin/` to your PATH, or `source /mmc/etc/profile`
+* `sudo /mmc/bin/apt update && sudo /mmc/bin/apt install rust`
+
+After completing these steps you can use rust normally in a chroot environment.
+
+Remember when using `sudo` the root user's PATH could differ from your user's PATH.
diff --git a/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabihf.md b/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabihf.md
new file mode 100644
index 000000000..1f0294063
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/armv7-unknown-linux-uclibceabihf.md
@@ -0,0 +1,66 @@
+# armv7-unknown-linux-uclibceabihf
+
+**Tier: 3**
+
+This tier supports the ARMv7 processor running a Linux kernel and uClibc-ng standard library. It provides full support for rust and the rust standard library.
+
+## Designated Developers
+
+* [@skrap](https://github.com/skrap)
+
+## Requirements
+
+This target is cross compiled, and requires a cross toolchain. You can find suitable pre-built toolchains at [bootlin](https://toolchains.bootlin.com/) or build one yourself via [buildroot](https://buildroot.org).
+
+## Building
+
+### Get a C toolchain
+
+Compiling rust for this target has been tested on `x86_64` linux hosts. Other host types have not been tested, but may work, if you can find a suitable cross compilation toolchain for them.
+
+If you don't already have a suitable toolchain, download one [here](https://toolchains.bootlin.com/downloads/releases/toolchains/armv7-eabihf/tarballs/armv7-eabihf--uclibc--bleeding-edge-2021.11-1.tar.bz2), and unpack it into a directory.
+
+### Configure rust
+
+The target can be built by enabling it for a `rustc` build, by placing the following in `config.toml`:
+
+```toml
+[build]
+target = ["armv7-unknown-linux-uclibceabihf"]
+stage = 2
+
+[target.armv7-unknown-linux-uclibceabihf]
+# ADJUST THIS PATH TO POINT AT YOUR TOOLCHAIN
+cc = "/TOOLCHAIN_PATH/bin/arm-buildroot-linux-uclibcgnueabihf-gcc"
+```
+
+### Build
+
+```sh
+# in rust dir
+./x.py build --stage 2
+```
+
+## Building and Running Rust Programs
+
+To test cross-compiled binaries on a `x86_64` system, you can use the `qemu-arm` [userspace emulation](https://qemu-project.gitlab.io/qemu/user/main.html) program. This avoids having a full emulated ARM system by doing dynamic binary translation and dynamic system call translation. It lets you run ARM programs directly on your `x86_64` kernel. It's very convenient!
+
+To use:
+
+* Install `qemu-arm` according to your distro.
+* Link your built toolchain via:
+ * `rustup toolchain link stage2 ${RUST}/build/x86_64-unknown-linux-gnu/stage2`
+* Create a test program
+
+```sh
+cargo new hello_world
+cd hello_world
+```
+
+* Build and run
+
+```sh
+CARGO_TARGET_ARMV7_UNKNOWN_LINUX_UCLIBCEABIHF_RUNNER="qemu-arm -L ${TOOLCHAIN}/arm-buildroot-linux-uclibcgnueabihf/sysroot/" \
+CARGO_TARGET_ARMV7_UNKNOWN_LINUX_UCLIBCEABIHF_LINKER=${TOOLCHAIN}/bin/arm-buildroot-linux-uclibcgnueabihf-gcc \
+cargo +stage2 run --target armv7-unknown-linux-uclibceabihf
+```
diff --git a/src/doc/rustc/src/platform-support/fuchsia.md b/src/doc/rustc/src/platform-support/fuchsia.md
new file mode 100644
index 000000000..61bd1b425
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/fuchsia.md
@@ -0,0 +1,295 @@
+# `aarch64-fuchsia` and `x86_64-fuchsia`
+
+**Tier: 2**
+
+[Fuchsia] is a modern open source operating system that's simple, secure,
+updatable, and performant.
+
+[Fuchsia]: https://fuchsia.dev/
+
+## Target maintainers
+
+The [Fuchsia team]:
+
+[Fuchsia team]: https://team-api.infra.rust-lang.org/v1/teams/fuchsia.json
+
+- Tyler Mandry ([@tmandry](https://github.com/tmandry))
+- Dan Johnson ([@computerdruid](https://github.com/computerdruid))
+- David Koloski ([@djkoloski](https://github.com/djkoloski))
+- Andrew Pollack ([@andrewpollack](https://github.com/andrewpollack))
+- Joseph Ryan ([@P1n3appl3](https://github.com/P1n3appl3))
+
+As the team evolves over time, the specific members listed here may differ from
+the members reported by the API. The API should be considered to be
+authoritative if this occurs. Instead of pinging individual members, use
+`@rustbot ping fuchsia` to contact the team on GitHub.
+
+## Requirements
+
+This target is cross-compiled from a host environment. Development may be done
+from the [source tree] or using the Fuchsia SDK.
+
+[source tree]: https://fuchsia.dev/fuchsia-src/get-started/learn/build
+
+Fuchsia targets support std and follow the `sysv64` calling convention on
+x86_64. Fuchsia binaries use the ELF file format.
+
+## Building the target
+
+Before building Rust for Fuchsia, you'll need a clang toolchain that supports
+Fuchsia as well. A recent version (14+) of clang should be sufficient to compile
+Rust for Fuchsia.
+
+You'll also need a recent copy of the [Fuchsia SDK], which provides the tools
+and binaries required to build and link programs for Fuchsia.
+
+[Fuchsia SDK]: https://chrome-infra-packages.appspot.com/p/fuchsia/sdk/core
+
+x86-64 and AArch64 Fuchsia targets can be enabled using the following
+configuration.
+
+In `config.toml`, add:
+
+```toml
+[build]
+target = ["<host_platform>", "aarch64-fuchsia", "x86_64-fuchsia"]
+
+[target.x86_64-fuchsia]
+llvm-libunwind = "in-tree"
+
+[target.aarch64-fuchsia]
+llvm-libunwind = "in-tree"
+```
+
+Additionally, the following environment variables must be configured (for
+example, using a script like `config-env.sh`):
+
+```sh
+# Configure this environment variable to be the path to the downloaded SDK
+export SDK_PATH="<SDK path goes here>"
+
+export CFLAGS_aarch64_fuchsia="--target=aarch64-fuchsia --sysroot=${SDK_PATH}/arch/arm64/sysroot -I${SDK_PATH}/pkg/fdio/include"
+export CXXFLAGS_aarch64_fuchsia="--target=aarch64-fuchsia --sysroot=${SDK_PATH}/arch/arm64/sysroot -I${SDK_PATH}/pkg/fdio/include"
+export LDFLAGS_aarch64_fuchsia="--target=aarch64-fuchsia --sysroot=${SDK_PATH}/arch/arm64/sysroot -L${SDK_PATH}/arch/arm64/lib"
+export CARGO_TARGET_AARCH64_FUCHSIA_RUSTFLAGS="-C link-arg=--sysroot=${SDK_PATH}/arch/arm64/sysroot -Lnative=${SDK_PATH}/arch/arm64/sysroot/lib -Lnative=${SDK_PATH}/arch/arm64/lib"
+export CFLAGS_x86_64_fuchsia="--target=x86_64-fuchsia --sysroot=${SDK_PATH}/arch/x64/sysroot -I${SDK_PATH}/pkg/fdio/include"
+export CXXFLAGS_x86_64_fuchsia="--target=x86_64-fuchsia --sysroot=${SDK_PATH}/arch/x64/sysroot -I${SDK_PATH}/pkg/fdio/include"
+export LDFLAGS_x86_64_fuchsia="--target=x86_64-fuchsia --sysroot=${SDK_PATH}/arch/x64/sysroot -L${SDK_PATH}/arch/x64/lib"
+export CARGO_TARGET_X86_64_FUCHSIA_RUSTFLAGS="-C link-arg=--sysroot=${SDK_PATH}/arch/x64/sysroot -Lnative=${SDK_PATH}/arch/x64/sysroot/lib -Lnative=${SDK_PATH}/arch/x64/lib"
+```
+
+These can be run together in a shell environment by executing
+`(source config-env.sh && ./x.py install)`.
+
+## Building Rust programs
+
+After compiling Rust binaries, you'll need to build a component, package it, and
+serve it to a Fuchsia device or emulator. All of this can be done using the
+Fuchsia SDK.
+
+As an example, we'll compile and run this simple program on a Fuchsia emulator:
+
+**`hello_fuchsia.rs`**
+```rust
+fn main() {
+ println!("Hello Fuchsia!");
+}
+
+#[test]
+fn it_works() {
+ assert_eq!(2 + 2, 4);
+}
+```
+
+Create a new file named `hello_fuchsia.rs` and fill out its contents with that
+code.
+
+### Create a package
+
+On Fuchsia, a package is the unit of distribution for software. We'll need to
+create a new package directory where we will place files like our finished
+binary and any data it may need. The working directory will have this layout:
+
+```txt
+hello_fuchsia.rs
+hello_fuchsia.cml
+package
+┣━ bin
+┃ ┗━ hello_fuchsia
+┣━ meta
+┃ ┣━ package
+┃ ┗━ hello_fuchsia.cm
+┗━ hello_fuchsia.manifest
+```
+
+Make the `package`, `package/bin`, and `package/meta` directories and create the
+following files inside:
+
+**`package/meta/package`**
+```json
+{"name":"hello_fuchsia","version":0}
+```
+
+The `package` file describes our package's name and version number. Every
+package must contain one.
+
+**`package/hello_fuchsia.manifest`**
+```txt
+bin/hello_fuchsia=package/bin/hello_fuchsia
+lib/ld.so.1=<SDK_PATH>/arch/x64/sysroot/dist/lib/ld.so.1
+lib/libfdio.so=<SDK_PATH>/arch/x64/dist/libfdio.so
+meta/package=package/meta/package
+meta/hello_fuchsia.cm=package/meta/hello_fuchsia.cm
+```
+
+*Note: Relative manifest paths are resolved starting from the working directory
+of `pm`. Make sure to fill out `<SDK_PATH>` with the path to the downloaded
+SDK.*
+
+The `.manifest` file will be used to describe the contents of the package by
+relating their location when installed to their location on the file system. You
+can use this to make a package pull files from other places, but for this
+example we'll just be placing everything in the `package` directory.
+
+### Compiling a binary
+
+Using your freshly compiled `rustc`, you can compile a binary for Fuchsia using
+the following options:
+
+* `--target x86_64-fuchsia`/`--target aarch64-fuchsia`: Targets the Fuchsia
+ platform of your choice
+* `-Lnative ${SDK_PATH}/arch/${ARCH}/lib`: Link against Fuchsia libraries from
+ the SDK
+* `-Lnative ${SDK_PATH}/arch/${ARCH}/sysroot/lib`: Link against Fuchsia kernel
+ libraries from the SDK
+
+Putting it all together:
+
+```sh
+# Configure these for the Fuchsia target of your choice
+TARGET_ARCH="<x86_64-fuchsia|aarch64-fuchsia>"
+ARCH="<x64|aarch64>"
+
+rustc --target ${TARGET_ARCH} -Lnative=${SDK_PATH}/arch/${ARCH}/lib -Lnative=${SDK_PATH}/arch/${ARCH}/sysroot/lib -o package/bin/hello_fuchsia hello_fuchsia.rs
+```
+
+### Bulding a component
+
+On Fuchsia, components require a component manifest written in Fuchia's markup
+language called CML. The Fuchsia devsite contains an [overview of CML] and a
+[reference for the file format]. Here's a basic one that can run our single binary:
+
+[overview of CML]: https://fuchsia.dev/fuchsia-src/concepts/components/v2/component_manifests
+[reference for the file format]: https://fuchsia.dev/reference/cml
+
+**`hello_fuchsia.cml`**
+```txt
+{
+ include: [ "syslog/client.shard.cml" ],
+ program: {
+ runner: "elf",
+ binary: "bin/hello_fuchsia",
+ },
+}
+```
+
+Now we can compile that CML into a component manifest:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/cmc compile hello_fuchsia.cml --includepath ${SDK_PATH}/pkg -o package/meta/hello_fuchsia.cm
+```
+
+`--includepath` tells the compiler where to look for `include`s from our CML.
+In our case, we're only using `syslog/client.shard.cml`.
+
+### Building and publishing a package
+
+Next, we'll build our package as defined by our manifest:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/pm -o hello_fuchsia -m package/hello_fuchsia.manifest build -output-package-manifest hello_fuchsia_manifest
+```
+
+This will produce `hello_fuchsia_manifest` which is a package manifest we can
+publish directly to a repository. We can set up that repository with:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/pm newrepo -repo repo
+```
+
+And then publish our new package to that repository with:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/pm publish -repo repo -lp -f <(echo "hello_fuchsia_manifest")
+```
+
+Then we can add it to `ffx`'s package server as `hello-fuchsia` using:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/ffx repository add-from-pm repo -r hello-fuchsia
+```
+
+### Starting the emulator
+
+Start a Fuchsia emulator in a new terminal using:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/ffx product-bundle get workstation_eng.qemu-${ARCH}
+${SDK_PATH}/tools/${ARCH}/ffx emu start workstation_eng.qemu-${ARCH} --headless
+```
+
+Then, once the emulator has been started:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/ffx target repository register
+```
+
+And watch the logs from the emulator in a separate terminal:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/ffx log --since now
+```
+
+Finally, run the component:
+
+```sh
+${SDK_PATH}/tools/${ARCH}/ffx component run fuchsia-pkg://hello-fuchsia/hello_fuchsia#meta/hello_fuchsia.cm
+```
+
+On reruns of the component, the `--recreate` argument may also need to be
+passed.
+
+## Testing
+
+### Running unit tests
+
+Tests can be run in the same way as a regular binary, simply by passing `--test`
+to the `rustc` invocation and then repackaging and rerunning. The test harness
+will run the applicable unit tests.
+
+Often when testing, you may want to pass additional command line arguments to
+your binary. Additional arguments can be set in the component manifest:
+
+**`hello_fuchsia.cml`**
+```txt
+{
+ include: [ "syslog/client.shard.cml" ],
+ program: {
+ runner: "elf",
+ binary: "bin/hello_fuchsia",
+ args: ["it_works"],
+ },
+}
+```
+
+This will pass the argument `it_works` to the binary, filtering the tests to
+only those tests that match the pattern. There are many more configuration
+options available in CML including environment variables. More documentation is
+available on the [Fuchsia devsite](https://fuchsia.dev/reference/cml).
+
+### Running the compiler test suite
+
+Running the Rust test suite on Fuchsia is [not currently supported], but work is
+underway to enable it.
+
+[not currently supported]: https://fxbug.dev/105393
diff --git a/src/doc/rustc/src/platform-support/kmc-solid.md b/src/doc/rustc/src/platform-support/kmc-solid.md
new file mode 100644
index 000000000..bbcd0f711
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/kmc-solid.md
@@ -0,0 +1,65 @@
+# \*-kmc-solid_\*
+
+**Tier: 3**
+
+[SOLID] embedded development platform by Kyoto Microcomputer Co., Ltd.
+
+[SOLID]: https://www.kmckk.co.jp/eng/SOLID/
+
+The target names follow this format: `$ARCH-kmc-solid_$KERNEL-$ABI`, where `$ARCH` specifies the target processor architecture, `$KERNEL` the base kernel, and `$ABI` the target ABI (optional). The following targets are currently defined:
+
+| Target name | `target_arch` | `target_vendor` | `target_os` |
+|--------------------------------|---------------|-----------------|--------------|
+| `aarch64-kmc-solid_asp3` | `aarch64` | `kmc` | `solid_asp3` |
+| `armv7a-kmc-solid_asp3-eabi` | `arm` | `kmc` | `solid_asp3` |
+| `armv7a-kmc-solid_asp3-eabihf` | `arm` | `kmc` | `solid_asp3` |
+
+## Designated Developers
+
+- [@kawadakk](https://github.com/kawadakk)
+
+## Requirements
+
+This target is cross-compiled.
+A platform-provided C compiler toolchain is required, though it can be substituted by [GNU Arm Embedded Toolchain](https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm) for the purpose of building Rust and functional binaries.
+
+## Building
+
+The target can be built by enabling it for a `rustc` build.
+
+```toml
+[build]
+target = ["aarch64-kmc-solid_asp3"]
+```
+
+Make sure `aarch64-kmc-elf-gcc` is included in `$PATH`. Alternatively, you can use GNU Arm Embedded Toolchain by adding the following to `config.toml`:
+
+```toml
+[target.aarch64-kmc-solid_asp3]
+cc = "arm-none-eabi-gcc"
+```
+
+## Cross-compilation
+
+This target can be cross-compiled from any hosts.
+
+## Testing
+
+Currently there is no support to run the rustc test suite for this target.
+
+## Building Rust programs
+
+Building executables is not supported yet.
+
+If `rustc` has support for that target and the library artifacts are available, then Rust static libraries can be built for that target:
+
+```shell
+$ rustc --target aarch64-kmc-solid_asp3 your-code.rs --crate-type staticlib
+$ ls libyour_code.a
+```
+
+On Rust Nightly it's possible to build without the target artifacts available:
+
+```text
+cargo build -Z build-std --target aarch64-kmc-solid_asp3
+```
diff --git a/src/doc/rustc/src/platform-support/m68k-unknown-linux-gnu.md b/src/doc/rustc/src/platform-support/m68k-unknown-linux-gnu.md
new file mode 100644
index 000000000..d325ba334
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/m68k-unknown-linux-gnu.md
@@ -0,0 +1,97 @@
+# m68k-unknown-linux-gnu
+
+**Tier: 3**
+
+Motorola 680x0 Linux
+
+## Designated Developers
+
+* [@glaubitz](https://github.com/glaubitz)
+* [@ricky26](https://github.com/ricky26)
+
+## Requirements
+
+This target requires a Linux/m68k build environment for cross-compilation which
+is available on Debian and Debian-based systems, openSUSE and other distributions.
+
+On Debian, it should be sufficient to install a g++ cross-compiler for the m68k
+architecture which will automatically pull in additional dependencies such as
+the glibc cross development package:
+
+```text
+# apt install g++-m68k-linux-gnu
+```
+
+Binaries can be run using QEMU user emulation. On Debian-based systems, it should be
+sufficient to install the package `qemu-user-static` to be able to run simple static
+binaries:
+
+```text
+# apt install qemu-user-static
+```
+
+To run more complex programs, it will be necessary to set up a Debian/m68k chroot with
+the help of the command `debootstrap`:
+
+```text
+# apt install debootstrap debian-ports-archive-keyring
+# debootstrap --keyring=/usr/share/keyrings/debian-ports-archive-keyring.gpg --arch=m68k unstable debian-68k http://ftp.ports.debian.org/debian-ports
+```
+
+This chroot can then seamlessly entered using the normal `chroot` command thanks to
+QEMU user emulation:
+
+```text
+# chroot /path/to/debian-68k
+```
+
+To get started with native builds, which are currently untested, a native Debian/m68k
+system can be installed either on real hardware such as 68k-based Commodore Amiga or
+Atari systems or emulated environments such as QEMU version 4.2 or newer or ARAnyM.
+
+ISO images for installation are provided by the Debian Ports team and can be obtained
+from the Debian CD image server available at:
+
+[https://cdimage.debian.org/cdimage/ports/current](https://cdimage.debian.org/cdimage/ports/current/)
+
+Documentation for Debian/m68k is available on the Debian Wiki at:
+
+[https://wiki.debian.org/M68k](https://wiki.debian.org/M68k)
+
+Support is available either through the `debian-68k` mailing list:
+
+[https://lists.debian.org/debian-68k/](https://lists.debian.org/debian-68k/)
+
+or the `#debian-68k` IRC channel on OFTC network.
+
+## Building
+
+The codegen for this target should be built by default. However, core and std
+are currently missing but are being worked on and should become available in
+the near future.
+
+## Cross-compilation
+
+This target can be cross-compiled from a standard Debian or Debian-based, openSUSE or any
+other distribution which has a basic m68k cross-toolchain available.
+
+## Testing
+
+Currently there is no support to run the rustc test suite for this target.
+
+## Building Rust programs
+
+Rust programs can be built for that target:
+
+```text
+rustc --target m68k-unknown-linux-gnu your-code.rs
+```
+
+Very simple progams can be run using the `qemu-m68k-static` program:
+
+```text
+$ qemu-m68k-static your-code
+```
+
+For more complex applications, a chroot or native (emulated) Debian/m68k system are required
+for testing.
diff --git a/src/doc/rustc/src/platform-support/mips64-openwrt-linux-musl.md b/src/doc/rustc/src/platform-support/mips64-openwrt-linux-musl.md
new file mode 100644
index 000000000..07470eef0
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/mips64-openwrt-linux-musl.md
@@ -0,0 +1,28 @@
+# `mips64-openwrt-linux-musl`
+**Tier: 3**
+
+## Target maintainers
+- Donald Hoskins `grommish@gmail.com`, https://github.com/Itus-Shield
+
+## Requirements
+This target is cross-compiled. There is no support for `std`. There is no
+default allocator, but it's possible to use `alloc` by supplying an allocator.
+
+By default, Rust code generated for this target uses `-msoft-float` and is
+dynamically linked.
+
+This target generated binaries in the ELF format.
+
+## Building the target
+This target is built exclusively within the `OpenWrt` build system via
+the `rust-lang` HOST package
+
+## Building Rust programs
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building the target" above).
+
+## Testing
+As `mips64-openwrt-linux-musl` supports a variety of different environments and does
+not support `std`, this target does not support running the Rust testsuite at this
+time.
diff --git a/src/doc/rustc/src/platform-support/nvptx64-nvidia-cuda.md b/src/doc/rustc/src/platform-support/nvptx64-nvidia-cuda.md
new file mode 100644
index 000000000..1af1410d4
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/nvptx64-nvidia-cuda.md
@@ -0,0 +1,58 @@
+# `nvptx64-nvidia-cuda`
+
+**Tier: 2**
+
+This is the target meant for deploying code for Nvidia® accelerators based on their CUDA
+platform.
+
+## Target maintainers
+
+- Riccardo D'Ambrosio, https://github.com/RDambrosio016
+- Kjetil Kjeka, https://github.com/kjetilkjeka
+
+<!-- FIXME: fill this out
+
+## Requirements
+
+Does the target support host tools, or only cross-compilation? Does the target
+support std, or alloc (either with a default allocator, or if the user supplies
+an allocator)?
+
+Document the expectations of binaries built for the target. Do they assume
+specific minimum features beyond the baseline of the CPU/environment/etc? What
+version of the OS or environment do they expect?
+
+Are there notable `#[target_feature(...)]` or `-C target-feature=` values that
+programs may wish to use?
+
+What calling convention does `extern "C"` use on the target?
+
+What format do binaries use by default? ELF, PE, something else?
+
+## Building the target
+
+If Rust doesn't build the target by default, how can users build it? Can users
+just add it to the `target` list in `config.toml`?
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building the target" above), or build your own copy of `core` by using
+`build-std` or similar.
+
+## Testing
+
+Does the target support running binaries, or do binaries have varying
+expectations that prevent having a standard way to run them? If users can run
+binaries, can they do so in some common emulator, or do they need native
+hardware? Does the target support running the Rust testsuite?
+
+## Cross-compilation toolchains and C code
+
+Does the target support C code? If so, what toolchain target should users use
+to build compatible C code? (This may match the target triple, or it may be a
+toolchain for a different target triple, potentially with specific options or
+caveats.)
+
+-->
diff --git a/src/doc/rustc/src/platform-support/openbsd.md b/src/doc/rustc/src/platform-support/openbsd.md
new file mode 100644
index 000000000..b2ac776ea
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/openbsd.md
@@ -0,0 +1,56 @@
+# \*-unknown-openbsd
+
+**Tier: 3**
+
+[OpenBSD] multi-platform 4.4BSD-based UNIX-like operating system.
+
+[OpenBSD]: https://www.openbsd.org/
+
+The target names follow this format: `$ARCH-unknown-openbsd`, where `$ARCH` specifies the target processor architecture. The following targets are currently defined:
+
+| Target name | C++ library | OpenBSD Platform |
+|--------------------------------|-------------|------------------|
+| `aarch64-unknown-openbsd` | libc++ | [64-bit ARM systems](https://www.openbsd.org/arm64.html) |
+| `i686-unknown-openbsd` | libc++ | [Standard PC and clones based on the Intel i386 architecture and compatible processors](https://www.openbsd.org/i386.html) |
+| `sparc64-unknown-openbsd` | estdc++ | [Sun UltraSPARC and Fujitsu SPARC64 systems](https://www.openbsd.org/sparc64.html) |
+| `x86_64-unknown-openbsd` | libc++ | [AMD64-based systems](https://www.openbsd.org/amd64.html) |
+
+Note that all OS versions are *major* even if using X.Y notation (`6.8` and `6.9` are different major versions) and could be binary incompatibles (with breaking changes).
+
+
+## Designated Developers
+
+- [@semarie](https://github.com/semarie), `semarie@openbsd.org`
+- [lang/rust](https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/lang/rust/Makefile?rev=HEAD&content-type=text/x-cvsweb-markup) maintainer (see MAINTAINER variable)
+
+Fallback to ports@openbsd.org, OpenBSD third parties public mailing-list (with openbsd developers readers)
+
+
+## Requirements
+
+These targets are natively compiled and could be cross-compiled.
+C compiler toolchain is required for the purpose of building Rust and functional binaries.
+
+## Building
+
+The target can be built by enabling it for a `rustc` build.
+
+```toml
+[build]
+target = ["$ARCH-unknown-openbsd"]
+
+[target.$ARCH-unknown-openbsd]
+cc = "$ARCH-openbsd-cc"
+```
+
+## Cross-compilation
+
+These targets can be cross-compiled, but LLVM might not build out-of-box.
+
+## Testing
+
+The Rust testsuite could be run natively.
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for these targets.
diff --git a/src/doc/rustc/src/platform-support/pc-windows-gnullvm.md b/src/doc/rustc/src/platform-support/pc-windows-gnullvm.md
new file mode 100644
index 000000000..721c234c6
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/pc-windows-gnullvm.md
@@ -0,0 +1,48 @@
+# \*-pc-windows-gnullvm
+
+**Tier: 3**
+
+Windows targets similar to `*-pc-windows-gnu` but using UCRT as the runtime and various LLVM tools/libraries instead of GCC/Binutils.
+
+Target triples available so far:
+- `aarch64-pc-windows-gnullvm`
+- `x86_64-pc-windows-gnullvm`
+
+## Target maintainers
+
+- [@mati865](https://github.com/mati865)
+
+## Requirements
+
+The easiest way to obtain these targets is cross-compilation but native build from `x86_64-pc-windows-gnu` is possible with few hacks which I don't recommend.
+Std support is expected to be on pair with `*-pc-windows-gnu`.
+
+Binaries for this target should be at least on pair with `*-pc-windows-gnu` in terms of requirements and functionality.
+
+Those targets follow Windows calling convention for `extern "C"`.
+
+Like with any other Windows target created binaries are in PE format.
+
+## Building the target
+
+For cross-compilation I recommend using [llvm-mingw](https://github.com/mstorsjo/llvm-mingw) toolchain, one change that seems necessary beside configuring corss compilers is disabling experimental `m86k` target. Otherwise LLVM build fails with `multiple definition ...` errors.
+Native bootstrapping builds require rather fragile hacks until host artifacts are available so I won't describe them here.
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building the target" above), or build your own copy of `core` by using
+`build-std` or similar.
+
+## Testing
+
+Created binaries work fine on Windows or Wine using native hardware. Testing AArch64 on x86_64 is problematic though and requires spending some time with QEMU.
+Once these targets bootstrap themselves on native hardware they should pass Rust testsuite.
+
+## Cross-compilation toolchains and C code
+
+Compatible C code can be built with Clang's `aarch64-pc-windows-gnu` and `x86_64-pc-windows-gnu` targets as long as LLVM based C toolchains are used.
+Those include:
+- [llvm-mingw](https://github.com/mstorsjo/llvm-mingw)
+- [MSYS2 with CLANG* environment](https://www.msys2.org/docs/environments)
diff --git a/src/doc/rustc/src/platform-support/riscv32imac-unknown-xous-elf.md b/src/doc/rustc/src/platform-support/riscv32imac-unknown-xous-elf.md
new file mode 100644
index 000000000..f024cd25b
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/riscv32imac-unknown-xous-elf.md
@@ -0,0 +1,50 @@
+# riscv32imac-unknown-xous-elf
+
+**Tier: 3**
+
+Xous microkernel, message-based operating system that powers devices such as Precursor and Betrusted. The operating system is written entirely in Rust, so no additional software is required to compile programs for Xous.
+
+## Target maintainers
+
+- [@xobs](https://github.com/xobs)
+
+## Requirements
+
+
+Building the target itself requires a RISC-V compiler that is supported by `cc-rs`. For example, you can use the prebuilt [xPack](https://github.com/xpack-dev-tools/riscv-none-elf-gcc-xpack/releases/latest) toolchain.
+
+Cross-compiling programs does not require any additional software beyond the toolchain. Prebuilt versions of the toolchain are available [from Betrusted](https://github.com/betrusted-io/rust/releases).
+
+## Building the target
+
+The target can be built by enabling it for a `rustc` build.
+
+```toml
+[build]
+target = ["riscv32imac-unknown-xous-elf"]
+```
+
+Make sure your C compiler is included in `$PATH`, then add it to the `config.toml`:
+
+```toml
+[target.riscv32imac-unknown-xous-elf]
+cc = "riscv-none-elf-gcc"
+ar = "riscv-none-elf-ar"
+```
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will need to do one of the following:
+
+* Build Rust with the target enabled (see "Building the target" above)
+* Build your own copy of `core` by using `build-std` or similar
+* Download a prebuilt toolchain [from Betrusted](https://github.com/betrusted-io/rust/releases)
+
+## Cross-compilation
+
+This target can be cross-compiled from any host.
+
+## Testing
+
+Currently there is no support to run the rustc test suite for this target.
diff --git a/src/doc/rustc/src/platform-support/unknown-uefi.md b/src/doc/rustc/src/platform-support/unknown-uefi.md
new file mode 100644
index 000000000..8f90d9c74
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/unknown-uefi.md
@@ -0,0 +1,254 @@
+# `*-unknown-uefi`
+
+**Tier: 3**
+
+Unified Extensible Firmware Interface (UEFI) targets for application, driver,
+and core UEFI binaries.
+
+Available targets:
+
+- `aarch64-unknown-uefi`
+- `i686-unknown-uefi`
+- `x86_64-unknown-uefi`
+
+## Target maintainers
+
+- David Rheinsberg ([@dvdhrm](https://github.com/dvdhrm))
+- Nicholas Bishop ([@nicholasbishop](https://github.com/nicholasbishop))
+
+## Requirements
+
+All UEFI targets can be used as `no-std` environments via cross-compilation.
+Support for `std` is missing, but actively worked on. `alloc` is supported if
+an allocator is provided by the user. No host tools are supported.
+
+The UEFI environment resembles the environment for Microsoft Windows, with some
+minor differences. Therefore, cross-compiling for UEFI works with the same
+tools as cross-compiling for Windows. The target binaries are PE32+ encoded,
+the calling convention is different for each architecture, but matches what
+Windows uses (if the architecture is supported by Windows). The special
+`efiapi` Rust calling-convention chooses the right ABI for the target platform
+(`extern "C"` is incorrect on Intel targets at least). The specification has an
+elaborate section on the different supported calling-conventions, if more
+details are desired.
+
+MMX, SSE, and other FP-units are disabled by default, to allow for compilation
+of core UEFI code that runs before they are set up. This can be overridden for
+individual compilations via rustc command-line flags. Not all firmwares
+correctly configure those units, though, so careful inspection is required.
+
+As native to PE32+, binaries are position-dependent, but can be relocated at
+runtime if their desired location is unavailable. The code must be statically
+linked. Dynamic linking is not supported. Code is shared via UEFI interfaces,
+rather than dynamic linking. Additionally, UEFI forbids running code on
+anything but the boot CPU/thread, nor is interrupt-usage allowed (apart from
+the timer interrupt). Device drivers are required to use polling methods.
+
+UEFI uses a single address-space to run all code in. Multiple applications can
+be loaded simultaneously and are dispatched via cooperative multitasking on a
+single stack.
+
+By default, the UEFI targets use the `link`-flavor of the LLVM linker `lld` to
+link binaries into the final PE32+ file suffixed with `*.efi`. The PE subsystem
+is set to `EFI_APPLICATION`, but can be modified by passing `/subsystem:<...>`
+to the linker. Similarly, the entry-point is to to `efi_main` but can be
+changed via `/entry:<...>`. The panic-strategy is set to `abort`,
+
+The UEFI specification is available online for free:
+[UEFI Specification Directory](https://uefi.org/specifications)
+
+## Building rust for UEFI targets
+
+Rust can be built for the UEFI targets by enabling them in the `rustc` build
+configuration. Note that you can only build the standard libraries. The
+compiler and host tools currently cannot be compiled for UEFI targets. A sample
+configuration would be:
+
+```toml
+[build]
+build-stage = 1
+target = ["x86_64-unknown-uefi"]
+```
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building rust for UEFI targets" above), or build your own copy of `core` by
+using `build-std`, `cargo-buildx`, or similar.
+
+A native build with the unstable `build-std`-feature can be achieved via:
+
+```sh
+cargo +nightly build \
+ -Zbuild-std=core,compiler_builtins \
+ -Zbuild-std-features=compiler-builtins-mem \
+ --target x86_64-unknown-uefi
+```
+
+Alternatively, you can install `cargo-xbuild` via
+`cargo install --force cargo-xbuild` and build for the UEFI targets via:
+
+```sh
+cargo \
+ +nightly \
+ xbuild \
+ --target x86_64-unknown-uefi
+```
+
+## Testing
+
+UEFI applications can be copied into the ESP on any UEFI system and executed
+via the firmware boot menu. The qemu suite allows emulating UEFI systems and
+executing UEFI applications as well. See its documentation for details.
+
+The [uefi-run](https://github.com/Richard-W/uefi-run) rust tool is a simple
+wrapper around `qemu` that can spawn UEFI applications in qemu. You can install
+it via `cargo install uefi-run` and execute qemu applications as
+`uefi-run ./application.efi`.
+
+## Cross-compilation toolchains and C code
+
+There are 3 common ways to compile native C code for UEFI targets:
+
+- Use the official SDK by Intel:
+ [Tianocore/EDK2](https://github.com/tianocore/edk2). This supports a
+ multitude of platforms, comes with the full specification transposed into C,
+ lots of examples and build-system integrations. This is also the only
+ officially supported platform by Intel, and is used by many major firmware
+ implementations. Any code compiled via the SDK is compatible to rust binaries
+ compiled for the UEFI targets. You can link them directly into your rust
+ binaries, or call into each other via UEFI protocols.
+- Use the **GNU-EFI** suite. This approach is used by many UEFI applications
+ in the Linux/OSS ecosystem. The GCC compiler is used to compile ELF binaries,
+ and linked with a pre-loader that converts the ELF binary to PE32+
+ **at runtime**. You can combine such binaries with the rust UEFI targets only
+ via UEFI protocols. Linking both into the same executable will fail, since
+ one is an ELF executable, and one a PE32+. If linking to **GNU-EFI**
+ executables is desired, you must compile your rust code natively for the same
+ GNU target as **GNU-EFI** and use their pre-loader. This requires careful
+ consideration about which calling-convention to use when calling into native
+ UEFI protocols, or calling into linked **GNU-EFI** code (similar to how these
+ differences need to be accounted for when writing **GNU-EFI** C code).
+- Use native Windows targets. This means compiling your C code for the Windows
+ platform as if it was the UEFI platform. This works for static libraries, but
+ needs adjustments when linking into an UEFI executable. You can, however,
+ link such static libraries seemlessly into rust code compiled for UEFI
+ targets. Be wary of any includes that are not specifically suitable for UEFI
+ targets (especially the C standard library includes are not always
+ compatible). Freestanding compilations are recommended to avoid
+ incompatibilites.
+
+## Ecosystem
+
+The rust language has a long history of supporting UEFI targets. Many crates
+have been developed to provide access to UEFI protocols and make UEFI
+programming more ergonomic in rust. The following list is a short overview (in
+alphabetical ordering):
+
+- **efi**: *Ergonomic Rust bindings for writing UEFI applications*. Provides
+ _rustified_ access to UEFI protocols, implements allocators and a safe
+ environment to write UEFI applications.
+- **r-efi**: *UEFI Reference Specification Protocol Constants and Definitions*.
+ A pure transpose of the UEFI specification into rust. This provides the raw
+ definitions from the specification, without any extended helpers or
+ _rustification_. It serves as baseline to implement any more elaborate rust
+ UEFI layers.
+- **uefi-rs**: *Safe and easy-to-use wrapper for building UEFI apps*. An
+ elaborate library providing safe abstractions for UEFI protocols and
+ features. It implements allocators and provides an execution environment to
+ UEFI applications written in rust.
+- **uefi-run**: *Run UEFI applications*. A small wrapper around _qemu_ to spawn
+ UEFI applications in an emulated `x86_64` machine.
+
+## Example: Freestanding
+
+The following code is a valid UEFI application returning immediately upon
+execution with an exit code of 0. A panic handler is provided. This is executed
+by rust on panic. For simplicity, we simply end up in an infinite loop.
+
+Note that as of rust-1.31.0, all features used here are stabilized. No unstable
+features are required, nor do we rely on nightly compilers. However, if you do
+not compile rustc for the UEFI targets, you need a nightly compiler to support
+the `-Z build-std` flag.
+
+This example can be compiled as binary crate via `cargo`:
+
+```sh
+cargo +nightly build \
+ -Zbuild-std=core,compiler_builtins \
+ -Zbuild-std-features=compiler-builtins-mem \
+ --target x86_64-unknown-uefi
+```
+
+```rust,ignore (platform-specific,eh-personality-is-unstable)
+#![no_main]
+#![no_std]
+
+#[panic_handler]
+fn panic_handler(_info: &core::panic::PanicInfo) -> ! {
+ loop {}
+}
+
+#[export_name = "efi_main"]
+pub extern "C" fn main(_h: *mut core::ffi::c_void, _st: *mut core::ffi::c_void) -> usize {
+ 0
+}
+```
+
+## Example: Hello World
+
+This is an example UEFI application that prints "Hello World!", then waits for
+key input before it exits. It serves as base example how to write UEFI
+applications without any helper modules other than the standalone UEFI protocol
+definitions provided by the `r-efi` crate.
+
+This extends the "Freestanding" example and builds upon its setup. See there
+for instruction how to compile this as binary crate.
+
+Note that UEFI uses UTF-16 strings. Since rust literals are UTF-8, we have to
+use an open-coded, zero-terminated, UTF-16 array as argument to
+`output_string()`. Similarly to the panic handler, real applications should
+rather use UTF-16 modules.
+
+```rust,ignore (platform-specific,eh-personality-is-unstable)
+#![no_main]
+#![no_std]
+
+use r_efi::efi;
+
+#[panic_handler]
+fn panic_handler(_info: &core::panic::PanicInfo) -> ! {
+ loop {}
+}
+
+#[export_name = "efi_main"]
+pub extern "C" fn main(_h: efi::Handle, st: *mut efi::SystemTable) -> efi::Status {
+ let s = [
+ 0x0048u16, 0x0065u16, 0x006cu16, 0x006cu16, 0x006fu16, // "Hello"
+ 0x0020u16, // " "
+ 0x0057u16, 0x006fu16, 0x0072u16, 0x006cu16, 0x0064u16, // "World"
+ 0x0021u16, // "!"
+ 0x000au16, // "\n"
+ 0x0000u16, // NUL
+ ];
+
+ // Print "Hello World!".
+ let r =
+ unsafe { ((*(*st).con_out).output_string)((*st).con_out, s.as_ptr() as *mut efi::Char16) };
+ if r.is_error() {
+ return r;
+ }
+
+ // Wait for key input, by waiting on the `wait_for_key` event hook.
+ let r = unsafe {
+ let mut x: usize = 0;
+ ((*(*st).boot_services).wait_for_event)(1, &mut (*(*st).con_in).wait_for_key, &mut x)
+ };
+ if r.is_error() {
+ return r;
+ }
+
+ efi::Status::SUCCESS
+}
+```
diff --git a/src/doc/rustc/src/platform-support/wasm64-unknown-unknown.md b/src/doc/rustc/src/platform-support/wasm64-unknown-unknown.md
new file mode 100644
index 000000000..021b904de
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/wasm64-unknown-unknown.md
@@ -0,0 +1,101 @@
+# `wasm64-unknown-unknown`
+
+**Tier: 3**
+
+WebAssembly target which uses 64-bit memories, relying on the [memory64]
+WebAssembly proposal.
+
+[memory64]: https://github.com/webassembly/memory64
+
+## Target maintainers
+
+- Alex Crichton, https://github.com/alexcrichton
+
+## Requirements
+
+This target is cross-compiled. The target supports `std` in the same manner as
+the `wasm32-unknown-unknown` target which is to say that it comes with the
+standard library but many I/O functions such as `std::fs` and `std::net` will
+simply return error. Additionally I/O operations like `println!` don't actually
+do anything and the prints aren't routed anywhere. This is the same as the
+`wasm32-unknown-unknown` target. This target comes by default with an allocator,
+currently [dlmalloc] which is [ported to rust][dlmalloc-rs].
+
+[dlmalloc]: http://gee.cs.oswego.edu/dl/html/malloc.html
+[dlmalloc-rs]: https://github.com/alexcrichton/dlmalloc-rs
+
+The difference of this target with `wasm32-unknown-unknown` is that it's
+compiled for 64-bit memories instead of 32-bit memories. This means that `usize`
+is 8-bytes large as well as pointers. The tradeoff, though, is that the maximum
+memory size is now the full 64-bit address space instead of the 4GB as limited
+by the 32-bit address space for `wasm32-unknown-unknown`.
+
+This target is not a stable target. The [memory64] WebAssembly proposal is stil
+in-progress and not standardized. This means that there are not many engines
+which implement the `memory64` feature and if they do they're likely behind a
+flag, for example:
+
+* Nodejs - `--experimental-wasm-memory64`
+* Wasmtime - `--wasm-features memory64`
+
+Also note that at this time the `wasm64-unknown-unknown` target assumes the
+presence of other merged wasm proposals such as (with their LLVM feature flags):
+
+* [Bulk memory] - `+bulk-memory`
+* Mutable imported globals - `+mutable-globals`
+* [Sign-extending operations] - `+sign-ext`
+* [Non-trapping fp-to-int operations] - `+nontrapping-fptoint`
+
+[Bulk memory]: https://github.com/WebAssembly/spec/blob/main/proposals/bulk-memory-operations/Overview.md
+[Sign-extending operations]: https://github.com/WebAssembly/spec/blob/main/proposals/sign-extension-ops/Overview.md
+[Non-trapping fp-to-int operations]: https://github.com/WebAssembly/spec/blob/main/proposals/nontrapping-float-to-int-conversion/Overview.md
+
+The `wasm64-unknown-unknown` target intends to match the default Clang targets
+for its `"C"` ABI, which is likely to be the same as Clang's
+`wasm32-unknown-unknown` largely.
+
+> **Note**: due to the relatively early-days nature of this target when working
+> with this target you may encounter LLVM bugs. If an assertion hit or a bug is
+> found it's recommended to open an issue either with rust-lang/rust or ideally
+> with LLVM itself.
+
+This target does not support `panic=unwind` at this time.
+
+## Building the target
+
+You can build Rust with support for the target by adding it to the `target`
+list in `config.toml`, and the target also requires `lld` to be built to work.
+
+```toml
+[build]
+target = ["wasm64-unknown-unknown"]
+
+[rust]
+lld = true
+```
+
+## Building Rust programs
+
+Rust does not yet ship pre-compiled artifacts for this target. To compile for
+this target, you will either need to build Rust with the target enabled (see
+"Building the target" above), or build your own copy of `std` by using
+`build-std` or similar.
+
+Note that the following `cfg` directives are set for `wasm64-unknown-unknown`:
+
+* `cfg(target_arch = "wasm64")`
+* `cfg(target_family = "wasm")`
+
+## Testing
+
+Currently testing is not well supported for `wasm64-unknown-unknown` and the
+Rust project doesn't run any tests for this target. Testing support sort of
+works but without `println!` it's not the most exciting tests to run.
+
+## Cross-compilation toolchains and C code
+
+Compiling Rust code with C code for `wasm64-unknown-unknown` is theoretically
+possible, but there are no known toolchains to do this at this time. At the time
+of this writing there is no known "libc" for wasm that works with
+`wasm64-unknown-unknown`, which means that mixing C & Rust with this target
+effectively cannot be done.
diff --git a/src/doc/rustc/src/platform-support/x86_64-unknown-none.md b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md
new file mode 100644
index 000000000..bd5fd1d05
--- /dev/null
+++ b/src/doc/rustc/src/platform-support/x86_64-unknown-none.md
@@ -0,0 +1,80 @@
+# `x86_64-unknown-none`
+
+**Tier: 2**
+
+Freestanding/bare-metal x86-64 binaries in ELF format: firmware, kernels, etc.
+
+## Target maintainers
+
+- Harald Hoyer `harald@profian.com`, https://github.com/haraldh
+- Mike Leany, https://github.com/mikeleany
+
+## Requirements
+
+This target is cross-compiled. There is no support for `std`. There is no
+default allocator, but it's possible to use `alloc` by supplying an allocator.
+
+By default, Rust code generated for this target does not use any vector or
+floating-point registers (e.g. SSE, AVX). This allows the generated code to run
+in environments, such as kernels, which may need to avoid the use of such
+registers or which may have special considerations about the use of such
+registers (e.g. saving and restoring them to avoid breaking userspace code
+using the same registers). You can change code generation to use additional CPU
+features via the `-C target-feature=` codegen options to rustc, or via the
+`#[target_feature]` mechanism within Rust code.
+
+By default, code generated with this target should run on any `x86_64`
+hardware; enabling additional target features may raise this baseline.
+
+Code generated with this target will use the `kernel` code model by default.
+You can change this using the `-C code-model=` option to rustc.
+
+On `x86_64-unknown-none`, `extern "C"` uses the [standard System V calling
+convention](https://gitlab.com/x86-psABIs/x86-64-ABI), without red zones.
+
+This target generates binaries in the ELF format. Any alternate formats or
+special considerations for binary layout will require linker options or linker
+scripts.
+
+## Building the target
+
+You can build Rust with support for the target by adding it to the `target`
+list in `config.toml`:
+
+```toml
+[build]
+build-stage = 1
+target = ["x86_64-unknown-none"]
+```
+
+## Building Rust programs
+
+Starting with Rust 1.62, precompiled artifacts are provided via `rustup`:
+
+```text
+# install cross-compile toolchain
+rustup target add x86_64-unknown-none
+# target flag may be used with any cargo or rustc command
+cargo build --target x86_64-unknown-none
+```
+
+## Testing
+
+As `x86_64-unknown-none` supports a variety of different environments and does
+not support `std`, this target does not support running the Rust test suite.
+
+## Cross-compilation toolchains and C code
+
+If you want to compile C code along with Rust (such as for Rust crates with C
+dependencies), you will need an appropriate `x86_64` toolchain.
+
+Rust *may* be able to use an `x86_64-linux-gnu-` toolchain with appropriate
+standalone flags to build for this toolchain (depending on the assumptions of
+that toolchain, see below), or you may wish to use a separate
+`x86_64-unknown-none` (or `x86_64-elf-`) toolchain.
+
+On some `x86_64` hosts that use ELF binaries, you *may* be able to use the host
+C toolchain, if it does not introduce assumptions about the host environment
+that don't match the expectations of a standalone environment. Otherwise, you
+may need a separate toolchain for standalone/freestanding development, just as
+when cross-compiling from a non-`x86_64` platform.
diff --git a/src/doc/rustc/src/profile-guided-optimization.md b/src/doc/rustc/src/profile-guided-optimization.md
new file mode 100644
index 000000000..d9cf7ce30
--- /dev/null
+++ b/src/doc/rustc/src/profile-guided-optimization.md
@@ -0,0 +1,147 @@
+# Profile-guided Optimization
+
+`rustc` supports doing profile-guided optimization (PGO).
+This chapter describes what PGO is, what it is good for, and how it can be used.
+
+## What Is Profiled-Guided Optimization?
+
+The basic concept of PGO is to collect data about the typical execution of
+a program (e.g. which branches it is likely to take) and then use this data
+to inform optimizations such as inlining, machine-code layout,
+register allocation, etc.
+
+There are different ways of collecting data about a program's execution.
+One is to run the program inside a profiler (such as `perf`) and another
+is to create an instrumented binary, that is, a binary that has data
+collection built into it, and run that.
+The latter usually provides more accurate data and it is also what is
+supported by `rustc`.
+
+## Usage
+
+Generating a PGO-optimized program involves following a workflow with four steps:
+
+1. Compile the program with instrumentation enabled
+ (e.g. `rustc -Cprofile-generate=/tmp/pgo-data main.rs`)
+2. Run the instrumented program (e.g. `./main`) which generates a
+ `default_<id>.profraw` file
+3. Convert the `.profraw` file into a `.profdata` file using
+ LLVM's `llvm-profdata` tool
+4. Compile the program again, this time making use of the profiling data
+ (for example `rustc -Cprofile-use=merged.profdata main.rs`)
+
+An instrumented program will create one or more `.profraw` files, one for each
+instrumented binary. E.g. an instrumented executable that loads two instrumented
+dynamic libraries at runtime will generate three `.profraw` files. Running an
+instrumented binary multiple times, on the other hand, will re-use the
+respective `.profraw` files, updating them in place.
+
+These `.profraw` files have to be post-processed before they can be fed back
+into the compiler. This is done by the `llvm-profdata` tool. This tool
+is most easily installed via
+
+```bash
+rustup component add llvm-tools-preview
+```
+
+Note that installing the `llvm-tools-preview` component won't add
+`llvm-profdata` to the `PATH`. Rather, the tool can be found in:
+
+```bash
+~/.rustup/toolchains/<toolchain>/lib/rustlib/<target-triple>/bin/
+```
+
+Alternatively, an `llvm-profdata` coming with a recent LLVM or Clang
+version usually works too.
+
+The `llvm-profdata` tool merges multiple `.profraw` files into a single
+`.profdata` file that can then be fed back into the compiler via
+`-Cprofile-use`:
+
+```bash
+# STEP 1: Compile the binary with instrumentation
+rustc -Cprofile-generate=/tmp/pgo-data -O ./main.rs
+
+# STEP 2: Run the binary a few times, maybe with common sets of args.
+# Each run will create or update `.profraw` files in /tmp/pgo-data
+./main mydata1.csv
+./main mydata2.csv
+./main mydata3.csv
+
+# STEP 3: Merge and post-process all the `.profraw` files in /tmp/pgo-data
+llvm-profdata merge -o ./merged.profdata /tmp/pgo-data
+
+# STEP 4: Use the merged `.profdata` file during optimization. All `rustc`
+# flags have to be the same.
+rustc -Cprofile-use=./merged.profdata -O ./main.rs
+```
+
+### A Complete Cargo Workflow
+
+Using this feature with Cargo works very similar to using it with `rustc`
+directly. Again, we generate an instrumented binary, run it to produce data,
+merge the data, and feed it back into the compiler. Some things of note:
+
+- We use the `RUSTFLAGS` environment variable in order to pass the PGO compiler
+ flags to the compilation of all crates in the program.
+
+- We pass the `--target` flag to Cargo, which prevents the `RUSTFLAGS`
+ arguments to be passed to Cargo build scripts. We don't want the build
+ scripts to generate a bunch of `.profraw` files.
+
+- We pass `--release` to Cargo because that's where PGO makes the most sense.
+ In theory, PGO can also be done on debug builds but there is little reason
+ to do so.
+
+- It is recommended to use *absolute paths* for the argument of
+ `-Cprofile-generate` and `-Cprofile-use`. Cargo can invoke `rustc` with
+ varying working directories, meaning that `rustc` will not be able to find
+ the supplied `.profdata` file. With absolute paths this is not an issue.
+
+- It is good practice to make sure that there is no left-over profiling data
+ from previous compilation sessions. Just deleting the directory is a simple
+ way of doing so (see `STEP 0` below).
+
+This is what the entire workflow looks like:
+
+```bash
+# STEP 0: Make sure there is no left-over profiling data from previous runs
+rm -rf /tmp/pgo-data
+
+# STEP 1: Build the instrumented binaries
+RUSTFLAGS="-Cprofile-generate=/tmp/pgo-data" \
+ cargo build --release --target=x86_64-unknown-linux-gnu
+
+# STEP 2: Run the instrumented binaries with some typical data
+./target/x86_64-unknown-linux-gnu/release/myprogram mydata1.csv
+./target/x86_64-unknown-linux-gnu/release/myprogram mydata2.csv
+./target/x86_64-unknown-linux-gnu/release/myprogram mydata3.csv
+
+# STEP 3: Merge the `.profraw` files into a `.profdata` file
+llvm-profdata merge -o /tmp/pgo-data/merged.profdata /tmp/pgo-data
+
+# STEP 4: Use the `.profdata` file for guiding optimizations
+RUSTFLAGS="-Cprofile-use=/tmp/pgo-data/merged.profdata" \
+ cargo build --release --target=x86_64-unknown-linux-gnu
+```
+
+### Troubleshooting
+
+- It is recommended to pass `-Cllvm-args=-pgo-warn-missing-function` during the
+ `-Cprofile-use` phase. LLVM by default does not warn if it cannot find
+ profiling data for a given function. Enabling this warning will make it
+ easier to spot errors in your setup.
+
+- There is a [known issue](https://github.com/rust-lang/cargo/issues/7416) in
+ Cargo prior to version 1.39 that will prevent PGO from working correctly. Be
+ sure to use Cargo 1.39 or newer when doing PGO.
+
+## Further Reading
+
+`rustc`'s PGO support relies entirely on LLVM's implementation of the feature
+and is equivalent to what Clang offers via the `-fprofile-generate` /
+`-fprofile-use` flags. The [Profile Guided Optimization][clang-pgo] section
+in Clang's documentation is therefore an interesting read for anyone who wants
+to use PGO with Rust.
+
+[clang-pgo]: https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization
diff --git a/src/doc/rustc/src/target-tier-policy.md b/src/doc/rustc/src/target-tier-policy.md
new file mode 100644
index 000000000..53d0470fa
--- /dev/null
+++ b/src/doc/rustc/src/target-tier-policy.md
@@ -0,0 +1,663 @@
+# Target Tier Policy
+
+## Table of Contents
+
+* [General](#general)
+* [Tier 3 target policy](#tier-3-target-policy)
+* [Tier 2 target policy](#tier-2-target-policy)
+ * [Tier 2 with host tools](#tier-2-with-host-tools)
+* [Tier 1 target policy](#tier-1-target-policy)
+ * [Tier 1 with host tools](#tier-1-with-host-tools)
+
+## General
+
+Rust provides three tiers of target support:
+
+- Rust provides no guarantees about tier 3 targets; they exist in the codebase,
+ but may or may not build.
+- Rust's continuous integration checks that tier 2 targets will always build,
+ but they may or may not pass tests.
+- Rust's continuous integration checks that tier 1 targets will always build
+ and pass tests.
+
+Adding a new tier 3 target imposes minimal requirements; we focus primarily on
+avoiding disruption to other ongoing Rust development.
+
+Tier 2 and tier 1 targets place work on Rust project developers as a whole, to
+avoid breaking the target. The broader Rust community may also feel more
+inclined to support higher-tier targets in their crates (though they are not
+obligated to do so). Thus, these tiers require commensurate and ongoing efforts
+from the maintainers of the target, to demonstrate value and to minimize any
+disruptions to ongoing Rust development.
+
+This policy defines the requirements for accepting a proposed target at a given
+level of support.
+
+Each tier builds on all the requirements from the previous tier, unless
+overridden by a stronger requirement. Targets at tier 2 and tier 1 may also
+provide *host tools* (such as `rustc` and `cargo`); each of those tiers
+includes a set of supplementary requirements that must be met if supplying host
+tools for the target. A target at tier 2 or tier 1 is not required to supply
+host tools, but if it does, it must meet the corresponding additional
+requirements for host tools.
+
+The policy for each tier also documents the Rust governance teams that must
+approve the addition of any target at that tier. Those teams are responsible
+for reviewing and evaluating the target, based on these requirements and their
+own judgment. Those teams may apply additional requirements, including
+subjective requirements, such as to deal with issues not foreseen by this
+policy. (Such requirements may subsequently motivate additions to this policy.)
+
+While these criteria attempt to document the policy, that policy still involves
+human judgment. Targets must fulfill the spirit of the requirements as well, as
+determined by the judgment of the approving teams. Reviewers and team members
+evaluating targets and target-specific patches should always use their own best
+judgment regarding the quality of work, and the suitability of a target for the
+Rust project. Neither this policy nor any decisions made regarding targets
+shall create any binding agreement or estoppel by any party.
+
+Before filing an issue or pull request (PR) to introduce or promote a target,
+the target should already meet the corresponding tier requirements. This does
+not preclude an existing target's maintainers using issues (on the Rust
+repository or otherwise) to track requirements that have not yet been met, as
+appropriate; however, before officially proposing the introduction or promotion
+of a target, it should meet all of the necessary requirements. A target
+proposal must quote the corresponding requirements verbatim and respond to them
+as part of explaining how the target meets those requirements. (For the
+requirements that simply state that the target or the target developers must
+not do something, it suffices to acknowledge the requirement.)
+
+For a list of all supported targets and their corresponding tiers ("tier 3",
+"tier 2", "tier 2 with host tools", "tier 1", or "tier 1 with host tools"), see
+[platform support](platform-support.md).
+
+Several parts of this policy require providing target-specific documentation.
+Such documentation should typically appear in a subdirectory of the
+platform-support section of this rustc manual, with a link from the target's
+entry in [platform support](platform-support.md). Use
+[TEMPLATE.md](platform-support/TEMPLATE.md) as a base, and see other
+documentation in that directory for examples.
+
+Note that a target must have already received approval for the next lower tier,
+and spent a reasonable amount of time at that tier, before making a proposal
+for promotion to the next higher tier; this is true even if a target meets the
+requirements for several tiers at once. This policy leaves the precise
+interpretation of "reasonable amount of time" up to the approving teams; those
+teams may scale the amount of time required based on their confidence in the
+target and its demonstrated track record at its current tier. At a minimum,
+multiple stable releases of Rust should typically occur between promotions of a
+target.
+
+The availability or tier of a target in stable Rust is not a hard stability
+guarantee about the future availability or tier of that target. Higher-level
+target tiers are an increasing commitment to the support of a target, and we
+will take that commitment and potential disruptions into account when
+evaluating the potential demotion or removal of a target that has been part of
+a stable release. The promotion or demotion of a target will not generally
+affect existing stable releases, only current development and future releases.
+
+In this policy, the words "must" and "must not" specify absolute requirements
+that a target must meet to qualify for a tier. The words "should" and "should
+not" specify requirements that apply in almost all cases, but for which the
+approving teams may grant an exception for good reason. The word "may"
+indicates something entirely optional, and does not indicate guidance or
+recommendations. This language is based on [IETF RFC
+2119](https://tools.ietf.org/html/rfc2119).
+
+## Tier 3 target policy
+
+At this tier, the Rust project provides no official support for a target, so we
+place minimal requirements on the introduction of targets.
+
+A proposed new tier 3 target must be reviewed and approved by a member of the
+compiler team based on these requirements. The reviewer may choose to gauge
+broader compiler team consensus via a [Major Change Proposal (MCP)][MCP].
+
+A proposed target or target-specific patch that substantially changes code
+shared with other targets (not just target-specific code) must be reviewed and
+approved by the appropriate team for that shared code before acceptance.
+
+- A tier 3 target must have a designated developer or developers (the "target
+ maintainers") on record to be CCed when issues arise regarding the target.
+ (The mechanism to track and CC such developers may evolve over time.)
+- Targets must use naming consistent with any existing targets; for instance, a
+ target for the same CPU or OS as an existing Rust target should use the same
+ name for that CPU or OS. Targets should normally use the same names and
+ naming conventions as used elsewhere in the broader ecosystem beyond Rust
+ (such as in other toolchains), unless they have a very good reason to
+ diverge. Changing the name of a target can be highly disruptive, especially
+ once the target reaches a higher tier, so getting the name right is important
+ even for a tier 3 target.
+ - Target names should not introduce undue confusion or ambiguity unless
+ absolutely necessary to maintain ecosystem compatibility. For example, if
+ the name of the target makes people extremely likely to form incorrect
+ beliefs about what it targets, the name should be changed or augmented to
+ disambiguate it.
+- Tier 3 targets may have unusual requirements to build or use, but must not
+ create legal issues or impose onerous legal terms for the Rust project or for
+ Rust developers or users.
+ - The target must not introduce license incompatibilities.
+ - Anything added to the Rust repository must be under the standard Rust
+ license (`MIT OR Apache-2.0`).
+ - The target must not cause the Rust tools or libraries built for any other
+ host (even when supporting cross-compilation to the target) to depend
+ on any new dependency less permissive than the Rust licensing policy. This
+ applies whether the dependency is a Rust crate that would require adding
+ new license exceptions (as specified by the `tidy` tool in the
+ rust-lang/rust repository), or whether the dependency is a native library
+ or binary. In other words, the introduction of the target must not cause a
+ user installing or running a version of Rust or the Rust tools to be
+ subject to any new license requirements.
+ - Compiling, linking, and emitting functional binaries, libraries, or other
+ code for the target (whether hosted on the target itself or cross-compiling
+ from another target) must not depend on proprietary (non-FOSS) libraries.
+ Host tools built for the target itself may depend on the ordinary runtime
+ libraries supplied by the platform and commonly used by other applications
+ built for the target, but those libraries must not be required for code
+ generation for the target; cross-compilation to the target must not require
+ such libraries at all. For instance, `rustc` built for the target may
+ depend on a common proprietary C runtime library or console output library,
+ but must not depend on a proprietary code generation library or code
+ optimization library. Rust's license permits such combinations, but the
+ Rust project has no interest in maintaining such combinations within the
+ scope of Rust itself, even at tier 3.
+ - "onerous" here is an intentionally subjective term. At a minimum, "onerous"
+ legal/licensing terms include but are *not* limited to: non-disclosure
+ requirements, non-compete requirements, contributor license agreements
+ (CLAs) or equivalent, "non-commercial"/"research-only"/etc terms,
+ requirements conditional on the employer or employment of any particular
+ Rust developers, revocable terms, any requirements that create liability
+ for the Rust project or its developers or users, or any requirements that
+ adversely affect the livelihood or prospects of the Rust project or its
+ developers or users.
+- Neither this policy nor any decisions made regarding targets shall create any
+ binding agreement or estoppel by any party. If any member of an approving
+ Rust team serves as one of the maintainers of a target, or has any legal or
+ employment requirement (explicit or implicit) that might affect their
+ decisions regarding a target, they must recuse themselves from any approval
+ decisions regarding the target's tier status, though they may otherwise
+ participate in discussions.
+ - This requirement does not prevent part or all of this policy from being
+ cited in an explicit contract or work agreement (e.g. to implement or
+ maintain support for a target). This requirement exists to ensure that a
+ developer or team responsible for reviewing and approving a target does not
+ face any legal threats or obligations that would prevent them from freely
+ exercising their judgment in such approval, even if such judgment involves
+ subjective matters or goes beyond the letter of these requirements.
+- Tier 3 targets should attempt to implement as much of the standard libraries
+ as possible and appropriate (`core` for most targets, `alloc` for targets
+ that can support dynamic memory allocation, `std` for targets with an
+ operating system or equivalent layer of system-provided functionality), but
+ may leave some code unimplemented (either unavailable or stubbed out as
+ appropriate), whether because the target makes it impossible to implement or
+ challenging to implement. The authors of pull requests are not obligated to
+ avoid calling any portions of the standard library on the basis of a tier 3
+ target not implementing those portions.
+- The target must provide documentation for the Rust community explaining how
+ to build for the target, using cross-compilation if possible. If the target
+ supports running binaries, or running tests (even if they do not pass), the
+ documentation must explain how to run such binaries or tests for the target,
+ using emulation if possible or dedicated hardware if necessary.
+- Tier 3 targets must not impose burden on the authors of pull requests, or
+ other developers in the community, to maintain the target. In particular,
+ do not post comments (automated or manual) on a PR that derail or suggest a
+ block on the PR based on a tier 3 target. Do not send automated messages or
+ notifications (via any medium, including via `@`) to a PR author or others
+ involved with a PR regarding a tier 3 target, unless they have opted into
+ such messages.
+ - Backlinks such as those generated by the issue/PR tracker when linking to
+ an issue or PR are not considered a violation of this policy, within
+ reason. However, such messages (even on a separate repository) must not
+ generate notifications to anyone involved with a PR who has not requested
+ such notifications.
+- Patches adding or updating tier 3 targets must not break any existing tier 2
+ or tier 1 target, and must not knowingly break another tier 3 target without
+ approval of either the compiler team or the maintainers of the other tier 3
+ target.
+ - In particular, this may come up when working on closely related targets,
+ such as variations of the same architecture with different features. Avoid
+ introducing unconditional uses of features that another variation of the
+ target may not have; use conditional compilation or runtime detection, as
+ appropriate, to let each target run code supported by that target.
+
+If a tier 3 target stops meeting these requirements, or the target maintainers
+no longer have interest or time, or the target shows no signs of activity and
+has not built for some time, or removing the target would improve the quality
+of the Rust codebase, we may post a PR to remove it; any such PR will be CCed
+to the target maintainers (and potentially other people who have previously
+worked on the target), to check potential interest in improving the situation.
+
+## Tier 2 target policy
+
+At this tier, the Rust project guarantees that a target builds, and will reject
+patches that fail to build on a target. Thus, we place requirements that ensure
+the target will not block forward progress of the Rust project.
+
+A proposed new tier 2 target must be reviewed and approved by the compiler team
+based on these requirements. Such review and approval may occur via a [Major
+Change Proposal (MCP)][MCP].
+
+In addition, the infrastructure team must approve the integration of the target
+into Continuous Integration (CI), and the tier 2 CI-related requirements. This
+review and approval may take place in a PR adding the target to CI, or simply
+by an infrastructure team member reporting the outcome of a team discussion.
+
+- A tier 2 target must have value to people other than its maintainers. (It may
+ still be a niche target, but it must not be exclusively useful for an
+ inherently closed group.)
+- A tier 2 target must have a designated team of developers (the "target
+ maintainers") available to consult on target-specific build-breaking issues,
+ or if necessary to develop target-specific language or library implementation
+ details. This team must have at least 2 developers.
+ - The target maintainers should not only fix target-specific issues, but
+ should use any such issue as an opportunity to educate the Rust community
+ about portability to their target, and enhance documentation of the target.
+- The target must not place undue burden on Rust developers not specifically
+ concerned with that target. Rust developers are expected to not gratuitously
+ break a tier 2 target, but are not expected to become experts in every tier 2
+ target, and are not expected to provide target-specific implementations for
+ every tier 2 target.
+- The target must provide documentation for the Rust community explaining how
+ to build for the target using cross-compilation, and explaining how to run
+ tests for the target. If at all possible, this documentation should show how
+ to run Rust programs and tests for the target using emulation, to allow
+ anyone to do so. If the target cannot be feasibly emulated, the documentation
+ should explain how to obtain and work with physical hardware, cloud systems,
+ or equivalent.
+- The target must document its baseline expectations for the features or
+ versions of CPUs, operating systems, libraries, runtime environments, and
+ similar.
+- If introducing a new tier 2 or higher target that is identical to an existing
+ Rust target except for the baseline expectations for the features or versions
+ of CPUs, operating systems, libraries, runtime environments, and similar,
+ then the proposed target must document to the satisfaction of the approving
+ teams why the specific difference in baseline expectations provides
+ sufficient value to justify a separate target.
+ - Note that in some cases, based on the usage of existing targets within the
+ Rust community, Rust developers or a target's maintainers may wish to
+ modify the baseline expectations of a target, or split an existing target
+ into multiple targets with different baseline expectations. A proposal to
+ do so will be treated similarly to the analogous promotion, demotion, or
+ removal of a target, according to this policy, with the same team approvals
+ required.
+ - For instance, if an OS version has become obsolete and unsupported, a
+ target for that OS may raise its baseline expectations for OS version
+ (treated as though removing a target corresponding to the older
+ versions), or a target for that OS may split out support for older OS
+ versions into a lower-tier target (treated as though demoting a target
+ corresponding to the older versions, and requiring justification for a
+ new target at a lower tier for the older OS versions).
+- Tier 2 targets must not leave any significant portions of `core` or the
+ standard library unimplemented or stubbed out, unless they cannot possibly be
+ supported on the target.
+ - The right approach to handling a missing feature from a target may depend
+ on whether the target seems likely to develop the feature in the future. In
+ some cases, a target may be co-developed along with Rust support, and Rust
+ may gain new features on the target as that target gains the capabilities
+ to support those features.
+ - As an exception, a target identical to an existing tier 1 target except for
+ lower baseline expectations for the OS, CPU, or similar, may propose to
+ qualify as tier 2 (but not higher) without support for `std` if the target
+ will primarily be used in `no_std` applications, to reduce the support
+ burden for the standard library. In this case, evaluation of the proposed
+ target's value will take this limitation into account.
+- The code generation backend for the target should not have deficiencies that
+ invalidate Rust safety properties, as evaluated by the Rust compiler team.
+ (This requirement does not apply to arbitrary security enhancements or
+ mitigations provided by code generation backends, only to those properties
+ needed to ensure safe Rust code cannot cause undefined behavior or other
+ unsoundness.) If this requirement does not hold, the target must clearly and
+ prominently document any such limitations as part of the target's entry in
+ the target tier list, and ideally also via a failing test in the testsuite.
+ The Rust compiler team must be satisfied with the balance between these
+ limitations and the difficulty of implementing the necessary features.
+ - For example, if Rust relies on a specific code generation feature to ensure
+ that safe code cannot overflow the stack, the code generation for the
+ target should support that feature.
+ - If the Rust compiler introduces new safety properties (such as via new
+ capabilities of a compiler backend), the Rust compiler team will determine
+ if they consider those new safety properties a best-effort improvement for
+ specific targets, or a required property for all Rust targets. In the
+ latter case, the compiler team may require the maintainers of existing
+ targets to either implement and confirm support for the property or update
+ the target tier list with documentation of the missing property.
+- If the target supports C code, and the target has an interoperable calling
+ convention for C code, the Rust target must support that C calling convention
+ for the platform via `extern "C"`. The C calling convention does not need to
+ be the default Rust calling convention for the target, however.
+- The target must build reliably in CI, for all components that Rust's CI
+ considers mandatory.
+- The approving teams may additionally require that a subset of tests pass in
+ CI, such as enough to build a functional "hello world" program, `./x.py test
+ --no-run`, or equivalent "smoke tests". In particular, this requirement may
+ apply if the target builds host tools, or if the tests in question provide
+ substantial value via early detection of critical problems.
+- Building the target in CI must not take substantially longer than the current
+ slowest target in CI, and should not substantially raise the maintenance
+ burden of the CI infrastructure. This requirement is subjective, to be
+ evaluated by the infrastructure team, and will take the community importance
+ of the target into account.
+- Tier 2 targets should, if at all possible, support cross-compiling. Tier 2
+ targets should not require using the target as the host for builds, even if
+ the target supports host tools.
+- In addition to the legal requirements for all targets (specified in the tier
+ 3 requirements), because a tier 2 target typically involves the Rust project
+ building and supplying various compiled binaries, incorporating the target
+ and redistributing any resulting compiled binaries (e.g. built libraries,
+ host tools if any) must not impose any onerous license requirements on any
+ members of the Rust project, including infrastructure team members and those
+ operating CI systems. This is a subjective requirement, to be evaluated by
+ the approving teams.
+ - As an exception to this, if the target's primary purpose is to build
+ components for a Free and Open Source Software (FOSS) project licensed
+ under "copyleft" terms (terms which require licensing other code under
+ compatible FOSS terms), such as kernel modules or plugins, then the
+ standard libraries for the target may potentially be subject to copyleft
+ terms, as long as such terms are satisfied by Rust's existing practices of
+ providing full corresponding source code. Note that anything added to the
+ Rust repository itself must still use Rust's standard license terms.
+- Tier 2 targets must not impose burden on the authors of pull requests, or
+ other developers in the community, to ensure that tests pass for the target.
+ In particular, do not post comments (automated or manual) on a PR that derail
+ or suggest a block on the PR based on tests failing for the target. Do not
+ send automated messages or notifications (via any medium, including via `@`)
+ to a PR author or others involved with a PR regarding the PR breaking tests
+ on a tier 2 target, unless they have opted into such messages.
+ - Backlinks such as those generated by the issue/PR tracker when linking to
+ an issue or PR are not considered a violation of this policy, within
+ reason. However, such messages (even on a separate repository) must not
+ generate notifications to anyone involved with a PR who has not requested
+ such notifications.
+- The target maintainers should regularly run the testsuite for the target, and
+ should fix any test failures in a reasonably timely fashion.
+- All requirements for tier 3 apply.
+
+A tier 2 target may be demoted or removed if it no longer meets these
+requirements. Any proposal for demotion or removal will be CCed to the target
+maintainers, and will be communicated widely to the Rust community before being
+dropped from a stable release. (The amount of time between such communication
+and the next stable release may depend on the nature and severity of the failed
+requirement, the timing of its discovery, whether the target has been part of a
+stable release yet, and whether the demotion or removal can be a planned and
+scheduled action.)
+
+In some circumstances, especially if the target maintainers do not respond in a
+timely fashion, Rust teams may land pull requests that temporarily disable some
+targets in the nightly compiler, in order to implement a feature not yet
+supported by those targets. (As an example, this happened when introducing the
+128-bit types `u128` and `i128`.) Such a pull request will include notification
+and coordination with the maintainers of such targets, and will ideally happen
+towards the beginning of a new development cycle to give maintainers time to
+update their targets. The maintainers of such targets will then be expected to
+implement the corresponding target-specific support in order to re-enable the
+target. If the maintainers of such targets cannot provide such support in time
+for the next stable release, this may result in demoting or removing the
+targets.
+
+### Tier 2 with host tools
+
+Some tier 2 targets may additionally have binaries built to run on them as a
+host (such as `rustc` and `cargo`). This allows the target to be used as a
+development platform, not just a compilation target.
+
+A proposed new tier 2 target with host tools must be reviewed and approved by
+the compiler team based on these requirements. Such review and approval may
+occur via a [Major Change Proposal (MCP)][MCP].
+
+In addition, the infrastructure team must approve the integration of the
+target's host tools into Continuous Integration (CI), and the CI-related
+requirements for host tools. This review and approval may take place in a PR
+adding the target's host tools to CI, or simply by an infrastructure team
+member reporting the outcome of a team discussion.
+
+- Depending on the target, its capabilities, its performance, and the
+ likelihood of use for any given tool, the host tools provided for a tier 2
+ target may include only `rustc` and `cargo`, or may include additional tools
+ such as `clippy` and `rustfmt`.
+- Approval of host tools will take into account the additional time required to
+ build the host tools, and the substantial additional storage required for the
+ host tools.
+- The host tools must have direct value to people other than the target's
+ maintainers. (It may still be a niche target, but the host tools must not be
+ exclusively useful for an inherently closed group.) This requirement will be
+ evaluated independently from the corresponding tier 2 requirement.
+ - The requirement to provide "direct value" means that it does not suffice to
+ argue that having host tools will help the target's maintainers more easily
+ provide the target to others. The tools themselves must provide value to
+ others.
+- There must be a reasonable expectation that the host tools will be used, for
+ purposes other than to prove that they can be used.
+- The host tools must build and run reliably in CI (for all components that
+ Rust's CI considers mandatory), though they may or may not pass tests.
+- Building host tools for the target must not take substantially longer than
+ building host tools for other targets, and should not substantially raise the
+ maintenance burden of the CI infrastructure.
+- The host tools must provide a substantively similar experience as on other
+ targets, subject to reasonable target limitations.
+ - Adding a substantively different interface to an existing tool, or a
+ target-specific interface to the functionality of an existing tool,
+ requires design and implementation approval (e.g. RFC/MCP) from the
+ appropriate approving teams for that tool.
+ - Such an interface should have a design that could potentially work for
+ other targets with similar properties.
+ - This should happen separately from the review and approval of the target,
+ to simplify the target review and approval processes, and to simplify the
+ review and approval processes for the proposed new interface.
+ - By way of example, a target that runs within a sandbox may need to modify
+ the handling of files, tool invocation, and similar to meet the
+ expectations and conventions of the sandbox, but must not introduce a
+ separate "sandboxed compilation" interface separate from the CLI interface
+ without going through the normal approval process for such an interface.
+ Such an interface should take into account potential other targets with
+ similar sandboxes.
+- If the host tools for the platform would normally be expected to be signed or
+ equivalent (e.g. if running unsigned binaries or similar involves a
+ "developer mode" or an additional prompt), it must be possible for the Rust
+ project's automated builds to apply the appropriate signature process,
+ without any manual intervention by either Rust developers, target
+ maintainers, or a third party. This process must meet the approval of the
+ infrastructure team.
+ - This process may require one-time or semi-regular manual steps by the
+ infrastructure team, such as registration or renewal of a signing key. Any
+ such manual process must meet the approval of the infrastructure team.
+ - This process may require the execution of a legal agreement with the
+ signature provider. Such a legal agreement may be revocable, and may
+ potentially require a nominal fee, but must not be otherwise onerous. Any
+ such legal agreement must meet the approval of the infrastructure team.
+ (The infrastructure team is not expected or required to sign binding legal
+ agreements on behalf of the Rust project; this review and approval exists
+ to ensure no terms are onerous or cause problems for infrastructure,
+ especially if such terms may impose requirements or obligations on people
+ who have access to target-specific infrastructure.)
+ - Changes to this process, or to any legal agreements involved, may
+ cause a target to stop meeting this requirement.
+ - This process involved must be available under substantially similar
+ non-onerous terms to the general public. Making it available exclusively to
+ the Rust project does not suffice.
+ - This requirement exists to ensure that Rust builds, including nightly
+ builds, can meet the necessary requirements to allow users to smoothly run
+ the host tools.
+- Providing host tools does not exempt a target from requirements to support
+ cross-compilation if at all possible.
+- All requirements for tier 2 apply.
+
+A target may be promoted directly from tier 3 to tier 2 with host tools if it
+meets all the necessary requirements, but doing so may introduce substantial
+additional complexity. If in doubt, the target should qualify for tier 2
+without host tools first.
+
+## Tier 1 target policy
+
+At this tier, the Rust project guarantees that a target builds and passes all
+tests, and will reject patches that fail to build or pass the testsuite on a
+target. We hold tier 1 targets to our highest standard of requirements.
+
+A proposed new tier 1 target must be reviewed and approved by the compiler team
+based on these requirements. In addition, the release team must approve the
+viability and value of supporting the target. For a tier 1 target, this will
+typically take place via a full RFC proposing the target, to be jointly
+reviewed and approved by the compiler team and release team.
+
+In addition, the infrastructure team must approve the integration of the target
+into Continuous Integration (CI), and the tier 1 CI-related requirements. This
+review and approval may take place in a PR adding the target to CI, by an
+infrastructure team member reporting the outcome of a team discussion, or by
+including the infrastructure team in the RFC proposing the target.
+
+- Tier 1 targets must have substantial, widespread interest within the
+ developer community, and must serve the ongoing needs of multiple production
+ users of Rust across multiple organizations or projects. These requirements
+ are subjective, and determined by consensus of the approving teams. A tier 1
+ target may be demoted or removed if it becomes obsolete or no longer meets
+ this requirement.
+- The target maintainer team must include at least 3 developers.
+- The target must build and pass tests reliably in CI, for all components that
+ Rust's CI considers mandatory.
+ - The target must not disable an excessive number of tests or pieces of tests
+ in the testsuite in order to do so. This is a subjective requirement.
+ - If the target does not have host tools support, or if the target has low
+ performance, the infrastructure team may choose to have CI cross-compile
+ the testsuite from another platform, and then run the compiled tests
+ either natively or via accurate emulation. However, the approving teams may
+ take such performance considerations into account when determining the
+ viability of the target or of its host tools.
+- The target must provide as much of the Rust standard library as is feasible
+ and appropriate to provide. For instance, if the target can support dynamic
+ memory allocation, it must provide an implementation of `alloc` and the
+ associated data structures.
+- Building the target and running the testsuite for the target must not take
+ substantially longer than other targets, and should not substantially raise
+ the maintenance burden of the CI infrastructure.
+ - In particular, if building the target takes a reasonable amount of time,
+ but the target cannot run the testsuite in a timely fashion due to low
+ performance of either native code or accurate emulation, that alone may
+ prevent the target from qualifying as tier 1.
+- If running the testsuite requires additional infrastructure (such as physical
+ systems running the target), the target maintainers must arrange to provide
+ such resources to the Rust project, to the satisfaction and approval of the
+ Rust infrastructure team.
+ - Such resources may be provided via cloud systems, via emulation, or via
+ physical hardware.
+ - If the target requires the use of emulation to meet any of the tier
+ requirements, the approving teams for those requirements must have high
+ confidence in the accuracy of the emulation, such that discrepancies
+ between emulation and native operation that affect test results will
+ constitute a high-priority bug in either the emulation or the
+ implementation of the target.
+ - If it is not possible to run the target via emulation, these resources must
+ additionally be sufficient for the Rust infrastructure team to make them
+ available for access by Rust team members, for the purposes of development
+ and testing. (Note that the responsibility for doing target-specific
+ development to keep the target well maintained remains with the target
+ maintainers. This requirement ensures that it is possible for other
+ Rust developers to test the target, but does not obligate other Rust
+ developers to make target-specific fixes.)
+ - Resources provided for CI and similar infrastructure must be available for
+ continuous exclusive use by the Rust project. Resources provided
+ for access by Rust team members for development and testing must be
+ available on an exclusive basis when in use, but need not be available on a
+ continuous basis when not in use.
+- Tier 1 targets must not have a hard requirement for signed, verified, or
+ otherwise "approved" binaries. Developers must be able to build, run, and
+ test binaries for the target on systems they control, or provide such
+ binaries for others to run. (Doing so may require enabling some appropriate
+ "developer mode" on such systems, but must not require the payment of any
+ additional fee or other consideration, or agreement to any onerous legal
+ agreements.)
+ - The Rust project may decide to supply appropriately signed binaries if
+ doing so provides a smoother experience for developers using the target,
+ and a tier 2 target with host tools already requires providing appropriate
+ mechanisms that enable our infrastructure to provide such signed binaries.
+ However, this additional tier 1 requirement ensures that Rust developers
+ can develop and test Rust software for the target (including Rust itself),
+ and that development or testing for the target is not limited.
+- All requirements for tier 2 apply.
+
+A tier 1 target may be demoted if it no longer meets these requirements but
+still meets the requirements for a lower tier. Any proposal for demotion of a
+tier 1 target requires a full RFC process, with approval by the compiler and
+release teams. Any such proposal will be communicated widely to the Rust
+community, both when initially proposed and before being dropped from a stable
+release. A tier 1 target is highly unlikely to be directly removed without
+first being demoted to tier 2 or tier 3. (The amount of time between such
+communication and the next stable release may depend on the nature and severity
+of the failed requirement, the timing of its discovery, whether the target has
+been part of a stable release yet, and whether the demotion or removal can be a
+planned and scheduled action.)
+
+Raising the baseline expectations of a tier 1 target (such as the minimum CPU
+features or OS version required) requires the approval of the compiler and
+release teams, and should be widely communicated as well, but does not
+necessarily require a full RFC.
+
+### Tier 1 with host tools
+
+Some tier 1 targets may additionally have binaries built to run on them as a
+host (such as `rustc` and `cargo`). This allows the target to be used as a
+development platform, not just a compilation target.
+
+A proposed new tier 1 target with host tools must be reviewed and approved by
+the compiler team based on these requirements. In addition, the release team
+must approve the viability and value of supporting host tools for the target.
+For a tier 1 target, this will typically take place via a full RFC proposing
+the target, to be jointly reviewed and approved by the compiler team and
+release team.
+
+In addition, the infrastructure team must approve the integration of the
+target's host tools into Continuous Integration (CI), and the CI-related
+requirements for host tools. This review and approval may take place in a PR
+adding the target's host tools to CI, by an infrastructure team member
+reporting the outcome of a team discussion, or by including the infrastructure
+team in the RFC proposing the target.
+
+- Tier 1 targets with host tools should typically include all of the additional
+ tools such as `clippy` and `rustfmt`, unless there is a target-specific
+ reason why a tool cannot possibly make sense for the target.
+ - Unlike with tier 2, for tier 1 we will not exclude specific tools on the
+ sole basis of them being less likely to be used; rather, we'll take that
+ into account when considering whether the target should be at tier 1 with
+ host tools. In general, on any tier 1 target with host tools, people
+ should be able to expect to find and install all the same components that
+ they would for any other tier 1 target with host tools.
+- Approval of host tools will take into account the additional time required to
+ build the host tools, and the substantial additional storage required for the
+ host tools.
+- Host tools for the target must have substantial, widespread interest within
+ the developer community, and must serve the ongoing needs of multiple
+ production users of Rust across multiple organizations or projects. These
+ requirements are subjective, and determined by consensus of the approving
+ teams. This requirement will be evaluated independently from the
+ corresponding tier 1 requirement; it is possible for a target to have
+ sufficient interest for cross-compilation, but not have sufficient interest
+ for native compilation. The host tools may be dropped if they no longer meet
+ this requirement, even if the target otherwise qualifies as tier 1.
+- The host tools must build, run, and pass tests reliably in CI, for all
+ components that Rust's CI considers mandatory.
+ - The target must not disable an excessive number of tests or pieces of tests
+ in the testsuite in order to do so. This is a subjective requirement.
+- Building the host tools and running the testsuite for the host tools must not
+ take substantially longer than other targets, and should not substantially raise
+ the maintenance burden of the CI infrastructure.
+ - In particular, if building the target's host tools takes a reasonable
+ amount of time, but the target cannot run the testsuite in a timely fashion
+ due to low performance of either native code or accurate emulation, that
+ alone may prevent the target from qualifying as tier 1 with host tools.
+- Providing host tools does not exempt a target from requirements to support
+ cross-compilation if at all possible.
+- All requirements for tier 2 targets with host tools apply.
+- All requirements for tier 1 apply.
+
+A target seeking promotion to tier 1 with host tools should typically either be
+tier 2 with host tools or tier 1 without host tools, to reduce the number of
+requirements to simultaneously review and approve.
+
+In addition to the general process for demoting a tier 1 target, a tier 1
+target with host tools may be demoted (including having its host tools dropped,
+or being demoted to tier 2 with host tools) if it no longer meets these
+requirements but still meets the requirements for a lower tier. Any proposal
+for demotion of a tier 1 target (with or without host tools) requires a full
+RFC process, with approval by the compiler and release teams. Any such proposal
+will be communicated widely to the Rust community, both when initially proposed
+and before being dropped from a stable release.
+
+[MCP]: https://forge.rust-lang.org/compiler/mcp.html
diff --git a/src/doc/rustc/src/targets/built-in.md b/src/doc/rustc/src/targets/built-in.md
new file mode 100644
index 000000000..344048ee4
--- /dev/null
+++ b/src/doc/rustc/src/targets/built-in.md
@@ -0,0 +1,15 @@
+# Built-in Targets
+
+`rustc` ships with the ability to compile to many targets automatically, we
+call these "built-in" targets, and they generally correspond to targets that
+the team is supporting directly. To see the list of built-in targets, you can
+run `rustc --print target-list`.
+
+Typically, a target needs a compiled copy of the Rust standard library to
+work. If using [rustup], then check out the documentation on
+[Cross-compilation][rustup-cross] on how to download a pre-built standard
+library built by the official Rust distributions. Most targets will need a
+system linker, and possibly other things.
+
+[rustup]: https://github.com/rust-lang/rustup
+[rustup-cross]: https://rust-lang.github.io/rustup/cross-compilation.html
diff --git a/src/doc/rustc/src/targets/custom.md b/src/doc/rustc/src/targets/custom.md
new file mode 100644
index 000000000..27ef2f49e
--- /dev/null
+++ b/src/doc/rustc/src/targets/custom.md
@@ -0,0 +1,17 @@
+# Custom Targets
+
+If you'd like to build for a target that is not yet supported by `rustc`, you can use a
+"custom target specification" to define a target. These target specification files
+are JSON. To see the JSON for the host target, you can run:
+
+```bash
+rustc +nightly -Z unstable-options --print target-spec-json
+```
+
+To see it for a different target, add the `--target` flag:
+
+```bash
+rustc +nightly -Z unstable-options --target=wasm32-unknown-unknown --print target-spec-json
+```
+
+To use a custom target, see the (unstable) [`build-std` feature](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std) of `cargo`.
diff --git a/src/doc/rustc/src/targets/index.md b/src/doc/rustc/src/targets/index.md
new file mode 100644
index 000000000..5859df83f
--- /dev/null
+++ b/src/doc/rustc/src/targets/index.md
@@ -0,0 +1,19 @@
+# Targets
+
+`rustc` is a cross-compiler by default. This means that you can use any compiler to build for any
+architecture. The list of *targets* are the possible architectures that you can build for.
+
+To see all the options that you can set with a target, see the docs
+[here](https://doc.rust-lang.org/nightly/nightly-rustc/rustc_target/spec/struct.Target.html).
+
+To compile to a particular target, use the `--target` flag:
+
+```bash
+$ rustc src/main.rs --target=wasm32-unknown-unknown
+```
+## Target Features
+`x86`, and `ARMv8` are two popular CPU architectures. Their instruction sets form a common baseline across most CPUs. However, some CPUs extend these with custom instruction sets, e.g. vector (`AVX`), bitwise manipulation (`BMI`) or cryptographic (`AES`).
+
+Developers, who know on which CPUs their compiled code is going to run can choose to add (or remove) CPU specific instruction sets via the `-C target-feature=val` flag.
+
+Please note, that this flag is generally considered as unsafe. More details can be found in [this section](known-issues.md).
diff --git a/src/doc/rustc/src/targets/known-issues.md b/src/doc/rustc/src/targets/known-issues.md
new file mode 100644
index 000000000..89fd8ea6d
--- /dev/null
+++ b/src/doc/rustc/src/targets/known-issues.md
@@ -0,0 +1,13 @@
+# Known Issues
+This section informs you about known "gotchas". Keep in mind, that this section is (and always will be) incomplete. For suggestions and amendments, feel free to [contribute](../contributing.md) to this guide.
+
+## Target Features
+Most target-feature problems arise, when mixing code that have the target-feature _enabled_ with code that have it _disabled_. If you want to avoid undefined behavior, it is recommended to build _all code_ (including the standard library and imported crates) with a common set of target-features.
+
+By default, compiling your code with the `-C target-feature` flag will not recompile the entire standard library and/or imported crates with matching target features. Therefore, target features are generally considered as unsafe. Using `#[target_feature]` on individual functions makes the function unsafe.
+
+Examples:
+
+| Target-Feature | Issue | Seen on | Description | Details |
+| -------------- | ----- | ------- | ----------- | ------- |
+| `+soft-float` <br> and <br> `-sse` | Segfaults and ABI mismatches | `x86` and `x86-64` | The `x86` and `x86_64` architecture uses SSE registers (aka `xmm`) for floating point operations. Using software emulated floats ("soft-floats") disables usage of `xmm` registers, but parts of Rust's core libraries (e.g. `std::f32` or `std::f64`) are compiled without soft-floats and expect parameters to be passed in `xmm` registers. This leads to ABI mismatches. <br><br> Attempting to compile with disabled SSE causes the same error, too. | [#63466](https://github.com/rust-lang/rust/issues/63466) |
diff --git a/src/doc/rustc/src/tests/index.md b/src/doc/rustc/src/tests/index.md
new file mode 100644
index 000000000..32baed9c9
--- /dev/null
+++ b/src/doc/rustc/src/tests/index.md
@@ -0,0 +1,320 @@
+# Tests
+
+`rustc` has a built-in facility for building and running tests for a crate.
+More information about writing and running tests may be found in the [Testing
+Chapter] of the Rust Programming Language book.
+
+Tests are written as free functions with the [`#[test]`
+attribute][attribute-test]. For example:
+
+```rust
+#[test]
+fn it_works() {
+ assert_eq!(2 + 2, 4);
+}
+```
+
+Tests "pass" if they return without an error. They "fail" if they [panic], or
+return a type such as [`Result`] that implements the [`Termination`] trait
+with a non-zero value.
+
+By passing the [`--test` option] to `rustc`, the compiler will build the crate
+in a special mode to construct an executable that will run the tests in the
+crate. The `--test` flag will make the following changes:
+
+* The crate will be built as a `bin` [crate type], forcing it to be an
+ executable.
+* Links the executable with [`libtest`], the test harness that is part of the
+ standard library, which handles running the tests.
+* Synthesizes a [`main` function] which will process command-line arguments
+ and run the tests. This new `main` function will replace any existing `main`
+ function as the entry point of the executable, though the existing `main`
+ will still be compiled.
+* Enables the [`test` cfg option], which allows your code to use conditional
+ compilation to detect if it is being built as a test.
+* Enables building of functions annotated with the [`test`][attribute-test]
+ and [`bench`](#benchmarks) attributes, which will be run by the test
+ harness.
+
+After the executable is created, you can run it to execute the tests and
+receive a report on what passes and fails. If you are using [Cargo] to manage
+your project, it has a built-in [`cargo test`] command which handles all of
+this automatically. An example of the output looks like this:
+
+```text
+running 4 tests
+test it_works ... ok
+test check_valid_args ... ok
+test invalid_characters ... ok
+test walks_the_dog ... ok
+
+test result: ok. 4 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
+```
+
+> **Note**: Tests must be built with the [`unwind` panic
+> strategy][panic-strategy]. This is because all tests run in the same
+> process, and they are intended to catch panics, which is not possible with
+> the `abort` strategy. See the unstable [`-Z panic-abort-tests`] option for
+> experimental support of the `abort` strategy by spawning tests in separate
+> processes.
+
+## Test attributes
+
+Tests are indicated using attributes on free functions. The following
+attributes are used for testing, see the linked documentation for more
+details:
+
+* [`#[test]`][attribute-test] — Indicates a function is a test to be run.
+* `#[bench]` — Indicates a function is a benchmark to be
+ run. Benchmarks are currently unstable and only available in the nightly
+ channel, see the [unstable docs][bench-docs] for more details.
+* [`#[should_panic]`][attribute-should_panic] — Indicates that the test
+ function will only pass if the function [panics][panic].
+* [`#[ignore]`][attribute-ignore] — Indicates that the test function will be
+ compiled, but not run by default. See the [`--ignored`](#--ignored) and
+ [`--include-ignored`](#--include-ignored) options to run these tests.
+
+## CLI arguments
+
+The libtest harness has several command-line arguments to control its
+behavior.
+
+> Note: When running with [`cargo test`], the libtest CLI arguments must be
+> passed after the `--` argument to differentiate between flags for Cargo and
+> those for the harness. For example: `cargo test -- --nocapture`
+
+### Filters
+
+Positional arguments (those without a `-` prefix) are treated as filters which
+will only run tests whose name matches one of those strings. The filter will
+match any substring found in the full path of the test function. For example,
+if the test function `it_works` is located in the module
+`utils::paths::tests`, then any of the filters `works`, `path`, `utils::`, or
+`utils::paths::tests::it_works` will match that test.
+
+See [Selection options](#selection-options) for more options to control which
+tests are run.
+
+### Action options
+
+The following options perform different actions other than running tests.
+
+#### `--list`
+
+Prints a list of all tests and benchmarks. Does not run any of the tests.
+[Filters](#filters) can be used to list only matching tests.
+
+#### `-h`, `--help`
+
+Displays usage information and command-line options.
+
+### Selection options
+
+The following options change how tests are selected.
+
+#### `--test`
+
+This is the default mode where all tests will be run as well as running all
+benchmarks with only a single iteration (to ensure the benchmark works,
+without taking the time to actually perform benchmarking). This can be
+combined with the `--bench` flag to run both tests and perform full
+benchmarking.
+
+#### `--bench`
+
+This runs in a mode where tests are ignored, and only runs benchmarks. This
+can be combined with `--test` to run both benchmarks and tests.
+
+#### `--exact`
+
+This forces [filters](#filters) to match the full path of the test exactly.
+For example, if the test `it_works` is in the module `utils::paths::tests`,
+then only the string `utils::paths::tests::it_works` will match that test.
+
+#### `--skip` _FILTER_
+
+Skips any tests whose name contains the given _FILTER_ string. This flag may
+be passed multiple times.
+
+#### `--ignored`
+
+Runs only tests that are marked with the [`ignore`
+attribute][attribute-ignore].
+
+#### `--include-ignored`
+
+Runs both [ignored](#--ignored) and non-ignored tests.
+
+#### `--exclude-should-panic`
+
+Excludes tests marked with the [`should_panic`
+attribute][attribute-should_panic].
+
+⚠️ 🚧 This option is [unstable](#unstable-options), and requires the `-Z
+unstable-options` flag. See [tracking issue
+#82348](https://github.com/rust-lang/rust/issues/82348) for more information.
+
+### Execution options
+
+The following options affect how tests are executed.
+
+#### `--test-threads` _NUM_THREADS_
+
+Sets the number of threads to use for running tests in parallel. By default,
+uses the amount of concurrency available on the hardware as indicated by
+[`available_parallelism`].
+
+This can also be specified with the `RUST_TEST_THREADS` environment variable.
+
+#### `--force-run-in-process`
+
+Forces the tests to run in a single process when using the [`abort` panic
+strategy][panic-strategy].
+
+⚠️ 🚧 This only works with the unstable [`-Z panic-abort-tests`] option, and
+requires the `-Z unstable-options` flag. See [tracking issue
+#67650](https://github.com/rust-lang/rust/issues/67650) for more information.
+
+#### `--ensure-time`
+
+⚠️ 🚧 This option is [unstable](#unstable-options), and requires the `-Z
+unstable-options` flag. See [tracking issue
+#64888](https://github.com/rust-lang/rust/issues/64888) and the [unstable
+docs](../../unstable-book/compiler-flags/report-time.html) for more information.
+
+#### `--shuffle`
+
+Runs the tests in random order, as opposed to the default alphabetical order.
+
+This may also be specified by setting the `RUST_TEST_SHUFFLE` environment
+variable to anything but `0`.
+
+The random number generator seed that is output can be passed to
+[`--shuffle-seed`](#--shuffle-seed-seed) to run the tests in the same order
+again.
+
+Note that `--shuffle` does not affect whether the tests are run in parallel. To
+run the tests in random order sequentially, use `--shuffle --test-threads 1`.
+
+⚠️ 🚧 This option is [unstable](#unstable-options), and requires the `-Z
+unstable-options` flag. See [tracking issue
+#89583](https://github.com/rust-lang/rust/issues/89583) for more information.
+
+#### `--shuffle-seed` _SEED_
+
+Like [`--shuffle`](#--shuffle), but seeds the random number generator with
+_SEED_. Thus, calling the test harness with `--shuffle-seed` _SEED_ twice runs
+the tests in the same order both times.
+
+_SEED_ is any 64-bit unsigned integer, for example, one produced by
+[`--shuffle`](#--shuffle).
+
+This can also be specified with the `RUST_TEST_SHUFFLE_SEED` environment
+variable.
+
+⚠️ 🚧 This option is [unstable](#unstable-options), and requires the `-Z
+unstable-options` flag. See [tracking issue
+#89583](https://github.com/rust-lang/rust/issues/89583) for more information.
+
+### Output options
+
+The following options affect the output behavior.
+
+#### `-q`, `--quiet`
+
+Displays one character per test instead of one line per test. This is an alias
+for [`--format=terse`](#--format-format).
+
+#### `--nocapture`
+
+Does not capture the stdout and stderr of the test, and allows tests to print
+to the console. Usually the output is captured, and only displayed if the test
+fails.
+
+This may also be specified by setting the `RUST_TEST_NOCAPTURE` environment
+variable to anything but `0`.
+
+#### `--show-output`
+
+Displays the stdout and stderr of successful tests after all tests have run.
+
+Contrast this with [`--nocapture`](#--nocapture) which allows tests to print
+*while they are running*, which can cause interleaved output if there are
+multiple tests running in parallel, `--show-output` ensures the output is
+contiguous, but requires waiting for all tests to finish.
+
+#### `--color` _COLOR_
+
+Control when colored terminal output is used. Valid options:
+
+* `auto`: Colorize if stdout is a tty and [`--nocapture`](#--nocapture) is not
+ used. This is the default.
+* `always`: Always colorize the output.
+* `never`: Never colorize the output.
+
+#### `--format` _FORMAT_
+
+Controls the format of the output. Valid options:
+
+* `pretty`: This is the default format, with one line per test.
+* `terse`: Displays only a single character per test. [`--quiet`](#-q---quiet)
+ is an alias for this option.
+* `json`: Emits JSON objects, one per line. ⚠️ 🚧 This option is
+ [unstable](#unstable-options), and requires the `-Z unstable-options` flag.
+ See [tracking issue #49359](https://github.com/rust-lang/rust/issues/49359)
+ for more information.
+
+#### `--logfile` _PATH_
+
+Writes the results of the tests to the given file.
+
+#### `--report-time`
+
+⚠️ 🚧 This option is [unstable](#unstable-options), and requires the `-Z
+unstable-options` flag. See [tracking issue
+#64888](https://github.com/rust-lang/rust/issues/64888) and the [unstable
+docs](../../unstable-book/compiler-flags/report-time.html) for more information.
+
+### Unstable options
+
+Some CLI options are added in an "unstable" state, where they are intended for
+experimentation and testing to determine if the option works correctly, has
+the right design, and is useful. The option may not work correctly, break, or
+change at any time. To signal that you acknowledge that you are using an
+unstable option, they require passing the `-Z unstable-options` command-line
+flag.
+
+## Benchmarks
+
+The libtest harness supports running benchmarks for functions annotated with
+the `#[bench]` attribute. Benchmarks are currently unstable, and only
+available on the [nightly channel]. More information may be found in the
+[unstable book][bench-docs].
+
+## Custom test frameworks
+
+Experimental support for using custom test harnesses is available on the
+[nightly channel]. See [tracking issue
+#50297](https://github.com/rust-lang/rust/issues/50297) and the
+[custom_test_frameworks documentation] for more information.
+
+[`--test` option]: ../command-line-arguments.md#option-test
+[`-Z panic-abort-tests`]: https://github.com/rust-lang/rust/issues/67650
+[`available_parallelism`]: ../../std/thread/fn.available_parallelism.html
+[`cargo test`]: ../../cargo/commands/cargo-test.html
+[`libtest`]: ../../test/index.html
+[`main` function]: ../../reference/crates-and-source-files.html#main-functions
+[`Result`]: ../../std/result/index.html
+[`Termination`]: ../../std/process/trait.Termination.html
+[`test` cfg option]: ../../reference/conditional-compilation.html#test
+[attribute-ignore]: ../../reference/attributes/testing.html#the-ignore-attribute
+[attribute-should_panic]: ../../reference/attributes/testing.html#the-should_panic-attribute
+[attribute-test]: ../../reference/attributes/testing.html#the-test-attribute
+[bench-docs]: ../../unstable-book/library-features/test.html
+[Cargo]: ../../cargo/index.html
+[crate type]: ../../reference/linkage.html
+[custom_test_frameworks documentation]: ../../unstable-book/language-features/custom-test-frameworks.html
+[nightly channel]: ../../book/appendix-07-nightly-rust.html
+[panic-strategy]: ../../book/ch09-01-unrecoverable-errors-with-panic.html
+[panic]: ../../book/ch09-01-unrecoverable-errors-with-panic.html
+[Testing Chapter]: ../../book/ch11-00-testing.html
diff --git a/src/doc/rustc/src/what-is-rustc.md b/src/doc/rustc/src/what-is-rustc.md
new file mode 100644
index 000000000..39a05cfe2
--- /dev/null
+++ b/src/doc/rustc/src/what-is-rustc.md
@@ -0,0 +1,68 @@
+# What is rustc?
+
+Welcome to "The rustc book"! `rustc` is the compiler for the Rust programming
+language, provided by the project itself. Compilers take your source code and
+produce binary code, either as a library or executable.
+
+Most Rust programmers don't invoke `rustc` directly, but instead do it through
+[Cargo](../cargo/index.html). It's all in service of `rustc` though! If you
+want to see how Cargo calls `rustc`, you can
+
+```bash
+$ cargo build --verbose
+```
+
+And it will print out each `rustc` invocation. This book can help you
+understand what each of these options does. Additionally, while most
+Rustaceans use Cargo, not all do: sometimes they integrate `rustc` into other
+build systems. This book should provide a guide to all of the options you'd
+need to do so.
+
+## Basic usage
+
+Let's say you've got a little hello world program in a file `hello.rs`:
+
+```rust
+fn main() {
+ println!("Hello, world!");
+}
+```
+
+To turn this source code into an executable, you can use `rustc`:
+
+```bash
+$ rustc hello.rs
+$ ./hello # on a *NIX
+$ .\hello.exe # on Windows
+```
+
+Note that we only ever pass `rustc` the *crate root*, not every file we wish
+to compile. For example, if we had a `main.rs` that looked like this:
+
+```rust,ignore (needs-multiple-files)
+mod foo;
+
+fn main() {
+ foo::hello();
+}
+```
+
+And a `foo.rs` that had this:
+
+```rust,no_run
+pub fn hello() {
+ println!("Hello, world!");
+}
+```
+
+To compile this, we'd run this command:
+
+```bash
+$ rustc main.rs
+```
+
+No need to tell `rustc` about `foo.rs`; the `mod` statements give it
+everything that it needs. This is different than how you would use a C
+compiler, where you invoke the compiler on each file, and then link
+everything together. In other words, the *crate* is a translation unit, not a
+particular module.
diff --git a/src/doc/rustdoc.md b/src/doc/rustdoc.md
new file mode 100644
index 000000000..d4a25efec
--- /dev/null
+++ b/src/doc/rustdoc.md
@@ -0,0 +1,3 @@
+% Rust Documentation
+
+This has been moved [into the book](book/documentation.html).
diff --git a/src/doc/rustdoc/README.md b/src/doc/rustdoc/README.md
new file mode 100644
index 000000000..7d97d5e4a
--- /dev/null
+++ b/src/doc/rustdoc/README.md
@@ -0,0 +1,5 @@
+# Rustdoc
+
+This is documentation for rustdoc itself, written in mdbook format.
+To build the book, use `x.py doc src/doc/rustdoc`.
+To run doctests, use `x.py test src/doc/rustdoc`.
diff --git a/src/doc/rustdoc/book.toml b/src/doc/rustdoc/book.toml
new file mode 100644
index 000000000..45405a117
--- /dev/null
+++ b/src/doc/rustdoc/book.toml
@@ -0,0 +1,10 @@
+[book]
+src = "src"
+title = "The rustdoc book"
+
+[output.html]
+git-repository-url = "https://github.com/rust-lang/rust/tree/master/src/doc/rustdoc"
+
+[output.html.redirect]
+"/the-doc-attribute.html" = "write-documentation/the-doc-attribute.html"
+"/documentation-tests.html" = "write-documentation/documentation-tests.html"
diff --git a/src/doc/rustdoc/src/SUMMARY.md b/src/doc/rustdoc/src/SUMMARY.md
new file mode 100644
index 000000000..747cc629b
--- /dev/null
+++ b/src/doc/rustdoc/src/SUMMARY.md
@@ -0,0 +1,16 @@
+# The Rustdoc Book
+
+- [What is rustdoc?](what-is-rustdoc.md)
+- [Command-line arguments](command-line-arguments.md)
+- [How to read rustdoc output](how-to-read-rustdoc.md)
+- [How to write documentation](how-to-write-documentation.md)
+ - [What to include (and exclude)](write-documentation/what-to-include.md)
+ - [The `#[doc]` attribute](write-documentation/the-doc-attribute.md)
+ - [Linking to items by name](write-documentation/linking-to-items-by-name.md)
+ - [Documentation tests](write-documentation/documentation-tests.md)
+- [Rustdoc-specific lints](lints.md)
+- [Scraped examples](scraped-examples.md)
+- [Advanced features](advanced-features.md)
+- [Unstable features](unstable-features.md)
+- [Deprecated features](deprecated-features.md)
+- [References](references.md)
diff --git a/src/doc/rustdoc/src/advanced-features.md b/src/doc/rustdoc/src/advanced-features.md
new file mode 100644
index 000000000..dbf0baec0
--- /dev/null
+++ b/src/doc/rustdoc/src/advanced-features.md
@@ -0,0 +1,112 @@
+# Advanced features
+
+The features listed on this page fall outside the rest of the main categories.
+
+## `#[cfg(doc)]`: Documenting platform-specific or feature-specific information
+
+For conditional compilation, Rustdoc treats your crate the same way the compiler does. Only things
+from the host target are available (or from the given `--target` if present), and everything else is
+"filtered out" from the crate. This can cause problems if your crate is providing different things
+on different targets and you want your documentation to reflect all the available items you
+provide.
+
+If you want to make sure an item is seen by Rustdoc regardless of what platform it's targeting,
+you can apply `#[cfg(doc)]` to it. Rustdoc sets this whenever it's building documentation, so
+anything that uses that flag will make it into documentation it generates. To apply this to an item
+with other `#[cfg]` filters on it, you can write something like `#[cfg(any(windows, doc))]`.
+This will preserve the item either when built normally on Windows, or when being documented
+anywhere.
+
+Please note that this `cfg` is not passed to doctests.
+
+Example:
+
+```rust
+/// Token struct that can only be used on Windows.
+#[cfg(any(windows, doc))]
+pub struct WindowsToken;
+/// Token struct that can only be used on Unix.
+#[cfg(any(unix, doc))]
+pub struct UnixToken;
+```
+
+Here, the respective tokens can only be used by dependent crates on their respective platforms, but
+they will both appear in documentation.
+
+### Interactions between platform-specific docs
+
+Rustdoc does not have a magic way to compile documentation 'as-if' you'd run it once for each
+platform (such a magic wand has been called the ['holy grail of rustdoc'][#1998]). Instead,
+it sees *all* of your code at once, the same way the Rust compiler would if you passed it
+`--cfg doc`. However, Rustdoc has a trick up its sleeve to handle platform-specific code if it
+*does* receive it.
+
+To document your crate, Rustdoc only needs to know the public signature of your functions.
+In particular, it doesn't have to know how any of your functions are implemented, so it ignores
+all type errors and name resolution errors with function bodies. Note that this does *not*
+work for anything outside a function body: since Rustdoc documents your types, it has to
+know what those types are! For example, this code will work regardless of the platform:
+
+```rust,ignore (platform-specific,rustdoc-specific-behavior)
+pub fn f() {
+ use std::os::windows::ffi::OsStrExt;
+}
+```
+
+but this will not, because the unknown type is part of the function signature:
+
+```rust,ignore (platform-specific,rustdoc-specific-behavior)
+pub fn f() -> std::os::windows::ffi::EncodeWide<'static> {
+ unimplemented!()
+}
+```
+
+For a more realistic example of code this allows, see [the rustdoc test suite][realistic-async].
+
+[#1998]: https://github.com/rust-lang/rust/issues/1998
+[realistic-async]: https://github.com/rust-lang/rust/blob/b146000e910ccd60bdcde89363cb6aa14ecc0d95/src/test/rustdoc-ui/error-in-impl-trait/realistic-async.rs
+
+## Add aliases for an item in documentation search
+
+This feature allows you to add alias(es) to an item when using the `rustdoc` search through the
+`doc(alias)` attribute. Example:
+
+```rust,no_run
+#[doc(alias = "x")]
+#[doc(alias = "big")]
+pub struct BigX;
+```
+
+Then, when looking for it through the `rustdoc` search, if you enter "x" or
+"big", search will show the `BigX` struct first.
+
+There are some limitations on the doc alias names though: you can't use `"` or whitespace.
+
+You can add multiple aliases at the same time by using a list:
+
+```rust,no_run
+#[doc(alias("x", "big"))]
+pub struct BigX;
+```
+
+## Custom search engines
+
+If you find yourself often referencing online Rust docs you might enjoy using a custom search
+engine. This allows you to use the navigation bar directly to search a `rustdoc` website.
+Most browsers support this feature by letting you define a URL template containing `%s`
+which will be substituted for the search term. As an example, for the standard library you could use
+this template:
+
+```text
+https://doc.rust-lang.org/stable/std/?search=%s
+```
+
+Note that this will take you to a results page listing all matches. If you want to navigate to the first
+result right away (which is often the best match) use the following instead:
+
+```text
+https://doc.rust-lang.org/stable/std/?search=%s&go_to_first=true
+```
+
+This URL adds the `go_to_first=true` query parameter which can be appended to any `rustdoc` search URL
+to automatically go to the first result.
diff --git a/src/doc/rustdoc/src/command-line-arguments.md b/src/doc/rustdoc/src/command-line-arguments.md
new file mode 100644
index 000000000..2a2e51b2f
--- /dev/null
+++ b/src/doc/rustdoc/src/command-line-arguments.md
@@ -0,0 +1,419 @@
+# Command-line arguments
+
+Here's the list of arguments you can pass to `rustdoc`:
+
+## `-h`/`--help`: help
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc -h
+$ rustdoc --help
+```
+
+This will show `rustdoc`'s built-in help, which largely consists of
+a list of possible command-line flags.
+
+Some of `rustdoc`'s flags are unstable; this page only shows stable
+options, `--help` will show them all.
+
+## `-V`/`--version`: version information
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc -V
+$ rustdoc --version
+```
+
+This will show `rustdoc`'s version, which will look something
+like this:
+
+```text
+rustdoc 1.17.0 (56124baa9 2017-04-24)
+```
+
+## `-v`/`--verbose`: more verbose output
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc -v src/lib.rs
+$ rustdoc --verbose src/lib.rs
+```
+
+This enables "verbose mode", which means that more information will be written
+to standard out. What is written depends on the other flags you've passed in.
+For example, with `--version`:
+
+```text
+$ rustdoc --verbose --version
+rustdoc 1.17.0 (56124baa9 2017-04-24)
+binary: rustdoc
+commit-hash: hash
+commit-date: date
+host: host-triple
+release: 1.17.0
+LLVM version: 3.9
+```
+
+## `-o`/`--out-dir`: output directory path
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -o target/doc
+$ rustdoc src/lib.rs --out-dir target/doc
+```
+
+By default, `rustdoc`'s output appears in a directory named `doc` in
+the current working directory. With this flag, it will place all output
+into the directory you specify.
+
+
+## `--crate-name`: controlling the name of the crate
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --crate-name mycrate
+```
+
+By default, `rustdoc` assumes that the name of your crate is the same name
+as the `.rs` file. `--crate-name` lets you override this assumption with
+whatever name you choose.
+
+## `--document-private-items`: Show items that are not public
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --document-private-items
+```
+
+By default, `rustdoc` only documents items that are publicly reachable.
+
+```rust
+pub fn public() {} // this item is public and will be documented
+mod private { // this item is private and will not be documented
+ pub fn unreachable() {} // this item is public, but unreachable, so it will not be documented
+}
+```
+
+`--document-private-items` documents all items, even if they're not public.
+
+## `-L`/`--library-path`: where to look for dependencies
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -L target/debug/deps
+$ rustdoc src/lib.rs --library-path target/debug/deps
+```
+
+If your crate has dependencies, `rustdoc` needs to know where to find them.
+Passing `--library-path` gives `rustdoc` a list of places to look for these
+dependencies.
+
+This flag takes any number of directories as its argument, and will use all of
+them when searching.
+
+
+## `--cfg`: passing configuration flags
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --cfg feature="foo"
+```
+
+This flag accepts the same values as `rustc --cfg`, and uses it to configure
+compilation. The example above uses `feature`, but any of the `cfg` values
+are acceptable.
+
+## `--extern`: specify a dependency's location
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --extern lazy-static=/path/to/lazy-static
+```
+
+Similar to `--library-path`, `--extern` is about specifying the location
+of a dependency. `--library-path` provides directories to search in, `--extern`
+instead lets you specify exactly which dependency is located where.
+
+## `-C`/`--codegen`: pass codegen options to rustc
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -C target_feature=+avx
+$ rustdoc src/lib.rs --codegen target_feature=+avx
+
+$ rustdoc --test src/lib.rs -C target_feature=+avx
+$ rustdoc --test src/lib.rs --codegen target_feature=+avx
+
+$ rustdoc --test README.md -C target_feature=+avx
+$ rustdoc --test README.md --codegen target_feature=+avx
+```
+
+When rustdoc generates documentation, looks for documentation tests, or executes documentation
+tests, it needs to compile some rust code, at least part-way. This flag allows you to tell rustdoc
+to provide some extra codegen options to rustc when it runs these compilations. Most of the time,
+these options won't affect a regular documentation run, but if something depends on target features
+to be enabled, or documentation tests need to use some additional options, this flag allows you to
+affect that.
+
+The arguments to this flag are the same as those for the `-C` flag on rustc. Run `rustc -C help` to
+get the full list.
+
+## `--test`: run code examples as tests
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --test
+```
+
+This flag will run your code examples as tests. For more, see [the chapter
+on documentation tests](write-documentation/documentation-tests.md).
+
+See also `--test-args`.
+
+## `--test-args`: pass options to test runner
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --test --test-args ignored
+```
+
+This flag will pass options to the test runner when running documentation tests.
+For more, see [the chapter on documentation tests](write-documentation/documentation-tests.md).
+
+See also `--test`.
+
+## `--target`: generate documentation for the specified target triple
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --target x86_64-pc-windows-gnu
+```
+
+Similar to the `--target` flag for `rustc`, this generates documentation
+for a target triple that's different than your host triple.
+
+All of the usual caveats of cross-compiling code apply.
+
+## `--default-theme`: set the default theme
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --default-theme=ayu
+```
+
+Sets the default theme (for users whose browser has not remembered a
+previous theme selection from the on-page theme picker).
+
+The supplied value should be the lowercase version of the theme name.
+The set of available themes can be seen in the theme picker in the
+generated output.
+
+Note that the set of available themes - and their appearance - is not
+necessarily stable from one rustdoc version to the next. If the
+requested theme does not exist, the builtin default (currently
+`light`) is used instead.
+
+## `--markdown-css`: include more CSS files when rendering markdown
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc README.md --markdown-css foo.css
+```
+
+When rendering Markdown files, this will create a `<link>` element in the
+`<head>` section of the generated HTML. For example, with the invocation above,
+
+```html
+<link rel="stylesheet" type="text/css" href="foo.css">
+```
+
+will be added.
+
+When rendering Rust files, this flag is ignored.
+
+## `--html-in-header`: include more HTML in <head>
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --html-in-header header.html
+$ rustdoc README.md --html-in-header header.html
+```
+
+This flag takes a list of files, and inserts them into the `<head>` section of
+the rendered documentation.
+
+## `--html-before-content`: include more HTML before the content
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --html-before-content extra.html
+$ rustdoc README.md --html-before-content extra.html
+```
+
+This flag takes a list of files, and inserts them inside the `<body>` tag but
+before the other content `rustdoc` would normally produce in the rendered
+documentation.
+
+## `--html-after-content`: include more HTML after the content
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --html-after-content extra.html
+$ rustdoc README.md --html-after-content extra.html
+```
+
+This flag takes a list of files, and inserts them before the `</body>` tag but
+after the other content `rustdoc` would normally produce in the rendered
+documentation.
+
+
+## `--markdown-playground-url`: control the location of the playground
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc README.md --markdown-playground-url https://play.rust-lang.org/
+```
+
+When rendering a Markdown file, this flag gives the base URL of the Rust
+Playground, to use for generating `Run` buttons.
+
+
+## `--markdown-no-toc`: don't generate a table of contents
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc README.md --markdown-no-toc
+```
+
+When generating documentation from a Markdown file, by default, `rustdoc` will
+generate a table of contents. This flag suppresses that, and no TOC will be
+generated.
+
+
+## `-e`/`--extend-css`: extend rustdoc's CSS
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -e extra.css
+$ rustdoc src/lib.rs --extend-css extra.css
+```
+
+With this flag, the contents of the files you pass are included at the bottom
+of Rustdoc's `theme.css` file.
+
+While this flag is stable, the contents of `theme.css` are not, so be careful!
+Updates may break your theme extensions.
+
+## `--sysroot`: override the system root
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --sysroot /path/to/sysroot
+```
+
+Similar to `rustc --sysroot`, this lets you change the sysroot `rustdoc` uses
+when compiling your code.
+
+## `--edition`: control the edition of docs and doctests
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --edition 2018
+$ rustdoc --test src/lib.rs --edition 2018
+```
+
+This flag allows `rustdoc` to treat your rust code as the given edition. It will compile doctests with
+the given edition as well. As with `rustc`, the default edition that `rustdoc` will use is `2015`
+(the first edition).
+
+## `--theme`: add a theme to the documentation output
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --theme /path/to/your/custom-theme.css
+```
+
+`rustdoc`'s default output includes two themes: `light` (the default) and
+`dark`. This flag allows you to add custom themes to the output. Giving a CSS
+file to this flag adds it to your documentation as an additional theme choice.
+The theme's name is determined by its filename; a theme file named
+`custom-theme.css` will add a theme named `custom-theme` to the documentation.
+
+## `--check-theme`: verify custom themes against the default theme
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc --check-theme /path/to/your/custom-theme.css
+```
+
+While `rustdoc`'s HTML output is more-or-less consistent between versions, there
+is no guarantee that a theme file will have the same effect. The `--theme` flag
+will still allow you to add the theme to your documentation, but to ensure that
+your theme works as expected, you can use this flag to verify that it implements
+the same CSS rules as the official `light` theme.
+
+`--check-theme` is a separate mode in `rustdoc`. When `rustdoc` sees the
+`--check-theme` flag, it discards all other flags and only performs the CSS rule
+comparison operation.
+
+## `--crate-version`: control the crate version
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --crate-version 1.3.37
+```
+
+When `rustdoc` receives this flag, it will print an extra "Version (version)" into the sidebar of
+the crate root's docs. You can use this flag to differentiate between different versions of your
+library's documentation.
+
+## `@path`: load command-line flags from a path
+
+If you specify `@path` on the command-line, then it will open `path` and read
+command line options from it. These options are one per line; a blank line indicates
+an empty option. The file can use Unix or Windows style line endings, and must be
+encoded as UTF-8.
+
+## `--passes`: add more rustdoc passes
+
+This flag is **deprecated**.
+For more details on passes, see [the chapter on them](deprecated-features.md#passes).
+
+## `--no-defaults`: don't run default passes
+
+This flag is **deprecated**.
+For more details on passes, see [the chapter on them](deprecated-features.md#passes).
+
+## `-r`/`--input-format`: input format
+
+This flag is **deprecated** and **has no effect**.
+
+Rustdoc only supports Rust source code and Markdown input formats. If the
+file ends in `.md` or `.markdown`, `rustdoc` treats it as a Markdown file.
+Otherwise, it assumes that the input file is Rust.
diff --git a/src/doc/rustdoc/src/deprecated-features.md b/src/doc/rustdoc/src/deprecated-features.md
new file mode 100644
index 000000000..9438948af
--- /dev/null
+++ b/src/doc/rustdoc/src/deprecated-features.md
@@ -0,0 +1,13 @@
+# Deprecated features
+
+## Passes
+
+Rustdoc has a concept called "passes". These are transformations that
+`rustdoc` runs on your documentation before producing its final output.
+
+Customizing passes is **deprecated**. The available passes are not considered stable and may
+change in any release.
+
+In the past the most common use case for customizing passes was to omit the `strip-private` pass.
+You can do this more easily, and without risk of the pass being changed, by passing
+[`--document-private-items`](command-line-arguments.md#--document-private-items-show-items-that-are-not-public).
diff --git a/src/doc/rustdoc/src/how-to-read-rustdoc.md b/src/doc/rustdoc/src/how-to-read-rustdoc.md
new file mode 100644
index 000000000..d666d54b3
--- /dev/null
+++ b/src/doc/rustdoc/src/how-to-read-rustdoc.md
@@ -0,0 +1,104 @@
+# How to read rustdoc output
+
+Rustdoc's HTML output includes a friendly and useful navigation interface which
+makes it easier for users to navigate and understand your code.
+This chapter covers the major features of that interface,
+and is a great starting point for documentation authors and users alike.
+
+## Structure
+
+The `rustdoc` output is divided into three sections.
+Along the left side of each page is a quick navigation bar,
+which shows contextual information about the current entry.
+The rest of the page is taken up by the search interface at the top
+and the documentation for the current item below that.
+
+## The Item Documentation
+
+The majority of the screen is taken up with the documentation text for the item
+currently being viewed.
+At the top is some at-a-glance info and controls:
+
+- the type and name of the item,
+ such as "Struct `std::time::Duration`",
+- a button to copy the item's path to the clipboard,
+ which is a clipboard item
+- a button to collapse or expand the top-level documentation for that item
+ (`[+]` or `[-]`),
+- a link to the source code (`[src]`),
+ if [configured](write-documentation/the-doc-attribute.html#html_no_source),
+ and present (the source may not be available if
+ the documentation was created with `cargo doc --no-deps`),
+- and the version in which the item became stable,
+ if it's a stable item in the standard library.
+
+Below this is the main documentation for the item,
+including a definition or function signature if appropriate,
+followed by a list of fields or variants for Rust types.
+Finally, the page lists associated functions and trait implementations,
+including automatic and blanket implementations that `rustdoc` knows about.
+
+### Navigation
+
+Subheadings, variants, fields, and many other things in this documentation
+are anchors and can be clicked on and deep-linked to,
+which is a great way to communicate exactly what you're talking about.
+The typograpical character "§" appears next to lines with anchors on them
+when hovered or given keyboard focus.
+
+## The Navigation Bar
+
+For example, when looking at documentation for the crate root,
+it shows all the crates documented in the documentation bundle,
+and quick links to the modules, structs, traits, functions, and macros available
+from the current crate.
+At the top, it displays a [configurable logo](write-documentation/the-doc-attribute.html#html_logo_url)
+alongside the current crate's name and version,
+or the current item whose documentation is being displayed.
+
+## The Theme Picker and Search Interface
+
+When viewing `rustdoc`'s output in a browser with JavaScript enabled,
+a dynamic interface appears at the top of the page composed of the search
+interface, help screen, and options.
+
+### The Search Interface
+
+Typing in the search bar instantly searches the available documentation for
+the string entered with a fuzzy matching algorithm that is tolerant of minor
+typos.
+
+By default, the search results give are "In Names",
+meaning that the fuzzy match is made against the names of items.
+Matching names are shown on the left, and the first few words of their
+descriptions are given on the right.
+By clicking an item, you will navigate to its particular documentation.
+
+There are two other sets of results, shown as tabs in the search results pane.
+"In Parameters" shows matches for the string in the types of parameters to
+functions, and "In Return Types" shows matches in the return types of functions.
+Both are very useful when looking for a function whose name you can't quite
+bring to mind when you know the type you have or want.
+
+When typing in the search bar, you can prefix your search term with a type
+followed by a colon (such as `mod:`) to restrict the results to just that
+kind of item. (The available items are listed in the help popup.)
+
+### Changing displayed theme
+
+You can change the displayed theme by opening the settings menu (the gear
+icon in the upper right) and then pick a new one from there.
+
+### Shortcuts
+
+Pressing `S` while focused elsewhere on the page will move focus to the
+search bar, and pressing `?` shows the help screen,
+which includes all these shortcuts and more.
+
+When the search results are focused,
+the left and right arrows move between tabs and the up and down arrows move
+among the results.
+Pressing the enter or return key opens the highlighted result.
+
+When looking at the documentation for an item, the plus and minus keys expand
+and collapse all sections in the document.
diff --git a/src/doc/rustdoc/src/how-to-write-documentation.md b/src/doc/rustdoc/src/how-to-write-documentation.md
new file mode 100644
index 000000000..38fd1db5c
--- /dev/null
+++ b/src/doc/rustdoc/src/how-to-write-documentation.md
@@ -0,0 +1,270 @@
+# How to write documentation
+
+Good documentation is not natural. There are opposing goals that make writing
+good documentation difficult. It requires expertise in the subject but also
+writing to a novice perspective. Documentation therefore often glazes over
+implementation detail, or leaves readers with unanswered questions.
+
+There are a few tenets to Rust documentation that can help guide anyone through
+the process of documenting libraries so that everyone has an ample opportunity
+to use the code.
+
+This chapter covers not only how to write documentation but specifically
+how to write **good** documentation. It is important to be as clear
+as you can, and as complete as possible. As a rule of thumb: the more
+documentation you write for your crate the better. If an item is public
+then it should be documented.
+
+## Getting Started
+
+Documenting a crate should begin with front-page documentation. As an
+example, the [`hashbrown`] crate level documentation summarizes the role of
+the crate, provides links to explain technical details, and explains why you
+would want to use the crate.
+
+After introducing the crate, it is important that the front-page gives
+an example of how to use the crate in a real world setting. Stick to the
+library's role in the example, but do so without shortcuts to benefit users who
+may copy and paste the example to get started.
+
+[`futures`] uses inline comments to explain line by line
+the complexities of using a [`Future`], because a person's first exposure to
+rust's [`Future`] may be this example.
+
+The [`backtrace`] documentation walks through the whole process, explaining
+changes made to the `Cargo.toml` file, passing command line arguments to the
+compiler, and shows a quick example of backtrace in the wild.
+
+Finally, the front-page can eventually become a comprehensive reference
+how to use a crate, like [`regex`]. In this front page, all
+requirements are outlined, the edge cases shown, and practical examples
+provided. The front page goes on to show how to use regular expressions
+then concludes with crate features.
+
+Don't worry about comparing your crate, which is just beginning, to other more
+developed crates. To get the documentation to something more polished, start
+incrementally and put in an introduction, example, and features. Rome was not
+built in a day!
+
+The first lines within the `lib.rs` will compose the front-page, and they
+use a different convention than the rest of the rustdocs. Lines should
+start with `//!` which indicate module-level or crate-level documentation.
+Here's a quick example of the difference:
+
+```rust,no_run
+//! Fast and easy queue abstraction.
+//!
+//! Provides an abstraction over a queue. When the abstraction is used
+//! there are these advantages:
+//! - Fast
+//! - [`Easy`]
+//!
+//! [`Easy`]: http://thatwaseasy.example.com
+
+/// This module makes it easy.
+pub mod easy {
+
+ /// Use the abstraction function to do this specific thing.
+ pub fn abstraction() {}
+
+}
+```
+
+Ideally, this first line of documentation is a sentence without highly
+technical details, but with a good description of where this crate fits
+within the rust ecosystem. Users should know whether this crate meets their use
+case after reading this line.
+
+## Documenting components
+
+Whether it is modules, structs, functions, or macros: the public
+API of all code should have documentation. Rarely does anyone
+complain about too much documentation!
+
+It is recommended that each item's documentation follows this basic structure:
+
+```text
+[short sentence explaining what it is]
+
+[more detailed explanation]
+
+[at least one code example that users can copy/paste to try it]
+
+[even more advanced explanations if necessary]
+```
+
+This basic structure should be straightforward to follow when writing your
+documentation; while you might think that a code example is trivial,
+the examples are really important because they can help users understand
+what an item is, how it is used, and for what purpose it exists.
+
+Let's see an example coming from the [standard library] by taking a look at the
+[`std::env::args()`][env::args] function:
+
+``````markdown
+Returns the arguments which this program was started with (normally passed
+via the command line).
+
+The first element is traditionally the path of the executable, but it can be
+set to arbitrary text, and may not even exist. This means this property should
+not be relied upon for security purposes.
+
+On Unix systems shell usually expands unquoted arguments with glob patterns
+(such as `*` and `?`). On Windows this is not done, and such arguments are
+passed as-is.
+
+# Panics
+
+The returned iterator will panic during iteration if any argument to the
+process is not valid unicode. If this is not desired,
+use the [`args_os`] function instead.
+
+# Examples
+
+```
+use std::env;
+
+// Prints each argument on a separate line
+for argument in env::args() {
+ println!("{argument}");
+}
+```
+
+[`args_os`]: ./fn.args_os.html
+``````
+
+Everything before the first empty line will be reused to describe the component
+in searches and module overviews. For example, the function `std::env::args()`
+above will be shown on the [`std::env`] module documentation. It is good
+practice to keep the summary to one line: concise writing is a goal of good
+documentation.
+
+Because the type system does a good job of defining what types a function
+passes and returns, there is no benefit of explicitly writing it
+into the documentation, especially since `rustdoc` adds hyper links to all types in the function signature.
+
+In the example above, a 'Panics' section explains when the code might abruptly exit,
+which can help the reader prevent reaching a panic. A panic section is recommended
+every time edge cases in your code can be reached if known.
+
+As you can see, it follows the structure detailed above: it starts with a short
+sentence explaining what the functions does, then it provides more information
+and finally provides a code example.
+
+## Markdown
+
+`rustdoc` uses the [CommonMark Markdown specification]. You might be
+interested in taking a look at their website to see what's possible:
+
+ - [CommonMark quick reference]
+ - [current spec]
+
+In addition to the standard CommonMark syntax, `rustdoc` supports several
+extensions:
+
+### Strikethrough
+
+Text may be rendered with a horizontal line through the center by wrapping the
+text with two tilde characters on each side:
+
+```text
+An example of ~~strikethrough text~~.
+```
+
+This example will render as:
+
+> An example of ~~strikethrough text~~.
+
+This follows the [GitHub Strikethrough extension][strikethrough].
+
+### Footnotes
+
+A footnote generates a small numbered link in the text which when clicked
+takes the reader to the footnote text at the bottom of the item. The footnote
+label is written similarly to a link reference with a caret at the front. The
+footnote text is written like a link reference definition, with the text
+following the label. Example:
+
+```text
+This is an example of a footnote[^note].
+
+[^note]: This text is the contents of the footnote, which will be rendered
+ towards the bottom.
+```
+
+This example will render as:
+
+> This is an example of a footnote[^note].
+>
+> [^note]: This text is the contents of the footnote, which will be rendered
+> towards the bottom.
+
+The footnotes are automatically numbered based on the order the footnotes are
+written.
+
+### Tables
+
+Tables can be written using pipes and dashes to draw the rows and columns of
+the table. These will be translated to HTML table matching the shape. Example:
+
+```text
+| Header1 | Header2 |
+|---------|---------|
+| abc | def |
+```
+
+This example will render similarly to this:
+
+> | Header1 | Header2 |
+> |---------|---------|
+> | abc | def |
+
+See the specification for the [GitHub Tables extension][tables] for more
+details on the exact syntax supported.
+
+### Task lists
+
+Task lists can be used as a checklist of items that have been completed.
+Example:
+
+```md
+- [x] Complete task
+- [ ] Incomplete task
+```
+
+This will render as:
+
+> - [x] Complete task
+> - [ ] Incomplete task
+
+See the specification for the [task list extension] for more details.
+
+### Smart punctuation
+
+Some ASCII punctuation sequences will be automatically turned into fancy Unicode
+characters:
+
+| ASCII sequence | Unicode |
+|----------------|---------|
+| `--` | – |
+| `---` | — |
+| `...` | … |
+| `"` | “ or ”, depending on context |
+| `'` | ‘ or ’, depending on context |
+
+So, no need to manually enter those Unicode characters!
+
+[`backtrace`]: https://docs.rs/backtrace/0.3.50/backtrace/
+[commonmark markdown specification]: https://commonmark.org/
+[commonmark quick reference]: https://commonmark.org/help/
+[env::args]: https://doc.rust-lang.org/stable/std/env/fn.args.html
+[`Future`]: https://doc.rust-lang.org/std/future/trait.Future.html
+[`futures`]: https://docs.rs/futures/0.3.5/futures/
+[`hashbrown`]: https://docs.rs/hashbrown/0.8.2/hashbrown/
+[`regex`]: https://docs.rs/regex/1.3.9/regex/
+[standard library]: https://doc.rust-lang.org/stable/std/index.html
+[current spec]: https://spec.commonmark.org/current/
+[`std::env`]: https://doc.rust-lang.org/stable/std/env/index.html#functions
+[strikethrough]: https://github.github.com/gfm/#strikethrough-extension-
+[tables]: https://github.github.com/gfm/#tables-extension-
+[task list extension]: https://github.github.com/gfm/#task-list-items-extension-
diff --git a/src/doc/rustdoc/src/lints.md b/src/doc/rustdoc/src/lints.md
new file mode 100644
index 000000000..bff01d7cb
--- /dev/null
+++ b/src/doc/rustdoc/src/lints.md
@@ -0,0 +1,376 @@
+# Lints
+
+`rustdoc` provides lints to help you writing and testing your documentation. You
+can use them like any other lints by doing this:
+
+```rust
+#![allow(rustdoc::broken_intra_doc_links)] // allows the lint, no diagnostics will be reported
+#![warn(rustdoc::broken_intra_doc_links)] // warn if there are broken intra-doc links
+#![deny(rustdoc::broken_intra_doc_links)] // error if there are broken intra-doc links
+```
+
+Note that, except for `missing_docs`, these lints are only available when running `rustdoc`, not `rustc`.
+
+Here is the list of the lints provided by `rustdoc`:
+
+## `broken_intra_doc_links`
+
+This lint **warns by default**. This lint detects when an [intra-doc link] fails to be resolved. For example:
+
+[intra-doc link]: write-documentation/linking-to-items-by-name.md
+
+```rust
+/// I want to link to [`Nonexistent`] but it doesn't exist!
+pub fn foo() {}
+```
+
+You'll get a warning saying:
+
+```text
+warning: unresolved link to `Nonexistent`
+ --> test.rs:1:24
+ |
+1 | /// I want to link to [`Nonexistent`] but it doesn't exist!
+ | ^^^^^^^^^^^^^ no item named `Nonexistent` in `test`
+```
+
+It will also warn when there is an ambiguity and suggest how to disambiguate:
+
+```rust
+/// [`Foo`]
+pub fn function() {}
+
+pub enum Foo {}
+
+pub fn Foo(){}
+```
+
+```text
+warning: `Foo` is both an enum and a function
+ --> test.rs:1:6
+ |
+1 | /// [`Foo`]
+ | ^^^^^ ambiguous link
+ |
+ = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default
+help: to link to the enum, prefix with the item type
+ |
+1 | /// [`enum@Foo`]
+ | ^^^^^^^^^^
+help: to link to the function, add parentheses
+ |
+1 | /// [`Foo()`]
+ | ^^^^^^^
+
+```
+
+## `private_intra_doc_links`
+
+This lint **warns by default**. This lint detects when [intra-doc links] from public to private items.
+For example:
+
+```rust
+#![warn(rustdoc::private_intra_doc_links)] // note: unnecessary - warns by default.
+
+/// [private]
+pub fn public() {}
+fn private() {}
+```
+
+This gives a warning that the link will be broken when it appears in your documentation:
+
+```text
+warning: public documentation for `public` links to private item `private`
+ --> priv.rs:1:6
+ |
+1 | /// [private]
+ | ^^^^^^^ this item is private
+ |
+ = note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
+ = note: this link will resolve properly if you pass `--document-private-items`
+```
+
+Note that this has different behavior depending on whether you pass `--document-private-items` or not!
+If you document private items, then it will still generate a link, despite the warning:
+
+```text
+warning: public documentation for `public` links to private item `private`
+ --> priv.rs:1:6
+ |
+1 | /// [private]
+ | ^^^^^^^ this item is private
+ |
+ = note: `#[warn(rustdoc::private_intra_doc_links)]` on by default
+ = note: this link resolves only because you passed `--document-private-items`, but will break without
+```
+
+[intra-doc links]: write-documentation/linking-to-items-by-name.md
+
+## `missing_docs`
+
+This lint is **allowed by default**. It detects items missing documentation.
+For example:
+
+```rust
+#![warn(missing_docs)]
+
+pub fn undocumented() {}
+# fn main() {}
+```
+
+The `undocumented` function will then have the following warning:
+
+```text
+warning: missing documentation for a function
+ --> your-crate/lib.rs:3:1
+ |
+ 3 | pub fn undocumented() {}
+ | ^^^^^^^^^^^^^^^^^^^^^
+```
+
+Note that unlike other rustdoc lints, this lint is also available from `rustc` directly.
+
+## `missing_crate_level_docs`
+
+This lint is **allowed by default**. It detects if there is no documentation
+at the crate root. For example:
+
+```rust
+#![warn(rustdoc::missing_crate_level_docs)]
+```
+
+This will generate the following warning:
+
+```text
+warning: no documentation found for this crate's top-level module
+ |
+ = help: The following guide may be of use:
+ https://doc.rust-lang.org/nightly/rustdoc/how-to-write-documentation.html
+```
+
+This is currently "allow" by default, but it is intended to make this a
+warning in the future. This is intended as a means to introduce new users on
+*how* to document their crate by pointing them to some instructions on how to
+get started, without providing overwhelming warnings like `missing_docs`
+might.
+
+## `missing_doc_code_examples`
+
+This lint is **allowed by default** and is **nightly-only**. It detects when a documentation block
+is missing a code example. For example:
+
+```rust
+#![warn(rustdoc::missing_doc_code_examples)]
+
+/// There is no code example!
+pub fn no_code_example() {}
+# fn main() {}
+```
+
+The `no_code_example` function will then have the following warning:
+
+```text
+warning: Missing code example in this documentation
+ --> your-crate/lib.rs:3:1
+ |
+LL | /// There is no code example!
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+```
+
+To fix the lint, you need to add a code example into the documentation block:
+
+```rust
+/// There is no code example!
+///
+/// ```
+/// println!("calling no_code_example...");
+/// no_code_example();
+/// println!("we called no_code_example!");
+/// ```
+pub fn no_code_example() {}
+```
+
+## `private_doc_tests`
+
+This lint is **allowed by default**. It detects documentation tests when they
+are on a private item. For example:
+
+```rust
+#![warn(rustdoc::private_doc_tests)]
+
+mod foo {
+ /// private doc test
+ ///
+ /// ```
+ /// assert!(false);
+ /// ```
+ fn bar() {}
+}
+# fn main() {}
+```
+
+Which will give:
+
+```text
+warning: Documentation test in private item
+ --> your-crate/lib.rs:4:1
+ |
+ 4 | / /// private doc test
+ 5 | | ///
+ 6 | | /// ```
+ 7 | | /// assert!(false);
+ 8 | | /// ```
+ | |___________^
+```
+
+## `invalid_codeblock_attributes`
+
+This lint **warns by default**. It detects code block attributes in
+documentation examples that have potentially mis-typed values. For example:
+
+```rust
+#![warn(rustdoc::invalid_codeblock_attributes)] // note: unnecessary - warns by default.
+
+/// Example.
+///
+/// ```should-panic
+/// assert_eq!(1, 2);
+/// ```
+pub fn foo() {}
+```
+
+Which will give:
+
+```text
+warning: unknown attribute `should-panic`. Did you mean `should_panic`?
+ --> src/lib.rs:1:1
+ |
+1 | / /// Example.
+2 | | ///
+3 | | /// ```should-panic
+4 | | /// assert_eq!(1, 2);
+5 | | /// ```
+ | |_______^
+ |
+ = note: `#[warn(rustdoc::invalid_codeblock_attributes)]` on by default
+ = help: the code block will either not be tested if not marked as a rust one or won't fail if it doesn't panic when running
+```
+
+In the example above, the correct form is `should_panic`. This helps detect
+typo mistakes for some common attributes.
+
+## `invalid_html_tags`
+
+This lint is **allowed by default** and is **nightly-only**. It detects unclosed
+or invalid HTML tags. For example:
+
+```rust
+#![warn(rustdoc::invalid_html_tags)]
+
+/// <h1>
+/// </script>
+pub fn foo() {}
+```
+
+Which will give:
+
+```text
+warning: unopened HTML tag `script`
+ --> foo.rs:1:1
+ |
+1 | / /// <h1>
+2 | | /// </script>
+ | |_____________^
+ |
+ note: the lint level is defined here
+ --> foo.rs:1:9
+ |
+1 | #![warn(rustdoc::invalid_html_tags)]
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+warning: unclosed HTML tag `h1`
+ --> foo.rs:1:1
+ |
+1 | / /// <h1>
+2 | | /// </script>
+ | |_____________^
+
+warning: 2 warnings emitted
+```
+
+## `invalid_rust_codeblocks`
+
+This lint **warns by default**. It detects Rust code blocks in documentation
+examples that are invalid (e.g. empty, not parsable as Rust). For example:
+
+```rust
+/// Empty code blocks (with and without the `rust` marker):
+///
+/// ```rust
+/// ```
+///
+/// Invalid syntax in code blocks:
+///
+/// ```rust
+/// '<
+/// ```
+pub fn foo() {}
+```
+
+Which will give:
+
+```text
+warning: Rust code block is empty
+ --> lint.rs:3:5
+ |
+3 | /// ```rust
+ | _____^
+4 | | /// ```
+ | |_______^
+ |
+ = note: `#[warn(rustdoc::invalid_rust_codeblocks)]` on by default
+
+warning: could not parse code block as Rust code
+ --> lint.rs:8:5
+ |
+8 | /// ```rust
+ | _____^
+9 | | /// '<
+10 | | /// ```
+ | |_______^
+ |
+ = note: error from rustc: unterminated character literal
+```
+
+## `bare_urls`
+
+This lint is **warn-by-default**. It detects URLs which are not links.
+For example:
+
+```rust
+#![warn(rustdoc::bare_urls)] // note: unnecessary - warns by default.
+
+/// http://example.org
+/// [http://example.net]
+pub fn foo() {}
+```
+
+Which will give:
+
+```text
+warning: this URL is not a hyperlink
+ --> links.rs:1:5
+ |
+1 | /// http://example.org
+ | ^^^^^^^^^^^^^^^^^^ help: use an automatic link instead: `<http://example.org>`
+ |
+ = note: `#[warn(rustdoc::bare_urls)]` on by default
+
+warning: this URL is not a hyperlink
+ --> links.rs:3:6
+ |
+3 | /// [http://example.net]
+ | ^^^^^^^^^^^^^^^^^^ help: use an automatic link instead: `<http://example.net>`
+
+warning: 2 warnings emitted
+```
diff --git a/src/doc/rustdoc/src/references.md b/src/doc/rustdoc/src/references.md
new file mode 100644
index 000000000..45cf4e88e
--- /dev/null
+++ b/src/doc/rustdoc/src/references.md
@@ -0,0 +1,31 @@
+# References
+
+There are many great `rustdoc` references out there.
+If you know of other great resources, please submit a pull request!
+
+## Official
+
+- [Learn Rust]
+- [Rust By Example]
+- [Rust Reference]
+- [RFC 1574: More API Documentation Conventions]
+- [RFC 1946: Intra Rustdoc Links]
+
+## Community
+- [API Guidelines]
+- [Github tagged RFCs]
+- [Github tagged issues]
+- [RFC (stalled) front page styleguide]
+- [Guide on how to write documentation for a Rust crate]
+
+
+[API Guidelines]: https://rust-lang.github.io/api-guidelines/documentation.html
+[Github tagged RFCs]: https://github.com/rust-lang/rfcs/issues?q=label%3AT-rustdoc
+[Github tagged issues]: https://github.com/rust-lang/rust/issues?q=is%3Aissue+is%3Aopen+label%3AT-rustdoc
+[Guide on how to write documentation for a Rust crate]: https://blog.guillaume-gomez.fr/articles/2020-03-12+Guide+on+how+to+write+documentation+for+a+Rust+crate
+[Learn Rust]: https://doc.rust-lang.org/book/ch14-02-publishing-to-crates-io.html#making-useful-documentation-comments
+[RFC 1574: More API Documentation Conventions]: https://rust-lang.github.io/rfcs/1574-more-api-documentation-conventions.html
+[RFC 1946: Intra Rustdoc Links]: https://rust-lang.github.io/rfcs/1946-intra-rustdoc-links.html
+[RFC (stalled) front page styleguide]: https://github.com/rust-lang/rfcs/pull/1687
+[Rust By Example]: https://doc.rust-lang.org/stable/rust-by-example/meta/doc.html
+[Rust Reference]: https://doc.rust-lang.org/stable/reference/comments.html#doc-comments
diff --git a/src/doc/rustdoc/src/scraped-examples.md b/src/doc/rustdoc/src/scraped-examples.md
new file mode 100644
index 000000000..d75f6d522
--- /dev/null
+++ b/src/doc/rustdoc/src/scraped-examples.md
@@ -0,0 +1,55 @@
+# Scraped examples
+
+Rustdoc has an unstable feature where it can automatically scrape examples of items being documented from the `examples/` directory of a Cargo workspace. These examples will be included within the generated documentation for that item. For example, if your library contains a public function:
+
+```rust,ignore (needs-other-file)
+// a_crate/src/lib.rs
+pub fn a_func() {}
+```
+
+And you have an example calling this function:
+
+```rust,ignore (needs-other-file)
+// a_crate/examples/ex.rs
+fn main() {
+ a_crate::a_func();
+}
+```
+
+Then this code snippet will be included in the documentation for `a_func`. This documentation is inserted by Rustdoc and cannot be manually edited by the crate author.
+
+
+## How to use this feature
+
+This feature is unstable, so you can enable it by calling Rustdoc with the unstable `rustdoc-scrape-examples` flag:
+
+```bash
+cargo doc -Zunstable-options -Zrustdoc-scrape-examples=examples
+```
+
+To enable this feature on [docs.rs](https://docs.rs), add this to your Cargo.toml:
+
+```toml
+[package.metadata.docs.rs]
+cargo-args = ["-Zunstable-options", "-Zrustdoc-scrape-examples=examples"]
+```
+
+
+## How it works
+
+When you run `cargo doc`, Rustdoc will analyze all the crates that match Cargo's `--examples` filter for instances of items being documented. Then Rustdoc will include the source code of these instances in the generated documentation.
+
+Rustdoc has a few techniques to ensure these examples don't overwhelm documentation readers, and that it doesn't blow up the page size:
+
+1. For a given item, a maximum of 5 examples are included in the page. The remaining examples are just links to source code.
+2. Only one example is shown by default, and the remaining examples are hidden behind a toggle.
+3. For a given file that contains examples, only the item containing the examples will be included in the generated documentation.
+
+For a given item, Rustdoc sorts its examples based on the size of the example &mdash; smaller ones are shown first.
+
+
+## FAQ
+
+### My example is not showing up in the documentation
+
+This feature uses Cargo's convention for finding examples. You should ensure that `cargo check --examples` includes your example file.
diff --git a/src/doc/rustdoc/src/unstable-features.md b/src/doc/rustdoc/src/unstable-features.md
new file mode 100644
index 000000000..32b350074
--- /dev/null
+++ b/src/doc/rustdoc/src/unstable-features.md
@@ -0,0 +1,576 @@
+# Unstable features
+
+Rustdoc is under active development, and like the Rust compiler, some features are only available
+on nightly releases. Some of these features are new and need some more testing before they're able to be
+released to the world at large, and some of them are tied to features in the Rust compiler that are unstable. Several features here require a matching `#![feature(...)]` attribute to
+enable, and thus are more fully documented in the [Unstable Book]. Those sections will link over
+there as necessary.
+
+[Unstable Book]: ../unstable-book/index.html
+
+## Nightly-gated functionality
+
+These features just require a nightly build to operate. Unlike the other features on this page,
+these don't need to be "turned on" with a command-line flag or a `#![feature(...)]` attribute in
+your crate. This can give them some subtle fallback modes when used on a stable release, so be
+careful!
+
+### Error numbers for `compile-fail` doctests
+
+As detailed in [the chapter on documentation tests][doctest-attributes], you can add a
+`compile_fail` attribute to a doctest to state that the test should fail to compile. However, on
+nightly, you can optionally add an error number to state that a doctest should emit a specific error
+number:
+
+[doctest-attributes]: write-documentation/documentation-tests.html#attributes
+
+``````markdown
+```compile_fail,E0044
+extern { fn some_func<T>(x: T); }
+```
+``````
+
+This is used by the error index to ensure that the samples that correspond to a given error number
+properly emit that error code. However, these error codes aren't guaranteed to be the only thing
+that a piece of code emits from version to version, so this is unlikely to be stabilized in the
+future.
+
+Attempting to use these error numbers on stable will result in the code sample being interpreted as
+plain text.
+
+## Extensions to the `#[doc]` attribute
+
+These features operate by extending the `#[doc]` attribute, and thus can be caught by the compiler
+and enabled with a `#![feature(...)]` attribute in your crate.
+
+### `#[doc(cfg)]`: Recording what platforms or features are required for code to be present
+
+ * Tracking issue: [#43781](https://github.com/rust-lang/rust/issues/43781)
+
+You can use `#[doc(cfg(...))]` to tell Rustdoc exactly which platform items appear on.
+This has two effects:
+
+1. doctests will only run on the appropriate platforms, and
+2. When Rustdoc renders documentation for that item, it will be accompanied by a banner explaining
+ that the item is only available on certain platforms.
+
+`#[doc(cfg)]` is intended to be used alongside [`#[cfg(doc)]`][cfg-doc].
+For example, `#[cfg(any(windows, doc))]` will preserve the item either on Windows or during the
+documentation process. Then, adding a new attribute `#[doc(cfg(windows))]` will tell Rustdoc that
+the item is supposed to be used on Windows. For example:
+
+```rust
+#![feature(doc_cfg)]
+
+/// Token struct that can only be used on Windows.
+#[cfg(any(windows, doc))]
+#[doc(cfg(windows))]
+pub struct WindowsToken;
+
+/// Token struct that can only be used on Unix.
+#[cfg(any(unix, doc))]
+#[doc(cfg(unix))]
+pub struct UnixToken;
+
+/// Token struct that is only available with the `serde` feature
+#[cfg(feature = "serde")]
+#[doc(cfg(feature = "serde"))]
+#[derive(serde::Deserialize)]
+pub struct SerdeToken;
+```
+
+In this sample, the tokens will only appear on their respective platforms, but they will both appear
+in documentation.
+
+`#[doc(cfg(...))]` was introduced to be used by the standard library and currently requires the
+`#![feature(doc_cfg)]` feature gate. For more information, see [its chapter in the Unstable
+Book][unstable-doc-cfg] and [its tracking issue][issue-doc-cfg].
+
+### `doc_auto_cfg`: Automatically generate `#[doc(cfg)]`
+
+ * Tracking issue: [#43781](https://github.com/rust-lang/rust/issues/43781)
+
+`doc_auto_cfg` is an extension to the `#[doc(cfg)]` feature. With it, you don't need to add
+`#[doc(cfg(...)]` anymore unless you want to override the default behaviour. So if we take the
+previous source code:
+
+```rust
+#![feature(doc_auto_cfg)]
+
+/// Token struct that can only be used on Windows.
+#[cfg(any(windows, doc))]
+pub struct WindowsToken;
+
+/// Token struct that can only be used on Unix.
+#[cfg(any(unix, doc))]
+pub struct UnixToken;
+
+/// Token struct that is only available with the `serde` feature
+#[cfg(feature = "serde")]
+#[derive(serde::Deserialize)]
+pub struct SerdeToken;
+```
+
+It'll render almost the same, the difference being that `doc` will also be displayed. To fix this,
+you can use `doc_cfg_hide`:
+
+```rust
+#![feature(doc_cfg_hide)]
+#![doc(cfg_hide(doc))]
+```
+
+And `doc` won't show up anymore!
+
+[cfg-doc]: ./advanced-features.md
+[unstable-doc-cfg]: ../unstable-book/language-features/doc-cfg.html
+[issue-doc-cfg]: https://github.com/rust-lang/rust/issues/43781
+
+### Adding your trait to the "Notable traits" dialog
+
+ * Tracking issue: [#45040](https://github.com/rust-lang/rust/issues/45040)
+
+Rustdoc keeps a list of a few traits that are believed to be "fundamental" to
+types that implement them. These traits are intended to be the primary interface
+for their implementers, and are often most of the API available to be documented
+on their types. For this reason, Rustdoc will track when a given type implements
+one of these traits and call special attention to it when a function returns one
+of these types. This is the "Notable traits" dialog, accessible as a circled `i`
+button next to the function, which, when clicked, shows the dialog.
+
+In the standard library, some of the traits that are part of this list are
+`Iterator`, `Future`, `io::Read`, and `io::Write`. However, rather than being
+implemented as a hard-coded list, these traits have a special marker attribute
+on them: `#[doc(notable_trait)]`. This means that you can apply this attribute
+to your own trait to include it in the "Notable traits" dialog in documentation.
+
+The `#[doc(notable_trait)]` attribute currently requires the `#![feature(doc_notable_trait)]`
+feature gate. For more information, see [its chapter in the Unstable Book][unstable-notable_trait]
+and [its tracking issue][issue-notable_trait].
+
+[unstable-notable_trait]: ../unstable-book/language-features/doc-notable-trait.html
+[issue-notable_trait]: https://github.com/rust-lang/rust/issues/45040
+
+### Exclude certain dependencies from documentation
+
+ * Tracking issue: [#44027](https://github.com/rust-lang/rust/issues/44027)
+
+The standard library uses several dependencies which, in turn, use several types and traits from the
+standard library. In addition, there are several compiler-internal crates that are not considered to
+be part of the official standard library, and thus would be a distraction to include in
+documentation. It's not enough to exclude their crate documentation, since information about trait
+implementations appears on the pages for both the type and the trait, which can be in different
+crates!
+
+To prevent internal types from being included in documentation, the standard library adds an
+attribute to their `extern crate` declarations: `#[doc(masked)]`. This causes Rustdoc to "mask out"
+types from these crates when building lists of trait implementations.
+
+The `#[doc(masked)]` attribute is intended to be used internally, and requires the
+`#![feature(doc_masked)]` feature gate. For more information, see [its chapter in the Unstable
+Book][unstable-masked] and [its tracking issue][issue-masked].
+
+[unstable-masked]: ../unstable-book/language-features/doc-masked.html
+[issue-masked]: https://github.com/rust-lang/rust/issues/44027
+
+### Document primitives
+
+This is for Rust compiler internal use only.
+
+Since primitive types are defined in the compiler, there's no place to attach documentation
+attributes. The `#[doc(primitive)]` attribute is used by the standard library to provide a way
+to generate documentation for primitive types, and requires `#![feature(rustdoc_internals)]` to
+enable.
+
+### Document keywords
+
+This is for Rust compiler internal use only.
+
+Rust keywords are documented in the standard library (look for `match` for example).
+
+To do so, the `#[doc(keyword = "...")]` attribute is used. Example:
+
+```rust
+#![feature(rustdoc_internals)]
+
+/// Some documentation about the keyword.
+#[doc(keyword = "keyword")]
+mod empty_mod {}
+```
+
+## Unstable command-line arguments
+
+These features are enabled by passing a command-line flag to Rustdoc, but the flags in question are
+themselves marked as unstable. To use any of these options, pass `-Z unstable-options` as well as
+the flag in question to Rustdoc on the command-line. To do this from Cargo, you can either use the
+`RUSTDOCFLAGS` environment variable or the `cargo rustdoc` command.
+
+### `--markdown-before-content`: include rendered Markdown before the content
+
+ * Tracking issue: [#44027](https://github.com/rust-lang/rust/issues/44027)
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --markdown-before-content extra.md
+$ rustdoc README.md -Z unstable-options --markdown-before-content extra.md
+```
+
+Just like `--html-before-content`, this allows you to insert extra content inside the `<body>` tag
+but before the other content `rustdoc` would normally produce in the rendered documentation.
+However, instead of directly inserting the file verbatim, `rustdoc` will pass the files through a
+Markdown renderer before inserting the result into the file.
+
+### `--markdown-after-content`: include rendered Markdown after the content
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --markdown-after-content extra.md
+$ rustdoc README.md -Z unstable-options --markdown-after-content extra.md
+```
+
+Just like `--html-after-content`, this allows you to insert extra content before the `</body>` tag
+but after the other content `rustdoc` would normally produce in the rendered documentation.
+However, instead of directly inserting the file verbatim, `rustdoc` will pass the files through a
+Markdown renderer before inserting the result into the file.
+
+### `--playground-url`: control the location of the playground
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --playground-url https://play.rust-lang.org/
+```
+
+When rendering a crate's docs, this flag gives the base URL of the Rust Playground, to use for
+generating `Run` buttons. Unlike `--markdown-playground-url`, this argument works for standalone
+Markdown files *and* Rust crates. This works the same way as adding `#![doc(html_playground_url =
+"url")]` to your crate root, as mentioned in [the chapter about the `#[doc]`
+attribute][doc-playground]. Please be aware that the official Rust Playground at
+https://play.rust-lang.org does not have every crate available, so if your examples require your
+crate, make sure the playground you provide has your crate available.
+
+[doc-playground]: write-documentation/the-doc-attribute.html#html_playground_url
+
+If both `--playground-url` and `--markdown-playground-url` are present when rendering a standalone
+Markdown file, the URL given to `--markdown-playground-url` will take precedence. If both
+`--playground-url` and `#![doc(html_playground_url = "url")]` are present when rendering crate docs,
+the attribute will take precedence.
+
+### `--sort-modules-by-appearance`: control how items on module pages are sorted
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --sort-modules-by-appearance
+```
+
+Ordinarily, when `rustdoc` prints items in module pages, it will sort them alphabetically (taking
+some consideration for their stability, and names that end in a number). Giving this flag to
+`rustdoc` will disable this sorting and instead make it print the items in the order they appear in
+the source.
+
+### `--show-type-layout`: add a section to each type's docs describing its memory layout
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --show-type-layout
+```
+
+When this flag is passed, rustdoc will add a "Layout" section at the bottom of
+each type's docs page that includes a summary of the type's memory layout as
+computed by rustc. For example, rustdoc will show the size in bytes that a value
+of that type will take in memory.
+
+Note that most layout information is **completely unstable** and may even differ
+between compilations.
+
+### `--resource-suffix`: modifying the name of CSS/JavaScript in crate docs
+
+ * Tracking issue: [#54765](https://github.com/rust-lang/rust/issues/54765)
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --resource-suffix suf
+```
+
+When rendering docs, `rustdoc` creates several CSS and JavaScript files as part of the output. Since
+all these files are linked from every page, changing where they are can be cumbersome if you need to
+specially cache them. This flag will rename all these files in the output to include the suffix in
+the filename. For example, `light.css` would become `light-suf.css` with the above command.
+
+### `--extern-html-root-url`: control how rustdoc links to non-local crates
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --extern-html-root-url some-crate=https://example.com/some-crate/1.0.1
+```
+
+Ordinarily, when rustdoc wants to link to a type from a different crate, it looks in two places:
+docs that already exist in the output directory, or the `#![doc(doc_html_root)]` set in the other
+crate. However, if you want to link to docs that exist in neither of those places, you can use these
+flags to control that behavior. When the `--extern-html-root-url` flag is given with a name matching
+one of your dependencies, rustdoc use that URL for those docs. Keep in mind that if those docs exist
+in the output directory, those local docs will still override this flag.
+
+### `-Z force-unstable-if-unmarked`
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z force-unstable-if-unmarked
+```
+
+This is an internal flag intended for the standard library and compiler that applies an
+`#[unstable]` attribute to any dependent crate that doesn't have another stability attribute. This
+allows `rustdoc` to be able to generate documentation for the compiler crates and the standard
+library, as an equivalent command-line argument is provided to `rustc` when building those crates.
+
+### `--index-page`: provide a top-level landing page for docs
+
+This feature allows you to generate an index-page with a given markdown file. A good example of it
+is the [rust documentation index](https://doc.rust-lang.org/nightly/index.html).
+
+With this, you'll have a page which you can custom as much as you want at the top of your crates.
+
+Using `index-page` option enables `enable-index-page` option as well.
+
+### `--enable-index-page`: generate a default index page for docs
+
+This feature allows the generation of a default index-page which lists the generated crates.
+
+### `--nocapture`: disable output capture for test
+
+When this flag is used with `--test`, the output (stdout and stderr) of your tests won't be
+captured by rustdoc. Instead, the output will be directed to your terminal,
+as if you had run the test executable manually. This is especially useful
+for debugging your tests!
+
+### `--check`: only checks the documentation
+
+When this flag is supplied, rustdoc will type check and lint your code, but will not generate any
+documentation or run your doctests.
+
+Using this flag looks like:
+
+```bash
+rustdoc -Z unstable-options --check src/lib.rs
+```
+
+### `--static-root-path`: control how static files are loaded in HTML output
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --static-root-path '/cache/'
+```
+
+This flag controls how rustdoc links to its static files on HTML pages. If you're hosting a lot of
+crates' docs generated by the same version of rustdoc, you can use this flag to cache rustdoc's CSS,
+JavaScript, and font files in a single location, rather than duplicating it once per "doc root"
+(grouping of crate docs generated into the same output directory, like with `cargo doc`). Per-crate
+files like the search index will still load from the documentation root, but anything that gets
+renamed with `--resource-suffix` will load from the given path.
+
+### `--persist-doctests`: persist doctest executables after running
+
+ * Tracking issue: [#56925](https://github.com/rust-lang/rust/issues/56925)
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs --test -Z unstable-options --persist-doctests target/rustdoctest
+```
+
+This flag allows you to keep doctest executables around after they're compiled or run.
+Usually, rustdoc will immediately discard a compiled doctest after it's been tested, but
+with this option, you can keep those binaries around for farther testing.
+
+### `--show-coverage`: calculate the percentage of items with documentation
+
+ * Tracking issue: [#58154](https://github.com/rust-lang/rust/issues/58154)
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --show-coverage
+```
+
+It generates something like this:
+
+```bash
++-------------------------------------+------------+------------+------------+------------+
+| File | Documented | Percentage | Examples | Percentage |
++-------------------------------------+------------+------------+------------+------------+
+| lib.rs | 4 | 100.0% | 1 | 25.0% |
++-------------------------------------+------------+------------+------------+------------+
+| Total | 4 | 100.0% | 1 | 25.0% |
++-------------------------------------+------------+------------+------------+------------+
+```
+
+If you want to determine how many items in your crate are documented, pass this flag to rustdoc.
+When it receives this flag, it will count the public items in your crate that have documentation,
+and print out the counts and a percentage instead of generating docs.
+
+Some methodology notes about what rustdoc counts in this metric:
+
+* Rustdoc will only count items from your crate (i.e. items re-exported from other crates don't
+ count).
+* Docs written directly onto inherent impl blocks are not counted, even though their doc comments
+ are displayed, because the common pattern in Rust code is to write all inherent methods into the
+ same impl block.
+* Items in a trait implementation are not counted, as those impls will inherit any docs from the
+ trait itself.
+* By default, only public items are counted. To count private items as well, pass
+ `--document-private-items` at the same time.
+
+Public items that are not documented can be seen with the built-in `missing_docs` lint. Private
+items that are not documented can be seen with Clippy's `missing_docs_in_private_items` lint.
+
+Calculating code examples follows these rules:
+
+1. These items aren't accounted by default:
+ * struct/union field
+ * enum variant
+ * constant
+ * static
+ * typedef
+2. If one of the previously listed items has a code example, then it'll be counted.
+
+#### JSON output
+
+When using `--output-format json` with this option, it will display the coverage information in
+JSON format. For example, here is the JSON for a file with one documented item and one
+undocumented item:
+
+```rust
+/// This item has documentation
+pub fn foo() {}
+
+pub fn no_documentation() {}
+```
+
+```json
+{"no_std.rs":{"total":3,"with_docs":1,"total_examples":3,"with_examples":0}}
+```
+
+Note that the third item is the crate root, which in this case is undocumented.
+
+### `-w`/`--output-format`: output format
+
+`--output-format json` emits documentation in the experimental
+[JSON format](https://doc.rust-lang.org/nightly/nightly-rustc/rustdoc_json_types/). `--output-format html` has no effect,
+and is also accepted on stable toolchains.
+
+It can also be used with `--show-coverage`. Take a look at its
+[documentation](#--show-coverage-calculate-the-percentage-of-items-with-documentation) for more
+information.
+
+### `--enable-per-target-ignores`: allow `ignore-foo` style filters for doctests
+
+ * Tracking issue: [#64245](https://github.com/rust-lang/rust/issues/64245)
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --enable-per-target-ignores
+```
+
+This flag allows you to tag doctests with compiletest style `ignore-foo` filters that prevent
+rustdoc from running that test if the target triple string contains foo. For example:
+
+```rust
+///```ignore-foo,ignore-bar
+///assert!(2 == 2);
+///```
+struct Foo;
+```
+
+This will not be run when the build target is `super-awesome-foo` or `less-bar-awesome`.
+If the flag is not enabled, then rustdoc will consume the filter, but do nothing with it, and
+the above example will be run for all targets.
+If you want to preserve backwards compatibility for older versions of rustdoc, you can use
+
+```rust
+///```ignore,ignore-foo
+///assert!(2 == 2);
+///```
+struct Foo;
+```
+
+In older versions, this will be ignored on all targets, but on newer versions `ignore-gnu` will
+override `ignore`.
+
+### `--runtool`, `--runtool-arg`: program to run tests with; args to pass to it
+
+ * Tracking issue: [#64245](https://github.com/rust-lang/rust/issues/64245)
+
+Using these options looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --runtool runner --runtool-arg --do-thing --runtool-arg --do-other-thing
+```
+
+These options can be used to run the doctest under a program, and also pass arguments to
+that program. For example, if you want to run your doctests under valgrind you might run
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options --runtool valgrind
+```
+
+Another use case would be to run a test inside an emulator, or through a Virtual Machine.
+
+### `--with-examples`: include examples of uses of items as documentation
+
+ * Tracking issue: [#88791](https://github.com/rust-lang/rust/issues/88791)
+
+This option, combined with `--scrape-examples-target-crate` and
+`--scrape-examples-output-path`, is used to implement the functionality in [RFC
+#3123](https://github.com/rust-lang/rfcs/pull/3123). Uses of an item (currently
+functions / call-sites) are found in a crate and its reverse-dependencies, and
+then the uses are included as documentation for that item. This feature is
+intended to be used via `cargo doc --scrape-examples`, but the rustdoc-only
+workflow looks like:
+
+```bash
+$ rustdoc examples/ex.rs -Z unstable-options \
+ --extern foobar=target/deps/libfoobar.rmeta \
+ --scrape-examples-target-crate foobar \
+ --scrape-examples-output-path output.calls
+$ rustdoc src/lib.rs -Z unstable-options --with-examples output.calls
+```
+
+First, the library must be checked to generate an `rmeta`. Then a
+reverse-dependency like `examples/ex.rs` is given to rustdoc with the target
+crate being documented (`foobar`) and a path to output the calls
+(`output.calls`). Then, the generated calls file can be passed via
+`--with-examples` to the subsequent documentation of `foobar`.
+
+To scrape examples from test code, e.g. functions marked `#[test]`, then
+add the `--scrape-tests` flag.
+
+### `--check-cfg`: check configuration flags
+
+ * Tracking issue: [#82450](https://github.com/rust-lang/rust/issues/82450)
+
+This flag accepts the same values as `rustc --check-cfg`, and uses it to check configuration flags.
+
+Using this flag looks like this:
+
+```bash
+$ rustdoc src/lib.rs -Z unstable-options \
+ --check-cfg='names()' --check-cfg='values(feature, "foo", "bar")'
+```
+
+The example above check every well known names (`target_os`, `doc`, `test`, ... via `names()`)
+and check the values of `feature`: `foo` and `bar`.
+
+### `--generate-link-to-definition`: Generate links on types in source code
+
+ * Tracking issue: [#89095](https://github.com/rust-lang/rust/issues/89095)
+
+This flag enables the generation of links in the source code pages which allow the reader
+to jump to a type definition.
diff --git a/src/doc/rustdoc/src/what-is-rustdoc.md b/src/doc/rustdoc/src/what-is-rustdoc.md
new file mode 100644
index 000000000..7a444d77c
--- /dev/null
+++ b/src/doc/rustdoc/src/what-is-rustdoc.md
@@ -0,0 +1,157 @@
+# What is rustdoc?
+
+The standard Rust distribution ships with a tool called `rustdoc`. Its job is
+to generate documentation for Rust projects. On a fundamental level, Rustdoc
+takes as an argument either a crate root or a Markdown file, and produces HTML,
+CSS, and JavaScript.
+
+## Basic usage
+
+Let's give it a try! Create a new project with Cargo:
+
+```bash
+$ cargo new docs --lib
+$ cd docs
+```
+
+In `src/lib.rs`, Cargo has generated some sample code. Delete
+it and replace it with this:
+
+```rust
+/// foo is a function
+fn foo() {}
+```
+
+Let's run `rustdoc` on our code. To do so, we can call it with the path to
+our crate root like this:
+
+```bash
+$ rustdoc src/lib.rs
+```
+
+This will create a new directory, `doc`, with a website inside! In our case,
+the main page is located in `doc/lib/index.html`. If you open that up in
+a web browser, you will see a page with a search bar, and "Crate lib" at the
+top, with no contents.
+
+## Configuring rustdoc
+
+There are two problems with this: first, why does it
+think that our package is named "lib"? Second, why does it not have any
+contents?
+
+The first problem is due to `rustdoc` trying to be helpful; like `rustc`,
+it assumes that our crate's name is the name of the file for the crate
+root. To fix this, we can pass in a command-line flag:
+
+```bash
+$ rustdoc src/lib.rs --crate-name docs
+```
+
+Now, `doc/docs/index.html` will be generated, and the page says "Crate docs."
+
+For the second issue, it is because our function `foo` is not public; `rustdoc`
+defaults to generating documentation for only public functions. If we change
+our code...
+
+```rust
+/// foo is a function
+pub fn foo() {}
+```
+
+... and then re-run `rustdoc`:
+
+```bash
+$ rustdoc src/lib.rs --crate-name docs
+```
+
+We now have some generated documentation. Open up `doc/docs/index.html` and
+check it out! It should show a link to the `foo` function's page, which
+is located at `doc/docs/fn.foo.html`. On that page, you'll see the "foo is
+a function" we put inside the documentation comment in our crate.
+
+## Using rustdoc with Cargo
+
+Cargo also has integration with `rustdoc` to make it easier to generate
+docs. Instead of the `rustdoc` command, we could have done this:
+
+```bash
+$ cargo doc
+```
+
+Internally, this calls out to `rustdoc` like this:
+
+```bash
+$ rustdoc --crate-name docs src/lib.rs -o <path>/docs/target/doc -L
+dependency=<path>/docs/target/debug/deps
+```
+
+You can see this with `cargo doc --verbose`.
+
+It generates the correct `--crate-name` for us, as well as pointing to
+`src/lib.rs`. But what about those other arguments?
+ - `-o` controls the *o*utput of our docs. Instead of a top-level
+ `doc` directory, notice that Cargo puts generated documentation under
+ `target`. That is the idiomatic place for generated files in Cargo projects.
+ - `-L` flag helps rustdoc find the dependencies your code relies on.
+ If our project used dependencies, we would get documentation for them as well!
+
+## Outer and inner documentation
+
+The `///` syntax is used to document the item present after it.
+That's why it is called an outer documentation.
+There is another syntax: `//!`, which is used to document the
+item it is present inside. It is called an inner documentation.
+It is often used when documenting the entire crate,
+because nothing comes before it: it is the root of the crate.
+So in order to document an entire crate, you need to use `//!` syntax.
+For example:
+
+``` rust
+//! This is my first rust crate
+```
+
+When used in the crate root, it documents the item it is inside,
+which is the crate itself.
+
+For more information about the `//!` syntax, see [the Book].
+
+[the Book]: https://doc.rust-lang.org/book/ch14-02-publishing-to-crates-io.html#commenting-contained-items
+
+
+## Using standalone Markdown files
+
+`rustdoc` can also generate HTML from standalone Markdown files. Let' s
+give it a try: create a `README.md` file with these contents:
+
+````text
+# Docs
+
+This is a project to test out `rustdoc`.
+
+[Here is a link!](https://www.rust-lang.org)
+
+## Example
+
+```rust
+fn foo() -> i32 {
+ 1 + 1
+}
+```
+````
+
+And call `rustdoc` on it:
+
+```bash
+$ rustdoc README.md
+```
+
+You will find an HTML file in `docs/doc/README.html` generated from its
+Markdown contents.
+
+Cargo currently does not understand standalone Markdown files, unfortunately.
+
+## Summary
+
+This covers the simplest use-cases of `rustdoc`. The rest of this book will
+explain all of the options that `rustdoc` has, and how to use them.
diff --git a/src/doc/rustdoc/src/write-documentation/documentation-tests.md b/src/doc/rustdoc/src/write-documentation/documentation-tests.md
new file mode 100644
index 000000000..1cb5b049d
--- /dev/null
+++ b/src/doc/rustdoc/src/write-documentation/documentation-tests.md
@@ -0,0 +1,445 @@
+# Documentation tests
+
+`rustdoc` supports executing your documentation examples as tests. This makes sure
+that examples within your documentation are up to date and working.
+
+The basic idea is this:
+
+```rust,no_run
+/// # Examples
+///
+/// ```
+/// let x = 5;
+/// ```
+# fn f() {}
+```
+
+The triple backticks start and end code blocks. If this were in a file named `foo.rs`,
+running `rustdoc --test foo.rs` will extract this example, and then run it as a test.
+
+Please note that by default, if no language is set for the block code, rustdoc
+assumes it is Rust code. So the following:
+
+``````markdown
+```rust
+let x = 5;
+```
+``````
+
+is strictly equivalent to:
+
+``````markdown
+```
+let x = 5;
+```
+``````
+
+There's some subtlety though! Read on for more details.
+
+## Passing or failing a doctest
+
+Like regular unit tests, regular doctests are considered to "pass"
+if they compile and run without panicking.
+So if you want to demonstrate that some computation gives a certain result,
+the `assert!` family of macros works the same as other Rust code:
+
+```rust
+let foo = "foo";
+assert_eq!(foo, "foo");
+```
+
+This way, if the computation ever returns something different,
+the code panics and the doctest fails.
+
+## Pre-processing examples
+
+In the example above, you'll note something strange: there's no `main`
+function! Forcing you to write `main` for every example, no matter how small,
+adds friction and clutters the output. So `rustdoc` processes your examples
+slightly before running them. Here's the full algorithm `rustdoc` uses to
+preprocess examples:
+
+1. Some common `allow` attributes are inserted, including
+ `unused_variables`, `unused_assignments`, `unused_mut`,
+ `unused_attributes`, and `dead_code`. Small examples often trigger
+ these lints.
+2. Any attributes specified with `#![doc(test(attr(...)))]` are added.
+3. Any leading `#![foo]` attributes are left intact as crate attributes.
+4. If the example does not contain `extern crate`, and
+ `#![doc(test(no_crate_inject))]` was not specified, then `extern crate
+ <mycrate>;` is inserted (note the lack of `#[macro_use]`).
+5. Finally, if the example does not contain `fn main`, the remainder of the
+ text is wrapped in `fn main() { your_code }`.
+
+For more about that caveat in rule 4, see "Documenting Macros" below.
+
+## Hiding portions of the example
+
+Sometimes, you need some setup code, or other things that would distract
+from your example, but are important to make the tests work. Consider
+an example block that looks like this:
+
+```rust,no_run
+/// ```
+/// /// Some documentation.
+/// # fn foo() {} // this function will be hidden
+/// println!("Hello, World!");
+/// ```
+# fn f() {}
+```
+
+It will render like this:
+
+```rust
+/// Some documentation.
+# fn foo() {}
+println!("Hello, World!");
+```
+
+Yes, that's right: you can add lines that start with `# `, and they will
+be hidden from the output, but will be used when compiling your code. You
+can use this to your advantage. In this case, documentation comments need
+to apply to some kind of function, so if I want to show you just a
+documentation comment, I need to add a little function definition below
+it. At the same time, it's only there to satisfy the compiler, so hiding
+it makes the example more clear. You can use this technique to explain
+longer examples in detail, while still preserving the testability of your
+documentation.
+
+For example, imagine that we wanted to document this code:
+
+```rust
+let x = 5;
+let y = 6;
+println!("{}", x + y);
+```
+
+We might want the documentation to end up looking like this:
+
+> First, we set `x` to five:
+>
+> ```rust
+> let x = 5;
+> # let y = 6;
+> # println!("{}", x + y);
+> ```
+>
+> Next, we set `y` to six:
+>
+> ```rust
+> # let x = 5;
+> let y = 6;
+> # println!("{}", x + y);
+> ```
+>
+> Finally, we print the sum of `x` and `y`:
+>
+> ```rust
+> # let x = 5;
+> # let y = 6;
+> println!("{}", x + y);
+> ```
+
+To keep each code block testable, we want the whole program in each block, but
+we don't want the reader to see every line every time. Here's what we put in
+our source code:
+
+``````markdown
+First, we set `x` to five:
+
+```
+let x = 5;
+# let y = 6;
+# println!("{}", x + y);
+```
+
+Next, we set `y` to six:
+
+```
+# let x = 5;
+let y = 6;
+# println!("{}", x + y);
+```
+
+Finally, we print the sum of `x` and `y`:
+
+```
+# let x = 5;
+# let y = 6;
+println!("{}", x + y);
+```
+``````
+
+By repeating all parts of the example, you can ensure that your example still
+compiles, while only showing the parts that are relevant to that part of your
+explanation.
+
+The `#`-hiding of lines can be prevented by using two consecutive hashes
+`##`. This only needs to be done with the first `#` which would've
+otherwise caused hiding. If we have a string literal like the following,
+which has a line that starts with a `#`:
+
+```rust
+let s = "foo
+## bar # baz";
+```
+
+We can document it by escaping the initial `#`:
+
+```text
+/// let s = "foo
+/// ## bar # baz";
+```
+
+
+## Using `?` in doc tests
+
+When writing an example, it is rarely useful to include a complete error
+handling, as it would add significant amounts of boilerplate code. Instead, you
+may want the following:
+
+```rust,no_run
+/// ```
+/// use std::io;
+/// let mut input = String::new();
+/// io::stdin().read_line(&mut input)?;
+/// ```
+# fn f() {}
+```
+
+The problem is that `?` returns a `Result<T, E>` and test functions don't
+return anything, so this will give a mismatched types error.
+
+You can get around this limitation by manually adding a `main` that returns
+`Result<T, E>`, because `Result<T, E>` implements the `Termination` trait:
+
+```rust,no_run
+/// A doc test using ?
+///
+/// ```
+/// use std::io;
+///
+/// fn main() -> io::Result<()> {
+/// let mut input = String::new();
+/// io::stdin().read_line(&mut input)?;
+/// Ok(())
+/// }
+/// ```
+# fn f() {}
+```
+
+Together with the `# ` from the section above, you arrive at a solution that
+appears to the reader as the initial idea but works with doc tests:
+
+```rust,no_run
+/// ```
+/// use std::io;
+/// # fn main() -> io::Result<()> {
+/// let mut input = String::new();
+/// io::stdin().read_line(&mut input)?;
+/// # Ok(())
+/// # }
+/// ```
+# fn f() {}
+```
+
+As of version 1.34.0, one can also omit the `fn main()`, but you will have to
+disambiguate the error type:
+
+```rust,no_run
+/// ```
+/// use std::io;
+/// let mut input = String::new();
+/// io::stdin().read_line(&mut input)?;
+/// # Ok::<(), io::Error>(())
+/// ```
+# fn f() {}
+```
+
+This is an unfortunate consequence of the `?` operator adding an implicit
+conversion, so type inference fails because the type is not unique. Please note
+that you must write the `(())` in one sequence without intermediate whitespace
+so that `rustdoc` understands you want an implicit `Result`-returning function.
+
+## Showing warnings in doctests
+
+You can show warnings in doctests by running `rustdoc --test --test-args=--show-output`
+(or, if you're using cargo, `cargo test --doc -- --show-output`).
+By default, this will still hide `unused` warnings, since so many examples use private functions;
+you can add `#![warn(unused)]` to the top of your example if you want to see unused variables or dead code warnings.
+You can also use [`#![doc(test(attr(warn(unused))))]`][test-attr] in the crate root to enable warnings globally.
+
+[test-attr]: the-doc-attribute.md#testattr
+
+## Documenting macros
+
+Here’s an example of documenting a macro:
+
+```rust
+/// Panic with a given message unless an expression evaluates to true.
+///
+/// # Examples
+///
+/// ```
+/// # #[macro_use] extern crate foo;
+/// # fn main() {
+/// panic_unless!(1 + 1 == 2, “Math is broken.”);
+/// # }
+/// ```
+///
+/// ```should_panic
+/// # #[macro_use] extern crate foo;
+/// # fn main() {
+/// panic_unless!(true == false, “I’m broken.”);
+/// # }
+/// ```
+#[macro_export]
+macro_rules! panic_unless {
+ ($condition:expr, $($rest:expr),+) => ({ if ! $condition { panic!($($rest),+); } });
+}
+# fn main() {}
+```
+
+You’ll note three things: we need to add our own `extern crate` line, so that
+we can add the `#[macro_use]` attribute. Second, we’ll need to add our own
+`main()` as well (for reasons discussed above). Finally, a judicious use of
+`#` to comment out those two things, so they don’t show up in the output.
+
+## Attributes
+
+Code blocks can be annotated with attributes that help `rustdoc` do the right
+thing when testing your code:
+
+The `ignore` attribute tells Rust to ignore your code. This is almost never
+what you want as it's the most generic. Instead, consider annotating it
+with `text` if it's not code or using `#`s to get a working example that
+only shows the part you care about.
+
+```rust
+/// ```ignore
+/// fn foo() {
+/// ```
+# fn foo() {}
+```
+
+`should_panic` tells `rustdoc` that the code should compile correctly but
+panic during execution. If the code doesn't panic, the test will fail.
+
+```rust
+/// ```should_panic
+/// assert!(false);
+/// ```
+# fn foo() {}
+```
+
+The `no_run` attribute will compile your code but not run it. This is
+important for examples such as "Here's how to retrieve a web page,"
+which you would want to ensure compiles, but might be run in a test
+environment that has no network access. This attribute can also be
+used to demonstrate code snippets that can cause Undefined Behavior.
+
+```rust
+/// ```no_run
+/// loop {
+/// println!("Hello, world");
+/// }
+/// ```
+# fn foo() {}
+```
+
+`compile_fail` tells `rustdoc` that the compilation should fail. If it
+compiles, then the test will fail. However, please note that code failing
+with the current Rust release may work in a future release, as new features
+are added.
+
+```rust
+/// ```compile_fail
+/// let x = 5;
+/// x += 2; // shouldn't compile!
+/// ```
+# fn foo() {}
+```
+
+`edition2015`, `edition2018` and `edition2021` tell `rustdoc`
+that the code sample should be compiled using the respective edition of Rust.
+
+```rust
+/// Only runs on the 2018 edition.
+///
+/// ```edition2018
+/// let result: Result<i32, ParseIntError> = try {
+/// "1".parse::<i32>()?
+/// + "2".parse::<i32>()?
+/// + "3".parse::<i32>()?
+/// };
+/// ```
+# fn foo() {}
+```
+
+## Syntax reference
+
+The *exact* syntax for code blocks, including the edge cases, can be found
+in the [Fenced Code Blocks](https://spec.commonmark.org/0.29/#fenced-code-blocks)
+section of the CommonMark specification.
+
+Rustdoc also accepts *indented* code blocks as an alternative to fenced
+code blocks: instead of surrounding your code with three backticks, you
+can indent each line by four or more spaces.
+
+``````markdown
+ let foo = "foo";
+ assert_eq!(foo, "foo");
+``````
+
+These, too, are documented in the CommonMark specification, in the
+[Indented Code Blocks](https://spec.commonmark.org/0.29/#indented-code-blocks)
+section.
+
+However, it's preferable to use fenced code blocks over indented code blocks.
+Not only are fenced code blocks considered more idiomatic for Rust code,
+but there is no way to use attributes such as `ignore` or `should_panic` with
+indented code blocks.
+
+### Include items only when collecting doctests
+
+Rustdoc's documentation tests can do some things that regular unit tests can't, so it can
+sometimes be useful to extend your doctests with samples that wouldn't otherwise need to be in
+documentation. To this end, Rustdoc allows you to have certain items only appear when it's
+collecting doctests, so you can utilize doctest functionality without forcing the test to appear in
+docs, or to find an arbitrary private item to include it on.
+
+When compiling a crate for use in doctests (with `--test` option), `rustdoc` will set `#[cfg(doctest)]`.
+Note that they will still link against only the public items of your crate; if you need to test
+private items, you need to write a unit test.
+
+In this example, we're adding doctests that we know won't compile, to verify that our struct can
+only take in valid data:
+
+```rust
+/// We have a struct here. Remember it doesn't accept negative numbers!
+pub struct MyStruct(pub usize);
+
+/// ```compile_fail
+/// let x = my_crate::MyStruct(-5);
+/// ```
+#[cfg(doctest)]
+pub struct MyStructOnlyTakesUsize;
+```
+
+Note that the struct `MyStructOnlyTakesUsize` here isn't actually part of your public crate
+API. The use of `#[cfg(doctest)]` makes sure that this struct only exists while `rustdoc` is
+collecting doctests. This means that its doctest is executed when `--test` is passed to rustdoc,
+but is hidden from the public documentation.
+
+Another possible use of `#[cfg(doctest)]` is to test doctests that are included in your README file
+without including it in your main documentation. For example, you could write this into your
+`lib.rs` to test your README as part of your doctests:
+
+```rust,no_run
+#[doc = include_str!("../README.md")]
+#[cfg(doctest)]
+pub struct ReadmeDoctests;
+```
+
+This will include your README as documentation on the hidden struct `ReadmeDoctests`, which will
+then be tested alongside the rest of your doctests.
diff --git a/src/doc/rustdoc/src/write-documentation/linking-to-items-by-name.md b/src/doc/rustdoc/src/write-documentation/linking-to-items-by-name.md
new file mode 100644
index 000000000..36bc312b9
--- /dev/null
+++ b/src/doc/rustdoc/src/write-documentation/linking-to-items-by-name.md
@@ -0,0 +1,143 @@
+# Linking to items by name
+
+Rustdoc is capable of directly linking to other rustdoc pages using the path of
+the item as a link. This is referred to as an 'intra-doc link'.
+
+For example, in the following code all of the links will link to the rustdoc page for `Bar`:
+
+```rust
+/// This struct is not [Bar]
+pub struct Foo1;
+
+/// This struct is also not [bar](Bar)
+pub struct Foo2;
+
+/// This struct is also not [bar][b]
+///
+/// [b]: Bar
+pub struct Foo3;
+
+/// This struct is also not [`Bar`]
+pub struct Foo4;
+
+/// This struct *is* [`Bar`]!
+pub struct Bar;
+```
+
+Unlike normal Markdown, `[bar][Bar]` syntax is also supported without needing a
+`[Bar]: ...` reference link.
+
+Backticks around the link will be stripped, so ``[`Option`]`` will correctly
+link to `Option`.
+
+## Valid links
+
+You can refer to anything in scope, and use paths, including `Self`, `self`, `super`, and
+`crate`. Associated items (functions, types, and constants) are supported, but [not for blanket
+trait implementations][#79682]. Rustdoc also supports linking to all primitives listed in
+[the standard library documentation](../../std/index.html#primitives).
+
+[#79682]: https://github.com/rust-lang/rust/pull/79682
+
+You can also refer to items with generic parameters like `Vec<T>`. The link will
+resolve as if you had written ``[`Vec<T>`](Vec)``. Fully-qualified syntax (for example,
+`<Vec as IntoIterator>::into_iter()`) is [not yet supported][fqs-issue], however.
+
+[fqs-issue]: https://github.com/rust-lang/rust/issues/74563
+
+```rust,edition2018
+use std::sync::mpsc::Receiver;
+
+/// This is a version of [`Receiver<T>`] with support for [`std::future`].
+///
+/// You can obtain a [`std::future::Future`] by calling [`Self::recv()`].
+pub struct AsyncReceiver<T> {
+ sender: Receiver<T>
+}
+
+impl<T> AsyncReceiver<T> {
+ pub async fn recv() -> T {
+ unimplemented!()
+ }
+}
+```
+
+Rustdoc allows using URL fragment specifiers, just like a normal link:
+
+```rust
+/// This is a special implementation of [positional parameters].
+///
+/// [positional parameters]: std::fmt#formatting-parameters
+struct MySpecialFormatter;
+```
+
+## Namespaces and Disambiguators
+
+Paths in Rust have three namespaces: type, value, and macro. Item names must be unique within
+their namespace, but can overlap with items in other namespaces. In case of ambiguity,
+rustdoc will warn about the ambiguity and suggest a disambiguator.
+
+```rust
+/// See also: [`Foo`](struct@Foo)
+struct Bar;
+
+/// This is different from [`Foo`](fn@Foo)
+struct Foo {}
+
+fn Foo() {}
+```
+
+These prefixes will be stripped when displayed in the documentation, so `[struct@Foo]` will be
+rendered as `Foo`.
+
+You can also disambiguate for functions by adding `()` after the function name,
+or for macros by adding `!` after the macro name:
+
+```rust
+/// This is different from [`foo!`]
+fn foo() {}
+
+/// This is different from [`foo()`]
+macro_rules! foo {
+ () => {}
+}
+```
+
+## Warnings, re-exports, and scoping
+
+Links are resolved in the scope of the module where the item is defined, even
+when the item is re-exported. If a link from another crate fails to resolve, no
+warning is given.
+
+```rust,edition2018
+mod inner {
+ /// Link to [f()]
+ pub struct S;
+ pub fn f() {}
+}
+pub use inner::S; // the link to `f` will still resolve correctly
+```
+
+When re-exporting an item, rustdoc allows adding additional documentation to it.
+That additional documentation will be resolved in the scope of the re-export, not
+the original, allowing you to link to items in the new crate. The new links
+will still give a warning if they fail to resolve.
+
+```rust
+/// See also [foo()]
+pub use std::process::Command;
+
+pub fn foo() {}
+```
+
+This is especially useful for proc-macros, which must always be defined in their own dedicated crate.
+
+Note: Because of how `macro_rules!` macros are scoped in Rust, the intra-doc links of a
+`macro_rules!` macro will be resolved [relative to the crate root][#72243], as opposed to the
+module it is defined in.
+
+If links do not look 'sufficiently like' an intra-doc link, they will be ignored and no warning
+will be given, even if the link fails to resolve. For example, any link containing `/` or `[]`
+characters will be ignored.
+
+[#72243]: https://github.com/rust-lang/rust/issues/72243
diff --git a/src/doc/rustdoc/src/write-documentation/the-doc-attribute.md b/src/doc/rustdoc/src/write-documentation/the-doc-attribute.md
new file mode 100644
index 000000000..e3b086489
--- /dev/null
+++ b/src/doc/rustdoc/src/write-documentation/the-doc-attribute.md
@@ -0,0 +1,278 @@
+# The `#[doc]` attribute
+
+The `#[doc]` attribute lets you control various aspects of how `rustdoc` does
+its job.
+
+The most basic function of `#[doc]` is to handle the actual documentation
+text. That is, `///` is syntax sugar for `#[doc]`. This means that these two
+are the same:
+
+```rust,no_run
+/// This is a doc comment.
+#[doc = " This is a doc comment."]
+# fn f() {}
+```
+
+(Note the leading space in the attribute version.)
+
+In most cases, `///` is easier to use than `#[doc]`. One case where the latter is easier is
+when generating documentation in macros; the `collapse-docs` pass will combine multiple
+`#[doc]` attributes into a single doc comment, letting you generate code like this:
+
+```rust,no_run
+#[doc = "This is"]
+#[doc = " a "]
+#[doc = "doc comment"]
+# fn f() {}
+```
+
+Which can feel more flexible. Note that this would generate this:
+
+```rust,no_run
+#[doc = "This is\n a \ndoc comment"]
+# fn f() {}
+```
+
+but given that docs are rendered via Markdown, it will remove these newlines.
+
+Another use case is for including external files as documentation:
+
+```rust,no_run
+#[doc = include_str!("../../README.md")]
+# fn f() {}
+```
+
+The `doc` attribute has more options though! These don't involve the text of
+the output, but instead, various aspects of the presentation of the output.
+We've split them into two kinds below: attributes that are useful at the
+crate level, and ones that are useful at the item level.
+
+## At the crate level
+
+These options control how the docs look at a crate level.
+
+### `html_favicon_url`
+
+This form of the `doc` attribute lets you control the favicon of your docs.
+
+```rust,no_run
+#![doc(html_favicon_url = "https://example.com/favicon.ico")]
+```
+
+This will put `<link rel="icon" href="{}">` into your docs, where
+the string for the attribute goes into the `{}`.
+
+If you don't use this attribute, there will be no favicon.
+
+### `html_logo_url`
+
+This form of the `doc` attribute lets you control the logo in the upper
+left hand side of the docs.
+
+```rust,no_run
+#![doc(html_logo_url = "https://example.com/logo.jpg")]
+```
+
+This will put `<a href='../index.html'><img src='{}' alt='logo' width='100'></a>` into
+your docs, where the string for the attribute goes into the `{}`.
+
+If you don't use this attribute, there will be no logo.
+
+### `html_playground_url`
+
+This form of the `doc` attribute lets you control where the "run" buttons
+on your documentation examples make requests to.
+
+```rust,no_run
+#![doc(html_playground_url = "https://playground.example.com/")]
+```
+
+Now, when you press "run", the button will make a request to this domain. The request
+URL will contain 2 query parameters: `code` and `edition` for the code in the documentation
+and the Rust edition respectively.
+
+If you don't use this attribute, there will be no run buttons.
+
+### `issue_tracker_base_url`
+
+This form of the `doc` attribute is mostly only useful for the standard library;
+When a feature is unstable, an issue number for tracking the feature must be
+given. `rustdoc` uses this number, plus the base URL given here, to link to
+the tracking issue.
+
+```rust,no_run
+#![doc(issue_tracker_base_url = "https://github.com/rust-lang/rust/issues/")]
+```
+
+### `html_root_url`
+
+The `#[doc(html_root_url = "…")]` attribute value indicates the URL for
+generating links to external crates. When rustdoc needs to generate a link to
+an item in an external crate, it will first check if the extern crate has been
+documented locally on-disk, and if so link directly to it. Failing that, it
+will use the URL given by the `--extern-html-root-url` command-line flag if
+available. If that is not available, then it will use the `html_root_url`
+value in the extern crate if it is available. If that is not available, then
+the extern items will not be linked.
+
+```rust,no_run
+#![doc(html_root_url = "https://docs.rs/serde/1.0")]
+```
+
+### `html_no_source`
+
+By default, `rustdoc` will include the source code of your program, with links
+to it in the docs. But if you include this:
+
+```rust,no_run
+#![doc(html_no_source)]
+```
+
+it will not.
+
+### `test(no_crate_inject)`
+
+By default, `rustdoc` will automatically add a line with `extern crate my_crate;` into each doctest.
+But if you include this:
+
+```rust,no_run
+#![doc(test(no_crate_inject))]
+```
+
+it will not.
+
+### `test(attr(...))`
+
+This form of the `doc` attribute allows you to add arbitrary attributes to all your doctests. For
+example, if you want your doctests to fail if they produce any warnings, you could add this:
+
+```rust,no_run
+#![doc(test(attr(deny(warnings))))]
+```
+
+## At the item level
+
+These forms of the `#[doc]` attribute are used on individual items, to control how
+they are documented.
+
+### `inline` and `no_inline`
+
+<span id="docno_inlinedocinline"></span>
+
+These attributes are used on `use` statements, and control where the documentation shows
+up. For example, consider this Rust code:
+
+```rust,no_run
+pub use bar::Bar;
+
+/// bar docs
+pub mod bar {
+ /// the docs for Bar
+ pub struct Bar;
+}
+# fn main() {}
+```
+
+The documentation will generate a "Re-exports" section, and say `pub use bar::Bar;`, where
+`Bar` is a link to its page.
+
+If we change the `use` line like this:
+
+```rust,no_run
+#[doc(inline)]
+pub use bar::Bar;
+# pub mod bar { pub struct Bar; }
+# fn main() {}
+```
+
+Instead, `Bar` will appear in a `Structs` section, just like `Bar` was defined at the
+top level, rather than `pub use`'d.
+
+Let's change our original example, by making `bar` private:
+
+```rust,no_run
+pub use bar::Bar;
+
+/// bar docs
+mod bar {
+ /// the docs for Bar
+ pub struct Bar;
+}
+# fn main() {}
+```
+
+Here, because `bar` is not public, `Bar` wouldn't have its own page, so there's nowhere
+to link to. `rustdoc` will inline these definitions, and so we end up in the same case
+as the `#[doc(inline)]` above; `Bar` is in a `Structs` section, as if it were defined at
+the top level. If we add the `no_inline` form of the attribute:
+
+```rust,no_run
+#[doc(no_inline)]
+pub use bar::Bar;
+
+/// bar docs
+mod bar {
+ /// the docs for Bar
+ pub struct Bar;
+}
+# fn main() {}
+```
+
+Now we'll have a `Re-exports` line, and `Bar` will not link to anywhere.
+
+One special case: In Rust 2018 and later, if you `pub use` one of your dependencies, `rustdoc` will
+not eagerly inline it as a module unless you add `#[doc(inline)]`.
+
+### `hidden`
+
+<span id="dochidden"></span>
+
+Any item annotated with `#[doc(hidden)]` will not appear in the documentation, unless
+the `strip-hidden` pass is removed.
+
+### `alias`
+
+This attribute adds an alias in the search index.
+
+Let's take an example:
+
+```rust,no_run
+#[doc(alias = "TheAlias")]
+pub struct SomeType;
+```
+
+So now, if you enter "TheAlias" in the search, it'll display `SomeType`.
+Of course, if you enter `SomeType` it'll return `SomeType` as expected!
+
+#### FFI example
+
+This doc attribute is especially useful when writing bindings for a C library.
+For example, let's say we have a C function that looks like this:
+
+```c
+int lib_name_do_something(Obj *obj);
+```
+
+It takes a pointer to an `Obj` type and returns an integer. In Rust, it might
+be written like this:
+
+```ignore (using non-existing ffi types)
+pub struct Obj {
+ inner: *mut ffi::Obj,
+}
+
+impl Obj {
+ pub fn do_something(&mut self) -> i32 {
+ unsafe { ffi::lib_name_do_something(self.inner) }
+ }
+}
+```
+
+The function has been turned into a method to make it more convenient to use.
+However, if you want to look for the Rust equivalent of `lib_name_do_something`,
+you have no way to do so.
+
+To get around this limitation, we just add `#[doc(alias = "lib_name_do_something")]`
+on the `do_something` method and then it's all good!
+Users can now look for `lib_name_do_something` in our crate directly and find
+`Obj::do_something`.
diff --git a/src/doc/rustdoc/src/write-documentation/what-to-include.md b/src/doc/rustdoc/src/write-documentation/what-to-include.md
new file mode 100644
index 000000000..e1e09aa4a
--- /dev/null
+++ b/src/doc/rustdoc/src/write-documentation/what-to-include.md
@@ -0,0 +1,126 @@
+# What to include (and exclude)
+
+It is easy to say everything must be documented in a project and often times
+that is correct, but how can we get there, and are there things that don't
+belong?
+
+At the top of the `src/lib.rs` or `main.rs` file in your binary project, include
+the following attribute:
+
+```rust
+#![warn(missing_docs)]
+```
+
+Now run `cargo doc` and examine the output. Here's a sample:
+
+```text
+ Documenting docdemo v0.1.0 (/Users/username/docdemo)
+warning: missing documentation for the crate
+ --> src/main.rs:1:1
+ |
+1 | / #![warn(missing_docs)]
+2 | |
+3 | | fn main() {
+4 | | println!("Hello, world!");
+5 | | }
+ | |_^
+ |
+note: the lint level is defined here
+ --> src/main.rs:1:9
+ |
+1 | #![warn(missing_docs)]
+ | ^^^^^^^^^^^^
+
+warning: 1 warning emitted
+
+ Finished dev [unoptimized + debuginfo] target(s) in 2.96s
+```
+
+As a library author, adding the lint `#![deny(missing_docs)]` is a great way to
+ensure the project does not drift away from being documented well, and
+`#![warn(missing_docs)]` is a good way to move towards comprehensive
+documentation. In addition to docs, `#![deny(missing_doc_code_examples)]`
+ensures each function contains a usage example. In our example above, the
+warning is resolved by adding crate level documentation.
+
+There are more lints in the upcoming chapter [Lints][rustdoc-lints].
+
+## Examples
+
+Of course this is contrived to be simple, but part of the power of documentation
+is showing code that is easy to follow, rather than being realistic. Docs often
+take shortcuts with error handling because examples can become complicated to
+follow with all the necessary set up required for a simple example.
+
+`Async` is a good example of this. In order to execute an `async` example, an
+executor needs to be available. Examples will often shortcut this, and leave
+users to figure out how to put the `async` code into their own runtime.
+
+It is preferred that `unwrap()` not be used inside an example, and some of the
+error handling components be hidden if they make the example too difficult to
+follow.
+
+``````text
+/// Example
+/// ```rust
+/// let fourtytwo = "42".parse::<u32>()?;
+/// println!("{} + 10 = {}", fourtytwo, fourtytwo+10);
+/// ```
+``````
+
+When rustdoc wraps that in a main function, it will fail to compile because the
+`ParseIntError` trait is not implemented. In order to help both your audience
+and your test suite, this example needs some additional code:
+
+``````text
+/// Example
+/// ```rust
+/// # main() -> Result<(), std::num::ParseIntError> {
+/// let fortytwo = "42".parse::<u32>()?;
+/// println!("{} + 10 = {}", fortytwo, fortytwo+10);
+/// # Ok(())
+/// # }
+/// ```
+``````
+
+The example is the same on the doc page, but has that extra information
+available to anyone trying to use your crate. More about tests in the
+upcoming [Documentation tests] chapter.
+
+## What to Exclude
+
+Certain parts of your public interface may be included by default in the output
+of rustdoc. The attribute `#[doc(hidden)]` can hide implementation details
+to encourage idiomatic use of the crate.
+
+For example, an internal `macro!` that makes the crate easier to implement can
+become a footgun for users when it appears in the public documentation. An
+internal `Error` type may exist, and `impl` details should be hidden, as
+detailed in the [API Guidelines].
+
+## Customizing the output
+
+It is possible to pass a custom css file to `rustdoc` and style the
+documentation.
+
+```bash
+rustdoc --extend-css custom.css src/lib.rs
+```
+
+A good example of using this feature to create a dark theme is documented [on
+this blog]. Just remember, dark theme is already included in the rustdoc output
+by clicking on the gear icon in the upper right. Adding additional options to the
+themes are as easy as creating a custom theme `.css` file and using the following
+syntax:
+
+```bash
+rustdoc --theme awesome.css src/lib.rs
+```
+
+Here is an example of a new theme, [Ayu].
+
+[Ayu]: https://github.com/rust-lang/rust/blob/master/src/librustdoc/html/static/css/themes/ayu.css
+[API Guidelines]: https://rust-lang.github.io/api-guidelines/documentation.html#rustdoc-does-not-show-unhelpful-implementation-details-c-hidden
+[Documentation tests]: documentation-tests.md
+[on this blog]: https://blog.guillaume-gomez.fr/articles/2016-09-16+Generating+doc+with+rustdoc+and+a+custom+theme
+[rustdoc-lints]: ../lints.md
diff --git a/src/doc/tutorial.md b/src/doc/tutorial.md
new file mode 100644
index 000000000..320283f31
--- /dev/null
+++ b/src/doc/tutorial.md
@@ -0,0 +1,3 @@
+% The Rust Tutorial
+
+This tutorial has been deprecated in favor of [the Book](book/index.html), which is available free online and in dead tree form. Go check that out instead!
diff --git a/src/doc/unstable-book/book.toml b/src/doc/unstable-book/book.toml
new file mode 100644
index 000000000..0cd56d094
--- /dev/null
+++ b/src/doc/unstable-book/book.toml
@@ -0,0 +1,6 @@
+[book]
+title = "The Rust Unstable Book"
+author = "The Rust Community"
+
+[output.html]
+git-repository-url = "https://github.com/rust-lang/rust/tree/master/src/doc/unstable-book"
diff --git a/src/doc/unstable-book/src/compiler-flags.md b/src/doc/unstable-book/src/compiler-flags.md
new file mode 100644
index 000000000..43eadb351
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags.md
@@ -0,0 +1 @@
+# Compiler flags
diff --git a/src/doc/unstable-book/src/compiler-flags/branch-protection.md b/src/doc/unstable-book/src/compiler-flags/branch-protection.md
new file mode 100644
index 000000000..85403748e
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/branch-protection.md
@@ -0,0 +1,18 @@
+# `branch-protection`
+
+This option lets you enable branch authentication instructions on AArch64.
+This option is ignored for non-AArch64 architectures.
+It takes some combination of the following values, separated by a `,`.
+
+- `pac-ret` - Enable pointer authentication for non-leaf functions.
+- `leaf` - Enable pointer authentication for all functions, including leaf functions.
+- `b-key` - Sign return addresses with key B, instead of the default key A.
+- `bti` - Enable branch target identification.
+
+`leaf` and `b-key` are only valid if `pac-ret` was previously specified.
+For example, `-Z branch-protection=bti,pac-ret,leaf` is valid, but
+`-Z branch-protection=bti,leaf,pac-ret` is not.
+
+Rust's standard library does not ship with BTI or pointer authentication enabled by default.
+In Cargo projects the standard library can be recompiled with pointer authentication using the nightly
+[build-std](https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std) feature.
diff --git a/src/doc/unstable-book/src/compiler-flags/cf-protection.md b/src/doc/unstable-book/src/compiler-flags/cf-protection.md
new file mode 100644
index 000000000..ab698c82b
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/cf-protection.md
@@ -0,0 +1,40 @@
+# `cf-protection`
+
+This option enables control-flow enforcement technology (CET) on x86; a more detailed description of
+CET is available [here]. Similar to `clang`, this flag takes one of the following values:
+
+- `none` - Disable CET completely (this is the default).
+- `branch` - Enable indirect branch tracking (`IBT`).
+- `return` - Enable shadow stack (`SHSTK`).
+- `full` - Enable both `branch` and `return`.
+
+[here]: https://www.intel.com/content/www/us/en/develop/articles/technical-look-control-flow-enforcement-technology.html
+
+This flag only applies to the LLVM backend: it sets the `cf-protection-branch` and
+`cf-protection-return` flags on LLVM modules. Note, however, that all compiled modules linked
+together must have the flags set for the compiled output to be CET-enabled. Currently, Rust's
+standard library does not ship with CET enabled by default, so you may need to rebuild all standard
+modules with a `cargo` command like:
+
+```sh
+$ RUSTFLAGS="-Z cf-protection=full" cargo +nightly build -Z build-std --target x86_64-unknown-linux-gnu
+```
+
+### Detection
+
+An ELF binary is CET-enabled if it has the `IBT` and `SHSTK` tags, e.g.:
+
+```sh
+$ readelf -a target/x86_64-unknown-linux-gnu/debug/example | grep feature:
+ Properties: x86 feature: IBT, SHSTK
+```
+
+### Troubleshooting
+
+To display modules that are not CET enabled, examine the linker errors available when `cet-report` is enabled:
+
+```sh
+$ RUSTC_LOG=rustc_codegen_ssa::back::link=info rustc-custom -v -Z cf-protection=full -C link-arg="-Wl,-z,cet-report=warning" -o example example.rs
+...
+/usr/bin/ld: /.../build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-d73f7266be14cb8b.rlib(std-d73f7266be14cb8b.std.f7443020-cgu.12.rcgu.o): warning: missing IBT and SHSTK properties
+```
diff --git a/src/doc/unstable-book/src/compiler-flags/check-cfg.md b/src/doc/unstable-book/src/compiler-flags/check-cfg.md
new file mode 100644
index 000000000..bfa92e7d3
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/check-cfg.md
@@ -0,0 +1,206 @@
+# `check-cfg`
+
+The tracking issue for this feature is: [#82450](https://github.com/rust-lang/rust/issues/82450).
+
+------------------------
+
+This feature allows you to enable complete or partial checking of configuration.
+
+`rustc` accepts the `--check-cfg` option, which specifies whether to check conditions and how to
+check them. The `--check-cfg` option takes a value, called the _check cfg specification_. The
+check cfg specification is parsed using the Rust metadata syntax, just as the `--cfg` option is.
+
+`--check-cfg` option can take one of two forms:
+
+1. `--check-cfg names(...)` enables checking condition names.
+2. `--check-cfg values(...)` enables checking the values within list-valued conditions.
+
+These two options are independent. `names` checks only the namespace of condition names
+while `values` checks only the namespace of the values of list-valued conditions.
+
+NOTE: No implicit expectation is added when using `--cfg` for both forms. Users are expected to
+pass all expected names and values using `names(...)` and `values(...)`.
+
+## The `names(...)` form
+
+The `names(...)` form enables checking the names. This form uses a named list:
+
+```bash
+rustc --check-cfg 'names(name1, name2, ... nameN)'
+```
+
+where each `name` is a bare identifier (has no quotes). The order of the names is not significant.
+
+If `--check-cfg names(...)` is specified at least once, then `rustc` will check all references to
+condition names. `rustc` will check every `#[cfg]` attribute, `#[cfg_attr]` attribute, `cfg` clause
+inside `#[link]` attribute and `cfg!(...)` call against the provided list of expected condition
+names. If a name is not present in this list, then `rustc` will report an `unexpected_cfgs` lint
+diagnostic. The default diagnostic level for this lint is `Warn`.
+
+If `--check-cfg names(...)` is not specified, then `rustc` will not check references to condition
+names.
+
+`--check-cfg names(...)` may be specified more than once. The result is that the list of valid
+condition names is merged across all options. It is legal for a condition name to be specified
+more than once; redundantly specifying a condition name has no effect.
+
+To enable checking condition names with an empty set of valid condition names, use the following
+form. The parentheses are required.
+
+```bash
+rustc --check-cfg 'names()'
+```
+
+Note that `--check-cfg 'names()'` is _not_ equivalent to omitting the option entirely.
+The first form enables checking condition names, while specifying that there are no valid
+condition names (outside of the set of well-known names defined by `rustc`). Omitting the
+`--check-cfg 'names(...)'` option does not enable checking condition names.
+
+## The `values(...)` form
+
+The `values(...)` form enables checking the values within list-valued conditions. It has this
+form:
+
+```bash
+rustc --check-cfg `values(name, "value1", "value2", ... "valueN")'
+```
+
+where `name` is a bare identifier (has no quotes) and each `"value"` term is a quoted literal
+string. `name` specifies the name of the condition, such as `feature` or `target_os`.
+
+When the `values(...)` option is specified, `rustc` will check every `#[cfg(name = "value")]`
+attribute, `#[cfg_attr(name = "value")]` attribute, `#[link(name = "a", cfg(name = "value"))]`
+and `cfg!(name = "value")` call. It will check that the `"value"` specified is present in the
+list of expected values. If `"value"` is not in it, then `rustc` will report an `unexpected_cfgs`
+lint diagnostic. The default diagnostic level for this lint is `Warn`.
+
+To enable checking of values, but to provide an empty set of valid values, use this form:
+
+```bash
+rustc --check-cfg `values(name)`
+```
+
+The `--check-cfg values(...)` option can be repeated, both for the same condition name and for
+different names. If it is repeated for the same condition name, then the sets of values for that
+condition are merged together.
+
+If `values()` is specified, then `rustc` will enable the checking of well-known values defined
+by itself. Note that it's necessary to specify the `values()` form to enable the checking of
+well known values, specifying the other forms doesn't implicitly enable it.
+
+## Examples
+
+Consider this command line:
+
+```bash
+rustc --check-cfg 'names(feature)' \
+ --check-cfg 'values(feature, "lion", "zebra")' \
+ --cfg 'feature="lion"' -Z unstable-options \
+ example.rs
+```
+
+This command line indicates that this crate has two features: `lion` and `zebra`. The `lion`
+feature is enabled, while the `zebra` feature is disabled. Consider compiling this code:
+
+```rust
+// This is expected, and tame_lion() will be compiled
+#[cfg(feature = "lion")]
+fn tame_lion(lion: Lion) {}
+
+// This is expected, and ride_zebra() will NOT be compiled.
+#[cfg(feature = "zebra")]
+fn ride_zebra(zebra: Zebra) {}
+
+// This is UNEXPECTED, and will cause a compiler warning (by default).
+#[cfg(feature = "platypus")]
+fn poke_platypus() {}
+
+// This is UNEXPECTED, because 'feechure' is not a known condition name,
+// and will cause a compiler warning (by default).
+#[cfg(feechure = "lion")]
+fn tame_lion() {}
+```
+
+> Note: The `--check-cfg names(feature)` option is necessary only to enable checking the condition
+> name, as in the last example. `feature` is a well-known (always-expected) condition name, and so
+> it is not necessary to specify it in a `--check-cfg 'names(...)'` option. That option can be
+> shortened to > `--check-cfg names()` in order to enable checking well-known condition names.
+
+### Example: Checking condition names, but not values
+
+```bash
+# This turns on checking for condition names, but not values, such as 'feature' values.
+rustc --check-cfg 'names(is_embedded, has_feathers)' \
+ --cfg has_feathers -Z unstable-options
+```
+
+```rust
+#[cfg(is_embedded)] // This is expected as "is_embedded" was provided in names()
+fn do_embedded() {}
+
+#[cfg(has_feathers)] // This is expected as "has_feathers" was provided in names()
+fn do_features() {}
+
+#[cfg(has_feathers = "zapping")] // This is expected as "has_feathers" was provided in names()
+ // and because no value checking was enable for "has_feathers"
+ // no warning is emited for the value "zapping"
+fn do_zapping() {}
+
+#[cfg(has_mumble_frotz)] // This is UNEXPECTED because names checking is enable and
+ // "has_mumble_frotz" was not provided in names()
+fn do_mumble_frotz() {}
+```
+
+### Example: Checking feature values, but not condition names
+
+```bash
+# This turns on checking for feature values, but not for condition names.
+rustc --check-cfg 'values(feature, "zapping", "lasers")' \
+ --cfg 'feature="zapping"' -Z unstable-options
+```
+
+```rust
+#[cfg(is_embedded)] // This is doesn't raise a warning, because names checking was not
+ // enable (ie not names())
+fn do_embedded() {}
+
+#[cfg(has_feathers)] // Same as above, --check-cfg names(...) was never used so no name
+ // checking is performed
+fn do_features() {}
+
+
+#[cfg(feature = "lasers")] // This is expected, "lasers" is in the values(feature) list
+fn shoot_lasers() {}
+
+#[cfg(feature = "monkeys")] // This is UNEXPECTED, because "monkeys" is not in the
+ // --check-cfg values(feature) list
+fn write_shakespeare() {}
+```
+
+### Example: Checking both condition names and feature values
+
+```bash
+# This turns on checking for feature values and for condition names.
+rustc --check-cfg 'names(is_embedded, has_feathers)' \
+ --check-cfg 'values(feature, "zapping", "lasers")' \
+ --cfg has_feathers --cfg 'feature="zapping"' -Z unstable-options
+```
+
+```rust
+#[cfg(is_embedded)] // This is expected because "is_embedded" was provided in names()
+fn do_embedded() {}
+
+#[cfg(has_feathers)] // This is expected because "has_feathers" was provided in names()
+fn do_features() {}
+
+#[cfg(has_mumble_frotz)] // This is UNEXPECTED, because has_mumble_frotz is not in the
+ // --check-cfg names(...) list
+fn do_mumble_frotz() {}
+
+#[cfg(feature = "lasers")] // This is expected, "lasers" is in the values(feature) list
+fn shoot_lasers() {}
+
+#[cfg(feature = "monkeys")] // This is UNEXPECTED, because "monkeys" is not in
+ // the values(feature) list
+fn write_shakespear() {}
+```
diff --git a/src/doc/unstable-book/src/compiler-flags/codegen-backend.md b/src/doc/unstable-book/src/compiler-flags/codegen-backend.md
new file mode 100644
index 000000000..3c0cd32fa
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/codegen-backend.md
@@ -0,0 +1,31 @@
+# `codegen-backend`
+
+The tracking issue for this feature is: [#77933](https://github.com/rust-lang/rust/issues/77933).
+
+------------------------
+
+This feature allows you to specify a path to a dynamic library to use as rustc's
+code generation backend at runtime.
+
+Set the `-Zcodegen-backend=<path>` compiler flag to specify the location of the
+backend. The library must be of crate type `dylib` and must contain a function
+named `__rustc_codegen_backend` with a signature of `fn() -> Box<dyn rustc_codegen_ssa::traits::CodegenBackend>`.
+
+## Example
+See also the [`hotplug_codegen_backend`](https://github.com/rust-lang/rust/tree/master/src/test/run-make-fulldeps/hotplug_codegen_backend) test
+for a full example.
+
+```rust,ignore (partial-example)
+use rustc_codegen_ssa::traits::CodegenBackend;
+
+struct MyBackend;
+
+impl CodegenBackend for MyBackend {
+ // Implement codegen methods
+}
+
+#[no_mangle]
+pub fn __rustc_codegen_backend() -> Box<dyn CodegenBackend> {
+ Box::new(MyBackend)
+}
+```
diff --git a/src/doc/unstable-book/src/compiler-flags/control-flow-guard.md b/src/doc/unstable-book/src/compiler-flags/control-flow-guard.md
new file mode 100644
index 000000000..08c16d95f
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/control-flow-guard.md
@@ -0,0 +1,59 @@
+# `control-flow-guard`
+
+The tracking issue for this feature is: [#68793](https://github.com/rust-lang/rust/issues/68793).
+
+------------------------
+
+The rustc flag `-Z control-flow-guard` enables the Windows [Control Flow Guard](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard) (CFG) platform security feature.
+
+CFG is an exploit mitigation designed to enforce control-flow integrity for software running on supported [Windows platforms (Windows 8.1 onwards)](https://docs.microsoft.com/en-us/windows/win32/secbp/control-flow-guard). Specifically, CFG uses runtime checks to validate the target address of every indirect call/jump before allowing the call to complete.
+
+During compilation, the compiler identifies all indirect calls/jumps and adds CFG checks. It also emits metadata containing the relative addresses of all address-taken functions. At runtime, if the binary is run on a CFG-aware operating system, the loader uses the CFG metadata to generate a bitmap of the address space and marks those addresses that contain valid targets. On each indirect call, the inserted check determines whether the target address is marked in this bitmap. If the target is not valid, the process is terminated.
+
+In terms of interoperability:
+- Code compiled with CFG enabled can be linked with libraries and object files that are not compiled with CFG. In this case, a CFG-aware linker can identify address-taken functions in the non-CFG libraries.
+- Libraries compiled with CFG can linked into non-CFG programs. In this case, the CFG runtime checks in the libraries are not used (i.e. the mitigation is completely disabled).
+
+CFG functionality is completely implemented in the LLVM backend and is supported for X86 (32-bit and 64-bit), ARM, and Aarch64 targets. The rustc flag adds the relevant LLVM module flags to enable the feature. This flag will be ignored for all non-Windows targets.
+
+
+## When to use Control Flow Guard
+
+The primary motivation for enabling CFG in Rust is to enhance security when linking against non-Rust code, especially C/C++ code. To achieve full CFG protection, all indirect calls (including any from Rust code) must have the appropriate CFG checks, as added by this flag. CFG can also improve security for Rust code that uses the `unsafe` keyword.
+
+Another motivation behind CFG is to harden programs against [return-oriented programming (ROP)](https://en.wikipedia.org/wiki/Return-oriented_programming) attacks. CFG disallows an attacker from taking advantage of the program's own instructions while redirecting control flow in unexpected ways.
+
+## Overhead of Control Flow Guard
+
+The CFG checks and metadata can potentially increase binary size and runtime overhead. The magnitude of any increase depends on the number and frequency of indirect calls. For example, enabling CFG for the Rust standard library increases binary size by approximately 0.14%. Enabling CFG in the SPEC CPU 2017 Integer Speed benchmark suite (compiled with Clang/LLVM) incurs approximate runtime overheads of between 0% and 8%, with a geometric mean of 2.9%.
+
+
+## Testing Control Flow Guard
+
+The rustc flag `-Z control-flow-guard=nochecks` instructs LLVM to emit the list of valid call targets without inserting runtime checks. This flag should only be used for testing purposes as it does not provide security enforcement.
+
+
+## Control Flow Guard in libraries
+
+It is strongly recommended to also enable CFG checks for all linked libraries, including the standard library.
+
+To enable CFG in the standard library, use the [cargo `-Z build-std` functionality][build-std] to recompile the standard library with the same configuration options as the main program.
+
+[build-std]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std
+
+For example:
+```cmd
+rustup toolchain install --force nightly
+rustup component add rust-src
+SET RUSTFLAGS=-Z control-flow-guard
+cargo +nightly build -Z build-std --target x86_64-pc-windows-msvc
+```
+
+```PowerShell
+rustup toolchain install --force nightly
+rustup component add rust-src
+$Env:RUSTFLAGS = "-Z control-flow-guard"
+cargo +nightly build -Z build-std --target x86_64-pc-windows-msvc
+```
+
+Alternatively, if you are building the standard library from source, you can set `control-flow-guard = true` in the config.toml file.
diff --git a/src/doc/unstable-book/src/compiler-flags/debug_info_for_profiling.md b/src/doc/unstable-book/src/compiler-flags/debug_info_for_profiling.md
new file mode 100644
index 000000000..ee72b6adf
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/debug_info_for_profiling.md
@@ -0,0 +1,35 @@
+# `debug-info-for-profiling`
+
+---
+
+## Introduction
+
+Automatic Feedback Directed Optimization (AFDO) is a method for using sampling
+based profiles to guide optimizations. This is contrasted with other methods of
+FDO or profile-guided optimization (PGO) which use instrumented profiling.
+
+Unlike PGO (controlled by the `rustc` flags `-Cprofile-generate` and
+`-Cprofile-use`), a binary being profiled does not perform significantly worse,
+and thus it's possible to profile binaries used in real workflows and not
+necessary to construct artificial workflows.
+
+## Use
+
+In order to use AFDO, the target platform must be Linux running on an `x86_64`
+architecture with the performance profiler `perf` available. In addition, the
+external tool `create_llvm_prof` from [this repository] must be used.
+
+Given a Rust file `main.rs`, we can produce an optimized binary as follows:
+
+```shell
+rustc -O -Zdebug-info-for-profiling main.rs -o main
+perf record -b ./main
+create_llvm_prof --binary=main --out=code.prof
+rustc -O -Zprofile-sample-use=code.prof main.rs -o main2
+```
+
+The `perf` command produces a profile `perf.data`, which is then used by the
+`create_llvm_prof` command to create `code.prof`. This final profile is then
+used by `rustc` to guide optimizations in producing the binary `main2`.
+
+[this repository]: https://github.com/google/autofdo
diff --git a/src/doc/unstable-book/src/compiler-flags/dwarf-version.md b/src/doc/unstable-book/src/compiler-flags/dwarf-version.md
new file mode 100644
index 000000000..c5e86f17d
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/dwarf-version.md
@@ -0,0 +1,9 @@
+## `dwarf-version`
+
+This option controls the version of DWARF that the compiler emits, on platforms
+that use DWARF to encode debug information. It takes one of the following
+values:
+
+* `2`: DWARF version 2 (the default on certain platforms, like macOS).
+* `4`: DWARF version 4 (the default on certain platforms, like Linux).
+* `5`: DWARF version 5.
diff --git a/src/doc/unstable-book/src/compiler-flags/emit-stack-sizes.md b/src/doc/unstable-book/src/compiler-flags/emit-stack-sizes.md
new file mode 100644
index 000000000..47f45a0b9
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/emit-stack-sizes.md
@@ -0,0 +1,167 @@
+# `emit-stack-sizes`
+
+The tracking issue for this feature is: [#54192]
+
+[#54192]: https://github.com/rust-lang/rust/issues/54192
+
+------------------------
+
+The rustc flag `-Z emit-stack-sizes` makes LLVM emit stack size metadata.
+
+> **NOTE**: This LLVM feature only supports the ELF object format as of LLVM
+> 8.0. Using this flag with targets that use other object formats (e.g. macOS
+> and Windows) will result in it being ignored.
+
+Consider this crate:
+
+```
+#![crate_type = "lib"]
+
+use std::ptr;
+
+pub fn foo() {
+ // this function doesn't use the stack
+}
+
+pub fn bar() {
+ let xs = [0u32; 2];
+
+ // force LLVM to allocate `xs` on the stack
+ unsafe { ptr::read_volatile(&xs.as_ptr()); }
+}
+```
+
+Using the `-Z emit-stack-sizes` flag produces extra linker sections in the
+output *object file*.
+
+``` console
+$ rustc -C opt-level=3 --emit=obj foo.rs
+
+$ size -A foo.o
+foo.o :
+section size addr
+.text 0 0
+.text._ZN3foo3foo17he211d7b4a3a0c16eE 1 0
+.text._ZN3foo3bar17h1acb594305f70c2eE 22 0
+.note.GNU-stack 0 0
+.eh_frame 72 0
+Total 95
+
+$ rustc -C opt-level=3 --emit=obj -Z emit-stack-sizes foo.rs
+
+$ size -A foo.o
+foo.o :
+section size addr
+.text 0 0
+.text._ZN3foo3foo17he211d7b4a3a0c16eE 1 0
+.stack_sizes 9 0
+.text._ZN3foo3bar17h1acb594305f70c2eE 22 0
+.stack_sizes 9 0
+.note.GNU-stack 0 0
+.eh_frame 72 0
+Total 113
+```
+
+As of LLVM 7.0 the data will be written into a section named `.stack_sizes` and
+the format is "an array of pairs of function symbol values (pointer size) and
+stack sizes (unsigned LEB128)".
+
+``` console
+$ objdump -d foo.o
+
+foo.o: file format elf64-x86-64
+
+Disassembly of section .text._ZN3foo3foo17he211d7b4a3a0c16eE:
+
+0000000000000000 <_ZN3foo3foo17he211d7b4a3a0c16eE>:
+ 0: c3 retq
+
+Disassembly of section .text._ZN3foo3bar17h1acb594305f70c2eE:
+
+0000000000000000 <_ZN3foo3bar17h1acb594305f70c2eE>:
+ 0: 48 83 ec 10 sub $0x10,%rsp
+ 4: 48 8d 44 24 08 lea 0x8(%rsp),%rax
+ 9: 48 89 04 24 mov %rax,(%rsp)
+ d: 48 8b 04 24 mov (%rsp),%rax
+ 11: 48 83 c4 10 add $0x10,%rsp
+ 15: c3 retq
+
+$ objdump -s -j .stack_sizes foo.o
+
+foo.o: file format elf64-x86-64
+
+Contents of section .stack_sizes:
+ 0000 00000000 00000000 00 .........
+Contents of section .stack_sizes:
+ 0000 00000000 00000000 10 .........
+```
+
+It's important to note that linkers will discard this linker section by default.
+To preserve the section you can use a linker script like the one shown below.
+
+``` text
+/* file: keep-stack-sizes.x */
+SECTIONS
+{
+ /* `INFO` makes the section not allocatable so it won't be loaded into memory */
+ .stack_sizes (INFO) :
+ {
+ KEEP(*(.stack_sizes));
+ }
+}
+```
+
+The linker script must be passed to the linker using a rustc flag like `-C
+link-arg`.
+
+```
+// file: src/main.rs
+use std::ptr;
+
+#[inline(never)]
+fn main() {
+ let xs = [0u32; 2];
+
+ // force LLVM to allocate `xs` on the stack
+ unsafe { ptr::read_volatile(&xs.as_ptr()); }
+}
+```
+
+``` console
+$ RUSTFLAGS="-Z emit-stack-sizes" cargo build --release
+
+$ size -A target/release/hello | grep stack_sizes || echo section was not found
+section was not found
+
+$ RUSTFLAGS="-Z emit-stack-sizes" cargo rustc --release -- \
+ -C link-arg=-Wl,-Tkeep-stack-sizes.x \
+ -C link-arg=-N
+
+$ size -A target/release/hello | grep stack_sizes
+.stack_sizes 90 176272
+
+$ # non-allocatable section (flags don't contain the "A" (alloc) flag)
+$ readelf -S target/release/hello
+Section Headers:
+ [Nr] Name Type Address Offset
+ Size EntSize Flags Link Info Align
+(..)
+ [1031] .stack_sizes PROGBITS 000000000002b090 0002b0f0
+ 000000000000005a 0000000000000000 L 5 0 1
+
+$ objdump -s -j .stack_sizes target/release/hello
+
+target/release/hello: file format elf64-x86-64
+
+Contents of section .stack_sizes:
+ 2b090 c0040000 00000000 08f00400 00000000 ................
+ 2b0a0 00080005 00000000 00000810 05000000 ................
+ 2b0b0 00000000 20050000 00000000 10400500 .... ........@..
+ 2b0c0 00000000 00087005 00000000 00000080 ......p.........
+ 2b0d0 05000000 00000000 90050000 00000000 ................
+ 2b0e0 00a00500 00000000 0000 ..........
+```
+
+> Author note: I'm not entirely sure why, in *this* case, `-N` is required in
+> addition to `-Tkeep-stack-sizes.x`. For example, it's not required when
+> producing statically linked files for the ARM Cortex-M architecture.
diff --git a/src/doc/unstable-book/src/compiler-flags/extern-options.md b/src/doc/unstable-book/src/compiler-flags/extern-options.md
new file mode 100644
index 000000000..dfc1de77b
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/extern-options.md
@@ -0,0 +1,27 @@
+# `--extern` Options
+
+* Tracking issue for `--extern` crate modifiers: [#98405](https://github.com/rust-lang/rust/issues/98405)
+* Tracking issue for `noprelude`: [#98398](https://github.com/rust-lang/rust/issues/98398)
+* Tracking issue for `priv`: [#98399](https://github.com/rust-lang/rust/issues/98399)
+* Tracking issue for `nounused`: [#98400](https://github.com/rust-lang/rust/issues/98400)
+
+The behavior of the `--extern` flag can be modified with `noprelude`, `priv` or `nounused` options.
+
+This is unstable feature, so you have to provide `-Zunstable-options` to enable it.
+
+## Examples
+
+Use your own build of the `core` crate.
+
+`rustc main.rs -Z unstable-options --extern noprelude:core=libcore.rlib`
+
+To use multiple options, separate them with a comma:
+
+`rustc main.rs -Z unstable-options --extern noprelude,priv,nounused:mydep=mydep.rlib`
+
+## Options
+
+* `noprelude`: Do not add the crate to the external prelude. If used, it will need to be imported using `extern crate`.
+ This is used by the [build-std project](https://github.com/rust-lang/wg-cargo-std-aware/) to simulate compatibility with sysroot-only crates.
+* `priv`: Mark the crate as a private dependency for the [`exported_private_dependencies`](../../rustc/lints/listing/warn-by-default.html#exported-private-dependencies) lint.
+* `nounused`: Suppress [`unused-crate-dependencies`](../../rustc/lints/listing/allowed-by-default.html#unused-crate-dependencies) warnings for the crate.
diff --git a/src/doc/unstable-book/src/compiler-flags/location-detail.md b/src/doc/unstable-book/src/compiler-flags/location-detail.md
new file mode 100644
index 000000000..db0706199
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/location-detail.md
@@ -0,0 +1,44 @@
+# `location-detail`
+
+The tracking issue for this feature is: [#70580](https://github.com/rust-lang/rust/issues/70580).
+
+------------------------
+
+Option `-Z location-detail=val` controls what location details are tracked when
+using `caller_location`. This allows users to control what location details
+are printed as part of panic messages, by allowing them to exclude any combination
+of filenames, line numbers, and column numbers. This option is intended to provide
+users with a way to mitigate the size impact of `#[track_caller]`.
+
+This option supports a comma separated list of location details to be included. Valid options
+within this list are:
+
+- `file` - the filename of the panic will be included in the panic output
+- `line` - the source line of the panic will be included in the panic output
+- `column` - the source column of the panic will be included in the panic output
+
+Any combination of these three options are supported. Alternatively, you can pass
+`none` to this option, which results in no location details being tracked.
+If this option is not specified, all three are included by default.
+
+An example of a panic output when using `-Z location-detail=line`:
+```text
+panicked at 'Process blink had a fault', <redacted>:323:0
+```
+
+The code size savings from this option are two-fold. First, the `&'static str` values
+for each path to a file containing a panic are removed from the binary. For projects
+with deep directory structures and many files with panics, this can add up. This category
+of savings can only be realized by excluding filenames from the panic output. Second,
+savings can be realized by allowing multiple panics to be fused into a single panicking
+branch. It is often the case that within a single file, multiple panics with the same
+panic message exist -- e.g. two calls to `Option::unwrap()` in a single line, or
+two calls to `Result::expect()` on adjacent lines. If column and line information
+are included in the `Location` struct passed to the panic handler, these branches cannot
+be fused, as the output is different depending on which panic occurs. However if line
+and column information is identical for all panics, these branches can be fused, which
+can lead to substantial code size savings, especially for small embedded binaries with
+many panics.
+
+The savings from this option are amplified when combined with the use of `-Zbuild-std`, as
+otherwise paths for panics within the standard library are still included in your binary.
diff --git a/src/doc/unstable-book/src/compiler-flags/move-size-limit.md b/src/doc/unstable-book/src/compiler-flags/move-size-limit.md
new file mode 100644
index 000000000..88f022af2
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/move-size-limit.md
@@ -0,0 +1,10 @@
+# `move_size_limit`
+
+--------------------
+
+The `-Zmove-size-limit=N` compiler flag enables `large_assignments` lints which
+will warn when moving objects whose size exceeds `N` bytes.
+
+Lint warns only about moves in functions that participate in code generation.
+Consequently it will be ineffective for compiler invocatation that emit
+metadata only, i.e., `cargo check` like workflows.
diff --git a/src/doc/unstable-book/src/compiler-flags/no-unique-section-names.md b/src/doc/unstable-book/src/compiler-flags/no-unique-section-names.md
new file mode 100644
index 000000000..5c1c7cda7
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/no-unique-section-names.md
@@ -0,0 +1,9 @@
+# `no-unique-section-names`
+
+------------------------
+
+This flag currently applies only to ELF-based targets using the LLVM codegen backend. It prevents the generation of unique ELF section names for each separate code and data item when `-Z function-sections` is also in use, which is the default for most targets. This option can reduce the size of object files, and depending on the linker, the final ELF binary as well.
+
+For example, a function `func` will by default generate a code section called `.text.func`. Normally this is fine because the linker will merge all those `.text.*` sections into a single one in the binary. However, starting with [LLVM 12](https://github.com/llvm/llvm-project/commit/ee5d1a04), the backend will also generate unique section names for exception handling, so you would see a section name of `.gcc_except_table.func` in the object file and potentially in the final ELF binary, which could add significant bloat to programs that contain many functions.
+
+This flag instructs LLVM to use the same `.text` and `.gcc_except_table` section name for each function, and it is analogous to Clang's `-fno-unique-section-names` option.
diff --git a/src/doc/unstable-book/src/compiler-flags/profile.md b/src/doc/unstable-book/src/compiler-flags/profile.md
new file mode 100644
index 000000000..71303bfaf
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/profile.md
@@ -0,0 +1,27 @@
+# `profile`
+
+The tracking issue for this feature is: [#42524](https://github.com/rust-lang/rust/issues/42524).
+
+------------------------
+
+This feature allows the generation of code coverage reports.
+
+Set the `-Zprofile` compiler flag in order to enable gcov profiling.
+
+For example:
+```Bash
+cargo new testgcov --bin
+cd testgcov
+export RUSTFLAGS="-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort"
+export CARGO_INCREMENTAL=0
+cargo build
+cargo run
+```
+
+Once you've built and run your program, files with the `gcno` (after build) and `gcda` (after execution) extensions will be created.
+You can parse them with [llvm-cov gcov](https://llvm.org/docs/CommandGuide/llvm-cov.html#llvm-cov-gcov) or [grcov](https://github.com/mozilla/grcov).
+
+Please note that `RUSTFLAGS` by default applies to everything that cargo builds and runs during a build!
+When the `--target` flag is explicitly passed to cargo, the `RUSTFLAGS` no longer apply to build scripts and procedural macros.
+For more fine-grained control consider passing a `RUSTC_WRAPPER` program to cargo that only adds the profiling flags to
+rustc for the specific crates you want to profile.
diff --git a/src/doc/unstable-book/src/compiler-flags/profile_sample_use.md b/src/doc/unstable-book/src/compiler-flags/profile_sample_use.md
new file mode 100644
index 000000000..ce894ce6a
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/profile_sample_use.md
@@ -0,0 +1,10 @@
+# `profile-sample-use
+
+---
+
+`-Zprofile-sample-use=code.prof` directs `rustc` to use the profile
+`code.prof` as a source for Automatic Feedback Directed Optimization (AFDO).
+See the documentation of [`-Zdebug-info-for-profiling`] for more information
+on using AFDO.
+
+[`-Zdebug-info-for-profiling`]: debug_info_for_profiling.html
diff --git a/src/doc/unstable-book/src/compiler-flags/remap-cwd-prefix.md b/src/doc/unstable-book/src/compiler-flags/remap-cwd-prefix.md
new file mode 100644
index 000000000..977d25852
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/remap-cwd-prefix.md
@@ -0,0 +1,24 @@
+# `remap-cwd-prefix`
+
+The tracking issue for this feature is: [#87325](https://github.com/rust-lang/rust/issues/87325).
+
+------------------------
+
+This flag will rewrite absolute paths under the current working directory,
+replacing the current working directory prefix with a specified value.
+
+The given value may be absolute or relative, or empty. This switch takes
+precidence over `--remap-path-prefix` in case they would both match a given
+path.
+
+This flag helps to produce deterministic output, by removing the current working
+directory from build output, while allowing the command line to be universally
+reproducible, such that the same execution will work on all machines, regardless
+of build environment.
+
+## Example
+```sh
+# This would produce an absolute path to main.rs in build outputs of
+# "./main.rs".
+rustc -Z remap-cwd-prefix=. main.rs
+```
diff --git a/src/doc/unstable-book/src/compiler-flags/report-time.md b/src/doc/unstable-book/src/compiler-flags/report-time.md
new file mode 100644
index 000000000..9e6a1fb00
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/report-time.md
@@ -0,0 +1,77 @@
+# `report-time`
+
+The tracking issue for this feature is: [#64888]
+
+[#64888]: https://github.com/rust-lang/rust/issues/64888
+
+------------------------
+
+The `report-time` feature adds a possibility to report execution time of the
+tests generated via `libtest`.
+
+This is unstable feature, so you have to provide `-Zunstable-options` to get
+this feature working.
+
+Sample usage command:
+
+```sh
+./test_executable -Zunstable-options --report-time
+```
+
+Available options:
+
+```sh
+--report-time
+ Show execution time of each test.
+ Threshold values for colorized output can be
+ configured via
+ `RUST_TEST_TIME_UNIT`, `RUST_TEST_TIME_INTEGRATION`
+ and
+ `RUST_TEST_TIME_DOCTEST` environment variables.
+ Expected format of environment variable is
+ `VARIABLE=WARN_TIME,CRITICAL_TIME`.
+ Not available for --format=terse
+--ensure-time
+ Treat excess of the test execution time limit as
+ error.
+ Threshold values for this option can be configured via
+ `RUST_TEST_TIME_UNIT`, `RUST_TEST_TIME_INTEGRATION`
+ and
+ `RUST_TEST_TIME_DOCTEST` environment variables.
+ Expected format of environment variable is
+ `VARIABLE=WARN_TIME,CRITICAL_TIME`.
+ `CRITICAL_TIME` here means the limit that should not be
+ exceeded by test.
+```
+
+Example of the environment variable format:
+
+```sh
+RUST_TEST_TIME_UNIT=100,200
+```
+
+where 100 stands for warn time, and 200 stands for critical time.
+
+## Examples
+
+```sh
+cargo test --tests -- -Zunstable-options --report-time
+ Finished dev [unoptimized + debuginfo] target(s) in 0.02s
+ Running target/debug/deps/example-27fb188025bec02c
+
+running 3 tests
+test tests::unit_test_quick ... ok <0.000s>
+test tests::unit_test_warn ... ok <0.055s>
+test tests::unit_test_critical ... ok <0.110s>
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+
+ Running target/debug/deps/tests-cedb06f6526d15d9
+
+running 3 tests
+test unit_test_quick ... ok <0.000s>
+test unit_test_warn ... ok <0.550s>
+test unit_test_critical ... ok <1.100s>
+
+test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
+```
diff --git a/src/doc/unstable-book/src/compiler-flags/sanitizer.md b/src/doc/unstable-book/src/compiler-flags/sanitizer.md
new file mode 100644
index 000000000..7f7549aaf
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/sanitizer.md
@@ -0,0 +1,684 @@
+# `sanitizer`
+
+The tracking issues for this feature are:
+
+* [#39699](https://github.com/rust-lang/rust/issues/39699).
+* [#89653](https://github.com/rust-lang/rust/issues/89653).
+
+------------------------
+
+This feature allows for use of one of following sanitizers:
+
+* [AddressSanitizer][clang-asan] a fast memory error detector.
+* [ControlFlowIntegrity][clang-cfi] LLVM Control Flow Integrity (CFI) provides
+ forward-edge control flow protection.
+* [HWAddressSanitizer][clang-hwasan] a memory error detector similar to
+ AddressSanitizer, but based on partial hardware assistance.
+* [LeakSanitizer][clang-lsan] a run-time memory leak detector.
+* [MemorySanitizer][clang-msan] a detector of uninitialized reads.
+* [MemTagSanitizer][clang-memtag] fast memory error detector based on
+ Armv8.5-A Memory Tagging Extension.
+* [ShadowCallStack][clang-scs] provides backward-edge control flow protection.
+* [ThreadSanitizer][clang-tsan] a fast data race detector.
+
+To enable a sanitizer compile with `-Zsanitizer=address`,`-Zsanitizer=cfi`,
+`-Zsanitizer=hwaddress`, `-Zsanitizer=leak`, `-Zsanitizer=memory`,
+`-Zsanitizer=memtag`, `-Zsanitizer=shadow-call-stack`, or `-Zsanitizer=thread`.
+You might also need the `--target` and `build-std` flags. Example:
+```shell
+$ RUSTFLAGS=-Zsanitizer=address cargo build -Zbuild-std --target x86_64-unknown-linux-gnu
+```
+
+# AddressSanitizer
+
+AddressSanitizer is a memory error detector. It can detect the following types
+of bugs:
+
+* Out of bound accesses to heap, stack and globals
+* Use after free
+* Use after return (runtime flag `ASAN_OPTIONS=detect_stack_use_after_return=1`)
+* Use after scope
+* Double-free, invalid free
+* Memory leaks
+
+The memory leak detection is enabled by default on Linux, and can be enabled
+with runtime flag `ASAN_OPTIONS=detect_leaks=1` on macOS.
+
+AddressSanitizer is supported on the following targets:
+
+* `aarch64-apple-darwin`
+* `aarch64-fuchsia`
+* `aarch64-unknown-linux-gnu`
+* `x86_64-apple-darwin`
+* `x86_64-fuchsia`
+* `x86_64-unknown-freebsd`
+* `x86_64-unknown-linux-gnu`
+
+AddressSanitizer works with non-instrumented code although it will impede its
+ability to detect some bugs. It is not expected to produce false positive
+reports.
+
+## Examples
+
+Stack buffer overflow:
+
+```rust
+fn main() {
+ let xs = [0, 1, 2, 3];
+ let _y = unsafe { *xs.as_ptr().offset(4) };
+}
+```
+
+```shell
+$ export RUSTFLAGS=-Zsanitizer=address RUSTDOCFLAGS=-Zsanitizer=address
+$ cargo run -Zbuild-std --target x86_64-unknown-linux-gnu
+==37882==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffe400e6250 at pc 0x5609a841fb20 bp 0x7ffe400e6210 sp 0x7ffe400e6208
+READ of size 4 at 0x7ffe400e6250 thread T0
+ #0 0x5609a841fb1f in example::main::h628ffc6626ed85b2 /.../src/main.rs:3:23
+ ...
+
+Address 0x7ffe400e6250 is located in stack of thread T0 at offset 48 in frame
+ #0 0x5609a841f8af in example::main::h628ffc6626ed85b2 /.../src/main.rs:1
+
+ This frame has 1 object(s):
+ [32, 48) 'xs' (line 2) <== Memory access at offset 48 overflows this variable
+HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
+ (longjmp and C++ exceptions *are* supported)
+SUMMARY: AddressSanitizer: stack-buffer-overflow /.../src/main.rs:3:23 in example::main::h628ffc6626ed85b2
+Shadow bytes around the buggy address:
+ 0x100048014bf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x100048014c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x100048014c10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x100048014c20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x100048014c30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+=>0x100048014c40: 00 00 00 00 f1 f1 f1 f1 00 00[f3]f3 00 00 00 00
+ 0x100048014c50: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x100048014c60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x100048014c70: f1 f1 f1 f1 00 00 f3 f3 00 00 00 00 00 00 00 00
+ 0x100048014c80: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
+ 0x100048014c90: 00 00 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
+Shadow byte legend (one shadow byte represents 8 application bytes):
+ Addressable: 00
+ Partially addressable: 01 02 03 04 05 06 07
+ Heap left redzone: fa
+ Freed heap region: fd
+ Stack left redzone: f1
+ Stack mid redzone: f2
+ Stack right redzone: f3
+ Stack after return: f5
+ Stack use after scope: f8
+ Global redzone: f9
+ Global init order: f6
+ Poisoned by user: f7
+ Container overflow: fc
+ Array cookie: ac
+ Intra object redzone: bb
+ ASan internal: fe
+ Left alloca redzone: ca
+ Right alloca redzone: cb
+ Shadow gap: cc
+==37882==ABORTING
+```
+
+Use of a stack object after its scope has already ended:
+
+```rust
+static mut P: *mut usize = std::ptr::null_mut();
+
+fn main() {
+ unsafe {
+ {
+ let mut x = 0;
+ P = &mut x;
+ }
+ std::ptr::write_volatile(P, 123);
+ }
+}
+```
+
+```shell
+$ export RUSTFLAGS=-Zsanitizer=address RUSTDOCFLAGS=-Zsanitizer=address
+$ cargo run -Zbuild-std --target x86_64-unknown-linux-gnu
+=================================================================
+==39249==ERROR: AddressSanitizer: stack-use-after-scope on address 0x7ffc7ed3e1a0 at pc 0x55c98b262a8e bp 0x7ffc7ed3e050 sp 0x7ffc7ed3e048
+WRITE of size 8 at 0x7ffc7ed3e1a0 thread T0
+ #0 0x55c98b262a8d in core::ptr::write_volatile::he21f1df5a82f329a /.../src/rust/src/libcore/ptr/mod.rs:1048:5
+ #1 0x55c98b262cd2 in example::main::h628ffc6626ed85b2 /.../src/main.rs:9:9
+ ...
+
+Address 0x7ffc7ed3e1a0 is located in stack of thread T0 at offset 32 in frame
+ #0 0x55c98b262bdf in example::main::h628ffc6626ed85b2 /.../src/main.rs:3
+
+ This frame has 1 object(s):
+ [32, 40) 'x' (line 6) <== Memory access at offset 32 is inside this variable
+HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
+ (longjmp and C++ exceptions *are* supported)
+SUMMARY: AddressSanitizer: stack-use-after-scope /.../src/rust/src/libcore/ptr/mod.rs:1048:5 in core::ptr::write_volatile::he21f1df5a82f329a
+Shadow bytes around the buggy address:
+ 0x10000fd9fbe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x10000fd9fbf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x10000fd9fc00: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
+ 0x10000fd9fc10: f8 f8 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x10000fd9fc20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+=>0x10000fd9fc30: f1 f1 f1 f1[f8]f3 f3 f3 00 00 00 00 00 00 00 00
+ 0x10000fd9fc40: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
+ 0x10000fd9fc50: 00 00 f3 f3 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x10000fd9fc60: 00 00 00 00 00 00 00 00 f1 f1 f1 f1 00 00 f3 f3
+ 0x10000fd9fc70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0x10000fd9fc80: 00 00 00 00 f1 f1 f1 f1 00 00 f3 f3 00 00 00 00
+Shadow byte legend (one shadow byte represents 8 application bytes):
+ Addressable: 00
+ Partially addressable: 01 02 03 04 05 06 07
+ Heap left redzone: fa
+ Freed heap region: fd
+ Stack left redzone: f1
+ Stack mid redzone: f2
+ Stack right redzone: f3
+ Stack after return: f5
+ Stack use after scope: f8
+ Global redzone: f9
+ Global init order: f6
+ Poisoned by user: f7
+ Container overflow: fc
+ Array cookie: ac
+ Intra object redzone: bb
+ ASan internal: fe
+ Left alloca redzone: ca
+ Right alloca redzone: cb
+ Shadow gap: cc
+==39249==ABORTING
+```
+
+# ControlFlowIntegrity
+
+The LLVM Control Flow Integrity (CFI) support in the Rust compiler initially
+provides forward-edge control flow protection for Rust-compiled code only by
+aggregating function pointers in groups identified by their return and parameter
+types.
+
+Forward-edge control flow protection for C or C++ and Rust -compiled code "mixed
+binaries" (i.e., for when C or C++ and Rust -compiled code share the same
+virtual address space) will be provided in later work by defining and using
+compatible type identifiers (see Type metadata in the design document in the
+tracking issue [#89653](https://github.com/rust-lang/rust/issues/89653)).
+
+LLVM CFI can be enabled with -Zsanitizer=cfi and requires LTO (i.e., -Clto).
+
+## Example
+
+```text
+#![feature(naked_functions)]
+
+use std::arch::asm;
+use std::mem;
+
+fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+#[naked]
+pub extern "C" fn add_two(x: i32) {
+ // x + 2 preceded by a landing pad/nop block
+ unsafe {
+ asm!(
+ "
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ lea rax, [rdi+2]
+ ret
+ ",
+ options(noreturn)
+ );
+ }
+}
+
+fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
+ f(arg) + f(arg)
+}
+
+fn main() {
+ let answer = do_twice(add_one, 5);
+
+ println!("The answer is: {}", answer);
+
+ println!("With CFI enabled, you should not see the next answer");
+ let f: fn(i32) -> i32 = unsafe {
+ // Offsets 0-8 make it land in the landing pad/nop block, and offsets 1-8 are
+ // invalid branch/call destinations (i.e., within the body of the function).
+ mem::transmute::<*const u8, fn(i32) -> i32>((add_two as *const u8).offset(5))
+ };
+ let next_answer = do_twice(f, 5);
+
+ println!("The next answer is: {}", next_answer);
+}
+```
+Fig. 1. Modified example from the [Advanced Functions and
+Closures][rust-book-ch19-05] chapter of the [The Rust Programming
+Language][rust-book] book.
+
+```shell
+$ cargo run --release
+ Compiling rust-cfi-1 v0.1.0 (/home/rcvalle/rust-cfi-1)
+ Finished release [optimized] target(s) in 0.76s
+ Running `target/release/rust-cfi-1`
+The answer is: 12
+With CFI enabled, you should not see the next answer
+The next answer is: 14
+$
+```
+Fig. 2. Build and execution of the modified example with LLVM CFI disabled.
+
+```shell
+$ RUSTFLAGS="-Zsanitizer=cfi -Cembed-bitcode=yes -Clto" cargo run --release
+ Compiling rust-cfi-1 v0.1.0 (/home/rcvalle/rust-cfi-1)
+ Finished release [optimized] target(s) in 3.39s
+ Running `target/release/rust-cfi-1`
+The answer is: 12
+With CFI enabled, you should not see the next answer
+Illegal instruction
+$
+```
+Fig. 3. Build and execution of the modified example with LLVM CFI enabled.
+
+When LLVM CFI is enabled, if there are any attempts to change/hijack control
+flow using an indirect branch/call to an invalid destination, the execution is
+terminated (see Fig. 3).
+
+```rust
+use std::mem;
+
+fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+fn add_two(x: i32, _y: i32) -> i32 {
+ x + 2
+}
+
+fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
+ f(arg) + f(arg)
+}
+
+fn main() {
+ let answer = do_twice(add_one, 5);
+
+ println!("The answer is: {}", answer);
+
+ println!("With CFI enabled, you should not see the next answer");
+ let f: fn(i32) -> i32 =
+ unsafe { mem::transmute::<*const u8, fn(i32) -> i32>(add_two as *const u8) };
+ let next_answer = do_twice(f, 5);
+
+ println!("The next answer is: {}", next_answer);
+}
+```
+Fig. 4. Another modified example from the [Advanced Functions and
+Closures][rust-book-ch19-05] chapter of the [The Rust Programming
+Language][rust-book] book.
+
+```shell
+$ cargo run --release
+ Compiling rust-cfi-2 v0.1.0 (/home/rcvalle/rust-cfi-2)
+ Finished release [optimized] target(s) in 0.76s
+ Running `target/release/rust-cfi-2`
+The answer is: 12
+With CFI enabled, you should not see the next answer
+The next answer is: 14
+$
+```
+Fig. 5. Build and execution of the modified example with LLVM CFI disabled.
+
+```shell
+$ RUSTFLAGS="-Zsanitizer=cfi -Cembed-bitcode=yes -Clto" cargo run --release
+ Compiling rust-cfi-2 v0.1.0 (/home/rcvalle/rust-cfi-2)
+ Finished release [optimized] target(s) in 3.38s
+ Running `target/release/rust-cfi-2`
+The answer is: 12
+With CFI enabled, you should not see the next answer
+Illegal instruction
+$
+```
+Fig. 6. Build and execution of the modified example with LLVM CFI enabled.
+
+When LLVM CFI is enabled, if there are any attempts to change/hijack control
+flow using an indirect branch/call to a function with different number of
+parameters than arguments intended/passed in the call/branch site, the
+execution is also terminated (see Fig. 6).
+
+```rust
+use std::mem;
+
+fn add_one(x: i32) -> i32 {
+ x + 1
+}
+
+fn add_two(x: i64) -> i64 {
+ x + 2
+}
+
+fn do_twice(f: fn(i32) -> i32, arg: i32) -> i32 {
+ f(arg) + f(arg)
+}
+
+fn main() {
+ let answer = do_twice(add_one, 5);
+
+ println!("The answer is: {}", answer);
+
+ println!("With CFI enabled, you should not see the next answer");
+ let f: fn(i32) -> i32 =
+ unsafe { mem::transmute::<*const u8, fn(i32) -> i32>(add_two as *const u8) };
+ let next_answer = do_twice(f, 5);
+
+ println!("The next answer is: {}", next_answer);
+}
+```
+Fig. 7. Another modified example from the [Advanced Functions and
+Closures][rust-book-ch19-05] chapter of the [The Rust Programming
+Language][rust-book] book.
+
+```shell
+ cargo run --release
+ Compiling rust-cfi-3 v0.1.0 (/home/rcvalle/rust-cfi-3)
+ Finished release [optimized] target(s) in 0.74s
+ Running `target/release/rust-cfi-3`
+The answer is: 12
+With CFI enabled, you should not see the next answer
+The next answer is: 14
+$
+```
+Fig. 8. Build and execution of the modified example with LLVM CFI disabled.
+
+```shell
+$ RUSTFLAGS="-Zsanitizer=cfi -Cembed-bitcode=yes -Clto" cargo run --release
+ Compiling rust-cfi-3 v0.1.0 (/home/rcvalle/rust-cfi-3)
+ Finished release [optimized] target(s) in 3.40s
+ Running `target/release/rust-cfi-3`
+The answer is: 12
+With CFI enabled, you should not see the next answer
+Illegal instruction
+$
+```
+Fig. 9. Build and execution of the modified example with LLVM CFI enabled.
+
+When LLVM CFI is enabled, if there are any attempts to change/hijack control
+flow using an indirect branch/call to a function with different return and
+parameter types than the return type expected and arguments intended/passed in
+the call/branch site, the execution is also terminated (see Fig. 9).
+
+[rust-book-ch19-05]: https://doc.rust-lang.org/book/ch19-05-advanced-functions-and-closures.html
+[rust-book]: https://doc.rust-lang.org/book/title-page.html
+
+# HWAddressSanitizer
+
+HWAddressSanitizer is a newer variant of AddressSanitizer that consumes much
+less memory.
+
+HWAddressSanitizer is supported on the following targets:
+
+* `aarch64-linux-android`
+* `aarch64-unknown-linux-gnu`
+
+HWAddressSanitizer requires `tagged-globals` target feature to instrument
+globals. To enable this target feature compile with `-C
+target-feature=+tagged-globals`
+
+## Example
+
+Heap buffer overflow:
+
+```rust
+fn main() {
+ let xs = vec![0, 1, 2, 3];
+ let _y = unsafe { *xs.as_ptr().offset(4) };
+}
+```
+
+```shell
+$ rustc main.rs -Zsanitizer=hwaddress -C target-feature=+tagged-globals -C
+linker=aarch64-linux-gnu-gcc -C link-arg=-fuse-ld=lld --target
+aarch64-unknown-linux-gnu
+```
+
+```shell
+$ ./main
+==241==ERROR: HWAddressSanitizer: tag-mismatch on address 0xefdeffff0050 at pc 0xaaaae0ae4a98
+READ of size 4 at 0xefdeffff0050 tags: 2c/00 (ptr/mem) in thread T0
+ #0 0xaaaae0ae4a94 (/.../main+0x54a94)
+ ...
+
+[0xefdeffff0040,0xefdeffff0060) is a small allocated heap chunk; size: 32 offset: 16
+0xefdeffff0050 is located 0 bytes to the right of 16-byte region [0xefdeffff0040,0xefdeffff0050)
+allocated here:
+ #0 0xaaaae0acb80c (/.../main+0x3b80c)
+ ...
+
+Thread: T0 0xeffe00002000 stack: [0xffffc28ad000,0xffffc30ad000) sz: 8388608 tls: [0xffffaa10a020,0xffffaa10a7d0)
+Memory tags around the buggy address (one tag corresponds to 16 bytes):
+ 0xfefcefffef80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffef90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffefa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffefb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffefc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffefd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffefe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefcefffeff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+=>0xfefceffff000: d7 d7 05 00 2c [00] 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+ 0xfefceffff080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+Tags for short granules around the buggy address (one tag corresponds to 16 bytes):
+ 0xfefcefffeff0: .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
+=>0xfefceffff000: .. .. 8c .. .. [..] .. .. .. .. .. .. .. .. .. ..
+ 0xfefceffff010: .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
+See https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html#short-granules for a description of short granule tags
+Registers where the failure occurred (pc 0xaaaae0ae4a98):
+ x0 2c00efdeffff0050 x1 0000000000000004 x2 0000000000000004 x3 0000000000000000
+ x4 0000fffefc30ac37 x5 000000000000005d x6 00000ffffc30ac37 x7 0000efff00000000
+ x8 2c00efdeffff0050 x9 0200efff00000000 x10 0000000000000000 x11 0200efff00000000
+ x12 0200effe00000310 x13 0200effe00000310 x14 0000000000000008 x15 5d00ffffc30ac360
+ x16 0000aaaae0ad062c x17 0000000000000003 x18 0000000000000001 x19 0000ffffc30ac658
+ x20 4e00ffffc30ac6e0 x21 0000aaaae0ac5e10 x22 0000000000000000 x23 0000000000000000
+ x24 0000000000000000 x25 0000000000000000 x26 0000000000000000 x27 0000000000000000
+ x28 0000000000000000 x29 0000ffffc30ac5a0 x30 0000aaaae0ae4a98
+SUMMARY: HWAddressSanitizer: tag-mismatch (/.../main+0x54a94)
+```
+
+# LeakSanitizer
+
+LeakSanitizer is run-time memory leak detector.
+
+LeakSanitizer is supported on the following targets:
+
+* `aarch64-apple-darwin`
+* `aarch64-unknown-linux-gnu`
+* `x86_64-apple-darwin`
+* `x86_64-unknown-linux-gnu`
+
+# MemorySanitizer
+
+MemorySanitizer is detector of uninitialized reads.
+
+MemorySanitizer is supported on the following targets:
+
+* `aarch64-unknown-linux-gnu`
+* `x86_64-unknown-freebsd`
+* `x86_64-unknown-linux-gnu`
+
+MemorySanitizer requires all program code to be instrumented. C/C++ dependencies
+need to be recompiled using Clang with `-fsanitize=memory` option. Failing to
+achieve that will result in false positive reports.
+
+## Example
+
+Detecting the use of uninitialized memory. The `-Zbuild-std` flag rebuilds and
+instruments the standard library, and is strictly necessary for the correct
+operation of the tool. The `-Zsanitizer-memory-track-origins` enables tracking
+of the origins of uninitialized memory:
+
+```rust
+use std::mem::MaybeUninit;
+
+fn main() {
+ unsafe {
+ let a = MaybeUninit::<[usize; 4]>::uninit();
+ let a = a.assume_init();
+ println!("{}", a[2]);
+ }
+}
+```
+
+```shell
+$ export \
+ RUSTFLAGS='-Zsanitizer=memory -Zsanitizer-memory-track-origins' \
+ RUSTDOCFLAGS='-Zsanitizer=memory -Zsanitizer-memory-track-origins'
+$ cargo clean
+$ cargo run -Zbuild-std --target x86_64-unknown-linux-gnu
+==9416==WARNING: MemorySanitizer: use-of-uninitialized-value
+ #0 0x560c04f7488a in core::fmt::num::imp::fmt_u64::haa293b0b098501ca $RUST/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/src/rust/src/libcore/fmt/num.rs:202:16
+...
+ Uninitialized value was stored to memory at
+ #0 0x560c04ae898a in __msan_memcpy.part.0 $RUST/src/llvm-project/compiler-rt/lib/msan/msan_interceptors.cc:1558:3
+ #1 0x560c04b2bf88 in memory::main::hd2333c1899d997f5 $CWD/src/main.rs:6:16
+
+ Uninitialized value was created by an allocation of 'a' in the stack frame of function '_ZN6memory4main17hd2333c1899d997f5E'
+ #0 0x560c04b2bc50 in memory::main::hd2333c1899d997f5 $CWD/src/main.rs:3
+```
+
+# MemTagSanitizer
+
+MemTagSanitizer detects a similar class of errors as AddressSanitizer and HardwareAddressSanitizer, but with lower overhead suitable for use as hardening for production binaries.
+
+MemTagSanitizer is supported on the following targets:
+
+* `aarch64-linux-android`
+* `aarch64-unknown-linux-gnu`
+
+MemTagSanitizer requires hardware support and the `mte` target feature.
+To enable this target feature compile with `-C target-feature="+mte"`.
+
+More information can be found in the associated [LLVM documentation](https://llvm.org/docs/MemTagSanitizer.html).
+
+# ShadowCallStack
+
+ShadowCallStack provides backward edge control flow protection by storing a function's return address in a separately allocated 'shadow call stack' and loading the return address from that shadow call stack.
+
+ShadowCallStack requires a platform ABI which reserves `x18` as the instrumentation makes use of this register.
+
+ShadowCallStack can be enabled with `-Zsanitizer=shadow-call-stack` option and is supported on the following targets:
+
+* `aarch64-linux-android`
+
+A runtime must be provided by the application or operating system. See the [LLVM documentation][clang-scs] for further details.
+
+# ThreadSanitizer
+
+ThreadSanitizer is a data race detection tool. It is supported on the following
+targets:
+
+* `aarch64-apple-darwin`
+* `aarch64-unknown-linux-gnu`
+* `x86_64-apple-darwin`
+* `x86_64-unknown-freebsd`
+* `x86_64-unknown-linux-gnu`
+
+To work correctly ThreadSanitizer needs to be "aware" of all synchronization
+operations in a program. It generally achieves that through combination of
+library interception (for example synchronization performed through
+`pthread_mutex_lock` / `pthread_mutex_unlock`) and compile time instrumentation
+(e.g. atomic operations). Using it without instrumenting all the program code
+can lead to false positive reports.
+
+ThreadSanitizer does not support atomic fences `std::sync::atomic::fence`,
+nor synchronization performed using inline assembly code.
+
+## Example
+
+```rust
+static mut A: usize = 0;
+
+fn main() {
+ let t = std::thread::spawn(|| {
+ unsafe { A += 1 };
+ });
+ unsafe { A += 1 };
+
+ t.join().unwrap();
+}
+```
+
+```shell
+$ export RUSTFLAGS=-Zsanitizer=thread RUSTDOCFLAGS=-Zsanitizer=thread
+$ cargo run -Zbuild-std --target x86_64-unknown-linux-gnu
+==================
+WARNING: ThreadSanitizer: data race (pid=10574)
+ Read of size 8 at 0x5632dfe3d030 by thread T1:
+ #0 example::main::_$u7b$$u7b$closure$u7d$$u7d$::h23f64b0b2f8c9484 ../src/main.rs:5:18 (example+0x86cec)
+ ...
+
+ Previous write of size 8 at 0x5632dfe3d030 by main thread:
+ #0 example::main::h628ffc6626ed85b2 /.../src/main.rs:7:14 (example+0x868c8)
+ ...
+ #11 main <null> (example+0x86a1a)
+
+ Location is global 'example::A::h43ac149ddf992709' of size 8 at 0x5632dfe3d030 (example+0x000000bd9030)
+```
+
+# Instrumentation of external dependencies and std
+
+The sanitizers to varying degrees work correctly with partially instrumented
+code. On the one extreme is LeakSanitizer that doesn't use any compile time
+instrumentation, on the other is MemorySanitizer that requires that all program
+code to be instrumented (failing to achieve that will inevitably result in
+false positives).
+
+It is strongly recommended to combine sanitizers with recompiled and
+instrumented standard library, for example using [cargo `-Zbuild-std`
+functionality][build-std].
+
+[build-std]: https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#build-std
+
+# Build scripts and procedural macros
+
+Use of sanitizers together with build scripts and procedural macros is
+technically possible, but in almost all cases it would be best avoided. This
+is especially true for procedural macros which would require an instrumented
+version of rustc.
+
+In more practical terms when using cargo always remember to pass `--target`
+flag, so that rustflags will not be applied to build scripts and procedural
+macros.
+
+# Symbolizing the Reports
+
+Sanitizers produce symbolized stacktraces when llvm-symbolizer binary is in `PATH`.
+
+# Additional Information
+
+* [Sanitizers project page](https://github.com/google/sanitizers/wiki/)
+* [AddressSanitizer in Clang][clang-asan]
+* [ControlFlowIntegrity in Clang][clang-cfi]
+* [HWAddressSanitizer in Clang][clang-hwasan]
+* [LeakSanitizer in Clang][clang-lsan]
+* [MemorySanitizer in Clang][clang-msan]
+* [ThreadSanitizer in Clang][clang-tsan]
+
+[clang-asan]: https://clang.llvm.org/docs/AddressSanitizer.html
+[clang-cfi]: https://clang.llvm.org/docs/ControlFlowIntegrity.html
+[clang-hwasan]: https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html
+[clang-lsan]: https://clang.llvm.org/docs/LeakSanitizer.html
+[clang-msan]: https://clang.llvm.org/docs/MemorySanitizer.html
+[clang-scs]: https://clang.llvm.org/docs/ShadowCallStack.html
+[clang-tsan]: https://clang.llvm.org/docs/ThreadSanitizer.html
diff --git a/src/doc/unstable-book/src/compiler-flags/self-profile-events.md b/src/doc/unstable-book/src/compiler-flags/self-profile-events.md
new file mode 100644
index 000000000..3ce18743b
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/self-profile-events.md
@@ -0,0 +1,74 @@
+# `self-profile-events`
+
+---------------------
+
+The `-Zself-profile-events` compiler flag controls what events are recorded by the self-profiler when it is enabled via the `-Zself-profile` flag.
+
+This flag takes a comma delimited list of event types to record.
+
+For example:
+
+```console
+$ rustc -Zself-profile -Zself-profile-events=default,args
+```
+
+## Event types
+
+- `query-provider`
+ - Traces each query used internally by the compiler.
+
+- `generic-activity`
+ - Traces other parts of the compiler not covered by the query system.
+
+- `query-cache-hit`
+ - Adds tracing information that records when the in-memory query cache is "hit" and does not need to re-execute a query which has been cached.
+ - Disabled by default because this significantly increases the trace file size.
+
+- `query-blocked`
+ - Tracks time that a query tries to run but is blocked waiting on another thread executing the same query to finish executing.
+ - Query blocking only occurs when the compiler is built with parallel mode support.
+
+- `incr-cache-load`
+ - Tracks time that is spent loading and deserializing query results from the incremental compilation on-disk cache.
+
+- `query-keys`
+ - Adds a serialized representation of each query's query key to the tracing data.
+ - Disabled by default because this significantly increases the trace file size.
+
+- `function-args`
+ - Adds additional tracing data to some `generic-activity` events.
+ - Disabled by default for parity with `query-keys`.
+
+- `llvm`
+ - Adds tracing information about LLVM passes and codegeneration.
+ - Disabled by default because this only works when `-Znew-llvm-pass-manager` is enabled.
+
+## Event synonyms
+
+- `none`
+ - Disables all events.
+ Equivalent to the self-profiler being disabled.
+
+- `default`
+ - The default set of events which stikes a balance between providing detailed tracing data and adding additional overhead to the compilation.
+
+- `args`
+ - Equivalent to `query-keys` and `function-args`.
+
+- `all`
+ - Enables all events.
+
+## Examples
+
+Enable the profiler and capture the default set of events (both invocations are equivalent):
+
+```console
+$ rustc -Zself-profile
+$ rustc -Zself-profile -Zself-profile-events=default
+```
+
+Enable the profiler and capture the default events and their arguments:
+
+```console
+$ rustc -Zself-profile -Zself-profile-events=default,args
+```
diff --git a/src/doc/unstable-book/src/compiler-flags/self-profile.md b/src/doc/unstable-book/src/compiler-flags/self-profile.md
new file mode 100644
index 000000000..7305141a4
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/self-profile.md
@@ -0,0 +1,47 @@
+# `self-profile`
+
+--------------------
+
+The `-Zself-profile` compiler flag enables rustc's internal profiler.
+When enabled, the compiler will output three binary files in the specified directory (or the current working directory if no directory is specified).
+These files can be analyzed by using the tools in the [`measureme`] repository.
+
+To control the data recorded in the trace files, use the `-Zself-profile-events` flag.
+
+For example:
+
+First, run a compilation session and provide the `-Zself-profile` flag:
+
+```console
+$ rustc --crate-name foo -Zself-profile
+```
+
+This will generate three files in the working directory such as:
+
+- `foo-1234.events`
+- `foo-1234.string_data`
+- `foo-1234.string_index`
+
+Where `foo` is the name of the crate and `1234` is the process id of the rustc process.
+
+To get a summary of where the compiler is spending its time:
+
+```console
+$ ../measureme/target/release/summarize summarize foo-1234
+```
+
+To generate a flamegraph of the same data:
+
+```console
+$ ../measureme/target/release/inferno foo-1234
+```
+
+To dump the event data in a Chromium-profiler compatible format:
+
+```console
+$ ../measureme/target/release/crox foo-1234
+```
+
+For more information, consult the [`measureme`] documentation.
+
+[`measureme`]: https://github.com/rust-lang/measureme.git
diff --git a/src/doc/unstable-book/src/compiler-flags/src-hash-algorithm.md b/src/doc/unstable-book/src/compiler-flags/src-hash-algorithm.md
new file mode 100644
index 000000000..ff776741b
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/src-hash-algorithm.md
@@ -0,0 +1,11 @@
+# `src-hash-algorithm`
+
+The tracking issue for this feature is: [#70401](https://github.com/rust-lang/rust/issues/70401).
+
+------------------------
+
+The `-Z src-hash-algorithm` compiler flag controls which algorithm is used when hashing each source file. The hash is stored in the debug info and can be used by a debugger to verify the source code matches the executable.
+
+Supported hash algorithms are: `md5`, `sha1`, and `sha256`. Note that not all hash algorithms are supported by all debug info formats.
+
+By default, the compiler chooses the hash algorithm based on the target specification.
diff --git a/src/doc/unstable-book/src/compiler-flags/temps-dir.md b/src/doc/unstable-book/src/compiler-flags/temps-dir.md
new file mode 100644
index 000000000..e25011f71
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/temps-dir.md
@@ -0,0 +1,10 @@
+# `temps-dir`
+
+--------------------
+
+The `-Ztemps-dir` compiler flag specifies the directory to write the
+intermediate files in. If not set, the output directory is used. This option is
+useful if you are running more than one instance of `rustc` (e.g. with different
+`--crate-type` settings), and you need to make sure they are not overwriting
+each other's intermediate files. No files are kept unless `-C save-temps=yes` is
+also set.
diff --git a/src/doc/unstable-book/src/compiler-flags/tls-model.md b/src/doc/unstable-book/src/compiler-flags/tls-model.md
new file mode 100644
index 000000000..8b19e785c
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/tls-model.md
@@ -0,0 +1,25 @@
+# `tls_model`
+
+The tracking issue for this feature is: None.
+
+------------------------
+
+Option `-Z tls-model` controls [TLS model](https://www.akkadia.org/drepper/tls.pdf) used to
+generate code for accessing `#[thread_local]` `static` items.
+
+Supported values for this option are:
+
+- `global-dynamic` - General Dynamic TLS Model (alternatively called Global Dynamic) is the most
+general option usable in all circumstances, even if the TLS data is defined in a shared library
+loaded at runtime and is accessed from code outside of that library.
+This is the default for most targets.
+- `local-dynamic` - model usable if the TLS data is only accessed from the shared library or
+executable it is defined in. The TLS data may be in a library loaded after startup (via `dlopen`).
+- `initial-exec` - model usable if the TLS data is defined in the executable or in a shared library
+loaded at program startup.
+The TLS data must not be in a library loaded after startup (via `dlopen`).
+- `local-exec` - model usable only if the TLS data is defined directly in the executable,
+but not in a shared library, and is accessed only from that executable.
+
+`rustc` and LLVM may use a more optimized model than specified if they know that we are producing
+an executable rather than a library, or that the `static` item is private enough.
diff --git a/src/doc/unstable-book/src/compiler-flags/unsound-mir-opts.md b/src/doc/unstable-book/src/compiler-flags/unsound-mir-opts.md
new file mode 100644
index 000000000..8e46e227c
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/unsound-mir-opts.md
@@ -0,0 +1,8 @@
+# `unsound-mir-opts`
+
+--------------------
+
+The `-Zunsound-mir-opts` compiler flag enables [MIR optimization passes] which can cause unsound behavior.
+This flag should only be used by MIR optimization tests in the rustc test suite.
+
+[MIR optimization passes]: https://rustc-dev-guide.rust-lang.org/mir/optimizations.html
diff --git a/src/doc/unstable-book/src/compiler-flags/virtual-function-elimination.md b/src/doc/unstable-book/src/compiler-flags/virtual-function-elimination.md
new file mode 100644
index 000000000..c6516d838
--- /dev/null
+++ b/src/doc/unstable-book/src/compiler-flags/virtual-function-elimination.md
@@ -0,0 +1,39 @@
+# `virtual-function-elimination`
+
+This option controls whether LLVM runs the Virtual Function Elimination (VFE)
+optimization. This optimization in only available with LTO, so this flag can
+only be passed if [`-Clto`][Clto] is also passed.
+
+VFE makes it possible to remove functions from vtables that are never
+dynamically called by the rest of the code. Without this flag, LLVM makes the
+really conservative assumption, that if any function in a vtable is called, no
+function that is referenced by this vtable can be removed. With this flag
+additional information are given to LLVM, so that it can determine which
+functions are actually called and remove the unused functions.
+
+## Limitations
+
+At the time of writing this flag may remove vtable functions too eagerly. One
+such example is in this code:
+
+```rust
+trait Foo { fn foo(&self) { println!("foo") } }
+
+impl Foo for usize {}
+
+pub struct FooBox(Box<dyn Foo>);
+
+pub fn make_foo() -> FooBox { FooBox(Box::new(0)) }
+
+#[inline]
+pub fn f(a: FooBox) { a.0.foo() }
+```
+
+In the above code the `Foo` trait is private, so an assumption is made that its
+functions can only be seen/called from the current crate and can therefore get
+optimized out, if unused. However, with `make_foo` you can produce a wrapped
+`dyn Foo` type outside of the current crate, which can then be used in `f`. Due
+to inlining of `f`, `Foo::foo` can then be called from a foreign crate. This can
+lead to miscompilations.
+
+[Clto]: https://doc.rust-lang.org/rustc/codegen-options/index.html#lto
diff --git a/src/doc/unstable-book/src/language-features.md b/src/doc/unstable-book/src/language-features.md
new file mode 100644
index 000000000..a27514df9
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features.md
@@ -0,0 +1 @@
+# Language features
diff --git a/src/doc/unstable-book/src/language-features/abi-c-cmse-nonsecure-call.md b/src/doc/unstable-book/src/language-features/abi-c-cmse-nonsecure-call.md
new file mode 100644
index 000000000..79a177cb2
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/abi-c-cmse-nonsecure-call.md
@@ -0,0 +1,88 @@
+# `abi_c_cmse_nonsecure_call`
+
+The tracking issue for this feature is: [#81391]
+
+[#81391]: https://github.com/rust-lang/rust/issues/81391
+
+------------------------
+
+The [TrustZone-M
+feature](https://developer.arm.com/documentation/100690/latest/) is available
+for targets with the Armv8-M architecture profile (`thumbv8m` in their target
+name).
+LLVM, the Rust compiler and the linker are providing
+[support](https://developer.arm.com/documentation/ecm0359818/latest/) for the
+TrustZone-M feature.
+
+One of the things provided, with this unstable feature, is the
+`C-cmse-nonsecure-call` function ABI. This ABI is used on function pointers to
+non-secure code to mark a non-secure function call (see [section
+5.5](https://developer.arm.com/documentation/ecm0359818/latest/) for details).
+
+With this ABI, the compiler will do the following to perform the call:
+* save registers needed after the call to Secure memory
+* clear all registers that might contain confidential information
+* clear the Least Significant Bit of the function address
+* branches using the BLXNS instruction
+
+To avoid using the non-secure stack, the compiler will constrain the number and
+type of parameters/return value.
+
+The `extern "C-cmse-nonsecure-call"` ABI is otherwise equivalent to the
+`extern "C"` ABI.
+
+<!-- NOTE(ignore) this example is specific to thumbv8m targets -->
+
+``` rust,ignore
+#![no_std]
+#![feature(abi_c_cmse_nonsecure_call)]
+
+#[no_mangle]
+pub fn call_nonsecure_function(addr: usize) -> u32 {
+ let non_secure_function =
+ unsafe { core::mem::transmute::<usize, extern "C-cmse-nonsecure-call" fn() -> u32>(addr) };
+ non_secure_function()
+}
+```
+
+``` text
+$ rustc --emit asm --crate-type lib --target thumbv8m.main-none-eabi function.rs
+
+call_nonsecure_function:
+ .fnstart
+ .save {r7, lr}
+ push {r7, lr}
+ .setfp r7, sp
+ mov r7, sp
+ .pad #16
+ sub sp, #16
+ str r0, [sp, #12]
+ ldr r0, [sp, #12]
+ str r0, [sp, #8]
+ b .LBB0_1
+.LBB0_1:
+ ldr r0, [sp, #8]
+ push.w {r4, r5, r6, r7, r8, r9, r10, r11}
+ bic r0, r0, #1
+ mov r1, r0
+ mov r2, r0
+ mov r3, r0
+ mov r4, r0
+ mov r5, r0
+ mov r6, r0
+ mov r7, r0
+ mov r8, r0
+ mov r9, r0
+ mov r10, r0
+ mov r11, r0
+ mov r12, r0
+ msr apsr_nzcvq, r0
+ blxns r0
+ pop.w {r4, r5, r6, r7, r8, r9, r10, r11}
+ str r0, [sp, #4]
+ b .LBB0_2
+.LBB0_2:
+ ldr r0, [sp, #4]
+ add sp, #16
+ pop {r7, pc}
+```
diff --git a/src/doc/unstable-book/src/language-features/abi-msp430-interrupt.md b/src/doc/unstable-book/src/language-features/abi-msp430-interrupt.md
new file mode 100644
index 000000000..b10bc41cb
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/abi-msp430-interrupt.md
@@ -0,0 +1,42 @@
+# `abi_msp430_interrupt`
+
+The tracking issue for this feature is: [#38487]
+
+[#38487]: https://github.com/rust-lang/rust/issues/38487
+
+------------------------
+
+In the MSP430 architecture, interrupt handlers have a special calling
+convention. You can use the `"msp430-interrupt"` ABI to make the compiler apply
+the right calling convention to the interrupt handlers you define.
+
+<!-- NOTE(ignore) this example is specific to the msp430 target -->
+
+``` rust,ignore
+#![feature(abi_msp430_interrupt)]
+#![no_std]
+
+// Place the interrupt handler at the appropriate memory address
+// (Alternatively, you can use `#[used]` and remove `pub` and `#[no_mangle]`)
+#[link_section = "__interrupt_vector_10"]
+#[no_mangle]
+pub static TIM0_VECTOR: extern "msp430-interrupt" fn() = tim0;
+
+// The interrupt handler
+extern "msp430-interrupt" fn tim0() {
+ // ..
+}
+```
+
+``` text
+$ msp430-elf-objdump -CD ./target/msp430/release/app
+Disassembly of section __interrupt_vector_10:
+
+0000fff2 <TIM0_VECTOR>:
+ fff2: 00 c0 interrupt service routine at 0xc000
+
+Disassembly of section .text:
+
+0000c000 <int::tim0>:
+ c000: 00 13 reti
+```
diff --git a/src/doc/unstable-book/src/language-features/abi-ptx.md b/src/doc/unstable-book/src/language-features/abi-ptx.md
new file mode 100644
index 000000000..0ded3ceea
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/abi-ptx.md
@@ -0,0 +1,60 @@
+# `abi_ptx`
+
+The tracking issue for this feature is: [#38788]
+
+[#38788]: https://github.com/rust-lang/rust/issues/38788
+
+------------------------
+
+When emitting PTX code, all vanilla Rust functions (`fn`) get translated to
+"device" functions. These functions are *not* callable from the host via the
+CUDA API so a crate with only device functions is not too useful!
+
+OTOH, "global" functions *can* be called by the host; you can think of them
+as the real public API of your crate. To produce a global function use the
+`"ptx-kernel"` ABI.
+
+<!-- NOTE(ignore) this example is specific to the nvptx targets -->
+
+``` rust,ignore
+#![feature(abi_ptx)]
+#![no_std]
+
+pub unsafe extern "ptx-kernel" fn global_function() {
+ device_function();
+}
+
+pub fn device_function() {
+ // ..
+}
+```
+
+``` text
+$ xargo rustc --target nvptx64-nvidia-cuda --release -- --emit=asm
+
+$ cat $(find -name '*.s')
+//
+// Generated by LLVM NVPTX Back-End
+//
+
+.version 3.2
+.target sm_20
+.address_size 64
+
+ // .globl _ZN6kernel15global_function17h46111ebe6516b382E
+
+.visible .entry _ZN6kernel15global_function17h46111ebe6516b382E()
+{
+
+
+ ret;
+}
+
+ // .globl _ZN6kernel15device_function17hd6a0e4993bbf3f78E
+.visible .func _ZN6kernel15device_function17hd6a0e4993bbf3f78E()
+{
+
+
+ ret;
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/abi-thiscall.md b/src/doc/unstable-book/src/language-features/abi-thiscall.md
new file mode 100644
index 000000000..73bc6eacf
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/abi-thiscall.md
@@ -0,0 +1,12 @@
+# `abi_thiscall`
+
+The tracking issue for this feature is: [#42202]
+
+[#42202]: https://github.com/rust-lang/rust/issues/42202
+
+------------------------
+
+The MSVC ABI on x86 Windows uses the `thiscall` calling convention for C++
+instance methods by default; it is identical to the usual (C) calling
+convention on x86 Windows except that the first parameter of the method,
+the `this` pointer, is passed in the ECX register.
diff --git a/src/doc/unstable-book/src/language-features/allocator-internals.md b/src/doc/unstable-book/src/language-features/allocator-internals.md
new file mode 100644
index 000000000..2023d758f
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/allocator-internals.md
@@ -0,0 +1,7 @@
+# `allocator_internals`
+
+This feature does not have a tracking issue, it is an unstable implementation
+detail of the `global_allocator` feature not intended for use outside the
+compiler.
+
+------------------------
diff --git a/src/doc/unstable-book/src/language-features/arbitrary-enum-discriminant.md b/src/doc/unstable-book/src/language-features/arbitrary-enum-discriminant.md
new file mode 100644
index 000000000..e0bb78227
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/arbitrary-enum-discriminant.md
@@ -0,0 +1,37 @@
+# `arbitrary_enum_discriminant`
+
+The tracking issue for this feature is: [#60553]
+
+[#60553]: https://github.com/rust-lang/rust/issues/60553
+
+------------------------
+
+The `arbitrary_enum_discriminant` feature permits tuple-like and
+struct-like enum variants with `#[repr(<int-type>)]` to have explicit discriminants.
+
+## Examples
+
+```rust
+#![feature(arbitrary_enum_discriminant)]
+
+#[allow(dead_code)]
+#[repr(u8)]
+enum Enum {
+ Unit = 3,
+ Tuple(u16) = 2,
+ Struct {
+ a: u8,
+ b: u16,
+ } = 1,
+}
+
+impl Enum {
+ fn tag(&self) -> u8 {
+ unsafe { *(self as *const Self as *const u8) }
+ }
+}
+
+assert_eq!(3, Enum::Unit.tag());
+assert_eq!(2, Enum::Tuple(5).tag());
+assert_eq!(1, Enum::Struct{a: 7, b: 11}.tag());
+```
diff --git a/src/doc/unstable-book/src/language-features/asm-const.md b/src/doc/unstable-book/src/language-features/asm-const.md
new file mode 100644
index 000000000..670c4df41
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/asm-const.md
@@ -0,0 +1,11 @@
+# `asm_const`
+
+The tracking issue for this feature is: [#93332]
+
+[#93332]: https://github.com/rust-lang/rust/issues/93332
+
+------------------------
+
+This feature adds a `const <expr>` operand type to `asm!` and `global_asm!`.
+- `<expr>` must be an integer constant expression.
+- The value of the expression is formatted as a string and substituted directly into the asm template string.
diff --git a/src/doc/unstable-book/src/language-features/asm-experimental-arch.md b/src/doc/unstable-book/src/language-features/asm-experimental-arch.md
new file mode 100644
index 000000000..0a48eb4f8
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/asm-experimental-arch.md
@@ -0,0 +1,132 @@
+# `asm_experimental_arch`
+
+The tracking issue for this feature is: [#93335]
+
+[#93335]: https://github.com/rust-lang/rust/issues/93335
+
+------------------------
+
+This feature tracks `asm!` and `global_asm!` support for the following architectures:
+- NVPTX
+- PowerPC
+- Hexagon
+- MIPS32r2 and MIPS64r2
+- wasm32
+- BPF
+- SPIR-V
+- AVR
+- MSP430
+
+## Register classes
+
+| Architecture | Register class | Registers | LLVM constraint code |
+| ------------ | -------------- | ---------------------------------- | -------------------- |
+| MIPS | `reg` | `$[2-25]` | `r` |
+| MIPS | `freg` | `$f[0-31]` | `f` |
+| NVPTX | `reg16` | None\* | `h` |
+| NVPTX | `reg32` | None\* | `r` |
+| NVPTX | `reg64` | None\* | `l` |
+| Hexagon | `reg` | `r[0-28]` | `r` |
+| PowerPC | `reg` | `r[0-31]` | `r` |
+| PowerPC | `reg_nonzero` | `r[1-31]` | `b` |
+| PowerPC | `freg` | `f[0-31]` | `f` |
+| PowerPC | `cr` | `cr[0-7]`, `cr` | Only clobbers |
+| PowerPC | `xer` | `xer` | Only clobbers |
+| wasm32 | `local` | None\* | `r` |
+| BPF | `reg` | `r[0-10]` | `r` |
+| BPF | `wreg` | `w[0-10]` | `w` |
+| AVR | `reg` | `r[2-25]`, `XH`, `XL`, `ZH`, `ZL` | `r` |
+| AVR | `reg_upper` | `r[16-25]`, `XH`, `XL`, `ZH`, `ZL` | `d` |
+| AVR | `reg_pair` | `r3r2` .. `r25r24`, `X`, `Z` | `r` |
+| AVR | `reg_iw` | `r25r24`, `X`, `Z` | `w` |
+| AVR | `reg_ptr` | `X`, `Z` | `e` |
+| MSP430 | `reg` | `r[0-15]` | `r` |
+
+> **Notes**:
+> - NVPTX doesn't have a fixed register set, so named registers are not supported.
+>
+> - WebAssembly doesn't have registers, so named registers are not supported.
+
+# Register class supported types
+
+| Architecture | Register class | Target feature | Allowed types |
+| ------------ | ------------------------------- | -------------- | --------------------------------------- |
+| MIPS32 | `reg` | None | `i8`, `i16`, `i32`, `f32` |
+| MIPS32 | `freg` | None | `f32`, `f64` |
+| MIPS64 | `reg` | None | `i8`, `i16`, `i32`, `i64`, `f32`, `f64` |
+| MIPS64 | `freg` | None | `f32`, `f64` |
+| NVPTX | `reg16` | None | `i8`, `i16` |
+| NVPTX | `reg32` | None | `i8`, `i16`, `i32`, `f32` |
+| NVPTX | `reg64` | None | `i8`, `i16`, `i32`, `f32`, `i64`, `f64` |
+| Hexagon | `reg` | None | `i8`, `i16`, `i32`, `f32` |
+| PowerPC | `reg` | None | `i8`, `i16`, `i32` |
+| PowerPC | `reg_nonzero` | None | `i8`, `i16`, `i32` |
+| PowerPC | `freg` | None | `f32`, `f64` |
+| PowerPC | `cr` | N/A | Only clobbers |
+| PowerPC | `xer` | N/A | Only clobbers |
+| wasm32 | `local` | None | `i8` `i16` `i32` `i64` `f32` `f64` |
+| BPF | `reg` | None | `i8` `i16` `i32` `i64` |
+| BPF | `wreg` | `alu32` | `i8` `i16` `i32` |
+| AVR | `reg`, `reg_upper` | None | `i8` |
+| AVR | `reg_pair`, `reg_iw`, `reg_ptr` | None | `i16` |
+| MSP430 | `reg` | None | `i8`, `i16` |
+
+## Register aliases
+
+| Architecture | Base register | Aliases |
+| ------------ | ------------- | --------- |
+| Hexagon | `r29` | `sp` |
+| Hexagon | `r30` | `fr` |
+| Hexagon | `r31` | `lr` |
+| BPF | `r[0-10]` | `w[0-10]` |
+| AVR | `XH` | `r27` |
+| AVR | `XL` | `r26` |
+| AVR | `ZH` | `r31` |
+| AVR | `ZL` | `r30` |
+| MSP430 | `r0` | `pc` |
+| MSP430 | `r1` | `sp` |
+| MSP430 | `r2` | `sr` |
+| MSP430 | `r3` | `cg` |
+| MSP430 | `r4` | `fp` |
+
+> **Notes**:
+> - TI does not mandate a frame pointer for MSP430, but toolchains are allowed
+ to use one; LLVM uses `r4`.
+
+## Unsupported registers
+
+| Architecture | Unsupported register | Reason |
+| ------------ | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| All | `sp` | The stack pointer must be restored to its original value at the end of an asm code block. |
+| All | `fr` (Hexagon), `$fp` (MIPS), `Y` (AVR), `r4` (MSP430) | The frame pointer cannot be used as an input or output. |
+| All | `r19` (Hexagon) | This is used internally by LLVM as a "base pointer" for functions with complex stack frames. |
+| MIPS | `$0` or `$zero` | This is a constant zero register which can't be modified. |
+| MIPS | `$1` or `$at` | Reserved for assembler. |
+| MIPS | `$26`/`$k0`, `$27`/`$k1` | OS-reserved registers. |
+| MIPS | `$28`/`$gp` | Global pointer cannot be used as inputs or outputs. |
+| MIPS | `$ra` | Return address cannot be used as inputs or outputs. |
+| Hexagon | `lr` | This is the link register which cannot be used as an input or output. |
+| AVR | `r0`, `r1`, `r1r0` | Due to an issue in LLVM, the `r0` and `r1` registers cannot be used as inputs or outputs. If modified, they must be restored to their original values before the end of the block. |
+|MSP430 | `r0`, `r2`, `r3` | These are the program counter, status register, and constant generator respectively. Neither the status register nor constant generator can be written to. |
+
+## Template modifiers
+
+| Architecture | Register class | Modifier | Example output | LLVM modifier |
+| ------------ | -------------- | -------- | -------------- | ------------- |
+| MIPS | `reg` | None | `$2` | None |
+| MIPS | `freg` | None | `$f0` | None |
+| NVPTX | `reg16` | None | `rs0` | None |
+| NVPTX | `reg32` | None | `r0` | None |
+| NVPTX | `reg64` | None | `rd0` | None |
+| Hexagon | `reg` | None | `r0` | None |
+| PowerPC | `reg` | None | `0` | None |
+| PowerPC | `reg_nonzero` | None | `3` | `b` |
+| PowerPC | `freg` | None | `0` | None |
+
+# Flags covered by `preserves_flags`
+
+These flags registers must be restored upon exiting the asm block if the `preserves_flags` option is set:
+- AVR
+ - The status register `SREG`.
+- MSP430
+ - The status register `r2`.
diff --git a/src/doc/unstable-book/src/language-features/asm-sym.md b/src/doc/unstable-book/src/language-features/asm-sym.md
new file mode 100644
index 000000000..103d91caf
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/asm-sym.md
@@ -0,0 +1,13 @@
+# `asm_sym`
+
+The tracking issue for this feature is: [#93333]
+
+[#93333]: https://github.com/rust-lang/rust/issues/93333
+
+------------------------
+
+This feature adds a `sym <path>` operand type to `asm!` and `global_asm!`.
+- `<path>` must refer to a `fn` or `static`.
+- A mangled symbol name referring to the item is substituted into the asm template string.
+- The substituted string does not include any modifiers (e.g. GOT, PLT, relocations, etc).
+- `<path>` is allowed to point to a `#[thread_local]` static, in which case the asm code can combine the symbol with relocations (e.g. `@plt`, `@TPOFF`) to read from thread-local data.
diff --git a/src/doc/unstable-book/src/language-features/asm-unwind.md b/src/doc/unstable-book/src/language-features/asm-unwind.md
new file mode 100644
index 000000000..809e6d75b
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/asm-unwind.md
@@ -0,0 +1,9 @@
+# `asm_unwind`
+
+The tracking issue for this feature is: [#93334]
+
+[#93334]: https://github.com/rust-lang/rust/issues/93334
+
+------------------------
+
+This feature adds a `may_unwind` option to `asm!` which allows an `asm` block to unwind stack and be part of the stack unwinding process. This option is only supported by the LLVM backend right now.
diff --git a/src/doc/unstable-book/src/language-features/auto-traits.md b/src/doc/unstable-book/src/language-features/auto-traits.md
new file mode 100644
index 000000000..f967c11fc
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/auto-traits.md
@@ -0,0 +1,106 @@
+# `auto_traits`
+
+The tracking issue for this feature is [#13231]
+
+[#13231]: https://github.com/rust-lang/rust/issues/13231
+
+----
+
+The `auto_traits` feature gate allows you to define auto traits.
+
+Auto traits, like [`Send`] or [`Sync`] in the standard library, are marker traits
+that are automatically implemented for every type, unless the type, or a type it contains,
+has explicitly opted out via a negative impl. (Negative impls are separately controlled
+by the `negative_impls` feature.)
+
+[`Send`]: https://doc.rust-lang.org/std/marker/trait.Send.html
+[`Sync`]: https://doc.rust-lang.org/std/marker/trait.Sync.html
+
+```rust,ignore (partial-example)
+impl !Trait for Type {}
+```
+
+Example:
+
+```rust
+#![feature(negative_impls)]
+#![feature(auto_traits)]
+
+auto trait Valid {}
+
+struct True;
+struct False;
+
+impl !Valid for False {}
+
+struct MaybeValid<T>(T);
+
+fn must_be_valid<T: Valid>(_t: T) { }
+
+fn main() {
+ // works
+ must_be_valid( MaybeValid(True) );
+
+ // compiler error - trait bound not satisfied
+ // must_be_valid( MaybeValid(False) );
+}
+```
+
+## Automatic trait implementations
+
+When a type is declared as an `auto trait`, we will automatically
+create impls for every struct/enum/union, unless an explicit impl is
+provided. These automatic impls contain a where clause for each field
+of the form `T: AutoTrait`, where `T` is the type of the field and
+`AutoTrait` is the auto trait in question. As an example, consider the
+struct `List` and the auto trait `Send`:
+
+```rust
+struct List<T> {
+ data: T,
+ next: Option<Box<List<T>>>,
+}
+```
+
+Presuming that there is no explicit impl of `Send` for `List`, the
+compiler will supply an automatic impl of the form:
+
+```rust
+struct List<T> {
+ data: T,
+ next: Option<Box<List<T>>>,
+}
+
+unsafe impl<T> Send for List<T>
+where
+ T: Send, // from the field `data`
+ Option<Box<List<T>>>: Send, // from the field `next`
+{ }
+```
+
+Explicit impls may be either positive or negative. They take the form:
+
+```rust,ignore (partial-example)
+impl<...> AutoTrait for StructName<..> { }
+impl<...> !AutoTrait for StructName<..> { }
+```
+
+## Coinduction: Auto traits permit cyclic matching
+
+Unlike ordinary trait matching, auto traits are **coinductive**. This
+means, in short, that cycles which occur in trait matching are
+considered ok. As an example, consider the recursive struct `List`
+introduced in the previous section. In attempting to determine whether
+`List: Send`, we would wind up in a cycle: to apply the impl, we must
+show that `Option<Box<List>>: Send`, which will in turn require
+`Box<List>: Send` and then finally `List: Send` again. Under ordinary
+trait matching, this cycle would be an error, but for an auto trait it
+is considered a successful match.
+
+## Items
+
+Auto traits cannot have any trait items, such as methods or associated types. This ensures that we can generate default implementations.
+
+## Supertraits
+
+Auto traits cannot have supertraits. This is for soundness reasons, as the interaction of coinduction with implied bounds is difficult to reconcile.
diff --git a/src/doc/unstable-book/src/language-features/box-patterns.md b/src/doc/unstable-book/src/language-features/box-patterns.md
new file mode 100644
index 000000000..584f4295c
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/box-patterns.md
@@ -0,0 +1,32 @@
+# `box_patterns`
+
+The tracking issue for this feature is: [#29641]
+
+[#29641]: https://github.com/rust-lang/rust/issues/29641
+
+See also [`box_syntax`](box-syntax.md)
+
+------------------------
+
+Box patterns let you match on `Box<T>`s:
+
+
+```rust
+#![feature(box_patterns)]
+
+fn main() {
+ let b = Some(Box::new(5));
+ match b {
+ Some(box n) if n < 0 => {
+ println!("Box contains negative number {n}");
+ },
+ Some(box n) if n >= 0 => {
+ println!("Box contains non-negative number {n}");
+ },
+ None => {
+ println!("No box");
+ },
+ _ => unreachable!()
+ }
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/box-syntax.md b/src/doc/unstable-book/src/language-features/box-syntax.md
new file mode 100644
index 000000000..9569974d2
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/box-syntax.md
@@ -0,0 +1,22 @@
+# `box_syntax`
+
+The tracking issue for this feature is: [#49733]
+
+[#49733]: https://github.com/rust-lang/rust/issues/49733
+
+See also [`box_patterns`](box-patterns.md)
+
+------------------------
+
+Currently the only stable way to create a `Box` is via the `Box::new` method.
+Also it is not possible in stable Rust to destructure a `Box` in a match
+pattern. The unstable `box` keyword can be used to create a `Box`. An example
+usage would be:
+
+```rust
+#![feature(box_syntax)]
+
+fn main() {
+ let b = box 5;
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/c-unwind.md b/src/doc/unstable-book/src/language-features/c-unwind.md
new file mode 100644
index 000000000..fb32918d5
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/c-unwind.md
@@ -0,0 +1,26 @@
+# `c_unwind`
+
+The tracking issue for this feature is: [#74990]
+
+[#74990]: https://github.com/rust-lang/rust/issues/74990
+
+------------------------
+
+Introduces new ABI strings:
+- "C-unwind"
+- "cdecl-unwind"
+- "stdcall-unwind"
+- "fastcall-unwind"
+- "vectorcall-unwind"
+- "thiscall-unwind"
+- "aapcs-unwind"
+- "win64-unwind"
+- "sysv64-unwind"
+- "system-unwind"
+
+These enable unwinding from other languages (such as C++) into Rust frames and
+from Rust into other languages.
+
+See [RFC 2945] for more information.
+
+[RFC 2945]: https://github.com/rust-lang/rfcs/blob/master/text/2945-c-unwind-abi.md
diff --git a/src/doc/unstable-book/src/language-features/c-variadic.md b/src/doc/unstable-book/src/language-features/c-variadic.md
new file mode 100644
index 000000000..001c1bfa9
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/c-variadic.md
@@ -0,0 +1,24 @@
+# `c_variadic`
+
+The tracking issue for this feature is: [#44930]
+
+[#44930]: https://github.com/rust-lang/rust/issues/44930
+
+------------------------
+
+The `c_variadic` language feature enables C-variadic functions to be
+defined in Rust. They may be called both from within Rust and via FFI.
+
+## Examples
+
+```rust
+#![feature(c_variadic)]
+
+pub unsafe extern "C" fn add(n: usize, mut args: ...) -> usize {
+ let mut sum = 0;
+ for _ in 0..n {
+ sum += args.arg::<usize>();
+ }
+ sum
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/cfg-sanitize.md b/src/doc/unstable-book/src/language-features/cfg-sanitize.md
new file mode 100644
index 000000000..3442abf46
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/cfg-sanitize.md
@@ -0,0 +1,34 @@
+# `cfg_sanitize`
+
+The tracking issue for this feature is: [#39699]
+
+[#39699]: https://github.com/rust-lang/rust/issues/39699
+
+------------------------
+
+The `cfg_sanitize` feature makes it possible to execute different code
+depending on whether a particular sanitizer is enabled or not.
+
+## Examples
+
+```rust
+#![feature(cfg_sanitize)]
+
+#[cfg(sanitize = "thread")]
+fn a() {
+ // ...
+}
+
+#[cfg(not(sanitize = "thread"))]
+fn a() {
+ // ...
+}
+
+fn b() {
+ if cfg!(sanitize = "leak") {
+ // ...
+ } else {
+ // ...
+ }
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/cfg-version.md b/src/doc/unstable-book/src/language-features/cfg-version.md
new file mode 100644
index 000000000..a6ec42cec
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/cfg-version.md
@@ -0,0 +1,35 @@
+# `cfg_version`
+
+The tracking issue for this feature is: [#64796]
+
+[#64796]: https://github.com/rust-lang/rust/issues/64796
+
+------------------------
+
+The `cfg_version` feature makes it possible to execute different code
+depending on the compiler version. It will return true if the compiler
+version is greater than or equal to the specified version.
+
+## Examples
+
+```rust
+#![feature(cfg_version)]
+
+#[cfg(version("1.42"))] // 1.42 and above
+fn a() {
+ // ...
+}
+
+#[cfg(not(version("1.42")))] // 1.41 and below
+fn a() {
+ // ...
+}
+
+fn b() {
+ if cfg!(version("1.42")) {
+ // ...
+ } else {
+ // ...
+ }
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/closure-track-caller.md b/src/doc/unstable-book/src/language-features/closure-track-caller.md
new file mode 100644
index 000000000..c948810d3
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/closure-track-caller.md
@@ -0,0 +1,12 @@
+# `closure_track_caller`
+
+The tracking issue for this feature is: [#87417]
+
+[#87417]: https://github.com/rust-lang/rust/issues/87417
+
+------------------------
+
+Allows using the `#[track_caller]` attribute on closures and generators.
+Calls made to the closure or generator will have caller information
+available through `std::panic::Location::caller()`, just like using
+`#[track_caller]` on a function.
diff --git a/src/doc/unstable-book/src/language-features/cmse-nonsecure-entry.md b/src/doc/unstable-book/src/language-features/cmse-nonsecure-entry.md
new file mode 100644
index 000000000..338fbc4b2
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/cmse-nonsecure-entry.md
@@ -0,0 +1,81 @@
+# `cmse_nonsecure_entry`
+
+The tracking issue for this feature is: [#75835]
+
+[#75835]: https://github.com/rust-lang/rust/issues/75835
+
+------------------------
+
+The [TrustZone-M
+feature](https://developer.arm.com/documentation/100690/latest/) is available
+for targets with the Armv8-M architecture profile (`thumbv8m` in their target
+name).
+LLVM, the Rust compiler and the linker are providing
+[support](https://developer.arm.com/documentation/ecm0359818/latest/) for the
+TrustZone-M feature.
+
+One of the things provided, with this unstable feature, is the
+`cmse_nonsecure_entry` attribute. This attribute marks a Secure function as an
+entry function (see [section
+5.4](https://developer.arm.com/documentation/ecm0359818/latest/) for details).
+With this attribute, the compiler will do the following:
+* add a special symbol on the function which is the `__acle_se_` prefix and the
+ standard function name
+* constrain the number of parameters to avoid using the Non-Secure stack
+* before returning from the function, clear registers that might contain Secure
+ information
+* use the `BXNS` instruction to return
+
+Because the stack can not be used to pass parameters, there will be compilation
+errors if:
+* the total size of all parameters is too big (for example more than four 32
+ bits integers)
+* the entry function is not using a C ABI
+
+The special symbol `__acle_se_` will be used by the linker to generate a secure
+gateway veneer.
+
+<!-- NOTE(ignore) this example is specific to thumbv8m targets -->
+
+``` rust,ignore
+#![feature(cmse_nonsecure_entry)]
+
+#[no_mangle]
+#[cmse_nonsecure_entry]
+pub extern "C" fn entry_function(input: u32) -> u32 {
+ input + 6
+}
+```
+
+``` text
+$ rustc --emit obj --crate-type lib --target thumbv8m.main-none-eabi function.rs
+$ arm-none-eabi-objdump -D function.o
+
+00000000 <entry_function>:
+ 0: b580 push {r7, lr}
+ 2: 466f mov r7, sp
+ 4: b082 sub sp, #8
+ 6: 9001 str r0, [sp, #4]
+ 8: 1d81 adds r1, r0, #6
+ a: 460a mov r2, r1
+ c: 4281 cmp r1, r0
+ e: 9200 str r2, [sp, #0]
+ 10: d30b bcc.n 2a <entry_function+0x2a>
+ 12: e7ff b.n 14 <entry_function+0x14>
+ 14: 9800 ldr r0, [sp, #0]
+ 16: b002 add sp, #8
+ 18: e8bd 4080 ldmia.w sp!, {r7, lr}
+ 1c: 4671 mov r1, lr
+ 1e: 4672 mov r2, lr
+ 20: 4673 mov r3, lr
+ 22: 46f4 mov ip, lr
+ 24: f38e 8800 msr CPSR_f, lr
+ 28: 4774 bxns lr
+ 2a: f240 0000 movw r0, #0
+ 2e: f2c0 0000 movt r0, #0
+ 32: f240 0200 movw r2, #0
+ 36: f2c0 0200 movt r2, #0
+ 3a: 211c movs r1, #28
+ 3c: f7ff fffe bl 0 <_ZN4core9panicking5panic17h5c028258ca2fb3f5E>
+ 40: defe udf #254 ; 0xfe
+```
diff --git a/src/doc/unstable-book/src/language-features/compiler-builtins.md b/src/doc/unstable-book/src/language-features/compiler-builtins.md
new file mode 100644
index 000000000..52fac575b
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/compiler-builtins.md
@@ -0,0 +1,5 @@
+# `compiler_builtins`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/language-features/const-eval-limit.md b/src/doc/unstable-book/src/language-features/const-eval-limit.md
new file mode 100644
index 000000000..df68e83bc
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/const-eval-limit.md
@@ -0,0 +1,7 @@
+# `const_eval_limit`
+
+The tracking issue for this feature is: [#67217]
+
+[#67217]: https://github.com/rust-lang/rust/issues/67217
+
+The `const_eval_limit` allows someone to limit the evaluation steps the CTFE undertakes to evaluate a `const fn`.
diff --git a/src/doc/unstable-book/src/language-features/custom-test-frameworks.md b/src/doc/unstable-book/src/language-features/custom-test-frameworks.md
new file mode 100644
index 000000000..53ecac931
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/custom-test-frameworks.md
@@ -0,0 +1,32 @@
+# `custom_test_frameworks`
+
+The tracking issue for this feature is: [#50297]
+
+[#50297]: https://github.com/rust-lang/rust/issues/50297
+
+------------------------
+
+The `custom_test_frameworks` feature allows the use of `#[test_case]` and `#![test_runner]`.
+Any function, const, or static can be annotated with `#[test_case]` causing it to be aggregated (like `#[test]`)
+and be passed to the test runner determined by the `#![test_runner]` crate attribute.
+
+```rust
+#![feature(custom_test_frameworks)]
+#![test_runner(my_runner)]
+
+fn my_runner(tests: &[&i32]) {
+ for t in tests {
+ if **t == 0 {
+ println!("PASSED");
+ } else {
+ println!("FAILED");
+ }
+ }
+}
+
+#[test_case]
+const WILL_PASS: i32 = 0;
+
+#[test_case]
+const WILL_FAIL: i32 = 4;
+```
diff --git a/src/doc/unstable-book/src/language-features/debugger-visualizer.md b/src/doc/unstable-book/src/language-features/debugger-visualizer.md
new file mode 100644
index 000000000..c7a0414b6
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/debugger-visualizer.md
@@ -0,0 +1,27 @@
+# `debugger_visualizer`
+
+The tracking issue for this feature is: [#95939]
+
+[#95939]: https://github.com/rust-lang/rust/issues/95939
+
+------------------------
+
+The `debugger_visualizer` attribute can be used to instruct the compiler
+to embed a debugger visualizer file into the PDB/ELF generated by `rustc`.
+
+## Examples
+
+``` rust,ignore (partial-example)
+#![feature(debugger_visualizer)]
+#![debugger_visualizer(natvis_file = "foo.natvis")]
+#![debugger_visualizer(gdb_script_file = "foo.py")]
+struct Foo {
+
+}
+```
+
+## Limitations
+
+Currently, this feature only supports embedding Natvis files on `-windows-msvc`
+targets via the `natvis_file` meta item. `-windows-gnu` targets are not currently
+supported.
diff --git a/src/doc/unstable-book/src/language-features/doc-cfg.md b/src/doc/unstable-book/src/language-features/doc-cfg.md
new file mode 100644
index 000000000..b15f5ee66
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/doc-cfg.md
@@ -0,0 +1,46 @@
+# `doc_cfg`
+
+The tracking issue for this feature is: [#43781]
+
+------
+
+The `doc_cfg` feature allows an API be documented as only available in some specific platforms.
+This attribute has two effects:
+
+1. In the annotated item's documentation, there will be a message saying "Available on
+ (platform) only".
+
+2. The item's doc-tests will only run on the specific platform.
+
+In addition to allowing the use of the `#[doc(cfg)]` attribute, this feature enables the use of a
+special conditional compilation flag, `#[cfg(doc)]`, set whenever building documentation on your
+crate.
+
+This feature was introduced as part of PR [#43348] to allow the platform-specific parts of the
+standard library be documented.
+
+```rust
+#![feature(doc_cfg)]
+
+#[cfg(any(windows, doc))]
+#[doc(cfg(windows))]
+/// The application's icon in the notification area (a.k.a. system tray).
+///
+/// # Examples
+///
+/// ```no_run
+/// extern crate my_awesome_ui_library;
+/// use my_awesome_ui_library::current_app;
+/// use my_awesome_ui_library::windows::notification;
+///
+/// let icon = current_app().get::<notification::Icon>();
+/// icon.show();
+/// icon.show_message("Hello");
+/// ```
+pub struct Icon {
+ // ...
+}
+```
+
+[#43781]: https://github.com/rust-lang/rust/issues/43781
+[#43348]: https://github.com/rust-lang/rust/issues/43348
diff --git a/src/doc/unstable-book/src/language-features/doc-masked.md b/src/doc/unstable-book/src/language-features/doc-masked.md
new file mode 100644
index 000000000..609939bfc
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/doc-masked.md
@@ -0,0 +1,24 @@
+# `doc_masked`
+
+The tracking issue for this feature is: [#44027]
+
+-----
+
+The `doc_masked` feature allows a crate to exclude types from a given crate from appearing in lists
+of trait implementations. The specifics of the feature are as follows:
+
+1. When rustdoc encounters an `extern crate` statement annotated with a `#[doc(masked)]` attribute,
+ it marks the crate as being masked.
+
+2. When listing traits a given type implements, rustdoc ensures that traits from masked crates are
+ not emitted into the documentation.
+
+3. When listing types that implement a given trait, rustdoc ensures that types from masked crates
+ are not emitted into the documentation.
+
+This feature was introduced in PR [#44026] to ensure that compiler-internal and
+implementation-specific types and traits were not included in the standard library's documentation.
+Such types would introduce broken links into the documentation.
+
+[#44026]: https://github.com/rust-lang/rust/pull/44026
+[#44027]: https://github.com/rust-lang/rust/pull/44027
diff --git a/src/doc/unstable-book/src/language-features/doc-notable-trait.md b/src/doc/unstable-book/src/language-features/doc-notable-trait.md
new file mode 100644
index 000000000..dc402ed42
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/doc-notable-trait.md
@@ -0,0 +1,33 @@
+# `doc_notable_trait`
+
+The tracking issue for this feature is: [#45040]
+
+The `doc_notable_trait` feature allows the use of the `#[doc(notable_trait)]`
+attribute, which will display the trait in a "Notable traits" dialog for
+functions returning types that implement the trait. For example, this attribute
+is applied to the `Iterator`, `Future`, `io::Read`, and `io::Write` traits in
+the standard library.
+
+You can do this on your own traits like so:
+
+```
+#![feature(doc_notable_trait)]
+
+#[doc(notable_trait)]
+pub trait MyTrait {}
+
+pub struct MyStruct;
+impl MyTrait for MyStruct {}
+
+/// The docs for this function will have a button that displays a dialog about
+/// `MyStruct` implementing `MyTrait`.
+pub fn my_fn() -> MyStruct { MyStruct }
+```
+
+This feature was originally implemented in PR [#45039].
+
+See also its documentation in [the rustdoc book][rustdoc-book-notable_trait].
+
+[#45040]: https://github.com/rust-lang/rust/issues/45040
+[#45039]: https://github.com/rust-lang/rust/pull/45039
+[rustdoc-book-notable_trait]: ../../rustdoc/unstable-features.html#adding-your-trait-to-the-notable-traits-dialog
diff --git a/src/doc/unstable-book/src/language-features/exclusive-range-pattern.md b/src/doc/unstable-book/src/language-features/exclusive-range-pattern.md
new file mode 100644
index 000000000..d26512703
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/exclusive-range-pattern.md
@@ -0,0 +1,26 @@
+# `exclusive_range_pattern`
+
+The tracking issue for this feature is: [#37854].
+
+
+[#67264]: https://github.com/rust-lang/rust/issues/67264
+[#37854]: https://github.com/rust-lang/rust/issues/37854
+-----
+
+The `exclusive_range_pattern` feature allows non-inclusive range
+patterns (`0..10`) to be used in appropriate pattern matching
+contexts. It also can be combined with `#![feature(half_open_range_patterns]`
+to be able to use RangeTo patterns (`..10`).
+
+It also enabled RangeFrom patterns but that has since been
+stabilized.
+
+```rust
+#![feature(exclusive_range_pattern)]
+ let x = 5;
+ match x {
+ 0..10 => println!("single digit"),
+ 10 => println!("ten isn't part of the above range"),
+ _ => println!("nor is everything else.")
+ }
+```
diff --git a/src/doc/unstable-book/src/language-features/ffi-const.md b/src/doc/unstable-book/src/language-features/ffi-const.md
new file mode 100644
index 000000000..24a304437
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/ffi-const.md
@@ -0,0 +1,52 @@
+# `ffi_const`
+
+The tracking issue for this feature is: [#58328]
+
+------
+
+The `#[ffi_const]` attribute applies clang's `const` attribute to foreign
+functions declarations.
+
+That is, `#[ffi_const]` functions shall have no effects except for its return
+value, which can only depend on the values of the function parameters, and is
+not affected by changes to the observable state of the program.
+
+Applying the `#[ffi_const]` attribute to a function that violates these
+requirements is undefined behaviour.
+
+This attribute enables Rust to perform common optimizations, like sub-expression
+elimination, and it can avoid emitting some calls in repeated invocations of the
+function with the same argument values regardless of other operations being
+performed in between these functions calls (as opposed to `#[ffi_pure]`
+functions).
+
+## Pitfalls
+
+A `#[ffi_const]` function can only read global memory that would not affect
+its return value for the whole execution of the program (e.g. immutable global
+memory). `#[ffi_const]` functions are referentially-transparent and therefore
+more strict than `#[ffi_pure]` functions.
+
+A common pitfall involves applying the `#[ffi_const]` attribute to a
+function that reads memory through pointer arguments which do not necessarily
+point to immutable global memory.
+
+A `#[ffi_const]` function that returns unit has no effect on the abstract
+machine's state, and a `#[ffi_const]` function cannot be `#[ffi_pure]`.
+
+A `#[ffi_const]` function must not diverge, neither via a side effect (e.g. a
+call to `abort`) nor by infinite loops.
+
+When translating C headers to Rust FFI, it is worth verifying for which targets
+the `const` attribute is enabled in those headers, and using the appropriate
+`cfg` macros in the Rust side to match those definitions. While the semantics of
+`const` are implemented identically by many C and C++ compilers, e.g., clang,
+[GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily
+implemented in this way on all of them. It is therefore also worth verifying
+that the semantics of the C toolchain used to compile the binary being linked
+against are compatible with those of the `#[ffi_const]`.
+
+[#58328]: https://github.com/rust-lang/rust/issues/58328
+[ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacgigch.html
+[GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-const-function-attribute
+[IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_const.htm
diff --git a/src/doc/unstable-book/src/language-features/ffi-pure.md b/src/doc/unstable-book/src/language-features/ffi-pure.md
new file mode 100644
index 000000000..236ccb9f9
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/ffi-pure.md
@@ -0,0 +1,56 @@
+# `ffi_pure`
+
+The tracking issue for this feature is: [#58329]
+
+------
+
+The `#[ffi_pure]` attribute applies clang's `pure` attribute to foreign
+functions declarations.
+
+That is, `#[ffi_pure]` functions shall have no effects except for its return
+value, which shall not change across two consecutive function calls with
+the same parameters.
+
+Applying the `#[ffi_pure]` attribute to a function that violates these
+requirements is undefined behavior.
+
+This attribute enables Rust to perform common optimizations, like sub-expression
+elimination and loop optimizations. Some common examples of pure functions are
+`strlen` or `memcmp`.
+
+These optimizations are only applicable when the compiler can prove that no
+program state observable by the `#[ffi_pure]` function has changed between calls
+of the function, which could alter the result. See also the `#[ffi_const]`
+attribute, which provides stronger guarantees regarding the allowable behavior
+of a function, enabling further optimization.
+
+## Pitfalls
+
+A `#[ffi_pure]` function can read global memory through the function
+parameters (e.g. pointers), globals, etc. `#[ffi_pure]` functions are not
+referentially-transparent, and are therefore more relaxed than `#[ffi_const]`
+functions.
+
+However, accessing global memory through volatile or atomic reads can violate the
+requirement that two consecutive function calls shall return the same value.
+
+A `pure` function that returns unit has no effect on the abstract machine's
+state.
+
+A `#[ffi_pure]` function must not diverge, neither via a side effect (e.g. a
+call to `abort`) nor by infinite loops.
+
+When translating C headers to Rust FFI, it is worth verifying for which targets
+the `pure` attribute is enabled in those headers, and using the appropriate
+`cfg` macros in the Rust side to match those definitions. While the semantics of
+`pure` are implemented identically by many C and C++ compilers, e.g., clang,
+[GCC], [ARM C/C++ compiler], [IBM ILE C/C++], etc. they are not necessarily
+implemented in this way on all of them. It is therefore also worth verifying
+that the semantics of the C toolchain used to compile the binary being linked
+against are compatible with those of the `#[ffi_pure]`.
+
+
+[#58329]: https://github.com/rust-lang/rust/issues/58329
+[ARM C/C++ compiler]: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0491c/Cacigdac.html
+[GCC]: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-pure-function-attribute
+[IBM ILE C/C++]: https://www.ibm.com/support/knowledgecenter/fr/ssw_ibm_i_71/rzarg/fn_attrib_pure.htm
diff --git a/src/doc/unstable-book/src/language-features/generators.md b/src/doc/unstable-book/src/language-features/generators.md
new file mode 100644
index 000000000..7b865c9c6
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/generators.md
@@ -0,0 +1,246 @@
+# `generators`
+
+The tracking issue for this feature is: [#43122]
+
+[#43122]: https://github.com/rust-lang/rust/issues/43122
+
+------------------------
+
+The `generators` feature gate in Rust allows you to define generator or
+coroutine literals. A generator is a "resumable function" that syntactically
+resembles a closure but compiles to much different semantics in the compiler
+itself. The primary feature of a generator is that it can be suspended during
+execution to be resumed at a later date. Generators use the `yield` keyword to
+"return", and then the caller can `resume` a generator to resume execution just
+after the `yield` keyword.
+
+Generators are an extra-unstable feature in the compiler right now. Added in
+[RFC 2033] they're mostly intended right now as a information/constraint
+gathering phase. The intent is that experimentation can happen on the nightly
+compiler before actual stabilization. A further RFC will be required to
+stabilize generators/coroutines and will likely contain at least a few small
+tweaks to the overall design.
+
+[RFC 2033]: https://github.com/rust-lang/rfcs/pull/2033
+
+A syntactical example of a generator is:
+
+```rust
+#![feature(generators, generator_trait)]
+
+use std::ops::{Generator, GeneratorState};
+use std::pin::Pin;
+
+fn main() {
+ let mut generator = || {
+ yield 1;
+ return "foo"
+ };
+
+ match Pin::new(&mut generator).resume(()) {
+ GeneratorState::Yielded(1) => {}
+ _ => panic!("unexpected value from resume"),
+ }
+ match Pin::new(&mut generator).resume(()) {
+ GeneratorState::Complete("foo") => {}
+ _ => panic!("unexpected value from resume"),
+ }
+}
+```
+
+Generators are closure-like literals which can contain a `yield` statement. The
+`yield` statement takes an optional expression of a value to yield out of the
+generator. All generator literals implement the `Generator` trait in the
+`std::ops` module. The `Generator` trait has one main method, `resume`, which
+resumes execution of the generator at the previous suspension point.
+
+An example of the control flow of generators is that the following example
+prints all numbers in order:
+
+```rust
+#![feature(generators, generator_trait)]
+
+use std::ops::Generator;
+use std::pin::Pin;
+
+fn main() {
+ let mut generator = || {
+ println!("2");
+ yield;
+ println!("4");
+ };
+
+ println!("1");
+ Pin::new(&mut generator).resume(());
+ println!("3");
+ Pin::new(&mut generator).resume(());
+ println!("5");
+}
+```
+
+At this time the main intended use case of generators is an implementation
+primitive for async/await syntax, but generators will likely be extended to
+ergonomic implementations of iterators and other primitives in the future.
+Feedback on the design and usage is always appreciated!
+
+### The `Generator` trait
+
+The `Generator` trait in `std::ops` currently looks like:
+
+```rust
+# #![feature(arbitrary_self_types, generator_trait)]
+# use std::ops::GeneratorState;
+# use std::pin::Pin;
+
+pub trait Generator<R = ()> {
+ type Yield;
+ type Return;
+ fn resume(self: Pin<&mut Self>, resume: R) -> GeneratorState<Self::Yield, Self::Return>;
+}
+```
+
+The `Generator::Yield` type is the type of values that can be yielded with the
+`yield` statement. The `Generator::Return` type is the returned type of the
+generator. This is typically the last expression in a generator's definition or
+any value passed to `return` in a generator. The `resume` function is the entry
+point for executing the `Generator` itself.
+
+The return value of `resume`, `GeneratorState`, looks like:
+
+```rust
+pub enum GeneratorState<Y, R> {
+ Yielded(Y),
+ Complete(R),
+}
+```
+
+The `Yielded` variant indicates that the generator can later be resumed. This
+corresponds to a `yield` point in a generator. The `Complete` variant indicates
+that the generator is complete and cannot be resumed again. Calling `resume`
+after a generator has returned `Complete` will likely result in a panic of the
+program.
+
+### Closure-like semantics
+
+The closure-like syntax for generators alludes to the fact that they also have
+closure-like semantics. Namely:
+
+* When created, a generator executes no code. A closure literal does not
+ actually execute any of the closure's code on construction, and similarly a
+ generator literal does not execute any code inside the generator when
+ constructed.
+
+* Generators can capture outer variables by reference or by move, and this can
+ be tweaked with the `move` keyword at the beginning of the closure. Like
+ closures all generators will have an implicit environment which is inferred by
+ the compiler. Outer variables can be moved into a generator for use as the
+ generator progresses.
+
+* Generator literals produce a value with a unique type which implements the
+ `std::ops::Generator` trait. This allows actual execution of the generator
+ through the `Generator::resume` method as well as also naming it in return
+ types and such.
+
+* Traits like `Send` and `Sync` are automatically implemented for a `Generator`
+ depending on the captured variables of the environment. Unlike closures,
+ generators also depend on variables live across suspension points. This means
+ that although the ambient environment may be `Send` or `Sync`, the generator
+ itself may not be due to internal variables live across `yield` points being
+ not-`Send` or not-`Sync`. Note that generators do
+ not implement traits like `Copy` or `Clone` automatically.
+
+* Whenever a generator is dropped it will drop all captured environment
+ variables.
+
+### Generators as state machines
+
+In the compiler, generators are currently compiled as state machines. Each
+`yield` expression will correspond to a different state that stores all live
+variables over that suspension point. Resumption of a generator will dispatch on
+the current state and then execute internally until a `yield` is reached, at
+which point all state is saved off in the generator and a value is returned.
+
+Let's take a look at an example to see what's going on here:
+
+```rust
+#![feature(generators, generator_trait)]
+
+use std::ops::Generator;
+use std::pin::Pin;
+
+fn main() {
+ let ret = "foo";
+ let mut generator = move || {
+ yield 1;
+ return ret
+ };
+
+ Pin::new(&mut generator).resume(());
+ Pin::new(&mut generator).resume(());
+}
+```
+
+This generator literal will compile down to something similar to:
+
+```rust
+#![feature(arbitrary_self_types, generators, generator_trait)]
+
+use std::ops::{Generator, GeneratorState};
+use std::pin::Pin;
+
+fn main() {
+ let ret = "foo";
+ let mut generator = {
+ enum __Generator {
+ Start(&'static str),
+ Yield1(&'static str),
+ Done,
+ }
+
+ impl Generator for __Generator {
+ type Yield = i32;
+ type Return = &'static str;
+
+ fn resume(mut self: Pin<&mut Self>, resume: ()) -> GeneratorState<i32, &'static str> {
+ use std::mem;
+ match mem::replace(&mut *self, __Generator::Done) {
+ __Generator::Start(s) => {
+ *self = __Generator::Yield1(s);
+ GeneratorState::Yielded(1)
+ }
+
+ __Generator::Yield1(s) => {
+ *self = __Generator::Done;
+ GeneratorState::Complete(s)
+ }
+
+ __Generator::Done => {
+ panic!("generator resumed after completion")
+ }
+ }
+ }
+ }
+
+ __Generator::Start(ret)
+ };
+
+ Pin::new(&mut generator).resume(());
+ Pin::new(&mut generator).resume(());
+}
+```
+
+Notably here we can see that the compiler is generating a fresh type,
+`__Generator` in this case. This type has a number of states (represented here
+as an `enum`) corresponding to each of the conceptual states of the generator.
+At the beginning we're closing over our outer variable `foo` and then that
+variable is also live over the `yield` point, so it's stored in both states.
+
+When the generator starts it'll immediately yield 1, but it saves off its state
+just before it does so indicating that it has reached the yield point. Upon
+resuming again we'll execute the `return ret` which returns the `Complete`
+state.
+
+Here we can also note that the `Done` state, if resumed, panics immediately as
+it's invalid to resume a completed generator. It's also worth noting that this
+is just a rough desugaring, not a normative specification for what the compiler
+does.
diff --git a/src/doc/unstable-book/src/language-features/half-open-range-patterns.md b/src/doc/unstable-book/src/language-features/half-open-range-patterns.md
new file mode 100644
index 000000000..3b16dd049
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/half-open-range-patterns.md
@@ -0,0 +1,27 @@
+# `half_open_range_patterns`
+
+The tracking issue for this feature is: [#67264]
+It is part of the `#![exclusive_range_pattern]` feature,
+tracked at [#37854].
+
+[#67264]: https://github.com/rust-lang/rust/issues/67264
+[#37854]: https://github.com/rust-lang/rust/issues/37854
+-----
+
+The `half_open_range_patterns` feature allows RangeTo patterns
+(`..10`) to be used in appropriate pattern matching contexts.
+This requires also enabling the `exclusive_range_pattern` feature.
+
+It also enabled RangeFrom patterns but that has since been
+stabilized.
+
+```rust
+#![feature(half_open_range_patterns)]
+#![feature(exclusive_range_pattern)]
+ let x = 5;
+ match x {
+ ..0 => println!("negative!"), // "RangeTo" pattern. Unstable.
+ 0 => println!("zero!"),
+ 1.. => println!("positive!"), // "RangeFrom" pattern. Stable.
+ }
+```
diff --git a/src/doc/unstable-book/src/language-features/inline-const-pat.md b/src/doc/unstable-book/src/language-features/inline-const-pat.md
new file mode 100644
index 000000000..5f0f7547a
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/inline-const-pat.md
@@ -0,0 +1,24 @@
+# `inline_const_pat`
+
+The tracking issue for this feature is: [#76001]
+
+See also [`inline_const`](inline-const.md)
+
+------
+
+This feature allows you to use inline constant expressions in pattern position:
+
+```rust
+#![feature(inline_const_pat)]
+
+const fn one() -> i32 { 1 }
+
+let some_int = 3;
+match some_int {
+ const { 1 + 2 } => println!("Matched 1 + 2"),
+ const { one() } => println!("Matched const fn returning 1"),
+ _ => println!("Didn't match anything :("),
+}
+```
+
+[#76001]: https://github.com/rust-lang/rust/issues/76001
diff --git a/src/doc/unstable-book/src/language-features/inline-const.md b/src/doc/unstable-book/src/language-features/inline-const.md
new file mode 100644
index 000000000..7be70eed6
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/inline-const.md
@@ -0,0 +1,32 @@
+# `inline_const`
+
+The tracking issue for this feature is: [#76001]
+
+See also [`inline_const_pat`](inline-const-pat.md)
+
+------
+
+This feature allows you to use inline constant expressions. For example, you can
+turn this code:
+
+```rust
+# fn add_one(x: i32) -> i32 { x + 1 }
+const MY_COMPUTATION: i32 = 1 + 2 * 3 / 4;
+
+fn main() {
+ let x = add_one(MY_COMPUTATION);
+}
+```
+
+into this code:
+
+```rust
+#![feature(inline_const)]
+
+# fn add_one(x: i32) -> i32 { x + 1 }
+fn main() {
+ let x = add_one(const { 1 + 2 * 3 / 4 });
+}
+```
+
+[#76001]: https://github.com/rust-lang/rust/issues/76001
diff --git a/src/doc/unstable-book/src/language-features/intra-doc-pointers.md b/src/doc/unstable-book/src/language-features/intra-doc-pointers.md
new file mode 100644
index 000000000..fbc83f4b4
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/intra-doc-pointers.md
@@ -0,0 +1,15 @@
+# `intra-doc-pointers`
+
+The tracking issue for this feature is: [#80896]
+
+[#80896]: https://github.com/rust-lang/rust/issues/80896
+
+------------------------
+
+Rustdoc does not currently allow disambiguating between `*const` and `*mut`, and
+raw pointers in intra-doc links are unstable until it does.
+
+```rust
+#![feature(intra_doc_pointers)]
+//! [pointer::add]
+```
diff --git a/src/doc/unstable-book/src/language-features/intrinsics.md b/src/doc/unstable-book/src/language-features/intrinsics.md
new file mode 100644
index 000000000..a0fb4e743
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/intrinsics.md
@@ -0,0 +1,29 @@
+# `intrinsics`
+
+The tracking issue for this feature is: None.
+
+Intrinsics are never intended to be stable directly, but intrinsics are often
+exported in some sort of stable manner. Prefer using the stable interfaces to
+the intrinsic directly when you can.
+
+------------------------
+
+
+These are imported as if they were FFI functions, with the special
+`rust-intrinsic` ABI. For example, if one was in a freestanding
+context, but wished to be able to `transmute` between types, and
+perform efficient pointer arithmetic, one would import those functions
+via a declaration like
+
+```rust
+#![feature(intrinsics)]
+# fn main() {}
+
+extern "rust-intrinsic" {
+ fn transmute<T, U>(x: T) -> U;
+
+ fn offset<T>(dst: *const T, offset: isize) -> *const T;
+}
+```
+
+As with any other FFI functions, these are always `unsafe` to call.
diff --git a/src/doc/unstable-book/src/language-features/lang-items.md b/src/doc/unstable-book/src/language-features/lang-items.md
new file mode 100644
index 000000000..39238dffa
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/lang-items.md
@@ -0,0 +1,297 @@
+# `lang_items`
+
+The tracking issue for this feature is: None.
+
+------------------------
+
+The `rustc` compiler has certain pluggable operations, that is,
+functionality that isn't hard-coded into the language, but is
+implemented in libraries, with a special marker to tell the compiler
+it exists. The marker is the attribute `#[lang = "..."]` and there are
+various different values of `...`, i.e. various different 'lang
+items'.
+
+For example, `Box` pointers require two lang items, one for allocation
+and one for deallocation. A freestanding program that uses the `Box`
+sugar for dynamic allocations via `malloc` and `free`:
+
+```rust,ignore (libc-is-finicky)
+#![feature(lang_items, box_syntax, start, libc, core_intrinsics, rustc_private)]
+#![no_std]
+use core::intrinsics;
+use core::panic::PanicInfo;
+
+extern crate libc;
+
+struct Unique<T>(*mut T);
+
+#[lang = "owned_box"]
+pub struct Box<T>(Unique<T>);
+
+#[lang = "exchange_malloc"]
+unsafe fn allocate(size: usize, _align: usize) -> *mut u8 {
+ let p = libc::malloc(size as libc::size_t) as *mut u8;
+
+ // Check if `malloc` failed:
+ if p as usize == 0 {
+ intrinsics::abort();
+ }
+
+ p
+}
+
+#[lang = "box_free"]
+unsafe fn box_free<T: ?Sized>(ptr: *mut T) {
+ libc::free(ptr as *mut libc::c_void)
+}
+
+#[start]
+fn main(_argc: isize, _argv: *const *const u8) -> isize {
+ let _x = box 1;
+
+ 0
+}
+
+#[lang = "eh_personality"] extern fn rust_eh_personality() {}
+#[lang = "panic_impl"] extern fn rust_begin_panic(info: &PanicInfo) -> ! { unsafe { intrinsics::abort() } }
+#[no_mangle] pub extern fn rust_eh_register_frames () {}
+#[no_mangle] pub extern fn rust_eh_unregister_frames () {}
+```
+
+Note the use of `abort`: the `exchange_malloc` lang item is assumed to
+return a valid pointer, and so needs to do the check internally.
+
+Other features provided by lang items include:
+
+- overloadable operators via traits: the traits corresponding to the
+ `==`, `<`, dereferencing (`*`) and `+` (etc.) operators are all
+ marked with lang items; those specific four are `eq`, `ord`,
+ `deref`, and `add` respectively.
+- stack unwinding and general failure; the `eh_personality`,
+ `panic` and `panic_bounds_check` lang items.
+- the traits in `std::marker` used to indicate types of
+ various kinds; lang items `send`, `sync` and `copy`.
+- the marker types and variance indicators found in
+ `std::marker`; lang items `covariant_type`,
+ `contravariant_lifetime`, etc.
+
+Lang items are loaded lazily by the compiler; e.g. if one never uses
+`Box` then there is no need to define functions for `exchange_malloc`
+and `box_free`. `rustc` will emit an error when an item is needed
+but not found in the current crate or any that it depends on.
+
+Most lang items are defined by `libcore`, but if you're trying to build
+an executable without the standard library, you'll run into the need
+for lang items. The rest of this page focuses on this use-case, even though
+lang items are a bit broader than that.
+
+### Using libc
+
+In order to build a `#[no_std]` executable we will need libc as a dependency.
+We can specify this using our `Cargo.toml` file:
+
+```toml
+[dependencies]
+libc = { version = "0.2.14", default-features = false }
+```
+
+Note that the default features have been disabled. This is a critical step -
+**the default features of libc include the standard library and so must be
+disabled.**
+
+### Writing an executable without stdlib
+
+Controlling the entry point is possible in two ways: the `#[start]` attribute,
+or overriding the default shim for the C `main` function with your own.
+
+The function marked `#[start]` is passed the command line parameters
+in the same format as C:
+
+```rust,ignore (libc-is-finicky)
+#![feature(lang_items, core_intrinsics, rustc_private)]
+#![feature(start)]
+#![no_std]
+use core::intrinsics;
+use core::panic::PanicInfo;
+
+// Pull in the system libc library for what crt0.o likely requires.
+extern crate libc;
+
+// Entry point for this program.
+#[start]
+fn start(_argc: isize, _argv: *const *const u8) -> isize {
+ 0
+}
+
+// These functions are used by the compiler, but not
+// for a bare-bones hello world. These are normally
+// provided by libstd.
+#[lang = "eh_personality"]
+#[no_mangle]
+pub extern fn rust_eh_personality() {
+}
+
+#[lang = "panic_impl"]
+#[no_mangle]
+pub extern fn rust_begin_panic(info: &PanicInfo) -> ! {
+ unsafe { intrinsics::abort() }
+}
+```
+
+To override the compiler-inserted `main` shim, one has to disable it
+with `#![no_main]` and then create the appropriate symbol with the
+correct ABI and the correct name, which requires overriding the
+compiler's name mangling too:
+
+```rust,ignore (libc-is-finicky)
+#![feature(lang_items, core_intrinsics, rustc_private)]
+#![feature(start)]
+#![no_std]
+#![no_main]
+use core::intrinsics;
+use core::panic::PanicInfo;
+
+// Pull in the system libc library for what crt0.o likely requires.
+extern crate libc;
+
+// Entry point for this program.
+#[no_mangle] // ensure that this symbol is called `main` in the output
+pub extern fn main(_argc: i32, _argv: *const *const u8) -> i32 {
+ 0
+}
+
+// These functions are used by the compiler, but not
+// for a bare-bones hello world. These are normally
+// provided by libstd.
+#[lang = "eh_personality"]
+#[no_mangle]
+pub extern fn rust_eh_personality() {
+}
+
+#[lang = "panic_impl"]
+#[no_mangle]
+pub extern fn rust_begin_panic(info: &PanicInfo) -> ! {
+ unsafe { intrinsics::abort() }
+}
+```
+
+In many cases, you may need to manually link to the `compiler_builtins` crate
+when building a `no_std` binary. You may observe this via linker error messages
+such as "```undefined reference to `__rust_probestack'```".
+
+## More about the language items
+
+The compiler currently makes a few assumptions about symbols which are
+available in the executable to call. Normally these functions are provided by
+the standard library, but without it you must define your own. These symbols
+are called "language items", and they each have an internal name, and then a
+signature that an implementation must conform to.
+
+The first of these functions, `rust_eh_personality`, is used by the failure
+mechanisms of the compiler. This is often mapped to GCC's personality function
+(see the [libstd implementation][unwind] for more information), but crates
+which do not trigger a panic can be assured that this function is never
+called. The language item's name is `eh_personality`.
+
+[unwind]: https://github.com/rust-lang/rust/blob/master/library/panic_unwind/src/gcc.rs
+
+The second function, `rust_begin_panic`, is also used by the failure mechanisms of the
+compiler. When a panic happens, this controls the message that's displayed on
+the screen. While the language item's name is `panic_impl`, the symbol name is
+`rust_begin_panic`.
+
+Finally, a `eh_catch_typeinfo` static is needed for certain targets which
+implement Rust panics on top of C++ exceptions.
+
+## List of all language items
+
+This is a list of all language items in Rust along with where they are located in
+the source code.
+
+- Primitives
+ - `i8`: `libcore/num/mod.rs`
+ - `i16`: `libcore/num/mod.rs`
+ - `i32`: `libcore/num/mod.rs`
+ - `i64`: `libcore/num/mod.rs`
+ - `i128`: `libcore/num/mod.rs`
+ - `isize`: `libcore/num/mod.rs`
+ - `u8`: `libcore/num/mod.rs`
+ - `u16`: `libcore/num/mod.rs`
+ - `u32`: `libcore/num/mod.rs`
+ - `u64`: `libcore/num/mod.rs`
+ - `u128`: `libcore/num/mod.rs`
+ - `usize`: `libcore/num/mod.rs`
+ - `f32`: `libstd/f32.rs`
+ - `f64`: `libstd/f64.rs`
+ - `char`: `libcore/char.rs`
+ - `slice`: `liballoc/slice.rs`
+ - `str`: `liballoc/str.rs`
+ - `const_ptr`: `libcore/ptr.rs`
+ - `mut_ptr`: `libcore/ptr.rs`
+ - `unsafe_cell`: `libcore/cell.rs`
+- Runtime
+ - `start`: `libstd/rt.rs`
+ - `eh_personality`: `libpanic_unwind/emcc.rs` (EMCC)
+ - `eh_personality`: `libpanic_unwind/gcc.rs` (GNU)
+ - `eh_personality`: `libpanic_unwind/seh.rs` (SEH)
+ - `eh_catch_typeinfo`: `libpanic_unwind/emcc.rs` (EMCC)
+ - `panic`: `libcore/panicking.rs`
+ - `panic_bounds_check`: `libcore/panicking.rs`
+ - `panic_impl`: `libcore/panicking.rs`
+ - `panic_impl`: `libstd/panicking.rs`
+- Allocations
+ - `owned_box`: `liballoc/boxed.rs`
+ - `exchange_malloc`: `liballoc/heap.rs`
+ - `box_free`: `liballoc/heap.rs`
+- Operands
+ - `not`: `libcore/ops/bit.rs`
+ - `bitand`: `libcore/ops/bit.rs`
+ - `bitor`: `libcore/ops/bit.rs`
+ - `bitxor`: `libcore/ops/bit.rs`
+ - `shl`: `libcore/ops/bit.rs`
+ - `shr`: `libcore/ops/bit.rs`
+ - `bitand_assign`: `libcore/ops/bit.rs`
+ - `bitor_assign`: `libcore/ops/bit.rs`
+ - `bitxor_assign`: `libcore/ops/bit.rs`
+ - `shl_assign`: `libcore/ops/bit.rs`
+ - `shr_assign`: `libcore/ops/bit.rs`
+ - `deref`: `libcore/ops/deref.rs`
+ - `deref_mut`: `libcore/ops/deref.rs`
+ - `index`: `libcore/ops/index.rs`
+ - `index_mut`: `libcore/ops/index.rs`
+ - `add`: `libcore/ops/arith.rs`
+ - `sub`: `libcore/ops/arith.rs`
+ - `mul`: `libcore/ops/arith.rs`
+ - `div`: `libcore/ops/arith.rs`
+ - `rem`: `libcore/ops/arith.rs`
+ - `neg`: `libcore/ops/arith.rs`
+ - `add_assign`: `libcore/ops/arith.rs`
+ - `sub_assign`: `libcore/ops/arith.rs`
+ - `mul_assign`: `libcore/ops/arith.rs`
+ - `div_assign`: `libcore/ops/arith.rs`
+ - `rem_assign`: `libcore/ops/arith.rs`
+ - `eq`: `libcore/cmp.rs`
+ - `ord`: `libcore/cmp.rs`
+- Functions
+ - `fn`: `libcore/ops/function.rs`
+ - `fn_mut`: `libcore/ops/function.rs`
+ - `fn_once`: `libcore/ops/function.rs`
+ - `generator_state`: `libcore/ops/generator.rs`
+ - `generator`: `libcore/ops/generator.rs`
+- Other
+ - `coerce_unsized`: `libcore/ops/unsize.rs`
+ - `drop`: `libcore/ops/drop.rs`
+ - `drop_in_place`: `libcore/ptr.rs`
+ - `clone`: `libcore/clone.rs`
+ - `copy`: `libcore/marker.rs`
+ - `send`: `libcore/marker.rs`
+ - `sized`: `libcore/marker.rs`
+ - `unsize`: `libcore/marker.rs`
+ - `sync`: `libcore/marker.rs`
+ - `phantom_data`: `libcore/marker.rs`
+ - `discriminant_kind`: `libcore/marker.rs`
+ - `freeze`: `libcore/marker.rs`
+ - `debug_trait`: `libcore/fmt/mod.rs`
+ - `non_zero`: `libcore/nonzero.rs`
+ - `arc`: `liballoc/sync.rs`
+ - `rc`: `liballoc/rc.rs`
diff --git a/src/doc/unstable-book/src/language-features/link-cfg.md b/src/doc/unstable-book/src/language-features/link-cfg.md
new file mode 100644
index 000000000..ee0fd5bf8
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/link-cfg.md
@@ -0,0 +1,5 @@
+# `link_cfg`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/language-features/marker-trait-attr.md b/src/doc/unstable-book/src/language-features/marker-trait-attr.md
new file mode 100644
index 000000000..be350cd61
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/marker-trait-attr.md
@@ -0,0 +1,35 @@
+# `marker_trait_attr`
+
+The tracking issue for this feature is: [#29864]
+
+[#29864]: https://github.com/rust-lang/rust/issues/29864
+
+------------------------
+
+Normally, Rust keeps you from adding trait implementations that could
+overlap with each other, as it would be ambiguous which to use. This
+feature, however, carves out an exception to that rule: a trait can
+opt-in to having overlapping implementations, at the cost that those
+implementations are not allowed to override anything (and thus the
+trait itself cannot have any associated items, as they're pointless
+when they'd need to do the same thing for every type anyway).
+
+```rust
+#![feature(marker_trait_attr)]
+
+#[marker] trait CheapToClone: Clone {}
+
+impl<T: Copy> CheapToClone for T {}
+
+// These could potentially overlap with the blanket implementation above,
+// so are only allowed because CheapToClone is a marker trait.
+impl<T: CheapToClone, U: CheapToClone> CheapToClone for (T, U) {}
+impl<T: CheapToClone> CheapToClone for std::ops::Range<T> {}
+
+fn cheap_clone<T: CheapToClone>(t: T) -> T {
+ t.clone()
+}
+```
+
+This is expected to replace the unstable `overlapping_marker_traits`
+feature, which applied to all empty traits (without needing an opt-in).
diff --git a/src/doc/unstable-book/src/language-features/more-qualified-paths.md b/src/doc/unstable-book/src/language-features/more-qualified-paths.md
new file mode 100644
index 000000000..857af577a
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/more-qualified-paths.md
@@ -0,0 +1,29 @@
+# `more_qualified_paths`
+
+The `more_qualified_paths` feature can be used in order to enable the
+use of qualified paths in patterns.
+
+## Example
+
+```rust
+#![feature(more_qualified_paths)]
+
+fn main() {
+ // destructure through a qualified path
+ let <Foo as A>::Assoc { br } = StructStruct { br: 2 };
+}
+
+struct StructStruct {
+ br: i8,
+}
+
+struct Foo;
+
+trait A {
+ type Assoc;
+}
+
+impl A for Foo {
+ type Assoc = StructStruct;
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/native-link-modifiers-as-needed.md b/src/doc/unstable-book/src/language-features/native-link-modifiers-as-needed.md
new file mode 100644
index 000000000..175767361
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/native-link-modifiers-as-needed.md
@@ -0,0 +1,18 @@
+# `native_link_modifiers_as_needed`
+
+The tracking issue for this feature is: [#81490]
+
+[#81490]: https://github.com/rust-lang/rust/issues/81490
+
+------------------------
+
+The `native_link_modifiers_as_needed` feature allows you to use the `as-needed` modifier.
+
+`as-needed` is only compatible with the `dynamic` and `framework` linking kinds. Using any other kind will result in a compiler error.
+
+`+as-needed` means that the library will be actually linked only if it satisfies some undefined symbols at the point at which it is specified on the command line, making it similar to static libraries in this regard.
+
+This modifier translates to `--as-needed` for ld-like linkers, and to `-dead_strip_dylibs` / `-needed_library` / `-needed_framework` for ld64.
+The modifier does nothing for linkers that don't support it (e.g. `link.exe`).
+
+The default for this modifier is unclear, some targets currently specify it as `+as-needed`, some do not. We may want to try making `+as-needed` a default for all targets.
diff --git a/src/doc/unstable-book/src/language-features/native-link-modifiers-verbatim.md b/src/doc/unstable-book/src/language-features/native-link-modifiers-verbatim.md
new file mode 100644
index 000000000..02bd87e50
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/native-link-modifiers-verbatim.md
@@ -0,0 +1,20 @@
+# `native_link_modifiers_verbatim`
+
+The tracking issue for this feature is: [#81490]
+
+[#81490]: https://github.com/rust-lang/rust/issues/81490
+
+------------------------
+
+The `native_link_modifiers_verbatim` feature allows you to use the `verbatim` modifier.
+
+`+verbatim` means that rustc itself won't add any target-specified library prefixes or suffixes (like `lib` or `.a`) to the library name, and will try its best to ask for the same thing from the linker.
+
+For `ld`-like linkers rustc will use the `-l:filename` syntax (note the colon) when passing the library, so the linker won't add any prefixes or suffixes as well.
+See [`-l namespec`](https://sourceware.org/binutils/docs/ld/Options.html) in ld documentation for more details.
+For linkers not supporting any verbatim modifiers (e.g. `link.exe` or `ld64`) the library name will be passed as is.
+
+The default for this modifier is `-verbatim`.
+
+This RFC changes the behavior of `raw-dylib` linking kind specified by [RFC 2627](https://github.com/rust-lang/rfcs/pull/2627). The `.dll` suffix (or other target-specified suffixes for other targets) is now added automatically.
+If your DLL doesn't have the `.dll` suffix, it can be specified with `+verbatim`.
diff --git a/src/doc/unstable-book/src/language-features/negative-impls.md b/src/doc/unstable-book/src/language-features/negative-impls.md
new file mode 100644
index 000000000..151520f0e
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/negative-impls.md
@@ -0,0 +1,57 @@
+# `negative_impls`
+
+The tracking issue for this feature is [#68318].
+
+[#68318]: https://github.com/rust-lang/rust/issues/68318
+
+----
+
+With the feature gate `negative_impls`, you can write negative impls as well as positive ones:
+
+```rust
+#![feature(negative_impls)]
+trait DerefMut { }
+impl<T: ?Sized> !DerefMut for &T { }
+```
+
+Negative impls indicate a semver guarantee that the given trait will not be implemented for the given types. Negative impls play an additional purpose for auto traits, described below.
+
+Negative impls have the following characteristics:
+
+* They do not have any items.
+* They must obey the orphan rules as if they were a positive impl.
+* They cannot "overlap" with any positive impls.
+
+## Semver interaction
+
+It is a breaking change to remove a negative impl. Negative impls are a commitment not to implement the given trait for the named types.
+
+## Orphan and overlap rules
+
+Negative impls must obey the same orphan rules as a positive impl. This implies you cannot add a negative impl for types defined in upstream crates and so forth.
+
+Similarly, negative impls cannot overlap with positive impls, again using the same "overlap" check that we ordinarily use to determine if two impls overlap. (Note that positive impls typically cannot overlap with one another either, except as permitted by specialization.)
+
+## Interaction with auto traits
+
+Declaring a negative impl `impl !SomeAutoTrait for SomeType` for an
+auto-trait serves two purposes:
+
+* as with any trait, it declares that `SomeType` will never implement `SomeAutoTrait`;
+* it disables the automatic `SomeType: SomeAutoTrait` impl that would otherwise have been generated.
+
+Note that, at present, there is no way to indicate that a given type
+does not implement an auto trait *but that it may do so in the
+future*. For ordinary types, this is done by simply not declaring any
+impl at all, but that is not an option for auto traits. A workaround
+is that one could embed a marker type as one of the fields, where the
+marker type is `!AutoTrait`.
+
+## Immediate uses
+
+Negative impls are used to declare that `&T: !DerefMut` and `&mut T: !Clone`, as required to fix the soundness of `Pin` described in [#66544](https://github.com/rust-lang/rust/issues/66544).
+
+This serves two purposes:
+
+* For proving the correctness of unsafe code, we can use that impl as evidence that no `DerefMut` or `Clone` impl exists.
+* It prevents downstream crates from creating such impls.
diff --git a/src/doc/unstable-book/src/language-features/no-coverage.md b/src/doc/unstable-book/src/language-features/no-coverage.md
new file mode 100644
index 000000000..327cdb397
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/no-coverage.md
@@ -0,0 +1,30 @@
+# `no_coverage`
+
+The tracking issue for this feature is: [#84605]
+
+[#84605]: https://github.com/rust-lang/rust/issues/84605
+
+---
+
+The `no_coverage` attribute can be used to selectively disable coverage
+instrumentation in an annotated function. This might be useful to:
+
+- Avoid instrumentation overhead in a performance critical function
+- Avoid generating coverage for a function that is not meant to be executed,
+ but still target 100% coverage for the rest of the program.
+
+## Example
+
+```rust
+#![feature(no_coverage)]
+
+// `foo()` will get coverage instrumentation (by default)
+fn foo() {
+ // ...
+}
+
+#[no_coverage]
+fn bar() {
+ // ...
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/no-sanitize.md b/src/doc/unstable-book/src/language-features/no-sanitize.md
new file mode 100644
index 000000000..28c683934
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/no-sanitize.md
@@ -0,0 +1,29 @@
+# `no_sanitize`
+
+The tracking issue for this feature is: [#39699]
+
+[#39699]: https://github.com/rust-lang/rust/issues/39699
+
+------------------------
+
+The `no_sanitize` attribute can be used to selectively disable sanitizer
+instrumentation in an annotated function. This might be useful to: avoid
+instrumentation overhead in a performance critical function, or avoid
+instrumenting code that contains constructs unsupported by given sanitizer.
+
+The precise effect of this annotation depends on particular sanitizer in use.
+For example, with `no_sanitize(thread)`, the thread sanitizer will no longer
+instrument non-atomic store / load operations, but it will instrument atomic
+operations to avoid reporting false positives and provide meaning full stack
+traces.
+
+## Examples
+
+``` rust
+#![feature(no_sanitize)]
+
+#[no_sanitize(address)]
+fn foo() {
+ // ...
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/plugin.md b/src/doc/unstable-book/src/language-features/plugin.md
new file mode 100644
index 000000000..56fe9a31b
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/plugin.md
@@ -0,0 +1,116 @@
+# `plugin`
+
+The tracking issue for this feature is: [#29597]
+
+[#29597]: https://github.com/rust-lang/rust/issues/29597
+
+
+This feature is part of "compiler plugins." It will often be used with the
+`rustc_private` feature.
+
+------------------------
+
+`rustc` can load compiler plugins, which are user-provided libraries that
+extend the compiler's behavior with new lint checks, etc.
+
+A plugin is a dynamic library crate with a designated *registrar* function that
+registers extensions with `rustc`. Other crates can load these extensions using
+the crate attribute `#![plugin(...)]`. See the
+`rustc_driver::plugin` documentation for more about the
+mechanics of defining and loading a plugin.
+
+In the vast majority of cases, a plugin should *only* be used through
+`#![plugin]` and not through an `extern crate` item. Linking a plugin would
+pull in all of librustc_ast and librustc as dependencies of your crate. This is
+generally unwanted unless you are building another plugin.
+
+The usual practice is to put compiler plugins in their own crate, separate from
+any `macro_rules!` macros or ordinary Rust code meant to be used by consumers
+of a library.
+
+# Lint plugins
+
+Plugins can extend [Rust's lint
+infrastructure](../../reference/attributes/diagnostics.md#lint-check-attributes) with
+additional checks for code style, safety, etc. Now let's write a plugin
+[`lint-plugin-test.rs`](https://github.com/rust-lang/rust/blob/master/src/test/ui-fulldeps/auxiliary/lint-plugin-test.rs)
+that warns about any item named `lintme`.
+
+```rust,ignore (requires-stage-2)
+#![feature(box_syntax, rustc_private)]
+
+extern crate rustc_ast;
+
+// Load rustc as a plugin to get macros
+extern crate rustc_driver;
+#[macro_use]
+extern crate rustc_lint;
+#[macro_use]
+extern crate rustc_session;
+
+use rustc_driver::plugin::Registry;
+use rustc_lint::{EarlyContext, EarlyLintPass, LintArray, LintContext, LintPass};
+use rustc_ast::ast;
+declare_lint!(TEST_LINT, Warn, "Warn about items named 'lintme'");
+
+declare_lint_pass!(Pass => [TEST_LINT]);
+
+impl EarlyLintPass for Pass {
+ fn check_item(&mut self, cx: &EarlyContext, it: &ast::Item) {
+ if it.ident.name.as_str() == "lintme" {
+ cx.lint(TEST_LINT, |lint| {
+ lint.build("item is named 'lintme'").set_span(it.span).emit()
+ });
+ }
+ }
+}
+
+#[no_mangle]
+fn __rustc_plugin_registrar(reg: &mut Registry) {
+ reg.lint_store.register_lints(&[&TEST_LINT]);
+ reg.lint_store.register_early_pass(|| box Pass);
+}
+```
+
+Then code like
+
+```rust,ignore (requires-plugin)
+#![feature(plugin)]
+#![plugin(lint_plugin_test)]
+
+fn lintme() { }
+```
+
+will produce a compiler warning:
+
+```txt
+foo.rs:4:1: 4:16 warning: item is named 'lintme', #[warn(test_lint)] on by default
+foo.rs:4 fn lintme() { }
+ ^~~~~~~~~~~~~~~
+```
+
+The components of a lint plugin are:
+
+* one or more `declare_lint!` invocations, which define static `Lint` structs;
+
+* a struct holding any state needed by the lint pass (here, none);
+
+* a `LintPass`
+ implementation defining how to check each syntax element. A single
+ `LintPass` may call `span_lint` for several different `Lint`s, but should
+ register them all through the `get_lints` method.
+
+Lint passes are syntax traversals, but they run at a late stage of compilation
+where type information is available. `rustc`'s [built-in
+lints](https://github.com/rust-lang/rust/blob/master/compiler/rustc_lint_defs/src/builtin.rs)
+mostly use the same infrastructure as lint plugins, and provide examples of how
+to access type information.
+
+Lints defined by plugins are controlled by the usual [attributes and compiler
+flags](../../reference/attributes/diagnostics.md#lint-check-attributes), e.g.
+`#[allow(test_lint)]` or `-A test-lint`. These identifiers are derived from the
+first argument to `declare_lint!`, with appropriate case and punctuation
+conversion.
+
+You can run `rustc -W help foo.rs` to see a list of lints known to `rustc`,
+including those provided by plugins loaded by `foo.rs`.
diff --git a/src/doc/unstable-book/src/language-features/profiler-runtime.md b/src/doc/unstable-book/src/language-features/profiler-runtime.md
new file mode 100644
index 000000000..aee86f639
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/profiler-runtime.md
@@ -0,0 +1,5 @@
+# `profiler_runtime`
+
+The tracking issue for this feature is: [#42524](https://github.com/rust-lang/rust/issues/42524).
+
+------------------------
diff --git a/src/doc/unstable-book/src/language-features/raw-dylib.md b/src/doc/unstable-book/src/language-features/raw-dylib.md
new file mode 100644
index 000000000..23fc5b305
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/raw-dylib.md
@@ -0,0 +1,34 @@
+# `raw_dylib`
+
+The tracking issue for this feature is: [#58713]
+
+[#58713]: https://github.com/rust-lang/rust/issues/58713
+
+------------------------
+
+The `raw_dylib` feature allows you to link against the implementations of functions in an `extern`
+block without, on Windows, linking against an import library.
+
+```rust,ignore (partial-example)
+#![feature(raw_dylib)]
+
+#[link(name="library", kind="raw-dylib")]
+extern {
+ fn extern_function(x: i32);
+}
+
+fn main() {
+ unsafe {
+ extern_function(14);
+ }
+}
+```
+
+## Limitations
+
+Currently, this feature is only supported on `-windows-msvc` targets. Non-Windows platforms don't have import
+libraries, and an incompatibility between LLVM and the BFD linker means that it is not currently supported on
+`-windows-gnu` targets.
+
+On the `i686-pc-windows-msvc` target, this feature supports only the `cdecl`, `stdcall`, `system`, and `fastcall`
+calling conventions.
diff --git a/src/doc/unstable-book/src/language-features/repr128.md b/src/doc/unstable-book/src/language-features/repr128.md
new file mode 100644
index 000000000..146f50ee6
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/repr128.md
@@ -0,0 +1,18 @@
+# `repr128`
+
+The tracking issue for this feature is: [#56071]
+
+[#56071]: https://github.com/rust-lang/rust/issues/56071
+
+------------------------
+
+The `repr128` feature adds support for `#[repr(u128)]` on `enum`s.
+
+```rust
+#![feature(repr128)]
+
+#[repr(u128)]
+enum Foo {
+ Bar(u64),
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/rustc-attrs.md b/src/doc/unstable-book/src/language-features/rustc-attrs.md
new file mode 100644
index 000000000..c67b806f0
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/rustc-attrs.md
@@ -0,0 +1,53 @@
+# `rustc_attrs`
+
+This feature has no tracking issue, and is therefore internal to
+the compiler, not being intended for general use.
+
+Note: `rustc_attrs` enables many rustc-internal attributes and this page
+only discuss a few of them.
+
+------------------------
+
+The `rustc_attrs` feature allows debugging rustc type layouts by using
+`#[rustc_layout(...)]` to debug layout at compile time (it even works
+with `cargo check`) as an alternative to `rustc -Z print-type-sizes`
+that is way more verbose.
+
+Options provided by `#[rustc_layout(...)]` are `debug`, `size`, `align`,
+`abi`. Note that it only works on sized types without generics.
+
+## Examples
+
+```rust,compile_fail
+#![feature(rustc_attrs)]
+
+#[rustc_layout(abi, size)]
+pub enum X {
+ Y(u8, u8, u8),
+ Z(isize),
+}
+```
+
+When that is compiled, the compiler will error with something like
+
+```text
+error: abi: Aggregate { sized: true }
+ --> src/lib.rs:4:1
+ |
+4 | / pub enum T {
+5 | | Y(u8, u8, u8),
+6 | | Z(isize),
+7 | | }
+ | |_^
+
+error: size: Size { raw: 16 }
+ --> src/lib.rs:4:1
+ |
+4 | / pub enum T {
+5 | | Y(u8, u8, u8),
+6 | | Z(isize),
+7 | | }
+ | |_^
+
+error: aborting due to 2 previous errors
+```
diff --git a/src/doc/unstable-book/src/language-features/strict-provenance.md b/src/doc/unstable-book/src/language-features/strict-provenance.md
new file mode 100644
index 000000000..dc60f3f37
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/strict-provenance.md
@@ -0,0 +1,22 @@
+# `strict_provenance`
+
+The tracking issue for this feature is: [#95228]
+
+[#95228]: https://github.com/rust-lang/rust/issues/95228
+-----
+
+The `strict_provenance` feature allows to enable the `fuzzy_provenance_casts` and `lossy_provenance_casts` lints.
+These lint on casts between integers and pointers, that are recommended against or invalid in the strict provenance model.
+The same feature gate is also used for the experimental strict provenance API in `std` (actually `core`).
+
+## Example
+
+```rust
+#![feature(strict_provenance)]
+#![warn(fuzzy_provenance_casts)]
+
+fn main() {
+ let _dangling = 16_usize as *const u8;
+ //~^ WARNING: strict provenance disallows casting integer `usize` to pointer `*const u8`
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/trait-alias.md b/src/doc/unstable-book/src/language-features/trait-alias.md
new file mode 100644
index 000000000..f1be053dd
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/trait-alias.md
@@ -0,0 +1,34 @@
+# `trait_alias`
+
+The tracking issue for this feature is: [#41517]
+
+[#41517]: https://github.com/rust-lang/rust/issues/41517
+
+------------------------
+
+The `trait_alias` feature adds support for trait aliases. These allow aliases
+to be created for one or more traits (currently just a single regular trait plus
+any number of auto-traits), and used wherever traits would normally be used as
+either bounds or trait objects.
+
+```rust
+#![feature(trait_alias)]
+
+trait Foo = std::fmt::Debug + Send;
+trait Bar = Foo + Sync;
+
+// Use trait alias as bound on type parameter.
+fn foo<T: Foo>(v: &T) {
+ println!("{:?}", v);
+}
+
+pub fn main() {
+ foo(&1);
+
+ // Use trait alias for trait objects.
+ let a: &Bar = &123;
+ println!("{:?}", a);
+ let b = Box::new(456) as Box<dyn Foo>;
+ println!("{:?}", b);
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/trait-upcasting.md b/src/doc/unstable-book/src/language-features/trait-upcasting.md
new file mode 100644
index 000000000..3697ae38f
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/trait-upcasting.md
@@ -0,0 +1,27 @@
+# `trait_upcasting`
+
+The tracking issue for this feature is: [#65991]
+
+[#65991]: https://github.com/rust-lang/rust/issues/65991
+
+------------------------
+
+The `trait_upcasting` feature adds support for trait upcasting coercion. This allows a
+trait object of type `dyn Bar` to be cast to a trait object of type `dyn Foo`
+so long as `Bar: Foo`.
+
+```rust,edition2018
+#![feature(trait_upcasting)]
+#![allow(incomplete_features)]
+
+trait Foo {}
+
+trait Bar: Foo {}
+
+impl Foo for i32 {}
+
+impl<T: Foo + ?Sized> Bar for T {}
+
+let bar: &dyn Bar = &123;
+let foo: &dyn Foo = bar;
+```
diff --git a/src/doc/unstable-book/src/language-features/transparent-unions.md b/src/doc/unstable-book/src/language-features/transparent-unions.md
new file mode 100644
index 000000000..9b39b8971
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/transparent-unions.md
@@ -0,0 +1,83 @@
+# `transparent_unions`
+
+The tracking issue for this feature is [#60405]
+
+[#60405]: https://github.com/rust-lang/rust/issues/60405
+
+----
+
+The `transparent_unions` feature allows you mark `union`s as
+`#[repr(transparent)]`. A `union` may be `#[repr(transparent)]` in exactly the
+same conditions in which a `struct` may be `#[repr(transparent)]` (generally,
+this means the `union` must have exactly one non-zero-sized field). Some
+concrete illustrations follow.
+
+```rust
+#![feature(transparent_unions)]
+
+// This union has the same representation as `f32`.
+#[repr(transparent)]
+union SingleFieldUnion {
+ field: f32,
+}
+
+// This union has the same representation as `usize`.
+#[repr(transparent)]
+union MultiFieldUnion {
+ field: usize,
+ nothing: (),
+}
+```
+
+For consistency with transparent `struct`s, `union`s must have exactly one
+non-zero-sized field. If all fields are zero-sized, the `union` must not be
+`#[repr(transparent)]`:
+
+```rust
+#![feature(transparent_unions)]
+
+// This (non-transparent) union is already valid in stable Rust:
+pub union GoodUnion {
+ pub nothing: (),
+}
+
+// Error: transparent union needs exactly one non-zero-sized field, but has 0
+// #[repr(transparent)]
+// pub union BadUnion {
+// pub nothing: (),
+// }
+```
+
+The one exception is if the `union` is generic over `T` and has a field of type
+`T`, it may be `#[repr(transparent)]` even if `T` is a zero-sized type:
+
+```rust
+#![feature(transparent_unions)]
+
+// This union has the same representation as `T`.
+#[repr(transparent)]
+pub union GenericUnion<T: Copy> { // Unions with non-`Copy` fields are unstable.
+ pub field: T,
+ pub nothing: (),
+}
+
+// This is okay even though `()` is a zero-sized type.
+pub const THIS_IS_OKAY: GenericUnion<()> = GenericUnion { field: () };
+```
+
+Like transarent `struct`s, a transparent `union` of type `U` has the same
+layout, size, and ABI as its single non-ZST field. If it is generic over a type
+`T`, and all its fields are ZSTs except for exactly one field of type `T`, then
+it has the same layout and ABI as `T` (even if `T` is a ZST when monomorphized).
+
+Like transparent `struct`s, transparent `union`s are FFI-safe if and only if
+their underlying representation type is also FFI-safe.
+
+A `union` may not be eligible for the same nonnull-style optimizations that a
+`struct` or `enum` (with the same fields) are eligible for. Adding
+`#[repr(transparent)]` to `union` does not change this. To give a more concrete
+example, it is unspecified whether `size_of::<T>()` is equal to
+`size_of::<Option<T>>()`, where `T` is a `union` (regardless of whether or not
+it is transparent). The Rust compiler is free to perform this optimization if
+possible, but is not required to, and different compiler versions may differ in
+their application of these optimizations.
diff --git a/src/doc/unstable-book/src/language-features/try-blocks.md b/src/doc/unstable-book/src/language-features/try-blocks.md
new file mode 100644
index 000000000..e342c260a
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/try-blocks.md
@@ -0,0 +1,30 @@
+# `try_blocks`
+
+The tracking issue for this feature is: [#31436]
+
+[#31436]: https://github.com/rust-lang/rust/issues/31436
+
+------------------------
+
+The `try_blocks` feature adds support for `try` blocks. A `try`
+block creates a new scope one can use the `?` operator in.
+
+```rust,edition2018
+#![feature(try_blocks)]
+
+use std::num::ParseIntError;
+
+let result: Result<i32, ParseIntError> = try {
+ "1".parse::<i32>()?
+ + "2".parse::<i32>()?
+ + "3".parse::<i32>()?
+};
+assert_eq!(result, Ok(6));
+
+let result: Result<i32, ParseIntError> = try {
+ "1".parse::<i32>()?
+ + "foo".parse::<i32>()?
+ + "3".parse::<i32>()?
+};
+assert!(result.is_err());
+```
diff --git a/src/doc/unstable-book/src/language-features/type-changing-struct-update.md b/src/doc/unstable-book/src/language-features/type-changing-struct-update.md
new file mode 100644
index 000000000..9909cf35b
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/type-changing-struct-update.md
@@ -0,0 +1,33 @@
+# `type_changing_struct_update`
+
+The tracking issue for this feature is: [#86555]
+
+[#86555]: https://github.com/rust-lang/rust/issues/86555
+
+------------------------
+
+This implements [RFC2528]. When turned on, you can create instances of the same struct
+that have different generic type or lifetime parameters.
+
+[RFC2528]: https://github.com/rust-lang/rfcs/blob/master/text/2528-type-changing-struct-update-syntax.md
+
+```rust
+#![allow(unused_variables, dead_code)]
+#![feature(type_changing_struct_update)]
+
+fn main () {
+ struct Foo<T, U> {
+ field1: T,
+ field2: U,
+ }
+
+ let base: Foo<String, i32> = Foo {
+ field1: String::from("hello"),
+ field2: 1234,
+ };
+ let updated: Foo<f64, i32> = Foo {
+ field1: 3.14,
+ ..base
+ };
+}
+```
diff --git a/src/doc/unstable-book/src/language-features/unboxed-closures.md b/src/doc/unstable-book/src/language-features/unboxed-closures.md
new file mode 100644
index 000000000..e4113d72d
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/unboxed-closures.md
@@ -0,0 +1,25 @@
+# `unboxed_closures`
+
+The tracking issue for this feature is [#29625]
+
+See Also: [`fn_traits`](../library-features/fn-traits.md)
+
+[#29625]: https://github.com/rust-lang/rust/issues/29625
+
+----
+
+The `unboxed_closures` feature allows you to write functions using the `"rust-call"` ABI,
+required for implementing the [`Fn*`] family of traits. `"rust-call"` functions must have
+exactly one (non self) argument, a tuple representing the argument list.
+
+[`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+
+```rust
+#![feature(unboxed_closures)]
+
+extern "rust-call" fn add_args(args: (u32, u32)) -> u32 {
+ args.0 + args.1
+}
+
+fn main() {}
+```
diff --git a/src/doc/unstable-book/src/language-features/unsized-locals.md b/src/doc/unstable-book/src/language-features/unsized-locals.md
new file mode 100644
index 000000000..d5b01a3d6
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/unsized-locals.md
@@ -0,0 +1,175 @@
+# `unsized_locals`
+
+The tracking issue for this feature is: [#48055]
+
+[#48055]: https://github.com/rust-lang/rust/issues/48055
+
+------------------------
+
+This implements [RFC1909]. When turned on, you can have unsized arguments and locals:
+
+[RFC1909]: https://github.com/rust-lang/rfcs/blob/master/text/1909-unsized-rvalues.md
+
+```rust
+#![allow(incomplete_features)]
+#![feature(unsized_locals, unsized_fn_params)]
+
+use std::any::Any;
+
+fn main() {
+ let x: Box<dyn Any> = Box::new(42);
+ let x: dyn Any = *x;
+ // ^ unsized local variable
+ // ^^ unsized temporary
+ foo(x);
+}
+
+fn foo(_: dyn Any) {}
+// ^^^^^^ unsized argument
+```
+
+The RFC still forbids the following unsized expressions:
+
+```rust,compile_fail
+#![feature(unsized_locals)]
+
+use std::any::Any;
+
+struct MyStruct<T: ?Sized> {
+ content: T,
+}
+
+struct MyTupleStruct<T: ?Sized>(T);
+
+fn answer() -> Box<dyn Any> {
+ Box::new(42)
+}
+
+fn main() {
+ // You CANNOT have unsized statics.
+ static X: dyn Any = *answer(); // ERROR
+ const Y: dyn Any = *answer(); // ERROR
+
+ // You CANNOT have struct initialized unsized.
+ MyStruct { content: *answer() }; // ERROR
+ MyTupleStruct(*answer()); // ERROR
+ (42, *answer()); // ERROR
+
+ // You CANNOT have unsized return types.
+ fn my_function() -> dyn Any { *answer() } // ERROR
+
+ // You CAN have unsized local variables...
+ let mut x: dyn Any = *answer(); // OK
+ // ...but you CANNOT reassign to them.
+ x = *answer(); // ERROR
+
+ // You CANNOT even initialize them separately.
+ let y: dyn Any; // OK
+ y = *answer(); // ERROR
+
+ // Not mentioned in the RFC, but by-move captured variables are also Sized.
+ let x: dyn Any = *answer();
+ (move || { // ERROR
+ let y = x;
+ })();
+
+ // You CAN create a closure with unsized arguments,
+ // but you CANNOT call it.
+ // This is an implementation detail and may be changed in the future.
+ let f = |x: dyn Any| {};
+ f(*answer()); // ERROR
+}
+```
+
+## By-value trait objects
+
+With this feature, you can have by-value `self` arguments without `Self: Sized` bounds.
+
+```rust
+#![feature(unsized_fn_params)]
+
+trait Foo {
+ fn foo(self) {}
+}
+
+impl<T: ?Sized> Foo for T {}
+
+fn main() {
+ let slice: Box<[i32]> = Box::new([1, 2, 3]);
+ <[i32] as Foo>::foo(*slice);
+}
+```
+
+And `Foo` will also be object-safe.
+
+```rust
+#![feature(unsized_fn_params)]
+
+trait Foo {
+ fn foo(self) {}
+}
+
+impl<T: ?Sized> Foo for T {}
+
+fn main () {
+ let slice: Box<dyn Foo> = Box::new([1, 2, 3]);
+ // doesn't compile yet
+ <dyn Foo as Foo>::foo(*slice);
+}
+```
+
+One of the objectives of this feature is to allow `Box<dyn FnOnce>`.
+
+## Variable length arrays
+
+The RFC also describes an extension to the array literal syntax: `[e; dyn n]`. In the syntax, `n` isn't necessarily a constant expression. The array is dynamically allocated on the stack and has the type of `[T]`, instead of `[T; n]`.
+
+```rust,ignore (not-yet-implemented)
+#![feature(unsized_locals)]
+
+fn mergesort<T: Ord>(a: &mut [T]) {
+ let mut tmp = [T; dyn a.len()];
+ // ...
+}
+
+fn main() {
+ let mut a = [3, 1, 5, 6];
+ mergesort(&mut a);
+ assert_eq!(a, [1, 3, 5, 6]);
+}
+```
+
+VLAs are not implemented yet. The syntax isn't final, either. We may need an alternative syntax for Rust 2015 because, in Rust 2015, expressions like `[e; dyn(1)]` would be ambiguous. One possible alternative proposed in the RFC is `[e; n]`: if `n` captures one or more local variables, then it is considered as `[e; dyn n]`.
+
+## Advisory on stack usage
+
+It's advised not to casually use the `#![feature(unsized_locals)]` feature. Typical use-cases are:
+
+- When you need a by-value trait objects.
+- When you really need a fast allocation of small temporary arrays.
+
+Another pitfall is repetitive allocation and temporaries. Currently the compiler simply extends the stack frame every time it encounters an unsized assignment. So for example, the code
+
+```rust
+#![feature(unsized_locals)]
+
+fn main() {
+ let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]);
+ let _x = {{{{{{{{{{*x}}}}}}}}}};
+}
+```
+
+and the code
+
+```rust
+#![feature(unsized_locals)]
+
+fn main() {
+ for _ in 0..10 {
+ let x: Box<[i32]> = Box::new([1, 2, 3, 4, 5]);
+ let _x = *x;
+ }
+}
+```
+
+will unnecessarily extend the stack frame.
diff --git a/src/doc/unstable-book/src/language-features/unsized-tuple-coercion.md b/src/doc/unstable-book/src/language-features/unsized-tuple-coercion.md
new file mode 100644
index 000000000..310c8d962
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/unsized-tuple-coercion.md
@@ -0,0 +1,27 @@
+# `unsized_tuple_coercion`
+
+The tracking issue for this feature is: [#42877]
+
+[#42877]: https://github.com/rust-lang/rust/issues/42877
+
+------------------------
+
+This is a part of [RFC0401]. According to the RFC, there should be an implementation like this:
+
+```rust,ignore (partial-example)
+impl<..., T, U: ?Sized> Unsized<(..., U)> for (..., T) where T: Unsized<U> {}
+```
+
+This implementation is currently gated behind `#[feature(unsized_tuple_coercion)]` to avoid insta-stability. Therefore you can use it like this:
+
+```rust
+#![feature(unsized_tuple_coercion)]
+
+fn main() {
+ let x : ([i32; 3], [i32; 3]) = ([1, 2, 3], [4, 5, 6]);
+ let y : &([i32; 3], [i32]) = &x;
+ assert_eq!(y.1[0], 4);
+}
+```
+
+[RFC0401]: https://github.com/rust-lang/rfcs/blob/master/text/0401-coercions.md
diff --git a/src/doc/unstable-book/src/language-features/yeet-expr.md b/src/doc/unstable-book/src/language-features/yeet-expr.md
new file mode 100644
index 000000000..bc1ba4c91
--- /dev/null
+++ b/src/doc/unstable-book/src/language-features/yeet-expr.md
@@ -0,0 +1,26 @@
+# `yeet_expr`
+
+The tracking issue for this feature is: [#96373]
+
+[#96373]: https://github.com/rust-lang/rust/issues/96373
+
+------------------------
+
+The `yeet_expr` feature adds support for `do yeet` expressions,
+which can be used to early-exit from a function or `try` block.
+
+These are highly experimental, thus the placeholder syntax.
+
+```rust,edition2021
+#![feature(yeet_expr)]
+
+fn foo() -> Result<String, i32> {
+ do yeet 4;
+}
+assert_eq!(foo(), Err(4));
+
+fn bar() -> Option<String> {
+ do yeet;
+}
+assert_eq!(bar(), None);
+```
diff --git a/src/doc/unstable-book/src/library-features.md b/src/doc/unstable-book/src/library-features.md
new file mode 100644
index 000000000..9f537e261
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features.md
@@ -0,0 +1 @@
+# Library Features
diff --git a/src/doc/unstable-book/src/library-features/allocator-api.md b/src/doc/unstable-book/src/library-features/allocator-api.md
new file mode 100644
index 000000000..9f045ce08
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/allocator-api.md
@@ -0,0 +1,15 @@
+# `allocator_api`
+
+The tracking issue for this feature is [#32838]
+
+[#32838]: https://github.com/rust-lang/rust/issues/32838
+
+------------------------
+
+Sometimes you want the memory for one collection to use a different
+allocator than the memory for another collection. In this case,
+replacing the global allocator is not a workable option. Instead,
+you need to pass in an instance of an `AllocRef` to each collection
+for which you want a custom allocator.
+
+TBD
diff --git a/src/doc/unstable-book/src/library-features/c-variadic.md b/src/doc/unstable-book/src/library-features/c-variadic.md
new file mode 100644
index 000000000..77762116e
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/c-variadic.md
@@ -0,0 +1,26 @@
+# `c_variadic`
+
+The tracking issue for this feature is: [#44930]
+
+[#44930]: https://github.com/rust-lang/rust/issues/44930
+
+------------------------
+
+The `c_variadic` library feature exposes the `VaList` structure,
+Rust's analogue of C's `va_list` type.
+
+## Examples
+
+```rust
+#![feature(c_variadic)]
+
+use std::ffi::VaList;
+
+pub unsafe extern "C" fn vadd(n: usize, mut args: VaList) -> usize {
+ let mut sum = 0;
+ for _ in 0..n {
+ sum += args.arg::<usize>();
+ }
+ sum
+}
+```
diff --git a/src/doc/unstable-book/src/library-features/c-void-variant.md b/src/doc/unstable-book/src/library-features/c-void-variant.md
new file mode 100644
index 000000000..a2fdc9936
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/c-void-variant.md
@@ -0,0 +1,5 @@
+# `c_void_variant`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/char-error-internals.md b/src/doc/unstable-book/src/library-features/char-error-internals.md
new file mode 100644
index 000000000..8013b4988
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/char-error-internals.md
@@ -0,0 +1,5 @@
+# `char_error_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/concat-idents.md b/src/doc/unstable-book/src/library-features/concat-idents.md
new file mode 100644
index 000000000..73f6cfa21
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/concat-idents.md
@@ -0,0 +1,22 @@
+# `concat_idents`
+
+The tracking issue for this feature is: [#29599]
+
+[#29599]: https://github.com/rust-lang/rust/issues/29599
+
+------------------------
+
+The `concat_idents` feature adds a macro for concatenating multiple identifiers
+into one identifier.
+
+## Examples
+
+```rust
+#![feature(concat_idents)]
+
+fn main() {
+ fn foobar() -> u32 { 23 }
+ let f = concat_idents!(foo, bar);
+ assert_eq!(f(), 23);
+}
+```
diff --git a/src/doc/unstable-book/src/library-features/core-intrinsics.md b/src/doc/unstable-book/src/library-features/core-intrinsics.md
new file mode 100644
index 000000000..28ad3525e
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/core-intrinsics.md
@@ -0,0 +1,5 @@
+# `core_intrinsics`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/core-panic.md b/src/doc/unstable-book/src/library-features/core-panic.md
new file mode 100644
index 000000000..c19758840
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/core-panic.md
@@ -0,0 +1,5 @@
+# `core_panic`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/core-private-bignum.md b/src/doc/unstable-book/src/library-features/core-private-bignum.md
new file mode 100644
index 000000000..f85811c54
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/core-private-bignum.md
@@ -0,0 +1,5 @@
+# `core_private_bignum`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/core-private-diy-float.md b/src/doc/unstable-book/src/library-features/core-private-diy-float.md
new file mode 100644
index 000000000..8465921d6
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/core-private-diy-float.md
@@ -0,0 +1,5 @@
+# `core_private_diy_float`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/dec2flt.md b/src/doc/unstable-book/src/library-features/dec2flt.md
new file mode 100644
index 000000000..311ab4adc
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/dec2flt.md
@@ -0,0 +1,5 @@
+# `dec2flt`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/default-free-fn.md b/src/doc/unstable-book/src/library-features/default-free-fn.md
new file mode 100644
index 000000000..d40a27ddd
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/default-free-fn.md
@@ -0,0 +1,47 @@
+# `default_free_fn`
+
+The tracking issue for this feature is: [#73014]
+
+[#73014]: https://github.com/rust-lang/rust/issues/73014
+
+------------------------
+
+Adds a free `default()` function to the `std::default` module. This function
+just forwards to [`Default::default()`], but may remove repetition of the word
+"default" from the call site.
+
+[`Default::default()`]: https://doc.rust-lang.org/nightly/std/default/trait.Default.html#tymethod.default
+
+Here is an example:
+
+```rust
+#![feature(default_free_fn)]
+use std::default::default;
+
+#[derive(Default)]
+struct AppConfig {
+ foo: FooConfig,
+ bar: BarConfig,
+}
+
+#[derive(Default)]
+struct FooConfig {
+ foo: i32,
+}
+
+#[derive(Default)]
+struct BarConfig {
+ bar: f32,
+ baz: u8,
+}
+
+fn main() {
+ let options = AppConfig {
+ foo: default(),
+ bar: BarConfig {
+ bar: 10.1,
+ ..default()
+ },
+ };
+}
+```
diff --git a/src/doc/unstable-book/src/library-features/derive-clone-copy.md b/src/doc/unstable-book/src/library-features/derive-clone-copy.md
new file mode 100644
index 000000000..cc603911c
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/derive-clone-copy.md
@@ -0,0 +1,5 @@
+# `derive_clone_copy`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/derive-eq.md b/src/doc/unstable-book/src/library-features/derive-eq.md
new file mode 100644
index 000000000..68a275f54
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/derive-eq.md
@@ -0,0 +1,5 @@
+# `derive_eq`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/fd-read.md b/src/doc/unstable-book/src/library-features/fd-read.md
new file mode 100644
index 000000000..e78d4330a
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/fd-read.md
@@ -0,0 +1,5 @@
+# `fd_read`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/fd.md b/src/doc/unstable-book/src/library-features/fd.md
new file mode 100644
index 000000000..041424428
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/fd.md
@@ -0,0 +1,5 @@
+# `fd`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/flt2dec.md b/src/doc/unstable-book/src/library-features/flt2dec.md
new file mode 100644
index 000000000..15e62a3a7
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/flt2dec.md
@@ -0,0 +1,5 @@
+# `flt2dec`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/fmt-internals.md b/src/doc/unstable-book/src/library-features/fmt-internals.md
new file mode 100644
index 000000000..7cbe3c89a
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/fmt-internals.md
@@ -0,0 +1,5 @@
+# `fmt_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/fn-traits.md b/src/doc/unstable-book/src/library-features/fn-traits.md
new file mode 100644
index 000000000..29a8aecee
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/fn-traits.md
@@ -0,0 +1,35 @@
+# `fn_traits`
+
+The tracking issue for this feature is [#29625]
+
+See Also: [`unboxed_closures`](../language-features/unboxed-closures.md)
+
+[#29625]: https://github.com/rust-lang/rust/issues/29625
+
+----
+
+The `fn_traits` feature allows for implementation of the [`Fn*`] traits
+for creating custom closure-like types.
+
+[`Fn*`]: https://doc.rust-lang.org/std/ops/trait.Fn.html
+
+```rust
+#![feature(unboxed_closures)]
+#![feature(fn_traits)]
+
+struct Adder {
+ a: u32
+}
+
+impl FnOnce<(u32, )> for Adder {
+ type Output = u32;
+ extern "rust-call" fn call_once(self, b: (u32, )) -> Self::Output {
+ self.a + b.0
+ }
+}
+
+fn main() {
+ let adder = Adder { a: 3 };
+ assert_eq!(adder(2), 5);
+}
+```
diff --git a/src/doc/unstable-book/src/library-features/int-error-internals.md b/src/doc/unstable-book/src/library-features/int-error-internals.md
new file mode 100644
index 000000000..402e4fa5e
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/int-error-internals.md
@@ -0,0 +1,5 @@
+# `int_error_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/internal-output-capture.md b/src/doc/unstable-book/src/library-features/internal-output-capture.md
new file mode 100644
index 000000000..7e1241fce
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/internal-output-capture.md
@@ -0,0 +1,5 @@
+# `internal_output_capture`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/is-sorted.md b/src/doc/unstable-book/src/library-features/is-sorted.md
new file mode 100644
index 000000000..e3b7dc3b2
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/is-sorted.md
@@ -0,0 +1,11 @@
+# `is_sorted`
+
+The tracking issue for this feature is: [#53485]
+
+[#53485]: https://github.com/rust-lang/rust/issues/53485
+
+------------------------
+
+Add the methods `is_sorted`, `is_sorted_by` and `is_sorted_by_key` to `[T]`;
+add the methods `is_sorted`, `is_sorted_by` and `is_sorted_by_key` to
+`Iterator`.
diff --git a/src/doc/unstable-book/src/library-features/libstd-sys-internals.md b/src/doc/unstable-book/src/library-features/libstd-sys-internals.md
new file mode 100644
index 000000000..1b53faa8a
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/libstd-sys-internals.md
@@ -0,0 +1,5 @@
+# `libstd_sys_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/libstd-thread-internals.md b/src/doc/unstable-book/src/library-features/libstd-thread-internals.md
new file mode 100644
index 000000000..b682d12e7
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/libstd-thread-internals.md
@@ -0,0 +1,5 @@
+# `libstd_thread_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/print-internals.md b/src/doc/unstable-book/src/library-features/print-internals.md
new file mode 100644
index 000000000..a68557872
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/print-internals.md
@@ -0,0 +1,5 @@
+# `print_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/profiler-runtime-lib.md b/src/doc/unstable-book/src/library-features/profiler-runtime-lib.md
new file mode 100644
index 000000000..a01f1e73a
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/profiler-runtime-lib.md
@@ -0,0 +1,5 @@
+# `profiler_runtime_lib`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/rt.md b/src/doc/unstable-book/src/library-features/rt.md
new file mode 100644
index 000000000..007acc207
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/rt.md
@@ -0,0 +1,5 @@
+# `rt`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/sort-internals.md b/src/doc/unstable-book/src/library-features/sort-internals.md
new file mode 100644
index 000000000..6f2385e53
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/sort-internals.md
@@ -0,0 +1,5 @@
+# `sort_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/str-internals.md b/src/doc/unstable-book/src/library-features/str-internals.md
new file mode 100644
index 000000000..af8ef056d
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/str-internals.md
@@ -0,0 +1,5 @@
+# `str_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/test.md b/src/doc/unstable-book/src/library-features/test.md
new file mode 100644
index 000000000..c99584e5f
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/test.md
@@ -0,0 +1,158 @@
+# `test`
+
+The tracking issue for this feature is: None.
+
+------------------------
+
+The internals of the `test` crate are unstable, behind the `test` flag. The
+most widely used part of the `test` crate are benchmark tests, which can test
+the performance of your code. Let's make our `src/lib.rs` look like this
+(comments elided):
+
+```rust,no_run
+#![feature(test)]
+
+extern crate test;
+
+pub fn add_two(a: i32) -> i32 {
+ a + 2
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use test::Bencher;
+
+ #[test]
+ fn it_works() {
+ assert_eq!(4, add_two(2));
+ }
+
+ #[bench]
+ fn bench_add_two(b: &mut Bencher) {
+ b.iter(|| add_two(2));
+ }
+}
+```
+
+Note the `test` feature gate, which enables this unstable feature.
+
+We've imported the `test` crate, which contains our benchmarking support.
+We have a new function as well, with the `bench` attribute. Unlike regular
+tests, which take no arguments, benchmark tests take a `&mut Bencher`. This
+`Bencher` provides an `iter` method, which takes a closure. This closure
+contains the code we'd like to benchmark.
+
+We can run benchmark tests with `cargo bench`:
+
+```bash
+$ cargo bench
+ Compiling adder v0.0.1 (file:///home/steve/tmp/adder)
+ Running target/release/adder-91b3e234d4ed382a
+
+running 2 tests
+test tests::it_works ... ignored
+test tests::bench_add_two ... bench: 1 ns/iter (+/- 0)
+
+test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured
+```
+
+Our non-benchmark test was ignored. You may have noticed that `cargo bench`
+takes a bit longer than `cargo test`. This is because Rust runs our benchmark
+a number of times, and then takes the average. Because we're doing so little
+work in this example, we have a `1 ns/iter (+/- 0)`, but this would show
+the variance if there was one.
+
+Advice on writing benchmarks:
+
+
+* Move setup code outside the `iter` loop; only put the part you want to measure inside
+* Make the code do "the same thing" on each iteration; do not accumulate or change state
+* Make the outer function idempotent too; the benchmark runner is likely to run
+ it many times
+* Make the inner `iter` loop short and fast so benchmark runs are fast and the
+ calibrator can adjust the run-length at fine resolution
+* Make the code in the `iter` loop do something simple, to assist in pinpointing
+ performance improvements (or regressions)
+
+## Gotcha: optimizations
+
+There's another tricky part to writing benchmarks: benchmarks compiled with
+optimizations activated can be dramatically changed by the optimizer so that
+the benchmark is no longer benchmarking what one expects. For example, the
+compiler might recognize that some calculation has no external effects and
+remove it entirely.
+
+```rust,no_run
+#![feature(test)]
+
+extern crate test;
+use test::Bencher;
+
+#[bench]
+fn bench_xor_1000_ints(b: &mut Bencher) {
+ b.iter(|| {
+ (0..1000).fold(0, |old, new| old ^ new);
+ });
+}
+```
+
+gives the following results
+
+```text
+running 1 test
+test bench_xor_1000_ints ... bench: 0 ns/iter (+/- 0)
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
+```
+
+The benchmarking runner offers two ways to avoid this. Either, the closure that
+the `iter` method receives can return an arbitrary value which forces the
+optimizer to consider the result used and ensures it cannot remove the
+computation entirely. This could be done for the example above by adjusting the
+`b.iter` call to
+
+```rust
+# struct X;
+# impl X { fn iter<T, F>(&self, _: F) where F: FnMut() -> T {} } let b = X;
+b.iter(|| {
+ // Note lack of `;` (could also use an explicit `return`).
+ (0..1000).fold(0, |old, new| old ^ new)
+});
+```
+
+Or, the other option is to call the generic `test::black_box` function, which
+is an opaque "black box" to the optimizer and so forces it to consider any
+argument as used.
+
+```rust
+#![feature(test)]
+
+extern crate test;
+
+# fn main() {
+# struct X;
+# impl X { fn iter<T, F>(&self, _: F) where F: FnMut() -> T {} } let b = X;
+b.iter(|| {
+ let n = test::black_box(1000);
+
+ (0..n).fold(0, |a, b| a ^ b)
+})
+# }
+```
+
+Neither of these read or modify the value, and are very cheap for small values.
+Larger values can be passed indirectly to reduce overhead (e.g.
+`black_box(&huge_struct)`).
+
+Performing either of the above changes gives the following benchmarking results
+
+```text
+running 1 test
+test bench_xor_1000_ints ... bench: 131 ns/iter (+/- 3)
+
+test result: ok. 0 passed; 0 failed; 0 ignored; 1 measured
+```
+
+However, the optimizer can still modify a testcase in an undesirable manner
+even when using either of the above.
diff --git a/src/doc/unstable-book/src/library-features/thread-local-internals.md b/src/doc/unstable-book/src/library-features/thread-local-internals.md
new file mode 100644
index 000000000..e1cdcc339
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/thread-local-internals.md
@@ -0,0 +1,5 @@
+# `thread_local_internals`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/trace-macros.md b/src/doc/unstable-book/src/library-features/trace-macros.md
new file mode 100644
index 000000000..41aa286e6
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/trace-macros.md
@@ -0,0 +1,39 @@
+# `trace_macros`
+
+The tracking issue for this feature is [#29598].
+
+[#29598]: https://github.com/rust-lang/rust/issues/29598
+
+------------------------
+
+With `trace_macros` you can trace the expansion of macros in your code.
+
+## Examples
+
+```rust
+#![feature(trace_macros)]
+
+fn main() {
+ trace_macros!(true);
+ println!("Hello, Rust!");
+ trace_macros!(false);
+}
+```
+
+The `cargo build` output:
+
+```txt
+note: trace_macro
+ --> src/main.rs:5:5
+ |
+5 | println!("Hello, Rust!");
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^
+ |
+ = note: expanding `println! { "Hello, Rust!" }`
+ = note: to `print ! ( concat ! ( "Hello, Rust!" , "\n" ) )`
+ = note: expanding `print! { concat ! ( "Hello, Rust!" , "\n" ) }`
+ = note: to `$crate :: io :: _print ( format_args ! ( concat ! ( "Hello, Rust!" , "\n" ) )
+ )`
+
+ Finished dev [unoptimized + debuginfo] target(s) in 0.60 secs
+```
diff --git a/src/doc/unstable-book/src/library-features/update-panic-count.md b/src/doc/unstable-book/src/library-features/update-panic-count.md
new file mode 100644
index 000000000..d315647ba
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/update-panic-count.md
@@ -0,0 +1,5 @@
+# `update_panic_count`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/windows-c.md b/src/doc/unstable-book/src/library-features/windows-c.md
new file mode 100644
index 000000000..3f833eb3d
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/windows-c.md
@@ -0,0 +1,5 @@
+# `windows_c`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/windows-handle.md b/src/doc/unstable-book/src/library-features/windows-handle.md
new file mode 100644
index 000000000..f47a84250
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/windows-handle.md
@@ -0,0 +1,5 @@
+# `windows_handle`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/windows-net.md b/src/doc/unstable-book/src/library-features/windows-net.md
new file mode 100644
index 000000000..174960d4f
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/windows-net.md
@@ -0,0 +1,5 @@
+# `windows_net`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/library-features/windows-stdio.md b/src/doc/unstable-book/src/library-features/windows-stdio.md
new file mode 100644
index 000000000..4d3614423
--- /dev/null
+++ b/src/doc/unstable-book/src/library-features/windows-stdio.md
@@ -0,0 +1,5 @@
+# `windows_stdio`
+
+This feature is internal to the Rust compiler and is not intended for general use.
+
+------------------------
diff --git a/src/doc/unstable-book/src/the-unstable-book.md b/src/doc/unstable-book/src/the-unstable-book.md
new file mode 100644
index 000000000..554c52c3c
--- /dev/null
+++ b/src/doc/unstable-book/src/the-unstable-book.md
@@ -0,0 +1,22 @@
+# The Unstable Book
+
+Welcome to the Unstable Book! This book consists of a number of chapters,
+each one organized by a "feature flag." That is, when using an unstable
+feature of Rust, you must use a flag, like this:
+
+```rust
+#![feature(box_syntax)]
+
+fn main() {
+ let five = box 5;
+}
+```
+
+The `box_syntax` feature [has a chapter][box] describing how to use it.
+
+[box]: language-features/box-syntax.md
+
+Because this documentation relates to unstable features, we make no guarantees
+that what is contained here is accurate or up to date. It's developed on a
+best-effort basis. Each page will have a link to its tracking issue with the
+latest developments; you might want to check those as well.
diff --git a/src/doc/version_info.html.template b/src/doc/version_info.html.template
new file mode 100644
index 000000000..7215e4f13
--- /dev/null
+++ b/src/doc/version_info.html.template
@@ -0,0 +1,6 @@
+<div id="versioninfo">
+ <img src="https://www.rust-lang.org/logos/rust-logo-32x32-blk.png" width="32" height="32" alt="Rust logo"><br>
+ <span class="white-sticker"><a href="https://www.rust-lang.org">Rust</a> VERSION</span><br>
+ <a href="https://github.com/rust-lang/rust/commit/STAMP"
+ class="hash white-sticker">SHORT_HASH</a>
+</div>